ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGZiMjE5MGMuLmRlNjM0NGUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzcsNiArMzcsNyBAQAogdGFncwogVEFHUwogdm1saW51eAordm1saW51egogU3lzdGVtLm1hcAogTW9kdWxlLm1hcmtlcnMKIE1vZHVsZS5zeW12ZXJzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKaW5kZXggZGViNmI0OC4uYTA3YzBmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgpAQCAtMjEsMjUgKzIxLDI3IEBACiBEZXNjcmlwdGlvbjoKIAkJRWFjaCBVU0IgZGV2aWNlIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWxlIG5hbWVkCiAJCXBvd2VyL2xldmVsLiAgVGhpcyBmaWxlIGhvbGRzIGEgcG93ZXItbGV2ZWwgc2V0dGluZyBmb3IKLQkJdGhlIGRldmljZSwgb25lIG9mICJvbiIsICJhdXRvIiwgb3IgInN1c3BlbmQiLgorCQl0aGUgZGV2aWNlLCBlaXRoZXIgIm9uIiBvciAiYXV0byIuCiAKIAkJIm9uIiBtZWFucyB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGFsbG93ZWQgdG8gYXV0b3N1c3BlbmQsCiAJCWFsdGhvdWdoIG5vcm1hbCBzdXNwZW5kcyBmb3Igc3lzdGVtIHNsZWVwIHdpbGwgc3RpbGwKIAkJYmUgaG9ub3JlZC4gICJhdXRvIiBtZWFucyB0aGUgZGV2aWNlIHdpbGwgYXV0b3N1c3BlbmQKIAkJYW5kIGF1dG9yZXN1bWUgaW4gdGhlIHVzdWFsIG1hbm5lciwgYWNjb3JkaW5nIHRvIHRoZQotCQljYXBhYmlsaXRpZXMgb2YgaXRzIGRyaXZlci4gICJzdXNwZW5kIiBtZWFucyB0aGUgZGV2aWNlCi0JCWlzIGZvcmNlZCBpbnRvIGEgc3VzcGVuZGVkIHN0YXRlIGFuZCBpdCB3aWxsIG5vdCBhdXRvcmVzdW1lCi0JCWluIHJlc3BvbnNlIHRvIEkvTyByZXF1ZXN0cy4gIEhvd2V2ZXIgcmVtb3RlLXdha2V1cCByZXF1ZXN0cwotCQlmcm9tIHRoZSBkZXZpY2UgbWF5IHN0aWxsIGJlIGVuYWJsZWQgKHRoZSByZW1vdGUtd2FrZXVwCi0JCXNldHRpbmcgaXMgY29udHJvbGxlZCBzZXBhcmF0ZWx5IGJ5IHRoZSBwb3dlci93YWtldXAKLQkJYXR0cmlidXRlKS4KKwkJY2FwYWJpbGl0aWVzIG9mIGl0cyBkcml2ZXIuCiAKIAkJRHVyaW5nIG5vcm1hbCB1c2UsIGRldmljZXMgc2hvdWxkIGJlIGxlZnQgaW4gdGhlICJhdXRvIgotCQlsZXZlbC4gIFRoZSBvdGhlciBsZXZlbHMgYXJlIG1lYW50IGZvciBhZG1pbmlzdHJhdGl2ZSB1c2VzLgorCQlsZXZlbC4gIFRoZSAib24iIGxldmVsIGlzIG1lYW50IGZvciBhZG1pbmlzdHJhdGl2ZSB1c2VzLgogCQlJZiB5b3Ugd2FudCB0byBzdXNwZW5kIGEgZGV2aWNlIGltbWVkaWF0ZWx5IGJ1dCBsZWF2ZSBpdAogCQlmcmVlIHRvIHdha2UgdXAgaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLCB5b3Ugc2hvdWxkCiAJCXdyaXRlICIwIiB0byBwb3dlci9hdXRvc3VzcGVuZC4KIAorCQlEZXZpY2Ugbm90IGNhcGFibGUgb2YgcHJvcGVyIHN1c3BlbmQgYW5kIHJlc3VtZSBzaG91bGQgYmUKKwkJbGVmdCBpbiB0aGUgIm9uIiBsZXZlbC4gIEFsdGhvdWdoIHRoZSBVU0Igc3BlYyByZXF1aXJlcworCQlkZXZpY2VzIHRvIHN1cHBvcnQgc3VzcGVuZC9yZXN1bWUsIG1hbnkgb2YgdGhlbSBkbyBub3QuCisJCUluIGZhY3Qgc28gbWFueSBkb24ndCB0aGF0IGJ5IGRlZmF1bHQsIHRoZSBVU0IgY29yZQorCQlpbml0aWFsaXplcyBhbGwgbm9uLWh1YiBkZXZpY2VzIGluIHRoZSAib24iIGxldmVsLiAgU29tZQorCQlkcml2ZXJzIG1heSBjaGFuZ2UgdGhpcyBzZXR0aW5nIHdoZW4gdGhleSBhcmUgYm91bmQuCisKIFdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy8uLi4vcG93ZXIvcGVyc2lzdAogRGF0ZToJCU1heSAyMDA3CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCmluZGV4IGY1MDhhOGEuLjVlN2Q4NGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbApAQCAtMTc0LDcgKzE3NCw3IEBACiAJCTwvcGFyYT4KIAkJPHByb2dyYW1saXN0aW5nPgogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYm9hcmRfbXRkOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKIAkJPC9wcm9ncmFtbGlzdGluZz4KIAkJPHBhcmE+CiAJCQlTdGF0aWMgZXhhbXBsZQpAQCAtMTgyLDcgKzE4Miw3IEBACiAJCTxwcm9ncmFtbGlzdGluZz4KIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gYm9hcmRfbXRkOwogc3RhdGljIHN0cnVjdCBuYW5kX2NoaXAgYm9hcmRfY2hpcDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJhc2VhZGRyOworc3RhdGljIHZvaWQgX19pb21lbSAqYmFzZWFkZHI7CiAJCTwvcHJvZ3JhbWxpc3Rpbmc+CiAJPC9zZWN0MT4KIAk8c2VjdDEgaWQ9IlBhcnRpdGlvbl9kZWZpbmVzIj4KQEAgLTI4Myw4ICsyODMsOCBAQAogCX0KIAogCS8qIG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCi0JYmFzZWFkZHIgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKENISVBfUEhZU0lDQUxfQUREUkVTUywgMTAyNCk7Ci0JaWYoIWJhc2VhZGRyKXsKKwliYXNlYWRkciA9IGlvcmVtYXAoQ0hJUF9QSFlTSUNBTF9BRERSRVNTLCAxMDI0KTsKKwlpZiAoIWJhc2VhZGRyKSB7CiAJCXByaW50aygiSW9yZW1hcCB0byBhY2Nlc3MgTkFORCBjaGlwIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0X210ZDsKQEAgLTMxNiw3ICszMTYsNyBAQAogCWdvdG8gb3V0OwogCiBvdXRfaW9yOgotCWlvdW5tYXAoKHZvaWQgKiliYXNlYWRkcik7CisJaW91bm1hcChiYXNlYWRkcik7CiBvdXRfbXRkOgogCWtmcmVlIChib2FyZF9tdGQpOwogb3V0OgpAQCAtMzQxLDcgKzM0MSw3IEBACiAJbmFuZF9yZWxlYXNlIChib2FyZF9tdGQpOwogCiAJLyogdW5tYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwotCWlvdW5tYXAoKHZvaWQgKiliYXNlYWRkcik7CisJaW91bm1hcChiYXNlYWRkcik7CiAJCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAlrZnJlZSAoYm9hcmRfbXRkKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL0lPLW1hcHBpbmcudHh0CmluZGV4IDc4YTQ0MDYuLjFiNWFhMTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9JTy1tYXBwaW5nLnR4dApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJICogYWNjZXNzIG9ubHkgdGhlIDY0MGstMU1CIGFyZWEsIHNvIGFueXRoaW5nIGVsc2UKIAkgKiBoYXMgdG8gYmUgcmVtYXBwZWQuCiAJICovCi0JY2hhciAqIGJhc2VwdHIgPSBpb3JlbWFwKDB4RkMwMDAwMDAsIDEwMjQqMTAyNCk7CisJdm9pZCBfX2lvbWVtICpiYXNlcHRyID0gaW9yZW1hcCgweEZDMDAwMDAwLCAxMDI0KjEwMjQpOwogCiAJLyogd3JpdGUgYSAnQScgdG8gdGhlIG9mZnNldCAxMCBvZiB0aGUgYXJlYSAqLwogCXdyaXRlYignQScsYmFzZXB0cisxMCk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1tYXBwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9ibG9jay8wMC1JTkRFWAppbmRleCA5NjFhMDUxLi5hNDA2Mjg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svMDAtSU5ERVgKQEAgLTEsNyArMSw1IEBACiAwMC1JTkRFWAogCS0gVGhpcyBmaWxlCi1hcy1pb3NjaGVkLnR4dAotCS0gQW50aWNpcGF0b3J5IElPIHNjaGVkdWxlcgogYmFycmllci50eHQKIAktIEkvTyBCYXJyaWVycwogYmlvZG9jLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOGI3MmIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi1BbnRpY2lwYXRvcnkgSU8gc2NoZWR1bGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1OaWNrIFBpZ2dpbiA8cGlnZ2luQGN5YmVyb25lLmNvbS5hdT4gICAgMTMgU2VwIDIwMDMKLQotQXR0ZW50aW9uISBEYXRhYmFzZSBzZXJ2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHVzaW5nICJUQ1EiIGRpc2tzIHNob3VsZAotaW52ZXN0aWdhdGUgcGVyZm9ybWFuY2Ugd2l0aCB0aGUgJ2RlYWRsaW5lJyBJTyBzY2hlZHVsZXIuIEFueSBzeXN0ZW0gd2l0aCBoaWdoCi1kaXNrIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cyBzaG91bGQgZG8gc28sIGluIGZhY3QuCi0KLUlmIHlvdSBzZWUgdW51c3VhbCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgeW91ciBkaXNrIHN5c3RlbXMsIG9yIHlvdQotc2VlIGJpZyBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB2ZXJzdXMgdGhlIGRlYWRsaW5lIHNjaGVkdWxlciwgcGxlYXNlIGVtYWlsCi1tZS4gRGF0YWJhc2UgdXNlcnMgZG9uJ3QgYm90aGVyIHVubGVzcyB5b3UncmUgd2lsbGluZyB0byB0ZXN0IGEgbG90IG9mIHBhdGNoZXMKLWZyb20gbWUgOykgaXRzIGEga25vd24gaXNzdWUuCi0KLUFsc28sIHVzZXJzIHdpdGggaGFyZHdhcmUgUkFJRCBjb250cm9sbGVycywgZG9pbmcgc3RyaXBpbmcsIG1heSBmaW5kCi1oaWdobHkgdmFyaWFibGUgcGVyZm9ybWFuY2UgcmVzdWx0cyB3aXRoIHVzaW5nIHRoZSBhcy1pb3NjaGVkLiBUaGUKLWFzLWlvc2NoZWQgYW50aWNpcGF0b3J5IGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBub3Rpb24gdGhhdCBhIGRpc2sKLWRldmljZSBoYXMgb25seSBvbmUgcGh5c2ljYWwgc2Vla2luZyBoZWFkLiAgQSBzdHJpcGVkIFJBSUQgY29udHJvbGxlcgotYWN0dWFsbHkgaGFzIGEgaGVhZCBmb3IgZWFjaCBwaHlzaWNhbCBkZXZpY2UgaW4gdGhlIGxvZ2ljYWwgUkFJRCBkZXZpY2UuCi0KLUhvd2V2ZXIsIHNldHRpbmcgdGhlIGFudGljX2V4cGlyZSAoc2VlIHR1bmFibGUgcGFyYW1ldGVycyBiZWxvdykgcHJvZHVjZXMKLXZlcnkgc2ltaWxhciBiZWhhdmlvciB0byB0aGUgZGVhZGxpbmUgSU8gc2NoZWR1bGVyLgotCi1TZWxlY3RpbmcgSU8gc2NoZWR1bGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyIHRvIERvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dCBmb3IgaW5mb3JtYXRpb24gb24KLXNlbGVjdGluZyBhbiBpbyBzY2hlZHVsZXIgb24gYSBwZXItZGV2aWNlIGJhc2lzLgotCi1BbnRpY2lwYXRvcnkgSU8gc2NoZWR1bGVyIFBvbGljaWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgYXMtaW9zY2hlZCBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIHNldmVyYWwgbGF5ZXJzIG9mIHBvbGljaWVzCi10byBkZXRlcm1pbmUgd2hlbiBhbiBJTyByZXF1ZXN0IGlzIGRpc3BhdGNoZWQgdG8gdGhlIGRpc2sgY29udHJvbGxlci4KLUhlcmUgYXJlIHRoZSBwb2xpY2llcyBvdXRsaW5lZCwgaW4gb3JkZXIgb2YgYXBwbGljYXRpb24uCi0KLTEuIG9uZS13YXkgRWxldmF0b3IgYWxnb3JpdGhtLgotCi1UaGUgZWxldmF0b3IgYWxnb3JpdGhtIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIGRlYWRsaW5lIHNjaGVkdWxlciwgd2l0aAotdGhlIGFkZGl0aW9uIHRoYXQgaXQgYWxsb3dzIGxpbWl0ZWQgYmFja3dhcmQgbW92ZW1lbnQgb2YgdGhlIGVsZXZhdG9yCi0oaS5lLiBzZWVrcyBiYWNrd2FyZHMpLiAgQSBzZWVrIGJhY2t3YXJkcyBjYW4gb2NjdXIgd2hlbiBjaG9vc2luZyBiZXR3ZWVuCi10d28gSU8gcmVxdWVzdHMgd2hlcmUgb25lIGlzIGJlaGluZCB0aGUgZWxldmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLCBhbmQKLXRoZSBvdGhlciBpcyBpbiBmcm9udCBvZiB0aGUgZWxldmF0b3IncyBwb3NpdGlvbi4gSWYgdGhlIHNlZWsgZGlzdGFuY2UgdG8KLXRoZSByZXF1ZXN0IGluIGJhY2sgb2YgdGhlIGVsZXZhdG9yIGlzIGxlc3MgdGhhbiBoYWxmIHRoZSBzZWVrIGRpc3RhbmNlIHRvCi10aGUgcmVxdWVzdCBpbiBmcm9udCBvZiB0aGUgZWxldmF0b3IsIHRoZW4gdGhlIHJlcXVlc3QgaW4gYmFjayBjYW4gYmUgY2hvc2VuLgotQmFja3dhcmQgc2Vla3MgYXJlIGFsc28gbGltaXRlZCB0byBhIG1heGltdW0gb2YgTUFYQkFDSyAoMTAyNCoxMDI0KSBzZWN0b3JzLgotVGhpcyBmYXZvcnMgZm9yd2FyZCBtb3ZlbWVudCBvZiB0aGUgZWxldmF0b3IsIHdoaWxlIGFsbG93aW5nIG9wcG9ydHVuaXN0aWMKLSJzaG9ydCIgYmFja3dhcmQgc2Vla3MuCi0KLTIuIEZJRk8gZXhwaXJhdGlvbiB0aW1lcyBmb3IgcmVhZHMgYW5kIGZvciB3cml0ZXMuCi0KLVRoaXMgaXMgYWdhaW4gdmVyeSBzaW1pbGFyIHRvIHRoZSBkZWFkbGluZSBJTyBzY2hlZHVsZXIuICBUaGUgZXhwaXJhdGlvbgotdGltZXMgZm9yIHJlcXVlc3RzIG9uIHRoZXNlIGxpc3RzIGlzIHR1bmFibGUgdXNpbmcgdGhlIHBhcmFtZXRlcnMgcmVhZF9leHBpcmUKLWFuZCB3cml0ZV9leHBpcmUgZGlzY3Vzc2VkIGJlbG93LiAgV2hlbiBhIHJlYWQgb3IgYSB3cml0ZSBleHBpcmVzIGluIHRoaXMgd2F5LAotdGhlIElPIHNjaGVkdWxlciB3aWxsIGludGVycnVwdCBpdHMgY3VycmVudCBlbGV2YXRvciBzd2VlcCBvciByZWFkIGFudGljaXBhdGlvbgotdG8gc2VydmljZSB0aGUgZXhwaXJlZCByZXF1ZXN0LgotCi0zLiBSZWFkIGFuZCB3cml0ZSByZXF1ZXN0IGJhdGNoaW5nCi0KLUEgYmF0Y2ggaXMgYSBjb2xsZWN0aW9uIG9mIHJlYWQgcmVxdWVzdHMgb3IgYSBjb2xsZWN0aW9uIG9mIHdyaXRlCi1yZXF1ZXN0cy4gIFRoZSBhcyBzY2hlZHVsZXIgYWx0ZXJuYXRlcyBkaXNwYXRjaGluZyByZWFkIGFuZCB3cml0ZSBiYXRjaGVzCi10byB0aGUgZHJpdmVyLiAgSW4gdGhlIGNhc2UgYSByZWFkIGJhdGNoLCB0aGUgc2NoZWR1bGVyIHN1Ym1pdHMgcmVhZAotcmVxdWVzdHMgdG8gdGhlIGRyaXZlciBhcyBsb25nIGFzIHRoZXJlIGFyZSByZWFkIHJlcXVlc3RzIHRvIHN1Ym1pdCwgYW5kCi10aGUgcmVhZCBiYXRjaCB0aW1lIGxpbWl0IGhhcyBub3QgYmVlbiBleGNlZWRlZCAocmVhZF9iYXRjaF9leHBpcmUpLgotVGhlIHJlYWQgYmF0Y2ggdGltZSBsaW1pdCBiZWdpbnMgY291bnRpbmcgZG93biBvbmx5IHdoZW4gdGhlcmUgYXJlCi1jb21wZXRpbmcgd3JpdGUgcmVxdWVzdHMgcGVuZGluZy4KLQotSW4gdGhlIGNhc2Ugb2YgYSB3cml0ZSBiYXRjaCwgdGhlIHNjaGVkdWxlciBzdWJtaXRzIHdyaXRlIHJlcXVlc3RzIHRvCi10aGUgZHJpdmVyIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHdyaXRlIHJlcXVlc3RzIGF2YWlsYWJsZSwgYW5kIHRoZQotd3JpdGUgYmF0Y2ggdGltZSBsaW1pdCBoYXMgbm90IGJlZW4gZXhjZWVkZWQgKHdyaXRlX2JhdGNoX2V4cGlyZSkuCi1Ib3dldmVyLCB0aGUgbGVuZ3RoIG9mIHdyaXRlIGJhdGNoZXMgd2lsbCBiZSBncmFkdWFsbHkgc2hvcnRlbmVkCi13aGVuIHJlYWQgYmF0Y2hlcyBmcmVxdWVudGx5IGV4Y2VlZCB0aGVpciB0aW1lIGxpbWl0LgotCi1XaGVuIGNoYW5naW5nIGJldHdlZW4gYmF0Y2ggdHlwZXMsIHRoZSBzY2hlZHVsZXIgd2FpdHMgZm9yIGFsbCByZXF1ZXN0cwotZnJvbSB0aGUgcHJldmlvdXMgYmF0Y2ggdG8gY29tcGxldGUgYmVmb3JlIHNjaGVkdWxpbmcgcmVxdWVzdHMgZm9yIHRoZQotbmV4dCBiYXRjaC4KLQotVGhlIHJlYWQgYW5kIHdyaXRlIGZpZm8gZXhwaXJhdGlvbiB0aW1lcyBkZXNjcmliZWQgaW4gcG9saWN5IDIgYWJvdmUKLWFyZSBjaGVja2VkIG9ubHkgd2hlbiBpbiBzY2hlZHVsaW5nIElPIG9mIGEgYmF0Y2ggZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0ocmVhZC93cml0ZSkgdHlwZS4gIFNvIGZvciBleGFtcGxlLCB0aGUgcmVhZCBGSUZPIHRpbWVvdXQgdmFsdWVzIGFyZQotdGVzdGVkIG9ubHkgZHVyaW5nIHJlYWQgYmF0Y2hlcy4gIExpa2V3aXNlLCB0aGUgd3JpdGUgRklGTyB0aW1lb3V0Ci12YWx1ZXMgYXJlIHRlc3RlZCBvbmx5IGR1cmluZyB3cml0ZSBiYXRjaGVzLiAgRm9yIHRoaXMgcmVhc29uLAotaXQgaXMgZ2VuZXJhbGx5IG5vdCByZWNvbW1lbmRlZCBmb3IgdGhlIHJlYWQgYmF0Y2ggdGltZQotdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHdyaXRlIGV4cGlyYXRpb24gdGltZSwgbm9yIGZvciB0aGUgd3JpdGUgYmF0Y2gKLXRpbWUgdG8gZXhjZWVkIHRoZSByZWFkIGV4cGlyYXRpb24gdGltZSAoc2VlIHR1bmFibGUgcGFyYW1ldGVycyBiZWxvdykuCi0KLVdoZW4gdGhlIElPIHNjaGVkdWxlciBjaGFuZ2VzIGZyb20gYSByZWFkIHRvIGEgd3JpdGUgYmF0Y2gsCi1pdCBiZWdpbnMgdGhlIGVsZXZhdG9yIGZyb20gdGhlIHJlcXVlc3QgdGhhdCBpcyBvbiB0aGUgaGVhZCBvZiB0aGUKLXdyaXRlIGV4cGlyYXRpb24gRklGTy4gIExpa2V3aXNlLCB3aGVuIGNoYW5naW5nIGZyb20gYSB3cml0ZSBiYXRjaCB0bwotYSByZWFkIGJhdGNoLCBzY2hlZHVsZXIgYmVnaW5zIHRoZSBlbGV2YXRvciBmcm9tIHRoZSBmaXJzdCBlbnRyeQotb24gdGhlIHJlYWQgZXhwaXJhdGlvbiBGSUZPLgotCi00LiBSZWFkIGFudGljaXBhdGlvbi4KLQotUmVhZCBhbnRpY2lwYXRpb24gb2NjdXJzIG9ubHkgd2hlbiBzY2hlZHVsaW5nIGEgcmVhZCBiYXRjaC4KLVRoaXMgaW1wbGVtZW50YXRpb24gb2YgcmVhZCBhbnRpY2lwYXRpb24gYWxsb3dzIG9ubHkgb25lIHJlYWQgcmVxdWVzdAotdG8gYmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyIGF0IGEgdGltZS4gIEluCi1jb250cmFzdCwgbWFueSB3cml0ZSByZXF1ZXN0cyBtYXkgYmUgZGlzcGF0Y2hlZCB0byB0aGUgZGlzayBjb250cm9sbGVyCi1hdCBhIHRpbWUgZHVyaW5nIGEgd3JpdGUgYmF0Y2guICBJdCBpcyB0aGlzIGNoYXJhY3RlcmlzdGljIHRoYXQgY2FuIG1ha2UKLXRoZSBhbnRpY2lwYXRvcnkgc2NoZWR1bGVyIHBlcmZvcm0gYW5vbWFsb3VzbHkgd2l0aCBjb250cm9sbGVycyBzdXBwb3J0aW5nCi1UQ1EsIG9yIHdpdGggaGFyZHdhcmUgc3RyaXBlZCBSQUlEIGRldmljZXMuIFNldHRpbmcgdGhlIGFudGljX2V4cGlyZQotcXVldWUgcGFyYW1ldGVyIChzZWUgYmVsb3cpIHRvIHplcm8gZGlzYWJsZXMgdGhpcyBiZWhhdmlvciwgYW5kIHRoZSAKLWFudGljaXBhdG9yeSBzY2hlZHVsZXIgYmVoYXZlcyBlc3NlbnRpYWxseSBsaWtlIHRoZSBkZWFkbGluZSBzY2hlZHVsZXIuCi0KLVdoZW4gcmVhZCBhbnRpY2lwYXRpb24gaXMgZW5hYmxlZCAoYW50aWNfZXhwaXJlIGlzIG5vdCB6ZXJvKSwgcmVhZHMKLWFyZSBkaXNwYXRjaGVkIHRvIHRoZSBkaXNrIGNvbnRyb2xsZXIgb25lIGF0IGEgdGltZS4KLUF0IHRoZSBlbmQgb2YgZWFjaCByZWFkIHJlcXVlc3QsIHRoZSBJTyBzY2hlZHVsZXIgZXhhbWluZXMgaXRzIG5leHQKLWNhbmRpZGF0ZSByZWFkIHJlcXVlc3QgZnJvbSBpdHMgc29ydGVkIHJlYWQgbGlzdC4gIElmIHRoYXQgbmV4dCByZXF1ZXN0Ci1pcyBmcm9tIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIHJlcXVlc3QgdGhhdCBqdXN0IGNvbXBsZXRlZCwKLW9yIGlmIHRoZSBuZXh0IHJlcXVlc3QgaW4gdGhlIHF1ZXVlIGlzICJ2ZXJ5IGNsb3NlIiB0byB0aGUKLWp1c3QgY29tcGxldGVkIHJlcXVlc3QsIGl0IGlzIGRpc3BhdGNoZWQgaW1tZWRpYXRlbHkuICBPdGhlcndpc2UsCi1zdGF0aXN0aWNzIChhdmVyYWdlIHRoaW5rIHRpbWUsIGF2ZXJhZ2Ugc2VlayBkaXN0YW5jZSkgb24gdGhlIHByb2Nlc3MKLXRoYXQgc3VibWl0dGVkIHRoZSBqdXN0IGNvbXBsZXRlZCByZXF1ZXN0IGFyZSBleGFtaW5lZC4gIElmIGl0IHNlZW1zCi1saWtlbHkgdGhhdCB0aGF0IHByb2Nlc3Mgd2lsbCBzdWJtaXQgYW5vdGhlciByZXF1ZXN0IHNvb24sIGFuZCB0aGF0Ci1yZXF1ZXN0IGlzIGxpa2VseSB0byBiZSBuZWFyIHRoZSBqdXN0IGNvbXBsZXRlZCByZXF1ZXN0LCB0aGVuIHRoZSBJTwotc2NoZWR1bGVyIHdpbGwgc3RvcCBkaXNwYXRjaGluZyBtb3JlIHJlYWQgcmVxdWVzdHMgZm9yIHVwIHRvIChhbnRpY19leHBpcmUpCi1taWxsaXNlY29uZHMsIGhvcGluZyB0aGF0IHByb2Nlc3Mgd2lsbCBzdWJtaXQgYSBuZXcgcmVxdWVzdCBuZWFyIHRoZSBvbmUKLXRoYXQganVzdCBjb21wbGV0ZWQuICBJZiBzdWNoIGEgcmVxdWVzdCBpcyBtYWRlLCB0aGVuIGl0IGlzIGRpc3BhdGNoZWQKLWltbWVkaWF0ZWx5LiAgSWYgdGhlIGFudGljX2V4cGlyZSB3YWl0IHRpbWUgZXhwaXJlcywgdGhlbiB0aGUgSU8gc2NoZWR1bGVyCi13aWxsIGRpc3BhdGNoIHRoZSBuZXh0IHJlYWQgcmVxdWVzdCBmcm9tIHRoZSBzb3J0ZWQgcmVhZCBxdWV1ZS4KLQotVG8gZGVjaWRlIHdoZXRoZXIgYW4gYW50aWNpcGF0b3J5IHdhaXQgaXMgd29ydGh3aGlsZSwgdGhlIHNjaGVkdWxlcgotbWFpbnRhaW5zIHN0YXRpc3RpY3MgZm9yIGVhY2ggcHJvY2VzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUKLW1lYW4gInRoaW5rIHRpbWUiICh0aGUgdGltZSBiZXR3ZWVuIHJlYWQgcmVxdWVzdHMpLCBhbmQgbWVhbiBzZWVrCi1kaXN0YW5jZSBmb3IgdGhhdCBwcm9jZXNzLiAgT25lIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlc2Ugc3RhdGlzdGljcwotYXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHByb2Nlc3MsIGJ1dCB0aG9zZSBzdGF0aXN0aWNzIGFyZSBub3QgYXNzb2NpYXRlZAotd2l0aCBhIHNwZWNpZmljIElPIGRldmljZS4gIFNvIGZvciBleGFtcGxlLCBpZiBhIHByb2Nlc3MgaXMgZG9pbmcgSU8KLW9uIHNldmVyYWwgZmlsZSBzeXN0ZW1zIG9uIHNlcGFyYXRlIGRldmljZXMsIHRoZSBzdGF0aXN0aWNzIHdpbGwgYmUKLWEgY29tYmluYXRpb24gb2YgSU8gYmVoYXZpb3IgZnJvbSBhbGwgdGhvc2UgZGV2aWNlcy4KLQotCi1UdW5pbmcgdGhlIGFudGljaXBhdG9yeSBJTyBzY2hlZHVsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2hlbiB1c2luZyAnYXMnLCB0aGUgYW50aWNpcGF0b3J5IElPIHNjaGVkdWxlciB0aGVyZSBhcmUgNSBwYXJhbWV0ZXJzIHVuZGVyCi0vc3lzL2Jsb2NrLyovcXVldWUvaW9zY2hlZC8uIEFsbCBhcmUgdW5pdHMgb2YgbWlsbGlzZWNvbmRzLgotCi1UaGUgcGFyYW1ldGVycyBhcmU6Ci0qIHJlYWRfZXhwaXJlCi0gICAgQ29udHJvbHMgaG93IGxvbmcgdW50aWwgYSByZWFkIHJlcXVlc3QgYmVjb21lcyAiZXhwaXJlZCIuIEl0IGFsc28gY29udHJvbHMgdGhlCi0gICAgaW50ZXJ2YWwgYmV0d2VlbiB3aGljaCBleHBpcmVkIHJlcXVlc3RzIGFyZSBzZXJ2ZWQsIHNvIHNldCB0byA1MCwgYSByZXF1ZXN0Ci0gICAgbWlnaHQgdGFrZSBhbnl3aGVyZSA8IDEwMG1zIHRvIGJlIHNlcnZpY2VkIF9pZl8gaXQgaXMgdGhlIG5leHQgb24gdGhlCi0gICAgZXhwaXJlZCBsaXN0LiBPYnZpb3VzbHkgcmVxdWVzdCBleHBpcmF0aW9uIHN0cmF0ZWdpZXMgd29uJ3QgbWFrZSB0aGUgZGlzawotICAgIGdvIGZhc3Rlci4gVGhlIHJlc3VsdCBiYXNpY2FsbHkgZXF1YXRlcyB0byB0aGUgdGltZXNsaWNlIGEgc2luZ2xlIHJlYWRlcgotICAgIGdldHMgaW4gdGhlIHByZXNlbmNlIG9mIG90aGVyIElPLiAxMDAqKChzZWVrIHRpbWUgLyByZWFkX2V4cGlyZSkgKyAxKSBpcwotICAgIHZlcnkgcm91Z2hseSB0aGUgJSBzdHJlYW1pbmcgcmVhZCBlZmZpY2llbmN5IHlvdXIgZGlzayBzaG91bGQgZ2V0IHdpdGgKLSAgICBtdWx0aXBsZSByZWFkZXJzLgotCi0qIHJlYWRfYmF0Y2hfZXhwaXJlCi0gICAgQ29udHJvbHMgaG93IG11Y2ggdGltZSBhIGJhdGNoIG9mIHJlYWRzIGlzIGdpdmVuIGJlZm9yZSBwZW5kaW5nIHdyaXRlcyBhcmUKLSAgICBzZXJ2ZWQuIEEgaGlnaGVyIHZhbHVlIGlzIG1vcmUgZWZmaWNpZW50LiBUaGlzIG1pZ2h0IGJlIHNldCBiZWxvdyByZWFkX2V4cGlyZQotICAgIGlmIHdyaXRlcyBhcmUgdG8gYmUgZ2l2ZW4gaGlnaGVyIHByaW9yaXR5IHRoYW4gcmVhZHMsIGJ1dCByZWFkcyBhcmUgdG8gYmUKLSAgICBhcyBlZmZpY2llbnQgYXMgcG9zc2libGUgd2hlbiB0aGVyZSBhcmUgbm8gd3JpdGVzLiBHZW5lcmFsbHkgdGhvdWdoLCBpdAotICAgIHNob3VsZCBiZSBzb21lIG11bHRpcGxlIG9mIHJlYWRfZXhwaXJlLgotCi0qIHdyaXRlX2V4cGlyZSwgYW5kCi0qIHdyaXRlX2JhdGNoX2V4cGlyZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgYWJvdmUsIGZvciB3cml0ZXMuCi0KLSogYW50aWNfZXhwaXJlCi0gICAgQ29udHJvbHMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgd2UgY2FuIGFudGljaXBhdGUgYSBnb29kIHJlYWQgKG9uZQotICAgIHdpdGggYSBzaG9ydCBzZWVrIGRpc3RhbmNlIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgY29tcGxldGVkIHJlcXVlc3QpIGJlZm9yZQotICAgIGdpdmluZyB1cC4gTWFueSBvdGhlciBmYWN0b3JzIG1heSBjYXVzZSBhbnRpY2lwYXRpb24gdG8gYmUgc3RvcHBlZCBlYXJseSwKLSAgICBvciBzb21lIHByb2Nlc3NlcyB3aWxsIG5vdCBiZSAiYW50aWNpcGF0ZWQiIGF0IGFsbC4gU2hvdWxkIGJlIGEgYml0IGhpZ2hlcgotICAgIGZvciBiaWcgc2VlayB0aW1lIGRldmljZXMgdGhvdWdoIG5vdCBhIGxpbmVhciBjb3JyZXNwb25kZW5jZSAtIG1vc3QKLSAgICBwcm9jZXNzZXMgaGF2ZSBvbmx5IGEgZmV3IG1zIHRoaW5rdGltZS4KLQotSW4gYWRkaXRpb24gdG8gdGhlIHR1bmFibGVzIGFib3ZlIHRoZXJlIGlzIGEgcmVhZC1vbmx5IGZpbGUgbmFtZWQgZXN0X3RpbWUKLXdoaWNoLCB3aGVuIHJlYWQsIHdpbGwgc2hvdzoKLQotICAgIC0gVGhlIHByb2JhYmlsaXR5IG9mIGEgdGFzayBleGl0aW5nIHdpdGhvdXQgYSBjb29wZXJhdGluZyB0YXNrCi0gICAgICBzdWJtaXR0aW5nIGFuIGFudGljaXBhdGVkIElPLgotCi0gICAgLSBUaGUgY3VycmVudCBtZWFuIHRoaW5rIHRpbWUuCi0KLSAgICAtIFRoZSBzZWVrIGRpc3RhbmNlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIGluY29taW5nIElPIGlzIGJldHRlci4KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDhkMjE1OGEuLjZmYWI5N2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTE4Niw3ICsxODYsNyBAQAogZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWFwcGluZykgYW5kCiBsb3ctbWVtb3J5IHBhZ2VzLgogCi1Ob3RlOiBQbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQgZm9yIGEgZGlzY3Vzc2lvbgorTm90ZTogUGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQgZm9yIGEgZGlzY3Vzc2lvbgogb24gUENJIGhpZ2ggbWVtIERNQSBhc3BlY3RzIGFuZCBtYXBwaW5nIG9mIHNjYXR0ZXIgZ2F0aGVyIGxpc3RzLCBhbmQgc3VwcG9ydAogZm9yIDY0IGJpdCBQQ0kuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQKaW5kZXggNGQ0YTY0NGIuLmE5OWQ3MDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CkBAIC0zMTUsNDEgKzMxNSwyNiBAQAogCiBROiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYSBwYXJ0aWN1bGFyIGNwdSBpcyBub3QgcmVtb3ZlZCB3aGVuIHRoZXJlIGlzIHNvbWUKICAgIHdvcmsgc3BlY2lmaWMgdG8gdGhpcyBjcHUgaXMgaW4gcHJvZ3Jlc3MuCi1BOiBGaXJzdCBzd2l0Y2ggdGhlIGN1cnJlbnQgdGhyZWFkIGNvbnRleHQgdG8gcHJlZmVycmVkIGNwdQorQTogVGhlcmUgYXJlIHR3byB3YXlzLiAgSWYgeW91ciBjb2RlIGNhbiBiZSBydW4gaW4gaW50ZXJydXB0IGNvbnRleHQsIHVzZQorICAgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCksIG90aGVyd2lzZSB1c2Ugd29ya19vbl9jcHUoKS4gIE5vdGUgdGhhdAorICAgd29ya19vbl9jcHUoKSBpcyBzbG93LCBhbmQgY2FuIGZhaWwgZHVlIHRvIG91dCBvZiBtZW1vcnk6CiAKIAlpbnQgbXlfZnVuY19vbl9jcHUoaW50IGNwdSkKIAl7Ci0JCWNwdW1hc2tfdCBzYXZlZF9tYXNrLCBuZXdfbWFzayA9IENQVV9NQVNLX05PTkU7Ci0JCWludCBjdXJyX2NwdSwgZXJyID0gMDsKLQotCQlzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCQljcHVfc2V0KGNwdSwgbmV3X21hc2spOwotCQllcnIgPSBzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG5ld19tYXNrKTsKLQotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQkvKgotCQkgKiBJZiB3ZSBnb3Qgc2NoZWR1bGVkIG91dCBqdXN0IGFmdGVyIHRoZSByZXR1cm4gZnJvbQotCQkgKiBzZXRfY3B1c19hbGxvd2VkKCkgYmVmb3JlIHJ1bm5pbmcgdGhlIHdvcmssIHRoaXMgZW5zdXJlcwotCQkgKiB3ZSBzdGF5IGxvY2tlZC4KLQkJICovCi0JCWN1cnJfY3B1ID0gZ2V0X2NwdSgpOwotCi0JCWlmIChjdXJyX2NwdSAhPSBjcHUpIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlnb3RvIHJldDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBEbyB3b3JrIDogQnV0IGNhbnQgc2xlZXAsIHNpbmNlIGdldF9jcHUoKSBkaXNhYmxlcyBwcmVlbXB0Ci0JCQkgKi8KLQkJfQotCQlyZXQ6Ci0JCQlwdXRfY3B1KCk7Ci0JCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCisJCWludCBlcnI7CisJCWdldF9vbmxpbmVfY3B1cygpOworCQlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJCWVyciA9IC1FSU5WQUw7CisJCWVsc2UKKyNpZiBORUVEU19CTE9DS0lORworCQkJZXJyID0gd29ya19vbl9jcHUoY3B1LCBfX215X2Z1bmNfb25fY3B1LCBOVUxMKTsKKyNlbHNlCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX215X2Z1bmNfb25fY3B1LCAmZXJyLAorCQkJCQkJIHRydWUpOworI2VuZGlmCisJCXB1dF9vbmxpbmVfY3B1cygpOworCQlyZXR1cm4gZXJyOworCX0KIAogUTogSG93IGRvIHdlIGRldGVybWluZSBob3cgbWFueSBDUFVzIGFyZSBhdmFpbGFibGUgZm9yIGhvdHBsdWcuCiBBOiBUaGVyZSBpcyBubyBjbGVhciBzcGVjIGRlZmluZWQgd2F5IGZyb20gQUNQSSB0aGF0IGNhbiBnaXZlIHVzIHRoYXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0CmluZGV4IDYwMTIwZmIuLmQyY2Q2ZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dApAQCAtMjI2LDUgKzIyNiw1IEBACiBUaGlzIGNhbiB0aGVuIGJlIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZQogZHJpdmVyJ3MgZGlyZWN0b3J5IHVzaW5nOgogCi1pbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwotdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CitpbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwordm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCBhZjY4ODVjLi5lMWRlZjE3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQkJYWxzbyBiZSB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGJhcnJpZXJzLCBmb3IKIAkJCWNvbnNpc3RlbmN5IHdpdGggb3RoZXIgZXh0NCBtb3VudCBvcHRpb25zLgogCi1pbm9kZV9yZWFkYWhlYWQ9bglUaGlzIHR1bmluZyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIG1heGltdW0KK2lub2RlX3JlYWRhaGVhZF9ibGtzPW4JVGhpcyB0dW5pbmcgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBtYXhpbXVtCiAJCQludW1iZXIgb2YgaW5vZGUgdGFibGUgYmxvY2tzIHRoYXQgZXh0NCdzIGlub2RlCiAJCQl0YWJsZSByZWFkYWhlYWQgYWxnb3JpdGhtIHdpbGwgcHJlLXJlYWQgaW50bwogCQkJdGhlIGJ1ZmZlciBjYWNoZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMyIGJsb2Nrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dAppbmRleCA0OTQ5ZmNhLi44MzllZmQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uaWxmczIudHh0CkBAIC0yOCw3ICsyOCw3IEBACiBQcm9qZWN0IHdlYiBwYWdlOiAgICBodHRwOi8vd3d3Lm5pbGZzLm9yZy9lbi8KIERvd25sb2FkIHBhZ2U6ICAgICAgIGh0dHA6Ly93d3cubmlsZnMub3JnL2VuL2Rvd25sb2FkLmh0bWwKIEdpdCB0cmVlIHdlYiBwYWdlOiAgIGh0dHA6Ly93d3cubmlsZnMub3JnL2dpdC8KLU5JTEZTIG1haWxpbmcgbGlzdHM6IGh0dHA6Ly93d3cubmlsZnMub3JnL21haWxtYW4vbGlzdGluZm8vdXNlcnMKK0xpc3QgaW5mbzogICAgICAgICAgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sI2xpbnV4LW5pbGZzCiAKIENhdmVhdHMKID09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDIyMGNjNjMuLjBkMDc1MTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTc3LDcgKzE3Nyw2IEBACiAgIENhcEJuZDogZmZmZmZmZmZmZmZmZmZmZgogICB2b2x1bnRhcnlfY3R4dF9zd2l0Y2hlczogICAgICAgIDAKICAgbm9udm9sdW50YXJ5X2N0eHRfc3dpdGNoZXM6ICAgICAxCi0gIFN0YWNrIHVzYWdlOiAgICAxMiBrQgogCiBUaGlzIHNob3dzIHlvdSBuZWFybHkgdGhlIHNhbWUgaW5mb3JtYXRpb24geW91IHdvdWxkIGdldCBpZiB5b3Ugdmlld2VkIGl0IHdpdGgKIHRoZSBwcyAgY29tbWFuZC4gIEluICBmYWN0LCAgcHMgIHVzZXMgIHRoZSAgcHJvYyAgZmlsZSAgc3lzdGVtICB0byAgb2J0YWluIGl0cwpAQCAtMjMxLDcgKzIzMCw2IEBACiAgTWVtc19hbGxvd2VkX2xpc3QgICAgICAgICAgIFNhbWUgYXMgcHJldmlvdXMsIGJ1dCBpbiAibGlzdCBmb3JtYXQiCiAgdm9sdW50YXJ5X2N0eHRfc3dpdGNoZXMgICAgIG51bWJlciBvZiB2b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlcwogIG5vbnZvbHVudGFyeV9jdHh0X3N3aXRjaGVzICBudW1iZXIgb2Ygbm9uIHZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzCi0gU3RhY2sgdXNhZ2U6ICAgICAgICAgICAgICAgIHN0YWNrIHVzYWdlIGhpZ2ggd2F0ZXIgbWFyayAocm91bmQgdXAgdG8gcGFnZSBzaXplKQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIFRhYmxlIDEtMzogQ29udGVudHMgb2YgdGhlIHN0YXRtIGZpbGVzIChhcyBvZiAyLjYuOC1yYzMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IGIyNDVkNTIuLjkzMWM4MDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CkBAIC05MSw4ICs5MSw4IEBACiAJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogfTsKIAotaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICopOwotdm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKK2ludCBkZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZSAqLCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqKTsKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKiwgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKik7CiAKIEl0IGFsc28gZGVmaW5lcyB0aGlzIGhlbHBlciBmb3IgZGVmaW5pbmcgZGV2aWNlIGF0dHJpYnV0ZXM6IAogCkBAIC0zMTYsOCArMzE2LDggQEAKIAogQ3JlYXRpb24vUmVtb3ZhbDoKIAotaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7Ci12b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIpOworaW50IGRldmljZV9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7Cit2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0cik7CiAKIAogLSBidXMgZHJpdmVycyAoaW5jbHVkZS9saW51eC9kZXZpY2UuaCkKQEAgLTM1OCw3ICszNTgsNyBAQAogCiBDcmVhdGlvbi9SZW1vdmFsOgogCi1pbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwotdm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CitpbnQgZHJpdmVyX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICopOwordm9pZCBkcml2ZXJfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKik7CiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hbWM2ODIxIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hbWM2ODIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDgzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FtYzY4MjEKQEAgLTAsMCArMSwxMDIgQEAKK0tlcm5lbCBkcml2ZXIgYW1jNjgyMQorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKwlUZXhhcyBJbnN0cnVtZW50cyBBTUM2ODIxCisJUHJlZml4OiAnYW1jNjgyMScKKwlBZGRyZXNzZXMgc2Nhbm5lZDogMHgxOCwgMHgxOSwgMHgxYSwgMHgyYywgMHgyZCwgMHgyZSwgMHg0YywgMHg0ZCwgMHg0ZQorCURhdGFzaGVldDogaHR0cDovL2ZvY3VzLnRpLmNvbS9kb2NzL3Byb2QvZm9sZGVycy9wcmludC9hbWM2ODIxLmh0bWwKKworQXV0aG9yczoKKwlUb21heiBNZXJ0ZWxqIDx0b21hei5tZXJ0ZWxqQGd1ZXN0LmFybmVzLnNpPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBhbWM2ODIxIGNoaXAuCitUaGUgY2hpcCBoYXMgb25lIG9uLWNoaXAgYW5kIG9uZSByZW1vdGUgdGVtcGVyYXR1cmUgc2Vuc29yIGFuZCBvbmUgcHdtIGZhbgorcmVndWxhdG9yLgorVGhlIHB3bSBjYW4gYmUgY29udHJvbGxlZCBlaXRoZXIgZnJvbSBzb2Z0d2FyZSBvciBhdXRvbWF0aWNhbGx5LgorCitUaGUgZHJpdmVyIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgc2Vuc29yIGFjY2Vzc2VzIGluIHN5c2ZzOgorCit0ZW1wMV9pbnB1dAkJcm8Jb24tY2hpcCB0ZW1wZXJhdHVyZQordGVtcDFfbWluCQlydwkiCit0ZW1wMV9tYXgJCXJ3CSIKK3RlbXAxX2NyaXQJIAlydwkiCit0ZW1wMV9taW5fYWxhcm0JCXJvCSIKK3RlbXAxX21heF9hbGFybQkJcm8JIgordGVtcDFfY3JpdF9hbGFybQlybwkiCisKK3RlbXAyX2lucHV0CQlybwlyZW1vdGUgdGVtcGVyYXR1cmUKK3RlbXAyX21pbgkJcncJIgordGVtcDJfbWF4CQlydwkiCit0ZW1wMl9jcml0CSAJcncJIgordGVtcDJfbWluX2FsYXJtCQlybwkiCit0ZW1wMl9tYXhfYWxhcm0JCXJvCSIKK3RlbXAyX2NyaXRfYWxhcm0Jcm8JIgordGVtcDJfZmF1bHQJCXJvCSIKKworZmFuMV9pbnB1dAkgCXJvCXRhY2hvbWV0ZXIgc3BlZWQKK2ZhbjFfbWluCQlydwkiCitmYW4xX21heAkJcncJIgorZmFuMV9mYXVsdAkgCXJvCSIKK2ZhbjFfZGl2CQlydwlGYW4gZGl2aXNvciBjYW4gYmUgZWl0aGVyIDIgb3IgNC4KKworcHdtMQkJCXJ3CXB3bTEKK3B3bTFfZW5hYmxlCQlydwlyZWd1bGF0b3IgbW9kZSwgMT1vcGVuIGxvb3AsIDI9ZmFuIGNvbnRyb2xsZWQKKwkJCQlieSByZW1vdGUgdGVtcGVyYXR1cmUsIDM9ZmFuIGNvbnRyb2xsZWQgYnkKKwkJCQljb21iaW5hdGlvbiBvZiB0aGUgb24tY2hpcCB0ZW1wZXJhdHVyZSBhbmQKKwkJCQlyZW1vdGUtc2Vuc29yIHRlbXBlcmF0dXJlLAorcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAgcm8JMSBpZiBwd21fZW5hYmxlPT0yLCAzIGlmIHB3bV9lbmFibGU9PTMKK3B3bTFfYXV0b19wb2ludDFfcHdtCXJvCUhhcmR3aXJlZCB0byAwLCBzaGFyZWQgZm9yIGJvdGgKKwkJCQl0ZW1wZXJhdHVyZSBjaGFubmVscy4KK3B3bTFfYXV0b19wb2ludDJfcHdtCXJ3CVRoaXMgdmFsdWUgaXMgc2hhcmVkIGZvciBib3RoIHRlbXBlcmF0dXJlCisJCQkJY2hhbm5lbHMuCitwd20xX2F1dG9fcG9pbnQzX3B3bQlydwlIYXJkd2lyZWQgdG8gMjU1LCBzaGFyZWQgZm9yIGJvdGgKKwkJCQl0ZW1wZXJhdHVyZSBjaGFubmVscy4KKwordGVtcDFfYXV0b19wb2ludDFfdGVtcAlybwlIYXJkd2lyZWQgdG8gdGVtcDJfYXV0b19wb2ludDFfdGVtcAorCQkJCXdoaWNoIGlzIHJ3LiBCZWxvdyB0aGlzIHRlbXBlcmF0dXJlIGZhbiBzdG9wcy4KK3RlbXAxX2F1dG9fcG9pbnQyX3RlbXAJcncJVGhlIGxvdy10ZW1wZXJhdHVyZSBsaW1pdCBvZiB0aGUgcHJvcG9ydGlvbmFsCisJCQkJcmFuZ2UuIEJlbG93IHRoaXMgdGVtcGVyYXR1cmUKKwkJCQlwd20xID0gcHdtMV9hdXRvX3BvaW50Ml9wd20uIEl0IGNhbiBnbyBmcm9tCisJCQkJMCBkZWdyZWUgQyB0byAxMjQgZGVncmVlIEMgaW4gc3RlcHMgb2YKKwkJCQk0IGRlZ3JlZSBDLiBSZWFkIGl0IG91dCBhZnRlciB3cml0aW5nIHRvIGdldAorCQkJCXRoZSBhY3R1YWwgdmFsdWUuCit0ZW1wMV9hdXRvX3BvaW50M190ZW1wCXJ3CUFib3ZlIHRoaXMgdGVtcGVyYXR1cmUgZmFuIHJ1bnMgYXQgbWF4aW11bQorCQkJCXNwZWVkLiBJdCBjYW4gZ28gZnJvbSB0ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLgorCQkJCUl0IGNhbiBvbmx5IGhhdmUgY2VydGFpbiBkaXNjcmV0ZSB2YWx1ZXMKKwkJCQl3aGljaCBkZXBlbmQgb24gdGVtcDFfYXV0b19wb2ludDJfdGVtcCBhbmQKKwkJCQlwd20xX2F1dG9fcG9pbnQyX3B3bS4gUmVhZCBpdCBvdXQgYWZ0ZXIKKwkJCQl3cml0aW5nIHRvIGdldCB0aGUgYWN0dWFsIHZhbHVlLgorCit0ZW1wMl9hdXRvX3BvaW50MV90ZW1wCXJ3CU11c3QgYmUgYmV0d2VlbiAwIGRlZ3JlZSBDIGFuZCA2MyBkZWdyZWUgQyBhbmQKKwkJCQlpdCBkZWZpbmVzIHRoZSBwYXNzaXZlIGNvb2xpbmcgdGVtcGVyYXR1cmUuCisJCQkJQmVsb3cgdGhpcyB0ZW1wZXJhdHVyZSB0aGUgZmFuIHN0b3BzIGluCisJCQkJdGhlIGNsb3NlZCBsb29wIG1vZGUuCit0ZW1wMl9hdXRvX3BvaW50Ml90ZW1wCXJ3CVRoZSBsb3ctdGVtcGVyYXR1cmUgbGltaXQgb2YgdGhlIHByb3BvcnRpb25hbAorCQkJCXJhbmdlLiBCZWxvdyB0aGlzIHRlbXBlcmF0dXJlCisJCQkJcHdtMSA9IHB3bTFfYXV0b19wb2ludDJfcHdtLiBJdCBjYW4gZ28gZnJvbQorCQkJCTAgZGVncmVlIEMgdG8gMTI0IGRlZ3JlZSBDIGluIHN0ZXBzCisJCQkJb2YgNCBkZWdyZWUgQy4KKwordGVtcDJfYXV0b19wb2ludDNfdGVtcAlydwlBYm92ZSB0aGlzIHRlbXBlcmF0dXJlIGZhbiBydW5zIGF0IG1heGltdW0KKwkJCQlzcGVlZC4gSXQgY2FuIG9ubHkgaGF2ZSBjZXJ0YWluIGRpc2NyZXRlCisJCQkJdmFsdWVzIHdoaWNoIGRlcGVuZCBvbiB0ZW1wMl9hdXRvX3BvaW50Ml90ZW1wCisJCQkJYW5kIHB3bTFfYXV0b19wb2ludDJfcHdtLiBSZWFkIGl0IG91dCBhZnRlcgorCQkJCXdyaXRpbmcgdG8gZ2V0IGFjdHVhbCB2YWx1ZS4KKworCitNb2R1bGUgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91ciBib2FyZCBoYXMgYSBCSU9TIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIGFtYzY4MjEgY29ycmVjdGx5LCB5b3Ugc2hvdWxkCitsb2FkIHRoZSBtb2R1bGUgd2l0aDogaW5pdD0wLgorCitJZiB5b3VyIGJvYXJkIEJJT1MgZG9lc24ndCBpbml0aWFsaXplIHRoZSBjaGlwLCBvciB5b3Ugd2FudAorZGlmZmVyZW50IHNldHRpbmdzLCB5b3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Citpbml0PTEsCitwd21pbnY6IDAgZGVmYXVsdCBwd20gb3V0cHV0LCAxIGludmVydHMgcHdtIG91dHB1dC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wIGIvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjZlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKQEAgLTAsMCArMSw2NSBAQAorS2VybmVsIGRyaXZlciBrMTB0ZW1wCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorKiBBTUQgRmFtaWx5IDEwaCBwcm9jZXNzb3JzOgorICBTb2NrZXQgRjogUXVhZC1Db3JlL1NpeC1Db3JlL0VtYmVkZGVkIE9wdGVyb24gKGJ1dCBzZWUgYmVsb3cpCisgIFNvY2tldCBBTTIrOiBRdWFkLUNvcmUgT3B0ZXJvbiwgUGhlbm9tIChJSSkgWDMvWDQsIEF0aGxvbiBYMiAoYnV0IHNlZSBiZWxvdykKKyAgU29ja2V0IEFNMzogUXVhZC1Db3JlIE9wdGVyb24sIEF0aGxvbi9QaGVub20gSUkgWDIvWDMvWDQsIFNlbXByb24gSUkKKyAgU29ja2V0IFMxRzM6IEF0aGxvbiBJSSwgU2VtcHJvbiwgVHVyaW9uIElJCisqIEFNRCBGYW1pbHkgMTFoIHByb2Nlc3NvcnM6CisgIFNvY2tldCBTMUcyOiBBdGhsb24gKFgyKSwgU2VtcHJvbiAoWDIpLCBUdXJpb24gWDIgKFVsdHJhKQorCisgIFByZWZpeDogJ2sxMHRlbXAnCisgIEFkZHJlc3NlcyBzY2FubmVkOiBQQ0kgc3BhY2UKKyAgRGF0YXNoZWV0czoKKyAgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIChCS0RHKSBGb3IgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29yczoKKyAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy8zMTExNi5wZGYKKyAgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIChCS0RHKSBmb3IgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29yczoKKyAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MTI1Ni5wZGYKKyAgUmV2aXNpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnM6CisgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDEzMjIucGRmCisgIFJldmlzaW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3JzOgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQxNzg4LnBkZgorICBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3IgUG93ZXIgYW5kIFRoZXJtYWwgRGF0YSBTaGVldCBmb3IgTm90ZWJvb2tzOgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzczLnBkZgorICBBTUQgRmFtaWx5IDEwaCBTZXJ2ZXIgYW5kIFdvcmtzdGF0aW9uIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0OgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzc0LnBkZgorICBBTUQgRmFtaWx5IDEwaCBEZXNrdG9wIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0OgorICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMzc1LnBkZgorCitBdXRob3I6IENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgcGVybWl0cyByZWFkaW5nIG9mIHRoZSBpbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3Igb2YgQU1ECitGYW1pbHkgMTBoIGFuZCAxMWggcHJvY2Vzc29ycy4KKworQWxsIHRoZXNlIHByb2Nlc3NvcnMgaGF2ZSBhIHNlbnNvciwgYnV0IG9uIHRob3NlIGZvciBTb2NrZXQgRiBvciBBTTIrLAordGhlIHNlbnNvciBtYXkgcmV0dXJuIGluY29uc2lzdGVudCB2YWx1ZXMgKGVycmF0dW0gMzE5KS4gIFRoZSBkcml2ZXIKK3dpbGwgcmVmdXNlIHRvIGxvYWQgb24gdGhlc2UgcmV2aXNpb25zIHVubGVzcyB5b3Ugc3BlY2lmeSB0aGUgImZvcmNlPTEiCittb2R1bGUgcGFyYW1ldGVyLgorCitEdWUgdG8gdGVjaG5pY2FsIHJlYXNvbnMsIHRoZSBkcml2ZXIgY2FuIGRldGVjdCBvbmx5IHRoZSBtYWluYm9hcmQncworc29ja2V0IHR5cGUsIG5vdCB0aGUgcHJvY2Vzc29yJ3MgYWN0dWFsIGNhcGFiaWxpdGllcy4gIFRoZXJlZm9yZSwgaWYgeW91CithcmUgdXNpbmcgYW4gQU0zIHByb2Nlc3NvciBvbiBhbiBBTTIrIG1haW5ib2FyZCwgeW91IGNhbiBzYWZlbHkgdXNlIHRoZQorImZvcmNlPTEiIHBhcmFtZXRlci4KKworVGhlcmUgaXMgb25lIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHZhbHVlLCBhdmFpbGFibGUgYXMgdGVtcDFfaW5wdXQgaW4KK3N5c2ZzLiBJdCBpcyBtZWFzdXJlZCBpbiBkZWdyZWVzIENlbHNpdXMgd2l0aCBhIHJlc29sdXRpb24gb2YgMS84dGggZGVncmVlLgorUGxlYXNlIG5vdGUgdGhhdCBpdCBpcyBkZWZpbmVkIGFzIGEgcmVsYXRpdmUgdmFsdWU7IHRvIHF1b3RlIHRoZSBBTUQgbWFudWFsOgorCisgIFRjdGwgaXMgdGhlIHByb2Nlc3NvciB0ZW1wZXJhdHVyZSBjb250cm9sIHZhbHVlLCB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSB0bworICBjb250cm9sIGNvb2xpbmcgc3lzdGVtcy4gVGN0bCBpcyBhIG5vbi1waHlzaWNhbCB0ZW1wZXJhdHVyZSBvbiBhbgorICBhcmJpdHJhcnkgc2NhbGUgbWVhc3VyZWQgaW4gZGVncmVlcy4gSXQgZG9lcyBfbm90XyByZXByZXNlbnQgYW4gYWN0dWFsCisgIHBoeXNpY2FsIHRlbXBlcmF0dXJlIGxpa2UgZGllIG9yIGNhc2UgdGVtcGVyYXR1cmUuIEluc3RlYWQsIGl0IHNwZWNpZmllcworICB0aGUgcHJvY2Vzc29yIHRlbXBlcmF0dXJlIHJlbGF0aXZlIHRvIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgc3lzdGVtIG11c3QKKyAgc3VwcGx5IHRoZSBtYXhpbXVtIGNvb2xpbmcgZm9yIHRoZSBwcm9jZXNzb3IncyBzcGVjaWZpZWQgbWF4aW11bSBjYXNlCisgIHRlbXBlcmF0dXJlIGFuZCBtYXhpbXVtIHRoZXJtYWwgcG93ZXIgZGlzc2lwYXRpb24uCisKK1RoZSBtYXhpbXVtIHZhbHVlIGZvciBUY3RsIGlzIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSB0ZW1wMV9tYXguCisKK0lmIHRoZSBCSU9TIGhhcyBlbmFibGVkIGhhcmR3YXJlIHRlbXBlcmF0dXJlIGNvbnRyb2wsIHRoZSB0aHJlc2hvbGQgYXQKK3doaWNoIHRoZSBwcm9jZXNzb3Igd2lsbCB0aHJvdHRsZSBpdHNlbGYgdG8gYXZvaWQgZGFtYWdlIGlzIGF2YWlsYWJsZSBpbgordGVtcDFfY3JpdCBhbmQgdGVtcDFfY3JpdF9oeXN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CmluZGV4IDk0NzM3NDkuLjM1Y2Y2NGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKQEAgLTU2LDEwICs1NiwxMSBAQAogKDUpIFdoZW4gZm9sbG93aW5nIHRoZSBjb252ZW50aW9uLCB0aGUgZHJpdmVyIGNvZGUgY2FuIHVzZSBnZW5lcmljCiAgICAgY29kZSB0byBjb3B5IHRoZSBwYXJhbWV0ZXJzIGJldHdlZW4gdXNlciBhbmQga2VybmVsIHNwYWNlLgogCi1UaGlzIHRhYmxlIGxpc3RzIGlvY3RscyB2aXNpYmxlIGZyb20gdXNlciBsYW5kIGZvciBMaW51eC9pMzg2LiAgSXQgY29udGFpbnMKLW1vc3QgZHJpdmVycyB1cCB0byAyLjMuMTQsIGJ1dCBJIGtub3cgSSBhbSBtaXNzaW5nIHNvbWUuCitUaGlzIHRhYmxlIGxpc3RzIGlvY3RscyB2aXNpYmxlIGZyb20gdXNlciBsYW5kIGZvciBMaW51eC94ODYuICBJdCBjb250YWlucworbW9zdCBkcml2ZXJzIHVwIHRvIDIuNi4zMSwgYnV0IEkga25vdyBJIGFtIG1pc3Npbmcgc29tZS4gIFRoZXJlIGhhcyBiZWVuCitubyBhdHRlbXB0IHRvIGxpc3Qgbm9uLVg4NiBhcmNoaXRlY3R1cmVzIG9yIGlvY3RscyBmcm9tIGRyaXZlcnMvc3RhZ2luZy8uCiAKLUNvZGUJU2VxIwlJbmNsdWRlIEZpbGUJCUNvbW1lbnRzCitDb2RlICBTZXEjKGhleCkJSW5jbHVkZSBGaWxlCQlDb21tZW50cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDB4MDAJMDAtMUYJbGludXgvZnMuaAkJY29uZmxpY3QhCiAweDAwCTAwLTFGCXNjc2kvc2NzaV9pb2N0bC5oCWNvbmZsaWN0IQpAQCAtNjksMTE5ICs3MCwyMjggQEAKIDB4MDMJYWxsCWxpbnV4L2hkcmVnLmgKIDB4MDQJRDItREMJbGludXgvdW1zZG9zX2ZzLmgJRGVhZCBzaW5jZSAyLjYuMTEsIGJ1dCBkb24ndCByZXVzZSB0aGVzZS4KIDB4MDYJYWxsCWxpbnV4L2xwLmgKLTB4MDkJYWxsCWxpbnV4L21kLmgKKzB4MDkJYWxsCWxpbnV4L3JhaWQvbWRfdS5oCisweDEwCTAwLTBGCWRyaXZlcnMvY2hhci9zMzkwL3ZtY3AuaAogMHgxMglhbGwJbGludXgvZnMuaAogCQlsaW51eC9ibGtwZy5oCiAweDFiCWFsbAlJbmZpbmlCYW5kIFN1YnN5c3RlbQk8aHR0cDovL3d3dy5vcGVuaWIub3JnLz4KIDB4MjAJYWxsCWRyaXZlcnMvY2Ryb20vY20yMDYuaAogMHgyMglhbGwJc2NzaS9zZy5oCiAnIycJMDAtM0YJSUVFRSAxMzk0IFN1YnN5c3RlbQlCbG9jayBmb3IgdGhlIGVudGlyZSBzdWJzeXN0ZW0KKyckJwkwMC0wRglsaW51eC9wZXJmX2NvdW50ZXIuaCwgbGludXgvcGVyZl9ldmVudC5oCiAnMScJMDAtMUYJPGxpbnV4L3RpbWVwcHMuaD4JUFBTIGtpdCBmcm9tIFVscmljaCBXaW5kbAogCQkJCQk8ZnRwOi8vZnRwLmRlLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RhZW1vbnMvbnRwL1BQUy8+CisnMicJMDEtMDQJbGludXgvaTJvLmgKKyczJwkwMC0wRglkcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmgJY29uZmxpY3QhCisnMycJMDAtMUYJbGludXgvc3VzcGVuZF9pb2N0bHMuaAljb25mbGljdCEKKwkJYW5kIGtlcm5lbC9wb3dlci91c2VyLmMKICc4JwlhbGwJCQkJU05QODAyMyBhZHZhbmNlZCBOSUMgY2FyZAogCQkJCQk8bWFpbHRvOm1jckBzb2xpZHVtLmNvbT4KLSdBJwkwMC0xRglsaW51eC9hcG1fYmlvcy5oCisnQCcJMDAtMEYJbGludXgvcmFkZW9uZmIuaAljb25mbGljdCEKKydAJwkwMC0wRglkcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCWNvbmZsaWN0IQorJ0EnCTAwLTFGCWxpbnV4L2FwbV9iaW9zLmgJY29uZmxpY3QhCisnQScJMDAtMEYJbGludXgvYWdwZ2FydC5oCQljb25mbGljdCEKKwkJYW5kIGRyaXZlcnMvY2hhci9hZ3AvY29tcGF0X2lvY3RsLmgKKydBJwkwMC03Rglzb3VuZC9hc291bmQuaAkJY29uZmxpY3QhCisnQicJMDAtMUYJbGludXgvY2Npc3NfaW9jdGwuaAljb25mbGljdCEKKydCJwkwMC0wRglpbmNsdWRlL2xpbnV4L3BtdS5oCWNvbmZsaWN0IQogJ0InCUMwLUZGCQkJCWFkdmFuY2VkIGJidXMKIAkJCQkJPG1haWx0bzptYWFzc2VuQHVuaS1mcmVpYnVyZy5kZT4KLSdDJwlhbGwJbGludXgvc291bmRjYXJkLmgKKydDJwlhbGwJbGludXgvc291bmRjYXJkLmgJY29uZmxpY3QhCisnQycJMDEtMkYJbGludXgvY2FwaS5oCQljb25mbGljdCEKKydDJwlGMC1GRglkcml2ZXJzL25ldC93YW4vY29zYS5oCWNvbmZsaWN0IQogJ0QnCWFsbAlhcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCi0nRScJYWxsCWxpbnV4L2lucHV0LmgKLSdGJwlhbGwJbGludXgvZmIuaAotJ0gnCWFsbAlsaW51eC9oaWRkZXYuaAotJ0knCWFsbAlsaW51eC9pc2RuLmgKKydEJwk0MC01Rglkcml2ZXJzL3Njc2kvZHB0L2R0cGlfaW9jdGwuaAorJ0QnCTA1CWRyaXZlcnMvc2NzaS9wbWNyYWlkLmgKKydFJwlhbGwJbGludXgvaW5wdXQuaAkJY29uZmxpY3QhCisnRScJMDAtMEYJeGVuL2V2dGNobi5oCQljb25mbGljdCEKKydGJwlhbGwJbGludXgvZmIuaAkJY29uZmxpY3QhCisnRicJMDEtMDIJZHJpdmVycy9zY3NpL3BtY3JhaWQuaAljb25mbGljdCEKKydGJwkyMAlkcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuaAljb25mbGljdCEKKydGJwkyMAlkcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCWNvbmZsaWN0IQorJ0YnCTIwCWxpbnV4L2l2dHZmYi5oCQljb25mbGljdCEKKydGJwkyMAlsaW51eC9tYXRyb3hmYi5oCWNvbmZsaWN0IQorJ0YnCTIwCWRyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwljb25mbGljdCEKKydGJwkwMC0wRgl2aWRlby9kYTh4eC1mYi5oCWNvbmZsaWN0IQorJ0YnCTgwLThGCWxpbnV4L2FyY2ZiLmgJCWNvbmZsaWN0IQorJ0YnCURECXZpZGVvL3NzdGZiLmgJCWNvbmZsaWN0IQorJ0cnCTAwLTNGCWRyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWxpYi5oCWNvbmZsaWN0IQorJ0cnCTAwLTBGCWxpbnV4L2dpZ2FzZXRfZGV2LmgJY29uZmxpY3QhCisnSCcJMDAtN0YJbGludXgvaGlkZGV2LmgJCWNvbmZsaWN0IQorJ0gnCTAwLTBGCWxpbnV4L2hpZHJhdy5oCQljb25mbGljdCEKKydIJwkwMC0wRglzb3VuZC9hc291bmQuaAkJY29uZmxpY3QhCisnSCcJMjAtNDAJc291bmQvYXNvdW5kX2ZtLmgJY29uZmxpY3QhCisnSCcJODAtOEYJc291bmQvc2ZudF9pbmZvLmgJY29uZmxpY3QhCisnSCcJMTAtOEYJc291bmQvZW11MTBrMS5oCQljb25mbGljdCEKKydIJwkxMC0xRglzb3VuZC9zYjE2X2NzcC5oCWNvbmZsaWN0IQorJ0gnCTEwLTFGCXNvdW5kL2hkYV9od2RlcC5oCWNvbmZsaWN0IQorJ0gnCTQwLTRGCXNvdW5kL2hkc3BtLmgJCWNvbmZsaWN0IQorJ0gnCTQwLTRGCXNvdW5kL2hkc3AuaAkJY29uZmxpY3QhCisnSCcJOTAJc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uaAorJ0gnCUMwLUYwCW5ldC9ibHVldG9vdGgvaGNpLmgJY29uZmxpY3QhCisnSCcJQzAtREYJbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAljb25mbGljdCEKKydIJwlDMC1ERgluZXQvYmx1ZXRvb3RoL2NtdHAvY210cC5oCWNvbmZsaWN0IQorJ0gnCUMwLURGCW5ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgJY29uZmxpY3QhCisnSScJYWxsCWxpbnV4L2lzZG4uaAkJY29uZmxpY3QhCisnSScJMDAtMEYJZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5oCWNvbmZsaWN0IQorJ0knCTQwLTRGCWxpbnV4L21JU0ROaWYuaAkJY29uZmxpY3QhCiAnSicJMDAtMUYJZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAogJ0snCWFsbAlsaW51eC9rZC5oCi0nTCcJMDAtMUYJbGludXgvbG9vcC5oCi0nTCcJMjAtMkYJZHJpdmVyL3VzYi9taXNjL3ZzdHVzYi5oCisnTCcJMDAtMUYJbGludXgvbG9vcC5oCQljb25mbGljdCEKKydMJwkxMC0xRglkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCWNvbmZsaWN0IQorJ0wnCTIwLTJGCWxpbnV4L3VzYi92c3R1c2IuaAogJ0wnCUUwLUZGCWxpbnV4L3BwZGQuaAkJZW5jcnlwdGVkIGRpc2sgZGV2aWNlIGRyaXZlcgogCQkJCQk8aHR0cDovL2xpbnV4MDEuZ3dkZy5kZS9+YWxhdGhhbS9wcGRkLmh0bWw+Ci0nTScJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCisnTScJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCWNvbmZsaWN0IQorJ00nCTAxLTE2CW10ZC9tdGQtYWJpLmgJCWNvbmZsaWN0IQorCQlhbmQgZHJpdmVycy9tdGQvbXRkY2hhci5jCisnTScJMDEtMDMJZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCisnTScJMDAtMEYJZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmgJY29uZmxpY3QhCiAnTicJMDAtMUYJZHJpdmVycy91c2Ivc2Nhbm5lci5oCi0nTycgICAgIDAwLTAyICAgaW5jbHVkZS9tdGQvdWJpLXVzZXIuaCBVQkkKLSdQJwlhbGwJbGludXgvc291bmRjYXJkLmgKKydPJyAgICAgMDAtMDYgICBtdGQvdWJpLXVzZXIuaAkJVUJJCisnUCcJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCWNvbmZsaWN0IQorJ1AnCTYwLTZGCXNvdW5kL3NzY2FwZV9pb2N0bC5oCWNvbmZsaWN0IQorJ1AnCTAwLTBGCWRyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMJY29uZmxpY3QhCiAnUScJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCi0nUicJMDAtMUYJbGludXgvcmFuZG9tLmgKKydSJwkwMC0xRglsaW51eC9yYW5kb20uaAkJY29uZmxpY3QhCisnUicJMDEJbGludXgvcmZraWxsLmgJCWNvbmZsaWN0IQorJ1InCTAxLTBGCW1lZGlhL3Jkcy5oCQljb25mbGljdCEKKydSJwlDMC1ERgluZXQvYmx1ZXRvb3RoL3JmY29tbS5oCiAnUycJYWxsCWxpbnV4L2Nkcm9tLmgJCWNvbmZsaWN0IQogJ1MnCTgwLTgxCXNjc2kvc2NzaV9pb2N0bC5oCWNvbmZsaWN0IQogJ1MnCTgyLUZGCXNjc2kvc2NzaS5oCQljb25mbGljdCEKKydTJwkwMC03Rglzb3VuZC9hc2VxdWVuY2VyLmgJY29uZmxpY3QhCiAnVCcJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCWNvbmZsaWN0IQorJ1QnCTAwLUFGCXNvdW5kL2Fzb3VuZC5oCQljb25mbGljdCEKICdUJwlhbGwJYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGxzLmgJY29uZmxpY3QhCi0nVScJMDAtRUYJbGludXgvZHJpdmVycy91c2IvdXNiLmgKLSdWJwlhbGwJbGludXgvdnQuaAorJ1QnCUMwLURGCWxpbnV4L2lmX3R1bi5oCQljb25mbGljdCEKKydVJwlhbGwJc291bmQvYXNvdW5kLmgJCWNvbmZsaWN0IQorJ1UnCTAwLTBGCWRyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgJY29uZmxpY3QhCisnVScJMDAtQ0YJbGludXgvdWlucHV0LmgJCWNvbmZsaWN0IQorJ1UnCTAwLUVGCWxpbnV4L3VzYmRldmljZV9mcy5oCisnVScJQzAtQ0YJZHJpdmVycy9ibHVldG9vdGgvaGNpX3VhcnQuaAorJ1YnCWFsbAlsaW51eC92dC5oCQljb25mbGljdCEKKydWJwlhbGwJbGludXgvdmlkZW9kZXYyLmgJY29uZmxpY3QhCisnVicJQzAJbGludXgvaXZ0dmZiLmgJCWNvbmZsaWN0IQorJ1YnCUMwCWxpbnV4L2l2dHYuaAkJY29uZmxpY3QhCisnVicJQzAJbWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaAljb25mbGljdCEKKydWJwlDMAltZWRpYS9zaTQ3MTMuaAkJY29uZmxpY3QhCisnVicJQzAtQ0YJZHJpdmVycy9tZWRpYS92aWRlby9teGIuaAljb25mbGljdCEKICdXJwkwMC0xRglsaW51eC93YXRjaGRvZy5oCWNvbmZsaWN0IQogJ1cnCTAwLTFGCWxpbnV4L3dhbnJvdXRlci5oCWNvbmZsaWN0IQotJ1gnCWFsbAlsaW51eC94ZnNfZnMuaAorJ1cnCTAwLTNGCXNvdW5kL2Fzb3VuZC5oCQljb25mbGljdCEKKydYJwlhbGwJZnMveGZzL3hmc19mcy5oCQljb25mbGljdCEKKwkJYW5kIGZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuaAorCQlhbmQgaW5jbHVkZS9saW51eC9mYWxsb2MuaAorCQlhbmQgbGludXgvZnMuaAorJ1gnCWFsbAlmcy9vY2ZzMi9vY2ZzX2ZzLmgJY29uZmxpY3QhCisnWCcJMDEJbGludXgvcGt0Y2R2ZC5oCQljb25mbGljdCEKICdZJwlhbGwJbGludXgvY3ljbGFkZXMuaAotJ1snCTAwLTA3CWxpbnV4L3VzYi91c2J0bWMuaAlVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlcworJ1onCTE0LTE1CWRyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmgKKydbJwkwMC0wNwlsaW51eC91c2IvdG1jLmgJCVVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBEZXZpY2VzCiAJCQkJCTxtYWlsdG86Z3JlZ2toQHN1c2UuZGU+Ci0nYScJYWxsCQkJCUFUTSBvbiBsaW51eAorJ2EnCWFsbAlsaW51eC9hdG0qLmgsIGxpbnV4L3NvbmV0LmgJQVRNIG9uIGxpbnV4CiAJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+Ci0nYicJMDAtRkYJCQkJYml0MyB2bWUgaG9zdCBicmlkZ2UKKydiJwkwMC1GRgkJCQljb25mbGljdCEgYml0MyB2bWUgaG9zdCBicmlkZ2UKIAkJCQkJPG1haWx0bzpuYXRhbGlhQG5pa2hlZmsubmlraGVmLm5sPgorJ2InCTAwLTBGCW1lZGlhL2J0ODE5LmgJCWNvbmZsaWN0IQorJ2MnCWFsbAlsaW51eC9jbTQwMDBfY3MuaAljb25mbGljdCEKICdjJwkwMC03RglsaW51eC9jb21zdGF0cy5oCWNvbmZsaWN0IQogJ2MnCTAwLTdGCWxpbnV4L2NvZGEuaAkJY29uZmxpY3QhCi0nYycJODAtOUYJYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Noc2MuaAotJ2MnCUEwLUFGICAgYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmgKKydjJwkwMC0xRglsaW51eC9jaGlvLmgJCWNvbmZsaWN0IQorJ2MnCTgwLTlGCWFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaHNjLmgJY29uZmxpY3QhCisnYycJQTAtQUYgICBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaAljb25mbGljdCEKICdkJwkwMC1GRglsaW51eC9jaGFyL2RybS9kcm0vaAljb25mbGljdCEKKydkJwkwMi00MAlwY21jaWEvZHMuaAkJY29uZmxpY3QhCisnZCcJMTAtM0YJZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuaAljb25mbGljdCEKKydkJwlDMC1DRglkcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaAljb25mbGljdCEKICdkJwlGMC1GRglsaW51eC9kaWdpMS5oCiAnZScJYWxsCWxpbnV4L2RpZ2kxLmgJCWNvbmZsaWN0IQotJ2UnCTAwLTFGCW5ldC9pcmRhL2lydHR5LmgJY29uZmxpY3QhCi0nZicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCi0naCcJMDAtN0YJCQkJQ2hhcm9uIGZpbGVzeXN0ZW0KKydlJwkwMC0xRglkcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5oCWNvbmZsaWN0IQorJ2YnCTAwLTFGCWxpbnV4L2V4dDJfZnMuaAkJY29uZmxpY3QhCisnZicJMDAtMUYJbGludXgvZXh0M19mcy5oCQljb25mbGljdCEKKydmJwkwMC0wRglmcy9qZnMvamZzX2Rpbm9kZS5oCWNvbmZsaWN0IQorJ2YnCTAwLTBGCWZzL2V4dDQvZXh0NC5oCQljb25mbGljdCEKKydmJwkwMC0wRglsaW51eC9mcy5oCQljb25mbGljdCEKKydmJwkwMC0wRglmcy9vY2ZzMi9vY2ZzMl9mcy5oCWNvbmZsaWN0IQorJ2cnCTAwLTBGCWxpbnV4L3VzYi9nYWRnZXRmcy5oCisnZycJMjAtMkYJbGludXgvdXNiL2dfcHJpbnRlci5oCisnaCcJMDAtN0YJCQkJY29uZmxpY3QhIENoYXJvbiBmaWxlc3lzdGVtCiAJCQkJCTxtYWlsdG86emFwbWFuQGludGVybGFuLm5ldD4KLSdpJwkwMC0zRglsaW51eC9pMm8uaAorJ2gnCTAwLTFGCWxpbnV4L2hwZXQuaAkJY29uZmxpY3QhCisnaScJMDAtM0YJbGludXgvaTJvLWRldi5oCQljb25mbGljdCEKKydpJwkwQi0xRglsaW51eC9pcG1pLmgJCWNvbmZsaWN0IQorJ2knCTgwLThGCWxpbnV4L2k4ay5oCiAnaicJMDAtM0YJbGludXgvam95c3RpY2suaAorJ2snCTAwLTBGCWxpbnV4L3NwaS9zcGlkZXYuaAljb25mbGljdCEKKydrJwkwMC0wNQl2aWRlby9reXJvLmgJCWNvbmZsaWN0IQogJ2wnCTAwLTNGCWxpbnV4L3RjZnNfZnMuaAkJdHJhbnNwYXJlbnQgY3J5cHRvZ3JhcGhpYyBmaWxlIHN5c3RlbQogCQkJCQk8aHR0cDovL21pa29ub3MuZGlhLnVuaXNhLml0L3RjZnM+CiAnbCcJNDAtN0YJbGludXgvdWRmX2ZzX2kuaAlpbiBkZXZlbG9wbWVudDoKIAkJCQkJPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtdWRmLz4KLSdtJwkwMC0wOQlsaW51eC9tbXRpbWVyLmgKKydtJwkwMC0wOQlsaW51eC9tbXRpbWVyLmgJCWNvbmZsaWN0IQogJ20nCWFsbAlsaW51eC9tdGlvLmgJCWNvbmZsaWN0IQogJ20nCWFsbAlsaW51eC9zb3VuZGNhcmQuaAljb25mbGljdCEKICdtJwlhbGwJbGludXgvc3luY2xpbmsuaAljb25mbGljdCEKKydtJwkwMC0xOQlkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5oCWNvbmZsaWN0IQorJ20nCTAwCWRyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9pb2N0bC5oCWNvbmZsaWN0IQogJ20nCTAwLTFGCW5ldC9pcmRhL2lybW9kLmgJY29uZmxpY3QhCi0nbicJMDAtN0YJbGludXgvbmNwX2ZzLmgKKyduJwkwMC03RglsaW51eC9uY3BfZnMuaCBhbmQgZnMvbmNwZnMvaW9jdGwuYwogJ24nCTgwLThGCWxpbnV4L25pbGZzMl9mcy5oCU5JTEZTMgotJ24nCUUwLUZGCXZpZGVvL21hdHJveC5oICAgICAgICAgIG1hdHJveGZiCisnbicJRTAtRkYJbGludXgvbWF0cm94ZmIuaAltYXRyb3hmYgogJ28nCTAwLTFGCWZzL29jZnMyL29jZnMyX2ZzLmgJT0NGUzIKLSdvJyAgICAgMDAtMDMgICBpbmNsdWRlL210ZC91YmktdXNlci5oICBjb25mbGljdCEgKE9DRlMyIGFuZCBVQkkgb3ZlcmxhcHMpCi0nbycgICAgIDQwLTQxICAgaW5jbHVkZS9tdGQvdWJpLXVzZXIuaCAgVUJJCi0nbycgICAgIDAxLUExICAgaW5jbHVkZS9saW51eC9kdmIvKi5oIERWQgorJ28nICAgICAwMC0wMyAgIG10ZC91YmktdXNlci5oCQljb25mbGljdCEgKE9DRlMyIGFuZCBVQkkgb3ZlcmxhcHMpCisnbycgICAgIDQwLTQxICAgbXRkL3ViaS11c2VyLmgJCVVCSQorJ28nICAgICAwMS1BMSAgIGxpbnV4L2R2Yi8qLmgJCURWQgogJ3AnCTAwLTBGCWxpbnV4L3BoYW50b20uaAkJY29uZmxpY3QhIChPcGVuSGFwdGljcyBuZWVkcyB0aGlzKQorJ3AnCTAwLTFGCWxpbnV4L3J0Yy5oCQljb25mbGljdCEKICdwJwkwMC0zRglsaW51eC9tYzE0NjgxOHJ0Yy5oCWNvbmZsaWN0IQogJ3AnCTQwLTdGCWxpbnV4L252cmFtLmgKLSdwJwk4MC05RgkJCQl1c2VyLXNwYWNlIHBhcnBvcnQKKydwJwk4MC05RglsaW51eC9wcGRldi5oCQl1c2VyLXNwYWNlIHBhcnBvcnQKIAkJCQkJPG1haWx0bzp0aW1AY3liZXJlbGsubmV0PgotJ3AnCWExLWE0CWxpbnV4L3Bwcy5oCQlMaW51eFBQUworJ3AnCUExLUE0CWxpbnV4L3Bwcy5oCQlMaW51eFBQUwogCQkJCQk8bWFpbHRvOmdpb21ldHRpQGxpbnV4Lml0PgogJ3EnCTAwLTFGCWxpbnV4L3NlcmlvLmgKLSdxJwk4MC1GRgkJCQlJbnRlcm5ldCBQaG9uZUpBQ0ssIEludGVybmV0IExpbmVKQUNLCi0JCQkJCTxodHRwOi8vd3d3LnF1aWNrbmV0Lm5ldD4KLSdyJwkwMC0xRglsaW51eC9tc2Rvc19mcy5oCisncScJODAtRkYJbGludXgvdGVsZXBob255LmgJSW50ZXJuZXQgUGhvbmVKQUNLLCBJbnRlcm5ldCBMaW5lSkFDSworCQlsaW51eC9peGp1c2VyLmgJCTxodHRwOi8vd3d3LnF1aWNrbmV0Lm5ldD4KKydyJwkwMC0xRglsaW51eC9tc2Rvc19mcy5oIGFuZCBmcy9mYXQvZGlyLmMKICdzJwlhbGwJbGludXgvY2RrLmgKICd0JwkwMC03RglsaW51eC9pZl9wcHAuaAogJ3QnCTgwLThGCWxpbnV4L2lzZG5fcHBwLmgKKyd0Jwk5MAlsaW51eC90b3NoaWJhLmgKICd1JwkwMC0xRglsaW51eC9zbWJfZnMuaAotJ3YnCTAwLTFGCWxpbnV4L2V4dDJfZnMuaAkJY29uZmxpY3QhCiAndicJYWxsCWxpbnV4L3ZpZGVvZGV2LmgJY29uZmxpY3QhCisndicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCQljb25mbGljdCEKKyd2JwkwMC0xRglsaW51eC9mcy5oCQljb25mbGljdCEKKyd2JwkwMC0wRglsaW51eC9zb255cGkuaAkJY29uZmxpY3QhCisndicJQzAtQ0YJZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oCWNvbmZsaWN0IQorJ3YnCUMwLURGCW1lZGlhL3B3Yy1pb2N0bC5oCWNvbmZsaWN0IQorJ3YnCUMwLUZGCWxpbnV4L21leWUuaAkJY29uZmxpY3QhCisndicJQzAtQ0YJZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCWNvbmZsaWN0IQorJ3YnCUQwLURGCWRyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJkZXYuaAljb25mbGljdCEKICd3JwlhbGwJCQkJQ0VSTiBTQ0kgZHJpdmVyCiAneScJMDAtMUYJCQkJcGFja2V0IGJhc2VkIHVzZXIgbGV2ZWwgY29tbXVuaWNhdGlvbnMKIAkJCQkJPG1haWx0bzp6YXBtYW5AaW50ZXJsYW4ubmV0PgotJ3onCTAwLTNGCQkJCUNBTiBidXMgY2FyZAorJ3onCTAwLTNGCQkJCUNBTiBidXMgY2FyZAljb25mbGljdCEKIAkJCQkJPG1haWx0bzpoZHN0aWNoQGNvbm5lY3R1LnVsbS5jaXJjdWxhci5kZT4KLSd6Jwk0MC03RgkJCQlDQU4gYnVzIGNhcmQKKyd6Jwk0MC03RgkJCQlDQU4gYnVzIGNhcmQJY29uZmxpY3QhCiAJCQkJCTxtYWlsdG86b2VAcG9ydC5kZT4KKyd6JwkxMC00Rglkcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaAljb25mbGljdCEKIDB4ODAJMDAtMUYJbGludXgvZmIuaAogMHg4MQkwMC0xRglsaW51eC92aWRlb3RleHQuaAorMHg4OAkwMC0zRgltZWRpYS9vdmNhbWNoaXAuaAogMHg4OQkwMC0wNglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NraW9zLmgKIDB4ODkJMEItREYJbGludXgvc29ja2lvcy5oCiAweDg5CUUwLUVGCWxpbnV4L3NvY2tpb3MuaAkJU0lPQ1BST1RPUFJJVkFURSByYW5nZQorMHg4OQlFMC1FRglsaW51eC9kbi5oCQlQUk9UT1BSSVZBVEUgcmFuZ2UKIDB4ODkJRjAtRkYJbGludXgvc29ja2lvcy5oCQlTSU9DREVWUFJJVkFURSByYW5nZQogMHg4QglhbGwJbGludXgvd2lyZWxlc3MuaAogMHg4QwkwMC0zRgkJCQlXaU5SQURpTyBkcml2ZXIKIAkJCQkJPGh0dHA6Ly93d3cucHJveGltaXR5LmNvbS5hdS9+YnJpYW4vd2lucmFkaW8vPgogMHg5MAkwMAlkcml2ZXJzL2Nkcm9tL3NicGNkLmgKKzB4OTIJMDAtMEYJZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwogMHg5Mwk2MC03RglsaW51eC9hdXRvX2ZzLmgKKzB4OTQJYWxsCWZzL2J0cmZzL2lvY3RsLmgKIDB4OTkJMDAtMEYJCQkJNTM3LUFkZGluYm9hcmQgZHJpdmVyCiAJCQkJCTxtYWlsdG86YnVrQGJ1a3MuaXBuLmRlPgogMHhBMAlhbGwJbGludXgvc2RwL3NkcC5oCQlJbmR1c3RyaWFsIERldmljZSBQcm9qZWN0CkBAIC0xOTIsMTcgKzMwMiwyMiBAQAogMHhBQgkwMC0xRglsaW51eC9uYmQuaAogMHhBQwkwMC0xRglsaW51eC9yYXcuaAogMHhBRAkwMAlOZXRmaWx0ZXIgZGV2aWNlCWluIGRldmVsb3BtZW50OgotCQkJCQk8bWFpbHRvOnJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4JCisJCQkJCTxtYWlsdG86cnVzdHlAcnVzdGNvcnAuY29tLmF1PgogMHhBRQlhbGwJbGludXgva3ZtLmgJCUtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUKIAkJCQkJPG1haWx0bzprdm1Admdlci5rZXJuZWwub3JnPgogMHhCMAlhbGwJUkFUSU8gZGV2aWNlcwkJaW4gZGV2ZWxvcG1lbnQ6CiAJCQkJCTxtYWlsdG86dmdvQHJhdGlvLmRlPgogMHhCMQkwMC0xRglQUFBvWAkJCTxtYWlsdG86bW9zdHJvd3NAc3R5eC51d2F0ZXJsb28uY2E+CisweEMwCTAwLTBGCWxpbnV4L3VzYi9pb3dhcnJpb3IuaAogMHhDQgkwMC0xRglDQk0gc2VyaWFsIElFQyBidXMJaW4gZGV2ZWxvcG1lbnQ6CiAJCQkJCTxtYWlsdG86bWljaGFlbC5rbGVpbkBwdWZmaW4ubGIuc2h1dHRsZS5kZT4KKzB4Q0QJMDEJbGludXgvcmVpc2VyZnNfZnMuaAorMHhDRgkwMglmcy9jaWZzL2lvY3RsLmMKKzB4REIJMDAtMEYJZHJpdmVycy9jaGFyL213YXZlL213YXZlcHViLmgKIDB4REQJMDAtM0YJWkZDUCBkZXZpY2UgZHJpdmVyCXNlZSBkcml2ZXJzL3MzOTAvc2NzaS8KIAkJCQkJPG1haWx0bzphaGVycm1hbkBkZS5pYm0uY29tPgotMHhGMwkwMC0zRgl2aWRlby9zaXNmYi5oCQlzaXNmYiAoaW4gZGV2ZWxvcG1lbnQpCisweEYzCTAwLTNGCWRyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5oCXNpc2ZiIChpbiBkZXZlbG9wbWVudCkKIAkJCQkJPG1haWx0bzp0aG9tYXNAd2luaXNjaGhvZmVyLm5ldD4KIDB4RjQJMDAtMUYJdmlkZW8vbWJ4ZmIuaAkJbWJ4ZmIKIAkJCQkJPG1haWx0bzpyYXBoQDhkLmNvbT4KKzB4RkQJYWxsCWxpbnV4L2RtLWlvY3RsLmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dAppbmRleCAzNDhiOWU1Li4yN2E1MmIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jLW5hbm8tSE9XVE8udHh0CkBAIC0yMTQsMTEgKzIxNCwxMyBAQAogICogKHNlY3Rpb24gaGVhZGVyOiAoc2VjdGlvbiBkZXNjcmlwdGlvbik/ICkqCiAoKik/Ki8KIAotVGhlIHNob3J0IGZ1bmN0aW9uIGRlc2NyaXB0aW9uICoqKmNhbm5vdCBiZSBtdWx0aWxpbmUqKiosIGJ1dCB0aGUgb3RoZXIKLWRlc2NyaXB0aW9ucyBjYW4gYmUgKGFuZCB0aGV5IGNhbiBjb250YWluIGJsYW5rIGxpbmVzKS4gIElmIHlvdSBjb250aW51ZQotdGhhdCBpbml0aWFsIHNob3J0IGRlc2NyaXB0aW9uIG9udG8gYSBzZWNvbmQgbGluZSwgdGhhdCBzZWNvbmQgbGluZSB3aWxsCi1hcHBlYXIgZnVydGhlciBkb3duIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRlc2NyaXB0aW9uIHNlY3Rpb24sIHdoaWNoIGlzCi1hbG1vc3QgY2VydGFpbmx5IG5vdCB3aGF0IHlvdSBoYWQgaW4gbWluZC4KK0FsbCAiZGVzY3JpcHRpb24iIHRleHQgY2FuIHNwYW4gbXVsdGlwbGUgbGluZXMsIGFsdGhvdWdoIHRoZQorZnVuY3Rpb25fbmFtZSAmIGl0cyBzaG9ydCBkZXNjcmlwdGlvbiBhcmUgdHJhZGl0aW9uYWxseSBvbiBhIHNpbmdsZSBsaW5lLgorRGVzY3JpcHRpb24gdGV4dCBtYXkgYWxzbyBjb250YWluIGJsYW5rIGxpbmVzIChpLmUuLCBsaW5lcyB0aGF0IGNvbnRhaW4KK29ubHkgYSAiKiIpLgorCisic2VjdGlvbiBoZWFkZXI6IiBuYW1lcyBtdXN0IGJlIHVuaXF1ZSBwZXIgZnVuY3Rpb24gKG9yIHN0cnVjdCwKK3VuaW9uLCB0eXBlZGVmLCBlbnVtKS4KIAogQXZvaWQgcHV0dGluZyBhIHNwdXJpb3VzIGJsYW5rIGxpbmUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIG5hbWUsIG9yIGVsc2UgdGhlCiBkZXNjcmlwdGlvbiB3aWxsIGJlIHJlcGVhdGVkIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA1YmE0ZDlkLi43MzZkNDU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjQwLDcgKzI0MCw3IEBACiAKIAlhY3BpX3NsZWVwPQlbSFcsQUNQSV0gU2xlZXAgb3B0aW9ucwogCQkJRm9ybWF0OiB7IHMzX2Jpb3MsIHMzX21vZGUsIHMzX2JlZXAsIHM0X25vaHdzaWcsCi0JCQkJICBvbGRfb3JkZXJpbmcsIHM0X25vbnZzIH0KKwkJCQkgIG9sZF9vcmRlcmluZywgczRfbm9udnMsIHNjaV9mb3JjZV9lbmFibGUgfQogCQkJU2VlIERvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0IGZvciBpbmZvcm1hdGlvbiBvbgogCQkJczNfYmlvcyBhbmQgczNfbW9kZS4KIAkJCXMzX2JlZXAgaXMgZm9yIGRlYnVnZ2luZzsgaXQgbWFrZXMgdGhlIFBDJ3Mgc3BlYWtlciBiZWVwCkBAIC0yNTMsNiArMjUzLDkgQEAKIAkJCW9mIF9QVFMgaXMgdXNlZCBieSBkZWZhdWx0KS4KIAkJCXM0X25vbnZzIHByZXZlbnRzIHRoZSBrZXJuZWwgZnJvbSBzYXZpbmcvcmVzdG9yaW5nIHRoZQogCQkJQUNQSSBOVlMgbWVtb3J5IGR1cmluZyBoaWJlcm5hdGlvbi4KKwkJCXNjaV9mb3JjZV9lbmFibGUgY2F1c2VzIHRoZSBrZXJuZWwgdG8gc2V0IFNDSV9FTiBkaXJlY3RseQorCQkJb24gcmVzdW1lIGZyb20gUzEvUzMgKHdoaWNoIGlzIGFnYWluc3QgdGhlIEFDUEkgc3BlYywKKwkJCWJ1dCBzb21lIGJyb2tlbiBzeXN0ZW1zIGRvbid0IHdvcmsgd2l0aG91dCBpdCkuCiAKIAlhY3BpX3VzZV90aW1lcl9vdmVycmlkZSBbSFcsQUNQSV0KIAkJCVVzZSB0aW1lciBvdmVycmlkZS4gRm9yIHNvbWUgYnJva2VuIE52aWRpYSBORjUgYm9hcmRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dAppbmRleCBlMWExMTQxLi4yODExZTQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKQEAgLTY4NSw3ICs2ODUsNyBAQAogCQlfX3U4IHBhZDsKIAl9IG5taTsKIAlfX3UzMiBzaXBpX3ZlY3RvcjsKLQlfX3UzMiBmbGFnczsgICAvKiBtdXN0IGJlIHplcm8gKi8KKwlfX3UzMiBmbGFnczsKIH07CiAKIDQuMzAgS1ZNX1NFVF9WQ1BVX0VWRU5UUwpAQCAtNzAxLDYgKzcwMSwxNCBAQAogCiBTZWUgS1ZNX0dFVF9WQ1BVX0VWRU5UUyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlLgogCitGaWVsZHMgdGhhdCBtYXkgYmUgbW9kaWZpZWQgYXN5bmNocm9ub3VzbHkgYnkgcnVubmluZyBWQ1BVcyBjYW4gYmUgZXhjbHVkZWQKK2Zyb20gdGhlIHVwZGF0ZS4gVGhlc2UgZmllbGRzIGFyZSBubWkucGVuZGluZyBhbmQgc2lwaV92ZWN0b3IuIEtlZXAgdGhlCitjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlIGZsYWdzIGZpZWxkIGNsZWFyZWQgdG8gc3VwcHJlc3Mgb3ZlcndyaXRpbmcgdGhlCitjdXJyZW50IGluLWtlcm5lbCBzdGF0ZS4gVGhlIGJpdHMgYXJlOgorCitLVk1fVkNQVUVWRU5UX1ZBTElEX05NSV9QRU5ESU5HIC0gdHJhbnNmZXIgbm1pLnBlbmRpbmcgdG8gdGhlIGtlcm5lbAorS1ZNX1ZDUFVFVkVOVF9WQUxJRF9TSVBJX1ZFQ1RPUiAtIHRyYW5zZmVyIHNpcGlfdmVjdG9yCisKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dAppbmRleCAxNjkwOTFmLi43NWFmYTEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CkBAIC0xMDkyLDggKzEwOTIsOCBAQAogICAgIGl0cyBsZXZlbCB1cCBhbmQgZG93biBhdCBldmVyeSBjaGFuZ2UuCiAKIAotVm9sdW1lIGNvbnRyb2wKLS0tLS0tLS0tLS0tLS0tCitWb2x1bWUgY29udHJvbCAoQ29uc29sZSBBdWRpbyBjb250cm9sKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogcHJvY2ZzOiAvcHJvYy9hY3BpL2libS92b2x1bWUKIEFMU0E6ICJUaGlua1BhZCBDb25zb2xlIEF1ZGlvIENvbnRyb2wiLCBkZWZhdWx0IElEOiAiVGhpbmtQYWRFQyIKQEAgLTExMTAsOSArMTExMCw1MyBAQAogU29mdHdhcmUgdm9sdW1lIGNvbnRyb2wgc2hvdWxkIGJlIGRvbmUgb25seSBpbiB0aGUgbWFpbiBBQzk3L0hEQQogbWl4ZXIuCiAKLVRoaXMgZmVhdHVyZSBhbGxvd3Mgdm9sdW1lIGNvbnRyb2wgb24gVGhpbmtQYWQgbW9kZWxzIHdpdGggYSBkaWdpdGFsCi12b2x1bWUga25vYiAod2hlbiBhdmFpbGFibGUsIG5vdCBhbGwgbW9kZWxzIGhhdmUgaXQpLCBhcyB3ZWxsIGFzCi1tdXRlL3VubXV0ZSBjb250cm9sLiAgVGhlIGF2YWlsYWJsZSBjb21tYW5kcyBhcmU6CisKK0Fib3V0IHRoZSBUaGlua1BhZCBDb25zb2xlIEF1ZGlvIGNvbnRyb2w6CisKK1RoaW5rUGFkcyBoYXZlIGEgYnVpbHQtaW4gYW1wbGlmaWVyIGFuZCBtdXRpbmcgY2lyY3VpdCB0aGF0IGRyaXZlcyB0aGUKK2NvbnNvbGUgaGVhZHBob25lIGFuZCBzcGVha2Vycy4gIFRoaXMgY2lyY3VpdCBpcyBhZnRlciB0aGUgbWFpbiBBQzk3CitvciBIREEgbWl4ZXIgaW4gdGhlIGF1ZGlvIHBhdGgsIGFuZCB1bmRlciBleGNsdXNpdmUgY29udHJvbCBvZiB0aGUKK2Zpcm13YXJlLgorCitUaGlua1BhZHMgaGF2ZSB0aHJlZSBzcGVjaWFsIGhvdGtleXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgY29uc29sZQorYXVkaW8gY29udHJvbDogdm9sdW1lIHVwLCB2b2x1bWUgZG93biBhbmQgbXV0ZS4KKworSXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhlIG5vcm1hbCB3YXkgdGhlIG11dGUgZnVuY3Rpb24gd29ya3MgKG9uCitUaGlua1BhZHMgdGhhdCBkbyBub3QgaGF2ZSBhICJtdXRlIExFRCIpIGlzOgorCisxLiBQcmVzcyBtdXRlIHRvIG11dGUuICBJdCB3aWxsICphbHdheXMqIG11dGUsIHlvdSBjYW4gcHJlc3MgaXQgYXMKKyAgIG1hbnkgdGltZXMgYXMgeW91IHdhbnQsIGFuZCB0aGUgc291bmQgd2lsbCByZW1haW4gbXV0ZS4KKworMi4gUHJlc3MgZWl0aGVyIHZvbHVtZSBrZXkgdG8gdW5tdXRlIHRoZSBUaGlua1BhZCAoaXQgd2lsbCBfbm90XworICAgY2hhbmdlIHRoZSB2b2x1bWUsIGl0IHdpbGwganVzdCB1bm11dGUpLgorCitUaGlzIGlzIGEgdmVyeSBzdXBlcmlvciBkZXNpZ24gd2hlbiBjb21wYXJlZCB0byB0aGUgY2hlYXAgc29mdHdhcmUtb25seQorbXV0ZS10b2dnbGUgc29sdXRpb24gZm91bmQgb24gbm9ybWFsIGNvbnN1bWVyIGxhcHRvcHM6ICB5b3UgY2FuIGJlCithYnNvbHV0ZWx5IHN1cmUgdGhlIFRoaW5rUGFkIHdpbGwgbm90IG1ha2Ugbm9pc2UgaWYgeW91IHByZXNzIHRoZSBtdXRlCitidXR0b24sIG5vIG1hdHRlciB0aGUgcHJldmlvdXMgc3RhdGUuCisKK1RoZSBJQk0gVGhpbmtQYWRzLCBhbmQgdGhlIGVhcmxpZXIgTGVub3ZvIFRoaW5rUGFkcyBoYXZlIHZhcmlhYmxlLWdhaW4KK2FtcGxpZmllcnMgZHJpdmluZyB0aGUgc3BlYWtlcnMgYW5kIGhlYWRwaG9uZSBvdXRwdXQsIGFuZCB0aGUgZmlybXdhcmUKK2Fsc28gaGFuZGxlcyB2b2x1bWUgY29udHJvbCBmb3IgdGhlIGhlYWRwaG9uZSBhbmQgc3BlYWtlcnMgb24gdGhlc2UKK1RoaW5rUGFkcyB3aXRob3V0IGFueSBoZWxwIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0gKHRoaXMgdm9sdW1lCitjb250cm9sIHN0YWdlIGV4aXN0cyBhZnRlciB0aGUgbWFpbiBBQzk3IG9yIEhEQSBtaXhlciBpbiB0aGUgYXVkaW8KK3BhdGgpLgorCitUaGUgbmV3ZXIgTGVub3ZvIG1vZGVscyBvbmx5IGhhdmUgZmlybXdhcmUgbXV0ZSBjb250cm9sLCBhbmQgZGVwZW5kIG9uCit0aGUgbWFpbiBIREEgbWl4ZXIgdG8gZG8gdm9sdW1lIGNvbnRyb2wgKHdoaWNoIGlzIGRvbmUgYnkgdGhlIG9wZXJhdGluZworc3lzdGVtKS4gIEluIHRoaXMgY2FzZSwgdGhlIHZvbHVtZSBrZXlzIGFyZSBmaWx0ZXJlZCBvdXQgZm9yIHVubXV0ZQora2V5IHByZXNzICh0aGVyZSBhcmUgc29tZSBmaXJtd2FyZSBidWdzIGluIHRoaXMgYXJlYSkgYW5kIGRlbGl2ZXJlZCBhcworbm9ybWFsIGtleSBwcmVzc2VzIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtICh0aGlua3BhZC1hY3BpIGlzIG5vdAoraW52b2x2ZWQpLgorCisKK1RoZSBUaGlua1BhZC1BQ1BJIHZvbHVtZSBjb250cm9sOgorCitUaGUgcHJlZmVycmVkIHdheSB0byBpbnRlcmFjdCB3aXRoIHRoZSBDb25zb2xlIEF1ZGlvIGNvbnRyb2wgaXMgdGhlCitBTFNBIGludGVyZmFjZS4KKworVGhlIGxlZ2FjeSBwcm9jZnMgaW50ZXJmYWNlIGFsbG93cyBvbmUgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSwKK2FuZCBpZiB2b2x1bWUgY29udHJvbCBpcyBlbmFibGVkLCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CiAKIAllY2hvIHVwICAgPi9wcm9jL2FjcGkvaWJtL3ZvbHVtZQogCWVjaG8gZG93biA+L3Byb2MvYWNwaS9pYm0vdm9sdW1lCkBAIC0xMTIxLDEyICsxMTY1LDEwIEBACiAJZWNobyAnbGV2ZWwgPGxldmVsPicgPi9wcm9jL2FjcGkvaWJtL3ZvbHVtZQogCiBUaGUgPGxldmVsPiBudW1iZXIgcmFuZ2UgaXMgMCB0byAxNCBhbHRob3VnaCBub3QgYWxsIG9mIHRoZW0gbWF5IGJlCi1kaXN0aW5jdC4gVGhlIHVubXV0ZSB0aGUgdm9sdW1lIGFmdGVyIHRoZSBtdXRlIGNvbW1hbmQsIHVzZSBlaXRoZXIgdGhlCitkaXN0aW5jdC4gVG8gdW5tdXRlIHRoZSB2b2x1bWUgYWZ0ZXIgdGhlIG11dGUgY29tbWFuZCwgdXNlIGVpdGhlciB0aGUKIHVwIG9yIGRvd24gY29tbWFuZCAodGhlIGxldmVsIGNvbW1hbmQgd2lsbCBub3QgdW5tdXRlIHRoZSB2b2x1bWUpLCBvcgogdGhlIHVubXV0ZSBjb21tYW5kLgogCi1UaGUgY3VycmVudCB2b2x1bWUgbGV2ZWwgYW5kIG11dGUgc3RhdGUgaXMgc2hvd24gaW4gdGhlIGZpbGUuCi0KIFlvdSBjYW4gdXNlIHRoZSB2b2x1bWVfY2FwYWJpbGl0aWVzIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIKIHdoZXRoZXIgeW91ciB0aGlua3BhZCBoYXMgdm9sdW1lIGNvbnRyb2wgb3IgbXV0ZS1vbmx5IGNvbnRyb2w6CiB2b2x1bWVfY2FwYWJpbGl0aWVzPTEgZm9yIG1peGVycyB3aXRoIG11dGUgYW5kIHZvbHVtZSBjb250cm9sLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQKaW5kZXggMDY0M2UzYi4uM2M0NWQ1ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDkudHh0CkBAIC00OCwxMSArNDgsMTEgQEAKIFRoaXMgY29uZmlndXJlcyB0aGUgZmlyc3QgZm91bmQgM2M1MDkgY2FyZCBmb3IgSVJRIDEwLCBiYXNlIEkvTyAweDMxMCwgYW5kCiB0cmFuc2NlaXZlciB0eXBlIDMgKDEwYmFzZTIpLiBUaGUgZmxhZyAiMHgzYzUwOSIgbXVzdCBiZSBzZXQgdG8gYXZvaWQgY29uZmxpY3RzCiB3aXRoIG90aGVyIGNhcmQgdHlwZXMgd2hlbiBvdmVycmlkaW5nIHRoZSBJL08gYWRkcmVzcy4gV2hlbiB0aGUgZHJpdmVyIGlzCi1sb2FkZWQgYXMgYSBtb2R1bGUsIG9ubHkgdGhlIElSUSBhbmQgdHJhbnNjZWl2ZXIgc2V0dGluZyBtYXkgYmUgb3ZlcnJpZGRlbi4KLUZvciBleGFtcGxlLCBzZXR0aW5nIHR3byBjYXJkcyB0byAxMGJhc2UyL0lSUTEwIGFuZCBBVUkvSVJRMTEgaXMgZG9uZSBieSB1c2luZwotdGhlIHhjdnIgYW5kIGlycSBtb2R1bGUgb3B0aW9uczoKK2xvYWRlZCBhcyBhIG1vZHVsZSwgb25seSB0aGUgSVJRIG1heSBiZSBvdmVycmlkZGVuLiBGb3IgZXhhbXBsZSwKK3NldHRpbmcgdHdvIGNhcmRzIHRvIElSUTEwIGFuZCBJUlExMSBpcyBkb25lIGJ5IHVzaW5nIHRoZSBpcnEgbW9kdWxlCitvcHRpb246CiAKLSAgIG9wdGlvbnMgM2M1MDkgeGN2cj0zLDEgaXJxPTEwLDExCisgICBvcHRpb25zIDNjNTA5IGlycT0xMCwxMQogCiAKICgyKSBGdWxsLWR1cGxleCBtb2RlCkBAIC03Nyw2ICs3Nyw4IEBACiBpdHNlbGYgZnVsbC1kdXBsZXggY2FwYWJsZS4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG9uZSBvZiB0d28gdGhpbmdzOiBhIGZ1bGwtCiBkdXBsZXgtY2FwYWJsZSAgRXRoZXJuZXQgc3dpdGNoICgqbm90KiBhIGh1YiksIG9yIGEgZnVsbC1kdXBsZXgtY2FwYWJsZSBOSUMgb24KIGFub3RoZXIgc3lzdGVtIHRoYXQncyBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIDNjNTA5QiB2aWEgYSBjcm9zc292ZXIgY2FibGUuCisKK0Z1bGwtZHVwbGV4IG1vZGUgY2FuIGJlIGVuYWJsZWQgdXNpbmcgJ2V0aHRvb2wnLgogIAogLy8vLy9FeHRyZW1lbHkgaW1wb3J0YW50IGNhdXRpb24gY29uY2VybmluZyBmdWxsLWR1cGxleCBtb2RlLy8vLy8KIFVuZGVyc3RhbmQgdGhhdCB0aGUgM2M1MDlCJ3MgaGFyZHdhcmUncyBmdWxsLWR1cGxleCBzdXBwb3J0IGlzIG11Y2ggbW9yZQpAQCAtMTEzLDYgKzExNSw4IEBACiBuZXZlciBhdXRvbWF0aWNhbGx5IGVuYWJsZSBmdWxsLWR1cGxleCBtb2RlIGluIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbjsKIGl0IG11c3QgYWx3YXlzIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgb25lIG9mIHRoZXNlIGNvZGUgaW4gb3JkZXIgdG8gYmUKIGFjdGl2YXRlZC4KKworVGhlIHRyYW5zY2VpdmVyIHR5cGUgY2FuIGJlIGNoYW5nZWQgdXNpbmcgJ2V0aHRvb2wnLgogICAKIAogKDRhKSBJbnRlcnByZXRhdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBhbmQgY29tbW9uIHByb2JsZW1zCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dAppbmRleCA0YTMxMDliLi4zNTZmZDg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKQEAgLTQyLDgwICs0Miw4MSBAQAogCS4uLgogfTsKIAotVGhlIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIHRoZSBidXMgdHlwZSBvZgotdGhlIGRldmljZSBiZWluZyBzdXNwZW5kZWQuICBUaGUgYnVzIHR5cGUncyBjYWxsYmFjayBpcyB0aGVuIF9lbnRpcmVseV8KLV9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90Ci1pbmNsdWRlIGV4ZWN1dGluZyB0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIChmcm9tIHRoZQotUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfc3VzcGVuZCgpCi1jYWxsYmFjayBpbiBhIGRldmljZSBkcml2ZXIgYXMgbG9uZyBhcyB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGtub3dzCi13aGF0IHRvIGRvIHRvIGhhbmRsZSB0aGUgZGV2aWNlKS4KK1RoZSAtPnJ1bnRpbWVfc3VzcGVuZCgpLCAtPnJ1bnRpbWVfcmVzdW1lKCkgYW5kIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2tzIGFyZQorZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIGVpdGhlciB0aGUgYnVzIHR5cGUsIG9yIGRldmljZSB0eXBlIChpZiB0aGUgYnVzCit0eXBlJ3MgY2FsbGJhY2sgaXMgbm90IGRlZmluZWQpLCBvciBkZXZpY2UgY2xhc3MgKGlmIHRoZSBidXMgdHlwZSdzIGFuZCBkZXZpY2UKK3R5cGUncyBjYWxsYmFja3MgYXJlIG5vdCBkZWZpbmVkKSBvZiBnaXZlbiBkZXZpY2UuICBUaGUgYnVzIHR5cGUsIGRldmljZSB0eXBlCithbmQgZGV2aWNlIGNsYXNzIGNhbGxiYWNrcyBhcmUgcmVmZXJyZWQgdG8gYXMgc3Vic3lzdGVtLWxldmVsIGNhbGxiYWNrcyBpbiB3aGF0Citmb2xsb3dzLgogCi0gICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CitUaGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgaXMgX2VudGlyZWx5XyBfcmVzcG9uc2libGVfIGZvciBoYW5kbGluZwordGhlIHN1c3BlbmQgb2YgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QgaW5jbHVkZQorZXhlY3V0aW5nIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgKGZyb20gdGhlCitQTSBjb3JlJ3MgcG9pbnQgb2YgdmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9zdXNwZW5kKCkKK2NhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjawora25vd3Mgd2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCisKKyAgKiBPbmNlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQogICAgIGZvciBnaXZlbiBkZXZpY2UsIHRoZSBQTSBjb3JlIHJlZ2FyZHMgdGhlIGRldmljZSBhcyBzdXNwZW5kZWQsIHdoaWNoIG5lZWQKICAgICBub3QgbWVhbiB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUuICBJdCBpcwogICAgIHN1cHBvc2VkIHRvIG1lYW4sIGhvd2V2ZXIsIHRoYXQgdGhlIGRldmljZSB3aWxsIG5vdCBwcm9jZXNzIGRhdGEgYW5kIHdpbGwKLSAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgaXRzIGJ1cyB0eXBlJ3MKLSAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgZm9yIGl0LiAgVGhlIHJ1bi10aW1lIFBNIHN0YXR1cyBvZgotICAgIGEgZGV2aWNlIGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIGl0cyBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkKLSAgICBjYWxsYmFjayBpcyAnc3VzcGVuZGVkJy4KKyAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUKKyAgICBjYWxsYmFjayBpcyBleGVjdXRlZCBmb3IgaXQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIGEgZGV2aWNlIGFmdGVyCisgICAgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgdGhlIHN1YnN5c3RlbS1sZXZlbCBzdXNwZW5kIGNhbGxiYWNrIGlzICdzdXNwZW5kZWQnLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayByZXR1cm5zIC1FQlVTWSBvciAtRUFHQUlOLAotICAgIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgaXMgc3VwcG9zZWQgdG8gYmUgJ2FjdGl2ZScsIHdoaWNoIG1lYW5zIHRoYXQKLSAgICB0aGUgZGV2aWNlIF9tdXN0XyBiZSBmdWxseSBvcGVyYXRpb25hbCBhZnRlcndhcmRzLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayByZXR1cm5zIC1FQlVTWSBvciAtRUFHQUlOLAorICAgIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgaXMgJ2FjdGl2ZScsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRldmljZQorICAgIF9tdXN0XyBiZSBmdWxseSBvcGVyYXRpb25hbCBhZnRlcndhcmRzLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIGNvZGUKLSAgICBkaWZmZXJlbnQgZnJvbSAtRUJVU1kgb3IgLUVBR0FJTiwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGlzIGFzIGEgZmF0YWwKLSAgICBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQKLSAgICBmb3IgdGhlIGRldmljZSwgdW50aWwgdGhlIHN0YXR1cyBvZiBpdCBpcyBkaXJlY3RseSBzZXQgZWl0aGVyIHRvICdhY3RpdmUnCi0gICAgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhpcwotICAgIHB1cnBvc2UpLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yIGNvZGUgZGlmZmVyZW50CisgICAgZnJvbSAtRUJVU1kgb3IgLUVBR0FJTiwgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGlzIGFzIGEgZmF0YWwgZXJyb3IgYW5kIHdpbGwKKyAgICByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQgZm9yIHRoZSBkZXZpY2UsCisgICAgdW50aWwgdGhlIHN0YXR1cyBvZiBpdCBpcyBkaXJlY3RseSBzZXQgZWl0aGVyIHRvICdhY3RpdmUnLCBvciB0byAnc3VzcGVuZGVkJworICAgICh0aGUgUE0gY29yZSBwcm92aWRlcyBzcGVjaWFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoaXMgcHVycG9zZSkuCiAKLUluIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBjYXBhYmlsaXR5IGZvciBwcm9wZXIKLWZ1bmN0aW9uaW5nIGFuZCBkZXZpY2VfcnVuX3dha2UoKSByZXR1cm5zICdmYWxzZScgZm9yIHRoZSBkZXZpY2UsIHRoZW4KLS0+cnVudGltZV9zdXNwZW5kKCkgc2hvdWxkIHJldHVybiAtRUJVU1kuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYKLWRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ3RydWUnIGZvciB0aGUgZGV2aWNlIGFuZCB0aGUgZGV2aWNlIGlzIHB1dAotaW50byBhIGxvdyBwb3dlciBzdGF0ZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgYnVzIHR5cGUncwotLT5ydW50aW1lX3N1c3BlbmQoKSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCByZW1vdGUgd2FrZS11cCAoaS5lLiBoYXJkd2FyZSBtZWNoYW5pc20KLWFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMgUENJIFBNRSkKLXdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIGRldmljZS4gIEdlbmVyYWxseSwgcmVtb3RlIHdha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQKLWZvciBhbGwgaW5wdXQgZGV2aWNlcyBwdXQgaW50byBhIGxvdyBwb3dlciBzdGF0ZSBhdCBydW4gdGltZS4KK0luIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2UtdXAgY2FwYWJpbGl0eSAoaS5lLiBoYXJkd2FyZQorbWVjaGFuaXNtIGFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMKK1BDSSBQTUUpIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgYW5kIGRldmljZV9ydW5fd2FrZSgpIHJldHVybnMgJ2ZhbHNlJyBmb3IgdGhlCitkZXZpY2UsIHRoZW4gLT5ydW50aW1lX3N1c3BlbmQoKSBzaG91bGQgcmV0dXJuIC1FQlVTWS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgorZGV2aWNlX3J1bl93YWtlKCkgcmV0dXJucyAndHJ1ZScgZm9yIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaXMgcHV0IGludG8gYSBsb3cKK3Bvd2VyIHN0YXRlIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjaywgaXQgaXMKK2V4cGVjdGVkIHRoYXQgcmVtb3RlIHdha2UtdXAgd2lsbCBiZSBlbmFibGVkIGZvciB0aGUgZGV2aWNlLiAgR2VuZXJhbGx5LCByZW1vdGUKK3dha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGFsbCBpbnB1dCBkZXZpY2VzIHB1dCBpbnRvIGEgbG93IHBvd2VyIHN0YXRlIGF0CitydW4gdGltZS4KIAotVGhlIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi10aGUgZGV2aWNlIGJlaW5nIHdva2VuIHVwLiAgVGhlIGJ1cyB0eXBlJ3MgY2FsbGJhY2sgaXMgdGhlbiBfZW50aXJlbHlfCi1fcmVzcG9uc2libGVfIGZvciBoYW5kbGluZyB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdAotaW5jbHVkZSBleGVjdXRpbmcgdGhlIGRldmljZSBkcml2ZXIncyBvd24gLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIChmcm9tIHRoZQotUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfcmVzdW1lKCkKLWNhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBrbm93cwotd2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCitUaGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBpcyBfZW50aXJlbHlfIF9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZQorcmVzdW1lIG9mIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90IGluY2x1ZGUgZXhlY3V0aW5nCit0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgKGZyb20gdGhlIFBNIGNvcmUncyBwb2ludCBvZgordmlldyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBhIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpbiBhIGRldmljZQorZHJpdmVyIGFzIGxvbmcgYXMgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sga25vd3Mgd2hhdCB0byBkbyB0byBoYW5kbGUKK3RoZSBkZXZpY2UpLgogCi0gICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksCi0gICAgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZQotICAgIGRldmljZSBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUKLSAgICBQTSBzdGF0dXMgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgorICAqIE9uY2UgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIHRoZSBQTQorICAgIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkZXZpY2UKKyAgICBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUgUE0gc3RhdHVzCisgICAgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgogCi0gICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNCi0gICAgY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIKLSAgICBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcwotICAgIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzCi0gICAgc3BlY2lhbCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgorICAqIElmIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgcmVzdW1lIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNIGNvcmUKKyAgICByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIgZnVuY3Rpb25zCisgICAgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcyBkaXJlY3RseSBzZXQKKyAgICBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzIHNwZWNpYWwgaGVscGVyCisgICAgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgogCi1UaGUgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCi1naXZlbiBkZXZpY2Ugd2hlbmV2ZXIgdGhlIGRldmljZSBhcHBlYXJzIHRvIGJlIGlkbGUsIHdoaWNoIGlzIGluZGljYXRlZCB0byB0aGUKLVBNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgdGhlIGNvdW50ZXIgb2YgJ2FjdGl2ZScKLWNoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCitUaGUgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgd2hlbmV2ZXIgdGhlIGRldmljZQorYXBwZWFycyB0byBiZSBpZGxlLCB3aGljaCBpcyBpbmRpY2F0ZWQgdG8gdGhlIFBNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUKK2RldmljZSdzIHVzYWdlIGNvdW50ZXIgYW5kIHRoZSBjb3VudGVyIG9mICdhY3RpdmUnIGNoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCiAKICAgKiBJZiBhbnkgb2YgdGhlc2UgY291bnRlcnMgaXMgZGVjcmVhc2VkIHVzaW5nIGEgaGVscGVyIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5CiAgICAgdGhlIFBNIGNvcmUgYW5kIGl0IHR1cm5zIG91dCB0byBiZSBlcXVhbCB0byB6ZXJvLCB0aGUgb3RoZXIgY291bnRlciBpcwogICAgIGNoZWNrZWQuICBJZiB0aGF0IGNvdW50ZXIgYWxzbyBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgUE0gY29yZSBleGVjdXRlcyB0aGUKLSAgICBkZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrICh3aXRoIHRoZSBkZXZpY2UgYXMgYW4KLSAgICBhcmd1bWVudCkuCisgICAgc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgd2l0aCB0aGUgZGV2aWNlIGFzIGFuIGFyZ3VtZW50LgogCi1UaGUgYWN0aW9uIHBlcmZvcm1lZCBieSBhIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyB0b3RhbGx5Ci1kZXBlbmRlbnQgb24gdGhlIGJ1cyB0eXBlIGluIHF1ZXN0aW9uLCBidXQgdGhlIGV4cGVjdGVkIGFuZCByZWNvbW1lbmRlZCBhY3Rpb24KLWlzIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCAoaS5lLiBpZiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMKLW5lY2Vzc2FyeSBmb3Igc3VzcGVuZGluZyB0aGUgZGV2aWNlIGFyZSBzYXRpc2ZpZWQpIGFuZCB0byBxdWV1ZSB1cCBhIHN1c3BlbmQKLXJlcXVlc3QgZm9yIHRoZSBkZXZpY2UgaW4gdGhhdCBjYXNlLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbGJhY2sgaXMKLWlnbm9yZWQgYnkgdGhlIFBNIGNvcmUuCitUaGUgYWN0aW9uIHBlcmZvcm1lZCBieSBhIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGlzIHRvdGFsbHkgZGVwZW5kZW50IG9uCit0aGUgc3Vic3lzdGVtIGluIHF1ZXN0aW9uLCBidXQgdGhlIGV4cGVjdGVkIGFuZCByZWNvbW1lbmRlZCBhY3Rpb24gaXMgdG8gY2hlY2sKK2lmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCAoaS5lLiBpZiBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvcgorc3VzcGVuZGluZyB0aGUgZGV2aWNlIGFyZSBzYXRpc2ZpZWQpIGFuZCB0byBxdWV1ZSB1cCBhIHN1c3BlbmQgcmVxdWVzdCBmb3IgdGhlCitkZXZpY2UgaW4gdGhhdCBjYXNlLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgY2FsbGJhY2sgaXMgaWdub3JlZCBieSB0aGUgUE0KK2NvcmUuCiAKIFRoZSBoZWxwZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBQTSBjb3JlLCBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LCBndWFyYW50ZWUKIHRoYXQgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cyBhcmUgbWV0IHdpdGggcmVzcGVjdCB0byB0aGUgYnVzIHR5cGUncyBydW4tdGltZQpAQCAtMjM4LDQxICsyMzksNDEgQEAKICAgICAgIHJlbW92aW5nIHRoZSBkZXZpY2UgZnJvbSBkZXZpY2UgaGllcmFyY2h5CiAKICAgaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfaWRsZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbiBzdWNjZXNzCi0gICAgICBvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FSU5QUk9HUkVTUyBtZWFucyB0aGF0IC0+cnVudGltZV9pZGxlKCkKLSAgICAgIGlzIGFscmVhZHkgYmVpbmcgZXhlY3V0ZWQKKyAgICAtIGV4ZWN1dGUgdGhlIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUlOUFJPR1JFU1MgbWVhbnMgdGhhdAorICAgICAgLT5ydW50aW1lX2lkbGUoKSBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkCiAKICAgaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2U7IHJldHVybnMgMCBvbgogICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdzdXNwZW5kZWQnLCBvcgogICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG9yIC1FQlVTWSBtZWFucyBpdCBpcyBzYWZlIHRvIGF0dGVtcHQKICAgICAgIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhZ2FpbiBpbiBmdXR1cmUKIAogICBpbnQgcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKLSAgICAtIGV4ZWN1dGUgLT5ydW50aW1lX3Jlc3VtZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmUgcmVzdW1lIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KICAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnYWN0aXZlJyBvcgogICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG1lYW5zIGl0IG1heSBiZSBzYWZlIHRvIGF0dGVtcHQgdG8KICAgICAgIHJlc3VtZSB0aGUgZGV2aWNlIGFnYWluIGluIGZ1dHVyZSwgYnV0ICdwb3dlci5ydW50aW1lX2Vycm9yJyBzaG91bGQgYmUKICAgICAgIGNoZWNrZWQgYWRkaXRpb25hbGx5CiAKICAgaW50IHBtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZQotICAgICAgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLSAgICAgIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAorICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIHRoZSBzdWJzeXN0ZW0tbGV2ZWwgaWRsZSBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCisgICAgICBzdWNjZXNzIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAogCiAgIGludCBwbV9zY2hlZHVsZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5KTsKLSAgICAtIHNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgLT5ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICBpbiBmdXR1cmUsIHdoZXJlICdkZWxheScgaXMgdGhlIHRpbWUgdG8gd2FpdCBiZWZvcmUgcXVldWluZyB1cCBhIHN1c3BlbmQKLSAgICAgIHdvcmsgaXRlbSBpbiBwbV93cSwgaW4gbWlsbGlzZWNvbmRzIChpZiAnZGVsYXknIGlzIHplcm8sIHRoZSB3b3JrIGl0ZW0gaXMKLSAgICAgIHF1ZXVlZCB1cCBpbW1lZGlhdGVseSk7IHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBQTQorICAgIC0gc2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoZQorICAgICAgZGV2aWNlIGluIGZ1dHVyZSwgd2hlcmUgJ2RlbGF5JyBpcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSBxdWV1aW5nIHVwIGEKKyAgICAgIHN1c3BlbmQgd29yayBpdGVtIGluIHBtX3dxLCBpbiBtaWxsaXNlY29uZHMgKGlmICdkZWxheScgaXMgemVybywgdGhlIHdvcmsKKyAgICAgIGl0ZW0gaXMgcXVldWVkIHVwIGltbWVkaWF0ZWx5KTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIFBNCiAgICAgICBydW4tdGltZSBzdGF0dXMgd2FzIGFscmVhZHkgJ3N1c3BlbmRlZCcsIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QKICAgICAgIGhhc24ndCBiZWVuIHNjaGVkdWxlZCAob3IgcXVldWVkIHVwIGlmICdkZWxheScgaXMgMCk7IGlmIHRoZSBleGVjdXRpb24gb2YKICAgICAgIC0+cnVudGltZV9zdXNwZW5kKCkgaXMgYWxyZWFkeSBzY2hlZHVsZWQgYW5kIG5vdCB5ZXQgZXhwaXJlZCwgdGhlIG5ldwogICAgICAgdmFsdWUgb2YgJ2RlbGF5JyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRpbWUgdG8gd2FpdAogCiAgIGludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCi0gICAgICAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24KKyAgICAtIHN1Ym1pdCBhIHJlcXVlc3QgdG8gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBmb3IgdGhlCisgICAgICBkZXZpY2UgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCiAgICAgICBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgd2FzIGFscmVhZHkgJ2FjdGl2ZScsIG9yCiAgICAgICBlcnJvciBjb2RlIGlmIHRoZSByZXF1ZXN0IGhhc24ndCBiZWVuIHF1ZXVlZCB1cAogCkBAIC0zMDMsMTIgKzMwNCwxMiBAQAogICAgICAgcnVuLXRpbWUgUE0gY2FsbGJhY2tzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDIKIAogICBpbnQgcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0gICAgLSBwcmV2ZW50IHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIGZyb20gcnVubmluZyB0aGUgZGV2aWNlIGJ1cwotICAgICAgdHlwZSdzIHJ1bi10aW1lIFBNIGNhbGxiYWNrcywgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBwZW5kaW5nIHJ1bi10aW1lCi0gICAgICBQTSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UgYXJlIGVpdGhlciBjb21wbGV0ZWQgb3IgY2FuY2VsZWQ7IHJldHVybnMKLSAgICAgIDEgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgaXQgd2FzIG5lY2Vzc2FyeSB0byBleGVjdXRlCi0gICAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZSB0byBzYXRpc2Z5IHRoYXQgcmVxdWVzdCwKLSAgICAgIG90aGVyd2lzZSAwIGlzIHJldHVybmVkCisgICAgLSBwcmV2ZW50IHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIGZyb20gcnVubmluZyBzdWJzeXN0ZW0tbGV2ZWwKKyAgICAgIHJ1bi10aW1lIFBNIGNhbGxiYWNrcyBmb3IgdGhlIGRldmljZSwgbWFrZSBzdXJlIHRoYXQgYWxsIG9mIHRoZSBwZW5kaW5nCisgICAgICBydW4tdGltZSBQTSBvcGVyYXRpb25zIG9uIHRoZSBkZXZpY2UgYXJlIGVpdGhlciBjb21wbGV0ZWQgb3IgY2FuY2VsZWQ7CisgICAgICByZXR1cm5zIDEgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgaXQgd2FzIG5lY2Vzc2FyeSB0bworICAgICAgZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmVsIHJlc3VtZSBjYWxsYmFjayBmb3IgdGhlIGRldmljZSB0byBzYXRpc2Z5IHRoYXQKKyAgICAgIHJlcXVlc3QsIG90aGVyd2lzZSAwIGlzIHJldHVybmVkCiAKICAgdm9pZCBwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKICAgICAtIHNldC91bnNldCB0aGUgcG93ZXIuaWdub3JlX2NoaWxkcmVuIGZsYWcgb2YgdGhlIGRldmljZQpAQCAtMzc4LDUgKzM3OSw1NSBAQAogdGhleSB3aWxsIGZhaWwgcmV0dXJuaW5nIC1FQUdBSU4sIGJlY2F1c2UgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIgaXMKIGluY3JlbWVudGVkIGJ5IHRoZSBjb3JlIGJlZm9yZSBleGVjdXRpbmcgLT5wcm9iZSgpIGFuZCAtPnJlbW92ZSgpLiAgU3RpbGwsIGl0CiBtYXkgYmUgZGVzaXJhYmxlIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhcyBzb29uIGFzIC0+cHJvYmUoKSBvciAtPnJlbW92ZSgpIGhhcwotZmluaXNoZWQsIHNvIHRoZSBQTSBjb3JlIHVzZXMgcG1fcnVudGltZV9pZGxlX3N5bmMoKSB0byBpbnZva2UgdGhlIGRldmljZSBidXMKLXR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGF0IHRoYXQgdGltZS4KK2ZpbmlzaGVkLCBzbyB0aGUgUE0gY29yZSB1c2VzIHBtX3J1bnRpbWVfaWRsZV9zeW5jKCkgdG8gaW52b2tlIHRoZQorc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2UgYXQgdGhhdCB0aW1lLgorCis2LiBSdW4tdGltZSBQTSBhbmQgU3lzdGVtIFNsZWVwCisKK1J1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAgKGkuZS4sIHN5c3RlbSBzdXNwZW5kIGFuZCBoaWJlcm5hdGlvbiwgYWxzbyBrbm93bgorYXMgc3VzcGVuZC10by1SQU0gYW5kIHN1c3BlbmQtdG8tZGlzaykgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyIGluIGEgY291cGxlIG9mCit3YXlzLiAgSWYgYSBkZXZpY2UgaXMgYWN0aXZlIHdoZW4gYSBzeXN0ZW0gc2xlZXAgc3RhcnRzLCBldmVyeXRoaW5nIGlzCitzdHJhaWdodGZvcndhcmQuICBCdXQgd2hhdCBzaG91bGQgaGFwcGVuIGlmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBzdXNwZW5kZWQ/CisKK1RoZSBkZXZpY2UgbWF5IGhhdmUgZGlmZmVyZW50IHdha2UtdXAgc2V0dGluZ3MgZm9yIHJ1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAuCitGb3IgZXhhbXBsZSwgcmVtb3RlIHdha2UtdXAgbWF5IGJlIGVuYWJsZWQgZm9yIHJ1bi10aW1lIHN1c3BlbmQgYnV0IGRpc2FsbG93ZWQKK2ZvciBzeXN0ZW0gc2xlZXAgKGRldmljZV9tYXlfd2FrZXVwKGRldikgcmV0dXJucyAnZmFsc2UnKS4gIFdoZW4gdGhpcyBoYXBwZW5zLAordGhlIHN1YnN5c3RlbS1sZXZlbCBzeXN0ZW0gc3VzcGVuZCBjYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3IgY2hhbmdpbmcgdGhlCitkZXZpY2UncyB3YWtlLXVwIHNldHRpbmcgKGl0IG1heSBsZWF2ZSB0aGF0IHRvIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgc3lzdGVtCitzdXNwZW5kIHJvdXRpbmUpLiAgSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZXN1bWUgdGhlIGRldmljZSBhbmQgc3VzcGVuZCBpdCBhZ2FpbgoraW4gb3JkZXIgdG8gZG8gc28uICBUaGUgc2FtZSBpcyB0cnVlIGlmIHRoZSBkcml2ZXIgdXNlcyBkaWZmZXJlbnQgcG93ZXIgbGV2ZWxzCitvciBvdGhlciBzZXR0aW5ncyBmb3IgcnVuLXRpbWUgc3VzcGVuZCBhbmQgc3lzdGVtIHNsZWVwLgorCitEdXJpbmcgc3lzdGVtIHJlc3VtZSwgZGV2aWNlcyBnZW5lcmFsbHkgc2hvdWxkIGJlIGJyb3VnaHQgYmFjayB0byBmdWxsIHBvd2VyLAorZXZlbiBpZiB0aGV5IHdlcmUgc3VzcGVuZGVkIGJlZm9yZSB0aGUgc3lzdGVtIHNsZWVwIGJlZ2FuLiAgVGhlcmUgYXJlIHNldmVyYWwKK3JlYXNvbnMgZm9yIHRoaXMsIGluY2x1ZGluZzoKKworICAqIFRoZSBkZXZpY2UgbWlnaHQgbmVlZCB0byBzd2l0Y2ggcG93ZXIgbGV2ZWxzLCB3YWtlLXVwIHNldHRpbmdzLCBldGMuCisKKyAgKiBSZW1vdGUgd2FrZS11cCBldmVudHMgbWlnaHQgaGF2ZSBiZWVuIGxvc3QgYnkgdGhlIGZpcm13YXJlLgorCisgICogVGhlIGRldmljZSdzIGNoaWxkcmVuIG1heSBuZWVkIHRoZSBkZXZpY2UgdG8gYmUgYXQgZnVsbCBwb3dlciBpbiBvcmRlcgorICAgIHRvIHJlc3VtZSB0aGVtc2VsdmVzLgorCisgICogVGhlIGRyaXZlcidzIGlkZWEgb2YgdGhlIGRldmljZSBzdGF0ZSBtYXkgbm90IGFncmVlIHdpdGggdGhlIGRldmljZSdzCisgICAgcGh5c2ljYWwgc3RhdGUuICBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nIHJlc3VtZSBmcm9tIGhpYmVybmF0aW9uLgorCisgICogVGhlIGRldmljZSBtaWdodCBuZWVkIHRvIGJlIHJlc2V0LgorCisgICogRXZlbiB0aG91Z2ggdGhlIGRldmljZSB3YXMgc3VzcGVuZGVkLCBpZiBpdHMgdXNhZ2UgY291bnRlciB3YXMgPiAwIHRoZW4gbW9zdAorICAgIGxpa2VseSBpdCB3b3VsZCBuZWVkIGEgcnVuLXRpbWUgcmVzdW1lIGluIHRoZSBuZWFyIGZ1dHVyZSBhbnl3YXkuCisKKyAgKiBBbHdheXMgZ29pbmcgYmFjayB0byBmdWxsIHBvd2VyIGlzIHNpbXBsZXN0LgorCitJZiB0aGUgZGV2aWNlIHdhcyBzdXNwZW5kZWQgYmVmb3JlIHRoZSBzbGVlcCBiZWdhbiwgdGhlbiBpdHMgcnVuLXRpbWUgUE0gc3RhdHVzCit3aWxsIGhhdmUgdG8gYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBhY3R1YWwgcG9zdC1zeXN0ZW0gc2xlZXAgc3RhdHVzLiAgVGhlIHdheQordG8gZG8gdGhpcyBpczoKKworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKK1RoZSBQTSBjb3JlIGFsd2F5cyBpbmNyZW1lbnRzIHRoZSBydW4tdGltZSB1c2FnZSBjb3VudGVyIGJlZm9yZSBjYWxsaW5nIHRoZQorLT5wcmVwYXJlKCkgY2FsbGJhY2sgYW5kIGRlY3JlbWVudHMgaXQgYWZ0ZXIgY2FsbGluZyB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrLgorSGVuY2UgZGlzYWJsaW5nIHJ1bi10aW1lIFBNIHRlbXBvcmFyaWx5IGxpa2UgdGhpcyB3aWxsIG5vdCBjYXVzZSBhbnkgcnVuLXRpbWUKK3N1c3BlbmQgY2FsbGJhY2tzIHRvIGJlIGxvc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21waWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTM5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dApAQCAtMCwwICsxLDQyIEBACisqIE9wZW5QSUMgYW5kIGl0cyBpbnRlcnJ1cHQgbnVtYmVycyBvbiBGcmVlc2NhbGUncyBlNTAwL2U2MDAgY29yZXMKKworVGhlIE9wZW5QSUMgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIGludGVycnVwdCBzb3VyY2UgaGFzIHRvCitiZWNvbWUgd2hpY2ggaW50ZXJydXB0IG51bWJlci4gVGhpcyBpcyB1cCB0byB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCBldmVyeQoraW50ZXJydXB0IHNvdXJjZSBoYXMgdG8gaGF2ZSBhbiB1bmlxdWUgaW50ZXJydXB0IG51bWJlciAvIHZlY3RvciBudW1iZXIuCitUbyBhY2NvbXBsaXNoIHRoaXMgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXNzaWducyB0aGUgbnVtYmVyIHplcm8gdG8KK3RoZSBmaXJzdCBzb3VyY2UsIHRoZSBudW1iZXIgb25lIHRvIHRoZSBzZWNvbmQgc291cmNlIGFuZCBzbyBvbiB1bnRpbAorYWxsIGludGVycnVwdCBzb3VyY2VzIGhhdmUgdGhlaXIgdW5pcXVlIG51bWJlci4KK1VzdWFsbHkgdGhlIGFzc2lnbmVkIHZlY3RvciBudW1iZXIgZXF1YWxzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG1lbnRpb25lZAoraW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGEgZ2l2ZW4gY29yZSAvIENQVS4gVGhpcyBpcyBob3dldmVyIG5vdCB0cnVlCitmb3IgdGhlIGU1MDAgY29yZXMgKE1QQzg1WFggQ1BVcykgd2hlcmUgdGhlIGRvY3VtZW50YXRpb24gZGlzdGluZ3Vpc2hlcworYmV0d2VlbiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYW5kIHN0YXJ0cyBjb3VudGluZyBhdAoremVybyBmb3IgYm90aCBvZiB0aGVtLgorCitTbyB3aGF0IHRvIHdyaXRlIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlIFggb3IgaW50ZXJuYWwgaW50ZXJydXB0Citzb3VyY2UgWSBpbnRvIHRoZSBkZXZpY2UgdHJlZT8gSGVyZSBpcyBhbiBleGFtcGxlOgorCitUaGUgbWVtb3J5IG1hcCBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSBNUEM4NTQ0WzBdIHNob3dzLAordGhhdCB0aGUgZmlyc3QgaW50ZXJydXB0IHNvdXJjZSBzdGFydHMgYXQgMHg1XzAwMDAgKFBJQyBSZWdpc3RlciBBZGRyZXNzCitNYXAtSW50ZXJydXB0IFNvdXJjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycykuIFRoaXMgc291cmNlIGJlY29tZXMgdGhlCitudW1iZXIgemVybyB0aGVyZWZvcmU6CisgRXh0ZXJuYWwgaW50ZXJydXB0IDAgPSBpbnRlcnJ1cHQgbnVtYmVyIDAKKyBFeHRlcm5hbCBpbnRlcnJ1cHQgMSA9IGludGVycnVwdCBudW1iZXIgMQorIEV4dGVybmFsIGludGVycnVwdCAyID0gaW50ZXJydXB0IG51bWJlciAyCisgLi4uCitFdmVyeSBpbnRlcnJ1cHQgbnVtYmVyIGFsbG9jYXRlcyAweDIwIGJ5dGVzIHJlZ2lzdGVyIHNwYWNlLiBTbyB0byBnZXQKK2l0cyBudW1iZXIgaXQgaXMgc3VmZmljaWVudCB0byBzaGlmdCB0aGUgbG93ZXIgMTZiaXRzIHRvIHJpZ2h0IGJ5IGZpdmUuCitTbyBmb3IgdGhlIGV4dGVybmFsIGludGVycnVwdCAxMCB3ZSBoYXZlOgorICAweDAxNDAgPj4gNSA9IDEwCisKK0FmdGVyIHRoZSBleHRlcm5hbCBzb3VyY2VzLCB0aGUgaW50ZXJuYWwgc291cmNlcyBmb2xsb3cuIFRoZSBpbiBjb3JlIEkyQworY29udHJvbGxlciBvbiB0aGUgTVBDODU0NCBmb3IgaW5zdGFuY2UgaGFzIHRoZSBpbnRlcm5hbCBzb3VyY2UgbnVtYmVyCisyNy4gT28gb2J0YWluIGl0cyBpbnRlcnJ1cHQgbnVtYmVyIHdlIHRha2UgdGhlIGxvd2VyIDE2Yml0cyBvZiBpdHMgbWVtb3J5CithZGRyZXNzICgweDVfMDU2MCkgYW5kIHNoaWZ0IGl0IHJpZ2h0OgorIDB4MDU2MCA+PiA1ID0gNDMKKworVGhlcmVmb3JlIHRoZSBJMkMgZGV2aWNlIG5vZGUgZm9yIHRoZSBNUEM4NTQ0IENQVSBoYXMgdG8gaGF2ZSB0aGUKK2ludGVycnVwdCBudW1iZXIgNDMgc3BlY2lmaWVkIGluIHRoZSBkZXZpY2UgdHJlZS4KKworWzBdIE1QQzg1NDRFIFBvd2VyUVVJQ0NUTSBJSUksIEludGVncmF0ZWQgSG9zdCBQcm9jZXNzb3IgRmFtaWx5IFJlZmVyZW5jZSBNYW51YWwKKyAgICBNUEM4NTQ0RVJNIFJldi4gMSAxMC8yMDA3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGU5M2FmZmYuLmU3MmNlZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC00MDMsNCArNDAzLDUgQEAKIENpcnJ1cyBMb2dpYyBDUzQyMDYvNDIwNwogPT09PT09PT09PT09PT09PT09PT09PT09CiAgIG1icDU1CQlNYWNCb29rIFBybyA1LDUKKyAgaW1hYzI3CUlNYWMgMjcgSW5jaAogICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1Byb2NmaWxlLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQKaW5kZXggNzE5YTgxOS4uMDczMDFkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1Byb2NmaWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0CkBAIC05NSw3ICs5NSw3IEBACiAJSXQgdGFrZXMgYW4gaW50ZWdlciB2YWx1ZSwgY2FuIGJlIGNoYW5nZWQgYnkgd3JpdGluZyB0byB0aGlzCiAJZmlsZSwgc3VjaCBhcwogCi0JCSAjIGNhdCA1ID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL3hydW5fZGVidWcKKwkJICMgZWNobyA1ID4gL3Byb2MvYXNvdW5kL2NhcmQwL3BjbTBwL3hydW5fZGVidWcKIAogCVRoZSB2YWx1ZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGJpdCBmbGFnczoKIAkgIGJpdCAwID0gRW5hYmxlIFhSVU4vamlmZmllcyBkZWJ1ZyBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vc3RhYmxlX2tlcm5lbF9ydWxlcy50eHQKaW5kZXggYTQ1MjIyNy4uNWVmZmE1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zdGFibGVfa2VybmVsX3J1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N0YWJsZV9rZXJuZWxfcnVsZXMudHh0CkBAIC0yNiwxMyArMjYsMzMgQEAKIAogIC0gU2VuZCB0aGUgcGF0Y2gsIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGZvbGxvd3MgdGhlIGFib3ZlIHJ1bGVzLCB0bwogICAgc3RhYmxlQGtlcm5lbC5vcmcuCisgLSBUbyBoYXZlIHRoZSBwYXRjaCBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIHRoZSBzdGFibGUgdHJlZSwgYWRkIHRoZQorICAgdGhlIHRhZworICAgICBDYzogc3RhYmxlQGtlcm5lbC5vcmcKKyAgIGluIHRoZSBzaWduLW9mZiBhcmVhLiBPbmNlIHRoZSBwYXRjaCBpcyBtZXJnZWQgaXQgd2lsbCBiZSBhcHBsaWVkIHRvCisgICB0aGUgc3RhYmxlIHRyZWUgd2l0aG91dCBhbnl0aGluZyBlbHNlIG5lZWRpbmcgdG8gYmUgZG9uZSBieSB0aGUgYXV0aG9yCisgICBvciBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KKyAtIElmIHRoZSBwYXRjaCByZXF1aXJlcyBvdGhlciBwYXRjaGVzIGFzIHByZXJlcXVpc2l0ZXMgd2hpY2ggY2FuIGJlCisgICBjaGVycnktcGlja2VkIHRoYW4gdGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGluCisgICB0aGUgc2lnbi1vZmYgYXJlYToKKworICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBhMWY4NGEzOiBzY2hlZDogQ2hlY2sgZm9yIGlkbGUKKyAgICAgQ2M6IDxzdGFibGVAa2VybmVsLm9yZz4gIyAuMzIueDogMWI5NTA4Zjogc2NoZWQ6IFJhdGUtbGltaXQgbmV3aWRsZQorICAgICBDYzogPHN0YWJsZUBrZXJuZWwub3JnPiAjIC4zMi54OiBmZDIxMDczOiBzY2hlZDogRml4IGFmZmluaXR5IGxvZ2ljCisgICAgIENjOiA8c3RhYmxlQGtlcm5lbC5vcmc+ICMgLjMyLngKKyAgICBTaWduZWQtb2ZmLWJ5OiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KKworICAgVGhlIHRhZyBzZXF1ZW5jZSBoYXMgdGhlIG1lYW5pbmcgb2Y6CisgICAgIGdpdCBjaGVycnktcGljayBhMWY4NGEzCisgICAgIGdpdCBjaGVycnktcGljayAxYjk1MDhmCisgICAgIGdpdCBjaGVycnktcGljayBmZDIxMDczCisgICAgIGdpdCBjaGVycnktcGljayA8dGhpcyBjb21taXQ+CisKICAtIFRoZSBzZW5kZXIgd2lsbCByZWNlaXZlIGFuIEFDSyB3aGVuIHRoZSBwYXRjaCBoYXMgYmVlbiBhY2NlcHRlZCBpbnRvIHRoZQogICAgcXVldWUsIG9yIGEgTkFLIGlmIHRoZSBwYXRjaCBpcyByZWplY3RlZC4gIFRoaXMgcmVzcG9uc2UgbWlnaHQgdGFrZSBhIGZldwogICAgZGF5cywgYWNjb3JkaW5nIHRvIHRoZSBkZXZlbG9wZXIncyBzY2hlZHVsZXMuCiAgLSBJZiBhY2NlcHRlZCwgdGhlIHBhdGNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIC1zdGFibGUgcXVldWUsIGZvciByZXZpZXcgYnkKICAgIG90aGVyIGRldmVsb3BlcnMgYW5kIGJ5IHRoZSByZWxldmFudCBzdWJzeXN0ZW0gbWFpbnRhaW5lci4KLSAtIElmIHRoZSBzdGFibGVAa2VybmVsLm9yZyBhZGRyZXNzIGlzIGFkZGVkIHRvIGEgcGF0Y2gsIHdoZW4gaXQgZ29lcyBpbnRvCi0gICBMaW51cydzIHRyZWUgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGVtYWlsZWQgdG8gdGhlIHN0YWJsZSB0ZWFtLgogIC0gU2VjdXJpdHkgcGF0Y2hlcyBzaG91bGQgbm90IGJlIHNlbnQgdG8gdGhpcyBhbGlhcywgYnV0IGluc3RlYWQgdG8gdGhlCiAgICBkb2N1bWVudGVkIHNlY3VyaXR5QGtlcm5lbC5vcmcgYWRkcmVzcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMta21lbS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dAppbmRleCA2ZWYyYTg2Li5hYTgyZWU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1rbWVtLnR4dApAQCAtMSw3ICsxLDcgQEAKIAkJCVN1YnN5c3RlbSBUcmFjZSBQb2ludHM6IGttZW0KIAotVGhlIHRyYWNpbmcgc3lzdGVtIGttZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KLXdpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmb3VyIG1ham9yIHN1YmhlYWRpbmdzLgorVGhlIGttZW0gdHJhY2luZyBzeXN0ZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gb2JqZWN0IGFuZCBwYWdlIGFsbG9jYXRpb24KK3dpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSBmaXZlIG1ham9yIHN1YmhlYWRpbmdzLgogCiAgIG8gU2xhYiBhbGxvY2F0aW9uIG9mIHNtYWxsIG9iamVjdHMgb2YgdW5rbm93biB0eXBlIChrbWFsbG9jKQogICBvIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIGtub3duIHR5cGUKQEAgLTksNyArOSw3IEBACiAgIG8gUGVyLUNQVSBBbGxvY2F0b3IgQWN0aXZpdHkKICAgbyBFeHRlcm5hbCBGcmFnbWVudGF0aW9uCiAKLVRoaXMgZG9jdW1lbnQgd2lsbCBkZXNjcmliZSB3aGF0IGVhY2ggb2YgdGhlIHRyYWNlcG9pbnRzIGFyZSBhbmQgd2h5IHRoZXkKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgaXMgYW5kIHdoeSB0aGV5CiBtaWdodCBiZSB1c2VmdWwuCiAKIDEuIFNsYWIgYWxsb2NhdGlvbiBvZiBzbWFsbCBvYmplY3RzIG9mIHVua25vd24gdHlwZQpAQCAtMzQsNyArMzQsNyBAQAogVGhlc2UgZXZlbnRzIGFyZSBzaW1pbGFyIGluIHVzYWdlIHRvIHRoZSBrbWFsbG9jLXJlbGF0ZWQgZXZlbnRzIGV4Y2VwdCB0aGF0CiBpdCBpcyBsaWtlbHkgZWFzaWVyIHRvIHBpbiB0aGUgZXZlbnQgZG93biB0byBhIHNwZWNpZmljIGNhY2hlLiBBdCB0aGUgdGltZQogb2Ygd3JpdGluZywgbm8gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIHdoYXQgc2xhYiBpcyBiZWluZyBhbGxvY2F0ZWQgZnJvbSwKLWJ1dCB0aGUgY2FsbF9zaXRlIGNhbiB1c3VhbGx5IGJlIHVzZWQgdG8gZXh0cmFwb2xhdGUgdGhhdCBpbmZvcm1hdGlvbgorYnV0IHRoZSBjYWxsX3NpdGUgY2FuIHVzdWFsbHkgYmUgdXNlZCB0byBleHRyYXBvbGF0ZSB0aGF0IGluZm9ybWF0aW9uLgogCiAzLiBQYWdlIGFsbG9jYXRpb24KID09PT09PT09PT09PT09PT09PQpAQCAtODAsOSArODAsOSBAQAogV2hlbiB0aGUgcGVyLUNQVSBsaXN0IGlzIHRvbyBmdWxsLCBhIG51bWJlciBvZiBwYWdlcyBhcmUgZnJlZWQsIGVhY2ggb25lCiB3aGljaCB0cmlnZ2VycyBhIG1tX3BhZ2VfcGNwdV9kcmFpbiBldmVudC4KIAotVGhlIGluZGl2aWR1YWwgbmF0dXJlIG9mIHRoZSBldmVudHMgYXJlIHNvIHRoYXQgcGFnZXMgY2FuIGJlIHRyYWNrZWQKK1RoZSBpbmRpdmlkdWFsIG5hdHVyZSBvZiB0aGUgZXZlbnRzIGlzIHNvIHRoYXQgcGFnZXMgY2FuIGJlIHRyYWNrZWQKIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gQSBudW1iZXIgb2YgZHJhaW4gb3IgcmVmaWxsIHBhZ2VzIHRoYXQgb2NjdXIKLWNvbnNlY3V0aXZlbHkgaW1wbHkgdGhlIHpvbmUtPmxvY2sgYmVpbmcgdGFrZW4gb25jZS4gTGFyZ2UgYW1vdW50cyBvZiBQQ1AKK2NvbnNlY3V0aXZlbHkgaW1wbHkgdGhlIHpvbmUtPmxvY2sgYmVpbmcgdGFrZW4gb25jZS4gTGFyZ2UgYW1vdW50cyBvZiBwZXItQ1BVCiByZWZpbGxzIGFuZCBkcmFpbnMgY291bGQgaW1wbHkgYW4gaW1iYWxhbmNlIGJldHdlZW4gQ1BVcyB3aGVyZSB0b28gbXVjaCB3b3JrCiBpcyBiZWluZyBjb25jZW50cmF0ZWQgaW4gb25lIHBsYWNlLiBJdCBjb3VsZCBhbHNvIGluZGljYXRlIHRoYXQgdGhlIHBlci1DUFUKIGxpc3RzIHNob3VsZCBiZSBhIGxhcmdlciBzaXplLiBGaW5hbGx5LCBsYXJnZSBhbW91bnRzIG9mIHJlZmlsbHMgb24gb25lIENQVQpAQCAtMTAyLDYgKzEwMiw2IEBACiAKIExhcmdlIG51bWJlcnMgb2YgdGhpcyBldmVudCBpbXBsaWVzIHRoYXQgbWVtb3J5IGlzIGZyYWdtZW50aW5nIGFuZAogaGlnaC1vcmRlciBhbGxvY2F0aW9ucyB3aWxsIHN0YXJ0IGZhaWxpbmcgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuIE9uZQotbWVhbnMgb2YgcmVkdWNpbmcgdGhlIG9jY3VyYW5nZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCittZWFucyBvZiByZWR1Y2luZyB0aGUgb2NjdXJyZW5jZSBvZiB0aGlzIGV2ZW50IGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mCiBtaW5fZnJlZV9rYnl0ZXMgaW4gaW5jcmVtZW50cyBvZiAzKnBhZ2VibG9ja19zaXplKm5yX29ubGluZV9ub2RlcyB3aGVyZQogcGFnZWJsb2NrX3NpemUgaXMgdXN1YWxseSB0aGUgc2l6ZSBvZiB0aGUgZGVmYXVsdCBodWdlcGFnZSBzaXplLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKaW5kZXggNjQxYTFlZi4uMjM5ZjE0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CkBAIC01MywxNCArNTMsMTQgQEAKIEZvciBleGFtcGxlLCBpZiB0aGUgZnVuY3Rpb24gZm9vKCkgY2FsbHMgYmFyKCksIHdoZW4gdGhlIGJhcigpIGZ1bmN0aW9uIGNhbGxzCiBtY291bnQoKSwgdGhlIGFyZ3VtZW50cyBtY291bnQoKSB3aWxsIHBhc3MgdG8gdGhlIHRyYWNlciBhcmU6CiAJImZyb21wYyIgLSB0aGUgYWRkcmVzcyBiYXIoKSB3aWxsIHVzZSB0byByZXR1cm4gdG8gZm9vKCkKLQkic2VsZnBjIiAtIHRoZSBhZGRyZXNzIGJhcigpICh3aXRoIF9tY291bnQoKSBzaXplIGFkanVzdG1lbnQpCisJInNlbGZwYyIgLSB0aGUgYWRkcmVzcyBiYXIoKSAod2l0aCBtY291bnQoKSBzaXplIGFkanVzdG1lbnQpCiAKIEFsc28ga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtY291bnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgKmEgbG90Kiwgc28KIG9wdGltaXppbmcgZm9yIHRoZSBkZWZhdWx0IGNhc2Ugb2Ygbm8gdHJhY2VyIHdpbGwgaGVscCB0aGUgc21vb3RoIHJ1bm5pbmcgb2YKIHlvdXIgc3lzdGVtIHdoZW4gdHJhY2luZyBpcyBkaXNhYmxlZC4gIFNvIHRoZSBzdGFydCBvZiB0aGUgbWNvdW50IGZ1bmN0aW9uIGlzCi10eXBpY2FsbHkgdGhlIGJhcmUgbWluIHdpdGggY2hlY2tpbmcgdGhpbmdzIGJlZm9yZSByZXR1cm5pbmcuICBUaGF0IGFsc28gbWVhbnMKLXRoZSBjb2RlIGZsb3cgc2hvdWxkIHVzdWFsbHkga2VwdCBsaW5lYXIgKGkuZS4gbm8gYnJhbmNoaW5nIGluIHRoZSBub3AgY2FzZSkuCi1UaGlzIGlzIG9mIGNvdXJzZSBhbiBvcHRpbWl6YXRpb24gYW5kIG5vdCBhIGhhcmQgcmVxdWlyZW1lbnQuCit0eXBpY2FsbHkgdGhlIGJhcmUgbWluaW11bSB3aXRoIGNoZWNraW5nIHRoaW5ncyBiZWZvcmUgcmV0dXJuaW5nLiAgVGhhdCBhbHNvCittZWFucyB0aGUgY29kZSBmbG93IHNob3VsZCB1c3VhbGx5IGJlIGtlcHQgbGluZWFyIChpLmUuIG5vIGJyYW5jaGluZyBpbiB0aGUgbm9wCitjYXNlKS4gIFRoaXMgaXMgb2YgY291cnNlIGFuIG9wdGltaXphdGlvbiBhbmQgbm90IGEgaGFyZCByZXF1aXJlbWVudC4KIAogSGVyZSBpcyBzb21lIHBzZXVkbyBjb2RlIHRoYXQgc2hvdWxkIGhlbHAgKHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYWN0dWFsbHkgYmUKIGltcGxlbWVudGVkIGluIGFzc2VtYmx5KToKQEAgLTEzMSwxMCArMTMxLDEwIEBACiAKIFRoZSBtY291bnQgZnVuY3Rpb24gc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbiBwb2ludGVycyBmdHJhY2VfZ3JhcGhfcmV0dXJuCiAoY29tcGFyZSB0byBmdHJhY2Vfc3R1YikgYW5kIGZ0cmFjZV9ncmFwaF9lbnRyeSAoY29tcGFyZSB0bwotZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIpLiAgSWYgZWl0aGVyIG9mIHRob3NlIGFyZSBub3Qgc2V0IHRvIHRoZSByZWxldmFudCBzdHViCitmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YikuICBJZiBlaXRoZXIgb2YgdGhvc2UgaXMgbm90IHNldCB0byB0aGUgcmVsZXZhbnQgc3R1YgogZnVuY3Rpb24sIGNhbGwgdGhlIGFyY2gtc3BlY2lmaWMgZnVuY3Rpb24gZnRyYWNlX2dyYXBoX2NhbGxlciB3aGljaCBpbiB0dXJuCiBjYWxscyB0aGUgYXJjaC1zcGVjaWZpYyBmdW5jdGlvbiBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4uICBOZWl0aGVyIG9mIHRoZXNlCi1mdW5jdGlvbiBuYW1lcyBhcmUgc3RyaWN0bHkgcmVxdWlyZWQsIGJ1dCB5b3Ugc2hvdWxkIHVzZSB0aGVtIGFueXdheXMgdG8gc3RheQorZnVuY3Rpb24gbmFtZXMgaXMgc3RyaWN0bHkgcmVxdWlyZWQsIGJ1dCB5b3Ugc2hvdWxkIHVzZSB0aGVtIGFueXdheSB0byBzdGF5CiBjb25zaXN0ZW50IGFjcm9zcyB0aGUgYXJjaGl0ZWN0dXJlIHBvcnRzIC0tIGVhc2llciB0byBjb21wYXJlICYgY29udHJhc3QKIHRoaW5ncy4KIApAQCAtMTQ0LDcgKzE0NCw3IEBACiBsb2NhdGVkIG9uIHRoZSBzdGFjay4gIFRoaXMgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byBoaWphY2sgdGhlIHJldHVybiBhZGRyZXNzCiB0ZW1wb3JhcmlseSB0byBoYXZlIGl0IHBvaW50IHRvIHRoZSBhcmNoLXNwZWNpZmljIGZ1bmN0aW9uIHJldHVybl90b19oYW5kbGVyLgogVGhhdCBmdW5jdGlvbiB3aWxsIHNpbXBseSBjYWxsIHRoZSBjb21tb24gZnRyYWNlX3JldHVybl90b19oYW5kbGVyIGZ1bmN0aW9uIGFuZAotdGhhdCB3aWxsIHJldHVybiB0aGUgb3JpZ2luYWwgcmV0dXJuIGFkZHJlc3Mgd2l0aCB3aGljaCwgeW91IGNhbiByZXR1cm4gdG8gdGhlCit0aGF0IHdpbGwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXR1cm4gYWRkcmVzcyB3aXRoIHdoaWNoIHlvdSBjYW4gcmV0dXJuIHRvIHRoZQogb3JpZ2luYWwgY2FsbCBzaXRlLgogCiBIZXJlIGlzIHRoZSB1cGRhdGVkIG1jb3VudCBwc2V1ZG8gY29kZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvbW1pb3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvbW1pb3RyYWNlLnR4dAppbmRleCAxNjJlZmZiLi42NjRlNzM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL21taW90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9tbWlvdHJhY2UudHh0CkBAIC00NCw3ICs0NCw4IEBACiBVc2FnZQogLS0tLS0KIAotTWFrZSBzdXJlIGRlYnVnZnMgaXMgbW91bnRlZCB0byAvc3lzL2tlcm5lbC9kZWJ1Zy4gSWYgbm90LCAocmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzKQorTWFrZSBzdXJlIGRlYnVnZnMgaXMgbW91bnRlZCB0byAvc3lzL2tlcm5lbC9kZWJ1Zy4KK0lmIG5vdCAocmVxdWlyZXMgcm9vdCBwcml2aWxlZ2VzKToKICQgbW91bnQgLXQgZGVidWdmcyBkZWJ1Z2ZzIC9zeXMva2VybmVsL2RlYnVnCiAKIENoZWNrIHRoYXQgdGhlIGRyaXZlciB5b3UgYXJlIGFib3V0IHRvIHRyYWNlIGlzIG5vdCBsb2FkZWQuCkBAIC05MSw3ICs5Miw3IEBACiAkIHRhciB6Y2YgcGNpaWQtbmljay1tbWlvdHJhY2UudGFyLmd6IG15ZHVtcC50eHQgbHNwY2kudHh0IGRtZXNnLnR4dAogYW5kIHRoZW4gc2VuZCB0aGUgLnRhci5neiBmaWxlLiBUaGUgdHJhY2UgY29tcHJlc3NlcyBjb25zaWRlcmFibHkuIFJlcGxhY2UKICJwY2lpZCIgYW5kICJuaWNrIiB3aXRoIHRoZSBQQ0kgSUQgb3IgbW9kZWwgbmFtZSBvZiB5b3VyIHBpZWNlIG9mIGhhcmR3YXJlCi11bmRlciBpbnZlc3RpZ2F0aW9uIGFuZCB5b3VyIG5pY2sgbmFtZS4KK3VuZGVyIGludmVzdGlnYXRpb24gYW5kIHlvdXIgbmlja25hbWUuCiAKIAogSG93IE1taW90cmFjZSBXb3JrcwpAQCAtMTAwLDcgKzEwMSw3IEBACiBBY2Nlc3MgdG8gaGFyZHdhcmUgSU8tbWVtb3J5IGlzIGdhaW5lZCBieSBtYXBwaW5nIGFkZHJlc3NlcyBmcm9tIFBDSSBidXMgYnkKIGNhbGxpbmcgb25lIG9mIHRoZSBpb3JlbWFwXyooKSBmdW5jdGlvbnMuIE1taW90cmFjZSBpcyBob29rZWQgaW50byB0aGUKIF9faW9yZW1hcCgpIGZ1bmN0aW9uIGFuZCBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIG1hcHBpbmcgaXMgY3JlYXRlZC4gTWFwcGluZyBpcwotYW4gZXZlbnQgdGhhdCBpcyByZWNvcmRlZCBpbnRvIHRoZSB0cmFjZSBsb2cuIE5vdGUsIHRoYXQgSVNBIHJhbmdlIG1hcHBpbmdzCithbiBldmVudCB0aGF0IGlzIHJlY29yZGVkIGludG8gdGhlIHRyYWNlIGxvZy4gTm90ZSB0aGF0IElTQSByYW5nZSBtYXBwaW5ncwogYXJlIG5vdCBjYXVnaHQsIHNpbmNlIHRoZSBtYXBwaW5nIGFsd2F5cyBleGlzdHMgYW5kIGlzIHJldHVybmVkIGRpcmVjdGx5LgogCiBNTUlPIGFjY2Vzc2VzIGFyZSByZWNvcmRlZCB2aWEgcGFnZSBmYXVsdHMuIEp1c3QgYmVmb3JlIF9faW9yZW1hcCgpIHJldHVybnMsCkBAIC0xMjIsMTEgKzEyMywxMSBAQAogLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgcmF3IGxvZyBpcyB0ZXh0IGFuZCBlYXNpbHkgZmlsdGVyZWQgd2l0aCBlLmcuIGdyZXAgYW5kIGF3ay4gT25lIHJlY29yZCBpcwotb25lIGxpbmUgaW4gdGhlIGxvZy4gQSByZWNvcmQgc3RhcnRzIHdpdGggYSBrZXl3b3JkLCBmb2xsb3dlZCBieSBrZXl3b3JkCi1kZXBlbmRhbnQgYXJndW1lbnRzLiBBcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBhIHNwYWNlLCBvciBjb250aW51ZSB1bnRpbCB0aGUKK29uZSBsaW5lIGluIHRoZSBsb2cuIEEgcmVjb3JkIHN0YXJ0cyB3aXRoIGEga2V5d29yZCwgZm9sbG93ZWQgYnkga2V5d29yZC0KK2RlcGVuZGVudCBhcmd1bWVudHMuIEFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGEgc3BhY2UsIG9yIGNvbnRpbnVlIHVudGlsIHRoZQogZW5kIG9mIGxpbmUuIFRoZSBmb3JtYXQgZm9yIHZlcnNpb24gMjAwNzA4MjQgaXMgYXMgZm9sbG93czoKIAotRXhwbGFuYXRpb24JS2V5d29yZAlTcGFjZSBzZXBhcmF0ZWQgYXJndW1lbnRzCitFeHBsYW5hdGlvbglLZXl3b3JkCVNwYWNlLXNlcGFyYXRlZCBhcmd1bWVudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiByZWFkIGV2ZW50CVIJd2lkdGgsIHRpbWVzdGFtcCwgbWFwIGlkLCBwaHlzaWNhbCwgdmFsdWUsIFBDLCBQSUQKQEAgLTEzNiw3ICsxMzcsNyBAQAogbWFya2VyCQlNQVJLCXRpbWVzdGFtcCwgdGV4dAogdmVyc2lvbgkJVkVSU0lPTgl0aGUgc3RyaW5nICIyMDA3MDgyNCIKIGluZm8gZm9yIHJlYWRlcglMU1BDSQlvbmUgbGluZSBmcm9tIGxzcGNpIC12Ci1QQ0kgYWRkcmVzcyBtYXAJUENJREVWCXNwYWNlIHNlcGFyYXRlZCAvcHJvYy9idXMvcGNpL2RldmljZXMgZGF0YQorUENJIGFkZHJlc3MgbWFwCVBDSURFVglzcGFjZS1zZXBhcmF0ZWQgL3Byb2MvYnVzL3BjaS9kZXZpY2VzIGRhdGEKIHVuay4gb3Bjb2RlCVVOS05PV04JdGltZXN0YW1wLCBtYXAgaWQsIHBoeXNpY2FsLCBkYXRhLCBQQywgUElECiAKIFRpbWVzdGFtcCBpcyBpbiBzZWNvbmRzIHdpdGggZGVjaW1hbHMuIFBoeXNpY2FsIGlzIGEgUENJIGJ1cyBhZGRyZXNzLCB2aXJ0dWFsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3JpbmctYnVmZmVyLWRlc2lnbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3JpbmctYnVmZmVyLWRlc2lnbi50eHQKaW5kZXggNWIxZDIzZC4uZDI5OWZmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9yaW5nLWJ1ZmZlci1kZXNpZ24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvcmluZy1idWZmZXItZGVzaWduLnR4dApAQCAtMzMsOSArMzMsOSBAQAogCiB0YWlsX3BhZ2UgLSBhIHBvaW50ZXIgdG8gdGhlIHBhZ2UgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gbmV4dAogCi1jb21taXRfcGFnZSAtIGEgcG9pbnRlciB0byB0aGUgcGFnZSB3aXRoIHRoZSBsYXN0IGZpbmlzaGVkIG5vbiBuZXN0ZWQgd3JpdGUuCitjb21taXRfcGFnZSAtIGEgcG9pbnRlciB0byB0aGUgcGFnZSB3aXRoIHRoZSBsYXN0IGZpbmlzaGVkIG5vbi1uZXN0ZWQgd3JpdGUuCiAKLWNtcHhjaGcgLSBoYXJkd2FyZSBhc3Npc3RlZCBhdG9taWMgdHJhbnNhY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nOgorY21weGNoZyAtIGhhcmR3YXJlLWFzc2lzdGVkIGF0b21pYyB0cmFuc2FjdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmc6CiAKICAgIEEgPSBCIGlmZiBwcmV2aW91cyBBID09IEMKIApAQCAtNTIsMTUgKzUyLDE1IEBACiBUaGUgcmluZyBidWZmZXIgY2FuIGJlIHVzZWQgaW4gZWl0aGVyIGFuIG92ZXJ3cml0ZSBtb2RlIG9yIGluCiBwcm9kdWNlci9jb25zdW1lciBtb2RlLgogCi1Qcm9kdWNlci9jb25zdW1lciBtb2RlIGlzIHdoZXJlIHRoZSBwcm9kdWNlciB3ZXJlIHRvIGZpbGwgdXAgdGhlCitQcm9kdWNlci9jb25zdW1lciBtb2RlIGlzIHdoZXJlIGlmIHRoZSBwcm9kdWNlciB3ZXJlIHRvIGZpbGwgdXAgdGhlCiBidWZmZXIgYmVmb3JlIHRoZSBjb25zdW1lciBjb3VsZCBmcmVlIHVwIGFueXRoaW5nLCB0aGUgcHJvZHVjZXIKIHdpbGwgc3RvcCB3cml0aW5nIHRvIHRoZSBidWZmZXIuIFRoaXMgd2lsbCBsb3NlIG1vc3QgcmVjZW50IGV2ZW50cy4KIAotT3ZlcndyaXRlIG1vZGUgaXMgd2hlcmUgdGhlIHByb2R1Y2Ugd2VyZSB0byBmaWxsIHVwIHRoZSBidWZmZXIKK092ZXJ3cml0ZSBtb2RlIGlzIHdoZXJlIGlmIHRoZSBwcm9kdWNlciB3ZXJlIHRvIGZpbGwgdXAgdGhlIGJ1ZmZlcgogYmVmb3JlIHRoZSBjb25zdW1lciBjb3VsZCBmcmVlIHVwIGFueXRoaW5nLCB0aGUgcHJvZHVjZXIgd2lsbAogb3ZlcndyaXRlIHRoZSBvbGRlciBkYXRhLiBUaGlzIHdpbGwgbG9zZSB0aGUgb2xkZXN0IGV2ZW50cy4KIAotTm8gdHdvIHdyaXRlcnMgY2FuIHdyaXRlIGF0IHRoZSBzYW1lIHRpbWUgKG9uIHRoZSBzYW1lIHBlciBjcHUgYnVmZmVyKSwKK05vIHR3byB3cml0ZXJzIGNhbiB3cml0ZSBhdCB0aGUgc2FtZSB0aW1lIChvbiB0aGUgc2FtZSBwZXItY3B1IGJ1ZmZlciksCiBidXQgYSB3cml0ZXIgbWF5IGludGVycnVwdCBhbm90aGVyIHdyaXRlciwgYnV0IGl0IG11c3QgZmluaXNoIHdyaXRpbmcKIGJlZm9yZSB0aGUgcHJldmlvdXMgd3JpdGVyIG1heSBjb250aW51ZS4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byB0aGUKIGFsZ29yaXRobS4gVGhlIHdyaXRlcnMgYWN0IGxpa2UgYSAic3RhY2siLiBUaGUgd2F5IGludGVycnVwdHMgd29ya3MKQEAgLTc5LDE2ICs3OSwxNiBAQAogCiBSZWFkZXJzIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUuIEJ1dCBubyB0d28gcmVhZGVycyBtYXkgcnVuIGF0IHRoZQogc2FtZSB0aW1lLCBub3IgY2FuIGEgcmVhZGVyIHByZWVtcHQvaW50ZXJydXB0IGFub3RoZXIgcmVhZGVyLiBBIHJlYWRlcgotY2FuIG5vdCBwcmVlbXB0L2ludGVycnVwdCBhIHdyaXRlciwgYnV0IGl0IG1heSByZWFkL2NvbnN1bWUgZnJvbSB0aGUKK2Nhbm5vdCBwcmVlbXB0L2ludGVycnVwdCBhIHdyaXRlciwgYnV0IGl0IG1heSByZWFkL2NvbnN1bWUgZnJvbSB0aGUKIGJ1ZmZlciBhdCB0aGUgc2FtZSB0aW1lIGFzIGEgd3JpdGVyIGlzIHdyaXRpbmcsIGJ1dCB0aGUgcmVhZGVyIG11c3QgYmUKIG9uIGFub3RoZXIgcHJvY2Vzc29yIHRvIGRvIHNvLiBBIHJlYWRlciBtYXkgcmVhZCBvbiBpdHMgb3duIHByb2Nlc3NvcgogYW5kIGNhbiBiZSBwcmVlbXB0ZWQgYnkgYSB3cml0ZXIuCiAKLUEgd3JpdGVyIGNhbiBwcmVlbXB0IGEgcmVhZGVyLCBidXQgYSByZWFkZXIgY2FuIG5vdCBwcmVlbXB0IGEgd3JpdGVyLgorQSB3cml0ZXIgY2FuIHByZWVtcHQgYSByZWFkZXIsIGJ1dCBhIHJlYWRlciBjYW5ub3QgcHJlZW1wdCBhIHdyaXRlci4KIEJ1dCBhIHJlYWRlciBjYW4gcmVhZCB0aGUgYnVmZmVyIGF0IHRoZSBzYW1lIHRpbWUgKG9uIGFub3RoZXIgcHJvY2Vzc29yKQogYXMgYSB3cml0ZXIuCiAKLVRoZSByaW5nIGJ1ZmZlciBpcyBtYWRlIHVwIG9mIGEgbGlzdCBvZiBwYWdlcyBoZWxkIHRvZ2V0aGVyIGJ5IGEgbGluayBsaXN0LgorVGhlIHJpbmcgYnVmZmVyIGlzIG1hZGUgdXAgb2YgYSBsaXN0IG9mIHBhZ2VzIGhlbGQgdG9nZXRoZXIgYnkgYSBsaW5rZWQgbGlzdC4KIAogQXQgaW5pdGlhbGl6YXRpb24gYSByZWFkZXIgcGFnZSBpcyBhbGxvY2F0ZWQgZm9yIHRoZSByZWFkZXIgdGhhdCBpcyBub3QKIHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLgpAQCAtMTAyLDcgKzEwMiw3IEBACiAKIFRoZSByZWFkZXIgaGFzIGl0cyBvd24gcGFnZSB0byB1c2UuIEF0IHN0YXJ0IHVwIHRpbWUsIHRoaXMgcGFnZSBpcwogYWxsb2NhdGVkIGJ1dCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIGxpc3QuIFdoZW4gdGhlIHJlYWRlciB3YW50cwotdG8gcmVhZCBmcm9tIHRoZSBidWZmZXIsIGlmIGl0cyBwYWdlIGlzIGVtcHR5IChsaWtlIGl0IGlzIG9uIHN0YXJ0IHVwKQordG8gcmVhZCBmcm9tIHRoZSBidWZmZXIsIGlmIGl0cyBwYWdlIGlzIGVtcHR5IChsaWtlIGl0IGlzIG9uIHN0YXJ0LXVwKSwKIGl0IHdpbGwgc3dhcCBpdHMgcGFnZSB3aXRoIHRoZSBoZWFkX3BhZ2UuIFRoZSBvbGQgcmVhZGVyIHBhZ2Ugd2lsbAogYmVjb21lIHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyIGFuZCB0aGUgaGVhZF9wYWdlIHdpbGwgYmUgcmVtb3ZlZC4KIFRoZSBwYWdlIGFmdGVyIHRoZSBpbnNlcnRlZCBwYWdlIChvbGQgcmVhZGVyX3BhZ2UpIHdpbGwgYmVjb21lIHRoZQpAQCAtMjA2LDcgKzIwNiw3IEBACiAKICAgY29tbWl0IHBhZ2UgLSB0aGUgcGFnZSB0aGF0IGxhc3QgZmluaXNoZWQgYSB3cml0ZS4KIAotVGhlIGNvbW1pdCBwYWdlIG9ubHkgaXMgdXBkYXRlZCBieSB0aGUgb3V0ZXIgbW9zdCB3cml0ZXIgaW4gdGhlCitUaGUgY29tbWl0IHBhZ2Ugb25seSBpcyB1cGRhdGVkIGJ5IHRoZSBvdXRlcm1vc3Qgd3JpdGVyIGluIHRoZQogd3JpdGVyIHN0YWNrLiBBIHdyaXRlciB0aGF0IHByZWVtcHRzIGFub3RoZXIgd3JpdGVyIHdpbGwgbm90IG1vdmUgdGhlCiBjb21taXQgcGFnZS4KIApAQCAtMjgxLDcgKzI4MSw3IEBACiBUaGUgY29tbWl0IHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBsYXN0IHdyaXRlIGxvY2F0aW9uIHRoYXQgd2FzCiBjb21taXR0ZWQgd2l0aG91dCBwcmVlbXB0aW5nIGFub3RoZXIgd3JpdGUuIFdoZW4gYSB3cml0ZSB0aGF0CiBwcmVlbXB0ZWQgYW5vdGhlciB3cml0ZSBpcyBjb21taXR0ZWQsIGl0IG9ubHkgYmVjb21lcyBhIHBlbmRpbmcgY29tbWl0Ci1hbmQgd2lsbCBub3QgYmUgYSBmdWxsIGNvbW1pdCB0aWxsIGFsbCB3cml0ZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZC4KK2FuZCB3aWxsIG5vdCBiZSBhIGZ1bGwgY29tbWl0IHVudGlsIGFsbCB3cml0ZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZC4KIAogVGhlIGNvbW1pdCBwYWdlIHBvaW50cyB0byB0aGUgcGFnZSB0aGF0IGhhcyB0aGUgbGFzdCBmdWxsIGNvbW1pdC4KIFRoZSB0YWlsIHBhZ2UgcG9pbnRzIHRvIHRoZSBwYWdlIHdpdGggdGhlIGxhc3Qgd3JpdGUgKGJlZm9yZQpAQCAtMjkyLDcgKzI5Miw3IEBACiBwYWdlIHRoZW4gbm8gbW9yZSB3cml0ZXMgbWF5IHRha2UgcGxhY2UgKHJlZ2FyZGxlc3Mgb2YgdGhlIG1vZGUKIG9mIHRoZSByaW5nIGJ1ZmZlcjogb3ZlcndyaXRlIGFuZCBwcm9kdWNlL2NvbnN1bWVyKS4KIAotVGhlIG9yZGVyIG9mIHBhZ2VzIGFyZToKK1RoZSBvcmRlciBvZiBwYWdlcyBpczoKIAogIGhlYWQgcGFnZQogIGNvbW1pdCBwYWdlCkBAIC0zMTEsNyArMzExLDcgQEAKIFRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIGhlYWQgcGFnZSBpcyBhZnRlciBlaXRoZXIgdGhlIGNvbW1pdCBwYWdlCiBhbmQgcG9zc2libHkgdGhlIHRhaWwgcGFnZS4gVGhhdCBpcyB3aGVuIHRoZSBjb21taXQgKGFuZCB0YWlsKSBwYWdlIGhhcyBiZWVuCiBzd2FwcGVkIHdpdGggdGhlIHJlYWRlciBwYWdlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGhlYWQgcGFnZSBpcyBhbHdheXMKLXBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLCBidXQgdGhlIHJlYWRlciBwYWdlIGlzIG5vdC4gV2hlbiBldmVyIHRoZXJlCitwYXJ0IG9mIHRoZSByaW5nIGJ1ZmZlciwgYnV0IHRoZSByZWFkZXIgcGFnZSBpcyBub3QuIFdoZW5ldmVyIHRoZXJlCiBoYXMgYmVlbiBsZXNzIHRoYW4gYSBmdWxsIHBhZ2UgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQgaW5zaWRlIHRoZSByaW5nIGJ1ZmZlciwKIGFuZCBhIHJlYWRlciBzd2FwcyBvdXQgYSBwYWdlLCBpdCB3aWxsIGJlIHN3YXBwaW5nIG91dCB0aGUgY29tbWl0IHBhZ2UuCiAKQEAgLTMzOCw3ICszMzgsNyBAQAogSW4gdGhpcyBjYXNlLCB0aGUgaGVhZCBwYWdlIHdpbGwgbm90IG1vdmUgd2hlbiB0aGUgdGFpbCBhbmQgY29tbWl0CiBtb3ZlIGJhY2sgaW50byB0aGUgcmluZyBidWZmZXIuCiAKLVRoZSByZWFkZXIgY2FuIG5vdCBzd2FwIGEgcGFnZSBpbnRvIHRoZSByaW5nIGJ1ZmZlciBpZiB0aGUgY29tbWl0IHBhZ2UKK1RoZSByZWFkZXIgY2Fubm90IHN3YXAgYSBwYWdlIGludG8gdGhlIHJpbmcgYnVmZmVyIGlmIHRoZSBjb21taXQgcGFnZQogaXMgc3RpbGwgb24gdGhhdCBwYWdlLiBJZiB0aGUgcmVhZCBtZWV0cyB0aGUgbGFzdCBjb21taXQgKHJlYWwgY29tbWl0CiBub3QgcGVuZGluZyBvciByZXNlcnZlZCksIHRoZW4gdGhlcmUgaXMgbm90aGluZyBtb3JlIHRvIHJlYWQuCiBUaGUgYnVmZmVyIGlzIGNvbnNpZGVyZWQgZW1wdHkgdW50aWwgYW5vdGhlciBmdWxsIGNvbW1pdCBmaW5pc2hlcy4KQEAgLTM5NSw3ICszOTUsNyBAQAogb2YgdGhlIGhlYWRfcGFnZSBwb2ludGVyIHdpdGggdGhlIHN3YXBwaW5nIG9mIHBhZ2VzIHdpdGggdGhlIHJlYWRlci4KIFN0YXRlIGZsYWdzIGFyZSBwbGFjZWQgaW5zaWRlIHRoZSBwb2ludGVyIHRvIHRoZSBwYWdlLiBUbyBkbyB0aGlzLAogZWFjaCBwYWdlIG11c3QgYmUgYWxpZ25lZCBpbiBtZW1vcnkgYnkgNCBieXRlcy4gVGhpcyB3aWxsIGFsbG93IHRoZSAyCi1sZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBhZGRyZXNzIHRvIGJlIHVzZWQgYXMgZmxhZ3MuIFNpbmNlCitsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBhZGRyZXNzIHRvIGJlIHVzZWQgYXMgZmxhZ3MsIHNpbmNlCiB0aGV5IHdpbGwgYWx3YXlzIGJlIHplcm8gZm9yIHRoZSBhZGRyZXNzLiBUbyBnZXQgdGhlIGFkZHJlc3MsCiBzaW1wbHkgbWFzayBvdXQgdGhlIGZsYWdzLgogCkBAIC00NjAsNyArNDYwLDcgQEAKIHdpbGwgYWxzbyB1c2UgY21weGNoZy4gSWYgdGhlIGZsYWcgYml0IGluIHRoZSBwb2ludGVyIHRvIHRoZQogaGVhZCBwYWdlIGRvZXMgbm90IGhhdmUgdGhlIEhFQURFUiBmbGFnIHNldCwgdGhlIGNvbXBhcmUgd2lsbCBmYWlsCiBhbmQgdGhlIHJlYWRlciB3aWxsIG5lZWQgdG8gbG9vayBmb3IgdGhlIG5ldyBoZWFkIHBhZ2UgYW5kIHRyeSBhZ2Fpbi4KLU5vdGUsIHRoZSBmbGFnIFVQREFURSBhbmQgSEVBREVSIGFyZSBuZXZlciBzZXQgYXQgdGhlIHNhbWUgdGltZS4KK05vdGUsIHRoZSBmbGFncyBVUERBVEUgYW5kIEhFQURFUiBhcmUgbmV2ZXIgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCiAKIFRoZSByZWFkZXIgc3dhcHMgdGhlIHJlYWRlciBwYWdlIGFzIGZvbGxvd3M6CiAKQEAgLTUzOSw3ICs1MzksNyBAQAogICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8CiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotQW5vdGhlciBpbXBvcnRhbnQgcG9pbnQuIFRoZSBwYWdlIHRoYXQgdGhlIHJlYWRlciBwYWdlIHBvaW50cyBiYWNrIHRvCitBbm90aGVyIGltcG9ydGFudCBwb2ludDogVGhlIHBhZ2UgdGhhdCB0aGUgcmVhZGVyIHBhZ2UgcG9pbnRzIGJhY2sgdG8KIGJ5IGl0cyBwcmV2aW91cyBwb2ludGVyICh0aGUgb25lIHRoYXQgbm93IHBvaW50cyB0byB0aGUgbmV3IGhlYWQgcGFnZSkKIG5ldmVyIHBvaW50cyBiYWNrIHRvIHRoZSByZWFkZXIgcGFnZS4gVGhhdCBpcyBiZWNhdXNlIHRoZSByZWFkZXIgcGFnZSBpcwogbm90IHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLiBUcmF2ZXJzaW5nIHRoZSByaW5nIGJ1ZmZlciB2aWEgdGhlIG5leHQgcG9pbnRlcnMKQEAgLTU3Miw3ICs1NzIsNyBAQAogbW92ZSB0aGUgaGVhZCBwYWdlLCB1bnRpbCB0aGUgd3JpdGVyIGlzIGZpbmlzaGVkIHdpdGggdGhlIG1vdmUuCiAKIFRoaXMgZWxpbWluYXRlcyBhbnkgcmFjZXMgdGhhdCB0aGUgcmVhZGVyIGNhbiBoYXZlIG9uIHRoZSB3cml0ZXIuIFRoZSByZWFkZXIKLW11c3Qgc3BpbiwgYW5kIHRoaXMgaXMgd2h5IHRoZSByZWFkZXIgY2FuIG5vdCBwcmVlbXB0IHRoZSB3cml0ZXIuCittdXN0IHNwaW4sIGFuZCB0aGlzIGlzIHdoeSB0aGUgcmVhZGVyIGNhbm5vdCBwcmVlbXB0IHRoZSB3cml0ZXIuCiAKICAgICAgICAgICAgIHRhaWwgcGFnZQogICAgICAgICAgICAgICAgfApAQCAtNjU5LDkgKzY1OSw5IEBACiB0YWlsIHBhZ2Ugd3JhcHBlZCB0aGUgYnVmZmVyLCBhbmQgd2UgbXVzdCBkcm9wIG5ldyB3cml0ZXMuCiAKIFRoaXMgaXMgbm90IGEgcmFjZSBjb25kaXRpb24sIGJlY2F1c2UgdGhlIGNvbW1pdCBwYWdlIGNhbiBvbmx5IGJlIG1vdmVkCi1ieSB0aGUgb3V0dGVyIG1vc3Qgd3JpdGVyICh0aGUgd3JpdGVyIHRoYXQgd2FzIHByZWVtcHRlZCkuCitieSB0aGUgb3V0ZXJtb3N0IHdyaXRlciAodGhlIHdyaXRlciB0aGF0IHdhcyBwcmVlbXB0ZWQpLgogVGhpcyBtZWFucyB0aGF0IHRoZSBjb21taXQgd2lsbCBub3QgbW92ZSB3aGlsZSBhIHdyaXRlciBpcyBtb3ZpbmcgdGhlCi10YWlsIHBhZ2UuIFRoZSByZWFkZXIgY2FuIG5vdCBzd2FwIHRoZSByZWFkZXIgcGFnZSBpZiBpdCBpcyBhbHNvIGJlaW5nCit0YWlsIHBhZ2UuIFRoZSByZWFkZXIgY2Fubm90IHN3YXAgdGhlIHJlYWRlciBwYWdlIGlmIGl0IGlzIGFsc28gYmVpbmcKIHVzZWQgYXMgdGhlIGNvbW1pdCBwYWdlLiBUaGUgcmVhZGVyIGNhbiBzaW1wbHkgY2hlY2sgdGhhdCB0aGUgY29tbWl0CiBpcyBvZmYgdGhlIHJlYWRlciBwYWdlLiBPbmNlIHRoZSBjb21taXQgcGFnZSBsZWF2ZXMgdGhlIHJlYWRlciBwYWdlCiBpdCB3aWxsIG5ldmVyIGdvIGJhY2sgb24gaXQgdW5sZXNzIGEgcmVhZGVyIGRvZXMgYW5vdGhlciBzd2FwIHdpdGggdGhlCkBAIC03MzMsNyArNzMzLDcgQEAKIC0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KICAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKwogCi1CdXQgaWYgYSBuZXN0ZWQgd3JpdGVyIHByZWVtcHRzIGhlcmUuIEl0IHdpbGwgc2VlIHRoYXQgdGhlIG5leHQKK0J1dCBpZiBhIG5lc3RlZCB3cml0ZXIgcHJlZW1wdHMgaGVyZSwgaXQgd2lsbCBzZWUgdGhhdCB0aGUgbmV4dAogcGFnZSBpcyBhIGhlYWQgcGFnZSwgYnV0IGl0IGlzIGFsc28gbmVzdGVkLiBJdCB3aWxsIGRldGVjdCB0aGF0CiBpdCBpcyBuZXN0ZWQgYW5kIHdpbGwgc2F2ZSB0aGF0IGluZm9ybWF0aW9uLiBUaGUgZGV0ZWN0aW9uIGlzIHRoZQogZmFjdCB0aGF0IGl0IHNlZXMgdGhlIFVQREFURSBmbGFnIGluc3RlYWQgb2YgYSBIRUFERVIgb3IgTk9STUFMCkBAIC03NjEsNyArNzYxLDcgQEAKIC0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KICAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKwogCi1BZnRlciB0aGUgbmVzdGVkIHdyaXRlciBmaW5pc2hlcywgdGhlIG91dGVyIG1vc3Qgd3JpdGVyIHdpbGwgY29udmVydAorQWZ0ZXIgdGhlIG5lc3RlZCB3cml0ZXIgZmluaXNoZXMsIHRoZSBvdXRlcm1vc3Qgd3JpdGVyIHdpbGwgY29udmVydAogdGhlIFVQREFURSBwb2ludGVyIHRvIE5PUk1BTC4KIAogCkBAIC04MTIsNyArODEyLDcgQEAKICAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKwogCiBUaGUgbmVzdGVkIHdyaXRlciBtb3ZlcyB0aGUgdGFpbCBwYWdlIGZvcndhcmQuIEJ1dCBkb2VzIG5vdCBzZXQgdGhlIG9sZAotdXBkYXRlIHBhZ2UgdG8gTk9STUFMIGJlY2F1c2UgaXQgaXMgbm90IHRoZSBvdXRlciBtb3N0IHdyaXRlci4KK3VwZGF0ZSBwYWdlIHRvIE5PUk1BTCBiZWNhdXNlIGl0IGlzIG5vdCB0aGUgb3V0ZXJtb3N0IHdyaXRlci4KIAogICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTg5Miw3ICs4OTIsNyBAQAogLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQogICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCiAKLVRoZSBmaXJzdCB3cml0ZXIgY2FuIG5vdCBrbm93IGF0b21pY2FsbHkgdGVzdCBpZiB0aGUgdGFpbCBwYWdlIG1vdmVkCitUaGUgZmlyc3Qgd3JpdGVyIGNhbm5vdCBrbm93IGF0b21pY2FsbHkgaWYgdGhlIHRhaWwgcGFnZSBtb3ZlZAogd2hpbGUgaXQgdXBkYXRlcyB0aGUgSEVBRCBwYWdlLiBJdCB3aWxsIHRoZW4gdXBkYXRlIHRoZSBoZWFkIHBhZ2UgdG8KIHdoYXQgaXQgdGhpbmtzIGlzIHRoZSBuZXcgaGVhZCBwYWdlLgogCkBAIC05MjMsOSArOTIzLDkgQEAKIC0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KICAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKwogCi1JZiB0YWlsIHBhZ2UgIT0gQSBhbmQgdGFpbCBwYWdlIGRvZXMgbm90IGVxdWFsIEIsIHRoZW4gaXQgbXVzdCByZXNldCB0aGUKLXBvaW50ZXIgYmFjayB0byBOT1JNQUwuIFRoZSBmYWN0IHRoYXQgaXQgb25seSBuZWVkcyB0byB3b3JyeSBhYm91dAotbmVzdGVkIHdyaXRlcnMsIGl0IG9ubHkgbmVlZHMgdG8gY2hlY2sgdGhpcyBhZnRlciBzZXR0aW5nIHRoZSBIRUFEIHBhZ2UuCitJZiB0YWlsIHBhZ2UgIT0gQSBhbmQgdGFpbCBwYWdlICE9IEIsIHRoZW4gaXQgbXVzdCByZXNldCB0aGUgcG9pbnRlcgorYmFjayB0byBOT1JNQUwuIFRoZSBmYWN0IHRoYXQgaXQgb25seSBuZWVkcyB0byB3b3JyeSBhYm91dCBuZXN0ZWQKK3dyaXRlcnMgbWVhbnMgdGhhdCBpdCBvbmx5IG5lZWRzIHRvIGNoZWNrIHRoaXMgYWZ0ZXIgc2V0dGluZyB0aGUgSEVBRCBwYWdlLgogCiAKIChmaXJzdCB3cml0ZXIpCkBAIC05MzksNyArOTM5LDcgQEAKICAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKwogCiBOb3cgdGhlIHdyaXRlciBjYW4gdXBkYXRlIHRoZSBoZWFkIHBhZ2UuIFRoaXMgaXMgYWxzbyB3aHkgdGhlIGhlYWQgcGFnZSBtdXN0Ci1yZW1haW4gaW4gVVBEQVRFIGFuZCBvbmx5IHJlc2V0IGJ5IHRoZSBvdXRlciBtb3N0IHdyaXRlci4gVGhpcyBwcmV2ZW50cworcmVtYWluIGluIFVQREFURSBhbmQgb25seSByZXNldCBieSB0aGUgb3V0ZXJtb3N0IHdyaXRlci4gVGhpcyBwcmV2ZW50cwogdGhlIHJlYWRlciBmcm9tIHNlZWluZyB0aGUgaW5jb3JyZWN0IGhlYWQgcGFnZS4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3RyYWNlcG9pbnQtYW5hbHlzaXMudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS90cmFjZXBvaW50LWFuYWx5c2lzLnR4dAppbmRleCA1ZWI0ZTQ4Li44N2JlZTNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL3RyYWNlcG9pbnQtYW5hbHlzaXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvdHJhY2Vwb2ludC1hbmFseXNpcy50eHQKQEAgLTEwLDggKzEwLDggQEAKIGNyZWF0aW5nIGN1c3RvbSBrZXJuZWwgbW9kdWxlcyB0byByZWdpc3RlciBwcm9iZSBmdW5jdGlvbnMgdXNpbmcgdGhlIGV2ZW50CiB0cmFjaW5nIGluZnJhc3RydWN0dXJlLgogCi1TaW1wbGlzdGljYWxseSwgdHJhY2Vwb2ludHMgd2lsbCByZXByZXNlbnQgYW4gaW1wb3J0YW50IGV2ZW50IHRoYXQgd2hlbiBjYW4KLWJlIHRha2VuIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgdHJhY2Vwb2ludHMgdG8gYnVpbGQgYSAiQmlnIFBpY3R1cmUiIG9mCitTaW1wbGlzdGljYWxseSwgdHJhY2Vwb2ludHMgcmVwcmVzZW50IGltcG9ydGFudCBldmVudHMgdGhhdCBjYW4gYmUKK3Rha2VuIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgdHJhY2Vwb2ludHMgdG8gYnVpbGQgYSAiQmlnIFBpY3R1cmUiIG9mCiB3aGF0IGlzIGdvaW5nIG9uIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGVyZSBhcmUgYSBsYXJnZSBudW1iZXIgb2YgbWV0aG9kcyBmb3IKIGdhdGhlcmluZyBhbmQgaW50ZXJwcmV0aW5nIHRoZXNlIGV2ZW50cy4gTGFja2luZyBhbnkgY3VycmVudCBCZXN0IFByYWN0aXNlcywKIHRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHNvbWUgb2YgdGhlIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZC4KQEAgLTMzLDEyICszMywxMiBAQAogCiB3aWxsIGdpdmUgYSBmYWlyIGluZGljYXRpb24gb2YgdGhlIG51bWJlciBvZiBldmVudHMgYXZhaWxhYmxlLgogCi0yLjIgUENMCisyLjIgUENMIChQZXJmb3JtYW5jZSBDb3VudGVycyBmb3IgTGludXgpCiAtLS0tLS0tCiAKLURpc2NvdmVyeSBhbmQgZW51bWVyYXRpb24gb2YgYWxsIGNvdW50ZXJzIGFuZCBldmVudHMsIGluY2x1ZGluZyB0cmFjZXBvaW50cworRGlzY292ZXJ5IGFuZCBlbnVtZXJhdGlvbiBvZiBhbGwgY291bnRlcnMgYW5kIGV2ZW50cywgaW5jbHVkaW5nIHRyYWNlcG9pbnRzLAogYXJlIGF2YWlsYWJsZSB3aXRoIHRoZSBwZXJmIHRvb2wuIEdldHRpbmcgYSBsaXN0IG9mIGF2YWlsYWJsZSBldmVudHMgaXMgYQotc2ltcGxlIGNhc2Ugb2YKK3NpbXBsZSBjYXNlIG9mOgogCiAgICQgcGVyZiBsaXN0IDI+JjEgfCBncmVwIFRyYWNlcG9pbnQKICAgZXh0NDpleHQ0X2ZyZWVfaW5vZGUgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KQEAgLTQ5LDE5ICs0OSwxOSBAQAogICBbIC4uLi4gcmVtYWluaW5nIG91dHB1dCBzbmlwcGVkIC4uLi4gXQogCiAKLTIuIEVuYWJsaW5nIEV2ZW50cworMy4gRW5hYmxpbmcgRXZlbnRzCiA9PT09PT09PT09PT09PT09PT0KIAotMi4xIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nCiszLjEgU3lzdGVtLVdpZGUgRXZlbnQgRW5hYmxpbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0IGZvciBhIHByb3BlciBkZXNjcmlwdGlvbiBvbiBob3cgZXZlbnRzCiBjYW4gYmUgZW5hYmxlZCBzeXN0ZW0td2lkZS4gQSBzaG9ydCBleGFtcGxlIG9mIGVuYWJsaW5nIGFsbCBldmVudHMgcmVsYXRlZAotdG8gcGFnZSBhbGxvY2F0aW9uIHdvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UKK3RvIHBhZ2UgYWxsb2NhdGlvbiB3b3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgogCiAgICQgZm9yIGkgaW4gYGZpbmQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMgLW5hbWUgImVuYWJsZSIgfCBncmVwIG1tX2A7IGRvIGVjaG8gMSA+ICRpOyBkb25lCiAKLTIuMiBTeXN0ZW0tV2lkZSBFdmVudCBFbmFibGluZyB3aXRoIFN5c3RlbVRhcAorMy4yIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nIHdpdGggU3lzdGVtVGFwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gU3lzdGVtVGFwLCB0cmFjZXBvaW50cyBhcmUgYWNjZXNzaWJsZSB1c2luZyB0aGUga2VybmVsLnRyYWNlKCkgZnVuY3Rpb24KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICBwcmludF9jb3VudCgpCiAgIH0KIAotMi4zIFN5c3RlbS1XaWRlIEV2ZW50IEVuYWJsaW5nIHdpdGggUENMCiszLjMgU3lzdGVtLVdpZGUgRXZlbnQgRW5hYmxpbmcgd2l0aCBQQ0wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBCeSBzcGVjaWZ5aW5nIHRoZSAtYSBzd2l0Y2ggYW5kIGFuYWx5c2luZyBzbGVlcCwgdGhlIHN5c3RlbS13aWRlIGV2ZW50cwpAQCAtMTA3LDE2ICsxMDcsMTYgQEAKIFNpbWlsYXJseSwgb25lIGNvdWxkIGV4ZWN1dGUgYSBzaGVsbCBhbmQgZXhpdCBpdCBhcyBkZXNpcmVkIHRvIGdldCBhIHJlcG9ydAogYXQgdGhhdCBwb2ludC4KIAotMi40IExvY2FsIEV2ZW50IEVuYWJsaW5nCiszLjQgTG9jYWwgRXZlbnQgRW5hYmxpbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgZGVzY3JpYmVzIGhvdyB0byBlbmFibGUgZXZlbnRzIG9uIGEgcGVyLXRocmVhZAogYmFzaXMgdXNpbmcgc2V0X2Z0cmFjZV9waWQuCiAKLTIuNSBMb2NhbCBFdmVudCBFbmFibGVtZW50IHdpdGggUENMCiszLjUgTG9jYWwgRXZlbnQgRW5hYmxlbWVudCB3aXRoIFBDTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRXZlbnRzIGNhbiBiZSBhY3RpdmF0ZSBhbmQgdHJhY2tlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgcHJvY2VzcyBvbiBhIGxvY2FsCitFdmVudHMgY2FuIGJlIGFjdGl2YXRlZCBhbmQgdHJhY2tlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgcHJvY2VzcyBvbiBhIGxvY2FsCiBiYXNpcyB1c2luZyBQQ0wgc3VjaCBhcyBmb2xsb3dzLgogCiAgICQgcGVyZiBzdGF0IC1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXApAQCAtMTMxLDE4ICsxMzEsMTggQEAKIAogICAgIDAuOTczOTEzMzg3ICBzZWNvbmRzIHRpbWUgZWxhcHNlZAogCi0zLiBFdmVudCBGaWx0ZXJpbmcKKzQuIEV2ZW50IEZpbHRlcmluZwogPT09PT09PT09PT09PT09PT09CiAKIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dCBjb3ZlcnMgaW4tZGVwdGggaG93IHRvIGZpbHRlciBldmVudHMgaW4KIGZ0cmFjZS4gIE9idmlvdXNseSB1c2luZyBncmVwIGFuZCBhd2sgb2YgdHJhY2VfcGlwZSBpcyBhbiBvcHRpb24gYXMgd2VsbAogYXMgYW55IHNjcmlwdCByZWFkaW5nIHRyYWNlX3BpcGUuCiAKLTQuIEFuYWx5c2luZyBFdmVudCBWYXJpYW5jZXMgd2l0aCBQQ0wKKzUuIEFuYWx5c2luZyBFdmVudCBWYXJpYW5jZXMgd2l0aCBQQ0wKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQW55IHdvcmtsb2FkIGNhbiBleGhpYml0IHZhcmlhbmNlcyBiZXR3ZWVuIHJ1bnMgYW5kIGl0IGNhbiBiZSBpbXBvcnRhbnQKLXRvIGtub3cgd2hhdCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGluLiBCeSBhbmQgbGFyZ2UsIHRoaXMgaXMgbGVmdCB0byB0aGUKK3RvIGtub3cgd2hhdCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGlzLiBCeSBhbmQgbGFyZ2UsIHRoaXMgaXMgbGVmdCB0byB0aGUKIHBlcmZvcm1hbmNlIGFuYWx5c3QgdG8gZG8gaXQgYnkgaGFuZC4gSW4gdGhlIGV2ZW50IHRoYXQgdGhlIGRpc2NyZXRlIGV2ZW50CiBvY2N1cnJlbmNlcyBhcmUgdXNlZnVsIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmFseXN0LCB0aGVuIHBlcmYgY2FuIGJlIHVzZWQuCiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogYWdncmVnYXRpb24gb2YgZGlzY3JldGUgZXZlbnRzLCB0aGVuIGEgc2NyaXB0IHdvdWxkIG5lZWQgdG8gYmUgZGV2ZWxvcGVkLgogCiBVc2luZyAtLXJlcGVhdCwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB2aWV3IGhvdyBldmVudHMgYXJlIGZsdWN0dWF0aW5nIG92ZXIKLXRpbWUgb24gYSBzeXN0ZW0gd2lkZSBiYXNpcyB1c2luZyAtYSBhbmQgc2xlZXAuCit0aW1lIG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMgdXNpbmcgLWEgYW5kIHNsZWVwLgogCiAgICQgcGVyZiBzdGF0IC1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXAogCQktZSBrbWVtOm1tX3BhZ2V2ZWNfZnJlZSBcCkBAIC0xODAsNyArMTgwLDcgQEAKIAogICAgIDEuMDAyMjUxNzU3ICBzZWNvbmRzIHRpbWUgZWxhcHNlZCAgICggKy0gICAwLjAwNSUgKQogCi01LiBIaWdoZXItTGV2ZWwgQW5hbHlzaXMgd2l0aCBIZWxwZXIgU2NyaXB0cworNi4gSGlnaGVyLUxldmVsIEFuYWx5c2lzIHdpdGggSGVscGVyIFNjcmlwdHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFdoZW4gZXZlbnRzIGFyZSBlbmFibGVkIHRoZSBldmVudHMgdGhhdCBhcmUgdHJpZ2dlcmluZyBjYW4gYmUgcmVhZCBmcm9tCkBAIC0xOTAsMTEgKzE5MCwxMSBAQAogCiAgIG8gUmVhZGluZyBpbmZvcm1hdGlvbiBmcm9tIC9wcm9jIGZvciB0aGUgUElEIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudAogICBvIERlcml2aW5nIGEgaGlnaGVyLWxldmVsIGV2ZW50IGZyb20gYSBzZXJpZXMgb2YgbG93ZXItbGV2ZWwgZXZlbnRzLgotICBvIENhbGN1bGF0ZSBsYXRlbmNpZXMgYmV0d2VlbiB0d28gZXZlbnRzCisgIG8gQ2FsY3VsYXRpbmcgbGF0ZW5jaWVzIGJldHdlZW4gdHdvIGV2ZW50cwogCiBEb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXBhZ2VhbGxvYy1wb3N0cHJvY2Vzcy5wbCBpcyBhbiBleGFtcGxlCiBzY3JpcHQgdGhhdCBjYW4gcmVhZCB0cmFjZV9waXBlIGZyb20gU1RESU4gb3IgYSBjb3B5IG9mIGEgdHJhY2UuIFdoZW4gdXNlZAotb24tbGluZSwgaXQgY2FuIGJlIGludGVycnVwdGVkIG9uY2UgdG8gZ2VuZXJhdGUgYSByZXBvcnQgd2l0aG91dCBleGlzdGluZworb24tbGluZSwgaXQgY2FuIGJlIGludGVycnVwdGVkIG9uY2UgdG8gZ2VuZXJhdGUgYSByZXBvcnQgd2l0aG91dCBleGl0aW5nCiBhbmQgdHdpY2UgdG8gZXhpdC4KIAogU2ltcGxpc3RpY2FsbHksIHRoZSBzY3JpcHQganVzdCByZWFkcyBTVERJTiBhbmQgY291bnRzIHVwIGV2ZW50cyBidXQgaXQKQEAgLTIxMiwxMiArMjEyLDEyIEBACiAgICAgcHJvY2Vzc2VzLCB0aGUgcGFyZW50IHByb2Nlc3MgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFsbCB0aGUgaGVscGVycwogICAgIGNhbiBiZSBpZGVudGlmaWVkCiAKLTYuIExvd2VyLUxldmVsIEFuYWx5c2lzIHdpdGggUENMCis3LiBMb3dlci1MZXZlbCBBbmFseXNpcyB3aXRoIFBDTAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlcmUgbWF5IGFsc28gYmUgYSByZXF1aXJlbWVudCB0byBpZGVudGlmeSB3aGF0IGZ1bmN0aW9ucyB3aXRoIGEgcHJvZ3JhbQorVGhlcmUgbWF5IGFsc28gYmUgYSByZXF1aXJlbWVudCB0byBpZGVudGlmeSB3aGF0IGZ1bmN0aW9ucyB3aXRoaW4gYSBwcm9ncmFtCiB3ZXJlIGdlbmVyYXRpbmcgZXZlbnRzIHdpdGhpbiB0aGUga2VybmVsLiBUbyBiZWdpbiB0aGlzIHNvcnQgb2YgYW5hbHlzaXMsIHRoZQotZGF0YSBtdXN0IGJlIHJlY29yZGVkLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGlzIHJlcXVpcmVkIHJvb3QKK2RhdGEgbXVzdCBiZSByZWNvcmRlZC4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZywgdGhpcyByZXF1aXJlZCByb290OgogCiAgICQgcGVyZiByZWNvcmQgLWMgMSBcCiAJLWUga21lbTptbV9wYWdlX2FsbG9jIC1lIGttZW06bW1fcGFnZV9mcmVlX2RpcmVjdCBcCkBAIC0yNTMsMTEgKzI1MywxMSBAQAogICAjIChGb3IgbW9yZSBkZXRhaWxzLCB0cnk6IHBlcmYgcmVwb3J0IC0tc29ydCBjb21tLGRzbyxzeW1ib2wpCiAgICMKIAotQWNjb3JkaW5nIHRvIHRoaXMsIHRoZSB2YXN0IG1ham9yaXR5IG9mIGV2ZW50cyBvY2N1cmVkIHRyaWdnZXJlZCBvbiBldmVudHMKLXdpdGhpbiB0aGUgVkRTTy4gV2l0aCBzaW1wbGUgYmluYXJpZXMsIHRoaXMgd2lsbCBvZnRlbiBiZSB0aGUgY2FzZSBzbyBsZXRzCitBY2NvcmRpbmcgdG8gdGhpcywgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZXZlbnRzIHRyaWdnZXJlZCBvbiBldmVudHMKK3dpdGhpbiB0aGUgVkRTTy4gV2l0aCBzaW1wbGUgYmluYXJpZXMsIHRoaXMgd2lsbCBvZnRlbiBiZSB0aGUgY2FzZSBzbyBsZXQncwogdGFrZSBhIHNsaWdodGx5IGRpZmZlcmVudCBleGFtcGxlLiBJbiB0aGUgY291cnNlIG9mIHdyaXRpbmcgdGhpcywgaXQgd2FzCi1ub3RpY2VkIHRoYXQgWCB3YXMgZ2VuZXJhdGluZyBhbiBpbnNhbmUgYW1vdW50IG9mIHBhZ2UgYWxsb2NhdGlvbnMgc28gbGV0cyBsb29rCi1hdCBpdAorbm90aWNlZCB0aGF0IFggd2FzIGdlbmVyYXRpbmcgYW4gaW5zYW5lIGFtb3VudCBvZiBwYWdlIGFsbG9jYXRpb25zIHNvIGxldCdzIGxvb2sKK2F0IGl0OgogCiAgICQgcGVyZiByZWNvcmQgLWMgMSAtZiBcCiAJCS1lIGttZW06bW1fcGFnZV9hbGxvYyAtZSBrbWVtOm1tX3BhZ2VfZnJlZV9kaXJlY3QgXApAQCAtMjgwLDggKzI4MCw4IEBACiAgICMgKEZvciBtb3JlIGRldGFpbHMsIHRyeTogcGVyZiByZXBvcnQgLS1zb3J0IGNvbW0sZHNvLHN5bWJvbCkKICAgIwogCi1TbywgYWxtb3N0IGhhbGYgb2YgdGhlIGV2ZW50cyBhcmUgb2NjdXJpbmcgaW4gYSBsaWJyYXJ5LiBUbyBnZXQgYW4gaWRlYSB3aGljaAotc3ltYm9sLgorU28sIGFsbW9zdCBoYWxmIG9mIHRoZSBldmVudHMgYXJlIG9jY3VycmluZyBpbiBhIGxpYnJhcnkuIFRvIGdldCBhbiBpZGVhIHdoaWNoCitzeW1ib2w6CiAKICAgJCBwZXJmIHJlcG9ydCAtLXNvcnQgY29tbSxkc28sc3ltYm9sCiAgICMgU2FtcGxlczogMjc2NjYKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgIDAuMDElICAgICBYb3JnICAvb3B0L2dmeC10ZXN0L2xpYi9saWJwaXhtYW4tMS5zby4wLjEzLjEgIFsuXSBnZXRfZmFzdF9wYXRoCiAgICAgICAgMC4wMCUgICAgIFhvcmcgIFtrZXJuZWxdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tdIGZ0cmFjZV90cmFjZV91c2Vyc3RhY2sKIAotVG8gc2VlIHdoZXJlIHdpdGhpbiB0aGUgZnVuY3Rpb24gcGl4bWFuRmlsbHNzZTIgdGhpbmdzIGFyZSBnb2luZyB3cm9uZworVG8gc2VlIHdoZXJlIHdpdGhpbiB0aGUgZnVuY3Rpb24gcGl4bWFuRmlsbHNzZTIgdGhpbmdzIGFyZSBnb2luZyB3cm9uZzoKIAogICAkIHBlcmYgYW5ub3RhdGUgcGl4bWFuRmlsbHNzZTIKICAgWyAuLi4gXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAppbmRleCBjN2MxZGMyLi4zYmY2ODE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dApAQCAtNzEsMTIgKzcxLDEwIEBACiAJRm9ybXMgb2YgZHluYW1pYyBQTQogCS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRHluYW1pYyBzdXNwZW5kcyBjYW4gb2NjdXIgaW4gdHdvIHdheXM6IG1hbnVhbCBhbmQgYXV0b21hdGljLgotIk1hbnVhbCIgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgdG9sZCB0aGUga2VybmVsIHRvIHN1c3BlbmQgYSBkZXZpY2UsCi13aGVyZWFzICJhdXRvbWF0aWMiIG1lYW5zIHRoYXQgdGhlIGtlcm5lbCBoYXMgZGVjaWRlZCBhbGwgYnkgaXRzZWxmIHRvCi1zdXNwZW5kIGEgZGV2aWNlLiAgQXV0b21hdGljIHN1c3BlbmQgaXMgY2FsbGVkICJhdXRvc3VzcGVuZCIgZm9yCi1zaG9ydC4gIEluIGdlbmVyYWwsIGEgZGV2aWNlIHdvbid0IGJlIGF1dG9zdXNwZW5kZWQgdW5sZXNzIGl0IGhhcyBiZWVuCi1pZGxlIGZvciBzb21lIG1pbmltdW0gcGVyaW9kIG9mIHRpbWUsIHRoZSBzby1jYWxsZWQgaWRsZS1kZWxheSB0aW1lLgorRHluYW1pYyBzdXNwZW5kcyBvY2N1ciB3aGVuIHRoZSBrZXJuZWwgZGVjaWRlcyB0byBzdXNwZW5kIGFuIGlkbGUKK2RldmljZS4gIFRoaXMgaXMgY2FsbGVkICJhdXRvc3VzcGVuZCIgZm9yIHNob3J0LiAgSW4gZ2VuZXJhbCwgYSBkZXZpY2UKK3dvbid0IGJlIGF1dG9zdXNwZW5kZWQgdW5sZXNzIGl0IGhhcyBiZWVuIGlkbGUgZm9yIHNvbWUgbWluaW11bSBwZXJpb2QKK29mIHRpbWUsIHRoZSBzby1jYWxsZWQgaWRsZS1kZWxheSB0aW1lLgogCiBPZiBjb3Vyc2UsIG5vdGhpbmcgdGhlIGtlcm5lbCBkb2VzIG9uIGl0cyBvd24gaW5pdGlhdGl2ZSBzaG91bGQKIHByZXZlbnQgdGhlIGNvbXB1dGVyIG9yIGl0cyBkZXZpY2VzIGZyb20gd29ya2luZyBwcm9wZXJseS4gIElmIGEKQEAgLTk2LDEwICs5NCwxMSBAQAogV2UgY2FuIGNhdGVnb3JpemUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgaW4gdHdvIGJyb2FkIGNsYXNzZXM6CiBleHRlcm5hbCBhbmQgaW50ZXJuYWwuICBFeHRlcm5hbCBldmVudHMgYXJlIHRob3NlIHRyaWdnZXJlZCBieSBzb21lCiBhZ2VudCBvdXRzaWRlIHRoZSBVU0Igc3RhY2s6IHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSAodHJpZ2dlcmVkIGJ5Ci11c2Vyc3BhY2UpLCBtYW51YWwgZHluYW1pYyBzdXNwZW5kL3Jlc3VtZSAoYWxzbyB0cmlnZ2VyZWQgYnkKLXVzZXJzcGFjZSksIGFuZCByZW1vdGUgd2FrZXVwICh0cmlnZ2VyZWQgYnkgdGhlIGRldmljZSkuICBJbnRlcm5hbAotZXZlbnRzIGFyZSB0aG9zZSB0cmlnZ2VyZWQgd2l0aGluIHRoZSBVU0Igc3RhY2s6IGF1dG9zdXNwZW5kIGFuZAotYXV0b3Jlc3VtZS4KK3VzZXJzcGFjZSksIG1hbnVhbCBkeW5hbWljIHJlc3VtZSAoYWxzbyB0cmlnZ2VyZWQgYnkgdXNlcnNwYWNlKSwgYW5kCityZW1vdGUgd2FrZXVwICh0cmlnZ2VyZWQgYnkgdGhlIGRldmljZSkuICBJbnRlcm5hbCBldmVudHMgYXJlIHRob3NlCit0cmlnZ2VyZWQgd2l0aGluIHRoZSBVU0Igc3RhY2s6IGF1dG9zdXNwZW5kIGFuZCBhdXRvcmVzdW1lLiAgTm90ZSB0aGF0CithbGwgZHluYW1pYyBzdXNwZW5kIGV2ZW50cyBhcmUgaW50ZXJuYWw7IGV4dGVybmFsIGFnZW50cyBhcmUgbm90CithbGxvd2VkIHRvIGlzc3VlIGR5bmFtaWMgc3VzcGVuZHMuCiAKIAogCVRoZSB1c2VyIGludGVyZmFjZSBmb3IgZHluYW1pYyBQTQpAQCAtMTQ1LDkgKzE0NCw5IEBACiAJCW51bWJlciBvZiBzZWNvbmRzIHRoZSBkZXZpY2Ugc2hvdWxkIHJlbWFpbiBpZGxlIGJlZm9yZQogCQl0aGUga2VybmVsIHdpbGwgYXV0b3N1c3BlbmQgaXQgKHRoZSBpZGxlLWRlbGF5IHRpbWUpLgogCQlUaGUgZGVmYXVsdCBpcyAyLiAgMCBtZWFucyB0byBhdXRvc3VzcGVuZCBhcyBzb29uIGFzCi0JCXRoZSBkZXZpY2UgYmVjb21lcyBpZGxlLCBhbmQgLTEgbWVhbnMgbmV2ZXIgdG8KLQkJYXV0b3N1c3BlbmQuICBZb3UgY2FuIHdyaXRlIGEgbnVtYmVyIHRvIHRoZSBmaWxlIHRvCi0JCWNoYW5nZSB0aGUgYXV0b3N1c3BlbmQgaWRsZS1kZWxheSB0aW1lLgorCQl0aGUgZGV2aWNlIGJlY29tZXMgaWRsZSwgYW5kIG5lZ2F0aXZlIHZhbHVlcyBtZWFuCisJCW5ldmVyIHRvIGF1dG9zdXNwZW5kLiAgWW91IGNhbiB3cml0ZSBhIG51bWJlciB0byB0aGUKKwkJZmlsZSB0byBjaGFuZ2UgdGhlIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkgdGltZS4KIAogV3JpdGluZyAiLTEiIHRvIHBvd2VyL2F1dG9zdXNwZW5kIGFuZCB3cml0aW5nICJvbiIgdG8gcG93ZXIvbGV2ZWwgZG8KIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nIC0tIHRoZXkgYm90aCBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZwpAQCAtMzc3LDkgKzM3Niw5IEBACiByb3V0aW5lIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwIHRvIGNhcnJ5IG91dCB0aGUgb3BlcmF0aW9uIHdoZW4gdGhlCiBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IGhhcyBleHBpcmVkLgogCi1BdXRvcmVzdW1lIGF0dGVtcHRzIGFsc28gY2FuIGZhaWwuICBUaGlzIHdpbGwgaGFwcGVuIGlmIHBvd2VyL2xldmVsIGlzCi1zZXQgdG8gInN1c3BlbmQiIG9yIGlmIHRoZSBkZXZpY2UgZG9lc24ndCBtYW5hZ2UgdG8gcmVzdW1lIHByb3Blcmx5LgotVW5saWtlIGF1dG9zdXNwZW5kLCB0aGVyZSdzIG5vIGRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgorQXV0b3Jlc3VtZSBhdHRlbXB0cyBhbHNvIGNhbiBmYWlsLCBhbHRob3VnaCBmYWlsdXJlIHdvdWxkIG1lYW4gdGhhdAordGhlIGRldmljZSBpcyBubyBsb25nZXIgcHJlc2VudCBvciBvcGVyYXRpbmcgcHJvcGVybHkuICBVbmxpa2UKK2F1dG9zdXNwZW5kLCB0aGVyZSdzIG5vIGRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgogCiAKIAlPdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIGludGVyZmFjZQpAQCAtNTI3LDEzICs1MjYsMyBAQAogcmVzdW1lIGFzIHNvb24gYXMgdGhlIHN5c3RlbSBzdXNwZW5kIGlzIGNvbXBsZXRlLiAgT3IgdGhlIHJlbW90ZQogd2FrZXVwIG1heSBmYWlsIGFuZCBnZXQgbG9zdC4gIFdoaWNoIG91dGNvbWUgb2NjdXJzIGRlcGVuZHMgb24gdGltaW5nCiBhbmQgb24gdGhlIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBkZXNpZ24uCi0KLU1vcmUgaW50ZXJlc3RpbmdseSwgYSBkZXZpY2UgbWlnaHQgdW5kZXJnbyBhIG1hbnVhbCByZXN1bWUgb3IKLWF1dG9yZXN1bWUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kLiAgV2l0aCBjdXJyZW50IGtlcm5lbHMgdGhpcyBzaG91bGRuJ3QKLWhhcHBlbiwgYmVjYXVzZSBtYW51YWwgcmVzdW1lcyBtdXN0IGJlIGluaXRpYXRlZCBieSB1c2Vyc3BhY2UgYW5kCi1hdXRvcmVzdW1lcyBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gSS9PIHJlcXVlc3RzLCBidXQgYWxsIHVzZXIgcHJvY2Vzc2VzCi1hbmQgSS9PIHNob3VsZCBiZSBxdWllc2NlbnQgZHVyaW5nIGEgc3lzdGVtIHN1c3BlbmQgLS0gdGhhbmtzIHRvIHRoZQotZnJlZXplci4gIEhvd2V2ZXIgdGhlcmUgYXJlIHBsYW5zIHRvIGRvIGF3YXkgd2l0aCB0aGUgZnJlZXplciwgd2hpY2gKLXdvdWxkIG1lYW4gdGhlc2UgdGhpbmdzIHdvdWxkIGJlY29tZSBwb3NzaWJsZS4gIElmIGFuZCB3aGVuIHRoaXMgY29tZXMKLWFib3V0LCB0aGUgVVNCIGNvcmUgd2lsbCBjYXJlZnVsbHkgYXJyYW5nZSBtYXR0ZXJzIHNvIHRoYXQgZWl0aGVyIHR5cGUKLW9mIHJlc3VtZSB3aWxsIGJsb2NrIHVudGlsIHRoZSBlbnRpcmUgc3lzdGVtIGhhcyByZXN1bWVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92Z2FhcmJpdGVyLnR4dCBiL0RvY3VtZW50YXRpb24vdmdhYXJiaXRlci50eHQKaW5kZXggOTg3ZjliMC4uNDNhOWIwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92Z2FhcmJpdGVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZnYWFyYml0ZXIudHh0CkBAIC0xMDMsNyArMTAzLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0KIAogVG8gdXNlIHRoZSB2Z2EgYXJiaXRlciBjaGFyIGRldmljZSBpdCB3YXMgaW1wbGVtZW50ZWQgYW4gQVBJIGluc2lkZSB0aGUKLWxpYnBjaWFjY2VzcyBsaWJyYXJ5LiBPbmUgZmllbGRkIHdhcyBhZGRlZCB0byBzdHJ1Y3QgcGNpX2RldmljZSAoZWFjaCBkZXZpY2UKK2xpYnBjaWFjY2VzcyBsaWJyYXJ5LiBPbmUgZmllbGQgd2FzIGFkZGVkIHRvIHN0cnVjdCBwY2lfZGV2aWNlIChlYWNoIGRldmljZQogb24gdGhlIHN5c3RlbSk6CiAKICAgICAvKiB0aGUgdHlwZSBvZiByZXNvdXJjZSBkZWNvZGVkIGJ5IHRoZSBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZWZkMmVmMi4uYzhmNDdiZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE0MDIsNiArMTQwMiw4IEBACiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vdXNiL1dVU0ItRGVzaWduLW92ZXJ2aWV3LnR4dAogRjoJRG9jdW1lbnRhdGlvbi91c2Ivd3VzYi1jYmFmCitGOglkcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCitGOglkcml2ZXJzL3VzYi9ob3N0L3doY2kvCiBGOglkcml2ZXJzL3VzYi93dXNiY29yZS8KIEY6CWluY2x1ZGUvbGludXgvdXNiL3d1c2IqCiAKQEAgLTE0NzAsNiArMTQ3MiwxMiBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3Njc2kvZm5pYy8KIAorQ01QQyBBQ1BJIERSSVZFUgorTToJVGhhZGV1IExpbWEgZGUgU291emEgQ2FzY2FyZG8gPGNhc2NhcmRvQGhvbG9zY29waW8uY29tPgorTToJRGFuaWVsIE9saXZlaXJhIE5hc2NpbWVudG8gPGRvbkBzeXN0LmNvbS5icj4KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCisKIENPREEgRklMRSBTWVNURU0KIE06CUphbiBIYXJrZXMgPGphaGFya2VzQGNzLmNtdS5lZHU+CiBNOgljb2RhQGNzLmNtdS5lZHUKQEAgLTIxNjEsMTAgKzIxNjksOSBAQAogRjoJaW5jbHVkZS9saW51eC9mNzUzNzVzLmgKIAogRklSRVdJUkUgU1VCU1lTVEVNCi1NOglLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEByZWRoYXQuY29tPgogTToJU3RlZmFuIFJpY2h0ZXIgPHN0ZWZhbnJAczVyNi5pbi1iZXJsaW4uZGU+CiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1XOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCitXOglodHRwOi8vaWVlZTEzOTQud2lraS5rZXJuZWwub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9pZWVlMTM5NC9saW51eDEzOTQtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9maXJld2lyZS8KQEAgLTI2OTcsMjIgKzI3MDQsMTQgQEAKIEY6CWRyaXZlcnMvaWRsZS9pNzMwMF9pZGxlLmMKIAogSUVFRSAxMzk0IFNVQlNZU1RFTQotTToJQmVuIENvbGxpbnMgPGJlbi5jb2xsaW5zQHVidW50dS5jb20+CiBNOglTdGVmYW4gUmljaHRlciA8c3RlZmFuckBzNXI2LmluLWJlcmxpbi5kZT4KIEw6CWxpbnV4MTM5NC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KK1c6CWh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2llZWUxMzk0L2xpbnV4MTM5NC0yLjYuZ2l0Ci1TOglNYWludGFpbmVkCitTOglPYnNvbGV0ZQogRjoJRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAogRjoJZHJpdmVycy9pZWVlMTM5NC8KIAotSUVFRSAxMzk0IFJBVyBJL08gRFJJVkVSCi1NOglEYW4gRGVubmVkeSA8ZGFuQGRlbm5lZHkub3JnPgotTToJU3RlZmFuIFJpY2h0ZXIgPHN0ZWZhbnJAczVyNi5pbi1iZXJsaW4uZGU+Ci1MOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCi1GOglkcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQqCi0KIElFRUUgODAyLjE1LjQgU1VCU1lTVEVNCiBNOglEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KQEAgLTM2NDQsNiArMzY0MywxMSBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jCiAKK01TSSBXTUkgU1VQUE9SVAorTToJQW5pc3NlIEFzdGllciA8YW5pc3NlQGFzdGllci5ldT4KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCisKIE1VTFRJRlVOQ1RJT04gREVWSUNFUyAoTUZEKQogTToJU2FtdWVsIE9ydGl6IDxzYW1lb0BsaW51eC5pbnRlbC5jb20+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NhbWVvL21mZC0yLjYuZ2l0CkBAIC0zNjc3LDcgKzM2ODEsNyBAQAogTVVTQiBNVUxUSVBPSU5UIEhJR0ggU1BFRUQgRFVBTC1ST0xFIENPTlRST0xMRVIKIE06CUZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQG5va2lhLmNvbT4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVQ6CWdpdCBnaXQ6Ly9naXRvcmlvdXMub3JnL211c2IvbWFpbmxpbmUuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy91c2IvdXNiLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy91c2IvbXVzYi8KIApAQCAtMzg2OSw3ICszODczLDcgQEAKIAogTklMRlMyIEZJTEVTWVNURU0KIE06CUtPTklTSEkgUnl1c3VrZSA8a29uaXNoaS5yeXVzdWtlQGxhYi5udHQuY28uanA+Ci1MOgl1c2Vyc0BuaWxmcy5vcmcKK0w6CWxpbnV4LW5pbGZzQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5uaWxmcy5vcmcvZW4vCiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dApAQCAtMzkzNiwyOSArMzk0MCwyMCBAQAogRjoJc291bmQvc29jL29tYXAvCiAKIE9NQVAgRlJBTUVCVUZGRVIgU1VQUE9SVAotTToJSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorTToJVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQG5va2lhLmNvbT4KIEw6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdmlkZW8vb21hcC8KIAotT01BUCBESVNQTEFZIFNVQlNZU1RFTSBTVVBQT1JUIChEU1MyKQorT01BUCBESVNQTEFZIFNVQlNZU1RFTSBhbmQgRlJBTUVCVUZGRVIgU1VQUE9SVCAoRFNTMikKIE06CVRvbWkgVmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkBub2tpYS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwotTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy92aWRlby9vbWFwMi9kc3MvCi1GOglkcml2ZXJzL3ZpZGVvL29tYXAyL3ZyZmIuYwotRjoJZHJpdmVycy92aWRlby9vbWFwMi92cmFtLmMKK0Y6CWRyaXZlcnMvdmlkZW8vb21hcDIvCiBGOglEb2N1bWVudGF0aW9uL2FybS9PTUFQL0RTUwogCi1PTUFQIEZSQU1FQlVGRkVSIFNVUFBPUlQgKEZPUiBEU1MyKQotTToJVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQG5va2lhLmNvbT4KLUw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCi1MOglsaW51eC1mYmRldkB2Z2VyLmtlcm5lbC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvCi0KIE9NQVAgTU1DIFNVUFBPUlQKIE06CUphcmtrbyBMYXZpbmVuIDxqYXJra28ubGF2aW5lbkBub2tpYS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwpAQCAtNTQzMCw3ICs1NDI1LDEwIEBACiBNOglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCi1GOglkcml2ZXJzL3V3Yi8qCitGOglkcml2ZXJzL3V3Yi8KK1g6CWRyaXZlcnMvdXdiL3dscC8KK1g6CWRyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvCitYOglkcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MC13bHAuaAogRjoJaW5jbHVkZS9saW51eC91d2IuaAogRjoJaW5jbHVkZS9saW51eC91d2IvCiAKQEAgLTU5NDMsOSArNTk0MSwxMiBAQAogCiBXSU1FRElBIExMQyBQUk9UT0NPTCAoV0xQKSBTVUJTWVNURU0KIE06CURhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglpbmNsdWRlL2xpbnV4L3dscC5oCiBGOglkcml2ZXJzL3V3Yi93bHAvCitGOglkcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwLworRjoJZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtd2xwLmgKIAogV0lTVFJPTiBMQVBUT1AgQlVUVE9OIERSSVZFUgogTToJTWlsb3NsYXYgVHJtYWMgPG1pdHJAdm9sbnkuY3o+CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDg0OTFiMjEuLjEyMzEwOTQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2Ci1TVUJMRVZFTCA9IDMyCi1FWFRSQVZFUlNJT04gPQorU1VCTEVWRUwgPSAzMworRVhUUkFWRVJTSU9OID0gLXJjMwogTkFNRSA9IE1hbi1FYXRpbmcgU2VhbHMgb2YgQW50aXF1aXR5CiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC0xNiw2ICsxNiwxMyBAQAogIyBvICBwcmludCAiRW50ZXJpbmcgZGlyZWN0b3J5IC4uLiI7CiBNQUtFRkxBR1MgKz0gLXJSIC0tbm8tcHJpbnQtZGlyZWN0b3J5CiAKKyMgQXZvaWQgZnVubnkgY2hhcmFjdGVyIHNldCBkZXBlbmRlbmNpZXMKK3VuZXhwb3J0IExDX0FMTAorTENfQ1RZUEU9QworTENfQ09MTEFURT1DCitMQ19OVU1FUklDPUMKK2V4cG9ydCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX05VTUVSSUMKKwogIyBXZSBhcmUgdXNpbmcgYSByZWN1cnNpdmUgYnVpbGQsIHNvIHdlIG5lZWQgdG8gZG8gYSBsaXR0bGUgdGhpbmtpbmcKICMgdG8gZ2V0IHRoZSBvcmRlcmluZyByaWdodC4KICMKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCBkODI4NzU4Li45ZDA1NWI0IDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xMzUsOSArMTM1LDcgQEAKIAogY29uZmlnIEhBVkVfSFdfQlJFQUtQT0lOVAogCWJvb2wKLQlkZXBlbmRzIG9uIEhBVkVfUEVSRl9FVkVOVFMKLQlzZWxlY3QgQU5PTl9JTk9ERVMKLQlzZWxlY3QgUEVSRl9FVkVOVFMKKwlkZXBlbmRzIG9uIFBFUkZfRVZFTlRTCiAKIGNvbmZpZyBIQVZFX1VTRVJfUkVUVVJOX05PVElGSUVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDQ0MzQ0ODEuLmJkNzI2MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTksNiArOSw3IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1dSQVBQRVJTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKIAloZWxwCiAJICBUaGUgQWxwaGEgaXMgYSA2NC1iaXQgZ2VuZXJhbC1wdXJwb3NlIHByb2Nlc3NvciBkZXNpZ25lZCBhbmQKIAkgIG1hcmtldGVkIGJ5IHRoZSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBvZiBibGVzc2VkIG1lbW9yeSwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDE3MjBjOGEuLmYwOTE2ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9idWcuaApAQCAtMTMsNyArMTMsOCBAQAogCQkiY2FsbF9wYWwgJTAgICMgYnVnY2hrXG5cdCIJCQkJXAogCQkiLmxvbmcgJTFcblx0LjhieXRlICUyIgkJCQkJXAogCQk6IDogImkiKFBBTF9idWdjaGspLCAiaSIoX19MSU5FX18pLCAiaSIoX19GSUxFX18pKTsJXAotCWZvciAoIDsgOyApOyB9IHdoaWxlICgwKQorCXVucmVhY2hhYmxlKCk7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlZjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX19BU01fQUxQSEFfUEVSRl9FVkVOVF9ICisKKy8qIEFscGhhIG9ubHkgc3VwcG9ydHMgc29mdHdhcmUgZXZlbnRzIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKSB7IH0KKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAwCisKKyNlbmRpZiAvKiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDdmMjM2NjUuLjgwNGU1MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMjQ3LDYgKzI0Nyw3IEBACiAjZGVmaW5lIF9fSUdOT1JFX3BhdXNlCiAjZGVmaW5lIF9fSUdOT1JFX3RpbWUKICNkZWZpbmUgX19JR05PUkVfdXRpbWUKKyNkZWZpbmUgX19JR05PUkVfdW1vdW50MgogCiAvKgogICogTGludXgtc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGJlZ2luIGF0IDMwMApAQCAtNDM0LDEwICs0MzUsMjQgQEAKICNkZWZpbmUgX19OUl90aW1lcmZkCQkJNDc3CiAjZGVmaW5lIF9fTlJfZXZlbnRmZAkJCTQ3OAogI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkJNDc5CisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkJNDgwCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJCTQ4MQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZQkJNDgyCisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCQk0ODMKKyNkZWZpbmUgX19OUl9zaWduYWxmZDQJCQk0ODQKKyNkZWZpbmUgX19OUl9ldmVudGZkMgkJCTQ4NQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJCTQ4NgorI2RlZmluZSBfX05SX2R1cDMJCQk0ODcKKyNkZWZpbmUgX19OUl9waXBlMgkJCTQ4OAorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCTQ4OQorI2RlZmluZSBfX05SX3ByZWFkdgkJCTQ5MAorI2RlZmluZSBfX05SX3B3cml0ZXYJCQk0OTEKKyNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkJNDkyCisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCQk0OTMKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ4MAorI2RlZmluZSBOUl9TWVNDQUxMUwkJCTQ5NAogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggY2RhNmI4Yi4uMDlhY2I3OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwpAQCAtNDk1LDkgKzQ5NSwyMyBAQAogCS5xdWFkIHN5c19lcG9sbF9wd2FpdAogCS5xdWFkIHN5c191dGltZW5zYXQJCQkvKiA0NzUgKi8KIAkucXVhZCBzeXNfc2lnbmFsZmQKLQkucXVhZCBzeXNfbmlfc3lzY2FsbAorCS5xdWFkIHN5c19uaV9zeXNjYWxsCQkJLyogc3lzX3RpbWVyZmQgKi8KIAkucXVhZCBzeXNfZXZlbnRmZAogCS5xdWFkIHN5c19yZWN2bW1zZworCS5xdWFkIHN5c19mYWxsb2NhdGUJCQkJLyogNDgwICovCisJLnF1YWQgc3lzX3RpbWVyZmRfY3JlYXRlCisJLnF1YWQgc3lzX3RpbWVyZmRfc2V0dGltZQorCS5xdWFkIHN5c190aW1lcmZkX2dldHRpbWUKKwkucXVhZCBzeXNfc2lnbmFsZmQ0CisJLnF1YWQgc3lzX2V2ZW50ZmQyCQkJCS8qIDQ4NSAqLworCS5xdWFkIHN5c19lcG9sbF9jcmVhdGUxCisJLnF1YWQgc3lzX2R1cDMKKwkucXVhZCBzeXNfcGlwZTIKKwkucXVhZCBzeXNfaW5vdGlmeV9pbml0MQorCS5xdWFkIHN5c19wcmVhZHYJCQkJLyogNDkwICovCisJLnF1YWQgc3lzX3B3cml0ZXYKKwkucXVhZCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KKwkucXVhZCBzeXNfcGVyZl9ldmVudF9vcGVuCiAKIAkuc2l6ZSBzeXNfY2FsbF90YWJsZSwgLiAtIHN5c19jYWxsX3RhYmxlCiAJLnR5cGUgc3lzX2NhbGxfdGFibGUsIEBvYmplY3QKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDIzM2EyMjIuLmMyMjM4Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTgsNiArMTgsOCBAQAogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMgaWYgKEhBVkVfS1BST0JFUykKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgKCFYSVBfS0VSTkVMKQogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJaGVscAogCSAgVGhlIEFSTSBzZXJpZXMgaXMgYSBsaW5lIG9mIGxvdy1wb3dlci1jb25zdW1wdGlvbiBSSVNDIGNoaXAgZGVzaWducwogCSAgbGljZW5zZWQgYnkgQVJNIEx0ZCBhbmQgdGFyZ2V0ZWQgYXQgZW1iZWRkZWQgYXBwbGljYXRpb25zIGFuZApAQCAtNjg4LDYgKzY5MCw3IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKKwlzZWxlY3QgQVJDSF9IQVNfSE9MRVNfTUVNT1JZTU9ERUwKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSdzIERhVmluY2kgcGxhdGZvcm0uCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBjZTM5ZGM1Li4yZDRkODhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC02Myw4ICs2MywxMiBAQAogCiBTRURGTEFHUwk9IHMvVEVYVF9TVEFSVC8kKFpURVhUQUREUikvO3MvQlNTX1NUQVJULyQoWkJTU0FERFIpLwogCi10YXJnZXRzICAgICAgIDo9IHZtbGludXggdm1saW51eC5sZHMgcGlnZ3kuZ3ogcGlnZ3kubyBmb250Lm8gZm9udC5jIFwKLQkJIGhlYWQubyBtaXNjLm8gJChPQkpTKQorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9HWklQKSA9IGd6aXAKK3N1ZmZpeF8kKENPTkZJR19LRVJORUxfTFpPKSAgPSBsem8KKwordGFyZ2V0cyAgICAgICA6PSB2bWxpbnV4IHZtbGludXgubGRzIFwKKwkJIHBpZ2d5LiQoc3VmZml4X3kpIHBpZ2d5LiQoc3VmZml4X3kpLm8gXAorCQkgZm9udC5vIGZvbnQuYyBoZWFkLm8gbWlzYy5vICQoT0JKUykKIAogaWZlcSAoJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSx5KQogT1JJR19DRkxBR1MgOj0gJChLQlVJTERfQ0ZMQUdTKQpAQCAtODcsMjIgKzkxLDM0IEBACiBpZm5lcSAoJChQQVJBTVNfUEhZUyksKQogTERGTEFHU192bWxpbnV4ICs9IC0tZGVmc3ltIHBhcmFtc19waHlzPSQoUEFSQU1TX1BIWVMpCiBlbmRpZgotTERGTEFHU192bWxpbnV4ICs9IC1wIC0tbm8tdW5kZWZpbmVkIC1YIFwKLQkkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLS1wcmludC1saWJnY2MtZmlsZS1uYW1lKSAtVAorIyA/CitMREZMQUdTX3ZtbGludXggKz0gLXAKKyMgUmVwb3J0IHVucmVzb2x2ZWQgc3ltYm9sIHJlZmVyZW5jZXMKK0xERkxBR1Nfdm1saW51eCArPSAtLW5vLXVuZGVmaW5lZAorIyBEZWxldGUgYWxsIHRlbXBvcmFyeSBsb2NhbCBzeW1ib2xzCitMREZMQUdTX3ZtbGludXggKz0gLVgKKyMgTmV4dCBhcmd1bWVudCBpcyBhIGxpbmtlciBzY3JpcHQKK0xERkxBR1Nfdm1saW51eCArPSAtVAorCisjIEZvciBfX2FlYWJpX3VpZGl2bW9kCitsaWIxZnVuY3MgPSAkKG9iaikvbGliMWZ1bmNzLm8KKworJChvYmopL2xpYjFmdW5jcy5TOiAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9saWIvbGliMWZ1bmNzLlMgRk9SQ0UKKwkkKGNhbGwgY21kLHNoaXBwZWQpCiAKICMgRG9uJ3QgYWxsb3cgYW55IHN0YXRpYyBkYXRhIGluIG1pc2Mubywgd2hpY2gKICMgd291bGQgb3RoZXJ3aXNlIG1lc3MgdXAgb3VyIEdPVCB0YWJsZQogQ0ZMQUdTX21pc2MubyA6PSAtRHN0YXRpYz0KIAotJChvYmopL3ZtbGludXg6ICQob2JqKS92bWxpbnV4LmxkcyAkKG9iaikvJChIRUFEKSAkKG9iaikvcGlnZ3kubyBcCi0JIAkkKGFkZHByZWZpeCAkKG9iaikvLCAkKE9CSlMpKSBGT1JDRQorJChvYmopL3ZtbGludXg6ICQob2JqKS92bWxpbnV4LmxkcyAkKG9iaikvJChIRUFEKSAkKG9iaikvcGlnZ3kuJChzdWZmaXhfeSkubyBcCisJIAkkKGFkZHByZWZpeCAkKG9iaikvLCAkKE9CSlMpKSAkKGxpYjFmdW5jcykgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKIAlAOgogCi0kKG9iaikvcGlnZ3kuZ3o6ICQob2JqKS8uLi9JbWFnZSBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvcGlnZ3kuJChzdWZmaXhfeSk6ICQob2JqKS8uLi9JbWFnZSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLCQoc3VmZml4X3kpKQogCi0kKG9iaikvcGlnZ3kubzogICQob2JqKS9waWdneS5neiBGT1JDRQorJChvYmopL3BpZ2d5LiQoc3VmZml4X3kpLm86ICAkKG9iaikvcGlnZ3kuJChzdWZmaXhfeSkgRk9SQ0UKIAogQ0ZMQUdTX2ZvbnQubyA6PSAtRHN0YXRpYz0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggMTcxNTNiNS4uN2UwZmU0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xOCwxMCArMTgsMTUgQEAKIAogdW5zaWduZWQgaW50IF9fbWFjaGluZV9hcmNoX3R5cGU7CiAKKyNkZWZpbmUgX0xJTlVYX1NUUklOR19IXworCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogZm9yIGlubGluZSAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIGZvciBzaXplX3QgKi8KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogZm9yIE5VTEwgKi8KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaWZkZWYgU1RBTkRBTE9ORV9ERUJVRwogI2RlZmluZSBwdXRzdHIgcHJpbnRmCkBAIC0xODgsMzQgKzE5Myw4IEBACiAvKgogICogZ3ppcCBkZWxhcmF0aW9ucwogICovCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCiAjZGVmaW5lIFNUQVRJQyBzdGF0aWMKIAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICB1Y2g7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwotCi0jZGVmaW5lIFdTSVpFIDB4ODAwMAkJLyogV2luZG93IHNpemUgbXVzdCBiZSBhdCBsZWFzdCAzMmssICovCi0JCQkJLyogYW5kIGEgcG93ZXIgb2YgdHdvICovCi0KLXN0YXRpYyB1Y2ggKmluYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCi1zdGF0aWMgdWNoIHdpbmRvd1tXU0laRV07CS8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW5zaXplOwkJLyogdmFsaWQgYnl0ZXMgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnB0cjsJCS8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQ7CQkvKiBieXRlcyBpbiBvdXRwdXQgYnVmZmVyICovCi0KLS8qIGd6aXAgZmxhZyBieXRlICovCi0jZGVmaW5lIEFTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBhc2NpaSB0ZXh0ICovCi0jZGVmaW5lIENPTlRJTlVBVElPTiAweDAyIC8qIGJpdCAxIHNldDogY29udGludWF0aW9uIG9mIG11bHRpLXBhcnQgZ3ppcCBmaWxlICovCi0jZGVmaW5lIEVYVFJBX0ZJRUxEICAweDA0IC8qIGJpdCAyIHNldDogZXh0cmEgZmllbGQgcHJlc2VudCAqLwotI2RlZmluZSBPUklHX05BTUUgICAgMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQgICAgICAweDEwIC8qIGJpdCA0IHNldDogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KLSNkZWZpbmUgRU5DUllQVEVEICAgIDB4MjAgLyogYml0IDUgc2V0OiBmaWxlIGlzIGVuY3J5cHRlZCAqLwotI2RlZmluZSBSRVNFUlZFRCAgICAgMHhDMCAvKiBiaXQgNiw3OiAgIHJlc2VydmVkICovCi0KLSNkZWZpbmUgZ2V0X2J5dGUoKSAgKGlucHRyIDwgaW5zaXplID8gaW5idWZbaW5wdHIrK10gOiBmaWxsX2luYnVmKCkpCi0KIC8qIERpYWdub3N0aWMgZnVuY3Rpb25zICovCiAjaWZkZWYgREVCVUcKICMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpIHtpZighKGNvbmQpKSBlcnJvcihtc2cpO30KQEAgLTIzMywyNCArMjEyLDIwIEBACiAjICBkZWZpbmUgVHJhY2VjdihjLHgpCiAjZW5kaWYKIAotc3RhdGljIGludCAgZmlsbF9pbmJ1Zih2b2lkKTsKLXN0YXRpYyB2b2lkIGZsdXNoX3dpbmRvdyh2b2lkKTsKIHN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwogCiBleHRlcm4gY2hhciBpbnB1dF9kYXRhW107CiBleHRlcm4gY2hhciBpbnB1dF9kYXRhX2VuZFtdOwogCi1zdGF0aWMgdWNoICpvdXRwdXRfZGF0YTsKLXN0YXRpYyB1bGcgb3V0cHV0X3B0cjsKLXN0YXRpYyB1bGcgYnl0ZXNfb3V0Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgKm91dHB1dF9kYXRhOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb3V0cHV0X3B0cjsKIAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CiAKIHN0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICopOwogCi1leHRlcm4gaW50IGVuZDsKLXN0YXRpYyB1bGcgZnJlZV9tZW1fcHRyOwotc3RhdGljIHVsZyBmcmVlX21lbV9lbmRfcHRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fcHRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKIAogI2lmZGVmIFNUQU5EQUxPTkVfREVCVUcKICNkZWZpbmUgTk9fSU5GTEFURV9NQUxMT0MKQEAgLTI1OCw0NiArMjMzLDEzIEBACiAKICNkZWZpbmUgQVJDSF9IQVNfREVDT01QX1dET0cKIAotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9pbmZsYXRlLmMiCisjaWZkZWYgQ09ORklHX0tFUk5FTF9HWklQCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogRmlsbCB0aGUgaW5wdXQgYnVmZmVyLiBUaGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eQotICogYW5kIGF0IGxlYXN0IG9uZSBieXRlIGlzIHJlYWxseSBuZWVkZWQuCi0gKi8KLWludCBmaWxsX2luYnVmKHZvaWQpCi17Ci0JaWYgKGluc2l6ZSAhPSAwKQotCQllcnJvcigicmFuIG91dCBvZiBpbnB1dCBkYXRhIik7Ci0KLQlpbmJ1ZiA9IGlucHV0X2RhdGE7Ci0JaW5zaXplID0gJmlucHV0X2RhdGFfZW5kWzBdIC0gJmlucHV0X2RhdGFbMF07Ci0KLQlpbnB0ciA9IDE7Ci0JcmV0dXJuIGluYnVmWzBdOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFdyaXRlIHRoZSBvdXRwdXQgd2luZG93IHdpbmRvd1swLi5vdXRjbnQtMV0gYW5kIHVwZGF0ZSBjcmMgYW5kIGJ5dGVzX291dC4KLSAqIChVc2VkIGZvciB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb25seS4pCi0gKi8KLXZvaWQgZmx1c2hfd2luZG93KHZvaWQpCi17Ci0JdWxnIGMgPSBjcmM7Ci0JdW5zaWduZWQgbjsKLQl1Y2ggKmluLCAqb3V0LCBjaDsKLQotCWluID0gd2luZG93OwotCW91dCA9ICZvdXRwdXRfZGF0YVtvdXRwdXRfcHRyXTsKLQlmb3IgKG4gPSAwOyBuIDwgb3V0Y250OyBuKyspIHsKLQkJY2ggPSAqb3V0KysgPSAqaW4rKzsKLQkJYyA9IGNyY18zMl90YWJbKChpbnQpYyBeIGNoKSAmIDB4ZmZdIF4gKGMgPj4gOCk7Ci0JfQotCWNyYyA9IGM7Ci0JYnl0ZXNfb3V0ICs9ICh1bGcpb3V0Y250OwotCW91dHB1dF9wdHIgKz0gKHVsZylvdXRjbnQ7Ci0Jb3V0Y250ID0gMDsKLQlwdXRzdHIoIi4iKTsKLX0KKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHpvLmMiCisjZW5kaWYKIAogI2lmbmRlZiBhcmNoX2Vycm9yCiAjZGVmaW5lIGFyY2hfZXJyb3IoeCkKQEAgLTMxNCwyMiArMjU2LDMzIEBACiAJd2hpbGUoMSk7CS8qIEhhbHQgKi8KIH0KIAorYXNtbGlua2FnZSB2b2lkIF9fZGl2MCh2b2lkKQoreworCWVycm9yKCJBdHRlbXB0aW5nIGRpdmlzaW9uIGJ5IDAhIik7Cit9CisKICNpZm5kZWYgU1RBTkRBTE9ORV9ERUJVRwogCi11bGcKLWRlY29tcHJlc3Nfa2VybmVsKHVsZyBvdXRwdXRfc3RhcnQsIHVsZyBmcmVlX21lbV9wdHJfcCwgdWxnIGZyZWVfbWVtX3B0cl9lbmRfcCwKLQkJICBpbnQgYXJjaF9pZCkKK3Vuc2lnbmVkIGxvbmcKK2RlY29tcHJlc3Nfa2VybmVsKHVuc2lnbmVkIGxvbmcgb3V0cHV0X3N0YXJ0LCB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cl9wLAorCQl1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cl9lbmRfcCwKKwkJaW50IGFyY2hfaWQpCiB7Ci0Jb3V0cHV0X2RhdGEJCT0gKHVjaCAqKW91dHB1dF9zdGFydDsJLyogUG9pbnRzIHRvIGtlcm5lbCBzdGFydCAqLworCXVuc2lnbmVkIGNoYXIgKnRtcDsKKworCW91dHB1dF9kYXRhCQk9ICh1bnNpZ25lZCBjaGFyICopb3V0cHV0X3N0YXJ0OwogCWZyZWVfbWVtX3B0cgkJPSBmcmVlX21lbV9wdHJfcDsKIAlmcmVlX21lbV9lbmRfcHRyCT0gZnJlZV9tZW1fcHRyX2VuZF9wOwogCV9fbWFjaGluZV9hcmNoX3R5cGUJPSBhcmNoX2lkOwogCiAJYXJjaF9kZWNvbXBfc2V0dXAoKTsKIAotCW1ha2VjcmMoKTsKKwl0bXAgPSAodW5zaWduZWQgY2hhciAqKSAoKCh1bnNpZ25lZCBsb25nKWlucHV0X2RhdGFfZW5kKSAtIDQpOworCW91dHB1dF9wdHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIodG1wKTsKKwogCXB1dHN0cigiVW5jb21wcmVzc2luZyBMaW51eC4uLiIpOwotCWd1bnppcCgpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfZGF0YV9lbmQgLSBpbnB1dF9kYXRhLAorCQkJTlVMTCwgTlVMTCwgb3V0cHV0X2RhdGEsIE5VTEwsIGVycm9yKTsKIAlwdXRzdHIoIiBkb25lLCBib290aW5nIHRoZSBrZXJuZWwuXG4iKTsKIAlyZXR1cm4gb3V0cHV0X3B0cjsKIH0KQEAgLTM0MSwxMSArMjk0LDEwIEBACiB7CiAJb3V0cHV0X2RhdGEgPSBvdXRwdXRfYnVmZmVyOwogCi0JbWFrZWNyYygpOwogCXB1dHN0cigiVW5jb21wcmVzc2luZyBMaW51eC4uLiIpOwotCWd1bnppcCgpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfZGF0YV9lbmQgLSBpbnB1dF9kYXRhLAorCQkJTlVMTCwgTlVMTCwgb3V0cHV0X2RhdGEsIE5VTEwsIGVycm9yKTsKIAlwdXRzdHIoImRvbmUuXG4iKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgotCQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3BpZ2d5LlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuZ3ppcC5TCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5TCnJlbmFtZSB0byBhcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuZ3ppcC5TCmluZGV4IDU0Yzk1MTguLmE2OGFkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5nemlwLlMKQEAgLTEsNiArMSw2IEBACiAJLnNlY3Rpb24gLnBpZ2d5ZGF0YSwjYWxsb2MKIAkuZ2xvYmwJaW5wdXRfZGF0YQogaW5wdXRfZGF0YToKLQkuaW5jYmluCSJhcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuZ3oiCisJLmluY2JpbgkiYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3BpZ2d5Lmd6aXAiCiAJLmdsb2JsCWlucHV0X2RhdGFfZW5kCiBpbnB1dF9kYXRhX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3BpZ2d5Lmx6by5TCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBhcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuUwpjb3B5IHRvIGFyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9waWdneS5sem8uUwppbmRleCA1NGM5NTE4Li5hNDI1YWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kubHpvLlMKQEAgLTEsNiArMSw2IEBACiAJLnNlY3Rpb24gLnBpZ2d5ZGF0YSwjYWxsb2MKIAkuZ2xvYmwJaW5wdXRfZGF0YQogaW5wdXRfZGF0YToKLQkuaW5jYmluCSJhcmNoL2FybS9ib290L2NvbXByZXNzZWQvcGlnZ3kuZ3oiCisJLmluY2JpbgkiYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3BpZ2d5Lmx6byIKIAkuZ2xvYmwJaW5wdXRfZGF0YV9lbmQKIGlucHV0X2RhdGFfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCmluZGV4IDVhMzc1ZTUuLmNjMzJjMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYworKysgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKQEAgLTMwOCwxNSArMzA4LDExIEBACiAJCQltZW1jcHkocHRyLCBidWYtPnNhZmUsIHNpemUpOwogCiAJCQkvKgotCQkJICogRE1BIGJ1ZmZlcnMgbXVzdCBoYXZlIHRoZSBzYW1lIGNhY2hlIHByb3BlcnRpZXMKLQkJCSAqIGFzIGlmIHRoZXkgd2VyZSByZWFsbHkgdXNlZCBmb3IgRE1BIC0gd2hpY2ggbWVhbnMKLQkJCSAqIGRhdGEgbXVzdCBiZSB3cml0dGVuIGJhY2sgdG8gUkFNLiAgTm90ZSB0aGF0Ci0JCQkgKiB3ZSBkb24ndCB1c2UgZG1hY19mbHVzaF9yYW5nZSgpIGhlcmUgZm9yIHRoZQotCQkJICogYmlkaXJlY3Rpb25hbCBjYXNlIGJlY2F1c2Ugd2Uga25vdyB0aGUgY2FjaGUKLQkJCSAqIGxpbmVzIHdpbGwgYmUgY29oZXJlbnQgd2l0aCB0aGUgZGF0YSB3cml0dGVuLgorCQkJICogU2luY2Ugd2UgbWF5IGhhdmUgd3JpdHRlbiB0byBhIHBhZ2UgY2FjaGUgcGFnZSwKKwkJCSAqIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGEgd2lsbCBiZSBjb2hlcmVudAorCQkJICogd2l0aCB1c2VyIG1hcHBpbmdzLgogCQkJICovCi0JCQlkbWFjX2NsZWFuX3JhbmdlKHB0ciwgcHRyICsgc2l6ZSk7Ci0JCQlvdXRlcl9jbGVhbl9yYW5nZShfX3BhKHB0ciksIF9fcGEocHRyKSArIHNpemUpOworCQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHB0ciwgc2l6ZSk7CiAJCX0KIAkJZnJlZV9zYWZlX2J1ZmZlcihkZXYtPmFyY2hkYXRhLmRtYWJvdW5jZSwgYnVmKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCmluZGV4IDFjYWI0ZTcuLjZlMzJhODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfdGlueV9kZWZjb25maWcKaW5kZXggOGUzZDA4NC4uYjM0YjFlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hZmViOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwppbmRleCBmN2EyNzJjLi42NGZlN2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FmZWI5MjYwX2RlZmNvbmZpZwpAQCAtMjI3LDcgKzIyNyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0yMDBlcGRraXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKaW5kZXggNWU2ODQyMC4uMzA5MjdjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTIwMGVwZGtpdF9kZWZjb25maWcKQEAgLTE4OSw3ICsxODksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcKaW5kZXggYWQ1NGU5Mi4uYWJlOTk2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCkBAIC0yMzMsNyArMjMzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKaW5kZXggZThmNzM4MGIuLjNiM2EzNzc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC0yMTAsNyArMjEwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKaW5kZXggYzY2ZGQzOS4uZGFhNzViYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCkBAIC0xMDEsNyArMTAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxY2FwOWFka19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZwppbmRleCBiYzZiZDlmLi5iMWFiNTBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFjYXA5YWRrX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrX2RlZmNvbmZpZwppbmRleCBjOTdlMTAyLi4xZmZmZWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBka19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZGtfZGVmY29uZmlnCkBAIC0xMzAsNyArMTMwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2F0OTFybTkyMDBla19kZWZjb25maWcKaW5kZXggOWY3YTk5YS4uYzg0NmE3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxcm05MjAwZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrX2RlZmNvbmZpZwpAQCAtMTI5LDcgKzEyOSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKaW5kZXggOThlMmYzZC4uNDcyZWExMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCkBAIC0xODgsNyArMTg4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKaW5kZXggMTQ5NDU2MS4uNGVjZGU0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjNla19kZWZjb25maWcKaW5kZXggMjE1OTlmMy4uOWI3OTJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2M2VrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYzZWtfZGVmY29uZmlnCkBAIC0xODEsNyArMTgxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlnMjBla19kZWZjb25maWcKaW5kZXggN2UwMThhMC4uNjRjZTEwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOWcyMGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05ZzIwZWtfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOXJsZWtfZGVmY29uZmlnCmluZGV4IGUyZGY4MWEuLjkwZTQ4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTlybGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05cmxla19kZWZjb25maWcKQEAgLTE3OSw3ICsxNzksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0ZWI5MjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCmluZGV4IGExOWU4MjQuLjYzMTU1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXRlYjkyMDBfZGVmY29uZmlnCkBAIC0xMzIsNyArMTMyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKaW5kZXggZjI2NDg0Ni4uYjE3NWI2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwpAQCAtMTAzLDcgKzEwMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCmluZGV4IGJjYzBiYWMuLjFlMTIxNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iY21yaW5nX2RlZmNvbmZpZwpAQCAtMTgxLDcgKzE4MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jYW02MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwppbmRleCA4NDQ4MTA4Li5lZWYzM2RlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NhbTYwX2RlZmNvbmZpZwpAQCAtMTk2LDcgKzE5Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Nhcm1ldmFfZGVmY29uZmlnCmluZGV4IGQzOTI4MzMuLmI2YTcwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY2FybWV2YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jYXJtZXZhX2RlZmNvbmZpZwpAQCAtOTcsNyArOTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKaW5kZXggMmI0YzA2Ni4uZDY2MmNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKQEAgLTEwNSw3ICsxMDUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3QzNV9kZWZjb25maWcKaW5kZXggZTQyYzVjOC4uODkzY2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21fdDM1X2RlZmNvbmZpZwpAQCAtMjM2LDcgKzIzNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY21feDJ4eF9kZWZjb25maWcKaW5kZXggNzk3Yjc5MC4uNDdkMjJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnCkBAIC0yMDUsNyArMjA1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NtX3gzMDBfZGVmY29uZmlnCmluZGV4IGEwMTcwODYuLmEzMzQwNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY21feDMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbV94MzAwX2RlZmNvbmZpZwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwppbmRleCA0Y2YzYmRlLi5jOTYyODcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpAQCAtMjA0LDcgKzIwNCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCmluZGV4IDQ3NzRhMzYuLjExZmRiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnCkBAIC0yMTIsNyArMjEyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0MzPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKaW5kZXggMWFhNjIyNC4uMjZlNDU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZwpAQCAtMTI1LDcgKzEyNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29yZ2lfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKaW5kZXggZDZjZDE2NS4uNWU0MDY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb3JnaV9kZWZjb25maWcKQEAgLTIxNCw3ICsyMTQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKaW5kZXggNjAxZTdmMy4uYzkxMzdhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTkyNjBfZGVmY29uZmlnCkBAIC0yMjksNyArMjI5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcKaW5kZXggYjViOWNiYi4uZDIzNDQ3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHU5ZzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCkBAIC0yMTksNyArMjE5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKaW5kZXggNDkwMTgyNy4uMWY4ZGRhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NwdWF0OTFfZGVmY29uZmlnCkBAIC0yMzAsNyArMjMwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCmluZGV4IDI5ZjY4YzIuLmYwOTUwNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKQEAgLTE5Myw3ICsxOTMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NzYjYzN19kZWZjb25maWcKaW5kZXggZjdiNjBjZS4uNTA3MTU0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jc2I2MzdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiNjM3X2RlZmNvbmZpZwpAQCAtMjE1LDcgKzIxNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGE4eHhfb21hcGxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcKaW5kZXggNTBiZDI1YS4uZTE0Yzk5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kYTh4eF9vbWFwbF9kZWZjb25maWcKQEAgLTIyNSw3ICsyMjUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RhdmluY2lfYWxsX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCmluZGV4IGJkNjU2ZTguLjYyNTAzNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCkBAIC0yMjMsNyArMjIzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZG92ZV9kZWZjb25maWcKaW5kZXggYjNhNDkxNi4uYjdiMmFiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9kb3ZlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2RvdmVfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lYnNhMTEwX2RlZmNvbmZpZwppbmRleCBhZmNmZmY2Li5kNWU4Mjc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Vic2ExMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWJzYTExMF9kZWZjb25maWcKQEAgLTgzLDcgKzgzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VjYmF0OTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lY2JhdDkxX2RlZmNvbmZpZwppbmRleCBjYTUyMDczLi4yNWRkNTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VjYmF0OTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWNiYXQ5MV9kZWZjb25maWcKQEAgLTE4Niw3ICsxODYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lZGI3MjExX2RlZmNvbmZpZwppbmRleCA2YmE3MzU1Li5lM2E2Y2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VkYjcyMTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZWRiNzIxMV9kZWZjb25maWcKQEAgLTkwLDcgKzkwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfTFY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZwppbmRleCBlOTk1NWI3Li4yYmVlOTMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZW1feDI3MF9kZWZjb25maWcKQEAgLTIwMiw3ICsyMDIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCmluZGV4IDNmYjA4M2IuLjM1ZDczNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKQEAgLTE5OCw3ICsxOTgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VzZXJpZXNfcHhhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnCmluZGV4IGI2YzVjYmIuLjc0YmFmNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXNlcmllc19weGFfZGVmY29uZmlnCkBAIC0yMDMsNyArMjAzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZXp4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXp4X2RlZmNvbmZpZwppbmRleCA0OTJmMjlhLi45ZTkwNTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2V6eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lenhfZGVmY29uZmlnCkBAIC0yNDAsNyArMjQwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Zvb3RicmlkZ2VfZGVmY29uZmlnCmluZGV4IDZhY2U1MTIuLjA0ZDk3OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9vdGJyaWRnZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9mb290YnJpZGdlX2RlZmNvbmZpZwpAQCAtOTUsNyArOTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZm9ydHVuZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKaW5kZXggNjVkYzczYS4uZDU4MTQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9mb3J0dW5ldF9kZWZjb25maWcKQEAgLTg4LDcgKzg4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk03MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfTFY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCmluZGV4IGVmYTc4ZTEuLmE4YWQ4ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCkBAIC0yMDUsNyArMjA1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNTAwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZwppbmRleCA2NDliYWEzLi41YmI3MzcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2g1MDAwX2RlZmNvbmZpZwpAQCAtMjA2LDcgKzIwNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2g3MjAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnCmluZGV4IDExNjkyMGEuLjA5YTZjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDcyMDFfZGVmY29uZmlnCkBAIC04Nyw3ICs4Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNNzIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0xWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oNzIwMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZwppbmRleCAwZTczOWFmLi5mZWRjNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2g3MjAyX2RlZmNvbmZpZwpAQCAtOTEsNyArOTEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9MVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCmluZGV4IGRiMDcwOGQuLjJkYTFhY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZwpAQCAtMTAzLDcgKzEwMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZwppbmRleCAxYjM5NjkxLi5lMGVmMGQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9odGNoZXJhbGRfZGVmY29uZmlnCkBAIC0yNDEsNyArMjQxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKaW5kZXggYzk3ZjhkMC4uYTE5MjI0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKQEAgLTIzOCw3ICsyMzgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2ludGVncmF0b3JfZGVmY29uZmlnCmluZGV4IDNjZTk2ZTYuLjZiMGQwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW50ZWdyYXRvcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pbnRlZ3JhdG9yX2RlZmNvbmZpZwpAQCAtOTIsNyArOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKICMgQ09ORklHX0NQVV9BUk05MjJUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDEzeHhfZGVmY29uZmlnCmluZGV4IDg5YzE3NzYuLjNjMDQwY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZwpAQCAtMTYzLDcgKzE2Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCmluZGV4IGQ3MDE3N2IuLjYyYTg1NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcKQEAgLTE2OCw3ICsxNjgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCmluZGV4IGVkMmQ1OWQuLjBiYzIzZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKQEAgLTE5OCw3ICsxOTgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKaW5kZXggNTc1MjZjMS4uOGI1YjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCkBAIC0xNTEsNyArMTUxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCmluZGV4IGVmOTc1NjEuLjU5YzExYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwpAQCAtMTQ1LDcgKzE0NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDMz15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCmluZGV4IDk1Y2Q4ZGYuLmE5MDdhZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKQEAgLTE4OSw3ICsxODksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKaW5kZXggZGY5YmZiZS4uZDFmMTY0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCkBAIC0yMDIsNyArMjAyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2FmYV9kZWZjb25maWcKaW5kZXggOWY5MmZjNS4uZjY2MWU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rYWZhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2thZmFfZGVmY29uZmlnCkBAIC0xMzIsNyArMTMyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjBUPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2tiOTIwMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tiOTIwMl9kZWZjb25maWcKaW5kZXggNjA1YTg0Ni4uNjY4YmE1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9rYjkyMDJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mva2I5MjAyX2RlZmNvbmZpZwpAQCAtMjMwLDcgKzIzMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKaW5kZXggYmNmYWRlMy4uNWZjNDRjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OPXkKICMgQ09ORklHX0NQVV9GRVJPQ0VPTl9PTERfSUQgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY1PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mva3M4Njk1X2RlZmNvbmZpZwppbmRleCBkMjVjNDFiLi5lNmYyMjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tzODY5NV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9rczg2OTVfZGVmY29uZmlnCkBAIC0xODYsNyArMTg2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjJUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKaW5kZXggNTZhZTU2OC4uYWY3NTk1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCkBAIC05OSw3ICs5OSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbG9raV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xva2lfZGVmY29uZmlnCmluZGV4IGI3MjBmY2YuLjZkZjdiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbG9raV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sb2tpX2RlZmNvbmZpZwpAQCAtMTc0LDcgKzE3NCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfRkVST0NFT049eQogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQyNzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGQyNzBfZGVmY29uZmlnCmluZGV4IDFhMzhkOGUuLmFlYjc2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDI3MF9kZWZjb25maWcKQEAgLTE0Myw3ICsxNDMsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwppbmRleCBmOGFjMjlkLi42MTE2ZmVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwpAQCAtOTUsNyArOTUsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMlQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcKaW5kZXggN2EyZTkzMi4uMTQyY2NjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwNF9kZWZjb25maWcKQEAgLTExNyw3ICsxMTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMlQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2x1YmJvY2tfZGVmY29uZmlnCmluZGV4IGU1NDRiZmIuLjc1YzYyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHViYm9ja19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9sdWJib2NrX2RlZmNvbmZpZwpAQCAtOTIsNyArOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sdXNsNzIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZwppbmRleCA0MmY2YTc3Li5jMWExZmIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2x1c2w3MjAwX2RlZmNvbmZpZwpAQCAtODIsNyArODIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTcyMFQ9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9MVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFnaWNpYW5fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcKaW5kZXggOTU3ZmQ1Zi4uOGU5YTcyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcKQEAgLTIwNCw3ICsyMDQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tYWluc3RvbmVfZGVmY29uZmlnCmluZGV4IGNjOGM5NWIuLjFjZGRiNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbWFpbnN0b25lX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21haW5zdG9uZV9kZWZjb25maWcKQEAgLTkzLDcgKzkzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbWluaTI0NDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9taW5pMjQ0MF9kZWZjb25maWcKaW5kZXggZTQ5ZWQ0MC4uZDJhOTBlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9taW5pMjQ0MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9taW5pMjQ0MF9kZWZjb25maWcKQEAgLTI1Niw3ICsyNTYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21zbV9kZWZjb25maWcKaW5kZXggY2MzYjA2ZS4uZmUyNWUzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tc21fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXNtX2RlZmNvbmZpZwpAQCAtMTU1LDcgKzE1NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwppbmRleCAzOTgyNzRiLi42YWZhMmMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKQEAgLTE4MSw3ICsxODEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OPXkKIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEPXkKIENPTkZJR19DUFVfMzJ2NT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MV9kZWZjb25maWcKaW5kZXggMDIwMGQ2Ny4uZjU3NTA3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxX2RlZmNvbmZpZwpAQCAtMTkwLDcgKzE5MCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZwppbmRleCA1NzdkN2UxLi4zY2FiYmI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDFhZHNfZGVmY29uZmlnCkBAIC04OCw3ICs4OCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyMV9kZWZjb25maWcKaW5kZXggNGIwNDI5MC4uMWVjZDYyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDIxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MjFfZGVmY29uZmlnCkBAIC0xODUsNyArMTg1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDI3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcKaW5kZXggNzUyNjNhOC4uZWRmZGQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDI3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCkBAIC0yMDcsNyArMjA3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzMXBka19kZWZjb25maWcKaW5kZXggOTVmZmMwZC4uZDQwOTUzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9teDMxcGRrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL214MzFwZGtfZGVmY29uZmlnCkBAIC0xNzMsNyArMTczLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZwppbmRleCA3NzM0Y2NhLi44YTA2YmM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnCkBAIC0yMTgsNyArMjE4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL243NzBfZGVmY29uZmlnCmluZGV4IGExNjU3YjcuLjc1Y2FlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZwpAQCAtMjEwLDcgKzIxMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCmluZGV4IDI2NGY1MmIuLmU2ZjY2N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwpAQCAtMjMyLDcgKzIzMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZW9jb3JlOTI2X2RlZmNvbmZpZwppbmRleCBlMGU0ZTk4Li5kMTY1Yzc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25lb2NvcmU5MjZfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVvY29yZTkyNl9kZWZjb25maWcKQEAgLTIxOCw3ICsyMTgsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25lcG9uc2V0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCmluZGV4IDM2Y2Q2MmUuLjE3MTI2NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnCkBAIC0xMDMsNyArMTAzLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMDA9eQogQ09ORklHX0NQVV8zMnY0PXkKIENPTkZJR19DUFVfQUJSVF9FVjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXR3aW5kZXJfZGVmY29uZmlnCmluZGV4IGMxYTYzYTMuLjc4ZjU4YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbmV0d2luZGVyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25ldHdpbmRlcl9kZWZjb25maWcKQEAgLTg5LDcgKzg5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZwppbmRleCA2MWQwZmM1Li4yYTk3ZTM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKQEAgLTEyMiw3ICsxMjIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZwppbmRleCA2MDBjYjI3Li45MmQ5MDg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL25oazg4MTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKQEAgLTE5MSw3ICsxOTEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251YzkxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251YzkxMF9kZWZjb25maWcKaW5kZXggNTI0NTY1NS4uZjgwODQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTEwX2RlZmNvbmZpZwpAQCAtMTgwLDcgKzE4MCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTUwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTUwX2RlZmNvbmZpZwppbmRleCBkZjFkZTliLi45NzMwMGVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9udWM5NTBfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9udWM5NjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9udWM5NjBfZGVmY29uZmlnCmluZGV4IDRiMmNkOWUuLmFhN2UxMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL251Yzk2MF9kZWZjb25maWcKQEAgLTIwMSw3ICsyMDEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKaW5kZXggOWNmYWUzNy4uYzc5OTlmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwpAQCAtMjEzLDcgKzIxMyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZwppbmRleCAyYWYyOGVhLi4zNjdiZTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZwpAQCAtMjQ1LDcgKzI0NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCmluZGV4IGUxOTBmYzguLjg2Y2M0YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcKQEAgLTIyMCw3ICsyMjAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCmluZGV4IGI3YThkOWYuLmY3NGViOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwpAQCAtMjExLDcgKzIxMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM190b3VjaGJvb2tfZGVmY29uZmlnCmluZGV4IDdjODUxNWUuLjc0ZmU2YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcKQEAgLTI0Niw3ICsyNDYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8yNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8yNDMwc2RwX2RlZmNvbmZpZwppbmRleCA2NDBlOWFmLi40NWI0ZWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMjQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnCkBAIC0xOTcsNyArMTk3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA1OTI0NTdjLi5iYjI5MTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0yMzIsNyArMjMyLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzYzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzYzMHNkcF9kZWZjb25maWcKaW5kZXggZTgzNmM4YS4uZDI1YzNkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM2MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZwpAQCAtMjM2LDcgKzIzNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCmluZGV4IDIzMTkxMTMuLjNkZTY0MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKQEAgLTIyMCw3ICsyMjAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9hcG9sbG9uXzI0MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2Fwb2xsb25fMjQyMF9kZWZjb25maWcKaW5kZXggYWM3YWRmMy4uY2M4NjM0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2Fwb2xsb25fMjQyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2Fwb2xsb25fMjQyMF9kZWZjb25maWcKQEAgLTE5Niw3ICsxOTYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKICMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNTEwX2RlZmNvbmZpZwppbmRleCBjY2RjNjYxLi42MTc0NGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNTEwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNTEwX2RlZmNvbmZpZwpAQCAtMjA1LDcgKzIwNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE2MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTYxMF9kZWZjb25maWcKaW5kZXggMGM0MmM4OS4uZDc3Mzg1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTYxMF9kZWZjb25maWcKQEAgLTIwNyw3ICsyMDcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNzEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnCmluZGV4IDBhMDBhNzAuLjZlYzQ4N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMjQyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18yNDIwX2RlZmNvbmZpZwppbmRleCBjZjQwNzNiLi43MjE4Yjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18yNDIwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18yNDIwX2RlZmNvbmZpZwpAQCAtMTkxLDcgKzE5MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfMzJ2Nj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggNzRkYmRjNi4uNTIzMTg5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtMjMxLDcgKzIzMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oNF8yNDIwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oNF8yNDIwX2RlZmNvbmZpZwppbmRleCBhNGFhYjhlLi5iMTJiNDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2g0XzI0MjBfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9WNj15CiAjIENPTkZJR19DUFVfMzJ2NksgaXMgbm90IHNldAogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTUxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnCmluZGV4IDBjZmUzNjMuLmU5YzE0MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTUxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNTEwX2RlZmNvbmZpZwpAQCAtMjA1LDcgKzIwNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnCmluZGV4IDk1ZDlmMmIuLmZlYTkzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9pbm5vdmF0b3JfMTYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZwpAQCAtMjA2LDcgKzIwNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKaW5kZXggOTEzOTUzMi4uMGVmYjRiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKQEAgLTIxNCw3ICsyMTQsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnCmluZGV4IDZiM2I1YzYuLjU1NmZjY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9vc2tfNTkxMl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZwpAQCAtMjEyLDcgKzIxMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9wZXJzZXVzMl83MzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKaW5kZXggYjk0ODAwYy4uOWExNWQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKQEAgLTE5OSw3ICsxOTksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZwppbmRleCA0YjAwYTQzLi5hODJlODEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcKQEAgLTIyMiw3ICsyMjIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCmluZGV4IDBkN2UzN2EuLmEzZTNjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZwpAQCAtMjM2LDcgKzIzNiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCmluZGV4IGY4NzAxZmEuLjE5YjkxZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKQEAgLTE2MSw3ICsxNjEsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQogQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwppbmRleCA1MzgzY2QwLi44NWIwNWQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKQEAgLTIxMCw3ICsyMTAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0ZFUk9DRU9OPXkKIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lEPXkKIENPTkZJR19DUFVfMzJ2NT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnCmluZGV4IGIzZWEyYzQuLmJmMDZkMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnCkBAIC0yMTcsNyArMjE3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcKaW5kZXggNDBmYzZhNy4uZmVmZmFhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXRlX2RlZmNvbmZpZwpAQCAtMTk2LDcgKzE5Niw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZwppbmRleCBlNTRjZWQ0Li41NWQ1YjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG10dF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wYWxtdHRfZGVmY29uZmlnCkBAIC0xNzYsNyArMTc2LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3MV9kZWZjb25maWcKaW5kZXggMDhlMTQwNi4uNmVmYzc0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzFfZGVmY29uZmlnCkBAIC0yMDAsNyArMjAwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjVUPXkKIENPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3Ml9kZWZjb25maWcKaW5kZXggYTBkYzM3Yy4uNmQxNjJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcyX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3BhbG16NzJfZGVmY29uZmlnCkBAIC0yMDksNyArMjA5LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDI3X2RlZmNvbmZpZwppbmRleCAwNWFkOTZhLi5mYTE1M2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BjbTAyN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMjdfZGVmY29uZmlnCkBAIC0xNjgsNyArMTY4LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BpY290dXgyMDBfZGVmY29uZmlnCmluZGV4IDkwMThmMGYuLjZlNzE1NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGljb3R1eDIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9waWNvdHV4MjAwX2RlZmNvbmZpZwpAQCAtMTY4LDcgKzE2OCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCmluZGV4IGYyZDJkZGEuLmRiZmFiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwpAQCAtMTAwLDcgKzEwMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnCmluZGV4IDY3YjVmMWUuLjJmN2I5Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZwpAQCAtMTIxLDcgKzEyMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwppbmRleCBkYjVmYWVhLi43OTFiOGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnCkBAIC0xODQsNyArMTg0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9NT0hBV0s9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTI1NS1pZHBfZGVmY29uZmlnCmluZGV4IDQ2ZTUwODkuLjMzNjVjNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMjU1LWlkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGEyNTUtaWRwX2RlZmNvbmZpZwpAQCAtOTIsNyArOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCmluZGV4IDczM2I4NTEuLjgyY2E2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKQEAgLTI0MCw3ICsyNDAsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQzM9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhOTEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhOTEwX2RlZmNvbmZpZwppbmRleCA4YzdlMjk5Li45NGUyMGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCkBAIC0xODQsNyArMTg0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9NT0hBV0s9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcWlsLWE5MjYwX2RlZmNvbmZpZwppbmRleCA5YjMyZDBlLi4xMmQwZDY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3FpbC1hOTI2MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9xaWwtYTkyNjBfZGVmY29uZmlnCkBAIC0xOTUsNyArMTk1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCmluZGV4IDIxZGI0YjMuLjEyMzcwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKQEAgLTE4Niw3ICsxODYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiAjIENPTkZJR19DUFVfQVJNOTI2VCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1Y2PXkKIENPTkZJR19DUFVfMzJ2Nks9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwppbmRleCA5YTc1YzMwLi5hNTA5YTVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwpAQCAtMTg0LDcgKzE4NCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKICMgQ09ORklHX0NQVV9BUk05MjZUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfVjY9eQogIyBDT05GSUdfQ1BVXzMydjZLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZwppbmRleCBhMjlkNjFmLi5lOTEyNGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCkBAIC0xNTAsNyArMTUwLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk02MTA9eQogQ09ORklHX0NQVV9BUk03MTA9eQogQ09ORklHX0NQVV9TQTExMD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZwppbmRleCAxNTU5NzM0Li5iNmVlZWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKQEAgLTIxMiw3ICsyMTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVXzMydjZLPXkKIENPTkZJR19DUFVfVjc9eQogQ09ORklHX0NQVV8zMnY3PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCmluZGV4IGI0OTgxMDQuLjJmMTBkYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwpAQCAtMjc3LDcgKzI3Nyw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY0VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZwppbmRleCAzMjg2MDYwLi5mNTZlNTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcKQEAgLTE5Miw3ICsxOTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1Y2PXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV8zMnY2PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3M1cGMxMDBfZGVmY29uZmlnCmluZGV4IGIwZDdkM2QuLmRjMTA4YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZwpAQCAtMjAyLDcgKzIwMiw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfMzJ2Nks9eQogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zYW05X2w5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtOV9sOTI2MF9kZWZjb25maWcKaW5kZXggMTE3NGUyNy4uODFiMjkwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zYW05X2w5MjYwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3NhbTlfbDkyNjBfZGVmY29uZmlnCkBAIC0xNzUsNyArMTc1LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKaW5kZXggOTg0ZjcwOTYuLjdjNDliYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zaGFubm9uX2RlZmNvbmZpZwpAQCAtOTksNyArOTksNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1NBMTEwMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCmluZGV4IDkwMjM1YmYuLjQ2ZGUxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC0xNzMsNyArMTczLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9TQTExMD15CiBDT05GSUdfQ1BVXzMydjQ9eQogQ09ORklHX0NQVV9BQlJUX0VWND15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKaW5kZXggNjg1ZDJiNS4uZWUyNWU2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwpAQCAtMTAxLDcgKzEwMSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfU0ExMTAwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3BpdHpfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKaW5kZXggNzQ1YzY4Zi4uN2Q4OTQ4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zcGl0el9kZWZjb25maWcKQEAgLTIxMiw3ICsyMTIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzc4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZwppbmRleCA0NDQ2MWYxLi5iMWEzYTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3N0bXAzNzh4X2RlZmNvbmZpZwpAQCAtMTkzLDcgKzE5Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3RtcDM3eHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcKaW5kZXggNDAxMjc5ZC4uYTM3NTFjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zdG1wMzd4eF9kZWZjb25maWcKQEAgLTE4Miw3ICsxODIsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcKaW5kZXggMjViMDA3Zi4uOGE5ZTdlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zeDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3gxX2RlZmNvbmZpZwpAQCAtMjEwLDcgKzIxMCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI1VD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3RjdF9oYW1tZXJfZGVmY29uZmlnCmluZGV4IDlkMzJmYWUuLmRjY2YxNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdGN0X2hhbW1lcl9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy90Y3RfaGFtbWVyX2RlZmNvbmZpZwpAQCAtMjE1LDcgKzIxNSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdHJpemVwczRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKaW5kZXggYjZmODM4MS4uMWU4ZjVhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy90cml6ZXBzNF9kZWZjb25maWcKQEAgLTE1Niw3ICsxNTYsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKaW5kZXggOTUzYmEwMi4uOTE1NTE5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQotIyBTYXQgT2N0IDE3IDIzOjMyOjI0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgV2VkIEphbiAgNiAwMDowMTozNiAyMDEwCiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CkBAIC00Niw2ICs0Niw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTE5LDE0ICsxMjAsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTUsNiArMTgzLDcgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldApAQCAtMTc3LDYgKzIwNiw3IEBACiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBTVC1Fcmljc3NvbiBBQiBVMzAwL1UzMzAvVTMzNS9VMzY1IFBsYXRmb3JtCkBAIC0yMDcsNyArMjM3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpAQCAtMjY2LDEyICsyOTUsMTAgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQpAQCAtNTAwLDE0ICs1MjcsMjEgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE4LDYgKzU1Miw3IEBACiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTQwLDYgKzU3NSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY0Niw3ICs2ODIsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjYyLDYgKzY5Nyw4IEBACiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1BMMDIyPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC03MDksNiArNzQ2LDcgQEAKICMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKQEAgLTcxNyw2ICs3NTUsOCBAQAogQ09ORklHX0FCMzEwMF9DT1JFPXkKIENPTkZJR19BQjMxMDBfT1RQPXkKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKICMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CkBAIC03MjQsNiArNzY0LDcgQEAKICMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX0FCMzEwMD15CiAjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldApAQCAtODQxLDcgKzg4Miw5IEBACiAjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTg4Myw2ICs5MjYsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC05MTIsNyArOTU2LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0FCMzEwMD15CiAKQEAgLTkyNyw2ICs5NzMsMTUgQEAKICMKICMgRE1BIERldmljZXMKICMKK0NPTkZJR19DT0g5MDEzMTg9eQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIApAQCAtMTAxOSw3ICsxMDc0LDcgQEAKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldApAQCAtMTEzNiw2ICsxMTkxLDcgQEAKICMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExNDMsNyArMTE5OSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3U4NTAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTg1MDBfZGVmY29uZmlnCmluZGV4IDE1ZmRlMjIuLjcyN2FmZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTg1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTg1MDBfZGVmY29uZmlnCkBAIC0yMDEsNyArMjAxLDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVX1Y3PXkKIENPTkZJR19DUFVfMzJ2Nz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2MF9kZWZjb25maWcKaW5kZXggZmQ3Nzc0MC4uODdiNzAwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYwX2RlZmNvbmZpZwpAQCAtMTk1LDcgKzE5NSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdXNiLWE5MjYzX2RlZmNvbmZpZwppbmRleCBlN2MxOWRkLi43ZjAxOGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3VzYi1hOTI2M19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91c2ItYTkyNjNfZGVmY29uZmlnCkBAIC0xODcsNyArMTg3LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9BUk05MjZUPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy92ZXJzYXRpbGVfZGVmY29uZmlnCmluZGV4IGIxMWM1ZGEuLmExYWYwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdmVyc2F0aWxlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3ZlcnNhdGlsZV9kZWZjb25maWcKQEAgLTExNyw3ICsxMTcsNiBAQAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCmluZGV4IDZhYjVkZDUuLjkwOTg4N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCkBAIC0yMDQsNyArMjA0LDYgQEAKICMKICMgUHJvY2Vzc29yIFR5cGUKICMKLUNPTkZJR19DUFVfMzI9eQogQ09ORklHX0NQVV9YU0NBTEU9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCmluZGV4IDMzYmI3MjUuLjg0YTcyYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZwpAQCAtMjA4LDcgKzIwOCw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3lsOTIwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3lsOTIwMF9kZWZjb25maWcKaW5kZXggOTE5MmU1OS4uM2I2MjdhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy95bDkyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MveWw5MjAwX2RlZmNvbmZpZwpAQCAtMTgzLDcgKzE4Myw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVXzMydjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCmluZGV4IDgyM2IxMWUuLmZjYTVmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZwpAQCAtMjcxLDcgKzI3MSw2IEBACiAjCiAjIFByb2Nlc3NvciBUeXBlCiAjCi1DT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNzNlY2ViOC4uNzMwYWVmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMjExLDcgKzIxMSw3IEBACiAKIAl2b2lkICgqY29oZXJlbnRfa2Vybl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAJdm9pZCAoKmNvaGVyZW50X3VzZXJfcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCpmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKSh2b2lkICopOworCXZvaWQgKCpmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKSh2b2lkICosIHNpemVfdCk7CiAKIAl2b2lkICgqZG1hX2ludl9yYW5nZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwogCXZvaWQgKCpkbWFfY2xlYW5fcmFuZ2UpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKQEAgLTIzNiw3ICsyMzYsNyBAQAogI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZQkJY3B1X2NhY2hlLmZsdXNoX3VzZXJfcmFuZ2UKICNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UJY3B1X2NhY2hlLmNvaGVyZW50X2tlcm5fcmFuZ2UKICNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UJY3B1X2NhY2hlLmNvaGVyZW50X3VzZXJfcmFuZ2UKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlCWNwdV9jYWNoZS5mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYQljcHVfY2FjaGUuZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCiAvKgogICogVGhlc2UgYXJlIHByaXZhdGUgdG8gdGhlIGRtYS1tYXBwaW5nIEFQSS4gIERvIG5vdCB1c2UgZGlyZWN0bHkuCkBAIC0yNTUsMTQgKzI1NSwxNCBAQAogI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKICNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UJX19nbHVlKF9DQUNIRSxfY29oZXJlbnRfa2Vybl9yYW5nZSkKICNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UJX19nbHVlKF9DQUNIRSxfY29oZXJlbnRfdXNlcl9yYW5nZSkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCiBleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfa2Vybl9hbGwodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfdXNlcl9hbGwodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZSh2b2lkICopOworZXh0ZXJuIHZvaWQgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHZvaWQgKiwgc2l6ZV90KTsKIAogLyoKICAqIFRoZXNlIGFyZSBwcml2YXRlIHRvIHRoZSBkbWEtbWFwcGluZyBBUEkuICBEbyBub3QgdXNlIGRpcmVjdGx5LgpAQCAtNDQ4LDcgKzQ0OCw3IEBACiB7CiAJLyogaGlnaG1lbSBwYWdlcyBhcmUgYWx3YXlzIGZsdXNoZWQgdXBvbiBrdW5tYXAgYWxyZWFkeSAqLwogCWlmICgoY2FjaGVfaXNfdml2dCgpIHx8IGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKQotCQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKIH0KIAogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpIFwKQEAgLTQ2NSwxMyArNDY1LDYgQEAKICAqLwogI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGFnZSkJZG8geyB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaW9yZW1hcF9yZWdpb24odW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkIF9faW9tZW0gKnZpcnQsCi0JdW5zaWduZWQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKLXsKLQljb25zdCB2b2lkICpzdGFydCA9ICh2b2lkIF9fZm9yY2UgKil2aXJ0ICsgb2Zmc2V0OwotCWRtYWNfaW52X3JhbmdlKHN0YXJ0LCBzdGFydCArIHNpemUpOwotfQotCiAvKgogICogZmx1c2hfY2FjaGVfdm1hcCgpIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBtYXBwaW5ncyAoZWcsIHZpYSB2bWFwLAogICogdm1hbGxvYywgaW9yZW1hcCBldGMpIGluIGtlcm5lbCBzcGFjZSBmb3IgcGFnZXMuICBPbiBub24tVklQVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCA2MzRiMmQ3Li43OTM5NjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBfX0FTTV9BUk1fQ1BVX0gKIAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCiBzdHJ1Y3QgY3B1aW5mb19hcm0gewogCXN0cnVjdCBjcHUJY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCA3ZWRmMzUzLi5jYTUxMTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMTM4LDEyICsxMzgsMTIgQEAKICNkZWZpbmUgTk9fRE1BCTI1NQogI2VuZGlmCiAKKyNlbmRpZiAvKiBDT05GSUdfSVNBX0RNQV9BUEkgKi8KKwogI2lmZGVmIENPTkZJR19QQ0kKIGV4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CiAjZWxzZQogI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAgICAoMCkKICNlbmRpZgogCi0jZW5kaWYgLyogQ09ORklHX0lTQV9ETUFfQVBJICovCi0KICNlbmRpZiAvKiBfX0FTTV9BUk1fRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCmluZGV4IDM5NzY0MTIuLjhmZGFlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaApAQCAtMjQsMjA2ICsyNCwyMjggQEAKICAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCiAgKi8KIAotI2lmZGVmIENPTkZJR19DUFVfMzIKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTYKLSMgIGVuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm02CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNN1RETUkKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTd0ZG1pCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNNzEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNwogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTcyMFQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk03MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNNzQwVAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzQwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOXRkbWkKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOVRETUkKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05dGRtaQogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMFQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNOTIyVAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIyCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9GQTUyNgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmE1MjYKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfRkE1MjYKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9mYTUyNgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNVQKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI1CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNOTI2VAotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI2Ci0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05NDAKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTQwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0MAogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTk0NkUKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05NDZFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQ2CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfU0ExMTAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwMAotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNMTAyMEUKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTEwMjBlCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCi0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjIKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfQVJNMTAyNgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyNgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk0xMDI2CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyNgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCi0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzY2FsZQogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1hTQzMKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfWFNDMworIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X21vaGF3awotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKICMgZW5kaWYKLSMgaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgotIyAgaWZkZWYgQ1BVX05BTUUKLSMgICB1bmRlZiAgTVVMVElfQ1BVCi0jICAgZGVmaW5lIE1VTFRJX0NQVQotIyAgZWxzZQotIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmVyb2Nlb24KLSMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfRkVST0NFT04KKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9mZXJvY2VvbgogIyBlbmRpZgotIyBpZmRlZiBDT05GSUdfQ1BVX1Y2Ci0jICBpZmRlZiBDUFVfTkFNRQotIyAgIHVuZGVmICBNVUxUSV9DUFUKLSMgICBkZWZpbmUgTVVMVElfQ1BVCi0jICBlbHNlCi0jICAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgotIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9WNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CiAjIGVuZGlmCi0jIGlmZGVmIENPTkZJR19DUFVfVjcKLSMgIGlmZGVmIENQVV9OQU1FCi0jICAgdW5kZWYgIE1VTFRJX0NQVQotIyAgIGRlZmluZSBNVUxUSV9DUFUKLSMgIGVsc2UKLSMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y3Ci0jICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y3CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKICMgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGJiZWNjY2QuLmVlYzZlODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC05Nyw5ICs5NywxNSBAQAogICogc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICBOb3RlIHRoYXQgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKQogICogaGFzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOC4KICAqLworI2lmbmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgcHRfcmVncyB7CiAJbG9uZyB1cmVnc1sxOF07CiB9OworI2Vsc2UgLyogX19LRVJORUxfXyAqLworc3RydWN0IHB0X3JlZ3MgeworCXVuc2lnbmVkIGxvbmcgdXJlZ3NbMThdOworfTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNkZWZpbmUgQVJNX2Nwc3IJdXJlZ3NbMTZdCiAjZGVmaW5lIEFSTV9wYwkJdXJlZ3NbMTVdCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmgKaW5kZXggZjI3Mzc5ZC4uYzQzOTFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX25vdGlmeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9ub3RpZnkuaApAQCAtNDEsNyArNDEsNyBAQAogICogVGhlc2UgYXJlIHRoZSByZWFzb24gY29kZXMgZm9yIHRoZSB0aHJlYWQgbm90aWZpZXIuCiAgKi8KICNkZWZpbmUgVEhSRUFEX05PVElGWV9GTFVTSAkwCi0jZGVmaW5lIFRIUkVBRF9OT1RJRllfUkVMRUFTRQkxCisjZGVmaW5lIFRIUkVBRF9OT1RJRllfRVhJVAkxCiAjZGVmaW5lIFRIUkVBRF9OT1RJRllfU1dJVENICTIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDRlNTA2ZDAuLmNmOWNkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTEsNiArMzkxLDcgQEAKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2MikKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2MykKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JCShfX05SX1NZU0NBTExfQkFTRSszNjQpCisjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY1KQogCiAvKgogICogVGhlIGZvbGxvd2luZyBTV0lzIGFyZSBBUk0gcHJpdmF0ZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYyBiL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYwppbmRleCA3NjlhYmUxLi4yNWVmMjIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCkBAIC01MSw3ICs1MSw3IEBACiAJCSAqIGluaXRpYWxpc2VkIHN0YXRlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCBmYXVsdC4KIAkJICovCiAKLQljYXNlIFRIUkVBRF9OT1RJRllfUkVMRUFTRToKKwljYXNlIFRIUkVBRF9OT1RJRllfRVhJVDoKIAkJY3J1bmNoX3Rhc2tfcmVsZWFzZSh0aHJlYWQpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKaW5kZXggMGU4OGU0Ni4uMzYwYmI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCkBAIC0yMDcsOCArMjA3LDYgQEAKIAkJb3V0YigweDMyLCAweDRkNik7CiAJCW91dGIoMHgzMywgMHg0ZDYpOwogCi0JCXJlcXVlc3RfZG1hKERNQV9JU0FfQ0FTQ0FERSwgImNhc2NhZGUiKTsKLQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkbWFfcmVzb3VyY2VzKTsgaSsrKQogCQkJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCBkbWFfcmVzb3VyY2VzICsgaSk7CiAKQEAgLTIxOCw1ICsyMTYsNyBAQAogCQkJCXByaW50ayhLRVJOX0VSUiAiSVNBRE1BJXU6IHVuYWJsZSB0byByZWdpc3RlcjogJWRcbiIsCiAJCQkJCWNoYW4sIHJldCk7CiAJCX0KKworCQlyZXF1ZXN0X2RtYShETUFfSVNBX0NBU0NBREUsICJjYXNjYWRlIik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggZDI5MDNlMy4uNmM1Y2YzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC05NTcsOSArOTU3LDcgQEAKIAogI2Vsc2UKIAotI2lmZGVmIENPTkZJR19TTVAKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRtYgotI2VuZGlmCisJc21wX2RtYgogMToJbGRyZXgJcjMsIFtyMl0KIAlzdWJzCXIzLCByMywgcjAKIAlzdHJleGVxCXIzLCByMSwgW3IyXQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMGQ5NmQwMS4uYmEyYWRlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMTIsNyArMjEyLDggQEAKIAljaGFyIGJ1Zls2NF07CiAKIAlwcmludGsoIkNQVTogJWQgICAgJXMgICglcyAlLipzKVxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBwcmludF90YWludGVkKCksIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAorCQlyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBwcmludF90YWludGVkKCksCisJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCiAJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKIAlwcmludF9zeW1ib2woIlBDIGlzIGF0ICVzXG4iLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKQEAgLTI3NCwxNyArMjc1LDE4IEBACiAJX19iYWNrdHJhY2UoKTsKIH0KIAorQVRPTUlDX05PVElGSUVSX0hFQUQodGhyZWFkX25vdGlmeV9oZWFkKTsKKworRVhQT1JUX1NZTUJPTF9HUEwodGhyZWFkX25vdGlmeV9oZWFkKTsKKwogLyoKICAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCiAgKi8KIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKIHsKKwl0aHJlYWRfbm90aWZ5KFRIUkVBRF9OT1RJRllfRVhJVCwgY3VycmVudF90aHJlYWRfaW5mbygpKTsKIH0KIAotQVRPTUlDX05PVElGSUVSX0hFQUQodGhyZWFkX25vdGlmeV9oZWFkKTsKLQotRVhQT1JUX1NZTUJPTF9HUEwodGhyZWFkX25vdGlmeV9oZWFkKTsKLQogdm9pZCBmbHVzaF90aHJlYWQodm9pZCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKQEAgLTI5OSw5ICszMDEsNiBAQAogCiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKQogewotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyhkZWFkX3Rhc2spOwotCi0JdGhyZWFkX25vdGlmeShUSFJFQURfTk9USUZZX1JFTEVBU0UsIHRocmVhZCk7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpIF9fYXNtX18oInJldF9mcm9tX2ZvcmsiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC94c2NhbGUtY3AwLmMgYi9hcmNoL2FybS9rZXJuZWwveHNjYWxlLWNwMC5jCmluZGV4IDE3MTI3ZGIuLjE3OTYxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC94c2NhbGUtY3AwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3hzY2FsZS1jcDAuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkgKiBpbml0aWFsaXNlZCBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgZmF1bHQuCiAJCSAqLwogCi0JY2FzZSBUSFJFQURfTk9USUZZX1JFTEVBU0U6CisJY2FzZSBUSFJFQURfTk9USUZZX0VYSVQ6CiAJCWl3bW14dF90YXNrX3JlbGVhc2UodGhyZWFkKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM1NS1ldm0uYwppbmRleCBhOWI2NTBkLi4wNzdlY2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNTUtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWV2bS5jCkBAIC0yMzYsNiArMjM2LDcgQEAKIAogc3RhdGljIHN0cnVjdCB2cGZlX2NvbmZpZyB2cGZlX2NmZyA9IHsKIAkubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKHZwZmVfc3ViX2RldnMpLAorCS5pMmNfYWRhcHRlcl9pZCA9IDEsCiAJLnN1Yl9kZXZzID0gdnBmZV9zdWJfZGV2cywKIAkuY2FyZF9uYW1lID0gIkRNMzU1IEVWTSIsCiAJLmNjZGMgPSAiRE0zNTUgQ0NEQyIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKaW5kZXggMjg5ZmUxYi4uYjQ3NjM5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwpAQCAtMTkyLDcgKzE5MiwxMSBAQAogCS5idXNfZGVsYXkJPSAwCS8qIHVzZWMgKi8sCiB9OwogCi0jaWZkZWYgQ09ORklHX0tFWUJPQVJEX0RBVklOQ0kKK3N0YXRpYyBpbnQgZG0zNjVldm1fa2V5c2Nhbl9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkYXZpbmNpX2NmZ19yZWcoRE0zNjVfS0VZU0NBTik7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkbTM2NWV2bV9rZXltYXBbXSA9IHsKIAlLRVlfS1AyLAogCUtFWV9MRUZULApAQCAtMjE0LDYgKzIxOCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRhdmluY2lfa3NfcGxhdGZvcm1fZGF0YSBkbTM2NWV2bV9rc19kYXRhID0geworCS5kZXZpY2VfZW5hYmxlCT0gZG0zNjVldm1fa2V5c2Nhbl9lbmFibGUsCiAJLmtleW1hcAkJPSBkbTM2NWV2bV9rZXltYXAsCiAJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGRtMzY1ZXZtX2tleW1hcCksCiAJLnJlcAkJPSAxLApAQCAtMjIyLDcgKzIyNyw2IEBACiAJLmludGVydmFsCT0gMHgyLAogCS5tYXRyaXhfdHlwZQk9IERBVklOQ0lfS0VZU0NBTl9NQVRSSVhfNFg0LAogfTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IGNwbGRfbW1jX2dldF9jZChpbnQgbW9kdWxlKQogewpAQCAtNTExLDEwICs1MTUsNyBAQAogCiAJZG0zNjVfaW5pdF9hc3AoJmRtMzY1X2V2bV9zbmRfZGF0YSk7CiAJZG0zNjVfaW5pdF9ydGMoKTsKLQotI2lmZGVmIENPTkZJR19LRVlCT0FSRF9EQVZJTkNJCiAJZG0zNjVfaW5pdF9rcygmZG0zNjVldm1fa3NfZGF0YSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIGRtMzY1X2V2bV9pcnFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NHgtZXZtLmMKaW5kZXggZmQwMzk4Yi4uZTk2MTJjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ0eC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDR4LWV2bS5jCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCB2cGZlX2NvbmZpZyB2cGZlX2NmZyA9IHsKIAkubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKHZwZmVfc3ViX2RldnMpLAorCS5pMmNfYWRhcHRlcl9pZCA9IDEsCiAJLnN1Yl9kZXZzID0gdnBmZV9zdWJfZGV2cywKIAkuY2FyZF9uYW1lID0gIkRNNjQ0NiBFVk0iLAogCS5jY2RjID0gIkRNNjQ0NiBDQ0RDIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcF9pbnRjLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3BfaW50Yy5jCmluZGV4IDUyYjI4N2MuLjM3MzExZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcF9pbnRjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwX2ludGMuYwpAQCAtODEsMTIgKzgxLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBGYWtpbmcgdGhpcyBhbGxvd3MgdXMgdG8gdG8gd29yayB3aXRoIHN1c3BlbmQgZnVuY3Rpb25zIG9mCisgKiBnZW5lcmljIGRyaXZlcnMgd2hpY2ggY2FsbCB7ZW5hYmxlfGRpc2FibGV9X2lycV93YWtlIGZvcgorICogd2FrZSB1cCBpbnRlcnJ1cHQgc291cmNlcyAoZWcgUlRDIG9uIERBODUwKS4KKyAqLworc3RhdGljIGludCBjcF9pbnRjX3NldF93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcF9pbnRjX2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJjcF9pbnRjIiwKIAkuYWNrCQk9IGNwX2ludGNfYWNrX2lycSwKIAkubWFzawkJPSBjcF9pbnRjX21hc2tfaXJxLAogCS51bm1hc2sJCT0gY3BfaW50Y191bm1hc2tfaXJxLAogCS5zZXRfdHlwZQk9IGNwX2ludGNfc2V0X2lycV90eXBlLAorCS5zZXRfd2FrZQk9IGNwX2ludGNfc2V0X3dha2UsCiB9OwogCiB2b2lkIF9faW5pdCBjcF9pbnRjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBzaG9ydCBudW1faXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKaW5kZXggZGQyZDMyYy4uYTUxMDVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCkBAIC00ODEsMTEgKzQ4MSwxOCBAQAogCiBpbnQgZGE4eHhfcmVnaXN0ZXJfcnRjKHZvaWQpCiB7CisJaW50IHJldDsKKwogCS8qIFVubG9jayB0aGUgcnRjJ3MgcmVnaXN0ZXJzICovCiAJX19yYXdfd3JpdGVsKDB4ODNlNzBiMTMsIElPX0FERFJFU1MoREE4WFhfUlRDX0JBU0UgKyAweDZjKSk7CiAJX19yYXdfd3JpdGVsKDB4OTVhNGYxZTAsIElPX0FERFJFU1MoREE4WFhfUlRDX0JBU0UgKyAweDcwKSk7CiAKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYTh4eF9ydGNfZGV2aWNlKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhOHh4X3J0Y19kZXZpY2UpOworCWlmICghcmV0KQorCQkvKiBBdGxlYXN0IG9uIERBODUwLCBSVEMgaXMgYSB3YWtldXAgc291cmNlICovCisJCWRldmljZV9pbml0X3dha2V1cCgmZGE4eHhfcnRjX2RldmljZS5kZXYsIHRydWUpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYTh4eF9jcHVpZGxlX3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwppbmRleCAyZWM2MTllLi5mNTM3MzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwpAQCAtOTkzLDcgKzk5Myw2IEBACiAKIHZvaWQgX19pbml0IGRtMzY1X2luaXRfa3Moc3RydWN0IGRhdmluY2lfa3NfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzY1X0tFWVNDQU4pOwogCWRtMzY1X2tzX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfa3NfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9NYWtlZmlsZQppbmRleCAzMmY4NjA5Li4zYWZiMWIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCi1vYmoteQkJCTo9IGNvbW1vbi5vIGRjMjEyODUubyBkbWEubyBpc2EtaXJxLm8gdGltZS5vCitvYmoteQkJCTo9IGNvbW1vbi5vIGRjMjEyODUubyBkbWEubyBpc2EtaXJxLm8KIG9iai1tCQkJOj0KIG9iai1uCQkJOj0KIG9iai0JCQk6PQpAQCAtMjUsNCArMjUsNCBAQAogb2JqLSQoQ09ORklHX1BDSSkJKz0kKHBjaS15KQogb2JqLSQoQ09ORklHX0xFRFMpCSs9JChsZWRzLXkpCiAKLW9iai0kKENPTkZJR19JU0EpCSs9IGlzYS5vCitvYmotJChDT05GSUdfSVNBKQkrPSBpc2EubyBpc2EtcnRjLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCmluZGV4IGRhMzViYzUuLmJjNWU4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwpAQCAtNTYsOCArNTYsNiBAQAogCSpDU1JfVElNRVIxX0NOVEwgPSBUSU1FUl9DTlRMX0VOQUJMRSB8IFRJTUVSX0NOVExfQVVUT1JFTE9BRCB8IFRJTUVSX0NOVExfRElWMTY7CiAKIAlzZXR1cF9pcnEoSVJRX1RJTUVSMSwgJmZvb3RicmlkZ2VfdGltZXJfaXJxKTsKLQotCWlzYV9ydGNfaW5pdCgpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGZvb3RicmlkZ2VfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXJ0Yy5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZkZTQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS1ydGMuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtcnRjLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZy4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAorICoKKyAqIENBVFMgaGFzIGEgcmVhbC10aW1lIGNsb2NrLCB0aG91Z2ggdGhlIGV2YWx1YXRpb24gYm9hcmQgZG9lc24ndC4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiAgMjEtTWFyLTE5OTgJUk1LCUNyZWF0ZWQKKyAqICAyNy1BdWctMTk5OAlQSkIJQ0FUUyBzdXBwb3J0CisgKiAgMjgtRGVjLTE5OTgJQVBICU1hZGUgbGVkcyBvcHRpb25hbAorICogIDIwLUphbi0xOTk5CVJNSwlTdGFydGVkIG1lcmdlIG9mIEVCU0EyODUsIENBVFMgYW5kIE5ldFdpbmRlcgorICogIDE2LU1hci0xOTk5CVJNSwlNb3JlIHN1cHBvcnQgZm9yIEVCU0EyODUtbGlrZSBtYWNoaW5lcyB3aXRoIFJUQ3MgaW4KKyAqLworCisjZGVmaW5lIFJUQ19QT1JUKHgpCQkoMHg3MCsoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECQkwCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3ZvaWQgX19pbml0IGlzYV9ydGNfaW5pdCh2b2lkKQoreworCWludCByZWdfZCwgcmVnX2I7CisKKwkvKgorCSAqIFByb2JlIGZvciB0aGUgUlRDLgorCSAqLworCXJlZ19kID0gQ01PU19SRUFEKFJUQ19SRUdfRCk7CisKKwkvKgorCSAqIG1ha2Ugc3VyZSB0aGUgZGl2aWRlciBpcyBzZXQKKwkgKi8KKwlDTU9TX1dSSVRFKFJUQ19SRUZfQ0xDS18zMktIWiwgUlRDX1JFR19BKTsKKworCS8qCisJICogU2V0IGNvbnRyb2wgcmVnIEIKKwkgKiAgICgyNCBob3VyIG1vZGUsIHVwZGF0ZSBlbmFibGVkKQorCSAqLworCXJlZ19iID0gQ01PU19SRUFEKFJUQ19SRUdfQikgJiAweDdmOworCXJlZ19iIHw9IDI7CisJQ01PU19XUklURShyZWdfYiwgUlRDX1JFR19CKTsKKworCWlmICgoQ01PU19SRUFEKFJUQ19SRUdfQSkgJiAweDdmKSA9PSBSVENfUkVGX0NMQ0tfMzJLSFogJiYKKwkgICAgQ01PU19SRUFEKFJUQ19SRUdfQikgPT0gcmVnX2IpIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBhIFJUQy4gIENoZWNrIHRoZSBiYXR0ZXJ5CisJCSAqLworCQlpZiAoKHJlZ19kICYgMHg4MCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJUQzogKioqIHdhcm5pbmc6IENNT1MgYmF0dGVyeSBiYWRcbiIpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwppbmRleCAwYzgzOTAwLi5mNDg4ZmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCkBAIC03Niw4ICs3Niw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpc2FfdGltZXJfaW5pdCh2b2lkKQogewotCWlzYV9ydGNfaW5pdCgpOwotCiAJLyogZW5hYmxlIFBJVCB0aW1lciAqLwogCS8qIHNldCBmb3IgcGVyaW9kaWMgKDQpIGFuZCBMU0IvTVNCIHdyaXRlICgweDMwKSAqLwogCW91dGIoMHgzNCwgMHg0Myk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLmMKaW5kZXggNzI1YTIxOS4uNGQ5Mjc2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EuYwpAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewpAQCAtNzcsMTEgKzgwLDE4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGZvb3RicmlkZ2VfaXNhX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCi0JZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZGV2aWNlKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBSVEMgZGV2aWNlOiAlZFxuIiwgZXJyKTsKKwlpZiAoIWZvb3RicmlkZ2VfY2ZuX21vZGUoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBQZXJzb25hbCBzZXJ2ZXIgZG9lc24ndCBoYXZlIFJUQyAqLworCWlmICghbWFjaGluZV9pc19wZXJzb25hbF9zZXJ2ZXIoKSkgeworCQlpc2FfcnRjX2luaXQoKTsKKwkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZGV2aWNlKTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJUQyBkZXZpY2U6ICVkXG4iLCBlcnIpOworCX0KIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIHNlcmlhbCBkZXZpY2U6ICVkXG4iLCBlcnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS90aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMWI1NGYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvdGltZS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcuCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWwgQmx1bmRlbGwKLSAqCi0gKiBDQVRTIGhhcyBhIHJlYWwtdGltZSBjbG9jaywgdGhvdWdoIHRoZSBldmFsdWF0aW9uIGJvYXJkIGRvZXNuJ3QuCi0gKgotICogQ2hhbmdlbG9nOgotICogIDIxLU1hci0xOTk4CVJNSwlDcmVhdGVkCi0gKiAgMjctQXVnLTE5OTgJUEpCCUNBVFMgc3VwcG9ydAotICogIDI4LURlYy0xOTk4CUFQSAlNYWRlIGxlZHMgb3B0aW9uYWwKLSAqICAyMC1KYW4tMTk5OQlSTUsJU3RhcnRlZCBtZXJnZSBvZiBFQlNBMjg1LCBDQVRTIGFuZCBOZXRXaW5kZXIKLSAqICAxNi1NYXItMTk5OQlSTUsJTW9yZSBzdXBwb3J0IGZvciBFQlNBMjg1LWxpa2UgbWFjaGluZXMgd2l0aCBSVENzIGluCi0gKi8KLQotI2RlZmluZSBSVENfUE9SVCh4KQkJKHJ0Y19iYXNlKyh4KSkKLSNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJCTAKLQotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9iY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgImNvbW1vbi5oIgotCi1zdGF0aWMgaW50IHJ0Y19iYXNlOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZ2V0X2lzYV9jbW9zX3RpbWUodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjOwotCi0JLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBSVEMgbWFrZXMgc2Vuc2UuLi4uLgotCWlmICgoQ01PU19SRUFEKFJUQ19WQUxJRCkgJiBSVENfVlJUKSA9PSAwKQotCQlyZXR1cm4gbWt0aW1lKDE5NzAsIDEsIDEsIDAsIDAsIDApOwotCi0JZG8gewotCQlzZWMgID0gQ01PU19SRUFEKFJUQ19TRUNPTkRTKTsKLQkJbWluICA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JCWhvdXIgPSBDTU9TX1JFQUQoUlRDX0hPVVJTKTsKLQkJZGF5ICA9IENNT1NfUkVBRChSVENfREFZX09GX01PTlRIKTsKLQkJbW9uICA9IENNT1NfUkVBRChSVENfTU9OVEgpOwotCQl5ZWFyID0gQ01PU19SRUFEKFJUQ19ZRUFSKTsKLQl9IHdoaWxlIChzZWMgIT0gQ01PU19SRUFEKFJUQ19TRUNPTkRTKSk7Ci0KLQlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJc2VjID0gYmNkMmJpbihzZWMpOwotCQltaW4gPSBiY2QyYmluKG1pbik7Ci0JCWhvdXIgPSBiY2QyYmluKGhvdXIpOwotCQlkYXkgPSBiY2QyYmluKGRheSk7Ci0JCW1vbiA9IGJjZDJiaW4obW9uKTsKLQkJeWVhciA9IGJjZDJiaW4oeWVhcik7Ci0JfQotCWlmICgoeWVhciArPSAxOTAwKSA8IDE5NzApCi0JCXllYXIgKz0gMTAwOwotCXJldHVybiBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKLX0KLQotc3RhdGljIGludCBzZXRfaXNhX2Ntb3NfdGltZSh2b2lkKQotewotCWludCByZXR2YWwgPSAwOwotCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOwotCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OwotCXVuc2lnbmVkIGxvbmcgbm93dGltZSA9IHh0aW1lLnR2X3NlYzsKLQotCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7IC8qIHRlbGwgdGhlIGNsb2NrIGl0J3MgYmVpbmcgc2V0ICovCi0JQ01PU19XUklURSgoc2F2ZV9jb250cm9sfFJUQ19TRVQpLCBSVENfQ09OVFJPTCk7Ci0KLQlzYXZlX2ZyZXFfc2VsZWN0ID0gQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCk7IC8qIHN0b3AgYW5kIHJlc2V0IHByZXNjYWxlciAqLwotCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3R8UlRDX0RJVl9SRVNFVDIpLCBSVENfRlJFUV9TRUxFQ1QpOwotCi0JY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKLQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwotCi0JLyoKLQkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLAotCSAqIGRvbid0IGludGVyZmVyZSB3aXRoIGhvdXIgb3ZlcmZsb3cuIFRoaXMgYXZvaWRzCi0JICogbWVzc2luZyB3aXRoIHVua25vd24gdGltZSB6b25lcyBidXQgcmVxdWlyZXMgeW91cgotCSAqIFJUQyBub3QgdG8gYmUgb2ZmIGJ5IG1vcmUgdGhhbiAxNSBtaW51dGVzCi0JICovCi0JcmVhbF9zZWNvbmRzID0gbm93dGltZSAlIDYwOwotCXJlYWxfbWludXRlcyA9IG5vd3RpbWUgLyA2MDsKLQlpZiAoKChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSArIDE1KS8zMCkgJiAxKQotCQlyZWFsX21pbnV0ZXMgKz0gMzA7CQkvKiBjb3JyZWN0IGZvciBoYWxmIGhvdXIgdGltZSB6b25lICovCi0JcmVhbF9taW51dGVzICU9IDYwOwotCi0JaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKLQkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKLQkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKLQkJfQotCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7Ci0JCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKLQl9IGVsc2UKLQkJcmV0dmFsID0gLTE7Ci0KLQkvKiBUaGUgZm9sbG93aW5nIGZsYWdzIGhhdmUgdG8gYmUgcmVsZWFzZWQgZXhhY3RseSBpbiB0aGlzIG9yZGVyLAotCSAqIG90aGVyd2lzZSB0aGUgRFMxMjg4NyAocG9wdWxhciBNQzE0NjgxOEEgY2xvbmUgd2l0aCBpbnRlZ3JhdGVkCi0JICogYmF0dGVyeSBhbmQgcXVhcnR6KSB3aWxsIG5vdCByZXNldCB0aGUgb3NjaWxsYXRvciBhbmQgd2lsbCBub3QKLQkgKiB1cGRhdGUgcHJlY2lzZWx5IDUwMCBtcyBsYXRlci4gWW91IHdvbid0IGZpbmQgdGhpcyBtZW50aW9uZWQgaW4KLQkgKiB0aGUgRGFsbGFzIFNlbWljb25kdWN0b3IgZGF0YSBzaGVldHMsIGJ1dCB3aG8gYmVsaWV2ZXMgZGF0YQotCSAqIHNoZWV0cyBhbnl3YXkgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gTWFya3VzIEt1aG4KLQkgKi8KLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOwotCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXZvaWQgX19pbml0IGlzYV9ydGNfaW5pdCh2b2lkKQotewotCWlmIChtYWNoaW5lX2lzX3BlcnNvbmFsX3NlcnZlcigpKQotCQkvKgotCQkgKiBBZGQtaW4gMjEyODVzIHNob3VsZG4ndCBhY2Nlc3MgdGhlIFJUQwotCQkgKi8KLQkJcnRjX2Jhc2UgPSAwOwotCWVsc2UKLQkJcnRjX2Jhc2UgPSAweDcwOwotCi0JaWYgKHJ0Y19iYXNlKSB7Ci0JCWludCByZWdfZCwgcmVnX2I7Ci0KLQkJLyoKLQkJICogUHJvYmUgZm9yIHRoZSBSVEMuCi0JCSAqLwotCQlyZWdfZCA9IENNT1NfUkVBRChSVENfUkVHX0QpOwotCi0JCS8qCi0JCSAqIG1ha2Ugc3VyZSB0aGUgZGl2aWRlciBpcyBzZXQKLQkJICovCi0JCUNNT1NfV1JJVEUoUlRDX1JFRl9DTENLXzMyS0haLCBSVENfUkVHX0EpOwotCi0JCS8qCi0JCSAqIFNldCBjb250cm9sIHJlZyBCCi0JCSAqICAgKDI0IGhvdXIgbW9kZSwgdXBkYXRlIGVuYWJsZWQpCi0JCSAqLwotCQlyZWdfYiA9IENNT1NfUkVBRChSVENfUkVHX0IpICYgMHg3ZjsKLQkJcmVnX2IgfD0gMjsKLQkJQ01PU19XUklURShyZWdfYiwgUlRDX1JFR19CKTsKLQotCQlpZiAoKENNT1NfUkVBRChSVENfUkVHX0EpICYgMHg3ZikgPT0gUlRDX1JFRl9DTENLXzMyS0haICYmCi0JCSAgICBDTU9TX1JFQUQoUlRDX1JFR19CKSA9PSByZWdfYikgewotCQkJc3RydWN0IHRpbWVzcGVjIHR2OwotCi0JCQkvKgotCQkJICogV2UgaGF2ZSBhIFJUQy4gIENoZWNrIHRoZSBiYXR0ZXJ5Ci0JCQkgKi8KLQkJCWlmICgocmVnX2QgJiAweDgwKSA9PSAwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJUQzogKioqIHdhcm5pbmc6IENNT1MgYmF0dGVyeSBiYWRcbiIpOwotCi0JCQl0di50dl9uc2VjID0gMDsKLQkJCXR2LnR2X3NlYyA9IGdldF9pc2FfY21vc190aW1lKCk7Ci0JCQlkb19zZXR0aW1lb2ZkYXkoJnR2KTsKLQkJCXNldF9ydGMgPSBzZXRfaXNhX2Ntb3NfdGltZTsKLQkJfSBlbHNlCi0JCQlydGNfYmFzZSA9IDA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCmluZGV4IDhiZjA5YWUuLmY2YzYxOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKQEAgLTUyLDYgKzUyLDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIE1hcnZlbGwgT3BlblJEIEJhc2UgQm9hcmQuCiAKK2NvbmZpZyBNQUNIX05FVFNQQUNFX1YyCisJYm9vbCAiTGFDaWUgTmV0d29yayBTcGFjZSB2MiBOQVMgQm9hcmQiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBMYUNpZSBOZXR3b3JrIFNwYWNlIHYyIE5BUy4KKwogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKaW5kZXggOWYyZjY3Yi4uZDRkN2Y1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCkBAIC04LDUgKzgsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfVFMyMTkpCQkrPSB0czIxOS1zZXR1cC5vIHRzeDF4LWNvbW1vbi5vCiBvYmotJChDT05GSUdfTUFDSF9UUzQxWCkJCSs9IHRzNDF4LXNldHVwLm8gdHN4MXgtY29tbW9uLm8KIG9iai0kKENPTkZJR19NQUNIX09QRU5SRF9CQVNFKQkJKz0gb3BlbnJkX2Jhc2Utc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfTkVUU1BBQ0VfVjIpCQkrPSBuZXRzcGFjZV92Mi1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19DUFVfSURMRSkJCQkrPSBjcHVpZGxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0c3BhY2VfdjItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0c3BhY2VfdjItc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA2NDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jCisgKgorICogTGFDaWUgTmV0d29yayBTcGFjZSB2MiBib2FyZCBzZXR1cAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTaW1vbiBHdWlub3QgPHNndWlub3RAbGFjaWUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlbm/Dg8KudCBDYW5ldCA8YmVub2l0LmNhbmV0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC90aW1lLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogNTEyS0IgU1BJIEZsYXNoIG9uIEJvb3QgRGV2aWNlIChNQUNST05JWCBNWDI1TDQwMDUpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5ldHNwYWNlX3YyX2ZsYXNoX3BhcnRzW10gPSB7CisJeworCQkubmFtZSA9ICJ1LWJvb3QiLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSAwLAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgbmV0c3BhY2VfdjJfZmxhc2ggPSB7CisJLnR5cGUJCT0gIm14MjVsNDAwNWEiLAorCS5uYW1lCQk9ICJzcGlfZmxhc2giLAorCS5wYXJ0cwkJPSBuZXRzcGFjZV92Ml9mbGFzaF9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5ldHNwYWNlX3YyX2ZsYXNoX3BhcnRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gX19pbml0ZGF0YSBuZXRzcGFjZV92Ml9zcGlfc2xhdmVfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzCT0gIm0yNXA4MCIsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5ldHNwYWNlX3YyX2ZsYXNoLAorCQkuaXJxCQk9IC0xLAorCQkubWF4X3NwZWVkX2h6CT0gMjAwMDAwMDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBuZXRzcGFjZV92Ml9nZTAwX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQyBkZXZpY2VzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYXQyNGMwNCA9IHsKKwkuYnl0ZV9sZW4JPSBTWl80SyAvIDgsCisJLnBhZ2Vfc2l6ZQk9IDE2LAorfTsKKworLyoKKyAqIGkyYyBhZGRyIHwgY2hpcCAgICAgICAgIHwgZGVzY3JpcHRpb24KKyAqIDB4NTAgICAgIHwgSFQyNExDMDQgICAgIHwgZWVwcm9tICg1MTJCKQorICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBuZXRzcGFjZV92Ml9pMmNfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIjI0YzA0IiwgMHg1MCksCisJCS5wbGF0Zm9ybV9kYXRhICA9ICZhdDI0YzA0LAorCX0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0FUQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIG5ldHNwYWNlX3YyX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCisjZGVmaW5lIE5FVFNQQUNFX1YyX0dQSU9fU0FUQTBfUE9XRVIJMTYKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19TQVRBMV9QT1dFUgkxNworCitzdGF0aWMgdm9pZCBfX2luaXQgbmV0c3BhY2VfdjJfc2F0YV9wb3dlcl9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX1NBVEEwX1BPV0VSLCAiU0FUQTAgcG93ZXIiKTsKKwlpZiAoZXJyID09IDApIHsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fU0FUQTBfUE9XRVIsIDEpOworCQlpZiAoZXJyKQorCQkJZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fU0FUQTBfUE9XRVIpOworCX0KKwlpZiAoZXJyKQorCQlwcl9lcnIoIm5ldHNwYWNlX3YyOiBmYWlsZWQgdG8gc2V0dXAgU0FUQTAgcG93ZXJcbiIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfUFVTSF9CVVRUT04JCTMyCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBuZXRzcGFjZV92Ml9idXR0b25zW10gPSB7CisJWzBdID0geworCQkuY29kZQkJPSBLRVlfUE9XRVIsCisJCS5ncGlvCQk9IE5FVFNQQUNFX1YyX1BVU0hfQlVUVE9OLAorCQkuZGVzYwkJPSAiUG93ZXIgcHVzaCBidXR0b24iLAorCQkuYWN0aXZlX2xvdwk9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgbmV0c3BhY2VfdjJfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBuZXRzcGFjZV92Ml9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUobmV0c3BhY2VfdjJfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuZXRzcGFjZV92Ml9ncGlvX2J1dHRvbnMgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSAJPSAmbmV0c3BhY2VfdjJfYnV0dG9uX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZSBibHVlIGZyb250IExFRCBpcyB3aXJlZCB0byBhIENQTEQgYW5kIGNhbiBibGluayBpbiByZWxhdGlvbiB3aXRoIHRoZQorICogU0FUQSBhY3Rpdml0eS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFycmF5IGRldGFpbCB0aGUgZGlmZmVyZW50IExFRCByZWdpc3RlcnMgYW5kIHRoZSBjb21iaW5hdGlvbgorICogb2YgdGhlaXIgcG9zc2libGUgdmFsdWVzOgorICoKKyAqICBjbWRfbGVkICAgfCAgc2xvd19sZWQgIHwgL1NBVEEgYWN0aXZlIHwgTEVEIHN0YXRlCisgKiAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgKiAgICAgMSAgICAgIHwgICAgIDAgICAgICB8ICAgICAgeCAgICAgICB8ICBvZmYKKyAqICAgICAtICAgICAgfCAgICAgMSAgICAgIHwgICAgICB4ICAgICAgIHwgIG9uCisgKiAgICAgMCAgICAgIHwgICAgIDAgICAgICB8ICAgICAgMSAgICAgICB8ICBvbgorICogICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDAgICAgICAgfCAgYmxpbmsgKHJhdGUgMzAwbXMpCisgKi8KKworI2RlZmluZSBORVRTUEFDRV9WMl9HUElPX1JFRF9MRUQJMTIKKyNkZWZpbmUgTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9TTE9XCTI5CisjZGVmaW5lIE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01ECTMwCisKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBuZXRzcGFjZV92Ml9ncGlvX2xlZF9waW5zW10gPSB7CisJeworCQkubmFtZQk9ICJuc192MjpyZWQ6ZmFpbCIsCisJCS5ncGlvCT0gTkVUU1BBQ0VfVjJfR1BJT19SRURfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbmV0c3BhY2VfdjJfZ3Bpb19sZWRzX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShuZXRzcGFjZV92Ml9ncGlvX2xlZF9waW5zKSwKKwkubGVkcwkJPSBuZXRzcGFjZV92Ml9ncGlvX2xlZF9waW5zLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmV0c3BhY2VfdjJfZ3Bpb19sZWRzID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0c3BhY2VfdjJfZ3Bpb19sZWRzX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRzcGFjZV92Ml9ncGlvX2xlZHNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmV0c3BhY2VfdjJfZ3Bpb19sZWRzKTsKKworCS8qCisJICogQ29uZmlndXJlIHRoZSBmcm9udCBibHVlIExFRCB0byBibGluayBpbiByZWxhdGlvbiB3aXRoIHRoZSBTQVRBCisJICogYWN0aXZpdHkuCisJICovCisJaWYgKGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX1NMT1csCisJCQkgIlNBVEEgYmx1ZSBMRUQgc2xvdyIpICE9IDApCisJCXJldHVybjsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVywgMCkgIT0gMCkKKwkJZ290byBlcnJfZnJlZV8xOworCWlmIChncGlvX3JlcXVlc3QoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9DTUQsCisJCQkgIlNBVEEgYmx1ZSBMRUQgY29tbWFuZCIpICE9IDApCisJCWdvdG8gZXJyX2ZyZWVfMTsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01ELCAwKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlXzI7CisKKwlyZXR1cm47CisKK2Vycl9mcmVlXzI6CisJZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01EKTsKK2Vycl9mcmVlXzE6CisJZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVyk7CisJcHJfZXJyKCJuZXRzcGFjZV92MjogZmFpbGVkIHRvIGNvbmZpZ3VyZSBTQVRBIGJsdWUgTEVEXG4iKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaW1lcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG5ldHNwYWNlX3YyX3RpbWVyX2luaXQodm9pZCkKK3sKKwlraXJrd29vZF90Y2xrID0gMTY2NjY2NjY3OworCW9yaW9uX3RpbWVfaW5pdChJUlFfS0lSS1dPT0RfQlJJREdFLCBraXJrd29vZF90Y2xrKTsKK30KKworc3RydWN0IHN5c190aW1lciBuZXRzcGFjZV92Ml90aW1lciA9IHsKKwkuaW5pdCA9IG5ldHNwYWNlX3YyX3RpbWVyX2luaXQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdW5zaWduZWQgaW50IG5ldHNwYWNlX3YyX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDBfU1BJX1NDbiwKKwlNUFAxX1NQSV9NT1NJLAorCU1QUDJfU1BJX1NDSywKKwlNUFAzX1NQSV9NSVNPLAorCU1QUDRfTkZfSU82LAorCU1QUDVfTkZfSU83LAorCU1QUDZfU1lTUlNUX09VVG4sCisJTVBQOF9UV19TREEsCisJTVBQOV9UV19TQ0ssCisJTVBQMTBfVUFSVDBfVFhELAorCU1QUDExX1VBUlQwX1JYRCwKKwlNUFAxMl9HUE8sCQkvKiBSZWQgbGVkICovCisJTVBQMTRfR1BJTywJCS8qIFVTQiBmdXNlICovCisJTVBQMTZfR1BJTywJCS8qIFNBVEEgMCBwb3dlciAqLworCU1QUDE4X05GX0lPMCwKKwlNUFAxOV9ORl9JTzEsCisJTVBQMjBfU0FUQTFfQUNUbiwKKwlNUFAyMV9TQVRBMF9BQ1RuLAorCU1QUDI0X0dQSU8sCQkvKiBVU0IgbW9kZSBzZWxlY3QgKi8KKwlNUFAyNV9HUElPLAkJLyogRmFuIHJvdGF0aW9uIGZhaWwgKi8KKwlNUFAyNl9HUElPLAkJLyogVVNCIGRldmljZSB2YnVzICovCisJTVBQMjhfR1BJTywJCS8qIFVTQiBlbmFibGUgaG9zdCB2YnVzICovCisJTVBQMjlfR1BJTywJCS8qIEJsdWUgbGVkIChzbG93IHJlZ2lzdGVyKSAqLworCU1QUDMwX0dQSU8sCQkvKiBCbHVlIGxlZCAoY29tbWFuZCByZWdpc3RlcikgKi8KKwlNUFAzMV9HUElPLAkJLyogQm9hcmQgcG93ZXIgb2ZmICovCisJTVBQMzJfR1BJTywgCQkvKiBQb3dlciBidXR0b24gKDAgPSBSZWxlYXNlZCwgMSA9IFB1c2hlZCkgKi8KKwkwCit9OworCisjZGVmaW5lIE5FVFNQQUNFX1YyX0dQSU9fUE9XRVJfT0ZGCTMxCisKK3N0YXRpYyB2b2lkIG5ldHNwYWNlX3YyX3Bvd2VyX29mZih2b2lkKQoreworCWdwaW9fc2V0X3ZhbHVlKE5FVFNQQUNFX1YyX0dQSU9fUE9XRVJfT0ZGLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5ldHNwYWNlX3YyX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJa2lya3dvb2RfaW5pdCgpOworCWtpcmt3b29kX21wcF9jb25mKG5ldHNwYWNlX3YyX21wcF9jb25maWcpOworCisJbmV0c3BhY2VfdjJfc2F0YV9wb3dlcl9pbml0KCk7CisKKwlraXJrd29vZF9laGNpX2luaXQoKTsKKwlraXJrd29vZF9nZTAwX2luaXQoJm5ldHNwYWNlX3YyX2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2F0YV9pbml0KCZuZXRzcGFjZV92Ml9zYXRhX2RhdGEpOworCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhuZXRzcGFjZV92Ml9zcGlfc2xhdmVfaW5mbywKKwkJCQlBUlJBWV9TSVpFKG5ldHNwYWNlX3YyX3NwaV9zbGF2ZV9pbmZvKSk7CisJa2lya3dvb2Rfc3BpX2luaXQoKTsKKwlraXJrd29vZF9pMmNfaW5pdCgpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG5ldHNwYWNlX3YyX2kyY19pbmZvLAorCQkJCUFSUkFZX1NJWkUobmV0c3BhY2VfdjJfaTJjX2luZm8pKTsKKworCW5ldHNwYWNlX3YyX2dwaW9fbGVkc19pbml0KCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXRzcGFjZV92Ml9ncGlvX2J1dHRvbnMpOworCisJaWYgKGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX1BPV0VSX09GRiwgInBvd2VyLW9mZiIpID09IDAgJiYKKwkgICAgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fUE9XRVJfT0ZGLCAwKSA9PSAwKQorCQlwbV9wb3dlcl9vZmYgPSBuZXRzcGFjZV92Ml9wb3dlcl9vZmY7CisJZWxzZQorCQlwcl9lcnIoIm5ldHNwYWNlX3YyOiBmYWlsZWQgdG8gY29uZmlndXJlIHBvd2VyLW9mZiBHUElPXG4iKTsKK30KKworTUFDSElORV9TVEFSVChORVRTUEFDRV9WMiwgIkxhQ2llIE5ldHdvcmsgU3BhY2UgdjIiKQorCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IG5ldHNwYWNlX3YyX2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZuZXRzcGFjZV92Ml90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY2xvY2tzLmMKaW5kZXggZmNhZjg3Ni4uMDY1MWY5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2Nsb2Nrcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2Nsb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiBzdHJ1Y3QgbW9kdWxlOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMKaW5kZXggOGY0OWIyYi4uYjIyZGVjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYwpAQCAtMjQsOCArMjQsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLSNkZWZpbmUgQVJSQVlfQU5EX1NJWkUoeCkgICAgICAgKHgpLCBBUlJBWV9TSVpFKHgpCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHR0Y19ka2JfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJLyogVUFSVDIgKi8KIAlHUElPNDdfVUFSVDJfUlhELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXh0X3RkNjAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL214dF90ZDYwLmMKaW5kZXggMDNkYmJkYy4uOGJjYzFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbXh0X3RkNjAuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teHRfdGQ2MC5jCkBAIC01OCwyMSArNTgsNiBAQAogCVBFOV9QRl9VQVJUM19SWEQsCiAJUEUxMF9QRl9VQVJUM19DVFMsCiAJUEUxMV9QRl9VQVJUM19SVFMsCi0JLyogVUFSVDMgKi8KLQlQQjI2X0FGX1VBUlQ0X1JUUywKLQlQQjI4X0FGX1VBUlQ0X1RYRCwKLQlQQjI5X0FGX1VBUlQ0X0NUUywKLQlQQjMxX0FGX1VBUlQ0X1JYRCwKLQkvKiBVQVJUNCAqLwotCVBCMThfQUZfVUFSVDVfVFhELAotCVBCMTlfQUZfVUFSVDVfUlhELAotCVBCMjBfQUZfVUFSVDVfQ1RTLAotCVBCMjFfQUZfVUFSVDVfUlRTLAotCS8qIFVBUlQ1ICovCi0JUEIxMF9BRl9VQVJUNl9UWEQsCi0JUEIxMl9BRl9VQVJUNl9DVFMsCi0JUEIxMV9BRl9VQVJUNl9SWEQsCi0JUEIxM19BRl9VQVJUNl9SVFMsCiAJLyogRkVDICovCiAJUEQwX0FJTl9GRUNfVFhEMCwKIAlQRDFfQUlOX0ZFQ19UWEQxLApAQCAtMjYxLDEyICsyNDYsNiBAQAogCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogCX0sIHsKIAkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIAl9LAogfTsKIApAQCAtMjc4LDkgKzI1Nyw2IEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzFdKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsyXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMywgJnVhcnRfcGRhdGFbM10pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0X3BkYXRhWzRdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U1LCAmdWFydF9wZGF0YVs1XSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbXh0X3RkNjBfbmFuZF9ib2FyZF9pbmZvKTsKIAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG14dF90ZDYwX2kyY19kZXZpY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwppbmRleCBlZjI2OTUxLi42ZTgzOGI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpAQCAtMTczLDYgKzE3Myw3IEBACiBERUZJTkVfQ0xPQ0soa3BwX2NsaywJIDAsIENDTV9DR0NSMSwgMjgsIGdldF9yYXRlX2lwZywgTlVMTCk7CiBERUZJTkVfQ0xPQ0sodHNjX2NsaywJIDAsIENDTV9DR0NSMiwgMTMsIGdldF9yYXRlX2lwZywgTlVMTCk7CiBERUZJTkVfQ0xPQ0soaTJjX2NsaywJIDAsIENDTV9DR0NSMCwgIDYsIGdldF9yYXRlX2kyYywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZmVjX2NsaywJIDAsIENDTV9DR0NSMCwgMjMsIGdldF9yYXRlX2lwZywgTlVMTCk7CiAKICNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKIAl7CQkJCVwKQEAgLTIwNCw2ICsyMDUsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjIiLCBOVUxMLCBpMmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQogfTsKIAogaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCmluZGV4IDYzNTExZGUuLjlmZGVlYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpAQCAtNDE5LDMgKzQxOSwyMiBAQAogCXJldHVybiBteGNfZ3Bpb19pbml0KGlteF9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteF9ncGlvX3BvcnRzKSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyNV9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDI1X0ZFQ19CQVNFX0FERFIsCisJCS5lbmQJPSBNWDI1X0ZFQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IE1YMjVfSU5UX0ZFQywKKwkJLmVuZAk9IE1YMjVfSU5UX0ZFQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9mZWNfZGV2aWNlID0geworCS5uYW1lCT0gImZlYyIsCisJLmlkCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyNV9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBteDI1X2ZlY19yZXNvdXJjZXMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKaW5kZXggZmU2YmY4OC4uZmU1NDIwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5oCkBAIC0xNywzICsxNyw0IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2ZlY19kZXZpY2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwppbmRleCBkMjNhZTU3Li45MjFiYzk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTE4LDEwICsxOCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9mZWMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM1LDE2ICszNiw1NyBAQAogI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KICNpbmNsdWRlICJkZXZpY2VzLmgiCi0jaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KIAogc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAorc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDI1cGRrX3BhZHNbXSA9IHsKKwlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAorCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCisJTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKKwlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAorCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCisJTVgyNV9QQURfQTE3X19HUElPXzJfMywgLyogRkVDX0VOLCBHUElPIDM1ICovCisJTVgyNV9QQURfRDEyX19HUElPXzRfOCwgLyogRkVDX1JFU0VUX0IsIEdQSU8gMTA0ICovCit9OworCitzdGF0aWMgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhID0geworICAgICAgICAucGh5ICAgID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCit9OworCisjZGVmaW5lIEZFQ19FTkFCTEVfR1BJTwkJMzUKKyNkZWZpbmUgRkVDX1JFU0VUX0JfR1BJTwkxMDQKKworc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfZmVjX3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KEZFQ19FTkFCTEVfR1BJTywgIkZFQyBQSFkgZW5hYmxlIik7CisJZ3Bpb19yZXF1ZXN0KEZFQ19SRVNFVF9CX0dQSU8sICJGRUMgUEhZIHJlc2V0Iik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX0VOQUJMRV9HUElPLCAwKTsgIC8qIGRyb3AgUEhZIHBvd2VyICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEZFQ19SRVNFVF9CX0dQSU8sIDApOyAvKiBhc3NlcnQgcmVzZXQgKi8KKwl1ZGVsYXkoMik7CisKKwkvKiB0dXJuIG9uIFBIWSBwb3dlciBhbmQgbGlmdCByZXNldCAqLworCWdwaW9fc2V0X3ZhbHVlKEZFQ19FTkFCTEVfR1BJTywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoRkVDX1JFU0VUX0JfR1BJTywgMSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKIHsKKwlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDI1cGRrX3BhZHMsCisJCQlBUlJBWV9TSVpFKG14MjVwZGtfcGFkcykpOworCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7CisKKwlteDI1cGRrX2ZlY19yZXNldCgpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfZmVjX2RldmljZSwgJm14MjVfZmVjX3BkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKaW5kZXggZWE4ZWQxMC4uMjgyOTQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCkBAIC00OSw2ICs0OSw3IEBACiBjb25maWcgTUFDSF9NWDMxTElURQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSVRFS0lUIChMb2dpY1BEKSIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDMxIExJVEVLSVQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKIAkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KQEAgLTYzLDcgKzY0LDcgQEAKIGNvbmZpZyBNQUNIX01YMzFNT0JPQVJECiAJYm9vbCAiU3VwcG9ydCBteDMxbW9ib2FyZCBwbGF0Zm9ybXMgKEVQRkwgTW9ib3RzIGdyb3VwKSIKIAlzZWxlY3QgQVJDSF9NWDMxCi0Jc2VsZWN0IE1YQ19VTFBJCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBteDMxbW9ib2FyZCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggYmVkZjViOC4uNjg1OGE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC02NSw2ICs2NSwxMSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKIAkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYwppbmRleCAwNDk3YzE1Li4zZTdiYWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCkBAIC00OTQsMTEgKzQ5NCw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gU1BCQTBfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IFNQQkEwX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7CiAJCS52aXJ0dWFsCT0gQ1M0X0JBU0VfQUREUl9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gQ1M0X1NJWkUgLyAyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKaW5kZXggZGVmNmI2Ny4uNzg5YjIwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCkBAIC0xMzUsNiArMTM1LDcgQEAKICAqIFVTQgogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKICNkZWZpbmUgVVNCX1BBRF9DRkcgKFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0hZU19DTU9TIHwgXAogCQkJUEFEX0NUTF9PREVfQ01PUyB8IFBBRF9DVExfMTAwS19QVSkKIApAQCAtMTgwLDYgKzE4MSw3IEBACiAJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKIAkuZmxhZ3MgID0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAogfTsKKyNlbmRpZgogCiAvKgogICogTk9SIGZsYXNoCkBAIC0yMTIsMTEgKzIxNCw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWxpdGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewotCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewogCQkudmlydHVhbCA9IENTNF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbiA9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGggPSBDUzRfU0laRSwKQEAgLTI2MSwxMSArMjU4LDEzIEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UxLCAmc3BpMV9wZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oJm1jMTM3ODNfc3BpX2RldiwgMSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAkvKiBVU0IgKi8KIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCiAJCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKKyNlbmRpZgogCiAJLyogU01TQzkxMTcgSVJRIHBpbiAqLwogCXJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX1NGUzYpLCAic21zOTExNy1pcnEiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCmluZGV4IDhmYzYyNGYuLjQzODQyOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIAl1c2JoMV9wZGF0YS5vdGcgPSBvdGc7CiAKLQlyZXR1cm4gbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzMV91c2JoMSwgJnVzYmgxX3BkYXRhKTsKKwlyZXR1cm4gbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgxLCAmdXNiaDFfcGRhdGEpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCmluZGV4IDg1MTg0YTMuLjFmNDRiOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCiAJdXNiaDFfcGRhdGEub3RnID0gb3RnOwogCi0JcmV0dXJuIG14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MzFfdXNiaDEsICZ1c2JoMV9wZGF0YSk7CisJcmV0dXJuIG14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMSwgJnVzYmgxX3BkYXRhKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCmluZGV4IGI3MDUyOTEuLmNmZDYwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYwpAQCAtMzQ2LDYgKzM0Niw4IEBACiAJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisKICNkZWZpbmUgVVNCSDJfRU5fQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1NDSzYpCiAKIHN0YXRpYyBpbnQgbW9ib2FyZF91c2JoMl9od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0zOTIsOCArMzk0LDExIEBACiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKIAotCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDMxX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbW9ib2FyZF91c2JoMl9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogCiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbXgzMW1vYm9hcmRfbGVkc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCmluZGV4IDBmN2EyZjAuLjE4NzE1ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKQEAgLTIxMSwxMSArMjExLDYgQEAKICAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxcGRrX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwgPSBTUEJBMF9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oU1BCQTBfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IFNQQkEwX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRCwKLQl9LCB7CiAJCS52aXJ0dWFsID0gQ1M1X0JBU0VfQUREUl9WSVJULAogCQkucGZuID0gX19waHlzX3RvX3BmbihDUzVfQkFTRV9BRERSKSwKIAkJLmxlbmd0aCA9IENTNV9TSVpFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwppbmRleCA2Y2JhYWJlLi41YmUzOTY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwpAQCAtMzIyLDE2ICszMjIsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjXzJfZGV2aWNlc1tdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjX2NhbWVyYVtdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oIm10OXQwMzEiLCAweDVkKSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19tdDl2MDIyID0geworCS5idXNfaWQJCT0gMCwJCS8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEICovCisJLmJvYXJkX2luZm8JPSAmcGNtMDM3X2kyY19jYW1lcmFbMV0sCisJLmkyY19hZGFwdGVyX2lkCT0gMiwKKwkubW9kdWxlX25hbWUJPSAibXQ5djAyMiIsCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmtfbXQ5dDAzMSA9IHsKIAkuYnVzX2lkCQk9IDAsCQkvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCAqLwogCS5wb3dlcgkJPSBwY20wMzdfY2FtZXJhX3Bvd2VyLAotCS5ib2FyZF9pbmZvCT0gJnBjbTAzN19pMmNfMl9kZXZpY2VzWzBdLAorCS5ib2FyZF9pbmZvCT0gJnBjbTAzN19pMmNfY2FtZXJhWzBdLAogCS5pMmNfYWRhcHRlcl9pZAk9IDIsCiAJLm1vZHVsZV9uYW1lCT0gIm10OXQwMzEiLAogfTsKQEAgLTM0NSwxMSArMzU0LDE5IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X2NhbWVyYSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19tdDl0MDMxID0gewogCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCiAJLmlkCT0gMCwKIAkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua19tdDl0MDMxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY20wMzdfbXQ5djAyMiA9IHsKKwkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCS5pZAk9IDEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX210OXYwMjIsCiAJfSwKIH07CiAKQEAgLTQ0OSw3ICs0NjYsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwY20wMzdfZmxhc2gsCiAJJnBjbTAzN19zcmFtX2RldmljZSwKLQkmcGNtMDM3X2NhbWVyYSwKKwkmcGNtMDM3X210OXQwMzEsCisJJnBjbTAzN19tdDl2MDIyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcHVfcGxhdGZvcm1fZGF0YSBteDNfaXB1X2RhdGEgPSB7CkBAIC01OTksNyArNjE3LDcgQEAKIAlpZiAoIXJldCkKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1NJX0Q1KSwgMSk7CiAJZWxzZQotCQlpY2xpbmsucG93ZXIgPSBOVUxMOworCQlpY2xpbmtfbXQ5dDAzMS5wb3dlciA9IE5VTEw7CiAKIAlpZiAoIXBjbTAzN19jYW1lcmFfYWxsb2NfZG1hKDQgKiAxMDI0ICogMTAyNCkpCiAJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19jYW1lcmEsICZjYW1lcmFfcGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYwppbmRleCBhYjk5NWE5Li42NWU3YjViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYwpAQCAtNTk5LDcgKzU5OSw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXBfY2xrc1tdID0gewogCS8qIG5vbi1VTFBEIGNsb2NrcyAqLwogCUNMSyhOVUxMLAkiY2tfcmVmIiwJJmNrX3JlZiwJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAotCUNMSyhOVUxMLAkiY2tfZHBsbDEiLAkmY2tfZHBsbDEsCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImNrX2RwbGwxIiwJJmNrX2RwbGwxLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCiAJLyogQ0tfR0VOMSBjbG9ja3MgKi8KIAlDTEsoTlVMTCwJImNrX2RwbGwxb3V0IiwJJmNrX2RwbGwxb3V0LmNsaywgQ0tfMTZYWCksCiAJQ0xLKE5VTEwsCSJja19zb3NzaSIsCSZzb3NzaV9jaywJQ0tfMTZYWCksCkBAIC02MjcsNyArNjI3LDcgQEAKIAlDTEsoTlVMTCwJInRjMl9jayIsCSZ0YzJfY2ssCUNLXzE2WFgpLAogCUNMSyhOVUxMLAkiZG1hX2NrIiwJJmRtYV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAogCUNMSyhOVUxMLAkiZG1hX2xjZGZyZWVfY2siLCAmZG1hX2xjZGZyZWVfY2ssIENLXzE2WFgpLAotCUNMSyhOVUxMLAkiYXBpX2NrIiwJJmFwaV9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFwaV9jayIsCSZhcGlfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCiAJQ0xLKE5VTEwsCSJsYl9jayIsCSZsYl9jay5jbGssCUNLXzE1MTAgfCBDS18zMTApLAogCUNMSyhOVUxMLAkicmhlYTFfY2siLAkmcmhlYTFfY2ssCUNLXzE2WFgpLAogCUNMSyhOVUxMLAkicmhlYTJfY2siLAkmcmhlYTJfY2ssCUNLXzE2WFgpLApAQCAtNjU4LDYgKzY1OCwxMCBAQAogCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjX2ZjaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAogCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjX2ljaywJQ0tfMTZYWCksCiAJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCisJQ0xLKCJvbWFwMV9zcGkxMDBrLjEiLCAiZmNrIiwJJmR1bW15X2NrLAlDS183WFgpLAorCUNMSygib21hcDFfc3BpMTAway4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfN1hYKSwKKwlDTEsoIm9tYXAxX3NwaTEwMGsuMiIsICJmY2siLAkmZHVtbXlfY2ssCUNLXzdYWCksCisJQ0xLKCJvbWFwMV9zcGkxMDBrLjIiLCAiaWNrIiwJJmR1bW15X2NrLAlDS183WFgpLAogCUNMSygib21hcF91d2lyZSIsICJmY2siLAkmYXJteG9yX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAogCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZkc3BwZXJfY2ssCUNLXzE2WFgpLAogCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCkBAIC02NzQsNyArNjc4LDcgQEAKICAqIGluaXQKICAqLwogCi1zdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDFfY2xrX2Z1bmN0aW9ucyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAxX2Nsa19mdW5jdGlvbnMgPSB7CiAJLmNsa19lbmFibGUJCT0gb21hcDFfY2xrX2VuYWJsZSwKIAkuY2xrX2Rpc2FibGUJCT0gb21hcDFfY2xrX2Rpc2FibGUsCiAJLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCAyM2RlZDJkLi5hMmQwN2FhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTIzLDYgKzI0LDcgQEAKICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvbW1jLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwN3h4Lmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE5Niw2ICsxOTgsMzggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogT01BUDd4eCBTUEkgc3VwcG9ydCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9PTUFQXzEwMEspIHx8IGRlZmluZWQoQ09ORklHX1NQSV9PTUFQXzEwMEtfTU9EVUxFKQorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfc3BpMSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAib21hcDFfc3BpMTAwayIsCisJLmlkICAgICAgICAgICAgID0gMSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9zcGkyID0geworCS5uYW1lICAgICAgICAgICA9ICJvbWFwMV9zcGkxMDBrIiwKKwkuaWQgICAgICAgICAgICAgPSAyLAorfTsKKworc3RhdGljIHZvaWQgb21hcF9pbml0X3NwaTEwMGsodm9pZCkKK3sKKwlvbWFwX3NwaTEuZGV2LnBsYXRmb3JtX2RhdGEgPSBpb3JlbWFwKE9NQVA3WFhfU1BJMV9CQVNFLCAweDdmZik7CisJaWYgKG9tYXBfc3BpMS5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3NwaTEpOworCisJb21hcF9zcGkyLmRldi5wbGF0Zm9ybV9kYXRhID0gaW9yZW1hcChPTUFQN1hYX1NQSTJfQkFTRSwgMHg3ZmYpOworCWlmIChvbWFwX3NwaTIuZGV2LnBsYXRmb3JtX2RhdGEpCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9zcGkyKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3BpMTAwayh2b2lkKQoreworfQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX1NUSSkKIAogI2RlZmluZSBPTUFQMV9TVElfQkFTRQkJMHhmZmZlYTAwMApAQCAtMjYzLDYgKzI5Nyw3IEBACiAKIAlvbWFwX2luaXRfbWJveCgpOwogCW9tYXBfaW5pdF9ydGMoKTsKKwlvbWFwX2luaXRfc3BpMTAwaygpOwogCW9tYXBfaW5pdF9zdGkoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKaW5kZXggMDcyMTJjYy4uODQzNDEzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCkBAIC02Miw2ICs2MiwxNCBAQAogLyogSTJDIGludGVyZmFjZSAqLwogTVVYX0NGR183WFgoIkkyQ183WFhfU0NMIiwgICAgICAgICA1LCAgICAxLCAgICAwLCAgICAwLCAgIDEsIDApCiBNVVhfQ0ZHXzdYWCgiSTJDXzdYWF9TREEiLCAgICAgICAgIDUsICAgIDUsICAgIDAsICAgIDAsICAgMSwgMCkKKworLyogU1BJIHBpbnMgKi8KK01VWF9DRkdfN1hYKCJTUElfN1hYXzEiLCAgICAgICAgICAgNiwgICAgNSwgICAgNCwgICAgNCwgICAxLCAwKQorTVVYX0NGR183WFgoIlNQSV83WFhfMiIsICAgICAgICAgICA2LCAgICA5LCAgICA0LCAgICA4LCAgIDEsIDApCitNVVhfQ0ZHXzdYWCgiU1BJXzdYWF8zIiwgICAgICAgICAgIDYsICAgMTMsICAgIDQsICAgMTIsICAgMSwgMCkKK01VWF9DRkdfN1hYKCJTUElfN1hYXzQiLCAgICAgICAgICAgNiwgICAxNywgICAgNCwgICAxNiwgICAxLCAwKQorTVVYX0NGR183WFgoIlNQSV83WFhfNSIsICAgICAgICAgICA4LCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCitNVVhfQ0ZHXzdYWCgiU1BJXzdYWF82IiwgICAgICAgICAgIDksICAgIDUsICAgIDAsICAgIDQsICAgMCwgMCkKIH07CiAjZGVmaW5lIE9NQVA3WFhfUElOU19TWgkJQVJSQVlfU0laRShvbWFwN3h4X3BpbnMpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDc2YzExZWUuLjYwNmJmMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTE4LDYgKzE4LDcgQEAKIGNvbmZpZyBBUkNIX09NQVAzNFhYCiAJYm9vbCAiT01BUDM0eHggQmFzZWQgU3lzdGVtIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCiBjb25maWcgQVJDSF9PTUFQMzQzMAogCWJvb2wgIk9NQVAzNDMwIHN1cHBvcnQiCkBAIC03OSw2ICs4MCw3IEBACiBjb25maWcgTUFDSF9PTUFQM0VWTQogCWJvb2wgIk9NQVAgMzUzMCBFVk0gYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQMzUxN0VWTQogCWJvb2wgIk9NQVAzNTE3LyBBTTM1MTcgRVZNIGJvYXJkIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggMTU5MWFhZS4uMjYyNmE5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwppbmRleCA0NDIzOWUzLi4xMTdiOGZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKaW5kZXggMTg5MTNlOS4uMzRkZTE3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYwpAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCBjOWU1ZWJiLi5mZTNkMjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKaW5kZXggMTdmM2M5MS4uYWNhZmRiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3dsMTJ4eC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKaW5kZXggMjU4Nzk0ZC4uMWUzZGZiNiAxMDA3NTUKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC02MywyMSArNjMsMjEgQEAKIAlLRVkoNSwgMSwgS0VZX0gpLAogCUtFWSg1LCAyLCBLRVlfSiksCiAJS0VZKDUsIDMsIEtFWV9GMyksCisJS0VZKDUsIDQsIEtFWV9VTktOT1dOKSwKIAlLRVkoNSwgNSwgS0VZX1ZPTFVNRURPV04pLAogCUtFWSg1LCA2LCBLRVlfTSksCi0JS0VZKDUsIDcsIEtFWV9FTlRFUiksCisJS0VZKDUsIDcsIEtFWV9SSUdIVCksCiAJS0VZKDYsIDAsIEtFWV9RKSwKIAlLRVkoNiwgMSwgS0VZX0EpLAogCUtFWSg2LCAyLCBLRVlfTiksCiAJS0VZKDYsIDMsIEtFWV9CQUNLU1BBQ0UpLAogCUtFWSg2LCA2LCBLRVlfUCksCi0JS0VZKDYsIDcsIEtFWV9TRUxFQ1QpLAorCUtFWSg2LCA3LCBLRVlfVVApLAogCUtFWSg3LCAwLCBLRVlfUFJPRzEpLAkvKk1BQ1JPIDEgPFVzZXIgZGVmaW5lZD4gKi8KIAlLRVkoNywgMSwgS0VZX1BST0cyKSwJLypNQUNSTyAyIDxVc2VyIGRlZmluZWQ+ICovCiAJS0VZKDcsIDIsIEtFWV9QUk9HMyksCS8qTUFDUk8gMyA8VXNlciBkZWZpbmVkPiAqLwogCUtFWSg3LCAzLCBLRVlfUFJPRzQpLAkvKk1BQ1JPIDQgPFVzZXIgZGVmaW5lZD4gKi8KLQlLRVkoNywgNSwgS0VZX1JJR0hUKSwKLQlLRVkoNywgNiwgS0VZX1VQKSwKKwlLRVkoNywgNiwgS0VZX1NFTEVDVCksCiAJS0VZKDcsIDcsIEtFWV9ET1dOKQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmMKaW5kZXggZDBlM2ZiNy4uNTQyMDM1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5jCkBAIC00NDksMTggKzQ0OSw1NiBAQAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogLyoKICAqIFdhbGsgUFJDTSByYXRlIHRhYmxlIGFuZCBmaWxsb3V0IGNwdWZyZXEgZnJlcV90YWJsZQorICogWFhYIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGFuIE9QUCBsYXllciBpbiB0aGUgbmVhciBmdXR1cmUKICAqLwotc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBmcmVxX3RhYmxlW0FSUkFZX1NJWkUocmF0ZV90YWJsZSldOworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKIAogdm9pZCBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQogewotCXN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJbG9uZyBzeXNfY2tfcmF0ZTsKIAlpbnQgaSA9IDA7CisJaW50IHRibF9zeiA9IDA7CisKKwlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKIAogCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CiAJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQogCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRvbid0IHB1dCBieXBhc3MgcmF0ZXMgaW4gdGFibGUgKi8KKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKKwkJCWNvbnRpbnVlOworCisJCXRibF9zeisrOworCX0KKworCS8qCisJICogWFhYIEVuc3VyZSB0aGF0IHdlJ3JlIGRvaW5nIHdoYXQgQ1BVRnJlcSBleHBlY3RzIGZvciB0aGlzIGVycm9yCisJICogY2FzZSBhbmQgdGhlIGZvbGxvd2luZyBvbmUKKwkgKi8KKwlpZiAodGJsX3N6ID09IDApIHsKKwkJcHJfd2FybmluZygiJXM6IG5vIG1hdGNoaW5nIGVudHJpZXMgaW4gcmF0ZV90YWJsZVxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEluY2x1ZGUgdGhlIENQVUZSRVFfVEFCTEVfRU5EIHRlcm1pbmF0b3IgZW50cnkgKi8KKwl0Ymxfc3orKzsKKworCWZyZXFfdGFibGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICogdGJsX3N6LAorCQkJICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWZyZXFfdGFibGUpIHsKKwkJcHJfZXJyKCIlczogY291bGQgbm90IGt6YWxsb2MgZnJlcXVlbmN5IHRhYmxlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGRvbid0IHB1dCBieXBhc3MgcmF0ZXMgaW4gdGFibGUgKi8KQEAgLTQ3MiwxNyArNTEwLDE3IEBACiAJCWkrKzsKIAl9CiAKLQlpZiAoaSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmVxdWVuY3kgIgotCQkgICAgICAgInRhYmxlXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKIAlmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOwogCiAJKnRhYmxlID0gJmZyZXFfdGFibGVbMF07CiB9CisKK3ZvaWQgb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKK3sKKwlrZnJlZShmcmVxX3RhYmxlKTsKK30KKwogI2VuZGlmCiAKIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7CkBAIC00OTQsNiArNTMyLDcgQEAKIAkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkLAogI2lmZGVmCUNPTkZJR19DUFVfRlJFUQogCS5jbGtfaW5pdF9jcHVmcmVxX3RhYmxlCT0gb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZSwKKwkuY2xrX2V4aXRfY3B1ZnJlcV90YWJsZQk9IG9tYXAyX2Nsa19leGl0X2NwdWZyZXFfdGFibGUsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IGRlZDMyMzYuLmQ0MjE3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAotI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2szNHh4LmgiCiAjaW5jbHVkZSAic2RyYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHhfZGF0YS5jCmluZGV4IDhiZGNjOWNjLi5jNjAzMWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHhfZGF0YS5jCkBAIC03NzYsNiArNzc2LDggQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfQ0FNX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCiAJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE1MDAsNiArMTUwMiw3IEBACiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNTA5LDYgKzE1MTIsNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjc0NSw3ICsyNzQ5LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYnNwXzIzNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCAxYTQ1ZWQxLi5kZDI4NWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC01NTksNyArNTU5LDcgQEAKIAkgKiBkb3duc3RyZWFtIGNsb2NrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPwogCSAqLwogCi0JaWYgKCFjbGtkbSB8fCAhY2xrKQorCWlmICghY2xrZG0gfHwgIWNsayB8fCAhY2xrZG0tPmNsa3RyY3RybF9tYXNrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmY2xrZG0tPnVzZWNvdW50KSA+IDEpCkBAIC02MTAsNyArNjEwLDcgQEAKIAkgKiBkb3duc3RyZWFtIGNsb2NrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPwogCSAqLwogCi0JaWYgKCFjbGtkbSB8fCAhY2xrKQorCWlmICghY2xrZG0gfHwgIWNsayB8fCAhY2xrZG0tPmNsa3RyY3RybF9tYXNrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggYTg3NDllOC4uNWE3OTk2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L3ZyYW0uaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC03MywyMSArNzIsMjEgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMjQyeF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gRFNQX01FTV8yNFhYX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihEU1BfTUVNXzI0WFhfUEhZUyksCi0JCS5sZW5ndGgJCT0gRFNQX01FTV8yNFhYX1NJWkUsCisJCS52aXJ0dWFsCT0gRFNQX01FTV8yNDIwX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihEU1BfTUVNXzI0MjBfUEhZUyksCisJCS5sZW5ndGgJCT0gRFNQX01FTV8yNDIwX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCiAJewotCQkudmlydHVhbAk9IERTUF9JUElfMjRYWF9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFNQX0lQSV8yNFhYX1BIWVMpLAotCQkubGVuZ3RoCQk9IERTUF9JUElfMjRYWF9TSVpFLAorCQkudmlydHVhbAk9IERTUF9JUElfMjQyMF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRFNQX0lQSV8yNDIwX1BIWVMpLAorCQkubGVuZ3RoCQk9IERTUF9JUElfMjQyMF9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAogCXsKLQkJLnZpcnR1YWwJPSBEU1BfTU1VXzI0WFhfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NTVVfMjRYWF9QSFlTKSwKLQkJLmxlbmd0aAkJPSBEU1BfTU1VXzI0WFhfU0laRSwKKwkJLnZpcnR1YWwJPSBEU1BfTU1VXzI0MjBfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NTVVfMjQyMF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBEU1BfTU1VXzI0MjBfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCBlMDcxYjNmLi40NTllZjIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTk5NCw4ICs5OTQsMTAgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKLQlvbWFwX211eF9wYWNrYWdlX2ZpeHVwKHBhY2thZ2Vfc3Vic2V0LCBzdXBlcnNldCk7Ci0Jb21hcF9tdXhfcGFja2FnZV9pbml0X2JhbGxzKHBhY2thZ2VfYmFsbHMsIHN1cGVyc2V0KTsKKwlpZiAocGFja2FnZV9zdWJzZXQpCisJCW9tYXBfbXV4X3BhY2thZ2VfZml4dXAocGFja2FnZV9zdWJzZXQsIHN1cGVyc2V0KTsKKwlpZiAocGFja2FnZV9iYWxscykKKwkJb21hcF9tdXhfcGFja2FnZV9pbml0X2JhbGxzKHBhY2thZ2VfYmFsbHMsIHN1cGVyc2V0KTsKIAlvbWFwX211eF9zZXRfY21kbGluZV9zaWduYWxzKCk7CiAJb21hcF9tdXhfc2V0X2JvYXJkX3NpZ25hbHMoYm9hcmRfbXV4KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDIwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMjQyMF9kYXRhLmMKaW5kZXggMTI2YTkzOS4uZTZkZGE2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDI0MjBfZGF0YS5jCkBAIC05LDQ1ICs5LDQ3IEBACiAgKiBUaGUgT01BUDIgcHJvY2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9ucycuCiAgKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdlIGFuZCBzcGVlZCBmb3IgY2xvY2tzLgogICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBmb3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcwotICogdGhlc2UgY29tYmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvJ3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCisgKiB0aGVzZSBjb21iaW5hdGlvbnMgaXMgdmlhIHRoZSAncmF0aW9zJyB3aGljaCB0aGUgY2xvY2tzIG9wZXJhdGUgd2l0aAogICogcmVzcGVjdCB0byBlYWNoIG90aGVyLiBUaGVzZSByYXRpbyBzZXRzIGFyZSBmb3IgYSBnaXZlbiB2b2x0YWdlL0RQTEwKLSAqIHNldHRpbmcuIEFsbCBjb25maWd1cmF0aW9ucyBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgRFBMTCBzZXR0aW5nIGFuZCBhIHJhdGlvCi0gKiBUaGVyZSBhcmUgMyByYXRpbyBzZXRzIGZvciB0aGUgMjQzMCBhbmQgWCByYXRpbyBzZXRzIGZvciAyNDIwLgotICoKLSAqIDI0MzAgZGlmZmVycyBmcm9tIDI0MjAgaW4gdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSBwaGFzZSBzeW5jaHJvbml6ZXJzIHVzZWQuCi0gKiBUaGV5IGJvdGggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBjbG9jayBkb21haW4gc2V0dXAuIDI0MjAoaXZhMSxkc3ApIHZzCi0gKiAyNDMwIChpdmEyLjEsIE5PZHNwLCBtZG0pCisgKiBzZXR0aW5nLiBBbGwgY29uZmlndXJhdGlvbnMgY2FuIGJlIGRlc2NyaWJlZCBieSBhIERQTEwgc2V0dGluZyBhbmQgYSByYXRpby4KICAqCiAgKiBYWFggTWlzc2luZyB2b2x0YWdlIGRhdGEuCisgKiBYWFggTWlzc2luZyAxOS4yTUh6IHN5c19jbGsgcmF0ZSBzZXRzIChuZWVkZWQgZm9yIE44MDAvTjgxMCkKICAqCiAgKiBUSGUgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGlzIGZpbGUgaXMgZGVwcmVjYXRlZC4gIE9uY2UgYSByZWFzb25hYmxlCiAgKiBPUFAgQVBJIGV4aXN0cywgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdXNlIGl0LgogICoKICAqIFRoaXMgaXMgdGVjaG5pY2FsbHkgcGFydCBvZiB0aGUgT01BUDJ4eHggY2xvY2sgY29kZS4KKyAqCisgKiBDb25zaWRlcmFibGUgd29yayBpcyBzdGlsbCBuZWVkZWQgdG8gZnVsbHkgc3VwcG9ydCBkeW5hbWljIGZyZXF1ZW5jeQorICogY2hhbmdlcyBvbiBPTUFQMnh4eC1zZXJpZXMgY2hpcHMuICBSZWFkZXJzIGludGVyZXN0ZWQgaW4gc3VjaCBhCisgKiBwcm9qZWN0IGFyZSBlbmNvdXJhZ2VkIHRvIHJldmlldyB0aGUgTWFlbW8gRGlhYmxvIFJYLTM0IGFuZCBSWC00NAorICoga2VybmVsIHNvdXJjZSBhdDoKKyAqICAgICBodHRwOi8vcmVwb3NpdG9yeS5tYWVtby5vcmcvcG9vbC9kaWFibG8vZnJlZS9rL2tlcm5lbC1zb3VyY2UtZGlhYmxvLwogICovCiAKICNpbmNsdWRlICJvcHAyeHh4LmgiCiAjaW5jbHVkZSAic2RyYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KKy8qCisgKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpb3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCiAgKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsCiAgKiBDTV9DTEtTRUxfRFNQLCBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMLAogICogQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KICAqCi0gKiBGaWxsaW5nIGluIHRhYmxlIGJhc2VkIG9uIEg0IGJvYXJkcyBhbmQgMjQzMC1TRFBzIHZhcmlhbnRzIGF2YWlsYWJsZS4KLSAqIFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBtb3JlIHJhdGVzIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBiZSBkZWZpbmVkLgorICogRmlsbGluZyBpbiB0YWJsZSBiYXNlZCBvbiBINCBib2FyZHMgYXZhaWxhYmxlLiAgVGhlcmUgYXJlIHF1aXRlIGEKKyAqIGZldyBtb3JlIHJhdGUgY29tYmluYXRpb25zIHdoaWNoIGNvdWxkIGJlIGRlZmluZWQuCiAgKgotICogV2hlbiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGRlZmluZWQgdGhlIHN0YXJ0IHVwIHdpbGwgdHJ5IGFuZCBjaG9vc2UgdGhlCi0gKiBmYXN0ZXN0IG9uZS4gSWYgYSAnZmFzdCcgdmFsdWUgaXMgZGVmaW5lZCwgdGhlbiBhdXRvbWF0aWNhbGx5LCB0aGUgLzIKLSAqIG9uZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMgaXQgY2FuIGJlIHVzZWQuCUdlbmVyYWxseSBoYXZpbmcgbW9yZSB0aGF0Ci0gKiBvbmUgZmFzdCBzZXQgZG9lcyBub3QgbWFrZSBzZW5zZSwgYXMgc3RhdGljIHRpbWluZ3MgbmVlZCB0byBiZSBjaGFuZ2VkCi0gKiB0byBjaGFuZ2UgdGhlIHNldC4JIFRoZSBleGNlcHRpb24gaXMgdGhlIGJ5cGFzcyBzZXR0aW5nIHdoaWNoIGlzCi0gKiBhdmFpbGJsZSBmb3IgbG93IHBvd2VyIGJ5cGFzcy4KKyAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpbmVkIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlCisgKiB0aGUgZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwKKyAqIHRoZSAvMiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLiAgR2VuZXJhbGx5IGhhdmluZworICogbW9yZSB0aGFuIG9uZSBmYXN0IHNldCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMgdGltaW5ncyBuZWVkCisgKiB0byBiZSBjaGFuZ2VkIHRvIGNoYW5nZSB0aGUgc2V0LiAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgYnlwYXNzCisgKiBzZXR0aW5nIHdoaWNoIGlzIGF2YWlsYWJsZSBmb3IgbG93IHBvd2VyIGJ5cGFzcy4KICAqCiAgKiBOb3RlOiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNvcnRlZCwgZmFzdGVzdCB0byBzbG93ZXN0LgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAqKi8KIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyBvbWFwMjQyMF9yYXRlX3RhYmxlW10gPSB7CiAJLyogUFJDTSBJIC0gRkFTVCAqLwogCXtTMTJNLCBTNjYwTSwgUzMzME0sIFJJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzMwTUh6IEFSTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMjQzMF9kYXRhLmMKaW5kZXggZWRiODE2Ny4uMWI5NTk2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDMwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDI0MzBfZGF0YS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG9wcDI0MjBfZGF0YS5jIC0gb2xkLXN0eWxlICJPUFAiIHRhYmxlIGZvciBPTUFQMjQyMAorICogb3BwMjQzMF9kYXRhLmMgLSBvbGQtc3R5bGUgIk9QUCIgdGFibGUgZm9yIE9NQVAyNDMwCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCkBAIC05LDE2ICs5LDE2IEBACiAgKiBUaGUgT01BUDIgcHJvY2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9ucycuCiAgKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdlIGFuZCBzcGVlZCBmb3IgY2xvY2tzLgogICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBmb3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcwotICogdGhlc2UgY29tYmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvJ3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCisgKiB0aGVzZSBjb21iaW5hdGlvbnMgaXMgdmlhIHRoZSAncmF0aW9zJyB3aGljaCB0aGUgY2xvY2tzIG9wZXJhdGUgd2l0aAogICogcmVzcGVjdCB0byBlYWNoIG90aGVyLiBUaGVzZSByYXRpbyBzZXRzIGFyZSBmb3IgYSBnaXZlbiB2b2x0YWdlL0RQTEwKLSAqIHNldHRpbmcuIEFsbCBjb25maWd1cmF0aW9ucyBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgRFBMTCBzZXR0aW5nIGFuZCBhIHJhdGlvCi0gKiBUaGVyZSBhcmUgMyByYXRpbyBzZXRzIGZvciB0aGUgMjQzMCBhbmQgWCByYXRpbyBzZXRzIGZvciAyNDIwLgorICogc2V0dGluZy4gQWxsIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBkZXNjcmliZWQgYnkgYSBEUExMIHNldHRpbmcgYW5kIGEgcmF0aW8uCiAgKgogICogMjQzMCBkaWZmZXJzIGZyb20gMjQyMCBpbiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHBoYXNlIHN5bmNocm9uaXplcnMgdXNlZC4KICAqIFRoZXkgYm90aCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNsb2NrIGRvbWFpbiBzZXR1cC4gMjQyMChpdmExLGRzcCkgdnMKICAqIDI0MzAgKGl2YTIuMSwgTk9kc3AsIG1kbSkKICAqCiAgKiBYWFggTWlzc2luZyB2b2x0YWdlIGRhdGEuCisgKiBYWFggTWlzc2luZyAxOS4yTUh6IHN5c19jbGsgcmF0ZSBzZXRzLgogICoKICAqIFRIZSBmb3JtYXQgZGVzY3JpYmVkIGluIHRoaXMgZmlsZSBpcyBkZXByZWNhdGVkLiAgT25jZSBhIHJlYXNvbmFibGUKICAqIE9QUCBBUEkgZXhpc3RzLCB0aGUgZGF0YSBpbiB0aGlzIGZpbGUgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgaXQuCkBAIC0zMCwyNCArMzAsMjQgQEAKICNpbmNsdWRlICJzZHJjLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgorLyoKKyAqIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvcyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KICAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSwKICAqIENNX0NMS1NFTF9EU1AsIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwsCiAgKiBDTV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQogICoKLSAqIEZpbGxpbmcgaW4gdGFibGUgYmFzZWQgb24gSDQgYm9hcmRzIGFuZCAyNDMwLVNEUHMgdmFyaWFudHMgYXZhaWxhYmxlLgotICogVGhlcmUgYXJlIHF1aXRlIGEgZmV3IG1vcmUgcmF0ZXMgY29tYmluYXRpb25zIHdoaWNoIGNvdWxkIGJlIGRlZmluZWQuCisgKiBGaWxsaW5nIGluIHRhYmxlIGJhc2VkIG9uIDI0MzAtU0RQcyB2YXJpYW50cyBhdmFpbGFibGUuICBUaGVyZSBhcmUKKyAqIHF1aXRlIGEgZmV3IG1vcmUgcmF0ZSBjb21iaW5hdGlvbnMgd2hpY2ggY291bGQgYmUgZGVmaW5lZC4KICAqCi0gKiBXaGVuIG11bHRpcGxlIHZhbHVlcyBhcmUgZGVmaW5lZCB0aGUgc3RhcnQgdXAgd2lsbCB0cnkgYW5kIGNob29zZSB0aGUKLSAqIGZhc3Rlc3Qgb25lLiBJZiBhICdmYXN0JyB2YWx1ZSBpcyBkZWZpbmVkLCB0aGVuIGF1dG9tYXRpY2FsbHksIHRoZSAvMgotICogb25lIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBpdCBjYW4gYmUgdXNlZC4JR2VuZXJhbGx5IGhhdmluZyBtb3JlIHRoYXQKLSAqIG9uZSBmYXN0IHNldCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMgdGltaW5ncyBuZWVkIHRvIGJlIGNoYW5nZWQKLSAqIHRvIGNoYW5nZSB0aGUgc2V0LgkgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgYnlwYXNzIHNldHRpbmcgd2hpY2ggaXMKLSAqIGF2YWlsYmxlIGZvciBsb3cgcG93ZXIgYnlwYXNzLgorICogV2hlbiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGRlZmluZWQgdGhlIHN0YXJ0IHVwIHdpbGwgdHJ5IGFuZCBjaG9vc2UKKyAqIHRoZSBmYXN0ZXN0IG9uZS4gSWYgYSAnZmFzdCcgdmFsdWUgaXMgZGVmaW5lZCwgdGhlbiBhdXRvbWF0aWNhbGx5LAorICogdGhlIC8yIG9uZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMgaXQgY2FuIGJlIHVzZWQuICBHZW5lcmFsbHkgaGF2aW5nCisgKiBtb3JlIHRoYW4gb25lIGZhc3Qgc2V0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFzIHN0YXRpYyB0aW1pbmdzIG5lZWQKKyAqIHRvIGJlIGNoYW5nZWQgdG8gY2hhbmdlIHRoZSBzZXQuICBUaGUgZXhjZXB0aW9uIGlzIHRoZSBieXBhc3MKKyAqIHNldHRpbmcgd2hpY2ggaXMgYXZhaWxhYmxlIGZvciBsb3cgcG93ZXIgYnlwYXNzLgogICoKICAqIE5vdGU6IFRoaXMgdGFibGUgbmVlZHMgdG8gYmUgc29ydGVkLCBmYXN0ZXN0IHRvIHNsb3dlc3QuCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICovCiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgb21hcDI0MzBfcmF0ZV90YWJsZVtdID0gewogCS8qIFBSQ00gIzQgLSByYXRpbzIgKEVTMi4xKSAtIEZBU1QgKi8KIAl7UzEzTSwgUzc5OE0sIFMzOTlNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDM5OU1IeiBBUk0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDgxZWQyNTIuLmM2Y2M4MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtMTI0LDggKzEyNCw4IEBACiAJY29udHJvbF9wYWRjb25mX29mZiB8PSBTVEFSVF9QQURDT05GX1NBVkU7CiAJb21hcF9jdHJsX3dyaXRlbChjb250cm9sX3BhZGNvbmZfb2ZmLCBPTUFQMzQzWF9DT05UUk9MX1BBRENPTkZfT0ZGKTsKIAkvKiB3YWl0IGZvciB0aGUgc2F2ZSB0byBjb21wbGV0ZSAqLwotCXdoaWxlICghb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfR0VORVJBTF9QVVJQT1NFX1NUQVRVUykKLQkJCSYgUEFEQ09ORl9TQVZFX0RPTkUpCisJd2hpbGUgKCEob21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfR0VORVJBTF9QVVJQT1NFX1NUQVRVUykKKwkJCSYgUEFEQ09ORl9TQVZFX0RPTkUpKQogCQk7CiAJLyogU2F2ZSB0aGUgSW50ZXJydXB0IGNvbnRyb2xsZXIgY29udGV4dCAqLwogCW9tYXBfaW50Y19zYXZlX2NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IDM5Yjc5N2IuLjhjOTY0YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMTI1LDYgKzEyNSwxMyBAQAogCX0KIH07CiAjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fc2VyaWFsX3JlYWRfcmVnKHN0cnVjdCB1YXJ0X3BvcnQgKnVwLAorCQkJCQkgICBpbnQgb2Zmc2V0KQoreworCW9mZnNldCA8PD0gdXAtPnJlZ3NoaWZ0OworCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRiKHVwLT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VyaWFsX3JlYWRfcmVnKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCiAJCQkJCSAgIGludCBvZmZzZXQpCiB7CkBAIC01ODMsMTEgKzU5MCwxMiBAQAogewogCWlmIChVQVJUX1JYID09IG9mZnNldCkgewogCQl1bnNpZ25lZCBpbnQgbHNyOwotCQlsc3IgPSBzZXJpYWxfcmVhZF9yZWcob21hcF91YXJ0W3VwLT5saW5lXS5wLCBVQVJUX0xTUik7CisJCWxzciA9IF9fc2VyaWFsX3JlYWRfcmVnKHVwLCBVQVJUX0xTUik7CiAJCWlmICghKGxzciAmIFVBUlRfTFNSX0RSKSkKIAkJCXJldHVybiAtRVBFUk07CiAJfQotCXJldHVybiBzZXJpYWxfcmVhZF9yZWcob21hcF91YXJ0W3VwLT5saW5lXS5wLCBvZmZzZXQpOworCisJcmV0dXJuIF9fc2VyaWFsX3JlYWRfcmVnKHVwLCBvZmZzZXQpOwogfQogCiB2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9lYXJseV9pbml0KHZvaWQpCkBAIC02NDAsMTIgKzY0OCw5IEBACiAJCXVhcnQtPm51bSA9IGk7CiAJCXAtPnByaXZhdGVfZGF0YSA9IHVhcnQ7CiAJCXVhcnQtPnAgPSBwOwotCQlsaXN0X2FkZF90YWlsKCZ1YXJ0LT5ub2RlLCAmdWFydF9saXN0KTsKIAogCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCiAJCQlwLT5pcnEgKz0gMzI7Ci0KLQkJb21hcF91YXJ0X2VuYWJsZV9jbG9ja3ModWFydCk7CiAJfQogfQogCkBAIC02NzMsOSArNjc4LDEzIEBACiAJcGRldiA9ICZ1YXJ0LT5wZGV2OwogCWRldiA9ICZwZGV2LT5kZXY7CiAKKwlvbWFwX3VhcnRfZW5hYmxlX2Nsb2Nrcyh1YXJ0KTsKKwogCW9tYXBfdWFydF9yZXNldCh1YXJ0KTsKIAlvbWFwX3VhcnRfaWRsZV9pbml0KHVhcnQpOwogCisJbGlzdF9hZGRfdGFpbCgmdWFydC0+bm9kZSwgJnVhcnRfbGlzdCk7CisKIAlpZiAoV0FSTl9PTihwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldikpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IGU2ZDhlMTAuLmRlZTkyMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtMzcsNiArMzcsOCBAQAogY29uZmlnIE1BQ0hfTElUVExFVE9OCiAJYm9vbCAiUFhBM3h4IEZvcm0gRmFjdG9yIFBsYXRmb3JtIChha2EgTGl0dGxldG9uKSIKIAlzZWxlY3QgUFhBM3h4CisJc2VsZWN0IENQVV9QWEEzMDAKKwlzZWxlY3QgQ1BVX1BYQTMxMAogCXNlbGVjdCBQWEFfU1NQCiAKIGNvbmZpZyBNQUNIX1RBVk9SRVZCCkBAIC0xMTAsNiArMTEyLDggQEAKIAlib29sICJDb21wdUxhYiBDTS1YMzAwIG1vZHVsZXMiCiAJc2VsZWN0IFBYQTN4eAogCXNlbGVjdCBDUFVfUFhBMzAwCisJc2VsZWN0IENQVV9QWEEzMTAKKwlzZWxlY3QgSEFWRV9QV00KIAogY29uZmlnIEFSQ0hfR1VNU1RJWAogCWJvb2wgIkd1bXN0aXggWFNjYWxlIDI1NSBib2FyZHMiCkBAIC0yNDAsNyArMjQ0LDYgQEAKIAlzZWxlY3QgUFhBM3h4CiAJc2VsZWN0IENQVV9QWEEzMDAKIAlzZWxlY3QgQ1BVX1BYQTMxMAotCXNlbGVjdCBIQVZFX1BXTQogCiBjb25maWcgTUFDSF9DT0xJQlJJMzIwCiAJYm9vbCAiVG9yYWRleCBDb2xpYnJpIFBYQTMyMCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYwppbmRleCAzMzk1NDYzLi44ZTEwZGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KQEAgLTE0LDYgKzEzLDcgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTN4eF9uYW5kLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNTBmMTI5Ny4uZTc0MWJmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTI1MCwyMCArMjUwLDE3IEBACiAKICNkZWZpbmUgY3B1X2lzX3B4YTkzMCgpCQkJCQlcCiAJKHsJCQkJCQlcCi0JCXVuc2lnbmVkIGludCBpZCA9IHJlYWRfY3B1aWQoQ1BVSURfSUQpOwlcCi0JCV9fY3B1X2lzX3B4YTkzMChpZCk7CQkJXAorCQlfX2NwdV9pc19weGE5MzAocmVhZF9jcHVpZF9pZCgpKTsJXAogCSB9KQogCiAjZGVmaW5lIGNwdV9pc19weGE5MzUoKQkJCQkJXAogCSh7CQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgaWQgPSByZWFkX2NwdWlkKENQVUlEX0lEKTsJXAotCQlfX2NwdV9pc19weGE5MzUoaWQpOwkJCVwKKwkJX19jcHVfaXNfcHhhOTM1KHJlYWRfY3B1aWRfaWQoKSk7CVwKIAkgfSkKIAogI2RlZmluZSBjcHVfaXNfcHhhOTUwKCkJCQkJCVwKIAkoewkJCQkJCVwKLQkJdW5zaWduZWQgaW50IGlkID0gcmVhZF9jcHVpZChDUFVJRF9JRCk7CVwKLQkJX19jcHVfaXNfcHhhOTUwKGlkKTsJCQlcCisJCV9fY3B1X2lzX3B4YTk1MChyZWFkX2NwdWlkX2lkKCkpOwlcCiAJIH0pCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3p5bG9uaXRlLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvenlsb25pdGUuaAppbmRleCBiZjY3ODVhLi45ZWRmNjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvenlsb25pdGUuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvenlsb25pdGUuaApAQCAtOCwxMyArOCw2IEBACiAvKiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgcHJvY2Vzc29yIHNwZWNpZmljIGFuZCBpbml0aWFsaXplZAogICogYnkgdGhlIGNvcnJlc3BvbmRpbmcgenlsb25pdGVfcHhhM3h4X2luaXQoKQogICovCi1zdHJ1Y3QgcGxhdGZvcm1fbW1jX3Nsb3QgewotCWludCBncGlvX2NkOwotCWludCBncGlvX3dwOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9tbWNfc2xvdCB6eWxvbml0ZV9tbWNfc2xvdFtdOwotCiBleHRlcm4gaW50IGdwaW9fZXRoX2lycTsKIGV4dGVybiBpbnQgZ3Bpb19kZWJ1Z19sZWQxOwogZXh0ZXJuIGludCBncGlvX2RlYnVnX2xlZDI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCmluZGV4IGYyOGMxNzEuLmZhNTI3YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jCkBAIC0xMTAsNiArMTEwLDEyIEBACiAJR1BJTzdfTU1DMV9DTEssCiAJR1BJTzhfTU1DMV9DTUQsCiAJR1BJTzE1X0dQSU8sIC8qIGNhcmQgZGV0ZWN0ICovCisKKwkvKiBVQVJUMyAqLworCUdQSU8xMDdfVUFSVDNfQ1RTLAorCUdQSU8xMDhfVUFSVDNfUlRTLAorCUdQSU8xMDlfVUFSVDNfVFhELAorCUdQSU8xMTBfVUFSVDNfUlhELAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCA4YTM4ZDYwLi4xODlmMzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbWFnaWNpYW5fYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3N0YXRpYyBpbnQgbWFnaWNpYW5fYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKQogewogCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKIAlpZiAoYnJpZ2h0bmVzcyA+PSAyMDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKaW5kZXggNTkxNDAyMS4uZTEwMGFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGFsbWxkX2JhY2tsaWdodF9ub3RpZnkoaW50IGJyaWdodG5lc3MpCitzdGF0aWMgaW50IHBhbG1sZF9iYWNrbGlnaHRfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCiB7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsIGJyaWdodG5lc3MpOwogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUiwgYnJpZ2h0bmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCmluZGV4IDdmODljYTIuLjhmZTNlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBhbG10NV9iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQorc3RhdGljIGludCBwYWxtdDVfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKQogewogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKIAlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIsIGJyaWdodG5lc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwppbmRleCAzMDg0MTc1Li5iOTkyZjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwYWxtdGNfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3N0YXRpYyBpbnQgcGFsbXRjX2JhY2tsaWdodF9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcykKIHsKIAkvKiBiYWNrbGlnaHQgaXMgb24gd2hlbiBHUElPMTYgQUYwIGlzIGhpZ2ggKi8KIAlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKaW5kZXggMjY1ZDYyYi4uZGM3MjhkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwYWxtdGUyX2JhY2tsaWdodF9ub3RpZnkoaW50IGJyaWdodG5lc3MpCitzdGF0aWMgaW50IHBhbG10ZTJfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKQogewogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRFMl9CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVEUyX0xDRF9QT1dFUiwgYnJpZ2h0bmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYwppbmRleCA2MDZlYjdlLi5iNDMzYmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHJlb19iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQorc3RhdGljIGludCB0cmVvX2JhY2tsaWdodF9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcykKIHsKIAlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU9fQkxfUE9XRVIsIGJyaWdodG5lc3MpOwogCXJldHVybiBUUkVPX01BWF9JTlRFTlNJVFkgLSBicmlnaHRuZXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwppbmRleCA3YmYxOGMyLi5iMzdhMDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwYWxtdHhfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3N0YXRpYyBpbnQgcGFsbXR4X2JhY2tsaWdodF9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcykKIHsKIAlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfTENEX1BPV0VSLCBicmlnaHRuZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwppbmRleCBkNzg3YWM3Li4xYzVkNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBhbG16NzJfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3N0YXRpYyBpbnQgcGFsbXo3Ml9iYWNrbGlnaHRfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCiB7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKIAlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1aNzJfTENEX1BPV0VSLCBicmlnaHRuZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggZTVlZWIzYS4uYzJiOTM4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCS5pbml0IAkJCT0gcG9vZGxlX21jaV9pbml0LAogCS5zZXRwb3dlciAJCT0gcG9vZGxlX21jaV9zZXRwb3dlciwKIAkuZXhpdAkJCT0gcG9vZGxlX21jaV9leGl0LAotCS5ncGlvX2NhcmRfZGV0ZWN0CT0gUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBQT09ETEVfR1BJT19uU0RfREVURUNULAogCS5ncGlvX2NhcmRfcm8JCT0gUE9PRExFX0dQSU9fblNEX1dQLAogCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDRiNTBmMTQuLjI4MzUyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMzg5LDEzICszODksMTMgQEAKIAkJLnR5cGUJPSBFVl9TVywKIAkJLmNvZGUJPSAwLAogCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dBLAotCQkuZGVzYwk9ICLvu79EaXNwbGF5IERvd24iLAorCQkuZGVzYwk9ICJEaXNwbGF5IERvd24iLAogCX0sCiAJewogCQkudHlwZQk9IEVWX1NXLAogCQkuY29kZQk9IDEsCiAJCS5ncGlvCT0gU1BJVFpfR1BJT19TV0IsCi0JCS5kZXNjCT0gIu+7v0xpZCBDbG9zZWQiLAorCQkuZGVzYwk9ICJMaWQgQ2xvc2VkIiwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKaW5kZXggNTM1MmI0ZS4uODlmMjU4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCkBAIC0zNzksNyArMzc5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZpcGVyX2JhY2tsaWdodF9ub3RpZnkoaW50IGJyaWdodG5lc3MpCitzdGF0aWMgaW50IHZpcGVyX2JhY2tsaWdodF9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcykKIHsKIAlncGlvX3NldF92YWx1ZShWSVBFUl9MQ0RfRU5fR1BJTywgISFicmlnaHRuZXNzKTsKIAlncGlvX3NldF92YWx1ZShWSVBFUl9CQ0tMSUdIVF9FTl9HUElPLCAhIWJyaWdodG5lc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCmluZGV4IDViOTg2YTguLjc1ZjJhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CisjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC02MjYsOCArNjI3LDI3IEBACiAJcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKIH0KIAotaW50IHpldXNfZ2V0X3BjYl9pbmZvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGdwaW8sCi0JCSAgICAgIHVuc2lnbmVkIG5ncGlvLCB2b2lkICpjb250ZXh0KQorI2lmZGVmIENPTkZJR19BUE1fRU1VTEFUSU9OCitzdGF0aWMgdm9pZCB6ZXVzX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGFwbV9wb3dlcl9pbmZvICppbmZvKQoreworCS8qIFBvd2VyIHN1cHBseSBpcyBhbHdheXMgcHJlc2VudCAqLworCWluZm8tPmFjX2xpbmVfc3RhdHVzCT0gQVBNX0FDX09OTElORTsKKwlpbmZvLT5iYXR0ZXJ5X3N0YXR1cwk9IEFQTV9CQVRURVJZX1NUQVRVU19OT1RfUFJFU0VOVDsKKwlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSBBUE1fQkFUVEVSWV9GTEFHX05PVF9QUkVTRU5UOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgemV1c19zZXR1cF9hcG0odm9pZCkKK3sKKwlhcG1fZ2V0X3Bvd2VyX3N0YXR1cyA9IHpldXNfZ2V0X3Bvd2VyX3N0YXR1czsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgemV1c19zZXR1cF9hcG0odm9pZCkKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHpldXNfZ2V0X3BjYl9pbmZvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgIHVuc2lnbmVkIG5ncGlvLCB2b2lkICpjb250ZXh0KQogewogCWludCBpOwogCXU4IHBjYl9pbmZvID0gMDsKQEAgLTcyNiw5ICs3NDYsMTggQEAKIAlHUElPOTlfR1BJTywJCS8qIENGIFJEWSAqLwogfTsKIAorLyoKKyAqIERNOWsgTVNDeCBzZXR0aW5nczoJU1JBTSwgMTYgYml0cworICoJCQkxNyBjeWNsZXMgZGVsYXkgZmlyc3QgYWNjZXNzCisgKgkJCSA1IGN5Y2xlcyBkZWxheSBuZXh0IGFjY2VzcworICoJCQkxMyBjeWNsZXMgcmVjb3ZlcnkgdGltZQorICoJCQlmYXN0ZXIgZGV2aWNlCisgKi8KKyNkZWZpbmUgRE05S19NU0NfVkFMVUUJCTB4ZTRjOQorCiBzdGF0aWMgdm9pZCBfX2luaXQgemV1c19pbml0KHZvaWQpCiB7Ci0JdTE2IGRtOTAwMF9tc2MgPSAweGUyNzk7CisJdTE2IGRtOTAwMF9tc2MgPSBETTlLX01TQ19WQUxVRTsKIAogCXN5c3RlbV9yZXYgPSBfX3Jhd19yZWFkdyhaRVVTX0NQTERfVkVSU0lPTik7CiAJcHJfaW5mbygiWmV1cyBDUExEIFYlZEklZFxuIiwgKHN5c3RlbV9yZXYgJiAweGYwKSA+PiA0LCAoc3lzdGVtX3JldiAmIDB4MGYpKTsKQEAgLTczOCw2ICs3NjcsNyBAQAogCU1TQzEgPSAoTVNDMSAmIDB4ZmZmZjAwMDApIHwgZG05MDAwX21zYzsKIAogCXBtX3Bvd2VyX29mZiA9IHpldXNfcG93ZXJfb2ZmOworCXpldXNfc2V0dXBfYXBtKCk7CiAKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh6ZXVzX3Bpbl9jb25maWcpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKaW5kZXggYjY2ZTllMi4uMmI0MDQzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCkBAIC0zNiw5ICszNiw2IEBACiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotI2RlZmluZSBNQVhfU0xPVFMJMwotc3RydWN0IHBsYXRmb3JtX21tY19zbG90IHp5bG9uaXRlX21tY19zbG90W01BWF9TTE9UU107Ci0KIGludCBncGlvX2V0aF9pcnE7CiBpbnQgZ3Bpb19kZWJ1Z19sZWQxOwogaW50IGdwaW9fZGVidWdfbGVkMjsKQEAgLTIyMCw4NCArMjE3LDI4IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01NQykKLXN0YXRpYyBpbnQgenlsb25pdGVfbWNpX3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0KLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoenlsb25pdGVfbW1jX3Nsb3RbcGRldi0+aWRdLmdwaW9fd3ApOwotfQotCi1zdGF0aWMgaW50IHp5bG9uaXRlX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgaXJxX2hhbmRsZXJfdCB6eWxvbml0ZV9kZXRlY3RfaW50LAotCQkJICAgICB2b2lkICpkYXRhKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlpbnQgZXJyLCBjZF9pcnEsIGdwaW9fY2QsIGdwaW9fd3A7Ci0KLQljZF9pcnEgPSBncGlvX3RvX2lycSh6eWxvbml0ZV9tbWNfc2xvdFtwZGV2LT5pZF0uZ3Bpb19jZCk7Ci0JZ3Bpb19jZCA9IHp5bG9uaXRlX21tY19zbG90W3BkZXYtPmlkXS5ncGlvX2NkOwotCWdwaW9fd3AgPSB6eWxvbml0ZV9tbWNfc2xvdFtwZGV2LT5pZF0uZ3Bpb193cDsKLQotCS8qCi0JICogc2V0dXAgR1BJTyBmb3IgWnlsb25pdGUgTU1DIGNvbnRyb2xsZXIKLQkgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19jZCwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19jZCk7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb193cCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3dwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGNkX2lycSwgenlsb25pdGVfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNTUMvU0QvU0RJTzogIgotCQkJCSJjYW4ndCByZXF1ZXN0IGNhcmQgZGV0ZWN0IElSUVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3JlcXVlc3RfaXJxOgotCWdwaW9fZnJlZShncGlvX3dwKTsKLWVycl9yZXF1ZXN0X3dwOgotCWdwaW9fZnJlZShncGlvX2NkKTsKLWVycl9yZXF1ZXN0X2NkOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHp5bG9uaXRlX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JaW50IGNkX2lycSwgZ3Bpb19jZCwgZ3Bpb193cDsKLQotCWNkX2lycSA9IGdwaW9fdG9faXJxKHp5bG9uaXRlX21tY19zbG90W3BkZXYtPmlkXS5ncGlvX2NkKTsKLQlncGlvX2NkID0genlsb25pdGVfbW1jX3Nsb3RbcGRldi0+aWRdLmdwaW9fY2Q7Ci0JZ3Bpb193cCA9IHp5bG9uaXRlX21tY19zbG90W3BkZXYtPmlkXS5ncGlvX3dwOwotCi0JZnJlZV9pcnEoY2RfaXJxLCBkYXRhKTsKLQlncGlvX2ZyZWUoZ3Bpb19jZCk7Ci0JZ3Bpb19mcmVlKGdwaW9fd3ApOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaV9wbGF0Zm9ybV9kYXRhID0gewogCS5kZXRlY3RfZGVsYXkJPSAyMCwKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHp5bG9uaXRlX21jaV9pbml0LAotCS5leGl0CQk9IHp5bG9uaXRlX21jaV9leGl0LAotCS5nZXRfcm8JCT0genlsb25pdGVfbWNpX3JvLAotCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCi0JLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gRVhUX0dQSU8oMCksCisJLmdwaW9fY2FyZF9ybwk9IEVYVF9HUElPKDIpLAogCS5ncGlvX3Bvd2VyCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKIAkuZGV0ZWN0X2RlbGF5CT0gMjAsCiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gRVhUX0dQSU8oMSksCisJLmdwaW9fY2FyZF9ybwk9IEVYVF9HUElPKDMpLAorCS5ncGlvX3Bvd2VyCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZGV0ZWN0X2RlbGF5CT0gMjAsCisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gRVhUX0dQSU8oMzApLAorCS5ncGlvX2NhcmRfcm8JPSBFWFRfR1BJTygzMSksCisJLmdwaW9fcG93ZXIJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB6eWxvbml0ZV9pbml0X21tYyh2b2lkKQpAQCAtMzA1LDcgKzI0Niw3IEBACiAJcHhhX3NldF9tY2lfaW5mbygmenlsb25pdGVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YTN4eF9zZXRfbWNpMl9pbmZvKCZ6eWxvbml0ZV9tY2kyX3BsYXRmb3JtX2RhdGEpOwogCWlmIChjcHVfaXNfcHhhMzEwKCkpCi0JCXB4YTN4eF9zZXRfbWNpM19pbmZvKCZ6eWxvbml0ZV9tY2lfcGxhdGZvcm1fZGF0YSk7CisJCXB4YTN4eF9zZXRfbWNpM19pbmZvKCZ6eWxvbml0ZV9tY2kzX3BsYXRmb3JtX2RhdGEpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB6eWxvbml0ZV9pbml0X21tYyh2b2lkKSB7fQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwppbmRleCA4NDA5NTQ0Li4zYWE3M2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwpAQCAtMTI5LDggKzEyOSw4IEBACiAJR1BJTzIyX0kyQ19TREEsCiAKIAkvKiBHUElPICovCi0JR1BJTzE4X0dQSU8sCS8qIEdQSU8gRXhwYW5kZXIgIzAgSU5UX04gKi8KLQlHUElPMTlfR1BJTywJLyogR1BJTyBFeHBhbmRlciAjMSBJTlRfTiAqLworCUdQSU8xOF9HUElPIHwgTUZQX1BVTExfSElHSCwJLyogR1BJTyBFeHBhbmRlciAjMCBJTlRfTiAqLworCUdQSU8xOV9HUElPIHwgTUZQX1BVTExfSElHSCwJLyogR1BJTyBFeHBhbmRlciAjMSBJTlRfTiAqLwogfTsKIAogc3RhdGljIG1mcF9jZmdfdCBweGEzMDBfbWZwX2NmZ1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNTgsMTAgKzI1OCw2IEBACiAJCS8qIGRldGVjdCBMQ0QgcGFuZWwgKi8KIAkJenlsb25pdGVfZGV0ZWN0X2xjZF9wYW5lbCgpOwogCi0JCS8qIE1NQyBjYXJkIGRldGVjdCAmIHdyaXRlIHByb3RlY3QgZm9yIGNvbnRyb2xsZXIgMCAqLwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX2NkICA9IEVYVF9HUElPKDApOwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX3dwICA9IEVYVF9HUElPKDIpOwotCiAJCS8qIFdNOTcxMyBJUlEgKi8KIAkJd205NzEzX2lycSA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzI2KTsKIApAQCAtMjc2LDEwICsyNzIsNiBAQAogCWlmIChjcHVfaXNfcHhhMzEwKCkpIHsKIAkJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocHhhMzEwX21mcF9jZmcpKTsKIAkJZ3Bpb19ldGhfaXJxID0gbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPMTAyKTsKLQotCQkvKiBNTUMgY2FyZCBkZXRlY3QgJiB3cml0ZSBwcm90ZWN0IGZvciBjb250cm9sbGVyIDIgKi8KLQkJenlsb25pdGVfbW1jX3Nsb3RbMl0uZ3Bpb19jZCA9IEVYVF9HUElPKDMwKTsKLQkJenlsb25pdGVfbW1jX3Nsb3RbMl0uZ3Bpb193cCA9IEVYVF9HUElPKDMxKTsKIAl9CiAKIAkvKiBHUElPcyBmb3IgRGVidWcgTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwppbmRleCA2MGQwOGYyLi45OTQyYmFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwpAQCAtMjA5LDEwICsyMDksNiBAQAogCQlncGlvX2RlYnVnX2xlZDEJPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xXzIpOwogCQlncGlvX2RlYnVnX2xlZDIJPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU80XzIpOwogCi0JCS8qIE1NQyBjYXJkIGRldGVjdCAmIHdyaXRlIHByb3RlY3QgZm9yIGNvbnRyb2xsZXIgMCAqLwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX2NkICA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzEpOwotCQl6eWxvbml0ZV9tbWNfc2xvdFswXS5ncGlvX3dwICA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzUpOwotCiAJCS8qIFdNOTcxMyBJUlEgKi8KIAkJd205NzEzX2lycSA9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzE1KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCmluZGV4IDM0YjgwYjcuLjJmNWNjYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCkBAIC03NCw4ICs3NCw4IEBACiAjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9MMjIwX0JBU0UJCTB4MTAxMTAwMDAgLyogTDIyMCByZWdpc3RlcnMgKi8KIAogLyoKLSAqIENvbnRyb2wgcmVnaXN0ZXIgU1lTX1JFU0VUQ1RMIGlzIHNldCB0byAxIHRvIGZvcmNlIGEgc29mdCByZXNldAorICogQ29udHJvbCByZWdpc3RlciBTWVNfUkVTRVRDVEwgQml0IDggaXMgc2V0IHRvIDEgdG8gZm9yY2UgYSBzb2Z0IHJlc2V0CiAgKi8KLSNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCAgICAweDAxMDAKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NZU19TT0ZUX1JFU0VUICAgIDB4MDEwMAogCiAjZW5kaWYJLyogX19BU01fQVJDSF9CT0FSRF9QQjExNzZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggNGY0NmJmNy4uODZjMGM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCkBAIC0xNDAsNyArMTQwLDcgQEAKICAqICAgICBTWVNfQ0xELCBTWVNfQk9PVENTCiAgKi8KICNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tfTE9DS0VEICAgICgxIDw8IDE2KQotI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4QTA1RgkgICAgICAgLyogRW5hYmxlIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS19WQUwJMHhBMDVGCSAgICAgICAvKiBFbmFibGUgd3JpdGUgYWNjZXNzICovCiAKIC8qCiAgKiBSRUFMVklFV19TWVNfRkxBU0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCA5MTdmOGNhLi43ZDg1N2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0zODEsNiArMzgxLDIwIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfZWJfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X2ViX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlc2V0X2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX1JFU0VUQ1RMKTsKKwl2b2lkIF9faW9tZW0gKmxvY2tfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfTE9DSyk7CisKKwkvKgorCSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyCisJICogaW4gdGhlIHN5c3RlbSBGUEdBCisJICovCisJX19yYXdfd3JpdGVsKFJFQUxWSUVXX1NZU19MT0NLX1ZBTCwgbG9ja19jdHJsKTsKKwlpZiAoY29yZV90aWxlX2ViMTFtcCgpKQorCQlfX3Jhd193cml0ZWwoMHgwMDA4LCByZXNldF9jdHJsKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X2ViX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTQwOCw2ICs0MjIsNyBAQAogI2lmZGVmIENPTkZJR19MRURTCiAJbGVkc19ldmVudCA9IHJlYWx2aWV3X2xlZHNfZXZlbnQ7CiAjZW5kaWYKKwlyZWFsdmlld19yZXNldCA9IHJlYWx2aWV3X2ViX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX0VCLCAiQVJNLVJlYWxWaWV3IEVCIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCmluZGV4IDdmYjcyNmQuLjQ0MzkyZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwpAQCAtMjkyLDEyICsyOTIsMTAgQEAKIAogc3RhdGljIHZvaWQgcmVhbHZpZXdfcGIxMTc2X3Jlc2V0KGNoYXIgbW9kZSkKIHsKLQl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCVJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7Ci0Jdm9pZCBfX2lvbWVtICpyc3RfaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKLQkJUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VUOwotCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLLCByc3RfaGRyX2N0cmwpOwotCV9fcmF3X3dyaXRlbChSRUFMVklFV19QQjExNzZfU1lTX0xPQ0tWQUxfUlNUQ1RMLCBoZHJfY3RybCk7CisJdm9pZCBfX2lvbWVtICpyZXNldF9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19SRVNFVENUTCk7CisJdm9pZCBfX2lvbWVtICpsb2NrX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spOworCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS19WQUwsIGxvY2tfY3RybCk7CisJX19yYXdfd3JpdGVsKFJFQUxWSUVXX1BCMTE3Nl9TWVNfU09GVF9SRVNFVCwgcmVzZXRfY3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IDliYmJmYzAuLjNlMDI3MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMzAxLDE3ICszMDEsMTYgQEAKIAogc3RhdGljIHZvaWQgcmVhbHZpZXdfcGIxMW1wX3Jlc2V0KGNoYXIgbW9kZSkKIHsKLQl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCVJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKKwl2b2lkIF9faW9tZW0gKnJlc2V0X2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX1JFU0VUQ1RMKTsKKwl2b2lkIF9faW9tZW0gKmxvY2tfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfTE9DSyk7CiAKIAkvKgogCSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyCiAJICogaW4gdGhlIHN5c3RlbSBGUEdBCiAJICovCi0JdmFsID0gX19yYXdfcmVhZGwoaGRyX2N0cmwpOwotCXZhbCB8PSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSOwotCV9fcmF3X3dyaXRlbCh2YWwsIGhkcl9jdHJsKTsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfU1lTX0xPQ0tfVkFMLCBsb2NrX2N0cmwpOworCV9fcmF3X3dyaXRlbCgweDAwMDAsIHJlc2V0X2N0cmwpOworCV9fcmF3X3dyaXRlbCgweDAwMDQsIHJlc2V0X2N0cmwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMW1wX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKaW5kZXggZmU4NjFlOS4uZmU0ZTI1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKQEAgLTI3Miw2ICsyNzIsMjAgQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYmE4X3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYmE4X3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlc2V0X2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX1JFU0VUQ1RMKTsKKwl2b2lkIF9faW9tZW0gKmxvY2tfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfTE9DSyk7CisKKwkvKgorCSAqIFRvIHJlc2V0LCB3ZSBoaXQgdGhlIG9uLWJvYXJkIHJlc2V0IHJlZ2lzdGVyCisJICogaW4gdGhlIHN5c3RlbSBGUEdBCisJICovCisJX19yYXdfd3JpdGVsKFJFQUxWSUVXX1NZU19MT0NLX1ZBTCwgbG9ja19jdHJsKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwLCByZXNldF9jdHJsKTsKKwlfX3Jhd193cml0ZWwoMHgwMDA0LCByZXNldF9jdHJsKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiYThfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMjkxLDYgKzMwNSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGJhOF9yZXNldDsKIH0KIAogTUFDSElORV9TVEFSVChSRUFMVklFV19QQkE4LCAiQVJNLVJlYWxWaWV3IFBCLUE4IikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCmluZGV4IGVjMzk0ODguLmEyMWE0YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwpAQCAtMzI0LDYgKzMyNCwyMCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BieF9yZXNldChjaGFyIG1vZGUpCit7CisJdm9pZCBfX2lvbWVtICpyZXNldF9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19SRVNFVENUTCk7CisJdm9pZCBfX2lvbWVtICpsb2NrX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCV9fcmF3X3dyaXRlbChSRUFMVklFV19TWVNfTE9DS19WQUwsIGxvY2tfY3RybCk7CisJX19yYXdfd3JpdGVsKDB4MDAwMCwgcmVzZXRfY3RybCk7CisJX19yYXdfd3JpdGVsKDB4MDAwNCwgcmVzZXRfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYnhfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzU4LDYgKzM3Miw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGJ4X3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCWCwgIkFSTS1SZWFsVmlldyBQQlgiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKaW5kZXggMTkzYjM5ZC4uNGQ5NTg4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCkBAIC0xOCw2ICsxOCw4IEBACiAJdW5zaWduZWQgaW50CQkgbnVtX2NzOwkvKiB0b3RhbCBjaGlwc2VsZWN0cyAqLwogCWludAkJCSBidXNfbnVtOyAgICAgICAvKiBidXMgbnVtYmVyIHRvIHVzZS4gKi8KIAorCXVuc2lnbmVkIGludAkJIHVzZV9maXE6MTsJLyogdXNlIGZpcSAqLworCiAJdm9pZCAoKmdwaW9fc2V0dXApKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBlbmFibGUpOwogCXZvaWQgKCpzZXRfY3MpKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbCk7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC90cy5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC90cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMzYxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RzLmgKQEAgLTAsMCArMSwyMSBAQAorLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3RzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fVFNfSAorI2RlZmluZSBfX0FTTV9BUk1fVFNfSAorCitzdHJ1Y3QgczNjMjQxMF90c19tYWNoX2luZm8geworICAgICAgIGludCAgICAgICAgICAgICBkZWxheTsKKyAgICAgICBpbnQgICAgICAgICAgICAgcHJlc2M7CisgICAgICAgaW50ICAgICAgICAgICAgIG92ZXJzYW1wbGluZ19zaGlmdDsKK307CisKK2V4dGVybiB2b2lkIHMzYzI0eHhfdHNfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyAqKTsKKworI2VuZGlmIC8qIF9fQVNNX0FSTV9UU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggNGM3OWFjOC4uOTcxNjJmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtMjc5LDYgKzI3OSw3IEBACiAJCS5uYW1lCQk9ICJTbWFydE1lZGlhIiwKIAkJLm5yX2NoaXBzCT0gMSwKIAkJLm5yX21hcAkJPSBzbWFydG1lZGlhX21hcCwKKwkJLm9wdGlvbnMgICAgICAgID0gTkFORF9TQ0FOX1NJTEVOVF9OT0RFViwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQpLAogCQkucGFydGl0aW9ucwk9IGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQsCiAJfSwKQEAgLTI5Myw2ICsyOTQsNyBAQAogCQkubmFtZQkJPSAiY2hpcDEiLAogCQkubnJfY2hpcHMJPSAxLAogCQkubnJfbWFwCQk9IGNoaXAxX21hcCwKKwkJLm9wdGlvbnMgICAgICAgID0gTkFORF9TQ0FOX1NJTEVOVF9OT0RFViwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQpLAogCQkucGFydGl0aW9ucwk9IGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQsCiAJfSwKQEAgLTMwMCw2ICszMDIsNyBAQAogCQkubmFtZQkJPSAiY2hpcDIiLAogCQkubnJfY2hpcHMJPSAxLAogCQkubnJfbWFwCQk9IGNoaXAyX21hcCwKKwkJLm9wdGlvbnMgICAgICAgID0gTkFORF9TQ0FOX1NJTEVOVF9OT0RFViwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQpLAogCQkucGFydGl0aW9ucwk9IGJhc3RfZGVmYXVsdF9uYW5kX3BhcnQsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKaW5kZXggNDkwNTMyNS4uMWUzNGFiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bWFjaC9oMTk0MC5oPgogI2luY2x1ZGUgPG1hY2gvaDE5NDAtbGF0Y2guaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CisjaW5jbHVkZSA8bWFjaC90cy5oPgogI2luY2x1ZGUgPHBsYXQvdWRjLmg+CiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KIApAQCAtMTQwLDYgKzE0MSwxMSBAQAogCS52YnVzX3Bpbl9pbnZlcnRlZAk9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdHNfbWFjaF9pbmZvIGgxOTQwX3RzX2NmZyBfX2luaXRkYXRhID0geworCQkuZGVsYXkgPSAxMDAwMCwKKwkJLnByZXNjID0gNDksCisJCS5vdmVyc2FtcGxpbmdfc2hpZnQgPSAyLAorfTsKIAogLyoqCiAgKiBTZXQgbGNkIG9uIG9yIG9mZgpAQCAtMjY1LDYgKzI3MSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDE5NDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfdHMsCiAJJnMzY19kZXZpY2VfdXNiLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCkBAIC0zMDUsNiArMzEyLDcgQEAKIAogCXMzYzI0eHhfZmJfc2V0X3BsYXRkYXRhKCZoMTk0MF9mYl9pbmZvKTsKICAJczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKCZoMTk0MF91ZGNfY2ZnKTsKKwlzM2MyNHh4X3RzX3NldF9wbGF0ZGF0YSgmaDE5NDBfdHNfY2ZnKTsKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAKIAlzM2NfZGV2aWNlX3NkaS5kZXYucGxhdGZvcm1fZGF0YSA9ICZoMTk0MF9tbWNfY2ZnOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwppbmRleCAwMTVkZmIyLi5mMzUzNzFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCS5uYW1lCQk9ICJFeHRlcm5hbCIsCiAJCS5ucl9jaGlwcwk9IDEsCiAJCS5ucl9tYXAJCT0gZXh0ZXJuYWxfbWFwLAorCQkub3B0aW9ucwk9IE5BTkRfU0NBTl9TSUxFTlRfTk9ERVYsCiAJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAogCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCwKIAl9LApAQCAtMjIyLDYgKzIyMyw3IEBACiAJCS5uYW1lCQk9ICJjaGlwMSIsCiAJCS5ucl9jaGlwcwk9IDEsCiAJCS5ucl9tYXAJCT0gY2hpcDFfbWFwLAorCQkub3B0aW9ucwk9IE5BTkRfU0NBTl9TSUxFTlRfTk9ERVYsCiAJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAogCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCmluZGV4IDkyMWNlZjkuLjIwZGMwYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKQEAgLTk2LDYgKzk2LDcgQEAKIAogc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IG51YzkwMF91YXJ0X2RhdGFbXSA9IHsKIAlOVUM5MDBfODI1MFBPUlQoVUFSVDApLAorCXt9LAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfc2VyaWFsX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYwppbmRleCA1MWYxN2I3Li5lYzcxMWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAogLyogU1BJIGRldmljZSAqLwogCi1zdGF0aWMgc3RydWN0IHc5MHA5MTBfc3BpX2luZm8gbnVjOTAwX3NwaWZsYXNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG51YzkwMF9zcGlfaW5mbyBudWM5MDBfc3BpZmxhc2hfZGF0YSA9IHsKIAkubnVtX2NzCQk9IDEsCiAJLmxzYgkJPSAwLAogCS50eG5lZwkJPSAxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggOTQwNjQwMC4uY2UyMjhiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNSw3ICsxNSwxNSBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy10aW1lci5oPgorCisjZGVmaW5lCVdUQ1IJKFRNUl9CQSArIDB4MUMpCisjZGVmaW5lCVdUQ0xLCSgxIDw8IDEwKQorI2RlZmluZQlXVEUJKDEgPDwgNykKKyNkZWZpbmUJV1RSRQkoMSA8PCAxKQogCiBzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKQEAgLTIzLDYgKzMxLDExIEBACiAKIHN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7Ci0JY3B1X3Jlc2V0KDApOworCWlmIChtb2RlID09ICdzJykgeworCQkvKiBKdW1wIGludG8gUk9NIGF0IGFkZHJlc3MgMCAqLworCQljcHVfcmVzZXQoMCk7CisJfSBlbHNlIHsKKwkJX19yYXdfd3JpdGVsKFdURSB8IFdUUkUgfCBXVENMSywgV1RDUik7CisJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDA1MGQ5ZmUuLjU2ZjFhNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0yMiwxMSArMjIsMjEgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KIAogI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKIAorI2RlZmluZSBUWF9ET05FCShVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKK3N0YXRpYyB2b2xhdGlsZSB1MzIgKiB1YXJ0X2Jhc2UgPSAodTMyICopVUFSVDBfUEE7CisKIHN0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQogeworCS8qIENoZWNrIFRIUkUgYW5kIFRFTVQgYml0cyBiZWZvcmUgd2UgdHJhbnNtaXQgdGhlIGNoYXJhY3Rlci4KKwkgKi8KKwl3aGlsZSAoKHVhcnRfYmFzZVtVQVJUX0xTUl0gJiBUWF9ET05FKSAhPSBUWF9ET05FKQorCQliYXJyaWVyKCk7CisKKwkqdWFydF9iYXNlID0gY2g7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMKaW5kZXggNDEyOGFmOC4uYjgwZjc2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCkBAIC00Miw3ICs0MiwxMCBAQAogI2RlZmluZSBUSUNLU19QRVJfU0VDCTEwMAogI2RlZmluZSBQUkVTQ0FMRQkweDYzIC8qIERpdmlkZXIgPSBwcmVzY2FsZSArIDEgKi8KIAotdW5zaWduZWQgaW50IHRpbWVyMF9sb2FkOworI2RlZmluZQlURFJfU0hJRlQJMjQKKyNkZWZpbmUJVERSX01BU0sJKCgxIDw8IFREUl9TSElGVCkgLSAxKQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVyMF9sb2FkOwogCiBzdGF0aWMgdm9pZCBudWM5MDBfY2xvY2tldmVudF9zZXRtb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGspCkBAIC04OCw3ICs5MSw3IEBACiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBudWM5MDBfY2xvY2tldmVudF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm51YzkwMC10aW1lcjAiLAogCS5zaGlmdAkJPSAzMiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5zZXRfbW9kZQk9IG51YzkwMF9jbG9ja2V2ZW50X3NldG1vZGUsCiAJLnNldF9uZXh0X2V2ZW50CT0gbnVjOTAwX2Nsb2NrZXZlbnRfc2V0bmV4dGV2ZW50LAogCS5yYXRpbmcJCT0gMzAwLApAQCAtMTEyLDggKzExNSwyMyBAQAogCS5oYW5kbGVyCT0gbnVjOTAwX3RpbWVyMF9pbnRlcnJ1cHQsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbnVjOTAwX2Nsb2NrZXZlbnRzX2luaXQodW5zaWduZWQgaW50IHJhdGUpCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTAwX2Nsb2NrZXZlbnRzX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lcjAiKTsKKworCUJVR19PTihJU19FUlIoY2xrKSk7CisKKwlfX3Jhd193cml0ZWwoMHgwMCwgUkVHX1RDU1IwKTsKKworCWNsa19lbmFibGUoY2xrKTsKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsaykgLyAoUFJFU0NBTEUgKyAxKTsKKworCXRpbWVyMF9sb2FkID0gKHJhdGUgLyBUSUNLU19QRVJfU0VDKTsKKworCV9fcmF3X3dyaXRlbChSRVNFVElOVCwgUkVHX1RJU1IpOworCXNldHVwX2lycShJUlFfVElNRVIwLCAmbnVjOTAwX3RpbWVyMF9pcnEpOworCiAJbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlLm11bHQgPSBkaXZfc2MocmF0ZSwgTlNFQ19QRVJfU0VDLAogCQkJCQludWM5MDBfY2xvY2tldmVudF9kZXZpY2Uuc2hpZnQpOwogCW51YzkwMF9jbG9ja2V2ZW50X2RldmljZS5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmYsCkBAIC0xMjcsMjYgKzE0NSwzNSBAQAogCiBzdGF0aWMgY3ljbGVfdCBudWM5MDBfZ2V0X2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewotCXJldHVybiB+X19yYXdfcmVhZGwoUkVHX1REUjEpOworCXJldHVybiAofl9fcmF3X3JlYWRsKFJFR19URFIxKSkgJiBURFJfTUFTSzsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9udWM5MDAgPSB7CiAJLm5hbWUJPSAibnVjOTAwLXRpbWVyMSIsCiAJLnJhdGluZwk9IDIwMCwKIAkucmVhZAk9IG51YzkwMF9nZXRfY3ljbGVzLAotCS5tYXNrCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0CT0gMjAsCisJLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKFREUl9TSElGVCksCisJLnNoaWZ0CT0gMTAsCiAJLmZsYWdzCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbnVjOTAwX2Nsb2Nrc291cmNlX2luaXQodW5zaWduZWQgaW50IHJhdGUpCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTAwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGludCByYXRlOworCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoTlVMTCwgInRpbWVyMSIpOworCisJQlVHX09OKElTX0VSUihjbGspKTsKKworCV9fcmF3X3dyaXRlbCgweDAwLCBSRUdfVENTUjEpOworCisJY2xrX2VuYWJsZShjbGspOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIChQUkVTQ0FMRSArIDEpOwogCiAJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIFJFR19USUNSMSk7CiAKIAl2YWwgPSBfX3Jhd19yZWFkbChSRUdfVENTUjEpOwotCXZhbCB8PSAoQ09VTlRFTiB8IFBFUklPRCk7CisJdmFsIHw9IChDT1VOVEVOIHwgUEVSSU9EIHwgUFJFU0NBTEUpOwogCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19UQ1NSMSk7CiAKIAljbG9ja3NvdXJjZV9udWM5MDAubXVsdCA9CkBAIC0xNTYsMjUgKzE4Myw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfdGltZXJfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNrX2V4dCA9IGNsa19nZXQoTlVMTCwgImV4dCIpOwotCXVuc2lnbmVkIGludAlyYXRlOwotCi0JQlVHX09OKElTX0VSUihja19leHQpKTsKLQotCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2tfZXh0KTsKLQljbGtfcHV0KGNrX2V4dCk7Ci0JcmF0ZSA9IHJhdGUgLyAoUFJFU0NBTEUgKyAweDAxKTsKLQotCSAvKiBzZXQgYSBrbm93biBzdGF0ZSAqLwotCV9fcmF3X3dyaXRlbCgweDAwLCBSRUdfVENTUjApOwotCV9fcmF3X3dyaXRlbCgweDAwLCBSRUdfVENTUjEpOwotCV9fcmF3X3dyaXRlbChSRVNFVElOVCwgUkVHX1RJU1IpOwotCXRpbWVyMF9sb2FkID0gKHJhdGUgLyBUSUNLU19QRVJfU0VDKTsKLQotCXNldHVwX2lycShJUlFfVElNRVIwLCAmbnVjOTAwX3RpbWVyMF9pcnEpOwotCi0JbnVjOTAwX2Nsb2Nrc291cmNlX2luaXQocmF0ZSk7Ci0JbnVjOTAwX2Nsb2NrZXZlbnRzX2luaXQocmF0ZSk7CisJbnVjOTAwX2Nsb2Nrc291cmNlX2luaXQoKTsKKwludWM5MDBfY2xvY2tldmVudHNfaW5pdCgpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIG51YzkwMF90aW1lciA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGRkNDY5OGMuLmJhZjYzODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMSw5ICsxLDUgQEAKIGNvbW1lbnQgIlByb2Nlc3NvciBUeXBlIgogCi1jb25maWcgQ1BVXzMyCi0JYm9vbAotCWRlZmF1bHQgeQotCiAjIFNlbGVjdCBDUFUgdHlwZXMgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgc2VsZWN0ZWQuICBUaGlzIHNlbGVjdHMKICMgd2hpY2ggQ1BVcyB3ZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgaW1hZ2UsIGFuZCB0aGUgY29tcGlsZXIgaW5zdHJ1Y3Rpb24KICMgb3B0aW1pc2VyIGJlaGF2aW91ci4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggODI3ZTIzOC4uZThkMzRhODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC0yNyw2ICsyNyw5IEBACiBvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY2KQkrPSBhYm9ydC1ldjYubwogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNykJKz0gYWJvcnQtZXY3Lm8KIAorQUZMQUdTX2Fib3J0LWV2Ni5vCTo9LVdhLC1tYXJjaD1hcm12NmsKK0FGTEFHU19hYm9ydC1ldjcubwk6PS1XYSwtbWFyY2g9YXJtdjctYQorCiBvYmotJChDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWSkJKz0gcGFib3J0LWxlZ2FjeS5vCiBvYmotJChDT05GSUdfQ1BVX1BBQlJUX1Y2KQkrPSBwYWJvcnQtdjYubwogb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9WNykJKz0gcGFib3J0LXY3Lm8KQEAgLTM5LDYgKzQyLDkgQEAKIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjcpCSs9IGNhY2hlLXY3Lm8KIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfRkEpCSs9IGNhY2hlLWZhLm8KIAorQUZMQUdTX2NhY2hlLXY2Lm8JOj0tV2EsLW1hcmNoPWFybXY2CitBRkxBR1NfY2FjaGUtdjcubwk6PS1XYSwtbWFyY2g9YXJtdjctYQorCiBvYmotJChDT05GSUdfQ1BVX0NPUFlfVjMpCSs9IGNvcHlwYWdlLXYzLm8KIG9iai0kKENPTkZJR19DUFVfQ09QWV9WNFdUKQkrPSBjb3B5cGFnZS12NHd0Lm8KIG9iai0kKENPTkZJR19DUFVfQ09QWV9WNFdCKQkrPSBjb3B5cGFnZS12NHdiLm8KQEAgLTU4LDYgKzY0LDkgQEAKIG9iai0kKENPTkZJR19DUFVfVExCX1Y3KQkrPSB0bGItdjcubwogb2JqLSQoQ09ORklHX0NQVV9UTEJfRkEpCSs9IHRsYi1mYS5vCiAKK0FGTEFHU190bGItdjYubwkJOj0tV2EsLW1hcmNoPWFybXY2CitBRkxBR1NfdGxiLXY3Lm8JCTo9LVdhLC1tYXJjaD1hcm12Ny1hCisKIG9iai0kKENPTkZJR19DUFVfQVJNNjEwKQkrPSBwcm9jLWFybTZfNy5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTcxMCkJKz0gcHJvYy1hcm02Xzcubwogb2JqLSQoQ09ORklHX0NQVV9BUk03VERNSSkJKz0gcHJvYy1hcm03dGRtaS5vCkBAIC04NCw2ICs5Myw5IEBACiBvYmotJChDT05GSUdfQ1BVX1Y2KQkJKz0gcHJvYy12Ni5vCiBvYmotJChDT05GSUdfQ1BVX1Y3KQkJKz0gcHJvYy12Ny5vCiAKK0FGTEFHU19wcm9jLXY2Lm8JOj0tV2EsLW1hcmNoPWFybXY2CitBRkxBR1NfcHJvYy12Ny5vCTo9LVdhLC1tYXJjaD1hcm12Ny1hCisKIG9iai0kKENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMikJKz0gY2FjaGUtZmVyb2Nlb24tbDIubwogb2JqLSQoQ09ORklHX0NBQ0hFX0wyWDApCSs9IGNhY2hlLWwyeDAubwogb2JqLSQoQ09ORklHX0NBQ0hFX1hTQzNMMikJKz0gY2FjaGUteHNjM2wyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMgYi9hcmNoL2FybS9tbS9jYWNoZS1mYS5TCmluZGV4IGI2M2E4ZjcuLmE4OTQ0NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwpAQCAtMTI3LDE1ICsxMjcsMTYgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjawogICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCiAgKgotICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCiAgKi8KLUVOVFJZKGZhX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKGZhX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGxpbmUKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMjEzLDcgKzIxNCw3IEBACiAJLmxvbmcJZmFfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWZhX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlmYV9kbWFfaW52X3JhbmdlCiAJLmxvbmcJZmFfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJZmFfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKaW5kZXggNzQ3ZjlhOS4uY2I4ZmM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwpAQCAtMjgsNjkgKzI4LDEyMCBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqbDJ4MF9iYXNlOwogc3RhdGljIERFRklORV9TUElOTE9DSyhsMngwX2xvY2spOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3luY193cml0ZWwodW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIGxvbmcgcmVnLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY29tcGxldGVfbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV93YWl0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQl3cml0ZWwodmFsLCBsMngwX2Jhc2UgKyByZWcpOwogCS8qIHdhaXQgZm9yIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KLQl3aGlsZSAocmVhZGwobDJ4MF9iYXNlICsgcmVnKSAmIGNvbXBsZXRlX21hc2spCisJd2hpbGUgKHJlYWRsKHJlZykgJiBtYXNrKQogCQk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCiB7Ci0Jc3luY193cml0ZWwoMCwgTDJYMF9DQUNIRV9TWU5DLCAxKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJd3JpdGVsKDAsIGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMpOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0FDSEVfU1lOQywgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsMngwX2ludl9hbGwodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJLyogaW52YWxpZGF0ZSBhbGwgd2F5cyAqLwotCXN5bmNfd3JpdGVsKDB4ZmYsIEwyWDBfSU5WX1dBWSwgMHhmZik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmwyeDBfbG9jaywgZmxhZ3MpOworCXdyaXRlbCgweGZmLCBsMngwX2Jhc2UgKyBMMlgwX0lOVl9XQVkpOworCWNhY2hlX3dhaXQobDJ4MF9iYXNlICsgTDJYMF9JTlZfV0FZLCAweGZmKTsKIAljYWNoZV9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGwyeDBfaW52X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKIAlpZiAoc3RhcnQgJiAoQ0FDSEVfTElORV9TSVpFIC0gMSkpIHsKIAkJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKLQkJc3luY193cml0ZWwoc3RhcnQsIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOworCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKKwkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSk7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKIAlpZiAoZW5kICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCQlzeW5jX3dyaXRlbChlbmQsIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOworCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKKwkJd3JpdGVsKGVuZCwgYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEpOwogCX0KIAotCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IENBQ0hFX0xJTkVfU0laRSkKLQkJc3luY193cml0ZWwoYWRkciwgTDJYMF9JTlZfTElORV9QQSwgMSk7CisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOworCisJCXdoaWxlIChzdGFydCA8IGJsa19lbmQpIHsKKwkJCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOworCQkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7CisJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CisJCX0KKworCQlpZiAoYmxrX2VuZCA8IGVuZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9JTlZfTElORV9QQSwgMSk7CiAJY2FjaGVfc3luYygpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyeDBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBsMngwX2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKIAlzdGFydCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IENBQ0hFX0xJTkVfU0laRSkKLQkJc3luY193cml0ZWwoYWRkciwgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CisKKwkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgeworCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKKwkJCXdyaXRlbChzdGFydCwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CisJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CisJCX0KKworCQlpZiAoYmxrX2VuZCA8IGVuZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJCX0KKwl9CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKIAljYWNoZV9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGwyeDBfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwyeDBfbG9jaywgZmxhZ3MpOwogCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gQ0FDSEVfTElORV9TSVpFKQotCQlzeW5jX3dyaXRlbChhZGRyLCBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CisKKwkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgeworCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7CisJCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKKwkJfQorCisJCWlmIChibGtfZW5kIDwgZW5kKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKKwkJfQorCX0KKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKIAljYWNoZV9zeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgX19pbml0IGwyeDBfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIF9fdTMyIGF1eF92YWwsIF9fdTMyIGF1eF9tYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMKaW5kZXggOGE0YWJlYi4uMmE0ODI3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12My5TCkBAIC03MiwxNCArNzIsMTUgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKnBhZ2UsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkodjNfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKHYzX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKQEAgLTEyOSw3ICsxMzAsNyBAQAogCS5sb25nCXYzX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwl2M19jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjNfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXYzX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2M19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJdjNfZG1hX2ludl9yYW5nZQogCS5sb25nCXYzX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXYzX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKaW5kZXggMzY2ODYxMS4uNWM3ZGEzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NC5TCkBAIC04MiwxNCArODIsMTUgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkodjRfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKHY0X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKQEAgLTE0MSw3ICsxNDIsNyBAQAogCS5sb25nCXY0X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwl2NF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjRfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXY0X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl2NF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJdjRfZG1hX2ludl9yYW5nZQogCS5sb25nCXY0X2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXY0X2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDJlYmMxYjMuLjNkYmVkZjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xMTQsMTUgKzExNCwxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWSh2NHdiX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKK0VOVFJZKHY0d2JfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogCS8qIGZhbGwgdGhyb3VnaCAqLwogCiAvKgpAQCAtMjI0LDcgKzIyNSw3IEBACiAJLmxvbmcJdjR3Yl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJdjR3Yl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJdjR3Yl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwl2NHdiX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCmluZGV4IGM1NGZhMmMuLmIzYjc0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKQEAgLTExNywxNyArMTE3LDE4IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKHY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKHY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJcjIsICMwCiAJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCWFkZAlyMSwgcjAsIHIxCiAJLyogZmFsbHRocm91Z2ggKi8KIAogLyoKQEAgLTE4MCw3ICsxODEsNyBAQAogCS5sb25nCXY0d3RfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCXY0d3RfZG1hX2ludl9yYW5nZQogCS5sb25nCXY0d3RfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IDI5NWUyNWQuLjRiYTBhMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtMTU5LDE1ICsxNTksMTYgQEAKIEVORFBST0ModjZfY29oZXJlbnRfa2Vybl9yYW5nZSkKIAogLyoKLSAqCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uoa2FkZHIpCisgKgl2Nl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSB0aGF0IHRoZSBkYXRhIGhlbGQgaW4gdGhlIHBhZ2Uga2FkZHIgaXMgd3JpdHRlbiBiYWNrCiAgKgl0byB0aGUgcGFnZSBpbiBxdWVzdGlvbi4KICAqCi0gKgktIGthZGRyICAgLSBrZXJuZWwgYWRkcmVzcyAoZ3VhcmFudGVlZCB0byBiZSBwYWdlIGFsaWduZWQpCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkodjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkodjZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToKICNpZmRlZiBIQVJWQVJEX0NBQ0hFCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIEQgbGluZQpAQCAtMjcxLDcgKzI3Miw3IEBACiAJLmxvbmcJdjZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXY2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2Nl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJdjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl2Nl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJdjZfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJdjZfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCBlMWJkOTc1Li45MDczZGI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTE4NiwxNiArMTg2LDE3IEBACiBFTkRQUk9DKHY3X2NvaGVyZW50X3VzZXJfcmFuZ2UpCiAKIC8qCi0gKgl2N19mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQorICoJdjdfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjawogICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCiAgKgotICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKHY3X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCitFTlRSWSh2N19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQogCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKKwlhZGQJcjEsIHIwLCByMQogMToKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBsaW5lIC8gdW5pZmllZCBsaW5lCiAJYWRkCXIwLCByMCwgcjIKQEAgLTIwMyw3ICsyMDQsNyBAQAogCWJsbwkxYgogCWRzYgogCW1vdglwYywgbHIKLUVORFBST0ModjdfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VORFBST0ModjdfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAogLyoKICAqCXY3X2RtYV9pbnZfcmFuZ2Uoc3RhcnQsZW5kKQpAQCAtMjc5LDcgKzI4MCw3IEBACiAJLmxvbmcJdjdfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXY3X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2N19jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJdjdfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXY3X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl2N19kbWFfaW52X3JhbmdlCiAJLmxvbmcJdjdfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJdjdfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYyBiL2FyY2gvYXJtL21tL2NhY2hlLXhzYzNsMi5jCmluZGV4IDVkMTgwY2IuLmMzMTU0OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXhzYzNsMi5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXhzYzNsMi5jCkBAIC0yMjEsMTUgKzIyMSwxNCBAQAogCWlmICghY3B1X2lzX3hzYzMoKSB8fCAheHNjM19sMl9wcmVzZW50KCkpCiAJCXJldHVybiAwOwogCi0JaWYgKCEoZ2V0X2NyKCkgJiBDUl9MMikpIHsKKwlpZiAoZ2V0X2NyKCkgJiBDUl9MMikgewogCQlwcl9pbmZvKCJYU2NhbGUzIEwyIGNhY2hlIGVuYWJsZWQuXG4iKTsKLQkJYWRqdXN0X2NyKENSX0wyLCBDUl9MMik7CiAJCXhzYzNfbDJfaW52X2FsbCgpOwotCX0KIAotCW91dGVyX2NhY2hlLmludl9yYW5nZSA9IHhzYzNfbDJfaW52X3JhbmdlOwotCW91dGVyX2NhY2hlLmNsZWFuX3JhbmdlID0geHNjM19sMl9jbGVhbl9yYW5nZTsKLQlvdXRlcl9jYWNoZS5mbHVzaF9yYW5nZSA9IHhzYzNfbDJfZmx1c2hfcmFuZ2U7CisJCW91dGVyX2NhY2hlLmludl9yYW5nZSA9IHhzYzNfbDJfaW52X3JhbmdlOworCQlvdXRlcl9jYWNoZS5jbGVhbl9yYW5nZSA9IHhzYzNfbDJfY2xlYW5fcmFuZ2U7CisJCW91dGVyX2NhY2hlLmZsdXNoX3JhbmdlID0geHNjM19sMl9mbHVzaF9yYW5nZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCmluZGV4IDg0MWYzNTUuLjBmYTEzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYwpAQCAtNDgsNyArNDgsNyBAQAogCSAqLwogCWlmIChwYWdlX2FkZHJlc3ModG8pICE9IE5VTEwpCiAjZW5kaWYKLQkJX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKGt0byk7CisJCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShrdG8sIFBBR0VfU0laRSk7CiAJa3VubWFwX2F0b21pYyhrdG8sIEtNX1VTRVIxKTsKIAlrdW5tYXBfYXRvbWljKGtmcm9tLCBLTV9VU0VSMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKaW5kZXggNzI5NjAyMi4uNTZlZTE1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwpAQCAtMjA3LDkgKzIwNyw4IEBACiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKHBhZ2UpIHsKIAkJdW5zaWduZWQgbG9uZyAqcDEsICpwMjsKLQkJcGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlR8TF9QVEVfWU9VTkd8Ci0JCQkJCSBMX1BURV9ESVJUWXxMX1BURV9XUklURXwKLQkJCQkJIExfUFRFX01UX0JVRkZFUkFCTEUpOworCQlwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3RfbW9kaWZ5KFBBR0VfS0VSTkVMLAorCQkJCQlMX1BURV9NVF9NQVNLLCBMX1BURV9NVF9CVUZGRVJBQkxFKTsKIAogCQlwMSA9IHZtYXAoJnBhZ2UsIDEsIFZNX0lPUkVNQVAsIHByb3QpOwogCQlwMiA9IHZtYXAoJnBhZ2UsIDEsIFZNX0lPUkVNQVAsIHByb3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggMzI5NTk0ZS4uNmYzYTRiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkgKi8KIAlpZiAoYWRkcikKICNlbmRpZgotCQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UoYWRkcik7CisJCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYShhZGRyLCBQQUdFX1NJWkUpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgcGFnZSBjYWNoZSBwYWdlLCBhbmQgd2UgaGF2ZSBhbiBhbGlhc2luZyBWSVBUIGNhY2hlLApAQCAtMjU4LDUgKzI1OCw1IEBACiAJICogaW4gdGhpcyBtYXBwaW5nIG9mIHRoZSBwYWdlLiAgRklYTUU6IHRoaXMgaXMgb3ZlcmtpbGwKIAkgKiBzaW5jZSB3ZSBhY3R1YWxseSBhc2sgZm9yIGEgd3JpdGUtYmFjayBhbmQgaW52YWxpZGF0ZS4KIAkgKi8KLQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEocGFnZV9hZGRyZXNzKHBhZ2UpLCBQQUdFX1NJWkUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCmluZGV4IDMwZjgyZmIuLjJiZTFlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYworKysgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAoa3ZhZGRyID49ICh2b2lkICopRklYQUREUl9TVEFSVCkgewotCQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UoKHZvaWQgKil2YWRkcik7CisJCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSgodm9pZCAqKXZhZGRyLCBQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJCUJVR19PTih2YWRkciAhPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KSk7CiAJCXNldF9wdGVfZXh0KFRPUF9QVEUodmFkZHIpLCBfX3B0ZSgwKSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggNTJjNDBkMS4uYTA0ZmZiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtNjE2LDcgKzYxNiw3IEBACiAJCSIlZEsgZGF0YSwgJWRLIGluaXQsICVsdUsgaGlnaG1lbSlcbiIsCiAJCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksIGNvZGVzaXplID4+IDEwLAogCQlkYXRhc2l6ZSA+PiAxMCwgaW5pdHNpemUgPj4gMTAsCi0JCSh1bnNpZ25lZCBsb25nKSAodG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSkpOworCQl0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKTsKIAogCWlmIChQQUdFX1NJWkUgPj0gMTYzODQgJiYgbnVtX3BoeXNwYWdlcyA8PSAxMjgpIHsKIAkJZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDhjN2ZiZDEuLjE3MDhkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC00NTMsOCArNDUzLDcgQEAKIAogCXBncHJvdF91c2VyICAgPSBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCB1c2VyX3BncHJvdCk7CiAJcGdwcm90X2tlcm5lbCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8Ci0JCQkJIExfUFRFX0RJUlRZIHwgTF9QVEVfV1JJVEUgfAotCQkJCSBMX1BURV9FWEVDIHwga2Vybl9wZ3Byb3QpOworCQkJCSBMX1BURV9ESVJUWSB8IExfUFRFX1dSSVRFIHwga2Vybl9wZ3Byb3QpOwogCiAJbWVtX3R5cGVzW01UX0xPV19WRUNUT1JTXS5wcm90X2wxIHw9IGVjY19tYXNrOwogCW1lbV90eXBlc1tNVF9ISUdIX1ZFQ1RPUlNdLnByb3RfbDEgfD0gZWNjX21hc2s7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9ub21tdS5jIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwppbmRleCA5MDA4MTFjLi4zNzRhODMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9ub21tdS5jCisrKyBiL2FyY2gvYXJtL21tL25vbW11LmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEocGFnZV9hZGRyZXNzKHBhZ2UpLCBQQUdFX1NJWkUpOwogfQogRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfcGFnZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggZDlmYjRiOS4uODAxMmUyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKQEAgLTIzMSwxNyArMjMxLDE4IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIHBhZ2UJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTEwMjBfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKGFybTEwMjBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKQEAgLTMzNSw3ICszMzYsNyBAQAogCS5sb25nCWFybTEwMjBfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTEwMjBfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTEwMjBfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTEwMjBfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTEwMjBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCWFybTEwMjBfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTEwMjBfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMF9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCA3NDUzYjc1Li40MWZlMjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC0yMjUsMTcgKzIyNSwxOCBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBwYWdlCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm0xMDIwZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorRU5UUlkoYXJtMTAyMGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMzIxLDcgKzMyMiw3IEBACiAJLmxvbmcJYXJtMTAyMGVfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTEwMjBlX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm0xMDIwZV9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJYXJtMTAyMGVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTEwMjBlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlhcm0xMDIwZV9kbWFfaW52X3JhbmdlCiAJLmxvbmcJYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMGVfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCmluZGV4IDhlYjcyZDcuLjIwYTViMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TCkBAIC0yMTQsMTcgKzIxNCwxOCBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBwYWdlCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm0xMDIyX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCitFTlRSWShhcm0xMDIyX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCi0JYWRkCXIxLCByMCwgI1BBR0VfU1oKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTMxMCw3ICszMTEsNyBAQAogCS5sb25nCWFybTEwMjJfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTEwMjJfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTEwMjJfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWFybTEwMjJfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTEwMjJfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQogCS5sb25nCWFybTEwMjJfZG1hX2ludl9yYW5nZQogCS5sb25nCWFybTEwMjJfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9kbWFfZmx1c2hfcmFuZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggM2I1OWYwZC4uOTZhZWRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTIwOCwxNyArMjA4LDE4IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIHBhZ2UJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKGFybTEwMjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKK0VOVFJZKGFybTEwMjZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorCWFkZAlyMSwgcjAsIHIxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCiAJY21wCXIwLCByMQpAQCAtMzA0LDcgKzMwNSw3IEBACiAJLmxvbmcJYXJtMTAyNl9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJYXJtMTAyNl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJYXJtMTAyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtMTAyNl9kbWFfaW52X3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwlhcm0xMDI2X2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggMmI3YzE5Ny4uNDcxNjY5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC0yMDcsMTUgKzIwNywxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm05MjBfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkoYXJtOTIwX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0yOTMsNyArMjk0LDcgQEAKIAkubG9uZwlhcm05MjBfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTkyMF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTIwX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm05MjBfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTkyMF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtOTIwX2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm05MjBfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtOTIwX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggMDZhMWFhNC4uZWUxMTFiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC0yMDksMTUgKzIwOSwxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm05MjJfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkoYXJtOTIyX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0yOTUsNyArMjk2LDcgQEAKIAkubG9uZwlhcm05MjJfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTkyMl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTIyX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm05MjJfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTkyMl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtOTIyX2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm05MjJfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtOTIyX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggY2I1MzQzNS4uOGRlYjViZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC0yNTEsMTUgKzI1MSwxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm05MjVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkoYXJtOTI1X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0zNDYsNyArMzQ3LDcgQEAKIAkubG9uZwlhcm05MjVfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTkyNV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTI1X2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm05MjVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTkyNV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtOTI1X2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm05MjVfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtOTI1X2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKaW5kZXggMWM0ODQ4Ny4uNjRkYjZlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCkBAIC0yMTQsMTUgKzIxNCwxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICovCi1FTlRSWShhcm05MjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkoYXJtOTI2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0zMDksNyArMzEwLDcgQEAKIAkubG9uZwlhcm05MjZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTkyNl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTI2X2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm05MjZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTkyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtOTI2X2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm05MjZfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtOTI2X2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKaW5kZXggNWIwZjg0Ni4uODE5NmI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCkBAIC0xNDEsMTQgKzE0MSwxNSBAQAogCS8qIEZBTExUSFJPVUdIICovCiAKIC8qCi0gKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKglmbHVzaF9rZXJuX2RjYWNoZV9hcmVhKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQogICoKICAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCiAgKgl0aGUgSSBjYWNoZQogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkoYXJtOTQwX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCitFTlRSWShhcm05NDBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltb3YJaXAsICMwCiAJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDQJQCA0IHNlZ21lbnRzCiAxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCkBAIC0yMzgsNyArMjM5LDcgQEAKIAkubG9uZwlhcm05NDBfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTk0MF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTQwX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm05NDBfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTk0MF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtOTQwX2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm05NDBfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtOTQwX2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKaW5kZXggNDBjMDQ0OS4uOWE5NTEyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCkBAIC0xODMsMTYgKzE4MywxNyBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlCiAgKgotICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqCS0gYWRkcgktIGtlcm5lbCBhZGRyZXNzCisgKgktIHNpemUJLSByZWdpb24gc2l6ZQogICogKHNhbWUgYXMgYXJtOTI2KQogICovCi1FTlRSWShhcm05NDZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkoYXJtOTQ2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0yODAsNyArMjgxLDcgQEAKIAkubG9uZwlhcm05NDZfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWFybTk0Nl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTQ2X2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwlhcm05NDZfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWFybTk0Nl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJYXJtOTQ2X2RtYV9pbnZfcmFuZ2UKIAkubG9uZwlhcm05NDZfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJYXJtOTQ2X2RtYV9mbHVzaF9yYW5nZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCmluZGV4IGQwZDc3OTUuLmRiYzM5MzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKQEAgLTIyNiwxNiArMjI2LDE3IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoZmVyb2Nlb25fZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQlhZGQJcjEsIHIwLCAjUEFHRV9TWgorRU5UUlkoZmVyb2Nlb25fZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTI0Niw3ICsyNDcsNyBAQAogCW1vdglwYywgbHIKIAogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9yYW5nZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorRU5UUlkoZmVyb2Nlb25fcmFuZ2VfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKIAltcnMJcjIsIGNwc3IKIAlhZGQJcjEsIHIwLCAjUEFHRV9TWiAtIENBQ0hFX0RMSU5FU0laRQlAIHRvcCBhZGRyIGlzIGluY2x1c2l2ZQogCW9ycglyMywgcjIsICNQU1JfSV9CSVQKQEAgLTM3Miw3ICszNzMsNyBAQAogCS5sb25nCWZlcm9jZW9uX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCWZlcm9jZW9uX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlmZXJvY2Vvbl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJZmVyb2Nlb25fZG1hX2ludl9yYW5nZQogCS5sb25nCWZlcm9jZW9uX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCWZlcm9jZW9uX2RtYV9mbHVzaF9yYW5nZQpAQCAtMzgzLDcgKzM4NCw3IEBACiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF91c2VyX3JhbmdlCi0JLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWZlcm9jZW9uX3JhbmdlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfaW52X3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwppbmRleCA1MmI1ZmQ3Li45Njc0ZDM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKQEAgLTE4NiwxNSArMTg2LDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKG1vaGF3a19mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWShtb2hhd2tfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQogCWNtcAlyMCwgcjEKQEAgLTI3Myw3ICsyNzQsNyBAQAogCS5sb25nCW1vaGF3a19mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJbW9oYXdrX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwltb2hhd2tfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCW1vaGF3a19mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJbW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwltb2hhd2tfZG1hX2ludl9yYW5nZQogCS5sb25nCW1vaGF3a19kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwltb2hhd2tfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXN5bXMuYyBiL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCmluZGV4IGFjNWM4MDAuLjNlNjIxMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jCkBAIC0yNyw4ICsyNyw3IEBACiBFWFBPUlRfU1lNQk9MKF9fY3B1Y19mbHVzaF91c2VyX2FsbCk7CiBFWFBPUlRfU1lNQk9MKF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlKTsKIEVYUE9SVF9TWU1CT0woX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UpOwotRVhQT1JUX1NZTUJPTChfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChkbWFjX2ludl9yYW5nZSk7ICAvKiBiZWNhdXNlIG9mIGZsdXNoX2lvcmVtYXBfcmVnaW9uKCkgKi8KK0VYUE9SVF9TWU1CT0woX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKTsKICNlbHNlCiBFWFBPUlRfU1lNQk9MKGNwdV9jYWNoZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCA1NDg1YzgyLi4zOTVjYzkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0yNTQsMTAgKzI1NCw5IEBACiAJLmxvbmcJMHg1NjBmNTgxMAogCS5sb25nCTB4ZmYwZmZmZjAKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCmluZGV4IGZhYjEzNGUuLjhlNGY2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCkBAIC0yMjYsMTUgKzIyNiwxNiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqCWZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqCWZsdXNoX2tlcm5fZGNhY2hlX2FyZWEodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCiAgKgogICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKICAqCXRoZSBJIGNhY2hlLgogICoKLSAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKgktIGFkZHIJLSBrZXJuZWwgYWRkcmVzcworICoJLSBzaXplCS0gcmVnaW9uIHNpemUKICAqLwotRU5UUlkoeHNjM19mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWSh4c2MzX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisJYWRkCXIxLCByMCwgcjEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuL2ludmFsaWRhdGUgTDEgRCBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKIAljbXAJcjAsIHIxCkBAIC0zMDksNyArMzEwLDcgQEAKIAkubG9uZwl4c2MzX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKIAkubG9uZwl4c2MzX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl4c2MzX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwl4c2MzX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl4c2MzX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl4c2MzX2RtYV9pbnZfcmFuZ2UKIAkubG9uZwl4c2MzX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXhzYzNfZG1hX2ZsdXNoX3JhbmdlCkBAIC00MDYsNiArNDA3LDEzIEBACiAKIAlhZHIJcjUsIHhzYzNfY3J2YWwKIAlsZG1pYQlyNSwge3I1LCByNn0KKworI2lmZGVmIENPTkZJR19DQUNIRV9YU0MzTDIKKwltcmMJcDE1LCAxLCByMCwgYzAsIGMwLCAxCQlAIGdldCBMMiBwcmVzZW50IGluZm9ybWF0aW9uCisJYW5kcwlyMCwgcjAsICMweGY4CisJb3JybmUJcjYsIHI2LCAjKDEgPDwgMjYpCQlAIGVuYWJsZSBMMiBpZiBwcmVzZW50CisjZW5kaWYKKwogCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZ2V0IGNvbnRyb2wgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCByNQkJCUAgLi5WLiAuLlIuIC4uLi4gLi5BLgogCW9ycglyMCwgcjAsIHI2CQkJQCAuLlZJIFouLlMgLi4uLiAuQy5NIChtbXUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCBmMDU2YzI4Li45M2RmNDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTI4NCwxNSArMjg0LDE2IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoJZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKICAqCiAgKglFbnN1cmUgbm8gRCBjYWNoZSBhbGlhc2luZyBvY2N1cnMsIGVpdGhlciB3aXRoIGl0c2VsZiBvcgogICoJdGhlIEkgY2FjaGUKICAqCi0gKgktIGFkZHIJLSBwYWdlIGFsaWduZWQgYWRkcmVzcworICoJLSBhZGRyCS0ga2VybmVsIGFkZHJlc3MKKyAqCS0gc2l6ZQktIHJlZ2lvbiBzaXplCiAgKi8KLUVOVFJZKHhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQotCWFkZAlyMSwgcjAsICNQQUdFX1NaCitFTlRSWSh4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKwlhZGQJcjEsIHIwLCByMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFTElORVNJWkUKQEAgLTM2OCw3ICszNjksNyBAQAogCS5sb25nCXhzY2FsZV9mbHVzaF91c2VyX2NhY2hlX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl4c2NhbGVfY29oZXJlbnRfdXNlcl9yYW5nZQotCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisJLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKIAkubG9uZwl4c2NhbGVfZG1hX2ludl9yYW5nZQogCS5sb25nCXhzY2FsZV9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCkBAIC0zOTIsNyArMzkzLDcgQEAKIAkubG9uZwl4c2NhbGVfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQogCS5sb25nCXhzY2FsZV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X3VzZXJfcmFuZ2UKLQkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCXhzY2FsZV9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCiAJLmxvbmcJeHNjYWxlX2RtYV9mbHVzaF9yYW5nZQogCS5sb25nCXhzY2FsZV9kbWFfY2xlYW5fcmFuZ2UKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjcuUyBiL2FyY2gvYXJtL21tL3RsYi12Ny5TCmluZGV4IGEyNmE2MDUuLjBjYjE4NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3RsYi12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3RsYi12Ny5TCkBAIC00MCw3ICs0MCw2IEBACiAJYXNpZAlyMywgcjMJCQkJQCBtYXNrIEFTSUQKIAlvcnIJcjAsIHIzLCByMCwgbHNsICNQQUdFX1NISUZUCUAgQ3JlYXRlIGluaXRpYWwgTVZBCiAJbW92CXIxLCByMSwgbHNsICNQQUdFX1NISUZUCi0Jdm1hX3ZtX2ZsYWdzIHIyLCByMgkJCUAgZ2V0IHZtYS0+dm1fZmxhZ3MKIDE6CiAjaWZkZWYgQ09ORklHX1NNUAogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzMsIDEJCUAgVExCIGludmFsaWRhdGUgVSBNVkEgKHNoYXJlYWJsZSkgCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ud2ZwZS9NYWtlZmlsZSBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCmluZGV4IGIyOTE3OGMuLmRlYjNhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL253ZnBlL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiBud2ZwZS15CQkJCSs9IGZwYTExLm8gZnBhMTFfY3Bkby5vIGZwYTExX2NwZHQubyBcCiAJCQkJICAgZnBhMTFfY3BydC5vIGZwbW9kdWxlLm8gZnBvcGNvZGUubyBcCi0JCQkJICAgc29mdGZsb2F0Lm8gc2luZ2xlX2NwZG8ubyBkb3VibGVfY3Bkby5vCisJCQkJICAgc29mdGZsb2F0Lm8gc2luZ2xlX2NwZG8ubyBkb3VibGVfY3Bkby5vIFwKKwkJCQkgICBlbnRyeS5vCiAKIG53ZnBlLSQoQ09ORklHX0ZQRV9OV0ZQRV9YUCkJKz0gZXh0ZW5kZWRfY3Bkby5vCi1ud2ZwZS0kKENPTkZJR19DUFVfMzIpCQkrPSBlbnRyeS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYwppbmRleCBmMjAyOTVmLi4yMDg4YTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMKQEAgLTE5MSwxMiArMTkxLDggQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQkvKgotCSAqIEluaXRpYWxpemUgJiBSZXNldCBQTU5DOiBDIGJpdCwgRCBiaXQgYW5kIFAgYml0LgotCSAqICBOb3RlOiBVc2luZyBhIHNsb3dlciBjb3VudCBmb3IgQ0NOVCAoRCBiaXQ6IGRpdmlkZSBieSA2NCkgcmVzdWx0cwotCSAqICAgaW4gYSBtb3JlIHN0YWJsZSBzeXN0ZW0KLQkgKi8KLQlhcm12N19wbW5jX3dyaXRlKFBNTkNfUCB8IFBNTkNfQyB8IFBNTkNfRCk7CisJLyogSW5pdGlhbGl6ZSAmIFJlc2V0IFBNTkM6IEMgYml0IGFuZCBQIGJpdCAqLworCWFybXY3X3BtbmNfd3JpdGUoUE1OQ19QIHwgUE1OQ19DKTsKIAogCiAJZm9yIChjbnQgPSBDQ05UOyBjbnQgPCBDTlRNQVg7IGNudCsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaAppbmRleCA4MTBjNDdmLi45YWY0OTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI1LmgKQEAgLTU4LDE5ICs1OCwxOSBAQAogCiAjZGVmaW5lIE1YMjVfUEFEX0ExOF9fQTE4CQlJT01VWF9QQUQoMHgyM2MsIDB4MDIwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfQTE4X19HUElPXzJfNAkJSU9NVVhfUEFEKDB4MjNjLCAweDAyMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0ExOF9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MjNjLCAweDAyMCwgMHgxNywgMHg1MDQsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ExOF9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MjNjLCAweDAyMCwgMHgxNywgMHg1MDQsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0ExOV9fQTE5CQlJT01VWF9QQUQoMHgyNDAsIDB4MDI0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfQTE5X19GRUNfUlhfRVIJCUlPTVVYX1BBRCgweDI0MCwgMHgwMjQsIDB4MTcsIDB4NTE4LCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMTlfX0ZFQ19SWF9FUgkJSU9NVVhfUEFEKDB4MjQwLCAweDAyNCwgMHgxNywgMHg1MTgsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9BMTlfX0dQSU9fMl81CQlJT01VWF9QQUQoMHgyNDAsIDB4MDI0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9BMjBfX0EyMAkJSU9NVVhfUEFEKDB4MjQ0LCAweDAyOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0EyMF9fR1BJT18yXzYJCUlPTVVYX1BBRCgweDI0NCwgMHgwMjgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9BMjBfX0ZFQ19SREFUQTIJSU9NVVhfUEFEKDB4MjQ0LCAweDAyOCwgMHgxNywgMHg1MGMsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0EyMF9fRkVDX1JEQVRBMglJT01VWF9QQUQoMHgyNDQsIDB4MDI4LCAweDE3LCAweDUwYywgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfQTIxX19BMjEJCUlPTVVYX1BBRCgweDI0OCwgMHgwMmMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9BMjFfX0dQSU9fMl83CQlJT01VWF9QQUQoMHgyNDgsIDB4MDJjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfQTIxX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDI0OCwgMHgwMmMsIDB4MTcsIDB4NTEwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMjFfX0ZFQ19SREFUQTMJSU9NVVhfUEFEKDB4MjQ4LCAweDAyYywgMHgxNywgMHg1MTAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0EyMl9fQTIyCQlJT01VWF9QQUQoMHgwMDAsIDB4MDMwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfQTIyX19HUElPXzJfOAkJSU9NVVhfUEFEKDB4MDAwLCAweDAzMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCkBAIC04MCwxMSArODAsMTEgQEAKIAogI2RlZmluZSBNWDI1X1BBRF9BMjRfX0EyNAkJSU9NVVhfUEFEKDB4MjUwLCAweDAzOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0EyNF9fR1BJT18yXzEwCQlJT01VWF9QQUQoMHgyNTAsIDB4MDM4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfQTI0X19GRUNfUlhfQ0xLCUlPTVVYX1BBRCgweDI1MCwgMHgwMzgsIDB4MTcsIDB4NTE0LCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMjRfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MjUwLCAweDAzOCwgMHgxNywgMHg1MTQsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0EyNV9fQTI1CQlJT01VWF9QQUQoMHgyNTQsIDB4MDNjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfQTI1X19HUElPXzJfMTEJCUlPTVVYX1BBRCgweDI1NCwgMHgwM2MsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9BMjVfX0ZFQ19DUlMJCUlPTVVYX1BBRCgweDI1NCwgMHgwM2MsIDB4MTcsIDB4NTA4LCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9BMjVfX0ZFQ19DUlMJCUlPTVVYX1BBRCgweDI1NCwgMHgwM2MsIDB4MTcsIDB4NTA4LCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9FQjBfX0VCMAkJSU9NVVhfUEFEKDB4MjU4LCAweDA0MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0VCMF9fQVVENF9UWEQJCUlPTVVYX1BBRCgweDI1OCwgMHgwNDAsIDB4MTQsIDB4NDY0LCAwLCBOT19QQURfQ1RSTCkKQEAgLTExMiw3ICsxMTIsNyBAQAogI2RlZmluZSBNWDI1X1BBRF9DUzVfX1VBUlQ1X1JUUwkJSU9NVVhfUEFEKDB4MjY4LCAweDA1OCwgMHgxMywgMHg1NzQsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9DUzVfX0dQSU9fM18yMQkJSU9NVVhfUEFEKDB4MjY4LCAweDA1OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfTkZfQ0UwX19ORl9DRTAJCUlPTVVYX1BBRCgweDI2YywgMHgwNWMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX05GX0NFMF9fTkZfQ0UwCQlJT01VWF9QQUQoMHgyNmMsIDB4MDVjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfTkZfQ0UwX19HUElPXzNfMjIJSU9NVVhfUEFEKDB4MjZjLCAweDA1YywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfRUNCX19FQ0IJCUlPTVVYX1BBRCgweDI3MCwgMHgwNjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQpAQCAtMjI5LDI4ICsyMjksMjggQEAKICNkZWZpbmUgTVgyNV9QQURfTEQ3X19HUElPXzFfMjEJCUlPTVVYX1BBRCgweDJkYywgMHgwZTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEOF9fTEQ4CQlJT01VWF9QQUQoMHgyZTAsIDB4MGU4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfTEQ4X19GRUNfVFhfRVJSCUlPTVVYX1BBRCgweDJlMCwgMHgwZTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEOF9fRkVDX1RYX0VSUglJT01VWF9QQUQoMHgyZTAsIDB4MGU4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9MRDlfX0xEOQkJSU9NVVhfUEFEKDB4MmU0LCAweDBlYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0xEOV9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MmU0LCAweDBlYywgMHgxNSwgMHg1MDQsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEOV9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4MmU0LCAweDBlYywgMHgxNSwgMHg1MDQsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEMTBfX0xEMTAJCUlPTVVYX1BBRCgweDJlOCwgMHgwZjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9MRDEwX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4MmU4LCAweDBmMCwgMHgxNSwgMHg1MTgsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTBfX0ZFQ19SWF9FUglJT01VWF9QQUQoMHgyZTgsIDB4MGYwLCAweDE1LCAweDUxOCwgMSwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfTEQxMV9fTEQxMQkJSU9NVVhfUEFEKDB4MmVjLCAweDBmNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0xEMTFfX0ZFQ19SREFUQTIJSU9NVVhfUEFEKDB4MmVjLCAweDBmNCwgMHgxNSwgMHg1MGMsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTFfX0ZFQ19SREFUQTIJSU9NVVhfUEFEKDB4MmVjLCAweDBmNCwgMHgxNSwgMHg1MGMsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEMTJfX0xEMTIJCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9MRDEyX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTUsIDB4NTEwLCAxLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEyX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTUsIDB4NTEwLCAxLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9MRDEzX19MRDEzCQlJT01VWF9QQUQoMHgyZjQsIDB4MGZjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVgyNV9QQURfTEQxM19fRkVDX1REQVRBMglJT01VWF9QQUQoMHgyZjQsIDB4MGZjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEzX19GRUNfVERBVEEyCUlPTVVYX1BBRCgweDJmNCwgMHgwZmMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0xEMTRfX0xEMTQJCUlPTVVYX1BBRCgweDJmOCwgMHgxMDAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9MRDE0X19GRUNfVERBVEEzCUlPTVVYX1BBRCgweDJmOCwgMHgxMDAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTRfX0ZFQ19UREFUQTMJSU9NVVhfUEFEKDB4MmY4LCAweDEwMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfTEQxNV9fTEQxNQkJSU9NVVhfUEFEKDB4MmZjLCAweDEwNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX0xEMTVfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MmZjLCAweDEwNCwgMHgxNSwgMHg1MTQsIDEsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTVfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MmZjLCAweDEwNCwgMHgxNSwgMHg1MTQsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX0hTWU5DX19IU1lOQwkJSU9NVVhfUEFEKDB4MzAwLCAweDEwOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0hTWU5DX19HUElPXzFfMjIJSU9NVVhfUEFEKDB4MzAwLCAweDEwOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCkBAIC0yNjUsNyArMjY1LDcgQEAKICNkZWZpbmUgTVgyNV9QQURfT0VfQUNEX19HUElPXzFfMjUJSU9NVVhfUEFEKDB4MzBjLCAweDExNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0NPTlRSQVNUCUlPTVVYX1BBRCgweDMxMCwgMHgxMTgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDI1X1BBRF9DT05UUkFTVF9fRkVDX0NSUwlJT01VWF9QQUQoMHgzMTAsIDB4MTE4LCAweDE1LCAweDUwOCwgMSwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0ZFQ19DUlMJSU9NVVhfUEFEKDB4MzEwLCAweDExOCwgMHgxNSwgMHg1MDgsIDEsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1BXTV9fUFdNCQlJT01VWF9QQUQoMHgzMTQsIDB4MTFjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfUFdNX19HUElPXzFfMjYJCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQpAQCAtMzU0LDE5ICszNTQsMTkgQEAKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfVFhEX19HUElPXzRfMjcJSU9NVVhfUEFEKDB4MzdjLCAweDE4NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19VQVJUMl9SVFMJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YMjVfUEFEX1VBUlQyX1JUU19fRkVDX0NPTAlJT01VWF9QQUQoMHgzODAsIDB4MTg4LCAweDEyLCAweDUwNCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19GRUNfQ09MCUlPTVVYX1BBRCgweDM4MCwgMHgxODgsIDB4MTIsIDB4NTA0LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19HUElPXzRfMjgJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfVUFSVDJfQ1RTX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4Mzg0LCAweDE4YywgMHgxMiwgMHg1MTgsIDIsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX0NUU19fRkVDX1JYX0VSCUlPTVVYX1BBRCgweDM4NCwgMHgxOGMsIDB4MTIsIDB4NTE4LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfVUFSVDJfQ1RTX19VQVJUMl9DVFMJSU9NVVhfUEFEKDB4Mzg0LCAweDE4YywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX0NUU19fR1BJT180XzI5CUlPTVVYX1BBRCgweDM4NCwgMHgxOGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9DTURfX1NEMV9DTUQJSU9NVVhfUEFEKDB4Mzg4LCAweDE5MCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQotI2RlZmluZSBNWDI1X1BBRF9TRDFfQ01EX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTIsIDB4NTBjLCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ01EX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTIsIDB4NTBjLCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0NNRF9fR1BJT18yXzIzCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfUEFEKDB4MzhjLCAweDE5NCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQotI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTIsIDB4NTEwLCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTIsIDB4NTEwLCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0NMS19fR1BJT18yXzI0CUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwCUlPTVVYX1BBRCgweDM5MCwgMHgxOTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzQ3S19VUCkKQEAgLTM3NywxMSArMzc3LDExIEBACiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMV9fR1BJT18yXzI2CUlPTVVYX1BBRCgweDM5NCwgMHgxOWMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCiAjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyCUlPTVVYX1BBRCgweDM5OCwgMHgxYTAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzQ3S19VUCkKLSNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEyX19GRUNfUlhfQ0xLCUlPTVVYX1BBRCgweDM5OCwgMHgxYTAsIDB4MTUsIDB4NTE0LCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTJfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4Mzk4LCAweDFhMCwgMHgxNSwgMHg1MTQsIDIsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTJfX0dQSU9fMl8yNwlJT01VWF9QQUQoMHgzOTgsIDB4MWEwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAogI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMwlJT01VWF9QQUQoMHgzOWMsIDB4MWE0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU180N0tfVVApCi0jZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBM19fRkVDX0NSUwlJT01VWF9QQUQoMHgzOWMsIDB4MWE0LCAweDEwLCAweDUwOCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19GRUNfQ1JTCUlPTVVYX1BBRCgweDM5YywgMHgxYTQsIDB4MTAsIDB4NTA4LCAyLCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19HUElPXzJfMjgJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzBfX0tQUF9ST1cwCUlPTVVYX1BBRCgweDNhMCwgMHgxYTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQpAQCAtNDEwLDcgKzQxMCw3IEBACiAjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19LUFBfQ09MMwlJT01VWF9QQUQoMHgzYmMsIDB4MWM0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQogI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MM19fR1BJT18zXzQJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQwlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDCUlPTVVYX1BBRCgweDNjMCwgMHgxYzgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfTURDX19BVUQ0X1RYRAlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEyLCAweDQ2NCwgMSwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0ZFQ19NRENfX0dQSU9fM181CUlPTVVYX1BBRCgweDNjMCwgMHgxYzgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCkBAIC00MTgsMjMgKzQxOCwyMyBAQAogI2RlZmluZSBNWDI1X1BBRF9GRUNfTURJT19fQVVENF9SWEQJSU9NVVhfUEFEKDB4M2M0LCAweDFjYywgMHgxMiwgMHg0NjAsIDEsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfTURJT19fR1BJT18zXzYJSU9NVVhfUEFEKDB4M2M0LCAweDFjYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNkZWZpbmUgTVgyNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBMAlJT01VWF9QQUQoMHgzYzgsIDB4MWQwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwCUlPTVVYX1BBRCgweDNjOCwgMHgxZDAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEEwX19HUElPXzNfNwlJT01VWF9QQUQoMHgzYzgsIDB4MWQwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKIAotI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEExCUlPTVVYX1BBRCgweDNjYywgMHgxZDQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEJSU9NVVhfUEFEKDB4M2NjLCAweDFkNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTFfX0FVRDRfVFhGUwlJT01VWF9QQUQoMHgzY2MsIDB4MWQ0LCAweDEyLCAweDQ3NCwgMSwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTFfX0dQSU9fM184CUlPTVVYX1BBRCgweDNjYywgMHgxZDQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfRU5fX0dQSU9fM185ICAgCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAJSU9NVVhfUEFEKDB4M2Q0LCAweDFkYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMAlJT01VWF9QQUQoMHgzZDQsIDB4MWRjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU18xMDBLX0RPV04gfCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMF9fR1BJT18zXzEwCUlPTVVYX1BBRCgweDNkNCwgMHgxZGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQTEJSU9NVVhfUEFEKDB4M2Q4LCAweDFlMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBMQlJT01VWF9QQUQoMHgzZDgsIDB4MWUwLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU18xMDBLX0RPV04gfCBOT19QQURfQ1RSTCkKICNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMV9fR1BJT18zXzExCUlPTVVYX1BBRCgweDNkOCwgMHgxZTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQogCi0jZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDNkYywgMHgxZTQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfRE9XTiB8IE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDNkYywgMHgxZTQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfRE9XTiB8IE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9GRUNfUlhfRFZfX0NBTjJfUlgJSU9NVVhfUEFEKDB4M2RjLCAweDFlNCwgMHgxNCwgMHg0ODQsIDAsIFBBRF9DVExfUFVTXzIyS19VUCkKICNkZWZpbmUgTVgyNV9QQURfRkVDX1JYX0RWX19HUElPXzNfMTIJSU9NVVhfUEFEKDB4M2RjLCAweDFlNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oCmluZGV4IDkxZTczODEuLjg1NGUyZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApAQCAtNDEsNCArNDEsOCBAQAogI2RlZmluZSBVQVJUMV9CQVNFX0FERFIJCQkweDQzZjkwMDAwCiAjZGVmaW5lIFVBUlQyX0JBU0VfQUREUgkJCTB4NDNmOTQwMDAKIAorI2RlZmluZSBNWDI1X0ZFQ19CQVNFX0FERFIJCTB4NTAwMzgwMDAKKworI2RlZmluZSBNWDI1X0lOVF9GRUMJNTcKKwogI2VuZGlmIC8qIF9fTUFDSF9NWDI1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwppbmRleCA4OWNhZmM5Li5kOWY4Yzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYwpAQCAtMzYsMTAgKzM2LDYgQEAKICAqIFN0YW5kYXJkIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvY2xrLmgKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFRoaXMgZnVuY3Rpb25zIGlzIG1vdmVkIHRvIGFyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYy4gRm9yIE9NQVA0IHNpbmNlCi0gKiBjbG9jayBmcmFtZXdvcmsgaXMgbm90IHVwICwgaXQgaXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIHJld29yayBpbgotICogZXZlcnkgZHJpdmVyLiBBbHNvIGR1bW15IHByY20gcmVzZXQgZnVuY3Rpb24gaXMgYWRkZWQgKi8KLQogaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMDUsNyArMzAxLDYgQEAKIAkJCWNsa19lbmFibGUoY2xrcCk7CiAJfQogfQotRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlX2luaXRfY2xvY2tzKTsKIAogLyoKICAqIExvdyBsZXZlbCBoZWxwZXJzCkBAIC0zMzQsNyArMzI5LDE2IEBACiAJCWFyY2hfY2xvY2stPmNsa19pbml0X2NwdWZyZXFfdGFibGUodGFibGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChjbGtfaW5pdF9jcHVmcmVxX3RhYmxlKTsKKwordm9pZCBjbGtfZXhpdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19leGl0X2NwdWZyZXFfdGFibGUpCisJCWFyY2hfY2xvY2stPmNsa19leGl0X2NwdWZyZXFfdGFibGUodGFibGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCmluZGV4IGY4ZGRiZGQuLjZkM2QzMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCkBAIC0xMzQsNiArMTM0LDcgQEAKIAogc3RhdGljIGludCBvbWFwX2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogeworCWNsa19leGl0X2NwdWZyZXFfdGFibGUoJmZyZXFfdGFibGUpOwogCWNsa19wdXQobXB1X2Nsayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCAwNDg0NjgxLi5kMTc2MjBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE5Miw2ICsxOTIsNyBAQAogCXUzMiBzYXZlZF9yaXNpbmdkZXRlY3Q7CiAjZW5kaWYKIAl1MzIgbGV2ZWxfbWFzazsKKwl1MzIgdG9nZ2xlX21hc2s7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKIAlzdHJ1Y3QgY2xrICpkYmNrOwpAQCAtNzQ5LDYgKzc1MCw0NCBAQAogfQogI2VuZGlmCiAKKy8qCisgKiBUaGlzIG9ubHkgYXBwbGllcyB0byBjaGlwcyB0aGF0IGNhbid0IGRvIGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2UKKyAqIGRldGVjdGlvbiBhdCBvbmNlLiAgRm9yIGFsbCBvdGhlciBjaGlwcywgdGhpcyBmdW5jdGlvbiBpcyBhIG5vb3AuCisgKi8KK3N0YXRpYyB2b2lkIF90b2dnbGVfZ3Bpb19lZGdlX3RyaWdnZXJpbmcoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8pCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlOworCXUzMiBsID0gMDsKKworCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKwljYXNlIE1FVEhPRF9NUFVJTzoKKwkJcmVnICs9IE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAorCWNhc2UgTUVUSE9EX0dQSU9fMTUxMDoKKwkJcmVnICs9IE9NQVAxNTEwX0dQSU9fSU5UX0NPTlRST0w7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisJY2FzZSBNRVRIT0RfR1BJT183WFg6CisJCXJlZyArPSBPTUFQN1hYX0dQSU9fSU5UX0NPTlRST0w7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCWlmICgobCA+PiBncGlvKSAmIDEpCisJCWwgJj0gfigxIDw8IGdwaW8pOworCWVsc2UKKwkJbCB8PSAxIDw8IGdwaW87CisKKwlfX3Jhd193cml0ZWwobCwgcmVnKTsKK30KKwogc3RhdGljIGludCBfc2V0X2dwaW9fdHJpZ2dlcmluZyhzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbywgaW50IHRyaWdnZXIpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBiYW5rLT5iYXNlOwpAQCAtNzU5LDYgKzc5OCw4IEBACiAJY2FzZSBNRVRIT0RfTVBVSU86CiAJCXJlZyArPSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0U7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfQk9USCkKKwkJCWJhbmstPnRvZ2dsZV9tYXNrIHw9IDEgPDwgZ3BpbzsKIAkJaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKIAkJCWwgfD0gMSA8PCBncGlvOwogCQllbHNlIGlmICh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQpAQCAtNzcxLDYgKzgxMiw4IEBACiAJY2FzZSBNRVRIT0RfR1BJT18xNTEwOgogCQlyZWcgKz0gT01BUDE1MTBfR1BJT19JTlRfQ09OVFJPTDsKIAkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmICh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9CT1RIKQorCQkJYmFuay0+dG9nZ2xlX21hc2sgfD0gMSA8PCBncGlvOwogCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQkJbCB8PSAxIDw8IGdwaW87CiAJCWVsc2UgaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCkBAIC04MDMsNiArODQ2LDggQEAKIAljYXNlIE1FVEhPRF9HUElPXzdYWDoKIAkJcmVnICs9IE9NQVA3WFhfR1BJT19JTlRfQ09OVFJPTDsKIAkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmICh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9CT1RIKQorCQkJYmFuay0+dG9nZ2xlX21hc2sgfD0gMSA8PCBncGlvOwogCQlpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQkJbCB8PSAxIDw8IGdwaW87CiAJCWVsc2UgaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCkBAIC0xMDcyLDcgKzExMTcsNyBAQAogICovCiBzdGF0aWMgaW50IF9zZXRfZ3Bpb193YWtldXAoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8sIGludCBlbmFibGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKIAogCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKQEAgLTEyMTcsNyArMTI2Miw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICppc3JfcmVnID0gTlVMTDsKIAl1MzIgaXNyOwotCXVuc2lnbmVkIGludCBncGlvX2lycTsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19pcnEsIGdwaW9faW5kZXg7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuazsKIAl1MzIgcmV0cmlnZ2VyID0gMDsKIAlpbnQgdW5tYXNrZWQgPSAwOwpAQCAtMTI4NCw5ICsxMzI5LDIzIEBACiAKIAkJZ3Bpb19pcnEgPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydDsKIAkJZm9yICg7IGlzciAhPSAwOyBpc3IgPj49IDEsIGdwaW9faXJxKyspIHsKKwkJCWdwaW9faW5kZXggPSBnZXRfZ3Bpb19pbmRleChpcnFfdG9fZ3BpbyhncGlvX2lycSkpOworCiAJCQlpZiAoIShpc3IgJiAxKSkKIAkJCQljb250aW51ZTsKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisJCQkvKgorCQkJICogU29tZSBjaGlwcyBjYW4ndCByZXNwb25kIHRvIGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nCisJCQkgKiBhdCB0aGUgc2FtZSB0aW1lLiAgSWYgdGhpcyBpcnEgd2FzIHJlcXVlc3RlZCB3aXRoCisJCQkgKiBib3RoIGZsYWdzLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIElDUiBkYXRhIGZvciB0aGUgSVJRCisJCQkgKiB0byByZXNwb25kIHRvIHRoZSBJUlEgZm9yIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCisJCQkgKiBUaGlzIHdpbGwgYmUgaW5kaWNhdGVkIGluIHRoZSBiYW5rIHRvZ2dsZV9tYXNrLgorCQkJICovCisJCQlpZiAoYmFuay0+dG9nZ2xlX21hc2sgJiAoMSA8PCBncGlvX2luZGV4KSkKKwkJCQlfdG9nZ2xlX2dwaW9fZWRnZV90cmlnZ2VyaW5nKGJhbmssIGdwaW9faW5kZXgpOworI2VuZGlmCisKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2JvYXJkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2JvYXJkLmgKaW5kZXggMzc2Y2UxOC4uNWNkNjIyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ib2FyZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvYm9hcmQuaApAQCAtOTksNyArOTksNiBAQAogc3RydWN0IG9tYXBfYmFja2xpZ2h0X2NvbmZpZyB7CiAJaW50IGRlZmF1bHRfaW50ZW5zaXR5OwogCWludCAoKnNldF9wb3dlcikoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc3RhdGUpOwotCWludCAoKmNoZWNrX2ZiKShzdHJ1Y3QgZmJfaW5mbyAqZmIpOwogfTsKIAogc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaAppbmRleCAzMDliNmQxLi45NGZlMmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCkBAIC0xMTksNiArMTE5LDcgQEAKIAl2b2lkCQkoKmNsa19kaXNhYmxlX3VudXNlZCkoc3RydWN0IGNsayAqY2xrKTsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIAl2b2lkCQkoKmNsa19pbml0X2NwdWZyZXFfdGFibGUpKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKik7CisJdm9pZAkJKCpjbGtfZXhpdF9jcHVmcmVxX3RhYmxlKShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKiopOwogI2VuZGlmCiB9OwogCkBAIC0xMzUsNiArMTM2LDcgQEAKIGV4dGVybiB2b2lkIGNsa19lbmFibGVfaW5pdF9jbG9ja3Modm9pZCk7CiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiBleHRlcm4gdm9pZCBjbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKTsKK2V4dGVybiB2b2lkIGNsa19leGl0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpOwogI2VuZGlmCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19udWxsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb250cm9sLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbnRyb2wuaAppbmRleCAyYWU4ODQzLi5hNzQ1ZDYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbnRyb2wuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbnRyb2wuaApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UQUREUgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTkwKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTk0KQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0RFQk9CUyhpKQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMUIwIFwKLQkJCQkJKyAoKGkpID4+IDEpICogNCArICghKGkpICYgMSkgKiAyKQorCQkJCQkrICgoaSkgPj4gMSkgKiA0ICsgKCEoKGkpICYgMSkpICogMikKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9QUk9HX0lPMAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMUQ0KQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1BST0dfSU8xCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxRDgpCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfRFNTX0RQTExfU1BSRUFESU5HCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxRTApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvLmgKaW5kZXggN2U1MzE5Zi4uYTNlN2I0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaApAQCAtMTIyLDE2ICsxMjIsMjEgQEAKICNkZWZpbmUgT01BUDI0M1hfU01TX1ZJUlQJKE9NQVAyNDNYX1NNU19QSFlTICsgT01BUDJfTDNfSU9fT0ZGU0VUKQogI2RlZmluZSBPTUFQMjQzWF9TTVNfU0laRQlTWl8xTQogCi0vKiBEU1AgKi8KLSNkZWZpbmUgRFNQX01FTV8yNFhYX1BIWVMJT01BUDI0MjBfRFNQX01FTV9CQVNFCS8qIDB4NTgwMDAwMDAgKi8KLSNkZWZpbmUgRFNQX01FTV8yNFhYX1ZJUlQJMHhlMDAwMDAwMAotI2RlZmluZSBEU1BfTUVNXzI0WFhfU0laRQkweDI4MDAwCi0jZGVmaW5lIERTUF9JUElfMjRYWF9QSFlTCU9NQVAyNDIwX0RTUF9JUElfQkFTRQkvKiAweDU5MDAwMDAwICovCi0jZGVmaW5lIERTUF9JUElfMjRYWF9WSVJUCTB4ZTEwMDAwMDAKLSNkZWZpbmUgRFNQX0lQSV8yNFhYX1NJWkUJU1pfNEsKLSNkZWZpbmUgRFNQX01NVV8yNFhYX1BIWVMJT01BUDI0MjBfRFNQX01NVV9CQVNFCS8qIDB4NWEwMDAwMDAgKi8KLSNkZWZpbmUgRFNQX01NVV8yNFhYX1ZJUlQJMHhlMjAwMDAwMAotI2RlZmluZSBEU1BfTU1VXzI0WFhfU0laRQlTWl80SworLyogMjQyMCBJVkEgKi8KKyNkZWZpbmUgRFNQX01FTV8yNDIwX1BIWVMJT01BUDI0MjBfRFNQX01FTV9CQVNFCisJCQkJCQkvKiAweDU4MDAwMDAwIC0tPiAweGZjMTAwMDAwICovCisjZGVmaW5lIERTUF9NRU1fMjQyMF9WSVJUCTB4ZmMxMDAwMDAKKyNkZWZpbmUgRFNQX01FTV8yNDIwX1NJWkUJMHgyODAwMAorI2RlZmluZSBEU1BfSVBJXzI0MjBfUEhZUwlPTUFQMjQyMF9EU1BfSVBJX0JBU0UKKwkJCQkJCS8qIDB4NTkwMDAwMDAgLS0+IDB4ZmMxMjgwMDAgKi8KKyNkZWZpbmUgRFNQX0lQSV8yNDIwX1ZJUlQJMHhmYzEyODAwMAorI2RlZmluZSBEU1BfSVBJXzI0MjBfU0laRQlTWl80SworI2RlZmluZSBEU1BfTU1VXzI0MjBfUEhZUwlPTUFQMjQyMF9EU1BfTU1VX0JBU0UKKwkJCQkJCS8qIDB4NWEwMDAwMDAgLS0+IDB4ZmMxMjkwMDAgKi8KKyNkZWZpbmUgRFNQX01NVV8yNDIwX1ZJUlQJMHhmYzEyOTAwMAorI2RlZmluZSBEU1BfTU1VXzI0MjBfU0laRQlTWl80SworCisvKiAyNDMwIElWQTIuMSAtIGN1cnJlbnRseSB1bm1hcHBlZCAqLwogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTgyLDE2ICsxODcsNyBAQAogI2RlZmluZSBPTUFQMzQzWF9TRFJDX1ZJUlQJKE9NQVAzNDNYX1NEUkNfUEhZUyArIE9NQVAyX0wzX0lPX09GRlNFVCkKICNkZWZpbmUgT01BUDM0M1hfU0RSQ19TSVpFCVNaXzFNCiAKLS8qIERTUCAqLwotI2RlZmluZSBEU1BfTUVNXzM0WFhfUEhZUwlPTUFQMzRYWF9EU1BfTUVNX0JBU0UJLyogMHg1ODAwMDAwMCAqLwotI2RlZmluZSBEU1BfTUVNXzM0WFhfVklSVAkweGUwMDAwMDAwCi0jZGVmaW5lIERTUF9NRU1fMzRYWF9TSVpFCTB4MjgwMDAKLSNkZWZpbmUgRFNQX0lQSV8zNFhYX1BIWVMJT01BUDM0WFhfRFNQX0lQSV9CQVNFCS8qIDB4NTkwMDAwMDAgKi8KLSNkZWZpbmUgRFNQX0lQSV8zNFhYX1ZJUlQJMHhlMTAwMDAwMAotI2RlZmluZSBEU1BfSVBJXzM0WFhfU0laRQlTWl80SwotI2RlZmluZSBEU1BfTU1VXzM0WFhfUEhZUwlPTUFQMzRYWF9EU1BfTU1VX0JBU0UJLyogMHg1YTAwMDAwMCAqLwotI2RlZmluZSBEU1BfTU1VXzM0WFhfVklSVAkweGUyMDAwMDAwCi0jZGVmaW5lIERTUF9NTVVfMzRYWF9TSVpFCVNaXzRLCisvKiAzNDMwIElWQSAtIGN1cnJlbnRseSB1bm1hcHBlZCAqLwogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXV4LmgKaW5kZXggOGYwNjljYy4uNjkyYzkwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oCkBAIC0xODMsNiArMTgzLDE0IEBACiAJLyogSTJDICovCiAJSTJDXzdYWF9TQ0wsCiAJSTJDXzdYWF9TREEsCisKKwkvKiBTUEkgKi8KKwlTUElfN1hYXzEsCisJU1BJXzdYWF8yLAorCVNQSV83WFhfMywKKwlTUElfN1hYXzQsCisJU1BJXzdYWF81LAorCVNQSV83WFhfNiwKIH07CiAKIGVudW0gb21hcDF4eHhfaW5kZXggewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwN3h4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA3eHguaAppbmRleCA1M2Y1MjQxLi40OGU0NzU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA3eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA3eHguaApAQCAtNDYsNiArNDYsOSBAQAogI2RlZmluZSBPTUFQN1hYX0RTUFJFR19TSVpFCVNaXzEyOEsKICNkZWZpbmUgT01BUDdYWF9EU1BSRUdfU1RBUlQJMHhFMTAwMDAwMAogCisjZGVmaW5lIE9NQVA3WFhfU1BJMV9CQVNFCTB4ZmZmYzA4MDAKKyNkZWZpbmUgT01BUDdYWF9TUEkyX0JBU0UJMHhmZmZjMTAwMAorCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogT01BUDdYWCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwppbmRleCAxMWY1ZDc5Li4wY2ZkNTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwpAQCAtNjYsMTIgKzY2LDEyIEBACiAJCQlyZXR1cm4gWExBVEUocCwgTDRfMjRYWF9QSFlTLCBMNF8yNFhYX1ZJUlQpOwogCX0KIAlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKLQkJaWYgKEJFVFdFRU4ocCwgRFNQX01FTV8yNFhYX1BIWVMsIERTUF9NRU1fMjRYWF9TSVpFKSkKLQkJCXJldHVybiBYTEFURShwLCBEU1BfTUVNXzI0WFhfUEhZUywgRFNQX01FTV8yNFhYX1ZJUlQpOwotCQlpZiAoQkVUV0VFTihwLCBEU1BfSVBJXzI0WFhfUEhZUywgRFNQX0lQSV8yNFhYX1NJWkUpKQotCQkJcmV0dXJuIFhMQVRFKHAsIERTUF9JUElfMjRYWF9QSFlTLCBEU1BfSVBJXzI0WFhfU0laRSk7Ci0JCWlmIChCRVRXRUVOKHAsIERTUF9NTVVfMjRYWF9QSFlTLCBEU1BfTU1VXzI0WFhfU0laRSkpCi0JCQlyZXR1cm4gWExBVEUocCwgRFNQX01NVV8yNFhYX1BIWVMsIERTUF9NTVVfMjRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgRFNQX01FTV8yNDIwX1BIWVMsIERTUF9NRU1fMjQyMF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBEU1BfTUVNXzI0MjBfUEhZUywgRFNQX01FTV8yNDIwX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBEU1BfSVBJXzI0MjBfUEhZUywgRFNQX0lQSV8yNDIwX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIERTUF9JUElfMjQyMF9QSFlTLCBEU1BfSVBJXzI0MjBfU0laRSk7CisJCWlmIChCRVRXRUVOKHAsIERTUF9NTVVfMjQyMF9QSFlTLCBEU1BfTU1VXzI0MjBfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgRFNQX01NVV8yNDIwX1BIWVMsIERTUF9NTVVfMjQyMF9WSVJUKTsKIAl9CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CiAJCWlmIChCRVRXRUVOKHAsIEw0X1dLXzI0M1hfUEhZUywgTDRfV0tfMjQzWF9TSVpFKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggYzBmZjFlMy4uNDYzZDYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTgyNyw3ICs4MjcsNyBAQAogICoqLwogdm9pZCBpb21tdV9wdXQoc3RydWN0IGlvbW11ICpvYmopCiB7Ci0JaWYgKCFvYmogJiYgSVNfRVJSKG9iaikpCisJaWYgKCFvYmogfHwgSVNfRVJSKG9iaikpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJm9iai0+aW9tbXVfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IDJjYzFjYzMuLmY3NTc2NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFRYIElSUSAlZCAiCiAJCQkJCSJmb3IgTWNCU1AlZFxuIiwgbWNic3AtPnR4X2lycSwKIAkJCQkJbWNic3AtPmlkKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycm9yOwogCQl9CiAKIAkJaW5pdF9jb21wbGV0aW9uKCZtY2JzcC0+cnhfaXJxX2NvbXBsZXRpb24pOwpAQCAtNDQ2LDEyICs0NDYsMjYgQEAKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFJYIElSUSAlZCAiCiAJCQkJCSJmb3IgTWNCU1AlZFxuIiwgbWNic3AtPnJ4X2lycSwKIAkJCQkJbWNic3AtPmlkKTsKLQkJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOwotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gdHhfaXJxOwogCQl9CiAJfQogCiAJcmV0dXJuIDA7Cit0eF9pcnE6CisJZnJlZV9pcnEobWNic3AtPnR4X2lycSwgKHZvaWQgKiltY2JzcCk7CitlcnJvcjoKKwlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQorCQkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUoaWQpOworCisJLyogRG8gcHJvY2VkdXJlIHNwZWNpZmljIHRvIG9tYXAzNHh4IGFyY2gsIGlmIGFwcGxpY2FibGUgKi8KKwlvbWFwMzR4eF9tY2JzcF9mcmVlKG1jYnNwKTsKKworCWNsa19kaXNhYmxlKG1jYnNwLT5mY2xrKTsKKwljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CisKKwltY2JzcC0+ZnJlZSA9IDE7CisKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3JlcXVlc3QpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9wd20uYyBiL2FyY2gvYXJtL3BsYXQtcHhhL3B3bS5jCmluZGV4IGE5ZWFiZGMuLjUxZGM1YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL3B3bS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL3B3bS5jCkBAIC0yMDQsMTQgKzIwNCwxNCBAQAogCQlnb3RvIGVycl9mcmVlX2NsazsKIAl9CiAKLQlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEsIHBkZXYtPm5hbWUpOworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIHBkZXYtPm5hbWUpOwogCWlmIChyID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlc291cmNlXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGVycl9mcmVlX2NsazsKIAl9CiAKLQlwd20tPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcHdtLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAocHdtLT5tbWlvX2Jhc2UgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIHJlZ2lzdGVyc1xuIik7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogZXJyX2ZyZWVfY2xrOgogCWNsa19wdXQocHdtLT5jbGspOwogZXJyX2ZyZWU6CkBAIC0yNzEsNyArMjcxLDcgQEAKIAlpb3VubWFwKHB3bS0+bW1pb19iYXNlKTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCiAJY2xrX3B1dChwd20tPmNsayk7CiAJa2ZyZWUocHdtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9kZXYtbmFuZC5jCmluZGV4IGU3NzFlNzcuLjg0ODA4Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LW5hbmQuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCQogCQlmb3IgKGkgPSAwOyBpIDwgbnBkLT5ucl9zZXRzOyBpKyspIHsKIAkJCXJldCA9IHMzY19uYW5kX2NvcHlfc2V0KHRvKTsKLQkJCWlmICghcmV0KSB7CisJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNvcHkgc2V0ICVkXG4iLAogCQkJCV9fZnVuY19fLCBpKTsKIAkJCQlyZXR1cm47CkBAIC0xMjIsNiArMTIyLDggQEAKIAkJCXRvKys7CiAJCX0KIAl9CisKKwlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSBucGQ7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHMzY19uYW5kX3NldF9wbGF0ZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaAppbmRleCA5MzJjYmJiLi5jMWMyMGIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZXZzLmgKQEAgLTMxLDYgKzMxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3BjbTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20xOwogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RzOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9mYjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9sY2Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwppbmRleCBmNTJhOTJjLi43ZjY4NmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAorI2luY2x1ZGUgPG1hY2gvdHMuaD4KKwogLyogU2VyaWFsIHBvcnQgcmVnaXN0cmF0aW9ucyAqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzI0MTBfdWFydDBfcmVzb3VyY2VbXSA9IHsKQEAgLTE4Miw2ICsxODQsMjIgQEAKIAl9CiB9CiAKKy8qIFRvdWNoc2NyZWVuICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdHMgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC10cyIsCisJLmlkCQkgID0gLTEsCit9OworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX3RzKTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyBzM2MyNDEwdHNfaW5mbzsKKwordm9pZCBfX2luaXQgczNjMjR4eF90c19zZXRfcGxhdGRhdGEoc3RydWN0IHMzYzI0MTBfdHNfbWFjaF9pbmZvICpoYXJkX3MzYzI0MTB0c19pbmZvKQoreworCW1lbWNweSgmczNjMjQxMHRzX2luZm8sIGhhcmRfczNjMjQxMHRzX2luZm8sIHNpemVvZihzdHJ1Y3QgczNjMjQxMF90c19tYWNoX2luZm8pKTsKKwlzM2NfZGV2aWNlX3RzLmRldi5wbGF0Zm9ybV9kYXRhID0gJnMzYzI0MTB0c19pbmZvOworfQorRVhQT1JUX1NZTUJPTChzM2MyNHh4X3RzX3NldF9wbGF0ZGF0YSk7CisKIC8qIFVTQiBEZXZpY2UgKEdhZGdldCkqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191c2JnYWRnZXRfcmVzb3VyY2VbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCmluZGV4IDEzNjQzMTcuLjEyNjIzYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwpAQCAtNzAsNiArNzAsNyBAQAogCXMzY19kZXZpY2Vfc2RpLm5hbWUgID0gInMzYzI0NDAtc2RpIjsKIAlzM2NfZGV2aWNlX2kyYzAubmFtZSAgPSAiczNjMjQ0MC1pMmMiOwogCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzI0NDAtbmFuZCI7CisJczNjX2RldmljZV90cy5uYW1lID0gInMzYzI0NDAtdHMiOwogCXMzY19kZXZpY2VfdXNiZ2FkZ2V0Lm5hbWUgPSAiczNjMjQ0MC11c2JnYWRnZXQiOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwppbmRleCA2ZmZhMjFlLi5mZmQ1NmRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNkZWZpbmUgY2xrX2Zpbl9lcGxsIGNsa19leHRfeHRhbF9tdXgKIAogI2RlZmluZSBjbGtfZm91dF9tcGxsCWNsa19tcGxsCisjZGVmaW5lIGNsa19mb3V0X2VwbGwJY2xrX2VwbGwKIAogc3RydWN0IGNsa19zb3VyY2VzIHsKIAl1bnNpZ25lZCBpbnQJbnJfc291cmNlczsKQEAgLTg4LDExICs4OSw2IEBACiAJLnNvdXJjZXMJPSAmY2xrX3NyY19hcGxsLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2ZvdXRfZXBsbCA9IHsKLQkubmFtZQkJPSAiZm91dF9lcGxsIiwKLQkuaWQJCT0gLTEsCi19OwotCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19lcGxsX2xpc3RbXSA9IHsKIAlbMF0gPSAmY2xrX2Zpbl9lcGxsLAogCVsxXSA9ICZjbGtfZm91dF9lcGxsLApAQCAtNzE1LDcgKzcxMSw2IEBACiAJJmNsa19paXNfY2QxLAogCSZjbGtfcGNtX2NkLAogCSZjbGtfbW91dF9lcGxsLmNsaywKLQkmY2xrX2ZvdXRfZXBsbCwKIAkmY2xrX21vdXRfbXBsbC5jbGssCiAJJmNsa19kb3V0X21wbGwsCiAJJmNsa19tbWMwLmNsaywKQEAgLTc2MCw3ICs3NTUsNCBAQAogCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CiAJCX0KIAl9Ci0KLQljbGtfbXBsbC5wYXJlbnQgPSAmY2xrX21vdXRfbXBsbC5jbGs7Ci0JY2xrX2VwbGwucGFyZW50ID0gJmNsa19tb3V0X2VwbGwuY2xrOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggMDdiOTc2ZC4uYzNhNzRjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogV2VkIE5vdiAyNSAyMjoxNDo1OCAyMDA5CisjIExhc3QgdXBkYXRlOiBXZWQgRGVjIDE2IDIwOjA2OjM0IDIwMDkKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTc3Niw2ICsxNzc2LDcgQEAKIHdkZzAwMgkJCU1BQ0hfV0RHMDAyCQlXREcwMDIJCQkxNzg1CiBzZzU2MGFkc2wJCU1BQ0hfU0c1NjBBRFNMCQlTRzU2MEFEU0wJCTE3ODYKIG5leHRpb19uMjgwMF9pY2EJTUFDSF9ORVhUSU9fTjI4MDBfSUNBCU5FWFRJT19OMjgwMF9JQ0EJMTc4NworZG92ZV9kYgkJCU1BQ0hfRE9WRV9EQgkJRE9WRV9EQgkJCTE3ODgKIG1hcnZlbGxfbmV3ZGIJCU1BQ0hfTUFSVkVMTF9ORVdEQglNQVJWRUxMX05FV0RCCQkxNzg5CiB2YW5kaWh1ZAkJTUFDSF9WQU5ESUhVRAkJVkFORElIVUQJCTE3OTAKIG1hZ3hfZTgJCQlNQUNIX01BR1hfRTgJCU1BR1hfRTgJCQkxNzkxCkBAIC0yNTM2LDMgKzI1MzcsNDQgQEAKIG14dF90ZDYwCQlNQUNIX01YVF9URDYwCQlNWFRfVEQ2MAkJMjU1MAogZXN5eAkJCU1BQ0hfRVNZWAkJRVNZWAkJCTI1NTEKIGJ1bGxkb2cJCQlNQUNIX0JVTExET0cJCUJVTExET0cJCQkyNTUzCitkZXJlbGxfbWUyMDAwCQlNQUNIX0RFUkVMTF9NRTIwMDAJREVSRUxMX01FMjAwMAkJMjU1NAorYmNtcmluZ19iYXNlCQlNQUNIX0JDTVJJTkdfQkFTRQlCQ01SSU5HX0JBU0UJCTI1NTUKK2JjbXJpbmdfZXZtCQlNQUNIX0JDTVJJTkdfRVZNCUJDTVJJTkdfRVZNCQkyNTU2CitiY21yaW5nX2V2bV9qYXp6CU1BQ0hfQkNNUklOR19FVk1fSkFaWglCQ01SSU5HX0VWTV9KQVpaCTI1NTcKK2JjbXJpbmdfc3AJCU1BQ0hfQkNNUklOR19TUAkJQkNNUklOR19TUAkJMjU1OAorYmNtcmluZ19zdgkJTUFDSF9CQ01SSU5HX1NWCQlCQ01SSU5HX1NWCQkyNTU5CitiY21yaW5nX3N2X2phenoJCU1BQ0hfQkNNUklOR19TVl9KQVpaCUJDTVJJTkdfU1ZfSkFaWgkJMjU2MAorYmNtcmluZ190YWJsZXQJCU1BQ0hfQkNNUklOR19UQUJMRVQJQkNNUklOR19UQUJMRVQJCTI1NjEKK2JjbXJpbmdfdnAJCU1BQ0hfQkNNUklOR19WUAkJQkNNUklOR19WUAkJMjU2MgorYmNtcmluZ19ldm1fc2Vpa29yCU1BQ0hfQkNNUklOR19FVk1fU0VJS09SCUJDTVJJTkdfRVZNX1NFSUtPUgkyNTYzCitiY21yaW5nX3NwX3dxdmdhCU1BQ0hfQkNNUklOR19TUF9XUVZHQQlCQ01SSU5HX1NQX1dRVkdBCTI1NjQKK2JjbXJpbmdfY3VzdG9tCQlNQUNIX0JDTVJJTkdfQ1VTVE9NCUJDTVJJTkdfQ1VTVE9NCQkyNTY1CithY2VyX3MyMDAJCU1BQ0hfQUNFUl9TMjAwCQlBQ0VSX1MyMDAJCTI1NjYKK2J0MjcwCQkJTUFDSF9CVDI3MAkJQlQyNzAJCQkyNTY3Citpc2VvCQkJTUFDSF9JU0VPCQlJU0VPCQkJMjU2OAorY2V6YW5uZQkJCU1BQ0hfQ0VaQU5ORQkJQ0VaQU5ORQkJCTI1NjkKK2x1Y2NhCQkJTUFDSF9MVUNDQQkJTFVDQ0EJCQkyNTcwCitzdXBlcnNtYXJ0CQlNQUNIX1NVUEVSU01BUlQJCVNVUEVSU01BUlQJCTI1NzEKK21hZ25vbGlhMgkJTUFDSF9NQUdOT0xJQTIJCU1BR05PTElBMgkJMjU3MworZW14eAkJCU1BQ0hfRU1YWAkJRU1YWAkJCTI1NzQKK291dGxhdwkJCU1BQ0hfT1VUTEFXCQlPVVRMQVcJCQkyNTc1CityaW90X2JlaTIJCU1BQ0hfUklPVF9CRUkyCQlSSU9UX0JFSTIJCTI1NzYKK3Jpb3Rfdm94CQlNQUNIX1JJT1RfVk9YCQlSSU9UX1ZPWAkJMjU3NworcmlvdF94MzcJCU1BQ0hfUklPVF9YMzcJCVJJT1RfWDM3CQkyNTc4CittZWdhMjVteAkJTUFDSF9NRUdBMjVNWAkJTUVHQTI1TVgJCTI1NzkKK2JlbnppbmEyCQlNQUNIX0JFTlpJTkEyCQlCRU5aSU5BMgkJMjU4MAoraWduaXRlCQkJTUFDSF9JR05JVEUJCUlHTklURQkJCTI1ODEKK2ZvZ2dpYQkJCU1BQ0hfRk9HR0lBCQlGT0dHSUEJCQkyNTgyCithcmV6em8JCQlNQUNIX0FSRVpaTwkJQVJFWlpPCQkJMjU4MworbGVpY2Ffc2t5d2Fsa2VyCQlNQUNIX0xFSUNBX1NLWVdBTEtFUglMRUlDQV9TS1lXQUxLRVIJCTI1ODQKK2phY2ludG8yX2phbXIJCU1BQ0hfSkFDSU5UTzJfSkFNUglKQUNJTlRPMl9KQU1SCQkyNTg1CitndHNfbm92YQkJTUFDSF9HVFNfTk9WQQkJR1RTX05PVkEJCTI1ODYKK3AzNjAwCQkJTUFDSF9QMzYwMAkJUDM2MDAJCQkyNTg3CitkbHQyCQkJTUFDSF9ETFQyCQlETFQyCQkJMjU4OAorZGYzMTIwCQkJTUFDSF9ERjMxMjAJCURGMzEyMAkJCTI1ODkKK2VjdWNvcmVfOWcyMAkJTUFDSF9FQ1VDT1JFXzlHMjAJRUNVQ09SRV85RzIwCQkyNTkwCituYXV0ZWxfbHBjMzI0MAkJTUFDSF9OQVVURUxfTFBDMzI0MAlOQVVURUxfTFBDMzI0MAkJMjU5MQorZ2xhY2llcgkJCU1BQ0hfR0xBQ0lFUgkJR0xBQ0lFUgkJCTI1OTIKK3BocmF6ZXJfYnVsbGRvZwkJTUFDSF9QSFJBWkVSX0JVTExET0cJUEhSQVpFUl9CVUxMRE9HCQkyNTkzCitvbWFwM19idWxsZG9nCQlNQUNIX09NQVAzX0JVTExET0cJT01BUDNfQlVMTERPRwkJMjU5NAorcGNhMTAxCQkJTUFDSF9QQ0ExMDEJCVBDQTEwMQkJCTI1OTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCBhZWQwNWJjLi5mNjBhNTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC02MywxNCArNjMsMTUgQEAKIAlwdXRfY3B1KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZmcF90aHJlYWRfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKK3N0YXRpYyB2b2lkIHZmcF90aHJlYWRfZXhpdChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKIHsKIAkvKiByZWxlYXNlIGNhc2U6IFBlci10aHJlYWQgVkZQIGNsZWFudXAuICovCiAJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gdGhyZWFkLT5jcHU7CisJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCWlmIChsYXN0X1ZGUF9jb250ZXh0W2NwdV0gPT0gdmZwKQogCQlsYXN0X1ZGUF9jb250ZXh0W2NwdV0gPSBOVUxMOworCXB1dF9jcHUoKTsKIH0KIAogLyoKQEAgLTg4LDExICs4OSwxMyBAQAogICoJYnV0IG1heSBjaGFuZ2UgYXQgYW55IHRpbWUuCiAgKiAgIC0gd2UgY291bGQgYmUgcHJlZW1wdGVkIGlmIHRyZWUgcHJlZW1wdCByY3UgaXMgZW5hYmxlZCwgc28KICAqCWl0IGlzIHVuc2FmZSB0byB1c2UgdGhyZWFkLT5jcHUuCi0gKiAgVEhSRUFEX05PVElGWV9SRUxFQVNFOgotICogICAtIHRoZSB0aHJlYWQgKHYpIHdpbGwgbm90IGJlIHJ1bm5pbmcgb24gYW55IENQVTsgaXQgaXMgYSBkZWFkIHRocmVhZC4KLSAqICAgLSB0aHJlYWQtPmNwdSB3aWxsIGJlIHRoZSBsYXN0IENQVSB0aGUgdGhyZWFkIHJhbiBvbiwgd2hpY2ggbWF5IG5vdAotICoJYmUgdGhlIGN1cnJlbnQgQ1BVLgotICogICAtIHdlIGNvdWxkIGJlIHByZWVtcHRlZCBpZiB0cmVlIHByZWVtcHQgcmN1IGlzIGVuYWJsZWQuCisgKiAgVEhSRUFEX05PVElGWV9FWElUCisgKiAgIC0gdGhlIHRocmVhZCAodikgd2lsbCBiZSBydW5uaW5nIG9uIHRoZSBsb2NhbCBDUFUsIHNvCisgKgl2ID09PSBjdXJyZW50X3RocmVhZF9pbmZvKCkKKyAqICAgLSB0aHJlYWQtPmNwdSBpcyB0aGUgbG9jYWwgQ1BVIG51bWJlciBhdCB0aGUgdGltZSBpdCBpcyBhY2Nlc3NlZCwKKyAqCWJ1dCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lLgorICogICAtIHdlIGNvdWxkIGJlIHByZWVtcHRlZCBpZiB0cmVlIHByZWVtcHQgcmN1IGlzIGVuYWJsZWQsIHNvCisgKglpdCBpcyB1bnNhZmUgdG8gdXNlIHRocmVhZC0+Y3B1LgogICovCiBzdGF0aWMgaW50IHZmcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQogewpAQCAtMTMzLDcgKzEzNiw3IEBACiAJaWYgKGNtZCA9PSBUSFJFQURfTk9USUZZX0ZMVVNIKQogCQl2ZnBfdGhyZWFkX2ZsdXNoKHRocmVhZCk7CiAJZWxzZQotCQl2ZnBfdGhyZWFkX3JlbGVhc2UodGhyZWFkKTsKKwkJdmZwX3RocmVhZF9leGl0KHRocmVhZCk7CiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDk0NGEwN2MuLjFkMDRlNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMCw0ICsxMCw5IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogI2RlZmluZSBNQVBfTlIoYWRkcikgKCgodW5zaWduZWQgbG9uZykoYWRkciktUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpCiAKKyNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKKwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAorCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAorCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKaW5kZXggZjEwMzZiNi4uMzRjN2MzZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYwpAQCAtNiwyMyArNiw5IEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgkJLyogZm9yIGxpbnV4IHB0X3JlZ3Mgc3RydWN0ICovCiAjaW5jbHVkZSA8bGludXgva2dkYi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS90cmFwcy5oPgotI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogdm9pZCBwdF9yZWdzX3RvX2dkYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTE0Nyw3ICsxMzMsNyBAQAogCXJlZ3MtPmxiMSA9IGdkYl9yZWdzW0JGSU5fTEIxXTsKIAlyZWdzLT51c3AgPSBnZGJfcmVnc1tCRklOX1VTUF07CiAJcmVncy0+c3lzY2ZnID0gZ2RiX3JlZ3NbQkZJTl9TWVNDRkddOwotCXJlZ3MtPnJldHggPSBnZGJfcmVnc1tCRklOX1BDXTsKKwlyZWdzLT5yZXR4ID0gZ2RiX3JlZ3NbQkZJTl9SRVRYXTsKIAlyZWdzLT5yZXRuID0gZ2RiX3JlZ3NbQkZJTl9SRVROXTsKIAlyZWdzLT5yZXRlID0gZ2RiX3JlZ3NbQkZJTl9SRVRFXTsKIAlyZWdzLT5wYyA9IGdkYl9yZWdzW0JGSU5fUENdOwpAQCAtNDI0LDE4MiArNDEwLDYgQEAKIAkuY29ycmVjdF9od19icmVhayA9IGJmaW5fY29ycmVjdF9od19icmVhaywKIH07CiAKLXN0YXRpYyBpbnQgaGV4KGNoYXIgY2gpCi17Ci0JaWYgKChjaCA+PSAnYScpICYmIChjaCA8PSAnZicpKQotCQlyZXR1cm4gY2ggLSAnYScgKyAxMDsKLQlpZiAoKGNoID49ICcwJykgJiYgKGNoIDw9ICc5JykpCi0JCXJldHVybiBjaCAtICcwJzsKLQlpZiAoKGNoID49ICdBJykgJiYgKGNoIDw9ICdGJykpCi0JCXJldHVybiBjaCAtICdBJyArIDEwOwotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCB2YWxpZGF0ZV9tZW1vcnlfYWNjZXNzX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2l6ZSkKLXsKLQlpZiAoc2l6ZSA8IDAgfHwgYWRkciA9PSAwKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gYmZpbl9tZW1fYWNjZXNzX3R5cGUoYWRkciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZpbl9wcm9iZV9rZXJuZWxfcmVhZChjaGFyICpkc3QsIGNoYXIgKnNyYywgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBsc3JjID0gKHVuc2lnbmVkIGxvbmcpc3JjOwotCWludCBtZW1fdHlwZTsKLQotCW1lbV90eXBlID0gdmFsaWRhdGVfbWVtb3J5X2FjY2Vzc19hZGRyZXNzKGxzcmMsIHNpemUpOwotCWlmIChtZW1fdHlwZSA8IDApCi0JCXJldHVybiBtZW1fdHlwZTsKLQotCWlmIChsc3JjID49IFNZU01NUl9CQVNFKSB7Ci0JCWlmIChzaXplID09IDIgJiYgbHNyYyAlIDIgPT0gMCkgewotCQkJdTE2IG1tciA9IGJmaW5fcmVhZDE2KHNyYyk7Ci0JCQltZW1jcHkoZHN0LCAmbW1yLCBzaXplb2YobW1yKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmIChzaXplID09IDQgJiYgbHNyYyAlIDQgPT0gMCkgewotCQkJdTMyIG1tciA9IGJmaW5fcmVhZDMyKHNyYyk7Ci0JCQltZW1jcHkoZHN0LCAmbW1yLCBzaXplb2YobW1yKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAobWVtX3R5cGUpIHsKLQkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkU6Ci0JCQljYXNlIEJGSU5fTUVNX0FDQ0VTU19DT1JFX09OTFk6Ci0JCQkJcmV0dXJuIHByb2JlX2tlcm5lbF9yZWFkKGRzdCwgc3JjLCBzaXplKTsKLQkJCS8qIFhYWDogc2hvdWxkIHN1cHBvcnQgSURNQSBoZXJlIHdpdGggU01QICovCi0JCQljYXNlIEJGSU5fTUVNX0FDQ0VTU19ETUE6Ci0JCQkJaWYgKGRtYV9tZW1jcHkoZHN0LCBzcmMsIHNpemUpKQotCQkJCQlyZXR1cm4gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0lURVNUOgotCQkJCWlmIChpc3JhbV9tZW1jcHkoZHN0LCBzcmMsIHNpemUpKQotCQkJCQlyZXR1cm4gMDsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAtRUZBVUxUOwotfQotCi1zdGF0aWMgaW50IGJmaW5fcHJvYmVfa2VybmVsX3dyaXRlKGNoYXIgKmRzdCwgY2hhciAqc3JjLCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxkc3QgPSAodW5zaWduZWQgbG9uZylkc3Q7Ci0JaW50IG1lbV90eXBlOwotCi0JbWVtX3R5cGUgPSB2YWxpZGF0ZV9tZW1vcnlfYWNjZXNzX2FkZHJlc3MobGRzdCwgc2l6ZSk7Ci0JaWYgKG1lbV90eXBlIDwgMCkKLQkJcmV0dXJuIG1lbV90eXBlOwotCi0JaWYgKGxkc3QgPj0gU1lTTU1SX0JBU0UpIHsKLQkJaWYgKHNpemUgPT0gMiAmJiBsZHN0ICUgMiA9PSAwKSB7Ci0JCQl1MTYgbW1yOwotCQkJbWVtY3B5KCZtbXIsIHNyYywgc2l6ZW9mKG1tcikpOwotCQkJYmZpbl93cml0ZTE2KGRzdCwgbW1yKTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKHNpemUgPT0gNCAmJiBsZHN0ICUgNCA9PSAwKSB7Ci0JCQl1MzIgbW1yOwotCQkJbWVtY3B5KCZtbXIsIHNyYywgc2l6ZW9mKG1tcikpOwotCQkJYmZpbl93cml0ZTMyKGRzdCwgbW1yKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChtZW1fdHlwZSkgewotCQkJY2FzZSBCRklOX01FTV9BQ0NFU1NfQ09SRToKLQkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkVfT05MWToKLQkJCQlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKGRzdCwgc3JjLCBzaXplKTsKLQkJCS8qIFhYWDogc2hvdWxkIHN1cHBvcnQgSURNQSBoZXJlIHdpdGggU01QICovCi0JCQljYXNlIEJGSU5fTUVNX0FDQ0VTU19ETUE6Ci0JCQkJaWYgKGRtYV9tZW1jcHkoZHN0LCBzcmMsIHNpemUpKQotCQkJCQlyZXR1cm4gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0lURVNUOgotCQkJCWlmIChpc3JhbV9tZW1jcHkoZHN0LCBzcmMsIHNpemUpKQotCQkJCQlyZXR1cm4gMDsKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAtRUZBVUxUOwotfQotCi0vKgotICogQ29udmVydCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgbWVtIGludG8gaGV4LCBwbGFjaW5nIHJlc3VsdCBpbiBidWYuCi0gKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0IGNoYXIgcHV0IGluIGJ1ZiAobnVsbCkuIE1heSByZXR1cm4gYW4gZXJyb3IuCi0gKi8KLWludCBrZ2RiX21lbTJoZXgoY2hhciAqbWVtLCBjaGFyICpidWYsIGludCBjb3VudCkKLXsKLQljaGFyICp0bXA7Ci0JaW50IGVycjsKLQotCS8qCi0JICogV2UgdXNlIHRoZSB1cHBlciBoYWxmIG9mIGJ1ZiBhcyBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciB0aGUKLQkgKiByYXcgbWVtb3J5IGNvcHkuICBIZXggY29udmVyc2lvbiB3aWxsIHdvcmsgYWdhaW5zdCB0aGlzIG9uZS4KLQkgKi8KLQl0bXAgPSBidWYgKyBjb3VudDsKLQotCWVyciA9IGJmaW5fcHJvYmVfa2VybmVsX3JlYWQodG1wLCBtZW0sIGNvdW50KTsKLQlpZiAoIWVycikgewotCQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCQlidWYgPSBwYWNrX2hleF9ieXRlKGJ1ZiwgKnRtcCk7Ci0JCQl0bXArKzsKLQkJCWNvdW50LS07Ci0JCX0KLQotCQkqYnVmID0gMDsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQ29weSB0aGUgYmluYXJ5IGFycmF5IHBvaW50ZWQgdG8gYnkgYnVmIGludG8gbWVtLiAgRml4ICQsICMsIGFuZAotICogMHg3ZCBlc2NhcGVkIHdpdGggMHg3ZC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlcgotICogdGhlIGxhc3QgYnl0ZSB3cml0dGVuLgotICovCi1pbnQga2dkYl9lYmluMm1lbShjaGFyICpidWYsIGNoYXIgKm1lbSwgaW50IGNvdW50KQotewotCWNoYXIgKnRtcF9vbGQsICp0bXBfbmV3OwotCWludCBzaXplOwotCi0JdG1wX29sZCA9IHRtcF9uZXcgPSBidWY7Ci0KLQlmb3IgKHNpemUgPSAwOyBzaXplIDwgY291bnQ7ICsrc2l6ZSkgewotCQlpZiAoKnRtcF9vbGQgPT0gMHg3ZCkKLQkJCSp0bXBfbmV3ID0gKigrK3RtcF9vbGQpIF4gMHgyMDsKLQkJZWxzZQotCQkJKnRtcF9uZXcgPSAqdG1wX29sZDsKLQkJdG1wX25ldysrOwotCQl0bXBfb2xkKys7Ci0JfQotCi0JcmV0dXJuIGJmaW5fcHJvYmVfa2VybmVsX3dyaXRlKG1lbSwgYnVmLCBjb3VudCk7Ci19Ci0KLS8qCi0gKiBDb252ZXJ0IHRoZSBoZXggYXJyYXkgcG9pbnRlZCB0byBieSBidWYgaW50byBiaW5hcnkgdG8gYmUgcGxhY2VkIGluIG1lbS4KLSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBBRlRFUiB0aGUgbGFzdCBieXRlIHdyaXR0ZW4uCi0gKiBNYXkgcmV0dXJuIGFuIGVycm9yLgotICovCi1pbnQga2dkYl9oZXgybWVtKGNoYXIgKmJ1ZiwgY2hhciAqbWVtLCBpbnQgY291bnQpCi17Ci0JY2hhciAqdG1wX3JhdywgKnRtcF9oZXg7Ci0KLQkvKgotCSAqIFdlIHVzZSB0aGUgdXBwZXIgaGFsZiBvZiBidWYgYXMgYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBmb3IgdGhlCi0JICogcmF3IG1lbW9yeSB0aGF0IGlzIGNvbnZlcnRlZCBmcm9tIGhleC4KLQkgKi8KLQl0bXBfcmF3ID0gYnVmICsgY291bnQgKiAyOwotCi0JdG1wX2hleCA9IHRtcF9yYXcgLSAxOwotCXdoaWxlICh0bXBfaGV4ID49IGJ1ZikgewotCQl0bXBfcmF3LS07Ci0JCSp0bXBfcmF3ID0gaGV4KCp0bXBfaGV4LS0pOwotCQkqdG1wX3JhdyB8PSBoZXgoKnRtcF9oZXgtLSkgPDwgNDsKLQl9Ci0KLQlyZXR1cm4gYmZpbl9wcm9iZV9rZXJuZWxfd3JpdGUobWVtLCB0bXBfcmF3LCBjb3VudCk7Ci19Ci0KICNkZWZpbmUgSU5fTUVNKGFkZHIsIHNpemUsIGwxX2FkZHIsIGwxX3NpemUpIFwKICh7IFwKIAl1bnNpZ25lZCBsb25nIF9fYWRkciA9ICh1bnNpZ25lZCBsb25nKShhZGRyKTsgXApAQCAtNjI5LDIxICs0MzksNiBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCi1pbnQga2dkYl9hcmNoX3NldF9icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc2F2ZWRfaW5zdHIpCi17Ci0JaW50IGVyciA9IGJmaW5fcHJvYmVfa2VybmVsX3JlYWQoc2F2ZWRfaW5zdHIsIChjaGFyICopYWRkciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUkVBS19JTlNUUl9TSVpFKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiBiZmluX3Byb2JlX2tlcm5lbF93cml0ZSgoY2hhciAqKWFkZHIsIGFyY2hfa2dkYl9vcHMuZ2RiX2JwdF9pbnN0ciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJFQUtfSU5TVFJfU0laRSk7Ci19Ci0KLWludCBrZ2RiX2FyY2hfcmVtb3ZlX2JyZWFrcG9pbnQodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpidW5kbGUpCi17Ci0JcmV0dXJuIGJmaW5fcHJvYmVfa2VybmVsX3dyaXRlKChjaGFyICopYWRkciwgYnVuZGxlLCBCUkVBS19JTlNUUl9TSVpFKTsKLX0KLQogaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCiB7CiAJa2dkYl9zaW5nbGVfc3RlcCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tbS9NYWtlZmlsZQppbmRleCBkNDg5Zjg5Li40YzAxMWIxZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9NYWtlZmlsZQpAQCAtMiw0ICsyLDQgQEAKICMgYXJjaC9ibGFja2Zpbi9tbS9NYWtlZmlsZQogIwogCi1vYmoteSA6PSBzcmFtLWFsbG9jLm8gaXNyYW0tZHJpdmVyLm8gaW5pdC5vCitvYmoteSA6PSBzcmFtLWFsbG9jLm8gaXNyYW0tZHJpdmVyLm8gaW5pdC5vIG1hY2Nlc3MubwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9tYWNjZXNzLmMgYi9hcmNoL2JsYWNrZmluL21tL21hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFjZWJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9tYWNjZXNzLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIHNhZmUgcmVhZCBhbmQgd3JpdGUgbWVtb3J5IHJvdXRpbmVzIGNhbGxhYmxlIHdoaWxlIGF0b21pYworICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKworc3RhdGljIGludCB2YWxpZGF0ZV9tZW1vcnlfYWNjZXNzX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoc2l6ZSA8IDAgfHwgYWRkciA9PSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gYmZpbl9tZW1fYWNjZXNzX3R5cGUoYWRkciwgc2l6ZSk7Cit9CisKK2xvbmcgcHJvYmVfa2VybmVsX3JlYWQodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbHNyYyA9ICh1bnNpZ25lZCBsb25nKXNyYzsKKwlpbnQgbWVtX3R5cGU7CisKKwltZW1fdHlwZSA9IHZhbGlkYXRlX21lbW9yeV9hY2Nlc3NfYWRkcmVzcyhsc3JjLCBzaXplKTsKKwlpZiAobWVtX3R5cGUgPCAwKQorCQlyZXR1cm4gbWVtX3R5cGU7CisKKwlpZiAobHNyYyA+PSBTWVNNTVJfQkFTRSkgeworCQlpZiAoc2l6ZSA9PSAyICYmIGxzcmMgJSAyID09IDApIHsKKwkJCXUxNiBtbXIgPSBiZmluX3JlYWQxNihzcmMpOworCQkJbWVtY3B5KGRzdCwgJm1tciwgc2l6ZW9mKG1tcikpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoc2l6ZSA9PSA0ICYmIGxzcmMgJSA0ID09IDApIHsKKwkJCXUzMiBtbXIgPSBiZmluX3JlYWQzMihzcmMpOworCQkJbWVtY3B5KGRzdCwgJm1tciwgc2l6ZW9mKG1tcikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKG1lbV90eXBlKSB7CisJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkU6CisJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkVfT05MWToKKwkJCXJldHVybiBfX3Byb2JlX2tlcm5lbF9yZWFkKGRzdCwgc3JjLCBzaXplKTsKKwkJCS8qIFhYWDogc2hvdWxkIHN1cHBvcnQgSURNQSBoZXJlIHdpdGggU01QICovCisJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0RNQToKKwkJCWlmIChkbWFfbWVtY3B5KGRzdCwgc3JjLCBzaXplKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQljYXNlIEJGSU5fTUVNX0FDQ0VTU19JVEVTVDoKKwkJCWlmIChpc3JhbV9tZW1jcHkoZHN0LCBzcmMsIHNpemUpKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworbG9uZyBwcm9iZV9rZXJuZWxfd3JpdGUodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbGRzdCA9ICh1bnNpZ25lZCBsb25nKWRzdDsKKwlpbnQgbWVtX3R5cGU7CisKKwltZW1fdHlwZSA9IHZhbGlkYXRlX21lbW9yeV9hY2Nlc3NfYWRkcmVzcyhsZHN0LCBzaXplKTsKKwlpZiAobWVtX3R5cGUgPCAwKQorCQlyZXR1cm4gbWVtX3R5cGU7CisKKwlpZiAobGRzdCA+PSBTWVNNTVJfQkFTRSkgeworCQlpZiAoc2l6ZSA9PSAyICYmIGxkc3QgJSAyID09IDApIHsKKwkJCXUxNiBtbXI7CisJCQltZW1jcHkoJm1tciwgc3JjLCBzaXplb2YobW1yKSk7CisJCQliZmluX3dyaXRlMTYoZHN0LCBtbXIpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoc2l6ZSA9PSA0ICYmIGxkc3QgJSA0ID09IDApIHsKKwkJCXUzMiBtbXI7CisJCQltZW1jcHkoJm1tciwgc3JjLCBzaXplb2YobW1yKSk7CisJCQliZmluX3dyaXRlMzIoZHN0LCBtbXIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKG1lbV90eXBlKSB7CisJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkU6CisJCWNhc2UgQkZJTl9NRU1fQUNDRVNTX0NPUkVfT05MWToKKwkJCXJldHVybiBfX3Byb2JlX2tlcm5lbF93cml0ZShkc3QsIHNyYywgc2l6ZSk7CisJCQkvKiBYWFg6IHNob3VsZCBzdXBwb3J0IElETUEgaGVyZSB3aXRoIFNNUCAqLworCQljYXNlIEJGSU5fTUVNX0FDQ0VTU19ETUE6CisJCQlpZiAoZG1hX21lbWNweShkc3QsIHNyYywgc2l6ZSkpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJY2FzZSBCRklOX01FTV9BQ0NFU1NfSVRFU1Q6CisJCQlpZiAoaXNyYW1fbWVtY3B5KGRzdCwgc3JjLCBzaXplKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIC1FRkFVTFQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMjVjNmE1MC4uOGM5NzA2OCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNjMsMTIgKzYzLDEwIEBACiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAKIAotI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTIFwKIAkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgXAogCSgoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykgPyBWTV9FWEVDIDogMCApIHwgXAogCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKLSNlbmRpZgogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDkxZGY5NjguLjdhZTU4ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtMTMyLDYgKzEzMiwxMiBAQAogZXh0ZXJuIGludCBfX2luaXRkYXRhIG5pZF90b19weG1fbWFwW01BWF9OVU1OT0RFU107CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2FjcGlfcGRjKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FjcGlfc2V0X3BkY19iaXRzKHUzMiAqYnVmKQoreworCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19FU1RfQ0FQQUJJTElUWV9TTVA7Cit9CisKICNkZWZpbmUgYWNwaV91bmxhenlfdGxiKHgpCiAKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZDIwZGIzYy4uZmJkMWEyNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtOCw3ICs4LDYgQEAKIGV4dGVybiB2b2lkIF9tY291bnQodW5zaWduZWQgbG9uZyBwZnMsIHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgYjAsIHVuc2lnbmVkIGxvbmcgcjApOwogI2RlZmluZSBtY291bnQgX21jb3VudAogCi0jaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KIC8qIEluIElBNjQsIE1DT1VOVF9BRERSIGlzIHNldCBpbiBsaW5rIHRpbWUsIHNvIGl0J3Mgbm90IGEgY29uc3RhbnQgYXQgY29tcGlsZSB0aW1lICovCiAjZGVmaW5lIE1DT1VOVF9BRERSICgoKHN0cnVjdCBmbnB0ciAqKW1jb3VudCktPmlwKQogI2RlZmluZSBGVFJBQ0VfQUREUiAoKChzdHJ1Y3QgZm5wdHIgKilmdHJhY2VfY2FsbGVyKS0+aXApCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCBkYmY4M2ZiLi5kNTUwNWQ2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKQEAgLTEwMywxMSArMTAzLDYgQEAKIAlidW5kbGVfdCBidW5kbGU7CiB9IGtwcm9iZV9vcGNvZGVfdDsKIAotc3RydWN0IGZucHRyIHsKLQl1bnNpZ25lZCBsb25nIGlwOwotCXVuc2lnbmVkIGxvbmcgZ3A7Ci19OwotCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCiBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKIAkvKiBjb3B5IG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSBlbXVsYXRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg1ZDk2NWMuLjIzY2NlOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTc0LDcgKzc0LDcgQEAKIGV4dGVybiBpbnQgaWE2NF9pdHJfZW50cnkodTY0IHRhcmdldF9tYXNrLCB1NjQgdmEsIHU2NCBwdGUsIHU2NCBsb2dfc2l6ZSk7CiBleHRlcm4gdm9pZCBpYTY0X3B0cl9lbnRyeSh1NjQgdGFyZ2V0X21hc2ssIGludCBzbG90KTsKIAotZXh0ZXJuIHN0cnVjdCBpYTY0X3RyX2VudHJ5IF9fcGVyX2NwdV9pZHRyc1tOUl9DUFVTXVsyXVtJQTY0X1RSX0FMTE9DX01BWF07CitleHRlcm4gc3RydWN0IGlhNjRfdHJfZW50cnkgKmlhNjRfaWR0cnNbTlJfQ1BVU107CiAKIC8qCiAgcmVnaW9uIHJlZ2lzdGVyIG1hY3JvcwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAzZGRiNGU3Li5kMzIzMDcxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMzMsNyArMzMsOSBAQAogLyoKICAqIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuCiAgKi8KLSNkZWZpbmUgY3B1bWFza19vZl9ub2RlKG5vZGUpICgmbm9kZV90b19jcHVfbWFza1tub2RlXSkKKyNkZWZpbmUgY3B1bWFza19vZl9ub2RlKG5vZGUpICgobm9kZSkgPT0gLTEgPwkJCQlcCisJCQkgICAgICAgY3B1X2FsbF9tYXNrIDoJCQkJXAorCQkJICAgICAgICZub2RlX3RvX2NwdV9tYXNrW25vZGVdKQogCiAvKgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBub2RlIGNvbnRhaW5pbmcgTm9kZSAnbmlkJy4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggYmNkMjYwZS4uOTM3NzNmZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTM1LDYgKzM1LDExIEBACiAgKi8KICMgaWZkZWYgX19LRVJORUxfXwogCitzdHJ1Y3QgZm5wdHIgeworCXVuc2lnbmVkIGxvbmcgaXA7CisJdW5zaWduZWQgbG9uZyBncDsKK307CisKIC8qIERNQSBhZGRyZXNzZXMgYXJlIDY0LWJpdHMgd2lkZSwgaW4gZ2VuZXJhbC4gICovCiB0eXBlZGVmIHU2NCBkbWFfYWRkcl90OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCAyYTc1ZTkzLi5lMTIzNjM0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTE4LDEwICsxOCw2IEBACiBvYmotJChDT05GSUdfSUE2NF9IUF9aWDEpCSs9IGFjcGktZXh0Lm8KIG9iai0kKENPTkZJR19JQTY0X0hQX1pYMV9TV0lPVExCKSArPSBhY3BpLWV4dC5vCiAKLWlmbmVxICgkKENPTkZJR19BQ1BJX1BST0NFU1NPUiksKQotb2JqLXkJCQkJKz0gYWNwaS1wcm9jZXNzb3IubwotZW5kaWYKLQogb2JqLSQoQ09ORklHX0lBNjRfUEFMSU5GTykJKz0gcGFsaW5mby5vCiBvYmotJChDT05GSUdfSU9TQVBJQykJCSs9IGlvc2FwaWMubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLXByb2Nlc3Nvci5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLXByb2Nlc3Nvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmRhN2JkLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1wcm9jZXNzb3IuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2lhNjQva2VybmVsL2FjcGktcHJvY2Vzc29yLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24KLSAqIAlWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KLSAqIAktIEFkZGVkIF9QREMgZm9yIHBsYXRmb3JtcyB3aXRoIEludGVsIENQVXMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLQotI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLQotc3RhdGljIHZvaWQgaW5pdF9pbnRlbF9wZGMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKLXsKLQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqb2JqX2xpc3Q7Ci0JdW5pb24gYWNwaV9vYmplY3QgKm9iajsKLQl1MzIgKmJ1ZjsKLQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHBkYy4gSXQgd2lsbCBiZSB1c2VkIGxhdGVyLiAqLwotCW9ial9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9ial9saXN0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jb2JqID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9iaikgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJa2ZyZWUob2JqX2xpc3QpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVmID0ga21hbGxvYygxMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCWtmcmVlKG9iaik7Ci0JCWtmcmVlKG9ial9saXN0KTsKLQkJcmV0dXJuOwotCX0KLQotCWJ1ZlswXSA9IEFDUElfUERDX1JFVklTSU9OX0lEOwotCWJ1ZlsxXSA9IDE7Ci0JYnVmWzJdID0gQUNQSV9QRENfRVNUX0NBUEFCSUxJVFlfU01QOwotCS8qCi0JICogVGhlIGRlZmF1bHQgb2YgUERDX1NNUF9UX1NXQ09PUkQgYml0IGlzIHNldCBmb3IgSUE2NCBjcHUgc28KLQkgKiB0aGF0IE9TUE0gaXMgY2FwYWJsZSBvZiBuYXRpdmUgQUNQSSB0aHJvdHRsaW5nIHNvZnR3YXJlCi0JICogY29vcmRpbmF0aW9uIHVzaW5nIEJJT1Mgc3VwcGxpZWQgX1RTRCBpbmZvLgotCSAqLwotCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19TTVBfVF9TV0NPT1JEOwotCi0Jb2JqLT50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKLQlvYmotPmJ1ZmZlci5sZW5ndGggPSAxMjsKLQlvYmotPmJ1ZmZlci5wb2ludGVyID0gKHU4ICopIGJ1ZjsKLQlvYmpfbGlzdC0+Y291bnQgPSAxOwotCW9ial9saXN0LT5wb2ludGVyID0gb2JqOwotCXByLT5wZGMgPSBvYmpfbGlzdDsKLQotCXJldHVybjsKLX0KLQotLyogSW5pdGlhbGl6ZSBfUERDIGRhdGEgYmFzZWQgb24gdGhlIENQVSB2ZW5kb3IgKi8KLXZvaWQgYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCXByLT5wZGMgPSBOVUxMOwotCWluaXRfaW50ZWxfcGRjKHByKTsKLQlyZXR1cm47Ci19Ci0KLUVYUE9SVF9TWU1CT0woYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyk7Ci0KLXZvaWQgYXJjaF9hY3BpX3Byb2Nlc3Nvcl9jbGVhbnVwX3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCWlmIChwci0+cGRjKSB7Ci0JCWtmcmVlKHByLT5wZGMtPnBvaW50ZXItPmJ1ZmZlci5wb2ludGVyKTsKLQkJa2ZyZWUocHItPnBkYy0+cG9pbnRlcik7Ci0JCWtmcmVlKHByLT5wZGMpOwotCQlwci0+cGRjID0gTlVMTDsKLQl9Ci19Ci0KLUVYUE9SVF9TWU1CT0woYXJjaF9hY3BpX3Byb2Nlc3Nvcl9jbGVhbnVwX3BkYyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwppbmRleCAzMmYyNjM5Li4zNzhiNDgzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKQEAgLTEyMjUsOSArMTIyNSwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcHNyOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKKwlpZiAoIWlhNjRfaWR0cnNbY3B1XSkKKwkJcmV0dXJuOworCiAJcHNyID0gaWE2NF9jbGVhcl9pYygpOwogCWZvciAoaSA9IElBNjRfVFJfQUxMT0NfQkFTRTsgaSA8IElBNjRfVFJfQUxMT0NfTUFYOyBpKyspIHsKLQkJcCA9ICZfX3Blcl9jcHVfaWR0cnNbY3B1XVtpb3JkLTFdW2ldOworCQlwID0gaWE2NF9pZHRyc1tjcHVdICsgKGlvcmQgLSAxKSAqIElBNjRfVFJfQUxMT0NfTUFYOwogCQlpZiAocC0+cHRlICYgMHgxKSB7CiAJCQlvbGRfcnIgPSBpYTY0X2dldF9ycihwLT5pZmEpOwogCQkJaWYgKG9sZF9yciAhPSBwLT5ycikgewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCA1MjQ2Mjg1Li42YmNiZTIxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtMjI5Myw3ICsyMjkzLDcgQEAKIAkgKiBpZiAoKG1tLT50b3RhbF92bSA8PCBQQUdFX1NISUZUKSArIGxlbj4gdGFzay0+cmxpbVtSTElNSVRfQVNdLnJsaW1fY3VyKQogCSAqIAlyZXR1cm4gLUVOT01FTTsKIAkgKi8KLQlpZiAoc2l6ZSA+IHRhc2stPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIpCisJaWYgKHNpemUgPiB0YXNrX3JsaW1pdCh0YXNrLCBSTElNSVRfTUVNTE9DSykpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmgKaW5kZXggMzYwNzI0ZC4uOTg4OTExYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmgKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmgKQEAgLTM4OCw2ICszODgsOSBAQAogI2RlZmluZSBfdm1tX3Jhd19zcGluX2xvY2soeCkJIGRvIHt9d2hpbGUoMCkKICNkZWZpbmUgX3ZtbV9yYXdfc3Bpbl91bmxvY2soeCkgZG8ge313aGlsZSgwKQogI2Vsc2UKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKK30gdm1tX3NwaW5sb2NrX3Q7CiAjZGVmaW5lIF92bW1fcmF3X3NwaW5fbG9jayh4KQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCV9fdTMyICppYTY0X3NwaW5sb2NrX3B0ciA9IChfX3UzMiAqKSAoeCk7CQlcCkBAIC00MDUsMTIgKzQwOCwxMiBAQAogCiAjZGVmaW5lIF92bW1fcmF3X3NwaW5fdW5sb2NrKHgpCQkJCVwKIAlkbyB7IGJhcnJpZXIoKTsJCQkJXAotCQkoKHNwaW5sb2NrX3QgKil4KS0+cmF3X2xvY2subG9jayA9IDA7IH0gXAorCQkoKHZtbV9zcGlubG9ja190ICopeCktPmxvY2sgPSAwOyB9IFwKIHdoaWxlICgwKQogI2VuZGlmCiAKLXZvaWQgdm1tX3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKTsKLXZvaWQgdm1tX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwordm9pZCB2bW1fc3Bpbl9sb2NrKHZtbV9zcGlubG9ja190ICpsb2NrKTsKK3ZvaWQgdm1tX3NwaW5fdW5sb2NrKHZtbV9zcGlubG9ja190ICpsb2NrKTsKIGVudW0gewogCUlfVExCID0gMSwKIAlEX1RMQiA9IDIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdm1tLmMgYi9hcmNoL2lhNjQva3ZtL3ZtbS5jCmluZGV4IGY0YjRjODkuLjdhNjJmNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdm1tLmMKKysrIGIvYXJjaC9pYTY0L2t2bS92bW0uYwpAQCAtNjAsMTIgKzYwLDEyIEBACiAJcmV0dXJuIDsKIH0KIAotdm9pZCB2bW1fc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit2b2lkIHZtbV9zcGluX2xvY2sodm1tX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJX3ZtbV9yYXdfc3Bpbl9sb2NrKGxvY2spOwogfQogCi12b2lkIHZtbV9zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQordm9pZCB2bW1fc3Bpbl91bmxvY2sodm1tX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJX3ZtbV9yYXdfc3Bpbl91bmxvY2sobG9jayk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCmluZGV4IDIwYjM4NTIuLjQzMzJmN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCkBAIC0xODIsNyArMTgyLDcgQEAKIHsKIAl1NjQgaSwgZGlydHlfcGFnZXMgPSAxOwogCXU2NCBiYXNlX2dmbiA9IChwdGUmX1BBR0VfUFBOX01BU0spID4+IFBBR0VfU0hJRlQ7Ci0Jc3BpbmxvY2tfdCAqbG9jayA9IF9fa3ZtX3ZhKHYtPmFyY2guZGlydHlfbG9nX2xvY2tfcGEpOworCXZtbV9zcGlubG9ja190ICpsb2NrID0gX19rdm1fdmEodi0+YXJjaC5kaXJ0eV9sb2dfbG9ja19wYSk7CiAJdm9pZCAqZGlydHlfYml0bWFwID0gKHZvaWQgKilLVk1fTUVNX0RJUlRZX0xPR19CQVNFOwogCiAJZGlydHlfcGFnZXMgPDw9IHBzIDw9IFBBR0VfU0hJRlQgPyAwIDogcHMgLSBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggYjk2MDljNi4uN2MwZDQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC05MSw3ICs5MSw3IEBACiBpbmxpbmUgdm9pZAogaWE2NF9zZXRfcmJzX2JvdCAodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YWNrX3NpemUgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX21heCAmIC0xNjsKKwl1bnNpZ25lZCBsb25nIHN0YWNrX3NpemUgPSBybGltaXRfbWF4KFJMSU1JVF9TVEFDSykgJiAtMTY7CiAKIAlpZiAoc3RhY2tfc2l6ZSA+IE1BWF9VU0VSX1NUQUNLX1NJWkUpCiAJCXN0YWNrX3NpemUgPSBNQVhfVVNFUl9TVEFDS19TSVpFOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL3RsYi5jIGIvYXJjaC9pYTY0L21tL3RsYi5jCmluZGV4IGVlMDlkMjYuLmYzZGU5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS90bGIuYworKysgYi9hcmNoL2lhNjQvbW0vdGxiLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIERFRklORV9QRVJfQ1BVKHU4LCBpYTY0X3RyX251bSk7ICAvKk51bWJlciBvZiBUUiBzbG90cyBpbiBjdXJyZW50IHByb2Nlc3NvciovCiBERUZJTkVfUEVSX0NQVSh1OCwgaWE2NF90cl91c2VkKTsgLypNYXggU2xvdCBudW1iZXIgdXNlZCBieSBrZXJuZWwqLwogCi1zdHJ1Y3QgaWE2NF90cl9lbnRyeSBfX3Blcl9jcHVfaWR0cnNbTlJfQ1BVU11bMl1bSUE2NF9UUl9BTExPQ19NQVhdOworc3RydWN0IGlhNjRfdHJfZW50cnkgKmlhNjRfaWR0cnNbTlJfQ1BVU107CiAKIC8qCiAgKiBJbml0aWFsaXplcyB0aGUgaWE2NF9jdHguYml0bWFwIGFycmF5IGJhc2VkIG9uIG1heF9jdHgrMS4KQEAgLTQyOSwxMCArNDI5LDE2IEBACiAJc3RydWN0IGlhNjRfdHJfZW50cnkgKnA7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAorCWlmICghaWE2NF9pZHRyc1tjcHVdKSB7CisJCWlhNjRfaWR0cnNbY3B1XSA9IGttYWxsb2MoMiAqIElBNjRfVFJfQUxMT0NfTUFYICoKKwkJCQlzaXplb2YgKHN0cnVjdCBpYTY0X3RyX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaWE2NF9pZHRyc1tjcHVdKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQogCXIgPSAtRUlOVkFMOwogCS8qQ2hlY2sgb3ZlcmxhcCB3aXRoIGV4aXN0aW5nIFRSIGVudHJpZXMqLwogCWlmICh0YXJnZXRfbWFzayAmIDB4MSkgewotCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdWzBdOworCQlwID0gaWE2NF9pZHRyc1tjcHVdOwogCQlmb3IgKGkgPSBJQTY0X1RSX0FMTE9DX0JBU0U7IGkgPD0gcGVyX2NwdShpYTY0X3RyX3VzZWQsIGNwdSk7CiAJCQkJCQkJCWkrKywgcCsrKSB7CiAJCQlpZiAocC0+cHRlICYgMHgxKQpAQCAtNDQ0LDcgKzQ1MCw3IEBACiAJCX0KIAl9CiAJaWYgKHRhcmdldF9tYXNrICYgMHgyKSB7Ci0JCXAgPSAmX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1bMF07CisJCXAgPSBpYTY0X2lkdHJzW2NwdV0gKyBJQTY0X1RSX0FMTE9DX01BWDsKIAkJZm9yIChpID0gSUE2NF9UUl9BTExPQ19CQVNFOyBpIDw9IHBlcl9jcHUoaWE2NF90cl91c2VkLCBjcHUpOwogCQkJCQkJCQlpKyssIHArKykgewogCQkJaWYgKHAtPnB0ZSAmIDB4MSkKQEAgLTQ1OSwxNiArNDY1LDE2IEBACiAJZm9yIChpID0gSUE2NF9UUl9BTExPQ19CQVNFOyBpIDwgcGVyX2NwdShpYTY0X3RyX251bSwgY3B1KTsgaSsrKSB7CiAJCXN3aXRjaCAodGFyZ2V0X21hc2sgJiAweDMpIHsKIAkJY2FzZSAxOgotCQkJaWYgKCEoX19wZXJfY3B1X2lkdHJzW2NwdV1bMF1baV0ucHRlICYgMHgxKSkKKwkJCWlmICghKChpYTY0X2lkdHJzW2NwdV0gKyBpKS0+cHRlICYgMHgxKSkKIAkJCQlnb3RvIGZvdW5kOwogCQkJY29udGludWU7CiAJCWNhc2UgMjoKLQkJCWlmICghKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzFdW2ldLnB0ZSAmIDB4MSkpCisJCQlpZiAoISgoaWE2NF9pZHRyc1tjcHVdICsgSUE2NF9UUl9BTExPQ19NQVggKyBpKS0+cHRlICYgMHgxKSkKIAkJCQlnb3RvIGZvdW5kOwogCQkJY29udGludWU7CiAJCWNhc2UgMzoKLQkJCWlmICghKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW2ldLnB0ZSAmIDB4MSkgJiYKLQkJCQkhKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzFdW2ldLnB0ZSAmIDB4MSkpCisJCQlpZiAoISgoaWE2NF9pZHRyc1tjcHVdICsgaSktPnB0ZSAmIDB4MSkgJiYKKwkJCSAgICAhKChpYTY0X2lkdHJzW2NwdV0gKyBJQTY0X1RSX0FMTE9DX01BWCArIGkpLT5wdGUgJiAweDEpKQogCQkJCWdvdG8gZm91bmQ7CiAJCQljb250aW51ZTsKIAkJZGVmYXVsdDoKQEAgLTQ4OCw3ICs0OTQsNyBAQAogCWlmICh0YXJnZXRfbWFzayAmIDB4MSkgewogCQlpYTY0X2l0cigweDEsIGksIHZhLCBwdGUsIGxvZ19zaXplKTsKIAkJaWE2NF9zcmx6X2koKTsKLQkJcCA9ICZfX3Blcl9jcHVfaWR0cnNbY3B1XVswXVtpXTsKKwkJcCA9IGlhNjRfaWR0cnNbY3B1XSArIGk7CiAJCXAtPmlmYSA9IHZhOwogCQlwLT5wdGUgPSBwdGU7CiAJCXAtPml0aXIgPSBsb2dfc2l6ZSA8PCAyOwpAQCAtNDk3LDcgKzUwMyw3IEBACiAJaWYgKHRhcmdldF9tYXNrICYgMHgyKSB7CiAJCWlhNjRfaXRyKDB4MiwgaSwgdmEsIHB0ZSwgbG9nX3NpemUpOwogCQlpYTY0X3NybHpfaSgpOwotCQlwID0gJl9fcGVyX2NwdV9pZHRyc1tjcHVdWzFdW2ldOworCQlwID0gaWE2NF9pZHRyc1tjcHVdICsgSUE2NF9UUl9BTExPQ19NQVggKyBpOwogCQlwLT5pZmEgPSB2YTsKIAkJcC0+cHRlID0gcHRlOwogCQlwLT5pdGlyID0gbG9nX3NpemUgPDwgMjsKQEAgLTUyOCw3ICs1MzQsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAodGFyZ2V0X21hc2sgJiAweDEpIHsKLQkJcCA9ICZfX3Blcl9jcHVfaWR0cnNbY3B1XVswXVtzbG90XTsKKwkJcCA9IGlhNjRfaWR0cnNbY3B1XSArIHNsb3Q7CiAJCWlmICgocC0+cHRlJjB4MSkgJiYgaXNfdHJfb3ZlcmxhcChwLCBwLT5pZmEsIHAtPml0aXI+PjIpKSB7CiAJCQlwLT5wdGUgPSAwOwogCQkJaWE2NF9wdHIoMHgxLCBwLT5pZmEsIHAtPml0aXI+PjIpOwpAQCAtNTM3LDcgKzU0Myw3IEBACiAJfQogCiAJaWYgKHRhcmdldF9tYXNrICYgMHgyKSB7Ci0JCXAgPSAmX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1bc2xvdF07CisJCXAgPSBpYTY0X2lkdHJzW2NwdV0gKyBJQTY0X1RSX0FMTE9DX01BWCArIHNsb3Q7CiAJCWlmICgocC0+cHRlICYgMHgxKSAmJiBpc190cl9vdmVybGFwKHAsIHAtPmlmYSwgcC0+aXRpcj4+MikpIHsKIAkJCXAtPnB0ZSA9IDA7CiAJCQlpYTY0X3B0cigweDIsIHAtPmlmYSwgcC0+aXRpcj4+Mik7CkBAIC01NDYsOCArNTUyLDggQEAKIAl9CiAKIAlmb3IgKGkgPSBwZXJfY3B1KGlhNjRfdHJfdXNlZCwgY3B1KTsgaSA+PSBJQTY0X1RSX0FMTE9DX0JBU0U7IGktLSkgewotCQlpZiAoKF9fcGVyX2NwdV9pZHRyc1tjcHVdWzBdW2ldLnB0ZSAmIDB4MSkgfHwKLQkJCQkoX19wZXJfY3B1X2lkdHJzW2NwdV1bMV1baV0ucHRlICYgMHgxKSkKKwkJaWYgKCgoaWE2NF9pZHRyc1tjcHVdICsgaSktPnB0ZSAmIDB4MSkgfHwKKwkJICAgICgoaWE2NF9pZHRyc1tjcHVdICsgSUE2NF9UUl9BTExPQ19NQVggKyBpKS0+cHRlICYgMHgxKSkKIAkJCWJyZWFrOwogCX0KIAlwZXJfY3B1KGlhNjRfdHJfdXNlZCwgY3B1KSA9IGk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb19uby5oCmluZGV4IDdmNTc0MzYuLjM1OTA2NWQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaApAQCAtMyw2ICszLDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgogCiAvKgogICogVGhlc2UgYXJlIGZvciBJU0EvUENJIHNoYXJlZCBtZW1vcnkgX29ubHlfIGFuZCBzaG91bGQgbmV2ZXIgYmUgdXNlZApAQCAtMTY1LDE5ICsxNjYsNiBAQAogCiBleHRlcm4gdm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpOwogCi0vKiBQYWdlcyB0byBwaHlzaWNhbCBhZGRyZXNzLi4uICovCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIHBhZ2VfdG9fYnVzKHBhZ2UpICAgICAgICgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCi0KLS8qCi0gKiBNYWNyb3MgdXNlZCBmb3IgY29udmVydGluZyBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLgotICovCi0jZGVmaW5lIHBoeXNfdG9fdmlydCh2YWRkcikJKCh2b2lkICopICh2YWRkcikpCi0jZGVmaW5lIHZpcnRfdG9fcGh5cyh2YWRkcikJKCh1bnNpZ25lZCBsb25nKSAodmFkZHIpKQotCi0jZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwotI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKLQogLyoKICAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KICAqIGFjY2VzcwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX25vLmgKaW5kZXggMWYzMWIwNi4uODAyOWEzMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9uby5oCkBAIC01Niw4ICs1Niw4IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNkZWZpbmUgX19wYSh2YWRkcikJCXZpcnRfdG9fcGh5cygodm9pZCAqKSh2YWRkcikpCi0jZGVmaW5lIF9fdmEocGFkZHIpCQlwaHlzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpKHBhZGRyKSkKKyNkZWZpbmUgX19wYSh2YWRkcikJCSgodW5zaWduZWQgbG9uZykodmFkZHIpKQorI2RlZmluZSBfX3ZhKHBhZGRyKQkJKCh2b2lkICopKHBhZGRyKSkKIAogI2RlZmluZSB2aXJ0X3RvX3BmbihrYWRkcikJKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBmbl90b192aXJ0KHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaAppbmRleCAyMmFiMDVjLi4zZjgzNGIzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaApAQCAtMjYsNiArMjYsNyBAQAogfQogCiAvKiBQZXJtYW5lbnQgYWRkcmVzcyBvZiBhIHBhZ2UuICovCisjaWZkZWYgQ09ORklHX01NVQogI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSBcCiAJX19wYShQQUdFX09GRlNFVCArICgoKHBhZ2UpIC0gcGdfZGF0YV9tYXBbMF0ubm9kZV9tZW1fbWFwKSA8PCBQQUdFX1NISUZUKSkKQEAgLTM3LDYgKzM4LDkgQEAKIAlwYWdlX3RvX3BmbihfX3BhZ2UpIDw8IFBBR0VfU0hJRlQ7CQkJCVwKIH0pCiAjZW5kaWYKKyNlbHNlCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCisjZW5kaWYKIAogLyoKICAqIElPIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcywKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggZmQ3NjIwZi4uOTU0MTE3MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTUsOSArNSwxMiBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCi0JIyBIb3JyaWJsZSBzb3VyY2Ugb2YgY29uZnVzaW9uLiAgRGllLCBkaWUsIGRpZSAuLi4KLQlzZWxlY3QgRU1CRURERUQKLQlzZWxlY3QgUlRDX0xJQiBpZiAhTEVNT1RFX0ZVTE9PTkcyRQorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCisJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKKwlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCXNlbGVjdCBSVENfTElCIGlmICFNQUNIX0xPT05HU09OCiAKIG1haW5tZW51ICJMaW51eC9NSVBTIEtlcm5lbCBDb25maWd1cmF0aW9uIgogCkBAIC0yMiw2ICsyNSw3IEBACiAKIGNvbmZpZyBNQUNIX0FMQ0hFTVkKIAlib29sICJBbGNoZW15IHByb2Nlc3NvciBiYXNlZCBtYWNoaW5lcyIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UCiAKIGNvbmZpZyBBUjcKIAlib29sICJUZXhhcyBJbnN0cnVtZW50cyBBUjciCkBAIC0zNiw2ICs0MCw3IEBACiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MAogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgR0NECiAJc2VsZWN0IFZMWU5RCkBAIC00MywyMyArNDgsNiBAQAogCSAgU3VwcG9ydCBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIEFSNyBTeXN0ZW0tb24tYS1DaGlwCiAJICBmYW1pbHk6IFRORVRENzEwMCwgNzIwMCBhbmQgNzMwMC4KIAotY29uZmlnIEJBU0xFUl9FWENJVEUKLQlib29sICJCYXNsZXIgZVhjaXRlIHNtYXJ0IGNhbWVyYSIKLQlzZWxlY3QgQ0VWVF9SNEsKLQlzZWxlY3QgQ1NSQ19SNEsKLQlzZWxlY3QgRE1BX0NPSEVSRU5UCi0Jc2VsZWN0IEhXX0hBU19QQ0kKLQlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBJUlFfQ1BVX1JNN0sKLQlzZWxlY3QgSVJRX0NQVV9STTlLCi0Jc2VsZWN0IE1JUFNfUk05MTIyCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1JNOTAwMAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCi0JaGVscAotCSAgVGhlIGVYY2l0ZSBpcyBhIHNtYXJ0IGNhbWVyYSBwbGF0Zm9ybSBtYW51ZmFjdHVyZWQgYnkKLQkgIEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHLgotCiBjb25maWcgQkNNNDdYWAogCWJvb2wgIkJDTTQ3WFggYmFzZWQgYm9hcmRzIgogCXNlbGVjdCBDRVZUX1I0SwpAQCAtMTkyLDYgKzE4MCw3IEBACiAKIGNvbmZpZyBNQUNIX0xPT05HU09OCiAJYm9vbCAiTG9vbmdzb24gZmFtaWx5IG9mIG1hY2hpbmVzIgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IG9mIExvb25nc29uIGZhbWlseSBvZiBtYWNoaW5lcy4KIApAQCAtMjMzLDYgKzIyMiw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19NSVBTX0NNUAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTVVMVElUSFJFQURJTkcKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNQVJUTUlQUworCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1QKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1JUFMgVGVjaG5vbG9naWVzIE1hbHRhIGV2YWx1YXRpb24KIAkgIGJvYXJkLgpAQCAtMzM0LDYgKzMyNCwyNCBAQAogCSAgWW9zZW1pdGUgaXMgYW4gZXZhbHVhdGlvbiBib2FyZCBmb3IgdGhlIFJNOTAwMHgyIHByb2Nlc3NvcgogCSAgbWFudWZhY3R1cmVkIGJ5IFBNQy1TaWVycmEuCiAKK2NvbmZpZyBQT1dFUlRWCisJYm9vbCAiQ2lzY28gUG93ZXJUViIKKwlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBDRVZUX1I0SworCXNlbGVjdCBDUFVfTUlQU1IyX0lSUV9WSQorCXNlbGVjdCBDUFVfTUlQU1IyX0lSUV9FSQorCXNlbGVjdCBDU1JDX1BPV0VSVFYKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IyCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgVVNCX09IQ0lfTElUVExFX0VORElBTgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQ2lzY28gUG93ZXJUViBQbGF0Zm9ybS4KKwogY29uZmlnIFNHSV9JUDIyCiAJYm9vbCAiU0dJIElQMjIgKEluZHkvSW5kaWdvMikiCiAJc2VsZWN0IEFSQwpAQCAtNjc0LDExICs2ODIsMTEgQEAKIGVuZGNob2ljZQogCiBzb3VyY2UgImFyY2gvbWlwcy9hbGNoZW15L0tjb25maWciCi1zb3VyY2UgImFyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9iY202M3h4L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9qYXp6L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9sYXNhdC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG1jLXNpZXJyYS9LY29uZmlnIgorc291cmNlICJhcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvc2dpLWlwMjcvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3NpYnl0ZS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvdHh4OS9LY29uZmlnIgpAQCAtNzc4LDYgKzc4Niw5IEBACiBjb25maWcgQ1NSQ19JT0FTSUMKIAlib29sCiAKK2NvbmZpZyBDU1JDX1BPV0VSVFYKKwlib29sCisKIGNvbmZpZyBDU1JDX1I0S19MSUIKIAlib29sCiAKQEAgLTgwNiwyMCArODE3LDYgQEAKIGNvbmZpZyBETUFfTkVFRF9QQ0lfTUFQX1NUQVRFCiAJYm9vbAogCi1jb25maWcgRUFSTFlfUFJJTlRLCi0JYm9vbCAiRWFybHkgcHJpbnRrIiBpZiBFTUJFRERFRCAmJiBERUJVR19LRVJORUwKLQlkZXBlbmRzIG9uIFNZU19IQVNfRUFSTFlfUFJJTlRLCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzcGVjaWFsIGNvbnNvbGUgZHJpdmVycyB3aGljaCBhbGxvdyB0aGUga2VybmVsCi0JICB0byBwcmludCBtZXNzYWdlcyB2ZXJ5IGVhcmx5IGluIHRoZSBib290dXAgcHJvY2Vzcy4KLQotCSAgVGhpcyBpcyB1c2VmdWwgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcgd2hlbiB5b3VyIG1hY2hpbmUgY3Jhc2hlcyB2ZXJ5Ci0JICBlYXJseSBiZWZvcmUgdGhlIGNvbnNvbGUgY29kZSBpcyBpbml0aWFsaXplZC4gRm9yIG5vcm1hbCBvcGVyYXRpb24sCi0JICBpdCBpcyBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBpdCBsb29rcyB1Z2x5IG9uIHNvbWUgbWFjaGluZXMgYW5kCi0JICBkb2Vzbid0IGNvb3BlcmF0ZSB3aXRoIGFuIFggc2VydmVyLiBZb3Ugc2hvdWxkIG5vcm1hbGx5IHNheSBOIGhlcmUsCi0JICB1bmxlc3MgeW91IHdhbnQgdG8gZGVidWcgc3VjaCBhIGNyYXNoLgotCiBjb25maWcgU1lTX0hBU19FQVJMWV9QUklOVEsKIAlib29sCiAKQEAgLTEwNjksNiArMTA2NiwyMSBAQAogCSAgVGhlIExvb25nc29uIDJFIHByb2Nlc3NvciBpbXBsZW1lbnRzIHRoZSBNSVBTIElJSSBpbnN0cnVjdGlvbiBzZXQKIAkgIHdpdGggbWFueSBleHRlbnNpb25zLgogCisJICBJdCBoYXMgYW4gaW50ZXJuYWwgRlBHQSBub3J0aGJyaWRnZSwgd2hpY2ggaXMgY29tcGF0aWFibGUgdG8KKwkgIGJvbml0bzY0LgorCitjb25maWcgQ1BVX0xPT05HU09OMkYKKwlib29sICJMb29uZ3NvbiAyRiIKKwlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX0xPT05HU09OMkYKKwlzZWxlY3QgQ1BVX0xPT05HU09OMgorCWhlbHAKKwkgIFRoZSBMb29uZ3NvbiAyRiBwcm9jZXNzb3IgaW1wbGVtZW50cyB0aGUgTUlQUyBJSUkgaW5zdHJ1Y3Rpb24gc2V0CisJICB3aXRoIG1hbnkgZXh0ZW5zaW9ucy4KKworCSAgTG9vbmdzb24yRiBoYXZlIGJ1aWx0LWluIEREUjIgYW5kIFBDSVggY29udHJvbGxlci4gVGhlIFBDSVggY29udHJvbGxlcgorCSAgaGF2ZSBhIHNpbWlsYXIgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIHdpdGggRlBHQSBub3J0aGJyaWRnZSB1c2VkIGluCisJICBMb29uZ3NvbjJFLgorCiBjb25maWcgQ1BVX01JUFMzMl9SMQogCWJvb2wgIk1JUFMzMiBSZWxlYXNlIDEiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKQEAgLTEyOTQsNiArMTMwNiwxNiBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIFNZU19TVVBQT1JUU19aQk9PVAorCWJvb2wKKwlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAorCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCisKK2NvbmZpZyBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwCisJYm9vbAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1QKKwogY29uZmlnIENQVV9MT09OR1NPTjIKIAlib29sCiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKQEAgLTEzMDMsNiArMTMyNSwxMiBAQAogY29uZmlnIFNZU19IQVNfQ1BVX0xPT05HU09OMkUKIAlib29sCiAKK2NvbmZpZyBTWVNfSEFTX0NQVV9MT09OR1NPTjJGCisJYm9vbAorCXNlbGVjdCBDUFVfU1VQUE9SVFNfQ1BVRlJFUQorCXNlbGVjdCBDUFVfU1VQUE9SVFNfQUREUldJTkNGRyBpZiA2NEJJVAorCXNlbGVjdCBDUFVfU1VQUE9SVFNfVU5DQUNIRURfQUNDRUxFUkFURUQKKwogY29uZmlnIFNZU19IQVNfQ1BVX01JUFMzMl9SMQogCWJvb2wKIApAQCAtMTQxMSw4ICsxNDM5LDE3IEBACiAJYm9vbAogY29uZmlnIENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAlib29sCitjb25maWcgQ1BVX1NVUFBPUlRTX0NQVUZSRVEKKwlib29sCitjb25maWcgQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcKKwlib29sCiBjb25maWcgQ1BVX1NVUFBPUlRTX0hVR0VQQUdFUwogCWJvb2wKK2NvbmZpZyBDUFVfU1VQUE9SVFNfVU5DQUNIRURfQUNDRUxFUkFURUQKKwlib29sCitjb25maWcgTUlQU19QR0RfQzBfQ09OVEVYVAorCWJvb2wKKwlkZWZhdWx0IHkgaWYgNjRCSVQgJiYgQ1BVX01JUFNSMgogCiAjCiAjIFNldCB0byB5IGZvciBwdHJhY2UgYWNjZXNzIHRvIHdhdGNoIHJlZ2lzdGVycy4KQEAgLTIwMjQsMTUgKzIwNjEsNiBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAotY29uZmlnIFBST0JFX0lOSVRSRF9IRUFERVIKLQlib29sICJQcm9iZSBpbml0cmQgaGVhZGVyIGNyZWF0ZWQgYnkgYWRkaW5pdHJkIgotCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKLQloZWxwCi0JICBQcm9iZSBpbml0cmQgaGVhZGVyIGF0IHRoZSBsYXN0IHBhZ2Ugb2Yga2VybmVsIGltYWdlLgotCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGFyY2gvbWlwcy9ib290L2FkZGluaXRyZC5jIHRvCi0JICBhZGQgaW5pdHJkIG9yIGluaXRyYW1mcyBpbWFnZSB0byB0aGUga2VybmVsIGltYWdlLgotCSAgT3RoZXJ3aXNlLCBzYXkgTi4KLQogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCiBtZW51ICJCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpIgpAQCAtMjEwNCw2ICsyMTMyLDcgQEAKIAogY29uZmlnIEk4MjUzCiAJYm9vbAorCXNlbGVjdCBNSVBTX0VYVEVSTkFMX1RJTUVSCiAKIGNvbmZpZyBaT05FX0RNQTMyCiAJYm9vbApAQCAtMjE4MCw2ICsyMjA5LDggQEAKIAogZW5kbWVudQogCitzb3VyY2UgImFyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnIgorCiBzb3VyY2UgIm5ldC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggMzY0Y2E4OS4uZDJiODhhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTYsMTUgKzYsNjYgQEAKIAogc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKIAorY29uZmlnIEVBUkxZX1BSSU5USworCWJvb2wgIkVhcmx5IHByaW50ayIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFNZU19IQVNfRUFSTFlfUFJJTlRLCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzcGVjaWFsIGNvbnNvbGUgZHJpdmVycyB3aGljaCBhbGxvdyB0aGUga2VybmVsCisJICB0byBwcmludCBtZXNzYWdlcyB2ZXJ5IGVhcmx5IGluIHRoZSBib290dXAgcHJvY2Vzcy4KKworCSAgVGhpcyBpcyB1c2VmdWwgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcgd2hlbiB5b3VyIG1hY2hpbmUgY3Jhc2hlcyB2ZXJ5CisJICBlYXJseSBiZWZvcmUgdGhlIGNvbnNvbGUgY29kZSBpcyBpbml0aWFsaXplZC4gRm9yIG5vcm1hbCBvcGVyYXRpb24sCisJICBpdCBpcyBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBpdCBsb29rcyB1Z2x5IG9uIHNvbWUgbWFjaGluZXMgYW5kCisJICBkb2Vzbid0IGNvb3BlcmF0ZSB3aXRoIGFuIFggc2VydmVyLiBZb3Ugc2hvdWxkIG5vcm1hbGx5IHNheSBOIGhlcmUsCisJICB1bmxlc3MgeW91IHdhbnQgdG8gZGVidWcgc3VjaCBhIGNyYXNoLgorCitjb25maWcgQ01ETElORV9CT09MCisJYm9vbCAiQnVpbHQtaW4ga2VybmVsIGNvbW1hbmQgbGluZSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBGb3IgbW9zdCBzeXN0ZW1zLCBpdCBpcyBmaXJtd2FyZSBvciBzZWNvbmQgc3RhZ2UgYm9vdGxvYWRlciB0aGF0CisJICBieSBkZWZhdWx0IHNwZWNpZmllcyB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb25zLiAgSG93ZXZlciwKKwkgIGl0IG1pZ2h0IGJlIG5lY2Vzc2FyeSBvciBhZHZhbnRhZ2VvdXMgdG8gZWl0aGVyIG92ZXJyaWRlIHRoZQorCSAgZGVmYXVsdCBrZXJuZWwgY29tbWFuZCBsaW5lIG9yIGFkZCBhIGZldyBleHRyYSBvcHRpb25zIHRvIGl0LgorCSAgRm9yIHN1Y2ggY2FzZXMsIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gaGFyZGNvZGUgeW91ciBvd24KKwkgIGNvbW1hbmQgbGluZSBvcHRpb25zIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbC4gIEZvciB0aGF0LCB5b3UKKwkgIHNob3VsZCBjaG9vc2UgJ1knIGhlcmUsIGFuZCBmaWxsIGluIHRoZSBleHRyYSBib290IGFyZ3VtZW50cworCSAgaW4gQ09ORklHX0NNRExJTkUuCisKKwkgIFRoZSBidWlsdC1pbiBvcHRpb25zIHdpbGwgYmUgY29uY2F0ZW5hdGVkIHRvIHRoZSBkZWZhdWx0IGNvbW1hbmQKKwkgIGxpbmUgaWYgQ01ETElORV9PVkVSUklERSBpcyBzZXQgdG8gJ04nLiBPdGhlcndpc2UsIHRoZSBkZWZhdWx0CisJICBjb21tYW5kIGxpbmUgd2lsbCBiZSBpZ25vcmVkIGFuZCByZXBsYWNlZCBieSB0aGUgYnVpbHQtaW4gc3RyaW5nLgorCisJICBNb3N0IE1JUFMgc3lzdGVtcyB3aWxsIG5vcm1hbGx5IGV4cGVjdCAnTicgaGVyZSBhbmQgcmVseSB1cG9uCisJICB0aGUgY29tbWFuZCBsaW5lIGZyb20gdGhlIGZpcm13YXJlIG9yIHRoZSBzZWNvbmQtc3RhZ2UgYm9vdGxvYWRlci4KKwogY29uZmlnIENNRExJTkUKIAlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCiAJZGVmYXVsdCAiIgogCWhlbHAKIAkgIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IGZvciB0aGUgYm9vdCBsb2FkZXIgdG8KLQkgIHBhc3MgYXJndW1lbnRzIHRvIHRoZSBrZXJuZWwuIEZvciB0aGVzZSBwbGF0Zm9ybXMsIHlvdSBjYW4gc3VwcGx5Ci0JICBzb21lIGNvbW1hbmQtbGluZSBvcHRpb25zIGF0IGJ1aWxkIHRpbWUgYnkgZW50ZXJpbmcgdGhlbSBoZXJlLiAgSW4KLQkgIG90aGVyIGNhc2VzIHlvdSBjYW4gc3BlY2lmeSBrZXJuZWwgYXJncyBzbyB0aGF0IHlvdSBkb24ndCBoYXZlCi0JICB0byBzZXQgdGhlbSB1cCBpbiBib2FyZCBwcm9tIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorCSAgcGFzcyBhcmd1bWVudHMgdG8gdGhlIGtlcm5lbC4gIEZvciB0aGVzZSBwbGF0Zm9ybXMsIGFuZCBmb3IgdGhlIGNhc2VzCisJICB3aGVuIHlvdSB3YW50IHRvIGFkZCBzb21lIGV4dHJhIG9wdGlvbnMgdG8gdGhlIGNvbW1hbmQgbGluZSBvciBpZ25vcmUKKwkgIHRoZSBkZWZhdWx0IGNvbW1hbmQgbGluZSwgeW91IGNhbiBzdXBwbHkgc29tZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhdAorCSAgYnVpbGQgdGltZSBieSBlbnRlcmluZyB0aGVtIGhlcmUuICBJbiBvdGhlciBjYXNlcyB5b3UgY2FuIHNwZWNpZnkKKwkgIGtlcm5lbCBhcmdzIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gc2V0IHRoZW0gdXAgaW4gYm9hcmQgcHJvbQorCSAgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCisKKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIENNRExJTkVfQk9PTCBhbmQgQ01ETElORV9PVkVSUklERQorCSAgb3B0aW9ucy4KKworY29uZmlnIENNRExJTkVfT1ZFUlJJREUKKwlib29sICJCdWlsdC1pbiBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIGZpcndhcmUgYXJndW1lbnRzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQ01ETElORV9CT09MCisJaGVscAorCSAgQnkgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAnWScgeW91IHdpbGwgaGF2ZSB5b3VyIGtlcm5lbCBpZ25vcmUKKwkgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBmaXJtd2FyZSBvciBzZWNvbmQgc3RhZ2UgYm9vdGxvYWRlci4KKwkgIEluc3RlYWQsIHRoZSBidWlsdC1pbiBjb21tYW5kIGxpbmUgd2lsbCBiZSB1c2VkIGV4Y2x1c2l2ZWx5LgorCisJICBOb3JtYWxseSwgeW91IHdpbGwgY2hvb3NlICdOJyBoZXJlLgogCiBjb25maWcgREVCVUdfU1RBQ0tfVVNBR0UKIAlib29sICJFbmFibGUgc3RhY2sgdXRpbGl6YXRpb24gaW5zdHJ1bWVudGF0aW9uIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDc3ZjUwMjEuLjE4OTNlZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTQ4LDcgKzQ4LDE2IEBACiAgIGVuZGlmCiBlbmRpZgogCitpZm5kZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogY2ZsYWdzLXkgOj0gLWZmdW5jdGlvbi1zZWN0aW9ucworZW5kaWYKK2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKyAgaWZuZGVmIEtCVUlMRF9NQ09VTlRfUkFfQUREUkVTUworICAgIGlmZXEgKCQoY2FsbCBjYy1vcHRpb24teW4sLW1tY291bnQtcmEtYWRkcmVzcyksIHkpCisgICAgICBjZmxhZ3MteSArPSAtbW1jb3VudC1yYS1hZGRyZXNzIC1ES0JVSUxEX01DT1VOVF9SQV9BRERSRVNTCisgICAgZW5kaWYKKyAgZW5kaWYKK2VuZGlmCiBjZmxhZ3MteSArPSAkKGNhbGwgY2Mtb3B0aW9uLCAtbW5vLWNoZWNrLXplcm8tZGl2aXNpb24pCiAKIGlmZGVmIENPTkZJR18zMkJJVApAQCAtNjksNiArNzgsNyBAQAogCiBhbGwtJChDT05GSUdfQk9PVF9FTEYzMikJOj0gJCh2bWxpbnV4LTMyKQogYWxsLSQoQ09ORklHX0JPT1RfRUxGNjQpCTo9ICQodm1saW51eC02NCkKK2FsbC0kKENPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1QpKz0gdm1saW51egogCiAjCiAjIEdDQyB1c2VzIC1HIDAgLW1hYmljYWxscyAtZnBpYyBhcyBkZWZhdWx0LiAgV2UgZG9uJ3Qgd2FudCBQSUMgaW4gdGhlIGtlcm5lbApAQCAtMTI0LDYgKzEzNCw4IEBACiBjZmxhZ3MtJChDT05GSUdfQ1BVX0xPT05HU09OMikJKz0gLVdhLC0tdHJhcAogY2ZsYWdzLSQoQ09ORklHX0NQVV9MT09OR1NPTjJFKSArPSBcCiAJJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bG9vbmdzb24yZSwtbWFyY2g9cjQ2MDApCitjZmxhZ3MtJChDT05GSUdfQ1BVX0xPT05HU09OMkYpICs9IFwKKwkkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1sb29uZ3NvbjJmLC1tYXJjaD1yNDYwMCkKIAogY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMiwtbWlwczMyIC1VX01JUFNfSVNBIC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTMzIpIFwKIAkJCS1XYSwtbWlwczMyIC1XYSwtLXRyYXAKQEAgLTMyNCw2ICszMzYsNyBAQAogY2ZsYWdzLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3NvbiBcCiAgICAgICAgICAgICAgICAgICAgIC1tbm8tYnJhbmNoLWxpa2VseQogbG9hZC0kKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKSArPTB4ZmZmZmZmZmY4MDEwMDAwMAorbG9hZC0kKENPTkZJR19MRU1PVEVfTUFDSDJGKSArPTB4ZmZmZmZmZmY4MDIwMDAwMAogCiAjCiAjIE1JUFMgTWFsdGEgYm9hcmQKQEAgLTMzMSw3ICszNDQsNyBAQAogY29yZS0kKENPTkZJR19NSVBTX01BTFRBKQkrPSBhcmNoL21pcHMvbXRpLW1hbHRhLwogY2ZsYWdzLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1tYWx0YQogbG9hZC0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLWFsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSB2bWxpbnV4LmJpbgorYWxsLSQoQ09ORklHX01JUFNfTUFMVEEpCTo9IHZtbGludXouYmluCiAKICMKICMgTUlQUyBTSU0KQEAgLTM1NiwxMyArMzY5LDYgQEAKIGxvYWQtJChDT05GSUdfUE1DX1lPU0VNSVRFKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKIAogIwotIyBCYXNsZXIgZVhjaXRlCi0jCi1jb3JlLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCSs9IGFyY2gvbWlwcy9iYXNsZXIvZXhjaXRlLwotY2ZsYWdzLSQoQ09ORklHX0JBU0xFUl9FWENJVEUpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUKLWxvYWQtJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJKz0gMHg4MDEwMDAwMAotCi0jCiAjIExBU0FUIHBsYXRmb3JtcwogIwogY29yZS0kKENPTkZJR19MQVNBVCkJCSs9IGFyY2gvbWlwcy9sYXNhdC8KQEAgLTQ0MSw2ICs0NDcsMTMgQEAKIGxvYWQtJChDT05GSUdfTkVDX01BUktFSU5TKQkrPSAweGZmZmZmZmZmODgxMDAwMDAKIAogIworIyBDaXNjbyBQb3dlclRWIFBsYXRmb3JtCisjCitjb3JlLSQoQ09ORklHX1BPV0VSVFYpCQkrPSBhcmNoL21pcHMvcG93ZXJ0di8KK2NmbGFncy0kKENPTkZJR19QT1dFUlRWKSAgICAgICAgKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYKK2xvYWQtJChDT05GSUdfUE9XRVJUVikJCSs9IDB4ZmZmZmZmZmY5MDgwMDAwMAorCisjCiAjIFNHSSBJUDIyIChJbmR5L0luZGlnbzIpCiAjCiAjIFNldCB0aGUgbG9hZCBhZGRyZXNzIHRvID49IDB4ZmZmZmZmZmY4ODA2OTAwMCBpZiB5b3Ugd2FudCB0byBsZWF2ZSBzcGFjZSBmb3IKQEAgLTU4MSw3ICs1OTQsNyBAQAogZWxzZQogbG9hZC0kKENPTkZJR19TTklfUk0pCQkrPSAweGZmZmZmZmZmODAwMzAwMDAKIGVuZGlmCi1hbGwtJChDT05GSUdfU05JX1JNKQkJOj0gdm1saW51eC5lY29mZgorYWxsLSQoQ09ORklHX1NOSV9STSkJCTo9IHZtbGludXouZWNvZmYKIAogIwogIyBDb21tb24gVFh4OQpAQCAtNjk5LDkgKzcxMiwyMyBAQAogCSQoT0JKQ09QWSkgLU8gJCg2NGJpdC1iZmQpICQoT0JKQ09QWUZMQUdTKSAkPCAkQAogCiBtYWtlYm9vdCA9JChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9taXBzL2Jvb3QgVk1MSU5VWD0kKHZtbGludXgtMzIpICQoMSkKK21ha2V6Ym9vdCA9JChRKSQoTUFLRSkgJChidWlsZCk9YXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZCBcCisJICAgVk1MSU5VWF9MT0FEX0FERFJFU1M9JChsb2FkLXkpIDMyYml0LWJmZD0kKDMyYml0LWJmZCkgJCgxKQogCiBhbGw6CSQoYWxsLXkpCiAKK3ZtbGludXo6IHZtbGludXggRk9SQ0UKKwkrQCQoY2FsbCBtYWtlemJvb3QsJEApCisKK3ZtbGludXouYmluOiB2bWxpbnV4CisJK0AkKGNhbGwgbWFrZXpib290LCRAKQorCit2bWxpbnV6LmVjb2ZmOiB2bWxpbnV4CisJK0AkKGNhbGwgbWFrZXpib290LCRAKQorCit2bWxpbnV6LnNyZWM6IHZtbGludXgKKwkrQCQoY2FsbCBtYWtlemJvb3QsJEApCisKIHZtbGludXguYmluOiAkKHZtbGludXgtMzIpCiAJK0AkKGNhbGwgbWFrZWJvb3QsJEApCiAKQEAgLTcyNiwxMSArNzUzLDEzIEBACiAKIGluc3RhbGw6CiAJJChRKWluc3RhbGwgLUQgLW0gNzU1IHZtbGludXggJChJTlNUQUxMX1BBVEgpL3ZtbGludXgtJChLRVJORUxSRUxFQVNFKQorCSQoUSlpbnN0YWxsIC1EIC1tIDc1NSB2bWxpbnV6ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6LSQoS0VSTkVMUkVMRUFTRSkKIAkkKFEpaW5zdGFsbCAtRCAtbSA2NDQgLmNvbmZpZyAkKElOU1RBTExfUEFUSCkvY29uZmlnLSQoS0VSTkVMUkVMRUFTRSkKIAkkKFEpaW5zdGFsbCAtRCAtbSA2NDQgU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcC0kKEtFUk5FTFJFTEVBU0UpCiAKIGFyY2hjbGVhbjoKIAlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvYm9vdAorCUAkKE1BS0UpICQoY2xlYW4pPWFyY2gvbWlwcy9ib290L2NvbXByZXNzZWQKIAlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvbGFzYXQKIAogZGVmaW5lIGFyY2hoZWxwCkBAIC03MzgsMTAgKzc2NywxOCBAQAogCWVjaG8gJyAgdm1saW51eC5lY29mZiAgICAgICAgLSBFQ09GRiBib290IGltYWdlJwogCWVjaG8gJyAgdm1saW51eC5iaW4gICAgICAgICAgLSBSYXcgYmluYXJ5IGJvb3QgaW1hZ2UnCiAJZWNobyAnICB2bWxpbnV4LnNyZWMgICAgICAgICAtIFNSRUMgYm9vdCBpbWFnZScKKwllY2hvICcgIHZtbGludXogICAgICAgICAgICAgIC0gQ29tcHJlc3NlZCBib290KHpib290KSBpbWFnZScKKwllY2hvICcgIHZtbGludXouZWNvZmYgICAgICAgIC0gRUNPRkYgemJvb3QgaW1hZ2UnCisJZWNobyAnICB2bWxpbnV6LmJpbiAgICAgICAgICAtIFJhdyBiaW5hcnkgemJvb3QgaW1hZ2UnCisJZWNobyAnICB2bWxpbnV6LnNyZWMgICAgICAgICAtIFNSRUMgemJvb3QgaW1hZ2UnCiAJZWNobwogCWVjaG8gJyAgVGhlc2Ugd2lsbCBiZSBkZWZhdWx0IGFzIGFwcm9wcmlhdGUgZm9yIGEgY29uZmlndXJlZCBwbGF0Zm9ybS4nCiBlbmRlZgogCiBDTEVBTl9GSUxFUyArPSB2bWxpbnV4LjMyIFwKIAkgICAgICAgdm1saW51eC42NCBcCi0JICAgICAgIHZtbGludXguZWNvZmYKKwkgICAgICAgdm1saW51eC5lY29mZiBcCisJICAgICAgIHZtbGludXogXAorCSAgICAgICB2bWxpbnV6LmVjb2ZmIFwKKwkgICAgICAgdm1saW51ei5iaW4gXAorCSAgICAgICB2bWxpbnV6LnNyZWMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKaW5kZXggMTljMWM4Mi4uNWM2ODU2OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogCWRtYV9jYWNoZV93YmFja19pbnYoKHVuc2lnbmVkIGxvbmcpYnVmLCBuYnl0ZXMpOwogCWRwLT5kc2NyX2NtZDAgfD0gRFNDUl9DTUQwX1Y7CS8qIExldCBpdCByaXAgKi8KIAlhdV9zeW5jKCk7Ci0JZG1hX2NhY2hlX3diYWNrX2ludigodW5zaWduZWQgbG9uZylkcCwgc2l6ZW9mKGRwKSk7CisJZG1hX2NhY2hlX3diYWNrX2ludigodW5zaWduZWQgbG9uZylkcCwgc2l6ZW9mKCpkcCkpOwogCWN0cC0+Y2hhbl9wdHItPmRkbWFfZGJlbGwgPSAwOwogCiAJLyogR2V0IG5leHQgZGVzY3JpcHRvciBwb2ludGVyLgkqLwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJZG1hX2NhY2hlX2ludigodW5zaWduZWQgbG9uZylidWYsIG5ieXRlcyk7CiAJZHAtPmRzY3JfY21kMCB8PSBEU0NSX0NNRDBfVjsJLyogTGV0IGl0IHJpcCAqLwogCWF1X3N5bmMoKTsKLQlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKWRwLCBzaXplb2YoZHApKTsKKwlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKWRwLCBzaXplb2YoKmRwKSk7CiAJY3RwLT5jaGFuX3B0ci0+ZGRtYV9kYmVsbCA9IDA7CiAKIAkvKiBHZXQgbmV4dCBkZXNjcmlwdG9yIHBvaW50ZXIuCSovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKaW5kZXggODM1ZjNmMC4uODUxNjljMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJaW50IHJlczsKIAl1MzIgKmJvb3RjciwgdmFsOwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAotCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydFsyXTsKKwlzdGF0aWMgc3RydWN0IHVhcnRfcG9ydCB1YXJ0X3BvcnRbMl0gX19pbml0ZGF0YTsKIAogCW1lbXNldCh1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSAqIDIpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3Byb20uYyBiL2FyY2gvbWlwcy9hcjcvcHJvbS5jCmluZGV4IDVhZDZmMWQuLmMxZmRkMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvcHJvbS5jCkBAIC0yMTksMTQgKzIxOSw2IEBACiAJaWYgKHN0cnN0cihwcm9tX2dldGNtZGxpbmUoKSwgImNvbnNvbGU9IikpCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19LR0RCCi0JaWYgKCFzdHJzdHIocHJvbV9nZXRjbWRsaW5lKCksICJub2tnZGIiKSkgewotCQlzdHJjYXQocHJvbV9nZXRjbWRsaW5lKCksICIgY29uc29sZT1rZ2RiIik7Ci0JCWtnZGJfZW5hYmxlZCA9IDE7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQogCXMgPSBwcm9tX2dldGVudigibW9kZXR0eTAiKTsKIAlpZiAocykgewogCQliYXVkID0gc2ltcGxlX3N0cnRvdWwocywgJnAsIDEwKTsKQEAgLTI4MCwxMyArMjcyLDYgQEAKIAl3cml0ZWwodmFsdWUsICh2b2lkICopUE9SVChvZmZzZXQpKTsKIH0KIAotY2hhciBwcm9tX2dldGNoYXIodm9pZCkKLXsKLQl3aGlsZSAoIShzZXJpYWxfaW4oVUFSVF9MU1IpICYgVUFSVF9MU1JfRFIpKQotCQk7Ci0JcmV0dXJuIHNlcmlhbF9pbihVQVJUX1JYKTsKLX0KLQogaW50IHByb21fcHV0Y2hhcihjaGFyIGMpCiB7CiAJd2hpbGUgKChzZXJpYWxfaW4oVUFSVF9MU1IpICYgVUFSVF9MU1JfVEVNVCkgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL0tjb25maWcgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTUwNjA3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWNvbmZpZyBCQVNMRVJfRVhDSVRFX1BST1RPVFlQRQotCWJvb2wgIlN1cHBvcnQgZm9yIHByZS1yZWxlYXNlIHVuaXRzIgotCWRlcGVuZHMgb24gQkFTTEVSX0VYQ0lURQotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFByZS1zZXJpZXMgKHByb3RvdHlwZSkgdW5pdHMgYXJlIGRpZmZlcmVudCBmcm9tIGxhdGVyIG9uZXMgaW4KLQkgIHNvbWUgd2F5cy4gU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZS4gUGxlYXNlCi0JICBub3RlIHRoYXQgYSBrZXJuZWwgYnVpbHQgd2l0aCB0aGlzIG9wdGlvbiBzZWxlY3RlZCB3aWxsIG5vdCBiZQotCSAgYWJsZSB0byBydW4gb24gbm9ybWFsIHVuaXRzLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmMjljZi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgQmFzbGVyIGVYY2l0ZQotIwotCi1vYmotJChDT05GSUdfQkFTTEVSX0VYQ0lURSkJKz0gZXhjaXRlX2lycS5vIGV4Y2l0ZV9wcm9tLm8gZXhjaXRlX3NldHVwLm8gXAotCQkJCSAgIGV4Y2l0ZV9kZXZpY2UubyBleGNpdGVfcHJvY2ZzLm8KLQotb2JqLW0JCQkJKz0gZXhjaXRlX2lvZGV2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kZXZpY2UuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kZXZpY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwYmMyZC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKLSAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+Ci0KLSNpbmNsdWRlIDxleGNpdGUuaD4KLSNpbmNsdWRlIDxybTlrX2V0aC5oPgotI2luY2x1ZGUgPHJtOWtfd2R0Lmg+Ci0jaW5jbHVkZSA8cm05a194aWNhcC5oPgotI2luY2x1ZGUgPGV4Y2l0ZV9uYW5kZmxhc2guaD4KLQotI2luY2x1ZGUgImV4Y2l0ZV9pb2Rldi5oIgotCi0jZGVmaW5lIFJNOUtfR0VfVU5JVAkwCi0jZGVmaW5lIFhJQ0FQX1VOSVQJMAotI2RlZmluZSBOQU5EX1VOSVQJMAotCi0jZGVmaW5lIERMTF9USU1FT1VUCTMJCS8qIHNlY29uZHMgKi8KLQotCi0jZGVmaW5lIFJJTklUKF9fc3RhcnRfXywgX19lbmRfXywgX19uYW1lX18sIF9fcGFyZW50X18pIHsJXAotCS5uYW1lCT0gX19uYW1lX18gIl8wIiwJCQkJXAotCS5zdGFydAk9IChfX3N0YXJ0X18pLAkJCQkJXAotCS5lbmQJPSAoX19lbmRfXyksCQkJCQlcCi0JLmZsYWdzCT0gMCwJCQkJCQlcCi0JLnBhcmVudAk9IChfX3BhcmVudF9fKQkJCQkJXAotfQotCi0jZGVmaW5lIFJJTklUX0lSUShfX2lycV9fLCBfX25hbWVfXykgewlcCi0JLm5hbWUJPSBfX25hbWVfXyAiXzAiLAlcCi0JLnN0YXJ0CT0gKF9faXJxX18pLAkJXAotCS5lbmQJPSAoX19pcnFfXyksCQlcCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCVwKLQkucGFyZW50CT0gTlVMTAkJCVwKLX0KLQotCi0KLWVudW0gewotCXNsaWNlX3hpY2FwLAotCXNsaWNlX2V0aAotfTsKLQotCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UKLQlleGNpdGVfY3RyX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiR1BJIGNvdW50ZXJzIiwKLQkJLnN0YXJ0CQk9IDAsCi0JCS5lbmQJCT0gNSwKLQkJLmZsYWdzCQk9IDAsCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX0sCi0JZXhjaXRlX2dwaXNsaWNlX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiR1BJIHNsaWNlcyIsCi0JCS5zdGFydAkJPSAwLAotCQkuZW5kCQk9IDEsCi0JCS5mbGFncwkJPSAwLAotCQkucGFyZW50CQk9IE5VTEwsCi0JCS5zaWJsaW5nCT0gTlVMTCwKLQkJLmNoaWxkCQk9IE5VTEwKLQl9LAotCWV4Y2l0ZV9tZGlvX2NoYW5uZWxfcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7Ci0JCS5uYW1lCQk9ICJNRElPIGNoYW5uZWxzIiwKLQkJLnN0YXJ0CQk9IDAsCi0JCS5lbmQJCT0gMSwKLQkJLmZsYWdzCQk9IDAsCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX0sCi0JZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7Ci0JCS5uYW1lCQk9ICJGSUZPIG1lbW9yeSIsCi0JCS5zdGFydAkJPSAwLAotCQkuZW5kCQk9IDc2NywKLQkJLmZsYWdzCQk9IDAsCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX0sCi0JZXhjaXRlX3NjcmFtX3Jlc291cmNlIF9fbWF5YmVfdW51c2VkID0gewotCQkubmFtZQkJPSAiU2NyYXRjaCBSQU0iLAotCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfU0NSQU0sCi0JCS5lbmQJCT0gRVhDSVRFX1BIWVNfU0NSQU0gKyBFWENJVEVfU0laRV9TQ1JBTSAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkJLnBhcmVudAkJPSBOVUxMLAotCQkuc2libGluZwk9IE5VTEwsCi0JCS5jaGlsZAkJPSBOVUxMCi0JfSwKLQlleGNpdGVfZnBnYV9yZXNvdXJjZSBfX21heWJlX3VudXNlZCA9IHsKLQkJLm5hbWUJCT0gIlN5c3RlbSBGUEdBIiwKLQkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX0ZQR0EsCi0JCS5lbmQJCT0gRVhDSVRFX1BIWVNfRlBHQSArIEVYQ0lURV9TSVpFX0ZQR0EgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JCS5wYXJlbnQJCT0gTlVMTCwKLQkJLnNpYmxpbmcJPSBOVUxMLAotCQkuY2hpbGQJCT0gTlVMTAotCX0sCi0JZXhjaXRlX25hbmRfcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7Ci0JCS5uYW1lCQk9ICJOQU5EIGZsYXNoIGNvbnRyb2wiLAotCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfTkFORCwKLQkJLmVuZAkJPSBFWENJVEVfUEhZU19OQU5EICsgRVhDSVRFX1NJWkVfTkFORCAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkJLnBhcmVudAkJPSBOVUxMLAotCQkuc2libGluZwk9IE5VTEwsCi0JCS5jaGlsZAkJPSBOVUxMCi0JfSwKLQlleGNpdGVfdGl0YW5fcmVzb3VyY2UgX19tYXliZV91bnVzZWQgPSB7Ci0JCS5uYW1lCQk9ICJUSVRBTiByZWdpc3RlcnMiLAotCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfVElUQU4sCi0JCS5lbmQJCT0gRVhDSVRFX1BIWVNfVElUQU4gKyBFWENJVEVfU0laRV9USVRBTiAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkJLnBhcmVudAkJPSBOVUxMLAotCQkuc2libGluZwk9IE5VTEwsCi0JCS5jaGlsZAkJPSBOVUxMCi0JfTsKLQotCi0KLXN0YXRpYyB2b2lkIGFkanVzdF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBuKQotewotCXN0cnVjdCByZXNvdXJjZSAqcDsKLQljb25zdCB1bnNpZ25lZCBsb25nIG1hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0KLQkJCQkgICB8IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ETUE7Ci0KLQlmb3IgKHAgPSByZXM7IHAgPCByZXMgKyBuOyBwKyspIHsKLQkJY29uc3Qgc3RydWN0IHJlc291cmNlICogY29uc3QgcGFyZW50ID0gcC0+cGFyZW50OwotCQlpZiAocGFyZW50KSB7Ci0JCQlwLT5zdGFydCArPSBwYXJlbnQtPnN0YXJ0OwotCQkJcC0+ZW5kICAgKz0gcGFyZW50LT5zdGFydDsKLQkJCXAtPmZsYWdzID0gIHBhcmVudC0+ZmxhZ3MgJiBtYXNrOwotCQl9Ci0JfQotfQotCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSSkgfHwgZGVmaW5lZChDT05GSUdfRVhDSVRFX0ZDQVBfR1BJX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgeGljYXBfcnNyY1tdID0gewotCVJJTklUKDB4NDg0MCwgMHg0ODZmLCBYSUNBUF9SRVNPVVJDRV9GSUZPX1JYLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDQ5NDAsIDB4NDk0YiwgWElDQVBfUkVTT1VSQ0VfRklGT19UWCwgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCi0JUklOSVQoMHg1MDQwLCAweDUxMjcsIFhJQ0FQX1JFU09VUkNFX1hETUEsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4MTAwMCwgMHgxMTJmLCBYSUNBUF9SRVNPVVJDRV9QS1RQUk9DLCAmZXhjaXRlX3RpdGFuX3Jlc291cmNlKSwKLQlSSU5JVCgweDExMDAsIDB4MTEwZiwgWElDQVBfUkVTT1VSQ0VfUEtUX1NUUkVBTSwgJmV4Y2l0ZV9mcGdhX3Jlc291cmNlKSwKLQlSSU5JVCgweDA4MDAsIDB4MGJmZiwgWElDQVBfUkVTT1VSQ0VfRE1BREVTQywgJmV4Y2l0ZV9zY3JhbV9yZXNvdXJjZSksCi0JUklOSVQoc2xpY2VfeGljYXAsIHNsaWNlX3hpY2FwLCBYSUNBUF9SRVNPVVJDRV9HUElfU0xJQ0UsICZleGNpdGVfZ3Bpc2xpY2VfcmVzb3VyY2UpLAotCVJJTklUKDB4MDEwMCwgMHgwMmZmLCBYSUNBUF9SRVNPVVJDRV9GSUZPX0JMSywgJmV4Y2l0ZV9maWZvbWVtX3Jlc291cmNlKSwKLQlSSU5JVF9JUlEoVElUQU5fSVJRLCAgWElDQVBfUkVTT1VSQ0VfSVJRKQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgeGljYXBfcGRldiA9IHsKLQkubmFtZQkJPSBYSUNBUF9OQU1FLAotCS5pZAkJPSBYSUNBUF9VTklULAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh4aWNhcF9yc3JjKSwKLQkucmVzb3VyY2UJPSB4aWNhcF9yc3JjCi19OwotCi0vKgotICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgR1BJIHBvcnQgdGhhdCByZWNlaXZlcyB0aGUKLSAqIGltYWdlIGRhdGEgZnJvbSB0aGUgZW1iZWRkZWQgY2FtZXJhLgotICovCi1zdGF0aWMgaW50IF9faW5pdCB4aWNhcF9kZXZpbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0ZW5kOwotCXUzMiByZWc7Ci0JaW50IHJldHZhbDsKLQotCWFkanVzdF9yZXNvdXJjZXMoeGljYXBfcnNyYywgQVJSQVlfU0laRSh4aWNhcF9yc3JjKSk7Ci0KLQkvKiBQb3dlciB1cCB0aGUgc2xpY2UgYW5kIGNvbmZpZ3VyZSBpdC4gKi8KLQlyZWcgPSB0aXRhbl9yZWFkbChDUFRDMVIpOwotCXJlZyAmPSB+KDB4MTExMDAgPDwgc2xpY2VfeGljYXApOwotCXRpdGFuX3dyaXRlbChyZWcsIENQVEMxUik7Ci0KLQkvKiBFbmFibGUgc2xpY2UgJiBETEwuICovCi0JcmVnPSB0aXRhbl9yZWFkbChDUFJSKTsKLQlyZWcgJj0gfigweDAwMDMwMDAzIDw8IChzbGljZV94aWNhcCAqIDIpKTsKLQl0aXRhbl93cml0ZWwocmVnLCBDUFJSKTsKLQotCS8qIFdhaXQgZm9yIERMTHMgdG8gbG9jayAqLwotCXRlbmQgPSBqaWZmaWVzICsgRExMX1RJTUVPVVQgKiBIWjsKLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGVuZCkpIHsKLQkJaWYgKCEofnRpdGFuX3JlYWRsKENQRFNSKSAmICgweDEgPDwgKHNsaWNlX3hpY2FwICogNCkpKSkKLQkJCWJyZWFrOwotCQl5aWVsZCgpOwotCX0KLQotCWlmICh+dGl0YW5fcmVhZGwoQ1BEU1IpICYgKDB4MSA8PCAoc2xpY2VfeGljYXAgKiA0KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRExMIG5vdCBsb2NrZWQgYWZ0ZXIgJXUgc2Vjb25kc1xuIiwKLQkJICAgICAgIHhpY2FwX3BkZXYubmFtZSwgRExMX1RJTUVPVVQpOwotCQlyZXR2YWwgPSAtRVRJTUU7Ci0JfSBlbHNlIHsKLQkJLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovCi0JCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmeGljYXBfcGRldik7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotZGV2aWNlX2luaXRjYWxsKHhpY2FwX2RldmluaXQpOwotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0VYQ0lURV9GQ0FQX0dQSSkgfHwgZGVmaW5lZChDT05GSUdfRVhDSVRFX0ZDQVBfR1BJX01PRFVMRSkgKi8KLQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUEkpIHx8IGRlZmluZWQoQ09ORklHX1dEVF9STTlLX0dQSV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yc3JjW10gPSB7Ci0JUklOSVQoMCwgMCwgV0RUX1JFU09VUkNFX0NPVU5URVIsICZleGNpdGVfY3RyX3Jlc291cmNlKSwKLQlSSU5JVCgweDAwODQsIDB4MDA4ZiwgV0RUX1JFU09VUkNFX1JFR1MsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUX0lSUShUSVRBTl9JUlEsICBXRFRfUkVTT1VSQ0VfSVJRKQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2R0X3BkZXYgPSB7Ci0JLm5hbWUJCT0gV0RUX05BTUUsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcnNyYyksCi0JLnJlc291cmNlCT0gd2R0X3JzcmMKLX07Ci0KLS8qCi0gKiBDcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHRoZSBHUEkgcG9ydCB0aGF0IHJlY2VpdmVzIHRoZQotICogaW1hZ2UgZGF0YSBmcm9tIHRoZSBlbWJlZGRlZCBjYW1lcmEuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHdkdF9kZXZpbml0KHZvaWQpCi17Ci0JYWRqdXN0X3Jlc291cmNlcyh3ZHRfcnNyYywgQVJSQVlfU0laRSh3ZHRfcnNyYykpOwotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndkdF9wZGV2KTsKLX0KLQotZGV2aWNlX2luaXRjYWxsKHdkdF9kZXZpbml0KTsKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19XRFRfUk05S19HUEkpIHx8IGRlZmluZWQoQ09ORklHX1dEVF9STTlLX0dQSV9NT0RVTEUpICovCi0KLQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV4Y2l0ZV9uYW5kZmxhc2hfcnNyY1tdID0gewotIAlSSU5JVCgweDIwMDAsIDB4MjAxZiwgRVhDSVRFX05BTkRGTEFTSF9SRVNPVVJDRV9SRUdTLCAgJmV4Y2l0ZV9uYW5kX3Jlc291cmNlKQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXhjaXRlX25hbmRmbGFzaF9wZGV2ID0gewotCS5uYW1lCQk9ICJleGNpdGVfbmFuZCIsCi0JLmlkCQk9IE5BTkRfVU5JVCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXhjaXRlX25hbmRmbGFzaF9yc3JjKSwKLQkucmVzb3VyY2UJPSBleGNpdGVfbmFuZGZsYXNoX3JzcmMKLX07Ci0KLS8qCi0gKiBDcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHRoZSBhY2Nlc3MgdG8gdGhlIG5hbmQtZmxhc2gKLSAqIHBvcnQKLSAqLwotc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRmbGFzaF9kZXZpbml0KHZvaWQpCi17Ci0JYWRqdXN0X3Jlc291cmNlcyhleGNpdGVfbmFuZGZsYXNoX3JzcmMsIEFSUkFZX1NJWkUoZXhjaXRlX25hbmRmbGFzaF9yc3JjKSk7Ci0KLSAgICAgICAgLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUgKi8KLQotICAgICAgICAvKiBSZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8KLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZleGNpdGVfbmFuZGZsYXNoX3BkZXYpOwotfQotCi1kZXZpY2VfaW5pdGNhbGwoZXhjaXRlX25hbmRmbGFzaF9kZXZpbml0KTsKLQotCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9kZXZfcnNyY1tdID0gewotCVJJTklUX0lSUShGUEdBMV9JUlEsICBJT0RFVl9SRVNPVVJDRV9JUlEpCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb19wZGV2ID0gewotCS5uYW1lCQk9IElPREVWX05BTUUsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpb2Rldl9yc3JjKSwKLQkucmVzb3VyY2UJPSBpb2Rldl9yc3JjCi19OwotCi0vKgotICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgZXh0ZXJuYWwgSS9PIHBvcnRzLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBpb19kZXZpbml0KHZvaWQpCi17Ci0JYWRqdXN0X3Jlc291cmNlcyhpb2Rldl9yc3JjLCBBUlJBWV9TSVpFKGlvZGV2X3JzcmMpKTsKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb19wZGV2KTsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGlvX2RldmluaXQpOwotCi0KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUk05S19HRSkgfHwgZGVmaW5lZChDT05GSUdfUk05S19HRV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHJtOWtfZ2VfcnNyY1tdID0gewotCVJJTklUKDB4MjIwMCwgMHgyN2ZmLCBSTTlLX0dFX1JFU09VUkNFX01BQywgJmV4Y2l0ZV90aXRhbl9yZXNvdXJjZSksCi0JUklOSVQoMHgxODAwLCAweDFmZmYsIFJNOUtfR0VfUkVTT1VSQ0VfTVNUQVQsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4MjAwMCwgMHgyMTJmLCBSTTlLX0dFX1JFU09VUkNFX1BLVFBST0MsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4NTE0MCwgMHg1MjI3LCBSTTlLX0dFX1JFU09VUkNFX1hETUEsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4NDg3MCwgMHg0ODlmLCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9fUlgsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4NDk0YywgMHg0OTU3LCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9fVFgsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4MDAwMCwgMHgwMDdmLCBSTTlLX0dFX1JFU09VUkNFX0ZJRk9NRU1fUlgsICZleGNpdGVfZmlmb21lbV9yZXNvdXJjZSksCi0JUklOSVQoMHgwMDgwLCAweDAwZmYsIFJNOUtfR0VfUkVTT1VSQ0VfRklGT01FTV9UWCwgJmV4Y2l0ZV9maWZvbWVtX3Jlc291cmNlKSwKLQlSSU5JVCgweDAxODAsIDB4MDE5ZiwgUk05S19HRV9SRVNPVVJDRV9QSFksICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpLAotCVJJTklUKDB4MDAwMCwgMHgwM2ZmLCBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfUlgsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpLAotCVJJTklUKDB4MDQwMCwgMHgwN2ZmLCBSTTlLX0dFX1JFU09VUkNFX0RNQURFU0NfVFgsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpLAotCVJJTklUKHNsaWNlX2V0aCwgc2xpY2VfZXRoLCBSTTlLX0dFX1JFU09VUkNFX0dQSV9TTElDRSwgJmV4Y2l0ZV9ncGlzbGljZV9yZXNvdXJjZSksCi0JUklOSVQoMCwgMCwgUk05S19HRV9SRVNPVVJDRV9NRElPX0NIQU5ORUwsICZleGNpdGVfbWRpb19jaGFubmVsX3Jlc291cmNlKSwKLQlSSU5JVF9JUlEoVElUQU5fSVJRLCAgUk05S19HRV9SRVNPVVJDRV9JUlFfTUFJTiksCi0JUklOSVRfSVJRKFBIWV9JUlEsIFJNOUtfR0VfUkVTT1VSQ0VfSVJRX1BIWSkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJtOWtfZ2VfcGRldiA9IHsKLQkubmFtZQkJPSBSTTlLX0dFX05BTUUsCi0JLmlkCQk9IFJNOUtfR0VfVU5JVCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocm05a19nZV9yc3JjKSwKLQkucmVzb3VyY2UJPSBybTlrX2dlX3JzcmMKLX07Ci0KLQotCi0vKgotICogQ3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGZvciB0aGUgRXRoZXJuZXQgcG9ydC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgcm05a19nZV9kZXZpbml0KHZvaWQpCi17Ci0JdTMyIHJlZzsKLQotCWFkanVzdF9yZXNvdXJjZXMocm05a19nZV9yc3JjLCBBUlJBWV9TSVpFKHJtOWtfZ2VfcnNyYykpOwotCi0JLyogUG93ZXIgdXAgdGhlIHNsaWNlIGFuZCBjb25maWd1cmUgaXQuICovCi0JcmVnID0gdGl0YW5fcmVhZGwoQ1BUQzFSKTsKLQlyZWcgJj0gfigweDExMDAwIDw8IHNsaWNlX2V0aCk7Ci0JcmVnIHw9IDB4MTAwIDw8IHNsaWNlX2V0aDsKLQl0aXRhbl93cml0ZWwocmVnLCBDUFRDMVIpOwotCi0JLyogVGFrZSB0aGUgTUFDIG91dCBvZiByZXNldCwgcmVzZXQgdGhlIERMTHMuICovCi0JcmVnID0gdGl0YW5fcmVhZGwoQ1BSUik7Ci0JcmVnICY9IH4oMHgwMDAzMDAwMCA8PCAoc2xpY2VfZXRoICogMikpOwotCXJlZyB8PSAweDMgPDwgKHNsaWNlX2V0aCAqIDIpOwotCXRpdGFuX3dyaXRlbChyZWcsIENQUlIpOwotCi0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmcm05a19nZV9wZGV2KTsKLX0KLQotZGV2aWNlX2luaXRjYWxsKHJtOWtfZ2VfZGV2aW5pdCk7Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUk05S19HRSkgfHwgZGVmaW5lZChDT05GSUdfUk05S19HRV9NT0RVTEUpICovCi0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBleGNpdGVfc2V0dXBfZGV2cyh2b2lkKQotewotCWludCByZXM7Ci0JdTMyIHJlZzsKLQotCS8qIEVuYWJsZSB4ZG1hIGFuZCBmaWZvIGludGVycnVwdHMgKi8KLQlyZWcgPSB0aXRhbl9yZWFkbCgweDAwNTApOwotCXRpdGFuX3dyaXRlbChyZWcgfCAweDE4MDAwMDAwLCAweDAwNTApOwotCi0JcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfdGl0YW5fcmVzb3VyY2UpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0JcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfc2NyYW1fcmVzb3VyY2UpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0JcmVzID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZleGNpdGVfZnBnYV9yZXNvdXJjZSk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQlyZXMgPSByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmV4Y2l0ZV9uYW5kX3Jlc291cmNlKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCWV4Y2l0ZV9mcGdhX3Jlc291cmNlLmZsYWdzID0gZXhjaXRlX2ZwZ2FfcmVzb3VyY2UucGFyZW50LT5mbGFncyAmCi0JCQkJICAgKCBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0KLQkJCQkgICB8IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ETUEpOwotCWV4Y2l0ZV9uYW5kX3Jlc291cmNlLmZsYWdzID0gZXhjaXRlX25hbmRfcmVzb3VyY2UucGFyZW50LT5mbGFncyAmCi0JCQkJICAgKCBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0KLQkJCQkgICB8IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ETUEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoZXhjaXRlX3NldHVwX2RldnMpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzhiMWQwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IEJhc2xlciBWaXNpb24gVGVjaG5vbG9naWVzIEFHCi0gKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotCi0jaW5jbHVkZSAiZXhjaXRlX2lvZGV2LmgiCi0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlICppb2Rldl9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGlvZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwotc3RhdGljIGludCBpb2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBzc2l6ZV90IGlvZGV2X3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90IHMsIGxvZmZfdCAqKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgaW9kZXZfaXJxaGRsKGludCwgdm9pZCAqKTsKLQotCi0KLXN0YXRpYyBjb25zdCBjaGFyIGlvZGV2X25hbWVbXSA9ICJpb2RldiI7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGlvZGV2X2lycTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7Ci0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0KLXsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gaW9kZXZfb3BlbiwKLQkucmVsZWFzZQk9IGlvZGV2X3JlbGVhc2UsCi0JLnJlYWQJCT0gaW9kZXZfcmVhZCwKLQkucG9sbAkJPSBpb2Rldl9wb2xsCi19OwotCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9Ci17Ci0JLm1pbm9yCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKLQkubmFtZQkJPSBpb2Rldl9uYW1lLAotCS5mb3BzCQk9ICZmb3BzCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb2Rldl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJCT0gaW9kZXZfbmFtZSwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCQk9IGlvZGV2X3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaW9kZXZfcmVtb3ZlKSwKLX07Ci0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc291cmNlICoKLWlvZGV2X2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZHYsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JY2hhciBidWZbODBdOwotCWlmIChzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlc18wIiwgbmFtZSkgPj0gc2l6ZW9mIGJ1ZikKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGR2LCB0eXBlLCBidWYpOwotfQotCi0KLQotLyogTm8gaG90cGx1Z2dpbmcgb24gdGhlIHBsYXRmb3JtIGJ1cyAtIHVzZSBfX2luaXQgKi8KLXN0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiBjb25zdCByaSA9Ci0JCWlvZGV2X2dldF9yZXNvdXJjZShkZXYsIElPREVWX1JFU09VUkNFX0lSUSwgSU9SRVNPVVJDRV9JUlEpOwotCi0JaWYgKHVubGlrZWx5KCFyaSkpCi0JCXJldHVybiAtRU5YSU87Ci0KLQlpb2Rldl9pcnEgPSByaS0+c3RhcnQ7Ci0JcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJm1pc2NkZXYpOwotfQotCi0KLQotc3RhdGljIGludCBfX2V4aXQgaW9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbWlzY19kZXJlZ2lzdGVyKCZtaXNjZGV2KTsKLX0KLQotc3RhdGljIGludCBpb2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGlvZGV2X2lycSwgaW9kZXZfaXJxaGRsLCBJUlFGX0RJU0FCTEVELAotCQkJICAgaW9kZXZfbmFtZSwgJm1pc2NkZXYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpb2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCi17Ci0JZnJlZV9pcnEoaW9kZXZfaXJxLCAmbWlzY2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotCi0KLXN0YXRpYyBzc2l6ZV90Ci1pb2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAqZCwgc2l6ZV90IHMsIGxvZmZfdCAqbykKLXsKLQlzc2l6ZV90IHJldDsKLQlERUZJTkVfV0FJVCh3KTsKLQotCXByZXBhcmVfdG9fd2FpdCgmd3EsICZ3LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXNjaGVkdWxlKCk7Ci0JcmV0ID0gc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgPyAtRVJFU1RBUlRTWVMgOiAwOwotCWZpbmlzaF93YWl0KCZ3cSwgJncpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBpb2Rldl9wb2xsKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnApCi17Ci0JcG9sbF93YWl0KGYsICZ3cSwgcCk7Ci0JcmV0dXJuIFBPTExPVVQgfCBQT0xMV1JOT1JNOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW9kZXZfaXJxaGRsKGludCBpcnEsIHZvaWQgKmN0eHQpCi17Ci0Jd2FrZV91cCgmd3EpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpb2Rldl9pbml0X21vZHVsZSh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7Ci19Ci0KLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaW9kZXZfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaW9kZXZfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoaW9kZXZfY2xlYW51cF9tb2R1bGUpOwotCi0KLQotTU9EVUxFX0FVVEhPUigiVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkJhc2xlciBlWGNpdGUgaS9vIGludGVycnVwdCBoYW5kbGVyIik7Ci1NT0RVTEVfVkVSU0lPTigiMC4wIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuaCBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmZiYjVkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfX0VYQ0lURV9JT0RFVl9IX18KLSNkZWZpbmUgX19FWENJVEVfSU9ERVZfSF9fCi0KLS8qIERldmljZSBuYW1lICovCi0jZGVmaW5lIElPREVWX05BTUUJCSJpb2RldiIKLQotLyogUmVzb3VyY2UgbmFtZXMgKi8KLSNkZWZpbmUgSU9ERVZfUkVTT1VSQ0VfSVJRCSJleGNpdGVfaW9kZXZfaXJxIgotCi0jZW5kaWYgLyogX19FWENJVEVfSU9ERVZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaXJxLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNGUwYTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRwotICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcmViLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgotCi0jaW5jbHVkZSA8ZXhjaXRlLmg+Ci0KLWV4dGVybiBhc21saW5rYWdlIHZvaWQgZXhjaXRlX2hhbmRsZV9pbnQodm9pZCk7Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgotICovCi12b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCi17Ci0JbWlwc19jcHVfaXJxX2luaXQoKTsKLQlybTdrX2NwdV9pcnFfaW5pdCgpOwotCXJtOWtfY3B1X2lycV9pbml0KCk7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQotewotCWNvbnN0IHUzMgotCQlpbnRlcnJ1cHRzID0gcmVhZF9jMF9jYXVzZSgpID4+IDgsCi0JCW1hc2sgPSAoKHJlYWRfYzBfc3RhdHVzKCkgPj4gOCkgJiAweDAwMDAwMGZmKSB8Ci0JCSAgICAgICAocmVhZF9jMF9pbnRjb250cm9sKCkgJiAweDAwMDBmZjAwKSwKLQkJcGVuZGluZyA9IGludGVycnVwdHMgJiBtYXNrOwotCXUzMiBtc2dpbnRmbGFncywgbXNnaW50bWFzaywgbXNnaW50OwotCi0JLyogcHJvY2VzcyB0aW1lciBpbnRlcnJ1cHQgKi8KLQlpZiAocGVuZGluZyAmICgxIDw8IFRJTUVSX0lSUSkpIHsKLQkJZG9fSVJRKFRJTUVSX0lSUSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBQcm9jZXNzIFBDSSBpbnRlcnJ1cHRzICovCi0jaWYgVVNCX0lSUSA8IDEwCi0JbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKFVTQl9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludG1hc2sgID0gb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoVVNCX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7Ci0JbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKFVTQl9NU0dJTlQgJSAweDIwKSk7Ci0JaWYgKChwZW5kaW5nICYgKDEgPDwgVVNCX0lSUSkpICYmIG1zZ2ludCkgewotI2Vsc2UKLQlpZiAocGVuZGluZyAmICgxIDw8IFVTQl9JUlEpKSB7Ci0jZW5kaWYKLQkJZG9fSVJRKFVTQl9JUlEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUHJvY2VzcyBUSVRBTiBpbnRlcnJ1cHRzICovCi0JbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKFRJVEFOX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7Ci0JbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChUSVRBTl9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChUSVRBTl9NU0dJTlQgJSAweDIwKSk7Ci0JaWYgKChwZW5kaW5nICYgKDEgPDwgVElUQU5fSVJRKSkgJiYgbXNnaW50KSB7Ci0JCW9jZF93cml0ZWwobXNnaW50LCBJTlRQMENsZWFyMCArIChUSVRBTl9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCQlkb19JUlEoVElUQU5fSVJRKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFByb2Nlc3MgRlBHQSBsaW5lICMwIGludGVycnVwdHMgKi8KLQltc2dpbnRmbGFncyA9IG9jZF9yZWFkbChJTlRQMFN0YXR1czAgKyAoRlBHQTBfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKEZQR0EwX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7Ci0JbXNnaW50CSAgICA9IG1zZ2ludGZsYWdzICYgbXNnaW50bWFzayAmICgweDEgPDwgKEZQR0EwX01TR0lOVCAlIDB4MjApKTsKLQlpZiAoKHBlbmRpbmcgJiAoMSA8PCBGUEdBMF9JUlEpKSAmJiBtc2dpbnQpIHsKLQkJZG9fSVJRKEZQR0EwX0lSUSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBQcm9jZXNzIEZQR0EgbGluZSAjMSBpbnRlcnJ1cHRzICovCi0JbXNnaW50ZmxhZ3MgPSBvY2RfcmVhZGwoSU5UUDBTdGF0dXMwICsgKEZQR0ExX01TR0lOVCAvIDB4MjAgKiAweDEwKSk7Ci0JbXNnaW50bWFzayAgPSBvY2RfcmVhZGwoSU5UUDBNYXNrMCArIChGUEdBMV9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChGUEdBMV9NU0dJTlQgJSAweDIwKSk7Ci0JaWYgKChwZW5kaW5nICYgKDEgPDwgRlBHQTFfSVJRKSkgJiYgbXNnaW50KSB7Ci0JCWRvX0lSUShGUEdBMV9JUlEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUHJvY2VzcyBQSFkgaW50ZXJydXB0cyAqLwotCW1zZ2ludGZsYWdzID0gb2NkX3JlYWRsKElOVFAwU3RhdHVzMCArIChQSFlfTVNHSU5UIC8gMHgyMCAqIDB4MTApKTsKLQltc2dpbnRtYXNrICA9IG9jZF9yZWFkbChJTlRQME1hc2swICsgKFBIWV9NU0dJTlQgLyAweDIwICogMHgxMCkpOwotCW1zZ2ludAkgICAgPSBtc2dpbnRmbGFncyAmIG1zZ2ludG1hc2sgJiAoMHgxIDw8IChQSFlfTVNHSU5UICUgMHgyMCkpOwotCWlmICgocGVuZGluZyAmICgxIDw8IFBIWV9JUlEpKSAmJiBtc2dpbnQpIHsKLQkJZG9fSVJRKFBIWV9JUlEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUHJvY2VzcyBzcHVyaW91cyBpbnRlcnJ1cHRzICovCi0Jc3B1cmlvdXNfaW50ZXJydXB0KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvY2ZzLmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfcHJvY2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4OTIzZTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb2Nmcy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKLSAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgotICoKLSAqICBQcm9jZnMgc3VwcG9ydCBmb3IgQmFzbGVyIGVYY2l0ZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgotCi0jaW5jbHVkZSA8ZXhjaXRlLmg+Ci0KLXN0YXRpYyBpbnQgZXhjaXRlX3VuaXRfaWRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzZXFfcHJpbnRmKG0sICIlMDZ4IiwgdW5pdF9pZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZXhjaXRlX3VuaXRfaWRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBleGNpdGVfdW5pdF9pZF9wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleGNpdGVfdW5pdF9pZF9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGV4Y2l0ZV91bml0X2lkX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludAotZXhjaXRlX2Jvb3Ryb21fcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXZvaWQgX19pb21lbSAqIHNyYzsKLQotCWlmIChvZmYgPj0gRVhDSVRFX1NJWkVfQk9PVFJPTSkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKChvZmYgKyBjb3VudCkgPiBFWENJVEVfU0laRV9CT09UUk9NKQotCQljb3VudCA9IEVYQ0lURV9TSVpFX0JPT1RST00gLSBvZmY7Ci0KLQlzcmMgPSBpb3JlbWFwKEVYQ0lURV9QSFlTX0JPT1RST00gKyBvZmYsIGNvdW50KTsKLQlpZiAoc3JjKSB7Ci0JCW1lbWNweV9mcm9taW8ocGFnZSwgc3JjLCBjb3VudCk7Ci0JCWlvdW5tYXAoc3JjKTsKLQkJKnN0YXJ0ID0gcGFnZTsKLQl9IGVsc2UgewotCQljb3VudCA9IC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi12b2lkIGV4Y2l0ZV9wcm9jZnNfaW5pdCh2b2lkKQotewotCS8qIENyZWF0ZSAmIHBvcHVsYXRlIC9wcm9jL2V4Y2l0ZSAqLwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIGNvbnN0IHBkaXIgPSBwcm9jX21rZGlyKCJleGNpdGUiLCBOVUxMKTsKLQlpZiAocGRpcikgewotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBlOwotCi0JCWUgPSBwcm9jX2NyZWF0ZSgidW5pdF9pZCIsIFNfSVJVR08sIHBkaXIsCi0JCQkJJmV4Y2l0ZV91bml0X2lkX3Byb2NfZm9wcyk7Ci0JCWlmIChlKSBlLT5zaXplID0gNjsKLQotCQllID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiYm9vdHJvbSIsIFNfSVJVR08sIHBkaXIsCi0JCQkJCSAgIGV4Y2l0ZV9ib290cm9tX3JlYWQsIE5VTEwpOwotCQlpZiAoZSkgZS0+c2l6ZSA9IEVYQ0lURV9TSVpFX0JPT1RST007Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb20uYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9wcm9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDhiYzUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3Byb20uYworKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBieSBUaG9tYXMgS29lbGxlciAodGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbSkKLSAqICBCYXNlZCBvbiB0aGUgUE1DLVNpZXJyYSBZb3NlbWl0ZSBib2FyZCBzdXBwb3J0IGJ5IFJhbGYgQmFlY2hsZSBhbmQKLSAqICBNYW5pc2ggTGFjaHdhbmkuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcmVib290Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLQotI2luY2x1ZGUgPGV4Y2l0ZS5oPgotCi0vKiBUaGlzIHN0cnVjdCBpcyB1c2VkIGJ5IFJlZGJvb3QgdG8gcGFzcyBhcmd1bWVudHMgdG8gdGhlIGtlcm5lbCAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLQljaGFyICpuYW1lOwotCWNoYXIgKnZhbDsKLX0gdF9lbnZfdmFyOwotCi1zdHJ1Y3QgcGFybWJsb2NrIHsKLQl0X2Vudl92YXIgbWVtc2l6ZTsKLQl0X2Vudl92YXIgbW9kZXR0eTA7Ci0JdF9lbnZfdmFyIGV0aGFkZHI7Ci0JdF9lbnZfdmFyIGVudl9lbmQ7Ci0JY2hhciAqYXJndlsyXTsKLQljaGFyIHRleHRbMF07Ci19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHByb21fYXJnYzsKLXN0YXRpYyBjb25zdCBjaGFyICoqIHByb21fYXJndjsKLXN0YXRpYyBjb25zdCB0X2Vudl92YXIgKiBwcm9tX2VudjsKLQotc3RhdGljIHZvaWQgcHJvbV9oYWx0KHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1zdGF0aWMgdm9pZCBwcm9tX2V4aXQodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLQotCi0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiQmFzbGVyIGVYY2l0ZSI7Ci19Ci0KLS8qCi0gKiBIYWx0IHRoZSBzeXN0ZW0KLSAqLwotc3RhdGljIHZvaWQgcHJvbV9oYWx0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJcbioqIFN5c3RlbSBoYWx0ZWQuXG4iKTsKLQl3aGlsZSAoMSkKLQkJYXNtIHZvbGF0aWxlICgKLQkJCSJcdC5zZXRcdG1pcHMzXG4iCi0JCQkiXHR3YWl0XG4iCi0JCQkiXHQuc2V0XHRtaXBzMFxuIgotCQkpOwotfQotCi0vKgotICogUmVzZXQgdGhlIENQVSBhbmQgcmUtZW50ZXIgUmVkYm9vdAotICovCi1zdGF0aWMgdm9pZCBwcm9tX2V4aXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICogY29uc3QgZmxnID0KLQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKEVYQ0lURV9BRERSX0ZQR0EgKyBFWENJVEVfRlBHQV9EUFIpOwotCi0JLyogQ2xlYXIgdGhlIHdhdGNoZG9nIHJlc2V0IGZsYWcsIHNldCB0aGUgcmVib290IGZsYWcgKi8KLQkqZmxnICY9IH4weDAxOwotCSpmbGcgfD0gMHg4MDsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAgKEVYQ0lURV9BRERSX0ZQR0EgKyBFWENJVEVfRlBHQV9TWVNDVEwpID0gMHgwMjsKLQkJaW9iKCk7Ci0JCW1kZWxheSgxMDAwKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlc2V0IGZhaWxlZFxuIik7Ci0JcHJvbV9oYWx0KCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdCAqcHJvbV9nZXRlbnYoY2hhciAqbmFtZSkKLXsKLQljb25zdCB0X2Vudl92YXIgKiBwOwotCWZvciAocCA9IHByb21fZW52OyBwLT5uYW1lICE9IE5VTEw7IHArKykKLQkJaWYoc3RyY21wKG5hbWUsIHAtPm5hbWUpID09IDApCi0JCQlicmVhazsKLQlyZXR1cm4gcC0+dmFsOwotfQotCi0vKgotICogSW5pdCByb3V0aW5lIHdoaWNoIGFjY2VwdHMgdGhlIHZhcmlhYmxlcyBmcm9tIFJlZGJvb3QKLSAqLwotdm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCi17Ci0JY29uc3Qgc3RydWN0IHBhcm1ibG9jayAqIGNvbnN0IHBiID0gKHN0cnVjdCBwYXJtYmxvY2sgKikgZndfYXJnMjsKLQotCXByb21fYXJnYyA9IGZ3X2FyZzA7Ci0JcHJvbV9hcmd2ID0gKGNvbnN0IGNoYXIgKiopIGZ3X2FyZzE7Ci0JcHJvbV9lbnYgPSAmcGItPm1lbXNpemU7Ci0KLQkvKiBDYWxsYmFja3MgZm9yIGhhbHQsIHJlc3RhcnQgKi8KLQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQgKCopKGNoYXIgKikpIHByb21fZXhpdDsKLQlfbWFjaGluZV9oYWx0ID0gcHJvbV9oYWx0OwotCi0jaWZkZWYgQ09ORklHXzMyQklUCi0JLyogY29weSBjb21tYW5kIGxpbmUgKi8KLQlzdHJjcHkoYXJjc19jbWRsaW5lLCBwcm9tX2FyZ3ZbMV0pOwotCW1lbXNpemUgPSBzaW1wbGVfc3RydG9sKHByb21fZ2V0ZW52KCJtZW1zaXplIiksIE5VTEwsIDE2KTsKLQlzdHJjcHkobW9kZXR0eSwgcHJvbV9nZXRlbnYoIm1vZGV0dHkwIikpOwotI2VuZGlmIC8qIENPTkZJR18zMkJJVCAqLwotCi0jaWZkZWYgQ09ORklHXzY0QklUCi0jCWVycm9yIDY0IGJpdCBzdXBwb3J0IG5vdCBpbXBsZW1lbnRlZAotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwotfQotCi0vKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZyZWVfaW5pdG1lbSgpLCBzbyB3ZSBuZWVkIHRvIHByb3ZpZGUgaXQgKi8KLXZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQotewotCS8qIE5vdGhpbmcgdG8gZG8gKi8KLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9zZXR1cC5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NmIzYjguLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKLSAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgotICogIEJhc2VkIG9uIHRoZSBQTUMtU2llcnJhIFlvc2VtaXRlIGJvYXJkIHN1cHBvcnQgYnkgUmFsZiBCYWVjaGxlIGFuZAotICogIE1hbmlzaCBMYWNod2FuaS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS0zMi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3JtOWstb2NkLmg+Ci0KLSNpbmNsdWRlIDxleGNpdGUuaD4KLQotI2RlZmluZSBUSVRBTl9VQVJUX0NMSwkyNTAwMDAwMAotCi0jaWYgMQotLyogbm9ybWFsIHNlcmlhbCBwb3J0IGFzc2lnbm1lbnQgKi8KLSNkZWZpbmUgUkVHQkFTRV9TRVIwCTB4MDIwOAotI2RlZmluZSBSRUdCQVNFX1NFUjEJMHgwMjM4Ci0jZGVmaW5lIE1BU0tfU0VSMAkweDEKLSNkZWZpbmUgTUFTS19TRVIxCTB4MgotI2Vsc2UKLS8qIHNlcmlhbCBwb3J0cyBzd2FwcGVkICovCi0jZGVmaW5lIFJFR0JBU0VfU0VSMAkweDAyMzgKLSNkZWZpbmUgUkVHQkFTRV9TRVIxCTB4MDIwOAotI2RlZmluZSBNQVNLX1NFUjAJMHgyCi0jZGVmaW5lIE1BU0tfU0VSMQkweDEKLSNlbmRpZgotCi11bnNpZ25lZCBsb25nIG1lbXNpemU7Ci1jaGFyIG1vZGV0dHlbMzBdOwotdW5zaWduZWQgaW50IHRpdGFuX2lycSA9IFRJVEFOX0lSUTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKiBjdGxfcmVnczsKLXUzMiB1bml0X2lkOwotCi12b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBjb25zdCBvY2RfYmFzZSA9ICh2b2lkICopIChFWENJVEVfQUREUl9PQ0QpOwotdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogY29uc3QgdGl0YW5fYmFzZSA9ICh2b2lkICopIChFWENJVEVfQUREUl9USVRBTik7Ci0KLS8qIFByb3RlY3QgYWNjZXNzIHRvIHNoYXJlZCBHUEkgcmVnaXN0ZXJzICovCi1ERUZJTkVfU1BJTkxPQ0sodGl0YW5fbG9jayk7Ci1pbnQgdGl0YW5faXJxZmxhZ3M7Ci0KLQotLyoKLSAqIFRoZSBlWGNpdGUgcGxhdGZvcm0gdXNlcyB0aGUgYWx0ZXJuYXRlIHRpbWVyIGludGVycnVwdAotICoKLSAqIEZpeG1lOiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcgY2V2dC1yNGsuYyBkb2Vzbid0IHlldCBrbm93IGFib3V0IGhvdwotICogdG8gaGFuZGxlIHRoZSBhbHRlcm5hdGUgdGltZXIgaW50ZXJydXB0IG9mIHRoZSBSTTkwMDAuCi0gKi8KLXZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCi17Ci0JY29uc3QgdTMyIG1vZGViaXQ1ID0gb2NkX3JlYWRsKDB4MDBlNCk7Ci0JdW5zaWduZWQgaW50IG11bHQgPSAoKG1vZGViaXQ1ID4+IDExKSAmIDB4MWYpICsgMjsKLQl1bnNpZ25lZCBpbnQgZGl2ID0gKChtb2RlYml0NSA+PiAxNikgJiAweDFmKSArIDI7Ci0KLQlpZiAoZGl2ID09IDMzKQotCQlkaXYgPSAxOwotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IEVYQ0lURV9DUFVfRVhUX0NMT0NLICogbXVsdCAvIGRpdiAvIDI7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9pbml0X2NvbnNvbGUodm9pZCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkKLQlzdGF0aWMgX19pbml0ZGF0YSBjaGFyIHNlcnJbXSA9Ci0JCUtFUk5fRVJSICJTZXJpYWwgcG9ydCAjJXUgc2V0dXAgZmFpbGVkXG4iOwotCXN0cnVjdCB1YXJ0X3BvcnQgdXA7Ci0KLQkvKiBUYWtlIHRoZSBEVUFSVCBvdXQgb2YgcmVzZXQgKi8KLQl0aXRhbl93cml0ZWwoMHgwMGZmMWNmZiwgQ1BSUik7Ci0KLSNpZiAoQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTID4gMSkKLQkvKiBFbmFibGUgYm90aCBwb3J0cyAqLwotCXRpdGFuX3dyaXRlbChNQVNLX1NFUjAgfCBNQVNLX1NFUjEsIFVBQ0ZHKTsKLSNlbHNlCi0JLyogRW5hYmxlIHBvcnQgIzAgb25seSAqLwotCXRpdGFuX3dyaXRlbChNQVNLX1NFUjAsIFVBQ0ZHKTsKLSNlbmRpZgotCi0gCS8qCi0JICogU2V0IHVwIHNlcmlhbCBwb3J0ICMwLiBEbyBub3QgdXNlIGF1dG9kZXRlY3Rpb247IHRoZSByZXN1bHQgaXMKLQkgKiBub3Qgd2hhdCB3ZSB3YW50LgotIAkgKi8KLQltZW1zZXQoJnVwLCAwLCBzaXplb2YodXApKTsKLQl1cC5tZW1iYXNlCT0gKGNoYXIgKikgdGl0YW5fYWRkcihSRUdCQVNFX1NFUjApOwotCXVwLmlycQkJPSBUSVRBTl9JUlE7Ci0JdXAudWFydGNsawk9IFRJVEFOX1VBUlRfQ0xLOwotCXVwLnJlZ3NoaWZ0CT0gMDsKLQl1cC5pb3R5cGUJPSBVUElPX1JNOTAwMDsKLQl1cC50eXBlCQk9IFBPUlRfUk05MDAwOwotCXVwLmZsYWdzCT0gVVBGX1NIQVJFX0lSUTsKLQl1cC5saW5lCQk9IDA7Ci0JaWYgKGVhcmx5X3NlcmlhbF9zZXR1cCgmdXApKQotCQlwcmludGsoc2VyciwgdXAubGluZSk7Ci0KLSNpZiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMgPiAxCi0JLyogQW5kIG5vdyBmb3IgcG9ydCAjMS4gKi8KLQl1cC5tZW1iYXNlCT0gKGNoYXIgKikgdGl0YW5fYWRkcihSRUdCQVNFX1NFUjEpOwotCXVwLmxpbmUJCT0gMTsKLSAJaWYgKGVhcmx5X3NlcmlhbF9zZXR1cCgmdXApKQotCQlwcmludGsoc2VyciwgdXAubGluZSk7Ci0jZW5kaWYgLyogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTID4gMSAqLwotI2Vsc2UKLQkvKiBMZWF2ZSB0aGUgRFVBUlQgaW4gcmVzZXQgKi8KLQl0aXRhbl93cml0ZWwoMHgwMGZmM2NmZiwgQ1BSUik7Ci0jZW5kaWYgIC8qIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9wbGF0Zm9ybV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgY2hhciBidWZbM107Ci0JdTggcmVnOwotCXZvaWQgX19pb21lbSAqIGRwcjsKLQotCS8qIEJJVSBidWZmZXIgYWxsb2NhdGlvbnMgKi8KLQlvY2Rfd3JpdGVsKDgsIENQVVJTTE1UKTsJLyogQ1BVICovCi0JdGl0YW5fd3JpdGVsKDQsIENQR1JXTCk7CS8qIEdQSSAvIEV0aGVybmV0ICovCi0KLQkvKiBNYXAgY29udHJvbCByZWdpc3RlcnMgbG9jYXRlZCBpbiBGUEdBICovCi0JY3RsX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUoRVhDSVRFX1BIWVNfRlBHQSArIEVYQ0lURV9GUEdBX1NZU0NUTCwgMTYpOwotCWlmICghY3RsX3JlZ3MpCi0JCXBhbmljKCJlWGNpdGU6IGZhaWxlZCB0byBtYXAgcGxhdGZvcm0gY29udHJvbCByZWdpc3RlcnNcbiIpOwotCW1lbWNweV9mcm9taW8oYnVmLCBjdGxfcmVncyArIDIsIEFSUkFZX1NJWkUoYnVmKSk7Ci0JdW5pdF9pZCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCkgfCAoYnVmWzJdIDw8IDE2KTsKLQotCS8qIENsZWFyIHRoZSByZWJvb3QgZmxhZyAqLwotCWRwciA9IGlvcmVtYXBfbm9jYWNoZShFWENJVEVfUEhZU19GUEdBICsgRVhDSVRFX0ZQR0FfRFBSLCAxKTsKLQlyZWcgPSBfX3Jhd19yZWFkYihkcHIpOwotCV9fcmF3X3dyaXRlYihyZWcgJiAweDdmLCBkcHIpOwotCWlvdW5tYXAoZHByKTsKLQotCS8qIEludGVycnVwdCBjb250cm9sbGVyIHNldHVwICovCi0JZm9yIChpID0gSU5UUDBTdGF0dXMwOyBpIDwgSU5UUDBTdGF0dXMwICsgMHg4MDsgaSArPSAweDEwKSB7Ci0JCW9jZF93cml0ZWwoMHgwMDAwMDAwMCwgaSArIDB4MDQpOwotCQlvY2Rfd3JpdGVsKDB4ZmZmZmZmZmYsIGkgKyAweDBjKTsKLQl9Ci0Jb2NkX3dyaXRlbCgweDIsIE5NSUNPTkZJRyk7Ci0KLQlvY2Rfd3JpdGVsKDB4MSA8PCAoVElUQU5fTVNHSU5UICUgMHgyMCksCi0JCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChUSVRBTl9NU0dJTlQgLyAweDIwKSkpOwotCW9jZF93cml0ZWwoKDB4MSA8PCAoRlBHQTBfTVNHSU5UICUgMHgyMCkpCi0JCSAgIHwgb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoMHgxMCAqIChGUEdBMF9NU0dJTlQgLyAweDIwKSkpLAotCQkgICBJTlRQME1hc2swICsgKDB4MTAgKiAoRlBHQTBfTVNHSU5UIC8gMHgyMCkpKTsKLQlvY2Rfd3JpdGVsKCgweDEgPDwgKEZQR0ExX01TR0lOVCAlIDB4MjApKQotCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoRlBHQTFfTVNHSU5UIC8gMHgyMCkpKSwKLQkJICAgSU5UUDBNYXNrMCArICgweDEwICogKEZQR0ExX01TR0lOVCAvIDB4MjApKSk7Ci0Jb2NkX3dyaXRlbCgoMHgxIDw8IChQSFlfTVNHSU5UICUgMHgyMCkpCi0JCSAgIHwgb2NkX3JlYWRsKElOVFAwTWFzazAgKyAoMHgxMCAqIChQSFlfTVNHSU5UIC8gMHgyMCkpKSwKLQkJICAgSU5UUDBNYXNrMCArICgweDEwICogKFBIWV9NU0dJTlQgLyAweDIwKSkpOwotI2lmIFVTQl9JUlEgPCAxMAotCW9jZF93cml0ZWwoKDB4MSA8PCAoVVNCX01TR0lOVCAlIDB4MjApKQotCQkgICB8IG9jZF9yZWFkbChJTlRQME1hc2swICsgKDB4MTAgKiAoVVNCX01TR0lOVCAvIDB4MjApKSksCi0JCSAgIElOVFAwTWFzazAgKyAoMHgxMCAqIChVU0JfTVNHSU5UIC8gMHgyMCkpKTsKLSNlbmRpZgotCS8qIEVuYWJsZSB0aGUgcGFja2V0IEZJRk8sIFhETUEgYW5kIFhETUEgYXJiaXRlciAqLwotCXRpdGFuX3dyaXRlbCgweDAwZmYxOGZmLCBDUFJSKTsKLQotCS8qCi0JICogU2V0IHVwIHRoZSBQQURNVVguIFBvd2VyIGRvd24gYWxsIGV0aGVybmV0IHNsaWNlcywKLQkgKiB0aGV5IHdpbGwgYmUgcG93ZXJlZCB1cCBhbmQgY29uZmlndXJlZCBhdCBkZXZpY2Ugc3RhcnR1cC4KLQkgKi8KLQl0aXRhbl93cml0ZWwoMHgwMDg3ODIwNiwgQ1BUQzFSKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMTEwMCwgQ1BUQzBSKTsgLyogbGF0Y2ggUEFETVVYLCBlbmFibGUgV0NJTU9ERSAqLwotCi0JLyogUmVzZXQgYW5kIGVuYWJsZSB0aGUgRklGTyBibG9jayAqLwotCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAxLCBTRFJYRkNJRSk7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDEsIFNEVFhGQ0lFKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDEwMCwgU0RSWEZDSUUpOwotCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBTRFRYRkNJRSk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgdGhlIGNvbW1vbiBpbnRlcnJ1cHQgc2hhcmVkIGJ5IGFsbCBjb21wb25lbnRzIG9mCi0JICogdGhlIEdQSS9FdGhlcm5ldCBzdWJzeXN0ZW0uCi0JICovCi0JdGl0YW5fd3JpdGVsKChFWENJVEVfUEhZU19PQ0QgPj4gMTIpLCBDUENGRzApOwotCXRpdGFuX3dyaXRlbChUSVRBTl9NU0dJTlQsIENQQ0ZHMSk7Ci0KLQkvKgotCSAqIFhETUEgY29uZmlndXJhdGlvbi4KLQkgKiBJbiBvcmRlciBmb3IgdGhlIFhETUEgdG8gYmUgc2hhcmFibGUgYW1vbmcgbXVsdGlwbGUgZHJpdmVycywKLQkgKiB0aGUgc2V0dXAgbXVzdCBiZSBkb25lIGhlcmUgaW4gdGhlIHBsYXRmb3JtLiBUaGUgcmVhc29uIGlzIHRoYXQKLQkgKiB0aGlzIHNldHVwIGNhbiBvbmx5IGJlIGRvbmUgd2hpbGUgdGhlIFhETUEgaXMgaW4gcmVzZXQuIElmIHRoaXMKLQkgKiB3ZXJlIGRvbmUgaW4gYSBkcml2ZXIsIGl0IHdvdWxkIGludGVycnVwdCBhbGwgb3RoZXIgZHJpdmVycwotCSAqIHVzaW5nIHRoZSBYRE1BLgotCSAqLwotCXRpdGFuX3dyaXRlbCgweDgwMDIxZGZmLCBHWENGRyk7CS8qIFhETUEgcmVzZXQgKi8KLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BYQ0lTUkEpOwotCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBDUFhDSVNSQik7CS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotI2lmIGRlZmluZWQoQ09ORklHX0hJR0hNRU0pCi0jCWVycm9yIGNoYW5nZSBmb3IgSElHSE1FTSBzdXBwb3J0IQotI2Vsc2UKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgR1hETUFEUlBGWCk7CS8qIGJ1ZmZlciBhZGRyZXNzIHByZWZpeCAqLwotI2VuZGlmCi0JdGl0YW5fd3JpdGVsKDAsIEdYRE1BX0RFU0NBRFIpOwotCi0JZm9yIChpID0gMHg1MDQwOyBpIDw9IDB4NTMwMDsgaSArPSAweDAwNDApCi0JCXRpdGFuX3dyaXRlbCgweDgwMDgwMDAwLCBpKTsJLyogcmVzZXQgY2hhbm5lbCAqLwotCi0JdGl0YW5fd3JpdGVsKCgweDEgPDwgMjkpCQkJLyogbm8gc3BhcnNlIHR4IGRlc2NyLiAqLwotCQkgICAgIHwgKDB4MSA8PCAyOCkJCQkvKiBubyBzcGFyc2UgcnggZGVzY3IuICovCi0JCSAgICAgfCAoMHgxIDw8IDIzKSB8ICgweDEgPDwgMjQpCS8qIGRlc2NyaXB0b3IgY29oZXJlbmN5ICovCi0JCSAgICAgfCAoMHgxIDw8IDIxKSB8ICgweDEgPDwgMjIpCS8qIGRhdGEgY29oZXJlbmN5ICovCi0JCSAgICAgfCAoMHgxIDw8IDE3KQotCQkgICAgIHwgMHgxZGZmLAotCQkgICAgIEdYQ0ZHKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKLSMJZXJyb3IgTm8gU01QIHN1cHBvcnQKLSNlbHNlCi0JLyogQWxsIGludGVycnVwdHMgZ28gdG8gY29yZSAjMCBvbmx5LiAqLwotCXRpdGFuX3dyaXRlbCgweDFmMDA3ZmZmLCBDUERTVDBBKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDAwMCwgQ1BEU1QwQik7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMGZmM2YsIENQRFNUMUEpOwotCXRpdGFuX3dyaXRlbCgweDAwMDAwMDAwLCBDUERTVDFCKTsKLQl0aXRhbl93cml0ZWwoMHgwMGZmZmZmZiwgQ1BYRFNUQSk7Ci0JdGl0YW5fd3JpdGVsKDB4MDAwMDAwMDAsIENQWERTVEIpOwotI2VuZGlmCi0KLQkvKiBFbmFibGUgRFVBUlQgaW50ZXJydXB0cywgZGlzYWJsZSBldmVyeXRoaW5nIGVsc2UuICovCi0JdGl0YW5fd3JpdGVsKDB4MDQwMDAwMDAsIENQR0lHMEVSKTsKLQl0aXRhbl93cml0ZWwoMHgwMDAwMDBjMCwgQ1BHSUcxRVIpOwotCi0JZXhjaXRlX3Byb2Nmc19pbml0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCi17Ci0Jdm9sYXRpbGUgdTMyICogY29uc3QgYm9vdF9vY2RfYmFzZSA9ICh1MzIgKikgMHhiZjdmYzAwMDsKLQotCS8qIEFubm91bmNlIFJBTSB0byBzeXN0ZW0gKi8KLQlhZGRfbWVtb3J5X3JlZ2lvbigweDAwMDAwMDAwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOwotCi0JLyogU2V0IHVwIHRoZSBwZXJpcGhlcmFsIGFkZHJlc3MgbWFwICovCi0JKihib290X29jZF9iYXNlICsgKExLQjkgLyBzaXplb2YodTMyKSkpID0gMDsKLQkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMTAgLyBzaXplb2YodTMyKSkpID0gMDsKLQkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMTEgLyBzaXplb2YodTMyKSkpID0gMDsKLQkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMTIgLyBzaXplb2YodTMyKSkpID0gMDsKLQl3bWIoKTsKLQkqKGJvb3Rfb2NkX2Jhc2UgKyAoTEtCMCAvIHNpemVvZih1MzIpKSkgPSBFWENJVEVfUEhZU19PQ0QgPj4gNDsKLQl3bWIoKTsKLQotCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX1RJVEFOID4+IDQpIHwgMHgxVUwsIExLQjUpOwotCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9USVRBTiA+PiA0KSAmIDB4N2ZmZmZmMDApIC0gMHgxMDAsIExLTTUpOwotCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX1NDUkFNID4+IDQpIHwgMHgxVUwsIExLQjEzKTsKLQlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfU0NSQU0gPj4gNCkgJiAweGZmZmZmZjAwKSAtIDB4MTAwLCBMS00xMyk7Ci0KLQkvKiBMb2NhbCBidXMgc2xvdCAjMCAqLwotCW9jZF93cml0ZWwoMHgwMDA0MDUxMCwgTERQMCk7Ci0Jb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfQk9PVFJPTSA+PiA0KSB8IDB4MVVMLCBMS0I5KTsKLQlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfQk9PVFJPTSA+PiA0KSAmIDB4MDNmZmZmMDApIC0gMHgxMDAsIExLTTkpOwotCi0JLyogTG9jYWwgYnVzIHNsb3QgIzIgKi8KLQlvY2Rfd3JpdGVsKDB4MDAwMDAzMzAsIExEUDIpOwotCW9jZF93cml0ZWwoKEVYQ0lURV9QSFlTX0ZQR0EgPj4gNCkgfCAweDEsIExLQjExKTsKLQlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfRlBHQSA+PiA0KSAtIDB4MTAwKSAmIDB4MDNmZmZmMDAsIExLTTExKTsKLQotCS8qIExvY2FsIGJ1cyBzbG90ICMzICovCi0Jb2NkX3dyaXRlbCgweDAwMTIzNDEzLCBMRFAzKTsKLQlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19OQU5EID4+IDQpIHwgMHgxLCBMS0IxMik7Ci0Jb2NkX3dyaXRlbCgoKEVYQ0lURV9TSVpFX05BTkQgPj4gNCkgLSAweDEwMCkgJiAweDAzZmZmZjAwLCBMS00xMik7Ci19Ci0KLQotCi1jb25zb2xlX2luaXRjYWxsKGV4Y2l0ZV9pbml0X2NvbnNvbGUpOwotYXJjaF9pbml0Y2FsbChleGNpdGVfcGxhdGZvcm1faW5pdCk7Ci0KLUVYUE9SVF9TWU1CT0wodGl0YW5fbG9jayk7Ci1FWFBPUlRfU1lNQk9MKHRpdGFuX2lycWZsYWdzKTsKLUVYUE9SVF9TWU1CT0wodGl0YW5faXJxKTsKLUVYUE9SVF9TWU1CT0wob2NkX2Jhc2UpOwotRVhQT1JUX1NZTUJPTCh0aXRhbl9iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCBmYjI4NGMzLi5jNTE0MDVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xMDAsMTEgKzEwMCwxMSBAQAogCiBzdGF0aWMgX19pbml0IHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLQlzdGF0aWMgY2hhciBidWZbQ0xfU0laRV0gX19pbml0ZGF0YTsKKwlzdGF0aWMgY2hhciBidWZbQ09NTUFORF9MSU5FX1NJWkVdIF9faW5pdGRhdGE7CiAKIAkvKiBHZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZnJvbSBDRkUgKi8KLQlpZiAoY2ZlX2dldGVudigiTElOVVhfQ01ETElORSIsIGJ1ZiwgQ0xfU0laRSkgPj0gMCkgewotCQlidWZbQ0xfU0laRS0xXSA9IDA7CisJaWYgKGNmZV9nZXRlbnYoIkxJTlVYX0NNRExJTkUiLCBidWYsIENPTU1BTkRfTElORV9TSVpFKSA+PSAwKSB7CisJCWJ1ZltDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gMDsKIAkJc3RyY3B5KGFyY3NfY21kbGluZSwgYnVmKTsKIAl9CiAKQEAgLTExMiwxMyArMTEyLDEzIEBACiAJICogYXMgQ0ZFIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzLiAqLwogCWlmICgoc3Ryc3RyKGFyY3NfY21kbGluZSwgImNvbnNvbGU9IikpID09IE5VTEwpIHsKIAkJLyogVHJ5IHRvIHJlYWQgdGhlIGRlZmF1bHQgc2VyaWFsIHBvcnQgdXNlZCBieSBDRkUgKi8KLQkJaWYgKChjZmVfZ2V0ZW52KCJCT09UX0NPTlNPTEUiLCBidWYsIENMX1NJWkUpIDwgMCkKKwkJaWYgKChjZmVfZ2V0ZW52KCJCT09UX0NPTlNPTEUiLCBidWYsIENPTU1BTkRfTElORV9TSVpFKSA8IDApCiAJCSAgICB8fCAoc3RybmNtcCgidWFydCIsIGJ1ZiwgNCkpKQogCQkJLyogRGVmYXVsdCB0byB1YXJ0MCAqLwogCQkJc3RyY3B5KGJ1ZiwgInVhcnQwIik7CiAKIAkJLyogQ29tcHV0ZSB0aGUgbmV3IGNvbW1hbmQgbGluZSAqLwotCQlzbnByaW50ZihhcmNzX2NtZGxpbmUsIENMX1NJWkUsICIlcyBjb25zb2xlPXR0eVMlYywxMTUyMDAiLAorCQlzbnByaW50ZihhcmNzX2NtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFLCAiJXMgY29uc29sZT10dHlTJWMsMTE1MjAwIiwKIAkJCSBhcmNzX2NtZGxpbmUsIGJ1Zls0XSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCAwNWEzNWNmLi4xZmU0MTJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtMzQ2LDI3ICszNDYsMjYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJvYXJkX0ZBU1QyNDA0ID0gewotICAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIkZAU1QyNDA0IiwKLSAgICAgICAgLmV4cGVjdGVkX2NwdV9pZCAgICAgICAgICAgICAgICA9IDB4NjM0OCwKKwkubmFtZQkJCQk9ICJGQFNUMjQwNCIsCisJLmV4cGVjdGVkX2NwdV9pZAkJPSAweDYzNDgsCiAKLSAgICAgICAgLmhhc19lbmV0MCAgICAgICAgICAgICAgICAgICAgICA9IDEsCi0gICAgICAgIC5oYXNfZW5ldDEgICAgICAgICAgICAgICAgICAgICAgPSAxLAotICAgICAgICAuaGFzX3BjaSAgICAgICAgICAgICAgICAgICAgICAgID0gMSwKKwkuaGFzX2VuZXQwCQkJPSAxLAorCS5oYXNfZW5ldDEJCQk9IDEsCisJLmhhc19wY2kJCQk9IDEsCiAKLSAgICAgICAgLmVuZXQwID0gewotICAgICAgICAgICAgICAgIC5oYXNfcGh5ICAgICAgICAgICAgICAgID0gMSwKLSAgICAgICAgICAgICAgICAudXNlX2ludGVybmFsX3BoeSAgICAgICA9IDEsCi0gICAgICAgIH0sCisJLmVuZXQwID0geworCQkuaGFzX3BoeQkJPSAxLAorCQkudXNlX2ludGVybmFsX3BoeQk9IDEsCisJfSwKIAotICAgICAgICAuZW5ldDEgPSB7Ci0gICAgICAgICAgICAgICAgLmZvcmNlX3NwZWVkXzEwMCAgICAgICAgPSAxLAotICAgICAgICAgICAgICAgIC5mb3JjZV9kdXBsZXhfZnVsbCAgICAgID0gMSwKLSAgICAgICAgfSwKKwkuZW5ldDEgPSB7CisJCS5mb3JjZV9zcGVlZF8xMDAJPSAxLAorCQkuZm9yY2VfZHVwbGV4X2Z1bGwJPSAxLAorCX0sCiAKLQotICAgICAgICAuaGFzX29oY2kwID0gMSwKLSAgICAgICAgLmhhc19wY2NhcmQgPSAxLAotICAgICAgICAuaGFzX2VoY2kwID0gMSwKKwkuaGFzX29oY2kwCQkJPSAxLAorCS5oYXNfcGNjYXJkCQkJPSAxLAorCS5oYXNfZWhjaTAJCQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGJvYXJkX2luZm8gX19pbml0ZGF0YSBib2FyZF9EVjIwMUFNUiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY202M3h4L3Byb20uYwppbmRleCBmYjI4NGZiLi5iZTI1MmVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvcHJvbS5jCkBAIC00MCw5ICs0MCw2IEBACiAJcmVnICY9IH5tYXNrOwogCWJjbV9wZXJmX3dyaXRlbChyZWcsIFBFUkZfQ0tDVExfUkVHKTsKIAotCS8qIGFzc2lnbiBjb21tYW5kIGxpbmUgZnJvbSBrZXJuZWwgY29uZmlnICovCi0Jc3RyY3B5KGFyY3NfY21kbGluZSwgQ09ORklHX0NNRExJTkUpOwotCiAJLyogcmVnaXN0ZXIgZ3Bpb2NoaXAgKi8KIAliY202M3h4X2dwaW9faW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC8uZ2l0aWdub3JlIGIvYXJjaC9taXBzL2Jvb3QvLmdpdGlnbm9yZQppbmRleCBiYTYzNDAxLi40NjY3YTVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvbWlwcy9ib290Ly5naXRpZ25vcmUKQEAgLTEsNCArMSw1IEBACiBta2Jvb3QKIGVsZjJlY29mZgordm1saW51eC4qCiB6SW1hZ2UKIHpJbWFnZS50bXAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L01ha2VmaWxlIGIvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUKaW5kZXggMmEyMDlkNy4uZTM5YTA4ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Jvb3QvTWFrZWZpbGUKQEAgLTI1LDEwICsyNSwxMCBAQAogCiBWTUxJTlVYID0gdm1saW51eAogCi1hbGw6IHZtbGludXguZWNvZmYgdm1saW51eC5zcmVjIGFkZGluaXRyZAorYWxsOiB2bWxpbnV4LmVjb2ZmIHZtbGludXguc3JlYwogCiB2bWxpbnV4LmVjb2ZmOiAkKG9iaikvZWxmMmVjb2ZmICQoVk1MSU5VWCkKLQkkKG9iaikvZWxmMmVjb2ZmICQoVk1MSU5VWCkgdm1saW51eC5lY29mZiAkKEUyRUZMQUdTKQorCSQob2JqKS9lbGYyZWNvZmYgJChWTUxJTlVYKSAkKG9iaikvdm1saW51eC5lY29mZiAkKEUyRUZMQUdTKQogCiAkKG9iaikvZWxmMmVjb2ZmOiAkKG9iaikvZWxmMmVjb2ZmLmMKIAkkKEhPU1RDQykgLW8gJEAgJF4KQEAgLTM5LDExICszOSw3IEBACiB2bWxpbnV4LnNyZWM6ICQoVk1MSU5VWCkKIAkkKE9CSkNPUFkpIC1TIC1PIHNyZWMgJChzdHJpcC1mbGFncykgJChWTUxJTlVYKSAkKG9iaikvdm1saW51eC5zcmVjCiAKLSQob2JqKS9hZGRpbml0cmQ6ICQob2JqKS9hZGRpbml0cmQuYwotCSQoSE9TVENDKSAtbyAkQCAkXgotCi1jbGVhbi1maWxlcyArPSBhZGRpbml0cmQgXAotCSAgICAgICBlbGYyZWNvZmYgXAorY2xlYW4tZmlsZXMgKz0gZWxmMmVjb2ZmIFwKIAkgICAgICAgdm1saW51eC5iaW4gXAogCSAgICAgICB2bWxpbnV4LmVjb2ZmIFwKIAkgICAgICAgdm1saW51eC5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9hZGRpbml0cmQuYyBiL2FyY2gvbWlwcy9ib290L2FkZGluaXRyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWIzZmViLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9ib290L2FkZGluaXRyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBhZGRpbml0cmQgLSBwcm9ncmFtIHRvIGFkZCBhIGluaXRyZCBpbWFnZSB0byBhbiBlY29mZiBrZXJuZWwKLSAqCi0gKiAoQykgMTk5OSBUaG9tYXMgQm9nZW5kb2VyZmVyCi0gKiBtaW5vciBtb2RpZmljYXRpb25zLCBjbGVhbnVwOiBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgotICogZnVydGhlciBjbGVhbnVwOiBNYWNpZWogVy4gUm96eWNraQotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLSNpbmNsdWRlICJlY29mZi5oIgotCi0jZGVmaW5lIE1JUFNfUEFHRV9TSVpFCTQwOTYKLSNkZWZpbmUgTUlQU19QQUdFX01BU0sJKE1JUFNfUEFHRV9TSVpFLTEpCi0KLSNkZWZpbmUgc3dhYjE2KHgpIFwKLSAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoIFwKLSAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBzaG9ydCkoeCkgJiAodW5zaWduZWQgc2hvcnQpMHgwMGZmVSkgPDwgOCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgc2hvcnQpKHgpICYgKHVuc2lnbmVkIHNob3J0KTB4ZmYwMFUpID4+IDgpICkpCi0KLSNkZWZpbmUgc3dhYjMyKHgpIFwKLSAgICAgICAgKCh1bnNpZ25lZCBpbnQpKCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHgwMGZmMDAwMFVMKSA+PiAgOCkgfCBcCi0gICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSh4KSAmICh1bnNpZ25lZCBpbnQpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSkKLQotI2RlZmluZSBTV0FCKGEpCShzd2FiID8gc3dhYjMyKGEpIDogKGEpKQotCi12b2lkIGRpZShjaGFyICpzKQotewotCXBlcnJvcihzKTsKLQlleGl0KDEpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWludCBmZF92bWxpbnV4LCBmZF9pbml0cmQsIGZkX291dGZpbGU7Ci0JRklMSERSIGVmaWxlOwotCUFPVVRIRFIgZWFvdXQ7Ci0JU0NOSERSIGVzZWNzWzNdOwotCXN0cnVjdCBzdGF0IHN0OwotCWNoYXIgYnVmWzEwMjRdOwotCXVuc2lnbmVkIGxvbmcgbG9hZGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBpbml0cmRfaGVhZGVyWzJdOwotCWludCBpLCBjbnQ7Ci0JaW50IHN3YWIgPSAwOwotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlwcmludGYoIlVzYWdlOiAlcyA8dm1saW51eD4gPGluaXRyZD4gPG91dGZpbGU+XG4iLCBhcmd2WzBdKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlpZiAoKGZkX3ZtbGludXggPSBvcGVuIChhcmd2WzFdLCBPX1JET05MWSkpIDwgMCkKLQkJIGRpZSgib3BlbiB2bWxpbnV4Iik7Ci0JaWYgKHJlYWQgKGZkX3ZtbGludXgsICZlZmlsZSwgc2l6ZW9mIGVmaWxlKSAhPSBzaXplb2YgZWZpbGUpCi0JCWRpZSgicmVhZCBmaWxlIGhlYWRlciIpOwotCWlmIChyZWFkIChmZF92bWxpbnV4LCAmZWFvdXQsIHNpemVvZiBlYW91dCkgIT0gc2l6ZW9mIGVhb3V0KQotCQlkaWUoInJlYWQgYW91dCBoZWFkZXIiKTsKLQlpZiAocmVhZCAoZmRfdm1saW51eCwgZXNlY3MsIHNpemVvZiBlc2VjcykgIT0gc2l6ZW9mIGVzZWNzKQotCQlkaWUoInJlYWQgc2VjdGlvbiBoZWFkZXJzIik7Ci0JLyoKLQkgKiBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIGlzIGdvb2QgZm9yIHVzCi0JICovCi0JLyogVEJEICovCi0KLQkvKgotCSAqIGNoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3YWIgd29yZHMKLQkgKi8KLQlpZiAobnRvaHMoMHhhYTU1KSA9PSAweGFhNTUpIHsKLQkJaWYgKGVmaWxlLmZfbWFnaWMgPT0gc3dhYjE2KE1JUFNFTE1BR0lDKSkKLQkJCXN3YWIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChlZmlsZS5mX21hZ2ljID09IHN3YWIxNihNSVBTRUJNQUdJQykpCi0JCQlzd2FiID0gMTsKLQl9Ci0KLQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBlbXB0eSBkYXRhIHNlZ21lbnQgZm9yIHRoZSBpbml0cmQgKi8KLQlpZiAoZWFvdXQuZHNpemUgfHwgZXNlY3NbMV0uc19zaXplKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiRGF0YSBzZWdtZW50IG5vdCBlbXB0eS4gR2l2aW5nIHVwIVxuIik7Ci0JCWV4aXQoMSk7Ci0JfQotCWlmICgoZmRfaW5pdHJkID0gb3BlbiAoYXJndlsyXSwgT19SRE9OTFkpKSA8IDApCi0JCWRpZSgib3BlbiBpbml0cmQiKTsKLQlpZiAoZnN0YXQgKGZkX2luaXRyZCwgJnN0KSA8IDApCi0JCWRpZSgiZnN0YXQgaW5pdHJkIik7Ci0JbG9hZGFkZHIgPSAoKFNXQUIoZXNlY3NbMl0uc192YWRkcikgKyBTV0FCKGVzZWNzWzJdLnNfc2l6ZSkKLQkJCSsgTUlQU19QQUdFX1NJWkUtMSkgJiB+TUlQU19QQUdFX01BU0spIC0gODsKLQlpZiAobG9hZGFkZHIgPCAoU1dBQihlc2Vjc1syXS5zX3ZhZGRyKSArIFNXQUIoZXNlY3NbMl0uc19zaXplKSkpCi0JCWxvYWRhZGRyICs9IE1JUFNfUEFHRV9TSVpFOwotCWluaXRyZF9oZWFkZXJbMF0gPSBTV0FCKDB4NDk0RTUyNDQpOwotCWluaXRyZF9oZWFkZXJbMV0gPSBTV0FCKHN0LnN0X3NpemUpOwotCWVhb3V0LmRzaXplID0gZXNlY3NbMV0uc19zaXplID0gaW5pdHJkX2hlYWRlclsxXSA9IFNXQUIoc3Quc3Rfc2l6ZSs4KTsKLQllYW91dC5kYXRhX3N0YXJ0ID0gZXNlY3NbMV0uc192YWRkciA9IGVzZWNzWzFdLnNfcGFkZHIgPSBTV0FCKGxvYWRhZGRyKTsKLQotCWlmICgoZmRfb3V0ZmlsZSA9IG9wZW4gKGFyZ3ZbM10sIE9fUkRXUnxPX0NSRUFUfE9fVFJVTkMsIDA2NjYpKSA8IDApCi0JCWRpZSgib3BlbiBvdXRmaWxlIik7Ci0JaWYgKHdyaXRlIChmZF9vdXRmaWxlLCAmZWZpbGUsIHNpemVvZiBlZmlsZSkgIT0gc2l6ZW9mIGVmaWxlKQotCQlkaWUoIndyaXRlIGZpbGUgaGVhZGVyIik7Ci0JaWYgKHdyaXRlIChmZF9vdXRmaWxlLCAmZWFvdXQsIHNpemVvZiBlYW91dCkgIT0gc2l6ZW9mIGVhb3V0KQotCQlkaWUoIndyaXRlIGFvdXQgaGVhZGVyIik7Ci0JaWYgKHdyaXRlIChmZF9vdXRmaWxlLCBlc2Vjcywgc2l6ZW9mIGVzZWNzKSAhPSBzaXplb2YgZXNlY3MpCi0JCWRpZSgid3JpdGUgc2VjdGlvbiBoZWFkZXJzIik7Ci0JLyogc2tpcCBwYWRkaW5nICovCi0JaWYobHNlZWsoZmRfdm1saW51eCwgU1dBQihlc2Vjc1swXS5zX3NjbnB0ciksIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpCi0JCWRpZSgibHNlZWsgdm1saW51eCIpOwotCWlmKGxzZWVrKGZkX291dGZpbGUsIFNXQUIoZXNlY3NbMF0uc19zY25wdHIpLCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKQotCQlkaWUoImxzZWVrIG91dGZpbGUiKTsKLQkvKiBjb3B5IHRleHQgc2VnbWVudCAqLwotCWNudCA9IFNXQUIoZWFvdXQudHNpemUpOwotCXdoaWxlIChjbnQpIHsKLQkJaWYgKChpID0gcmVhZCAoZmRfdm1saW51eCwgYnVmLCBzaXplb2YgYnVmKSkgPD0gMCkKLQkJCWRpZSgicmVhZCB2bWxpbnV4Iik7Ci0JCWlmICh3cml0ZSAoZmRfb3V0ZmlsZSwgYnVmLCBpKSAhPSBpKQotCQkJZGllKCJ3cml0ZSB2bWxpbnV4Iik7Ci0JCWNudCAtPSBpOwotCX0KLQlpZiAod3JpdGUgKGZkX291dGZpbGUsIGluaXRyZF9oZWFkZXIsIHNpemVvZiBpbml0cmRfaGVhZGVyKSAhPSBzaXplb2YgaW5pdHJkX2hlYWRlcikKLQkJZGllKCJ3cml0ZSBpbml0cmQgaGVhZGVyIik7Ci0Jd2hpbGUgKChpID0gcmVhZCAoZmRfaW5pdHJkLCBidWYsIHNpemVvZiBidWYpKSA+IDApCi0JCWlmICh3cml0ZSAoZmRfb3V0ZmlsZSwgYnVmLCBpKSAhPSBpKQotCQkJZGllKCJ3cml0ZSBpbml0cmQiKTsKLQljbG9zZShmZF92bWxpbnV4KTsKLQljbG9zZShmZF9pbml0cmQpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxZDM0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTAsMCArMSw5NyBAQAorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLgorIworIyBBZGFwdGVkIGZvciBNSVBTIFBldGUgUG9wb3YsIERhbiBNYWxlaworIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgTGludXMgVG9ydmFsZHMKKyMgQWRhcHRlZCBmb3IgUG93ZXJQQyBieSBHYXJ5IFRob21hcworIyBtb2RpZmllZCBieSBDb3J0IChjb3J0QGNzLm5tdC5lZHUpCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIERTTGFiLCBMYW56aG91IFVuaXZlcnNpdHkKKyMgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorIworCisjIGNvbXByZXNzZWQga2VybmVsIGxvYWQgYWRkcjogVk1MSU5VWl9MT0FEX0FERFJFU1MgPiBWTUxJTlVYX0xPQURfQUREUkVTUyArIFZNTElOVVhfU0laRQorVk1MSU5VWF9TSVpFIDo9ICQoc2hlbGwgd2MgLWMgJChvYmp0cmVlKS8kKEtCVUlMRF9JTUFHRSkgMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYxKQorVk1MSU5VWF9TSVpFIDo9ICQoc2hlbGwgWyAtbiAiJChWTUxJTlVYX1NJWkUpIiBdICYmIGVjaG8gJCQoKCQoVk1MSU5VWF9TSVpFKSArICg2NTUzNiAtICQoVk1MSU5VWF9TSVpFKSAlIDY1NTM2KSkpKQorVk1MSU5VWl9MT0FEX0FERFJFU1MgOj0gMHgkKHNoZWxsIFsgLW4gIiQoVk1MSU5VWF9TSVpFKSIgXSAmJiBwcmludGYgJXggJCQoKCQoVk1MSU5VWF9MT0FEX0FERFJFU1MpICsgJChWTUxJTlVYX1NJWkUpKSkpCisKKyMgc2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIG1hbGxvY2luZyBhcmVhIGZvciBkZWNvbXByZXNzaW5nCitCT09UX0hFQVBfU0laRSA6PSAweDQwMDAwMAorCisjIERpc2FibGUgRnVuY3Rpb24gVHJhY2VyCitLQlVJTERfQ0ZMQUdTIDo9ICQoc2hlbGwgZWNobyAkKEtCVUlMRF9DRkxBR1MpIHwgc2VkIC1lICJzLy1wZy8vIikKKworS0JVSUxEX0NGTEFHUyA6PSAkKExJTlVYSU5DTFVERSkgJChLQlVJTERfQ0ZMQUdTKSAtRF9fS0VSTkVMX18gXAorCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgLUQiVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMPSQoVk1MSU5VWF9MT0FEX0FERFJFU1MpdWxsIiBcCisKK0tCVUlMRF9BRkxBR1MgOj0gJChMSU5VWElOQ0xVREUpICQoS0JVSUxEX0FGTEFHUykgLURfX0FTU0VNQkxZX18gXAorCS1ES0VSTkVMX0VOVFJZPTB4JChzaGVsbCAkKE5NKSAkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAyPi9kZXYvbnVsbCB8IGdyZXAgIiBrZXJuZWxfZW50cnkiIHwgY3V0IC1mMSAtZCBcICkgXAorCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkKKworb2JqLXkgOj0gJChvYmopL2hlYWQubyAkKG9iaikvZGVjb21wcmVzcy5vICQob2JqKS9kYmcubworCitvYmotJChDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCkgKz0gJChvYmopL3VhcnQtMTY1NTAubworCitPQkpDT1BZRkxBR1Nfdm1saW51eC5iaW4gOj0gJChPQkpDT1BZRkxBR1MpIC1PIGJpbmFyeSAtUiAuY29tbWVudCAtUworJChvYmopL3ZtbGludXguYmluOiAkKEtCVUlMRF9JTUFHRSkKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0daSVApICA9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKSA9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKSAgPSBsem1hCit0b29sXyQoQ09ORklHX0tFUk5FTF9HWklQKSAgICA9IGd6aXAKK3Rvb2xfJChDT05GSUdfS0VSTkVMX0JaSVAyKSAgID0gYnppcDIKK3Rvb2xfJChDT05GSUdfS0VSTkVMX0xaTUEpICAgID0gbHptYQorJChvYmopL3ZtbGludXguJChzdWZmaXhfeSk6ICQob2JqKS92bWxpbnV4LmJpbgorCSQoY2FsbCBpZl9jaGFuZ2VkLCQodG9vbF95KSkKKworJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LiQoc3VmZml4X3kpICQob2JqKS9kdW1teS5vCisJJChRKSQoT0JKQ09QWSkgJChPQkpDT1BZRkxBR1MpIFwKKwkJLS1hZGQtc2VjdGlvbj0uaW1hZ2U9JDwgXAorCQktLXNldC1zZWN0aW9uLWZsYWdzPS5pbWFnZT1jb250ZW50cyxhbGxvYyxsb2FkLHJlYWRvbmx5LGRhdGEgXAorCQkkKG9iaikvZHVtbXkubyAkQAorCitMREZMQUdTX3ZtbGludXogOj0gJChMREZMQUdTKSAtVHRleHQgJChWTUxJTlVaX0xPQURfQUREUkVTUykgLVQKK3ZtbGludXo6ICQoc3JjKS9sZC5zY3JpcHQgJChvYmoteSkgJChvYmopL3BpZ2d5Lm8KKwkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKKwkkKFEpJChPQkpDT1BZKSAkKE9CSkNPUFlGTEFHUykgJEAKKworIworIyBTb21lIERFQ3N0YXRpb25zIG5lZWQgYWxsIHBvc3NpYmxlIHNlY3Rpb25zIG9mIGFuIEVDT0ZGIGV4ZWN1dGFibGUKKyMKK2lmZGVmIENPTkZJR19NQUNIX0RFQ1NUQVRJT04KKyAgRTJFRkxBR1MgPSAtYQorZWxzZQorICBFMkVGTEFHUyA9CitlbmRpZgorCisjIGVsZjJlY29mZiBjYW4gb25seSBoYW5kbGUgMzJiaXQgaW1hZ2UKKworaWZkZWYgQ09ORklHXzMyQklUCisJVk1MSU5VWiA9IHZtbGludXoKK2Vsc2UKKwlWTUxJTlVaID0gdm1saW51ei4zMgorZW5kaWYKKwordm1saW51ei4zMjogdm1saW51egorCSQoUSkkKE9CSkNPUFkpIC1PICQoMzJiaXQtYmZkKSAkKE9CSkNPUFlGTEFHUykgJDwgJEAKKwordm1saW51ei5lY29mZjogJChvYmopLy4uL2VsZjJlY29mZiAkKFZNTElOVVopCisJJChRKSQob2JqKS8uLi9lbGYyZWNvZmYgJChWTUxJTlVaKSB2bWxpbnV6LmVjb2ZmICQoRTJFRkxBR1MpCisKKyQob2JqKS8uLi9lbGYyZWNvZmY6ICQoc3JjKS8uLi9lbGYyZWNvZmYuYworCSQoUSkkKEhPU1RDQykgLW8gJEAgJF4KKworT0JKQ09QWUZMQUdTX3ZtbGludXouYmluIDo9ICQoT0JKQ09QWUZMQUdTKSAtTyBiaW5hcnkKK3ZtbGludXouYmluOiB2bWxpbnV6CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworT0JKQ09QWUZMQUdTX3ZtbGludXouc3JlYyA6PSAkKE9CSkNPUFlGTEFHUykgLVMgLU8gc3JlYwordm1saW51ei5zcmVjOiB2bWxpbnV6CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworY2xlYW46CitjbGVhbi1maWxlcyArPSAqLm8gXAorCSAgICAgICB2bWxpbnUqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRkYzdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogTUlQUy1zcGVjaWZpYyBkZWJ1ZyBzdXBwb3J0IGZvciBwcmUtYm9vdCBlbnZpcm9ubWVudAorICoKKyAqIE5PVEU6IHB1dGMoKSBpcyBib2FyZCBzcGVjaWZpYywgaWYgeW91ciBib2FyZCBoYXZlIGEgMTY1NTAgY29tcGF0aWJsZSB1YXJ0LAorICogcGxlYXNlIHNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwIGZvciB5b3VyIG1hY2hpbmUuIG90aGV3aXNlLCB5b3UKKyAqIG5lZWQgdG8gaW1wbGVtZW50IHlvdXIgb3duIHB1dGMoKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBwdXRjKGNoYXIgYykKK3sKK30KKwordm9pZCBwdXRzKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciBjOworCXdoaWxlICgoYyA9ICpzKyspICE9ICdcMCcpIHsKKwkJcHV0YyhjKTsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCXB1dGMoJ1xyJyk7CisJfQorfQorCit2b2lkIHB1dGhleCh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQoreworCisJdW5zaWduZWQgY2hhciBidWZbMTBdOworCWludCBpOworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCWJ1ZltpXSA9ICIwMTIzNDU2Nzg5QUJDREVGIlt2YWwgJiAweDBGXTsKKwkJdmFsID4+PSA0OworCX0KKwlidWZbOF0gPSAnXDAnOworCXB1dHMoYnVmKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ZmQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogTWlzYy4gYm9vdGxvYWRlciBjb2RlIGZvciBtYW55IG1hY2hpbmVzLgorICoKKyAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNYXR0IFBvcnRlciA8bXBvcnRlckBtdmlzdGEuY29tPiBEZXJpdmVkIGZyb20KKyAqIGFyY2gvcHBjL2Jvb3QvcHJlcC9taXNjLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyogVGhlc2UgdHdvIHZhcmlhYmxlcyBzcGVjaWZ5IHRoZSBmcmVlIG1lbSByZWdpb24KKyAqIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRlbXBvcmFyeSBtYWxsb2MgYXJlYQorICovCit1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKK3Vuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKK2NoYXIgKnppbWFnZV9zdGFydDsKKworLyogVGhlIGxpbmtlciB0ZWxscyB1cyB3aGVyZSB0aGUgaW1hZ2UgaXMuICovCitleHRlcm4gdW5zaWduZWQgY2hhciBfX2ltYWdlX2JlZ2luLCBfX2ltYWdlX2VuZDsKKworLyogZGVidWcgaW50ZXJmYWNlcyAgKi8KK2V4dGVybiB2b2lkIHB1dHMoY29uc3QgY2hhciAqcyk7CitleHRlcm4gdm9pZCBwdXRoZXgodW5zaWduZWQgbG9uZyBsb25nIHZhbCk7CisKK3ZvaWQgZXJyb3IoY2hhciAqeCkKK3sKKwlwdXRzKCJcblxuIik7CisJcHV0cyh4KTsKKwlwdXRzKCJcblxuIC0tIFN5c3RlbSBoYWx0ZWQiKTsKKworCXdoaWxlICgxKQorCQk7CS8qIEhhbHQgKi8KK30KKworLyogYWN0aXZhdGUgdGhlIGNvZGUgZm9yIHByZS1ib290IGVudmlyb25tZW50ICovCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKworI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqcyA9IHNyYzsKKwljaGFyICpkID0gZGVzdDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWRbaV0gPSBzW2ldOworCXJldHVybiBkZXN0OworfQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKwlpbnQgaTsKKwljaGFyICpzcyA9IHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlzc1tpXSA9IGM7CisJcmV0dXJuIHM7Cit9CisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfYnVuemlwMi5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTUEKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKKyNlbmRpZgorCit2b2lkIGRlY29tcHJlc3Nfa2VybmVsKHVuc2lnbmVkIGxvbmcgYm9vdF9oZWFwX3N0YXJ0KQoreworCWludCB6aW1hZ2Vfc2l6ZTsKKworCS8qCisJICogV2UgbGluayBvdXJzZWxmIHRvIGFuIGFyYml0cmFyeSBsb3cgYWRkcmVzcy4gIFdoZW4gd2UgcnVuLCB3ZQorCSAqIHJlbG9jYXRlIG91dHNlbGYgdG8gdGhhdCBhZGRyZXNzLiAgX19pbWFnZV9iZWlnbiBwb2ludHMgdG8KKwkgKiB0aGUgcGFydCBvZiB0aGUgaW1hZ2Ugd2hlcmUgdGhlIHpJbWFnZSBpcy4gLS0gVG9tCisJICovCisJemltYWdlX3N0YXJ0ID0gKGNoYXIgKikodW5zaWduZWQgbG9uZykoJl9faW1hZ2VfYmVnaW4pOworCXppbWFnZV9zaXplID0gKHVuc2lnbmVkIGxvbmcpKCZfX2ltYWdlX2VuZCkgLQorCSAgICAodW5zaWduZWQgbG9uZykoJl9faW1hZ2VfYmVnaW4pOworCisJLyoKKwkgKiBUaGUgekltYWdlIGFuZCBpbml0cmQgd2lsbCBiZSBiZXR3ZWVuIHN0YXJ0IGFuZCBfZW5kLCBzbyB0aGV5J3ZlCisJICogYWxyZWFkeSBiZWVuIG1vdmVkIG9uY2UuICBXZSdyZSBnb29kIHRvIGdvIG5vdy4gLS0gVG9tCisJICovCisJcHV0cygiemltYWdlIGF0OiAgICAgIik7CisJcHV0aGV4KCh1bnNpZ25lZCBsb25nKXppbWFnZV9zdGFydCk7CisJcHV0cygiICIpOworCXB1dGhleCgodW5zaWduZWQgbG9uZykoemltYWdlX3NpemUgKyB6aW1hZ2Vfc3RhcnQpKTsKKwlwdXRzKCJcbiIpOworCisJLyogdGhpcyBhcmVhIGFyZSBwcmVwYXJlZCBmb3IgbWFsbG9jaW5nIHdoZW4gZGVjb21wcmVzc2luZyAqLworCWZyZWVfbWVtX3B0ciA9IGJvb3RfaGVhcF9zdGFydDsKKwlmcmVlX21lbV9lbmRfcHRyID0gYm9vdF9oZWFwX3N0YXJ0ICsgQk9PVF9IRUFQX1NJWkU7CisKKwkvKiBEaXNwbGF5IHN0YW5kYXJkIExpbnV4L01JUFMgYm9vdCBwcm9tcHQgZm9yIGtlcm5lbCBhcmdzICovCisJcHV0cygiVW5jb21wcmVzc2luZyBMaW51eCBhdCBsb2FkIGFkZHJlc3MgIik7CisJcHV0aGV4KFZNTElOVVhfTE9BRF9BRERSRVNTX1VMTCk7CisJcHV0cygiXG4iKTsKKwkvKiBEZWNvbXByZXNzIHRoZSBrZXJuZWwgd2l0aCBhY2NvcmRpbmcgYWxnb3JpdGhtICovCisJZGVjb21wcmVzcyh6aW1hZ2Vfc3RhcnQsIHppbWFnZV9zaXplLCAwLCAwLAorCQkgICAodm9pZCAqKVZNTElOVVhfTE9BRF9BRERSRVNTX1VMTCwgMCwgZXJyb3IpOworCS8qIEZJWE1FOiBpcyB0aGVyZSBhIG5lZWQgdG8gZmx1c2ggY2FjaGUgaGVyZT8gKi8KKwlwdXRzKCJOb3csIGJvb3RpbmcgdGhlIGtlcm5lbC4uLlxuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2R1bW15LmMgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkYmY0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZHVtbXkuYwpAQCAtMCwwICsxLDQgQEAKK2ludCBtYWluKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvaGVhZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjVhODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMCwwICsxLDU2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFdhbGRvcmYgRWxlY3Ryb25pY3MKKyAqIFdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlIGFuZCBBbmRyZWFzIEJ1c3NlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgLSAxOTk5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTS4gQW50b2luZQorICogTW9kaWZpZWQgZm9yIERFQ1N0YXRpb24gYW5kIGhlbmNlIFIzMDAwIHN1cHBvcnQgYnkgUGF1bCBNLiBBbnRvaW5lCisgKiBGdXJ0aGVyIG1vZGlmaWNhdGlvbnMgYnkgRGF2aWQgUy4gTWlsbGVyIGFuZCBIYXJhbGQgS29lcmZnZW4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisKKwkuc2V0IG5vcmVvcmRlcgorCS5jcHJlc3RvcmUKKwlMRUFGKHN0YXJ0KQorc3RhcnQ6CisJLyogU2F2ZSBib290IHJvbSBzdGFydCBhcmdzICovCisJbW92ZQlzMCwgYTAKKwltb3ZlCXMxLCBhMQorCW1vdmUJczIsIGEyCisJbW92ZQlzMywgYTMKKworCS8qIENsZWFyIEJTUyAqLworCVBUUl9MQQlhMCwgX2VkYXRhCisJUFRSX0xBCWEyLCBfZW5kCisxOglzdwl6ZXJvLCAwKGEwKQorCWJuZQlhMiwgYTAsIDFiCisJIGFkZGl1CWEwLCBhMCwgNAorCisJUFRSX0xBCWEwLCAoLmhlYXApICAgICAgICAgIC8qIGhlYXAgYWRkcmVzcyAqLworCVBUUl9MQSAgc3AsICguc3RhY2sgKyA4MTkyKSAgLyogc3RhY2sgYWRkcmVzcyAqLworCisJUFRSX0xBCXJhLCAyZgorCVBUUl9MQQlrMCwgZGVjb21wcmVzc19rZXJuZWwKKwlqcglrMAorCSBub3AKKzI6CisJbW92ZQlhMCwgczAKKwltb3ZlCWExLCBzMQorCW1vdmUJYTIsIHMyCisJbW92ZQlhMywgczMKKwlQVFJfTEkJazAsIEtFUk5FTF9FTlRSWQorCWpyCWswCisJIG5vcAorMzoKKwliCTNiCisJIG5vcAorCUVORChzdGFydCkKKworCS5jb21tIC5oZWFwLEJPT1RfSEVBUF9TSVpFLDQKKwkuY29tbSAuc3RhY2ssNDA5NioyLDQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvbGQuc2NyaXB0IGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9sZC5zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzYTM1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvbGQuc2NyaXB0CkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBsZC5zY3JpcHQgZm9yIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgb2YgTUlQUworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICovCisKK09VVFBVVF9BUkNIKG1pcHMpCitFTlRSWShzdGFydCkKK1NFQ1RJT05TCit7CisJLyogLiA9IFZNTElOVVpfTE9BRF9BRERSRVNTICovCisJLyogcmVhZC1vbmx5ICovCisJX3RleHQgPSAuOwkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLworCS50ZXh0CTogeworCQlfZnRleHQgPSAuIDsKKwkJKigudGV4dCkKKwkJKigucm9kYXRhKQorCX0gPSAwCisJX2V0ZXh0ID0gLjsJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLworCisJLyogd3JpdGFibGUgKi8KKwkuZGF0YQk6IHsJLyogRGF0YSAqLworCQlfZmRhdGEgPSAuIDsKKwkJKiguZGF0YSkKKwkJLyogUHV0IHRoZSBjb21wcmVzc2VkIGltYWdlIGhlcmUsIHNvIGJzcyBpcyBvbiB0aGUgZW5kLiAqLworCQlfX2ltYWdlX2JlZ2luID0gLjsKKwkJKiguaW1hZ2UpCisJCV9faW1hZ2VfZW5kID0gLjsKKwkJQ09OU1RSVUNUT1JTCisJfQorCS5zZGF0YQk6IHsgKiguc2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJX2VkYXRhICA9ICAuOwkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCisKKwkvKiBCU1MgKi8KKwlfX2Jzc19zdGFydCA9IC47CisJX2Zic3MgPSAuOworCS5zYnNzCTogeyAqKC5zYnNzKSAqKC5zY29tbW9uKSB9CisJLmJzcwk6IHsKKwkJKiguZHluYnNzKQorCQkqKC5ic3MpCisJCSooQ09NTU9OKQorCX0KKwkuICA9IEFMSUdOKDQpOworCV9lbmQgPSAuIDsKKworCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIEVMRiBiYWNrZW5kcyB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbiBjb252ZXJ0ZWQKKwkgKiB0byB0aGUgbmV3IHN0eWxlIGxpbmtlci4gICovCisKKwkuc3RhYiAwIDogeyAqKC5zdGFiKSB9CisJLnN0YWJzdHIgMCA6IHsgKiguc3RhYnN0cikgfQorCisJLyogVGhlc2UgbXVzdCBhcHBlYXIgcmVnYXJkbGVzcyBvZiAgLiAgKi8KKwkuZ3B0YWIuc2RhdGEgOiB7ICooLmdwdGFiLmRhdGEpICooLmdwdGFiLnNkYXRhKSB9CisJLmdwdGFiLnNic3MgOiB7ICooLmdwdGFiLmJzcykgKiguZ3B0YWIuc2JzcykgfQorCisJLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisJL0RJU0NBUkQvCTogeworCQkqKC5NSVBTLm9wdGlvbnMpCisJCSooLm9wdGlvbnMpCisJCSooLnBkcikKKwkJKigucmVnaW5mbykKKwkJKiguY29tbWVudCkKKwkJKigubm90ZSkKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtMTY1NTAuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC0xNjU1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Y2FhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtMTY1NTAuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogMTY1NTAgY29tcGF0aWJsZSB1YXJ0IGJhc2VkIHNlcmlhbCBkZWJ1ZyBzdXBwb3J0IGZvciB6Ym9vdAorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0xPT05HU09OKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01BTFRBKQorI2RlZmluZSBVQVJUX0JBU0UgMHgxZmQwMDNmOAorI2RlZmluZSBQT1JUKG9mZnNldCkgKENLU0VHMUFERFIoVUFSVF9CQVNFKSArIChvZmZzZXQpKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVI3CisjaW5jbHVkZSA8YXI3Lmg+CisjZGVmaW5lIFBPUlQob2Zmc2V0KSAoQ0tTRUcxQUREUihBUjdfUkVHU19VQVJUMCkgKyAoNCAqIG9mZnNldCkpCisjZW5kaWYKKworI2lmbmRlZiBQT1JUCisjZXJyb3IgcGxlYXNlIGRlZmluZSB0aGUgc2VyaWFsIHBvcnQgYWRkcmVzcyBmb3IgeW91ciBvd24gbWFjaGluZQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9pbihpbnQgb2Zmc2V0KQoreworCXJldHVybiAqKChjaGFyICopUE9SVChvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbF9vdXQoaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCSooKGNoYXIgKilQT1JUKG9mZnNldCkpID0gdmFsdWU7Cit9CisKK3ZvaWQgcHV0YyhjaGFyIGMpCit7CisJaW50IHRpbWVvdXQgPSAxMDI0OworCisJd2hpbGUgKCgoc2VyaWFsX2luKFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RIUkUpID09IDApICYmICh0aW1lb3V0LS0gPiAwKSkKKwkJOworCisJc2VyaWFsX291dChVQVJUX1RYLCBjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKaW5kZXggMTM5NDM2Mi4uM2U5ODc2MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiAjIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IENhdml1bSBOZXR3b3JrcwogIwogCi1vYmoteSA6PSBzZXR1cC5vIHNlcmlhbC5vIG9jdGVvbi1wbGF0Zm9ybS5vIG9jdGVvbi1pcnEubyBjc3JjLW9jdGVvbi5vCitvYmoteSA6PSBjcHUubyBzZXR1cC5vIHNlcmlhbC5vIG9jdGVvbi1wbGF0Zm9ybS5vIG9jdGVvbi1pcnEubyBjc3JjLW9jdGVvbi5vCiBvYmoteSArPSBkbWEtb2N0ZW9uLm8gZmxhc2hfc2V0dXAubwogb2JqLXkgKz0gb2N0ZW9uLW1lbWNweS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NwdS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZjUzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NwdS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLAorICogICB3cml0dGVuIGJ5IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL2NvcDIuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KKworc3RhdGljIGludCBjbm1pcHNfY3UyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCXZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENVMl9FWENFUFRJT046CisJCXByZWZldGNoKCZjdXJyZW50LT50aHJlYWQuY3AyKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlLU1RLX1NUQVRVUyhjdXJyZW50KSB8PSBTVDBfQ1UyOworCQlzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOworCQl3cml0ZV9jMF9zdGF0dXMoc3RhdHVzIHwgU1QwX0NVMik7CisJCW9jdGVvbl9jb3AyX3Jlc3RvcmUoJihjdXJyZW50LT50aHJlYWQuY3AyKSk7CisJCXdyaXRlX2MwX3N0YXR1cyhzdGF0dXMgJiB+U1QwX0NVMik7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlyZXR1cm4gTk9USUZZX0JBRDsJLyogRG9uJ3QgY2FsbCBkZWZhdWx0IG5vdGlmaWVyICovCisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsJCS8qIExldCBkZWZhdWx0IG5vdGlmaWVyIHNlbmQgc2lnbmFscyAqLworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNubWlwc19jdTJfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjbm1pcHNfY3UyX2NhbGwsCit9OworCitzdGF0aWMgaW50IGNubWlwc19jdTJfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfY3UyX25vdGlmaWVyKCZjbm1pcHNfY3UyX25vdGlmaWVyKTsKK30KK2Vhcmx5X2luaXRjYWxsKGNubWlwc19jdTJfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NzcmMtb2N0ZW9uLmMKaW5kZXggOTYxMTBmMi4uMGJmNGJiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jc3JjLW9jdGVvbi5jCkBAIC01MCw2ICs1MCwzOCBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJLyogNjQtYml0IGFyaXRobWF0aWMgY2FuIG92ZXJmbG93LCBzbyB1c2UgMTI4LWJpdC4gICovCisjaWYgKF9fR05VQ19fIDwgNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPD0gMykpCisJdTY0IHQxLCB0MiwgdDM7CisJdW5zaWduZWQgbG9uZyBsb25nIHJ2OworCXU2NCBtdWx0ID0gY2xvY2tzb3VyY2VfbWlwcy5tdWx0OworCXU2NCBzaGlmdCA9IGNsb2Nrc291cmNlX21pcHMuc2hpZnQ7CisJdTY0IGNudCA9IHJlYWRfYzBfY3ZtY291bnQoKTsKKworCWFzbSAoCisJCSJkbXVsdHVcdCVbY250XSwlW211bHRdXG5cdCIKKwkJIm5vclx0JVt0MV0sJDAsJVtzaGlmdF1cblx0IgorCQkibWZoaVx0JVt0Ml1cblx0IgorCQkibWZsb1x0JVt0M11cblx0IgorCQkiZHNsbFx0JVt0Ml0sJVt0Ml0sMVxuXHQiCisJCSJkc3Jsdlx0JVtydl0sJVt0M10sJVtzaGlmdF1cblx0IgorCQkiZHNsbHZcdCVbdDFdLCVbdDJdLCVbdDFdXG5cdCIKKwkJIm9yXHQlW3J2XSwlW3QxXSwlW3J2XVxuXHQiCisJCTogW3J2XSAiPSZyIiAocnYpLCBbdDFdICI9JnIiICh0MSksIFt0Ml0gIj0mciIgKHQyKSwgW3QzXSAiPSZyIiAodDMpCisJCTogW2NudF0gInIiIChjbnQpLCBbbXVsdF0gInIiIChtdWx0KSwgW3NoaWZ0XSAiciIgKHNoaWZ0KQorCQk6ICJoaSIsICJsbyIpOworCXJldHVybiBydjsKKyNlbHNlCisJLyogR0NDID4gNC4zIGRvIGl0IHRoZSBlYXN5IHdheS4gICovCisJdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKG1vZGUoVEkpKSkgdDsKKwl0ID0gcmVhZF9jMF9jdm1jb3VudCgpOworCXQgPSB0ICogY2xvY2tzb3VyY2VfbWlwcy5tdWx0OworCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSh0ID4+IGNsb2Nrc291cmNlX21pcHMuc2hpZnQpOworI2VuZGlmCit9CisKIHZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCiB7CiAJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAzMDA7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCmluZGV4IGJlNzExZGQuLmNmZGI0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCkBAIC0xNTksNiArMTU5LDk0IEBACiB9CiBkZXZpY2VfaW5pdGNhbGwob2N0ZW9uX3JuZ19kZXZpY2VfaW5pdCk7CiAKKy8qIE9jdGVvbiBTTUkvTURJTyBpbnRlcmZhY2UuICAqLworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX21kaW9idXNfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvY3Rlb25faXNfc2ltdWxhdGlvbigpKQorCQlyZXR1cm4gMDsgLyogTm8gbWRpbyBpbiB0aGUgc2ltdWxhdG9yLiAqLworCisJLyogVGhlIGJ1cyBudW1iZXIgaXMgdGhlIHBsYXRmb3JtX2RldmljZSBpZC4gICovCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIm1kaW8tb2N0ZW9uIiwgMCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gcmV0OworZmFpbDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKKworb3V0OgorCXJldHVybiByZXQ7CisKK30KK2RldmljZV9pbml0Y2FsbChvY3Rlb25fbWRpb2J1c19kZXZpY2VfaW5pdCk7CisKKy8qIE9jdGVvbiBtZ210IHBvcnQgRXRoZXJuZXQgaW50ZXJmYWNlLiAgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZ210X2RldmljZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldCA9IDA7CisJaW50IHBvcnQsIG51bV9wb3J0czsKKworCXN0cnVjdCByZXNvdXJjZSBtZ210X3BvcnRfcmVzb3VyY2UgPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAtMSwKKwkJLmVuZAk9IC0xCisJfTsKKworCWlmICghT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpICYmICFPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCkpCisJCXJldHVybiAwOworCisJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKSkKKwkJbnVtX3BvcnRzID0gMTsKKwllbHNlCisJCW51bV9wb3J0cyA9IDI7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgbnVtX3BvcnRzOyBwb3J0KyspIHsKKwkJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIm9jdGVvbl9tZ210IiwgcG9ydCk7CisJCWlmICghcGQpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlzd2l0Y2ggKHBvcnQpIHsKKwkJY2FzZSAwOgorCQkJbWdtdF9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gT0NURU9OX0lSUV9NSUkwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCW1nbXRfcG9ydF9yZXNvdXJjZS5zdGFydCA9IE9DVEVPTl9JUlFfTUlJMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwkJbWdtdF9wb3J0X3Jlc291cmNlLmVuZCA9IG1nbXRfcG9ydF9yZXNvdXJjZS5zdGFydDsKKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZCwgJm1nbXRfcG9ydF9yZXNvdXJjZSwgMSk7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwl9CisJcmV0dXJuIHJldDsKK2ZhaWw6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworCit9CitkZXZpY2VfaW5pdGNhbGwob2N0ZW9uX21nbXRfZGV2aWNlX2luaXQpOworCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBEYW5leSA8ZGRhbmV5QGNhdml1bW5ldHdvcmtzLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGxhdGZvcm0gZHJpdmVyIGZvciBPY3Rlb24gU09DIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMgYi9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKaW5kZXggYjUxNjQ0Mi4uZWMzYjJjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYwpAQCAtOTcsMjYgKzk3LDE4IEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQogewotCWludCBuYXJnLCBpbmR4LCBwb3NuLCBuY2hyOwogCXVuc2lnbmVkIGxvbmcgbWVtc3o7CisJaW50IGFyZ2MsIGk7CiAJY2hhciAqKmFyZ3Y7CiAKIAltZW1zeiA9IGZ3X2FyZzAgJiAweDdmZmYwMDAwOwotCW5hcmcgPSBmd19hcmcwICYgMHgwMDAwZmZmZjsKKwlhcmdjID0gZndfYXJnMCAmIDB4MDAwMGZmZmY7CisJYXJndiA9IChjaGFyICoqKWZ3X2FyZzE7CiAKLQlpZiAobmFyZykgewotCQlhcmNzX2NtZGxpbmVbMF0gPSAnXDAnOwotCQlhcmd2ID0gKGNoYXIgKiopIGZ3X2FyZzE7Ci0JCXBvc24gPSAwOwotCQlmb3IgKGluZHggPSAxOyBpbmR4IDwgbmFyZzsgKytpbmR4KSB7Ci0JCQluY2hyID0gc3RybGVuKGFyZ3ZbaW5keF0pOwotCQkJaWYgKHBvc24gKyAxICsgbmNociArIDEgPiBzaXplb2YoYXJjc19jbWRsaW5lKSkKLQkJCQlicmVhazsKLQkJCWlmIChwb3NuKQotCQkJCWFyY3NfY21kbGluZVtwb3NuKytdID0gJyAnOwotCQkJc3RyY3B5KGFyY3NfY21kbGluZSArIHBvc24sIGFyZ3ZbaW5keF0pOwotCQkJcG9zbiArPSBuY2hyOwotCQl9CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgYXJndltpXSwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlpZiAoaSA8IChhcmdjIC0gMSkpCisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQogCiAJYWRkX21lbW9yeV9yZWdpb24oMHgwLCBtZW1zeiwgQk9PVF9NRU1fUkFNKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2FyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9hcjdfZGVmY29uZmlnCmluZGV4IDM1NjQ4MzAuLjVhNWI2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2FyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXI3X2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNiBAQAogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKIENPTkZJR19BUjc9eQotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0yNjUsNyArMjY0LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLUNPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSPXkKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMDUzLDcgKzEwNTEsOSBAQAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJyb290ZnN0eXBlPXNxdWFzaGZzLGpmZnMyIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmNtNDd4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZwppbmRleCA5NGI3ZDU3Li4yNjdiZDQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iY200N3h4X2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKIENPTkZJR19CQ000N1hYPXkKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xODUzLDcgKzE4NTIsNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9iY202M3h4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JjbTYzeHhfZGVmY29uZmlnCmluZGV4IGVhMDBjMTguLjdmZWUwMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2JjbTYzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2JjbTYzeHhfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiBDT05GSUdfQkNNNjNYWD15CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CkBAIC05NDIsNyArOTQxLDkgQEAKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwppbmRleCAxM2Q5ZWI0Li5jMmYwNmUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMjM3LDcgKzEyMzYsNyBAQAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NCMVhYWF9DT1JFTElTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCmluZGV4IDE4NWRmMjMuLjcyYjdlNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTc4Myw3ICs3ODIsOSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5VlIwLDM4NDAwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY2F2aXVtLW9jdGVvbl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jYXZpdW0tb2N0ZW9uX2RlZmNvbmZpZwppbmRleCA3YWZhYTI4Li5jODUwN2JjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9jYXZpdW0tb2N0ZW9uX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jYXZpdW0tb2N0ZW9uX2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTI2OSw3ICsyNjgsNiBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKIENPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC04MjIsNyArODIwLDcgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKaW5kZXggNmM4Y2NhOC4uNDllNjEzMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19DT0JBTFQ9eQogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTExMjYsNyArMTEyNSw3IEBACiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKaW5kZXggZGJkZjNiYi4uNjhlOTBjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCkBAIC0yMyw3ICsyMyw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTA5MCw3ICsxMDg5LDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwppbmRleCBmYTY4MTQ0Li45MDgxMjgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKQEAgLTIzLDcgKzIzLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMDkwLDcgKzEwODksNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IGQ3M2YxZGUuLmRhYmYwMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogQ09ORklHX01JUFNfREIxMjAwPXkKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMTcyLDcgKzExNzEsOSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9Im1lbT00OE0iCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCBlYzNlMDI4Li5hMTUxMzEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTIzLDcgKzIzLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMzkwLDcgKzEzODksNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCmluZGV4IDc2MzFkYWUuLjZiNjQzMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogQ09ORklHX01JUFNfREIxNTUwPXkKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMjA3LDcgKzEyMDYsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKaW5kZXggOWU2NWU2YS4uY2JiNGQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogQ09ORklHX01BQ0hfREVDU1RBVElPTj15CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtODgyLDcgKzg4MSw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKaW5kZXggMWJkODRkNC4uNTI5NjhjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC01NjEsNyArNTYwLDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlWUjAsMTkyMDAgaWRlMD0weDFmMCwweDNmNiw0MCBtZW09OE0iCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk5NWQ0My4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozMSAyMDA3Ci0jCi1DT05GSUdfTUlQUz15Ci0KLSMKLSMgTWFjaGluZSBzZWxlY3Rpb24KLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTTEVSX0VYQ0lURT15Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFX1BST1RPVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0Ci1DT05GSUdfRE1BX0NPSEVSRU5UPXkKLUNPTkZJR19DUFVfQklHX0VORElBTj15Ci0jIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQotQ09ORklHX0lSUV9DUFU9eQotQ09ORklHX0lSUV9DUFVfUk03Sz15Ci1DT05GSUdfSVJRX0NQVV9STTlLPXkKLUNPTkZJR19NSVBTX1JNOTEyMj15Ci1DT05GSUdfU0VSSUFMX1JNOTAwMD15Ci1DT05GSUdfR1BJX1JNOTAwMD15Ci1DT05GSUdfV0RUX1JNOTAwMD15Ci1DT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01Ci0KLSMKLSMgQ1BVIHNlbGVjdGlvbgotIwotIyBDT05GSUdfQ1BVX01JUFMzMl9SMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAotQ09ORklHX0NQVV9STTkwMDA9eQotIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfUk05MDAwPXkKLUNPTkZJR19XRUFLX09SREVSSU5HPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLQotIwotIyBLZXJuZWwgdHlwZQotIwotQ09ORklHXzMyQklUPXkKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX1NJWkVfNEtCPXkKLSMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQotQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQotIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR182NEJJVF9QSFlTX0FERFIgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfU1lOQz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi0jIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQotIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCi0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1BSRUVNUFRfQktMPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLSMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIwotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKLSMKLUNPTkZJR19IV19IQVNfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCi0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFEX1NJR05BTFM9eQotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1RHVD1tCi0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQVNfQVRUUlM9bQotQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCi0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0FJQzk0WFg9bQotIyBDT05GSUdfQUlDOTRYWF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCi0jIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCi0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9bQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPW0KLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1dEVF9STTlLX0dQST1tCi0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU01JVkdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT1tCi0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX1VTQl9FSENJX0hDRD15Ci0jIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotCi0jCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQotIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19YQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZwppbmRleCAwMTk3ZjBkLi5hMDlkZDAzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMxCi0jIFRodSBKdWwgIDIgMjI6Mzc6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBGcmkgT2N0IDE2IDEzOjE4OjAxIDIwMDkKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTAsOCArMTAsOCBAQAogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEwNSw2ICsxMDUsOCBAQAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTA9eQogQ09ORklHX0NQVV9MT09OR1NPTjI9eQogQ09ORklHX1NZU19IQVNfQ1BVX0xPT05HU09OMkU9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQpAQCAtMTM1LDEyICsxMzcsMTYgQEAKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKworIworIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAorIwogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQEAgLTE0OCw2ICsxNTQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQpAQCAtMTgwLDYgKzE4NywxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWZ1bG9vbmcyZSIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC0xOTMsMTEgKzIwNiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTY0CisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMjM1LDE4ICsyNDksMTYgQEAKIENPTkZJR19BSU89eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQpAQCAtMjU1LDggKzI2Nyw4IEBACiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MApAQCAtMjgzLDcgKzI5NSw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKQEAgLTMyMSw5ICszMzMsMTQgQEAKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19ISUJFUk5BVElPTl9OVlM9eQorQ09ORklHX0hJQkVSTkFUSU9OPXkKK0NPTkZJR19QTV9TVERfUEFSVElUSU9OPSIvZGV2L2hkYTMiCisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQorQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKQEAgLTQ0Miw2ICs0NTksNyBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDczLDYgKzQ5MSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00ODEsNyArNTAwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUXzlQPW0KQEAgLTQ5NSw2ICs1MTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01MDQsOSArNTIzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPW0KICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC04MjAsNiArODM5LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC04NjcsMTAgKzg4Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg4Niw2ICs5MDMsNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC05MzMsMTIgKzk1MSwxNiBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQpAQCAtOTQ2LDYgKzk2OCw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogQ09ORklHX01PVVNFX1NFUklBTD15CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKQEAgLTEwMTUsNiArMTAzOCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA3MCw5ICsxMDk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDg4LDcgKzExMDksNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTEwNSw2ICsxMTI1LDcgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTE0LDYgKzExMzUsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTgsNiArMTIyMCw3IEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC0xMzA0LDcgKzEzMjcsNiBAQAogQ09ORklHX0FDOTdfQlVTPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSElEUkFXPXkKIAogIwpAQCAtMTM1Niw2ICsxMzc4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTc2MF9IQ0Q9bQorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xNDUzLDYgKzE0NzYsNyBAQAogIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU9fQUVDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBpcyBub3Qgc2V0CiAKICMKICMgVEkgVkxZTlEKQEAgLTE0NjksMTAgKzE0OTMsMTAgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPW0KLUNPTkZJR19FWFQ0REVWX0NPTVBBVD15CiBDT05GSUdfRVhUNF9GU19YQVRUUj15CiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfWElQPXkKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0ODksNiArMTUxMyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTU3LDcgKzE1ODIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CkBAIC0xNjY2LDYgKzE2OTAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY3OCwxMyArMTcwMywxNCBAQAogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNzQyLDExICsxNzY4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9bQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKaW5kZXggZjE0ZDM4Yi4uMjIyZDdlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMTg4LDcgKzExODcsNyBAQAogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHPXkKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggMWZjNzNhYS4uZWQ4NGI0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTk0MCw3ICs5MzksNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDI4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnCmluZGV4IDUzOWRjY2IuLmRhYjJlNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjhfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldApAQCAtODE2LDcgKzgxNSw3IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKaW5kZXggZDkzNGJkZS4uMTg0MWM4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMTI2LDcgKzExMjUsNyBAQAogIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvamF6el9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZwppbmRleCBkMjJkZjYxLi4xNGMyYWIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qYXp6X2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogQ09ORklHX01BQ0hfSkFaWj15CkBAIC0xMzc0LDcgKzEzNzMsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKaW5kZXggNTM4MGYxZi4uNGQ2NmM0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC04MzUsNyArODM0LDcgQEAKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0X2RlZmNvbmZpZwppbmRleCAwNDQwNzRkLi4wOGQ0ODFlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sYXNhdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXRfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC03OTgsNyArNzk3LDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWEwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKQEAgLTAsMCArMSwxODM1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2CisjIE1vbiBOb3YgIDkgMjM6NDI6NDIgMjAwOQorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCisjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0xPT05HU09OPXkKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CisjIENPTkZJR19MRU1PVEVfRlVMT09ORzJFIGlzIG5vdCBzZXQKK0NPTkZJR19MRU1PVEVfTUFDSDJGPXkKK0NPTkZJR19DUzU1MzY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NFVlRfUjRLPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorQ09ORklHX0k4MjU5PXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfQk9PVF9FTEYzMj15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9MT09OR1NPTjJGPXkKKyMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MD15CitDT05GSUdfQ1BVX0xPT05HU09OMj15CitDT05GSUdfU1lTX0hBU19DUFVfTE9PTkdTT04yRj15CitDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKKyMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKK0NPTkZJR182NEJJVD15CisjIENPTkZJR19QQUdFX1NJWkVfNEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV8xNktCPXkKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19CT0FSRF9TQ0FDSEU9eQorQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQorIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1dCPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CisKKyMKKyMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKKyMKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTI1MAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKK0NPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQorIworQ09ORklHX0hXX0hBU19QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CitDT05GSUdfSVNBPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTMzJfQ09NUEFUPXkKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19NSVBTMzJfTzMyPXkKK0NPTkZJR19NSVBTMzJfTjMyPXkKK0NPTkZJR19CSU5GTVRfRUxGMzI9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0hJQkVSTkFUSU9OX05WUz15CitDT05GSUdfSElCRVJOQVRJT049eQorQ09ORklHX1BNX1NURF9QQVJUSVRJT049Ii9kZXYvaGRhMyIKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KK0NPTkZJR19UQ1BfQ09OR19IVENQPW0KKyMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0hZQkxBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1ZFR0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0xQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX1ZFTk8gaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfWUVBSCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9CSUM9eQorIyBDT05GSUdfREVGQVVMVF9DVUJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0hUQ1AgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9WRUdBUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1dFU1RXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfUkVOTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iYmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfU0VDTUFSSz15CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCisjIENPTkZJR19ORVRfU0NIX0NCUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1RCRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0dSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0RSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0lOR1JFU1MgaXMgbm90IHNldAorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfVENJTkRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUlNWUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JTVlA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VNQVRDSD15CitDT05GSUdfTkVUX0VNQVRDSF9TVEFDSz0zMgorIyBDT05GSUdfTkVUX0VNQVRDSF9DTVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9OQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIX01FVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9URVhUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX0FDVD15CisjIENPTkZJR19ORVRfQUNUX1BPTElDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX0dBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9NSVJSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9OQVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9QRURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9TS0JFRElUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorQ09ORklHX1JGS0lMTD1tCisjIENPTkZJR19SRktJTExfSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfVElNSU5HUz15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9BTUQ3NFhYPXkKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorCisjCisjIE90aGVyIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCisKKyMKKyMgTm90ZTogbW9zdCBvZiB0aGVzZSBhbHNvIHJlcXVpcmUgc3BlY2lhbCBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzREUklWRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFRDMjI3OCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hUNjU2MEIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9RRDY1WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUM4NjcyIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0lGQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAorIyBDT05GSUdfVEMzNTgxNSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPTz15CisjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQorIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CitDT05GSUdfUjgxNjk9eQorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CitDT05GSUdfV0xBTl9QUkU4MDIxMT15CisjIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9QUzJfQUxQUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CisjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE2CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX0ZPVVJQT1JUPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0FDQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9CT0NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYQVJfU1QxNkM1NTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfSFVCNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorQ09ORklHX1JUQz15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKK0NPTkZJR19USEVSTUFMPXkKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfU1VQUE9SVD1tCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KK0NPTkZJR19WSURFT19BTExPV19WNEwxPXkKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorQ09ORklHX1VTQl9WSURFT19DTEFTUz1tCitDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKK0NPTkZJR19VU0JfR1NQQ0E9bQorIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVklDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lCTUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS09OSUNBV0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1FVSUNLQ0FNX01FU1NFTkdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVQ2MVgyNTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CisjIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQVJCPXkKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQ9eQorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorQ09ORklHX0ZCX1NJUz15CitDT05GSUdfRkJfU0lTXzMwMD15CitDT05GSUdfRkJfU0lTXzMxNT15CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKKyMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0ZPTlRfNngxMT15CitDT05GSUdfRk9OVF83eDE0PXkKK0NPTkZJR19GT05UX1BFQVJMXzh4OD15CitDT05GSUdfRk9OVF9BQ09STl84eDg9eQorQ09ORklHX0ZPTlRfTUlOSV80eDY9eQorQ09ORklHX0ZPTlRfU1VOOHgxNj15CitDT05GSUdfRk9OVF9TVU4xMngyMj15CitDT05GSUdfRk9OVF8xMHgxOD15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD1tCisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorQ09ORklHX1NORF9DUzU1MzVBVURJTz1tCisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT1RHX1dISVRFTElTVD15CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1VTQl9VSENJX0hDRD1tCisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQUNNPW0KKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV0RNPW0KKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9bQorQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9bQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT1tCitDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9bQorQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworQ09ORklHX1NUQUdJTkc9eQorIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01FREkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODdTRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTkyU1UgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE5MkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKKworIworIyBBbmRyb2lkCisjCisKKyMKKyMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KKyMKKworIworIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgorIworIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19EU1QgaXMgbm90IHNldAorIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAorIyBDT05GSUdfQjNERkcgaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJTkU2X1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0gyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUNjY1NSBpcyBub3Qgc2V0CisjIENPTkZJR19WVDY2NTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVURMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRV9CVVMgaXMgbm90IHNldAorCisjCisjIFJBUiBSZWdpc3RlciBEcml2ZXIKKyMKKyMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU8gaXMgbm90IHNldAorQ09ORklHX0ZCX1NNN1hYPXkKK0NPTkZJR19GQl9TTTdYWF9BQ0NFTD15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0idXRmLTgiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggM2YwMTg3MC4uZDNjNjAxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwpAQCAtMTAsNyArMTAsNiBAQAogIwogQ09ORklHX1pPTkVfRE1BPXkKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTE1OTEsNyArMTU5MCw3IEBACiAjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYXJrZWluc19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYXJrZWluc19kZWZjb25maWcKaW5kZXggZDAwMWY3ZS4uNmEzMjVjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFya2VpbnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hcmtlaW5zX2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEzNjYsNyArMTM2NSw5IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTE5Mm0gaXA9Ym9vdHAgcm9vdD0vZGV2L25mcyBydyIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKaW5kZXggNzM1ODQ1NC4uZjc3YTM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC02MzUsNyArNjM0LDkgQEAKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0ibmZzcm9vdD0xOTIuMTY4LjE5Mi4xNjk6L3UxL21pcHNlbCx0aW1lbz0yMCBpcD1kaGNwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKaW5kZXggOGM3MjBlNS4uMTcyMDMwNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwogIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC04MTcsNyArODE2LDkgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVZSMCwxOTIwMCBpZGUwPTB4MTcwLDB4Mzc2LDczIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXNwNzF4eF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZwppbmRleCBlY2JjMDMwLi4wMDBkMTg1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tc3A3MXh4X2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTE0MTIsNyArMTQxMSw3IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1VOQ0FDSEVEIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKaW5kZXggOTQ3N2YwNC4uMTQ0Yjk0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0zMDE4LDcgKzMwMTcsNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCBiZTgwOTFlLi5kZGY2N2Y2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTIzLDcgKzIzLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMDgzLDcgKzEwODIsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IGU3NGJhNzkuLjVlYzYwODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEyMDAsNyArMTE5OSw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggMWQ4OTZmZC4uNjY0NzY0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0yMyw3ICsyMyw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTE5Myw3ICsxMTkyLDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4MzM1LXN0YjIyNV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4MzM1LXN0YjIyNV9kZWZjb25maWcKaW5kZXggZmVmNGQzMS4uODQ4MzQ0ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDgzMzUtc3RiMjI1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4MzM1LXN0YjIyNV9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC0xMDM0LDcgKzEwMzMsNyBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VSTkVMX1RFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwppbmRleCBlMTBjNzExLi45ZDcyMWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCkBAIC0yMiw3ICsyMiw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTIxNSw3ICsxMjE0LDkgQEAKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzEsMzg0MDBuOCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1zdGI4MTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1zdGI4MTBfZGVmY29uZmlnCmluZGV4IDVlZDNjOGQuLmFiMDdlYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKICMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMjA1LDcgKzEyMDQsOSBAQAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMSwzODQwMG44IHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wb3dlcnR2X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3Bvd2VydHZfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTE2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9wb3dlcnR2X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE1NTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKKyMgRnJpIEF1ZyAyOCAxNDo0OTozMyAyMDA5CisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKKyMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1dFUlRWPXkKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5fUlVOVElNRV9SRVNPVVJDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVExPQURFUl9EUklWRVIgaXMgbm90IHNldAorQ09ORklHX0JPT1RMT0FERVJfRkFNSUxZPSJSMiIKK0NPTkZJR19DU1JDX1BPV0VSVFY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NFVlRfUjRLPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CitDT05GSUdfQk9PVF9FTEYzMj15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTUlQUzMyX1IyPXkKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IyPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IyPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKK0NPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKKyMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19MTFNDPXkKK0NPTkZJR19DUFVfTUlQU1IyX0lSUV9WST15CitDT05GSUdfQ1BVX01JUFNSMl9JUlFfRUk9eQorQ09ORklHX0NQVV9IQVNfU1lOQz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQorQ09ORklHX1NZU19TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR05BTEZEIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FUkZEPXkKKyMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKK0NPTkZJR19IV19IQVNfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAorQ09ORklHX01NVT15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CitDT05GSUdfSVBWNl9QUklWQUNZPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9eQorQ09ORklHX0lORVQ2X0VTUD15CitDT05GSUdfSU5FVDZfSVBDT01QPXkKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1RVTk5FTD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1RVTk5FTD15CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisjIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPXkKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz15CisjIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GSUxURVI9eQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPXkKK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9eQorIyBDT05GSUdfSVBfTkZfQVJQX01BTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX0lQVEFCTEVTPXkKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX0ZSQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX09QVFMgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX0hMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRyBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX0ZJTFRFUj15CisjIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9SQVcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9eQorQ09ORklHX0JSSURHRT15CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9eQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworIyBDT05GSUdfTkVUX1NDSF9DQlEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9IVEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9IRlNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1RFUUwgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfVEJGPXkKKyMgQ09ORklHX05FVF9TQ0hfR1JFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0RTTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX05FVEVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKKworIworIyBDbGFzc2lmaWNhdGlvbgorIworIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1RDSU5ERVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19ST1VURTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19GVyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JTVlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19SU1ZQNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUlRMODE1MD15CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPXkKK0NPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEU9eQorIyBDT05GSUdfVVNCX0VaVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0NQMjEwWD15CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz15CisjIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0icncgZGhhc2hfZW50cmllcz0xMDI0IGloYXNoX2VudHJpZXM9MTAyNCBpcD0xMC4wLjEuMzoxMC4wLjEuMToxMC4wLjEuMToyNTUuMjU1LjI1NS4wOnpldXM6ZXRoMDogcm9vdD0vZGV2L25mcyBuZnNyb290PS9uZnNyb290L2NyYW1mcyx3c2l6ZT01MTIscnNpemU9NTEyLHRjcCBub2tnZGIgY29uc29sZT10dHlVU0IwLDExNTIwMCBtZW1zaXplPTI1Mk0iCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWcKaW5kZXggZjQwYzNhMC4uNTdhNTA0OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTEyMDQsNyArMTIwMyw3IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZwppbmRleCA2YzZhMTlhLi4yMWMyMDIyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCkBAIC0xMCw3ICsxMCw2IEBACiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAogIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKQEAgLTI4NCw3ICsyODMsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX1BST0JFX0lOSVRSRF9IRUFERVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjMsNyArMTA2MSw3IEBACiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLUNPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwppbmRleCBlNTNiOGQwLi43OTAzNjI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCkBAIC0yMiw3ICsyMiw2IEBACiAjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTY5NCw3ICsxNjkzLDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwppbmRleCA3ZjM4YzBiLi43ZjA3YmYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKQEAgLTksNyArOSw2IEBACiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCiAjIENPTkZJR19NQUNIX0FMQ0hFTVkgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CkBAIC05NjEsNyArOTYwLDcgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQjFYWFhfQ09SRUxJUyBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMTlfZGVmY29uZmlnCmluZGV4IGI1MDU5ODguLmM1NGQxMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIxOV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjE5X2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTg5Miw3ICs4OTEsOSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjY2E9MyBtZW09NjRNIGNvbnNvbGU9dHR5VlIwLDExNTIwMCBpcD1hbnkgcm9vdD0vZGV2L25mcyIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCmluZGV4IGIwNmE3MTYuLmU3YzVjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTg5NSw3ICs4OTQsOSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjY2E9MyBtZW09MzJNIGNvbnNvbGU9dHR5VlIwLDExNTIwMCIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCmluZGV4IDQ2NTEyY2YuLmI1MDAzMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKQEAgLTEwNzcsNyArMTA3Niw5IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNjYT0zIG1lbT02NE0gY29uc29sZT10dHlWUjAsMTE1MjAwIGlwPWFueSByb290PS9kZXYvbmZzIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZwppbmRleCBiNDM3ZWI3Li5jMDJiYTA4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZwpAQCAtOSw3ICs5LDYgQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtNzU1LDcgKzc1NCw5IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5VlIwLDE5MjAwIGlkZTA9MHgxNzAsMHgzNzYsNDkgbWVtPTE2TSIKKyMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCmluZGV4IDA2YWNjNzQuLmEzNWJjNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTg4Nyw3ICs4ODYsOSBAQAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKaW5kZXggNjlmZWFmOC4uZTNkNjhkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwpAQCAtMjIsNyArMjIsNiBAQAogIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTgyNCw3ICs4MjMsNyBAQAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Z3L2FyYy9jbWRsaW5lLmMgYi9hcmNoL21pcHMvZncvYXJjL2NtZGxpbmUuYwppbmRleCA0Y2E0ZWVmLi41Yzg2MDNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZncvYXJjL2NtZGxpbmUuYworKysgYi9hcmNoL21pcHMvZncvYXJjL2NtZGxpbmUuYwpAQCAtMTYsMTEgKzE2LDYgQEAKIAogI3VuZGVmIERFQlVHX0NNRExJTkUKIAotY2hhciAqIF9faW5pdCBwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gYXJjc19jbWRsaW5lOwotfQotCiBzdGF0aWMgY2hhciAqaWdub3JlZFtdID0gewogCSJDb25zb2xlSW49IiwKIAkiQ29uc29sZU91dD0iLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYm9vdGluZm8uaAppbmRleCBmNWRmYWY2Li4wOWVlZTA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYm9vdGluZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYm9vdGluZm8uaApAQCAtNjcsOSArNjcsOSBAQAogI2RlZmluZSBNQUNIX0xFTU9URV9NTDJGNyAgICAgIDMKICNkZWZpbmUgTUFDSF9MRU1PVEVfWUwyRjg5ICAgICA0CiAjZGVmaW5lIE1BQ0hfREVYWE9OX0dESVVNMkYxMCAgNQotI2RlZmluZSBNQUNIX0xPT05HU09OX0VORCAgICAgIDYKLQotI2RlZmluZSBDTF9TSVpFCQkJQ09NTUFORF9MSU5FX1NJWkUKKyNkZWZpbmUgTUFDSF9MRU1PVEVfTkFTICAgICAgICA2CisjZGVmaW5lIE1BQ0hfTEVNT1RFX0xMMkYgICAgICAgNworI2RlZmluZSBNQUNIX0xPT05HU09OX0VORCAgICAgIDgKIAogZXh0ZXJuIGNoYXIgKnN5c3RlbV90eXBlOwogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAvKgogICogSW5pdGlhbCBrZXJuZWwgY29tbWFuZCBsaW5lLCB1c3VhbGx5IHNldHVwIGJ5IHByb21faW5pdCgpCiAgKi8KLWV4dGVybiBjaGFyIGFyY3NfY21kbGluZVtDTF9TSVpFXTsKK2V4dGVybiBjaGFyIGFyY3NfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV07CiAKIC8qCiAgKiBSZWdpc3RlcnMgYTAsIGExLCBhMyBhbmQgYTQgYXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgZW50cnkgYnkgZmlybXdhcmUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4OTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX19BU01fTUlQU19DTE9DS19ICisjZGVmaW5lIF9fQVNNX01JUFNfQ0xPQ0tfSAorCisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCitleHRlcm4gdm9pZCAoKmNwdV93YWl0KSAodm9pZCk7CisKK3N0cnVjdCBjbGs7CisKK3N0cnVjdCBjbGtfb3BzIHsKKwl2b2lkICgqaW5pdCkgKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZCAoKmVuYWJsZSkgKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZCAoKmRpc2FibGUpIChzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQgKCpyZWNhbGMpIChzdHJ1Y3QgY2xrICpjbGspOworCWludCAoKnNldF9yYXRlKSAoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKTsKKwlsb25nICgqcm91bmRfcmF0ZSkgKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK307CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBpZDsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKworCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrX29wcyAqb3BzOworCisJc3RydWN0IGtyZWYga3JlZjsKKworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworI2RlZmluZSBDTEtfQUxXQVlTX0VOQUJMRUQJKDEgPDwgMCkKKyNkZWZpbmUgQ0xLX1JBVEVfUFJPUEFHQVRFUwkoMSA8PCAxKQorCisvKiBTaG91bGQgYmUgZGVmaW5lZCBieSBwcm9jZXNzb3Itc3BlY2lmaWMgY29kZSAqLwordm9pZCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKiwgaW50IHR5cGUpOworCitpbnQgY2xrX2luaXQodm9pZCk7CisKK2ludCBfX2Nsa19lbmFibGUoc3RydWN0IGNsayAqKTsKK3ZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICopOworCit2b2lkIGNsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrICopOworCitpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKik7Cit2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKik7CisKKy8qIHRoZSBleHBvcnRlZCBBUEksIGluIGFkZGl0aW9uIHRvIGNsa19zZXRfcmF0ZSAqLworLyoqCisgKiBjbGtfc2V0X3JhdGVfZXggLSBzZXQgdGhlIGNsb2NrIHJhdGUgZm9yIGEgY2xvY2sgc291cmNlLCB3aXRoIGFkZGl0aW9uYWwgcGFyYW1ldGVyCisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqIEByYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUgaW4gSHoKKyAqIEBhbGdvX2lkOiBhbGdvcml0aG0gaWQgdG8gYmUgcGFzc2VkIGRvd24gdG8gb3BzLT5zZXRfcmF0ZQorICoKKyAqIFJldHVybnMgc3VjY2VzcyAoMCkgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCBjbGtfc2V0X3JhdGVfZXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKTsKKworI2VuZGlmCQkJCS8qIF9fQVNNX01JUFNfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NvcDIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jb3AyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwNGM5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jb3AyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXaW5kIFJpdmVyIFN5c3RlbXMsCisgKiAgIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICovCisjaWZuZGVmIF9fQVNNX0NPUDJfSAorI2RlZmluZSBfX0FTTV9DT1AyX0gKKworZW51bSBjdTJfb3BzIHsKKwlDVTJfRVhDRVBUSU9OLAorCUNVMl9MV0MyX09QLAorCUNVMl9MREMyX09QLAorCUNVMl9TV0MyX09QLAorCUNVMl9TREMyX09QLAorfTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9jdTJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IGN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKKworI2VuZGlmIC8qIF9fQVNNX0NPUDJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDRiOTZkMWEuLmNmMzczYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTE1NCw2ICsxNTQsOCBAQAogI2RlZmluZSBQUklEX1JFVl9WUjQxODFBCTB4MDA3MAkvKiBTYW1lIGFzIFZSNDEyMiAqLwogI2RlZmluZSBQUklEX1JFVl9WUjQxMzAJCTB4MDA4MAogI2RlZmluZSBQUklEX1JFVl8zNEtfVjFfMF8yCTB4MDAyMgorI2RlZmluZSBQUklEX1JFVl9MT09OR1NPTjJFCTB4MDAwMgorI2RlZmluZSBQUklEX1JFVl9MT09OR1NPTjJGCTB4MDAwMwogCiAvKgogICogT2xkZXIgcHJvY2Vzc29ycyB1c2VkIHRvIGVuY29kZSBwcm9jZXNzb3IgdmVyc2lvbiBhbmQgcmV2aXNpb24gaW4gdHdvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggOGEzZWYyNC4uN2ZjZWY4ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHUuaApAQCAtMjgsMTUgKzI4LDcgQEAKIHN0cnVjdCBzaWdjb250ZXh0Owogc3RydWN0IHNpZ2NvbnRleHQzMjsKIAotZXh0ZXJuIGFzbWxpbmthZ2UgaW50ICgqc2F2ZV9mcF9jb250ZXh0KShzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLWV4dGVybiBhc21saW5rYWdlIGludCAoKnJlc3RvcmVfZnBfY29udGV4dCkoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci0KLWV4dGVybiBhc21saW5rYWdlIGludCAoKnNhdmVfZnBfY29udGV4dDMyKShzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOwotZXh0ZXJuIGFzbWxpbmthZ2UgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7Ci0KIGV4dGVybiB2b2lkIGZwdV9lbXVsYXRvcl9pbml0X2ZwdSh2b2lkKTsKLWV4dGVybiBpbnQgZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLWV4dGVybiBpbnQgZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKIGV4dGVybiB2b2lkIF9pbml0X2ZwdSh2b2lkKTsKIGV4dGVybiB2b2lkIF9zYXZlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIF9yZXN0b3JlX2ZwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHVfZW11bGF0b3IuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHVfZW11bGF0b3IuaAppbmRleCBlNTE4OTU3Li5hZWNhZGE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1X2VtdWxhdG9yLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdV9lbXVsYXRvci5oCkBAIC0yNSwxNyArMjUsMjcgQEAKIAogI2luY2x1ZGUgPGFzbS9icmVhay5oPgogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CisjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAogc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgZW11bGF0ZWQ7Ci0JdW5zaWduZWQgaW50IGxvYWRzOwotCXVuc2lnbmVkIGludCBzdG9yZXM7Ci0JdW5zaWduZWQgaW50IGNwMW9wczsKLQl1bnNpZ25lZCBpbnQgY3AxeG9wczsKLQl1bnNpZ25lZCBpbnQgZXJyb3JzOworCWxvY2FsX3QgZW11bGF0ZWQ7CisJbG9jYWxfdCBsb2FkczsKKwlsb2NhbF90IHN0b3JlczsKKwlsb2NhbF90IGNwMW9wczsKKwlsb2NhbF90IGNwMXhvcHM7CisJbG9jYWxfdCBlcnJvcnM7CiB9OwogCi1leHRlcm4gc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzIGZwdWVtdXN0YXRzOworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtaXBzX2ZwdV9lbXVsYXRvcl9zdGF0cywgZnB1ZW11c3RhdHMpOworCisjZGVmaW5lIE1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoTSkJCQkJCVwKKwljcHVfbG9jYWxfd3JhcChfX2xvY2FsX2luYygmX19nZXRfY3B1X3ZhcihmcHVlbXVzdGF0cykuTSkpCisKKyNlbHNlCisjZGVmaW5lIE1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoTSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwogCiBleHRlcm4gaW50IG1pcHNfZHNlbXVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBtaXBzX2luc3RydWN0aW9uIGlyLAogCXVuc2lnbmVkIGxvbmcgY3BjKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCA0MGE4YzE3Li4zOTg2Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0xICsxLDkwIEBACi0vKiBlbXB0eSAqLworLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICovCisKKyNpZm5kZWYgX0FTTV9NSVBTX0ZUUkFDRV9ICisjZGVmaW5lIF9BU01fTUlQU19GVFJBQ0VfSAorCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorCisjZGVmaW5lIE1DT1VOVF9BRERSICgodW5zaWduZWQgbG9uZykoX21jb3VudCkpCisjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUgNAkJLyogc2l6ZW9mIG1jb3VudCBjYWxsICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBfbWNvdW50KHZvaWQpOworI2RlZmluZSBtY291bnQgX21jb3VudAorCisjZGVmaW5lIHNhZmVfbG9hZChsb2FkLCBzcmMsIGRzdCwgZXJyb3IpCQlcCitkbyB7CQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKAkJCQkJXAorCQkiMTogIiBsb2FkICIgJVsiIFNUUihkc3QpICJdLCAwKCVbIiBTVFIoc3JjKSAiXSlcbiJcCisJCSIgICBsaSAlWyIgU1RSKGVycm9yKSAiXSwgMFxuIgkJXAorCQkiMjpcbiIJCQkJCVwKKwkJCQkJCQlcCisJCSIuc2VjdGlvbiAuZml4dXAsIFwiYXhcIlxuIgkJXAorCQkiMzogbGkgJVsiIFNUUihlcnJvcikgIl0sIDFcbiIJCVwKKwkJIiAgIGogMmJcbiIJCQkJXAorCQkiLnByZXZpb3VzXG4iCQkJCVwKKwkJCQkJCQlcCisJCSIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiCVwKKwkJU1RSKFBUUikgIlx0MWIsIDNiXG5cdCIJCQlcCisJCSIucHJldmlvdXNcbiIJCQkJXAorCQkJCQkJCVwKKwkJOiBbZHN0XSAiPSZyIiAoZHN0KSwgW2Vycm9yXSAiPXIiIChlcnJvcilcCisJCTogW3NyY10gInIiIChzcmMpCQkJXAorCQk6ICJtZW1vcnkiCQkJCVwKKwkpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgc2FmZV9zdG9yZShzdG9yZSwgc3JjLCBkc3QsIGVycm9yKQlcCitkbyB7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoCQkJCVwKKwkJIjE6ICIgc3RvcmUgIiAlWyIgU1RSKHNyYykgIl0sIDAoJVsiIFNUUihkc3QpICJdKVxuIlwKKwkJIiAgIGxpICVbIiBTVFIoZXJyb3IpICJdLCAwXG4iCVwKKwkJIjI6XG4iCQkJCVwKKwkJCQkJCVwKKwkJIi5zZWN0aW9uIC5maXh1cCwgXCJheFwiXG4iCVwKKwkJIjM6IGxpICVbIiBTVFIoZXJyb3IpICJdLCAxXG4iCVwKKwkJIiAgIGogMmJcbiIJCQlcCisJCSIucHJldmlvdXNcbiIJCQlcCisJCQkJCQlcCisJCSIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiXAorCQlTVFIoUFRSKSAiXHQxYiwgM2Jcblx0IgkJXAorCQkiLnByZXZpb3VzXG4iCQkJXAorCQkJCQkJXAorCQk6IFtlcnJvcl0gIj1yIiAoZXJyb3IpCQlcCisJCTogW2RzdF0gInIiIChkc3QpLCBbc3JjXSAiciIgKHNyYylcCisJCTogIm1lbW9yeSIJCQlcCisJKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgc2FmZV9sb2FkX2NvZGUoZHN0LCBzcmMsIGVycm9yKSBcCisJc2FmZV9sb2FkKFNUUihsdyksIHNyYywgZHN0LCBlcnJvcikKKyNkZWZpbmUgc2FmZV9zdG9yZV9jb2RlKHNyYywgZHN0LCBlcnJvcikgXAorCXNhZmVfc3RvcmUoU1RSKHN3KSwgc3JjLCBkc3QsIGVycm9yKQorCisjZGVmaW5lIHNhZmVfbG9hZF9zdGFjayhkc3QsIHNyYywgZXJyb3IpIFwKKwlzYWZlX2xvYWQoU1RSKFBUUl9MKSwgc3JjLCBkc3QsIGVycm9yKQorCisjZGVmaW5lIHNhZmVfc3RvcmVfc3RhY2soc3JjLCBkc3QsIGVycm9yKSBcCisJc2FmZV9zdG9yZShTVFIoUFRSX1MpLCBzcmMsIGRzdCwgZXJyb3IpCisKKworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0cnVjdCBkeW5fYXJjaF9mdHJhY2UgeworfTsKKworI2VuZGlmIC8qICBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCisjZW5kaWYgLyogX0FTTV9NSVBTX0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMDliMDhkMC4uMDY5NjAzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMTEzLDM2ICsxMTMsMTEgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBkb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlEncyAodGhlIHNwZWNpYWwKLSAqIFNNUCBjcm9zcy1DUFUgaW50ZXJydXB0cyBoYXZlIHRoZWlyIG93biBzcGVjaWZpYwotICogaGFuZGxlcnMpLgotICoKLSAqIElkZWFsbHkgdGhlcmUgc2hvdWxkIGJlIGF3YXkgdG8gZ2V0IHRoaXMgaW50byBrZXJuZWwvaXJxL2hhbmRsZS5jIHRvCi0gKiBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgYSBjYWxsIGZvciBqdXN0IGEgdGlueSBmdW5jdGlvbiAuLi4KLSAqLwotI2RlZmluZSBkb19JUlEoaXJxKQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlycV9lbnRlcigpOwkJCQkJCQlcCi0JX19ET19JUlFfU01UQ19IT09LKGlycSk7CQkJCQlcCi0JZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CQkJCQlcCi0JaXJxX2V4aXQoKTsJCQkJCQkJXAotfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVENfSVJRQUZGCi0vKgotICogVG8gYXZvaWQgaW5lZmZpY2llbnQgYW5kIGluIHNvbWUgY2FzZXMgcGF0aG9sb2dpY2FsIHJlLWNoZWNraW5nIG9mCi0gKiBJUlEgYWZmaW5pdHksIHdlIGhhdmUgdGhpcyB2YXJpYW50IHRoYXQgc2tpcHMgdGhlIGFmZmluaXR5IGNoZWNrLgotICovCiAKLQotI2RlZmluZSBkb19JUlFfbm9fYWZmaW5pdHkoaXJxKQkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaXJxX2VudGVyKCk7CQkJCQkJCVwKLQlfX05PX0FGRklOSVRZX0lSUV9TTVRDX0hPT0soaXJxKTsJCQkJXAotCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwkJCQkJXAotCWlycV9leGl0KCk7CQkJCQkJCVwKLX0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBkb19JUlFfbm9fYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSk7CiAKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDX0lSUUFGRiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNzEwNGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9FWENJVEVfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKLSNkZWZpbmUgX19BU01fTUFDSF9FWENJVEVfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKLQotLyoKLSAqIEJhc2xlciBlWGNpdGUgaGFzIGFuIFJNOTEyMiBwcm9jZXNzb3IuCi0gKi8KLSNkZWZpbmUgY3B1X2hhc193YXRjaAkJMQotI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJMAotI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkwCi0jZGVmaW5lIGNwdV9oYXNfdmNlCQkwCi0jZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKLSNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAotI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTEKLSNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTAKLSNkZWZpbmUgY3B1X2hhc19lanRhZwkJMAotCi0jZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQotI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKLSNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTAKLSNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCTAKLSNkZWZpbmUgY3B1X2hhc19kc3AJCTAKLSNkZWZpbmUgY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlCTAKLSNkZWZpbmUgY3B1X2hhc19taXBzbXQJCTAKLSNkZWZpbmUgY3B1X2hhc191c2VybG9jYWwJMAotCi0jZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAotI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJMQotCi0jZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJMAotI2RlZmluZSBjcHVfaGFzX21pcHMzMnIyCTAKLSNkZWZpbmUgY3B1X2hhc19taXBzNjRyMQkwCi0jZGVmaW5lIGNwdV9oYXNfbWlwczY0cjIJMAotCi0jZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMJMAotCi0jZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKLSNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQkzMgotI2RlZmluZSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpCTMyCi0KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0VYQ0lURV9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzI5YmE0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9leGNpdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0jaWZuZGVmIF9fRVhDSVRFX0hfXwotI2RlZmluZSBfX0VYQ0lURV9IX18KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLSNkZWZpbmUgRVhDSVRFX0NQVV9FWFRfQ0xPQ0sgMTAwMDAwMDAwCi0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCi12b2lkIF9faW5pdCBleGNpdGVfa2dkYl9pbml0KHZvaWQpOwotdm9pZCBleGNpdGVfcHJvY2ZzX2luaXQodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtZW1zaXplOwotZXh0ZXJuIGNoYXIgbW9kZXR0eVtdOwotZXh0ZXJuIHUzMiB1bml0X2lkOwotI2VuZGlmCi0KLS8qIEJhc2UgbmFtZSBmb3IgWElDQVAgZGV2aWNlcyAqLwotI2RlZmluZSBYSUNBUF9OQU1FCSJ4aWNhcF9ncGkiCi0KLS8qIE9DRCByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIExLQjAJCTB4MDAzOAotI2RlZmluZSBMS0I1CQkweDAxMjgKLSNkZWZpbmUgTEtNNQkJMHgwMTJDCi0jZGVmaW5lIExLQjcJCTB4MDEzOAotI2RlZmluZSBMS003CQkweDAxM2MKLSNkZWZpbmUgTEtCOAkJMHgwMTQwCi0jZGVmaW5lIExLTTgJCTB4MDE0NAotI2RlZmluZSBMS0I5CQkweDAxNDgKLSNkZWZpbmUgTEtNOQkJMHgwMTRjCi0jZGVmaW5lIExLQjEwCQkweDAxNTAKLSNkZWZpbmUgTEtNMTAJCTB4MDE1NAotI2RlZmluZSBMS0IxMQkJMHgwMTU4Ci0jZGVmaW5lIExLTTExCQkweDAxNWMKLSNkZWZpbmUgTEtCMTIJCTB4MDE2MAotI2RlZmluZSBMS00xMgkJMHgwMTY0Ci0jZGVmaW5lIExLQjEzCQkweDAxNjgKLSNkZWZpbmUgTEtNMTMJCTB4MDE2YwotI2RlZmluZSBMRFAwCQkweDAyMDAKLSNkZWZpbmUgTERQMQkJMHgwMjEwCi0jZGVmaW5lIExEUDIJCTB4MDIyMAotI2RlZmluZSBMRFAzCQkweDAyMzAKLSNkZWZpbmUgSU5UUElOMAkJMHgwQTQwCi0jZGVmaW5lIElOVFBJTjEJCTB4MEE0NAotI2RlZmluZSBJTlRQSU4yCQkweDBBNDgKLSNkZWZpbmUgSU5UUElOMwkJMHgwQTRDCi0jZGVmaW5lIElOVFBJTjQJCTB4MEE1MAotI2RlZmluZSBJTlRQSU41CQkweDBBNTQKLSNkZWZpbmUgSU5UUElONgkJMHgwQTU4Ci0jZGVmaW5lIElOVFBJTjcJCTB4MEE1QwotCi0KLQotCi0vKiBUSVRBTiByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIENQUlIJCTB4MDAwNAotI2RlZmluZSBDUERTUgkJMHgwMDA4Ci0jZGVmaW5lIENQVEMwUgkJMHgwMDBjCi0jZGVmaW5lIENQVEMxUgkJMHgwMDEwCi0jZGVmaW5lIENQQ0ZHMAkJMHgwMDIwCi0jZGVmaW5lIENQQ0ZHMQkJMHgwMDI0Ci0jZGVmaW5lIENQRFNUMEEJCTB4MDAyOAotI2RlZmluZSBDUERTVDBCCQkweDAwMmMKLSNkZWZpbmUgQ1BEU1QxQQkJMHgwMDMwCi0jZGVmaW5lIENQRFNUMUIJCTB4MDAzNAotI2RlZmluZSBDUFhEU1RBCQkweDAwMzgKLSNkZWZpbmUgQ1BYRFNUQgkJMHgwMDNjCi0jZGVmaW5lIENQWENJU1JBCTB4MDA0OAotI2RlZmluZSBDUFhDSVNSQgkweDAwNGMKLSNkZWZpbmUgQ1BHSUcwRVIJMHgwMDUwCi0jZGVmaW5lIENQR0lHMUVSCTB4MDA1NAotI2RlZmluZSBDUEdSV0wJCTB4MDA2OAotI2RlZmluZSBDUFVSU0xNVAkweDAwZjgKLSNkZWZpbmUgVUFDRkcJCTB4MDIwMAotI2RlZmluZSBVQUlOVFMJCTB4MDIwNAotI2RlZmluZSBTRFJYRkNJRQkweDQ4MjgKLSNkZWZpbmUgU0RUWEZDSUUJMHg0OTI4Ci0jZGVmaW5lIElOVFAwU3RhdHVzMAkweDFCMDAKLSNkZWZpbmUgSU5UUDBNYXNrMAkweDFCMDQKLSNkZWZpbmUgSU5UUDBTZXQwCTB4MUIwOAotI2RlZmluZSBJTlRQMENsZWFyMAkweDFCMEMKLSNkZWZpbmUgR1hDRkcJCTB4NTAwMAotI2RlZmluZSBHWERNQURSUEZYCTB4NTAxOAotI2RlZmluZSBHWERNQV9ERVNDQURSCTB4NTAxYwotI2RlZmluZSBHWENIMFRERVNTVFJUCTB4NTA1NAotCi0vKiBJUlEgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTk1JQ09ORklHCQkweGFjMAotI2RlZmluZSBUSVRBTl9NU0dJTlQJMHhjNAotI2RlZmluZSBUSVRBTl9JUlEJKChUSVRBTl9NU0dJTlQgLyAweDIwKSArIDIpCi0jZGVmaW5lIEZQR0EwX01TR0lOVAkweDVhCi0jZGVmaW5lIEZQR0EwX0lSUQkoKEZQR0EwX01TR0lOVCAvIDB4MjApICsgMikKLSNkZWZpbmUgRlBHQTFfTVNHSU5UCTB4N2IKLSNkZWZpbmUgRlBHQTFfSVJRCSgoRlBHQTFfTVNHSU5UIC8gMHgyMCkgKyAyKQotI2RlZmluZSBQSFlfTVNHSU5UCTB4OWMKLSNkZWZpbmUgUEhZX0lSUQkJKChQSFlfTVNHSU5UICAgLyAweDIwKSArIDIpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19CQVNMRVJfRVhDSVRFX1BST1RPVFlQRSkKLS8qIFByZS1yZWxlYXNlIHVuaXRzIHVzZWQgaW50ZXJydXB0IHBpbiAjOSAqLwotI2RlZmluZSBVU0JfSVJRCQkxMQotI2Vsc2UKLS8qIFJlLWRlc2lnbmVkIHVuaXRzIHVzZSBpbnRlcnJ1cHQgcGluICMxICovCi0jZGVmaW5lIFVTQl9NU0dJTlQJMHgzOQotI2RlZmluZSBVU0JfSVJRCQkoKFVTQl9NU0dJTlQgLyAweDIwKSArIDIpCi0jZW5kaWYKLSNkZWZpbmUgVElNRVJfSVJRCTEyCi0KLQotLyogRGV2aWNlIGFkZHJlc3MgcmFuZ2VzICovCi0jZGVmaW5lIEVYQ0lURV9PRkZTX09DRAkJMHgxZmZmYzAwMAotI2RlZmluZQlFWENJVEVfU0laRV9PQ0QJCSgxNiAqIDEwMjQpCi0jZGVmaW5lIEVYQ0lURV9QSFlTX09DRAkJQ1BIWVNBRERSKEVYQ0lURV9PRkZTX09DRCkKLSNkZWZpbmUgRVhDSVRFX0FERFJfT0NECQlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX09DRCkKLQotI2RlZmluZSBFWENJVEVfT0ZGU19TQ1JBTSAJMHgxZmZmYTAwMAotI2RlZmluZQlFWENJVEVfU0laRV9TQ1JBTQkoOCA8PCAxMCkKLSNkZWZpbmUgRVhDSVRFX1BIWVNfU0NSQU0gCUNQSFlTQUREUihFWENJVEVfT0ZGU19TQ1JBTSkKLSNkZWZpbmUgRVhDSVRFX0FERFJfU0NSQU0gCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfU0NSQU0pCi0KLSNkZWZpbmUgRVhDSVRFX09GRlNfUENJX0lPCTB4MWZmZjgwMDAKLSNkZWZpbmUJRVhDSVRFX1NJWkVfUENJX0lPCSg4IDw8IDEwKQotI2RlZmluZSBFWENJVEVfUEhZU19QQ0lfSU8JQ1BIWVNBRERSKEVYQ0lURV9PRkZTX1BDSV9JTykKLSNkZWZpbmUgRVhDSVRFX0FERFJfUENJX0lPIAlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1BDSV9JTykKLQotI2RlZmluZSBFWENJVEVfT0ZGU19USVRBTgkweDFmZmYwMDAwCi0jZGVmaW5lIEVYQ0lURV9TSVpFX1RJVEFOCSgzMiA8PCAxMCkKLSNkZWZpbmUgRVhDSVRFX1BIWVNfVElUQU4JQ1BIWVNBRERSKEVYQ0lURV9PRkZTX1RJVEFOKQotI2RlZmluZSBFWENJVEVfQUREUl9USVRBTglDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1RJVEFOKQotCi0jZGVmaW5lIEVYQ0lURV9PRkZTX1BDSV9NRU0JMHgxZmZlMDAwMAotI2RlZmluZSBFWENJVEVfU0laRV9QQ0lfTUVNCSg2NCA8PCAxMCkKLSNkZWZpbmUgRVhDSVRFX1BIWVNfUENJX01FTQlDUEhZU0FERFIoRVhDSVRFX09GRlNfUENJX01FTSkKLSNkZWZpbmUgRVhDSVRFX0FERFJfUENJX01FTQlDS1NFRzFBRERSKEVYQ0lURV9PRkZTX1BDSV9NRU0pCi0KLSNkZWZpbmUgRVhDSVRFX09GRlNfRlBHQQkweDFmZmRjMDAwCi0jZGVmaW5lIEVYQ0lURV9TSVpFX0ZQR0EJKDE2IDw8IDEwKQotI2RlZmluZSBFWENJVEVfUEhZU19GUEdBCUNQSFlTQUREUihFWENJVEVfT0ZGU19GUEdBKQotI2RlZmluZSBFWENJVEVfQUREUl9GUEdBCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfRlBHQSkKLQotI2RlZmluZSBFWENJVEVfT0ZGU19OQU5ECTB4MWZmZDgwMDAKLSNkZWZpbmUgRVhDSVRFX1NJWkVfTkFORAkoMTYgPDwgMTApCi0jZGVmaW5lIEVYQ0lURV9QSFlTX05BTkQJQ1BIWVNBRERSKEVYQ0lURV9PRkZTX05BTkQpCi0jZGVmaW5lIEVYQ0lURV9BRERSX05BTkQJQ0tTRUcxQUREUihFWENJVEVfT0ZGU19OQU5EKQotCi0jZGVmaW5lIEVYQ0lURV9PRkZTX0JPT1RST00JMHgxZjAwMDAwMAotI2RlZmluZSBFWENJVEVfU0laRV9CT09UUk9NCSg4IDw8IDIwKQotI2RlZmluZSBFWENJVEVfUEhZU19CT09UUk9NCUNQSFlTQUREUihFWENJVEVfT0ZGU19CT09UUk9NKQotI2RlZmluZSBFWENJVEVfQUREUl9CT09UUk9NCUNLU0VHMUFERFIoRVhDSVRFX09GRlNfQk9PVFJPTSkKLQotLyogRlBHQSBhZGRyZXNzIG9mZnNldHMgKi8KLSNkZWZpbmUgRVhDSVRFX0ZQR0FfRFBSCQkweDAxMDQJLyogZHVhbC1wb3J0ZWQgcmFtICovCi0jZGVmaW5lIEVYQ0lURV9GUEdBX1NZU0NUTAkweDAyMDAJLyogc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIgYmxvY2sgKi8KLQotI2VuZGlmIC8qIF9fRVhDSVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZV9mcGdhLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvZXhjaXRlX2ZwZ2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExZWY2OS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvZXhjaXRlX2ZwZ2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNpZm5kZWYgRVhDSVRFX0ZQR0FfSF9JTkNMVURFRAotI2RlZmluZSBFWENJVEVfRlBHQV9IX0lOQ0xVREVECi0KLQotLyoqCi0gKiBBZGRyZXNzIGFsaWdubWVudCBvZiB0aGUgaW5kaXZpZHVhbCBGUEdBIGJ5dGVzLgotICogVGhlIGFkZHJlc3MgYXJyYW5nZW1lbnQgb2YgdGhlIGluZGl2aWR1YWwgYnl0ZXMgb2YgdGhlIEZQR0EgaXMgdHdvCi0gKiBieXRlIGFsaWduZWQgYXQgdGhlIGVtYmVkZGVkIE1LMiBwbGF0Zm9ybS4KLSAqLwotI2lmZGVmIEVYQ0lURV9DQ0lfRlBHQV9NSzIKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgyKSkpOwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdDsKLSNlbmRpZgotCi0KLS8qKgotICogU2l6ZSBvZiBEdWFsIFBvcnRlZCBSQU0uCi0gKi8KLSNkZWZpbmUgRVhDSVRFX0RQUl9TSVpFIDI2MwotCi0KLS8qKgotICogU2l6ZSBvZiBSZXNlcnZlZCBTdGF0dXMgRmllbGRzIGluIER1YWwgUG9ydGVkIFJBTS4KLSAqLwotI2RlZmluZSBFWENJVEVfRFBSX1NUQVRVU19TSVpFIDcKLQotCi0KLS8qKgotICogRlBHQS4KLSAqIEhhcmR3YXJlIHJlZ2lzdGVyIGxheW91dCBvZiB0aGUgRlBHQSBpbnRlcmZhY2UuIFRoZSBGUEdBIG11c3QgYWNjZXNzZWQKLSAqIGJ5dGUgd2lzZSBzb2xlbHkuCi0gKiBAc2VlIEVYQ0lURV9DQ0lfRFBSX01LMgotICovCi10eXBlZGVmIHN0cnVjdCBleGNpdGVfZnBnYSB7Ci0KLQkvKioKLQkgKiBEdWFsIFBvcnRlZCBSQU0uCi0JICovCi0JZXhjaXRlX2NjaV9mcGdhX2FsaWduX3QgZHByW0VYQ0lURV9EUFJfU0laRV07Ci0KLQkvKioKLQkgKiBTdGF0dXMuCi0JICovCi0JZXhjaXRlX2NjaV9mcGdhX2FsaWduX3Qgc3RhdHVzW0VYQ0lURV9EUFJfU1RBVFVTX1NJWkVdOwotCi0jaWZkZWYgRVhDSVRFX0NDSV9GUEdBX01LMgotCS8qKgotCSAqIFJNOTAwMCBJbnRlcnJ1cHQuCi0JICogV3JpdGUgYWNjZXNzIGluaXRpYXRlcyBpbnRlcnJ1cHQgYXQgdGhlIFJNOTAwMCAoTUlQUykgcHJvY2Vzc29yIG9mIHRoZSBlWGNpdGUuCi0JICovCi0JZXhjaXRlX2NjaV9mcGdhX2FsaWduX3Qgcm05a19pbnQ7Ci0jZWxzZQotCS8qKgotCSAqIE1LMiBJbnRlcnJ1cHQuCi0JICogV3JpdGUgYWNjZXNzIGluaXRpYXRlcyBpbnRlcnJ1cHQgYXQgdGhlIEFSTSBwcm9jZXNzb3Igb2YgdGhlIE1LMi4KLQkgKi8KLQlleGNpdGVfY2NpX2ZwZ2FfYWxpZ25fdCBtazJfaW50OwotCi0JZXhjaXRlX2NjaV9mcGdhX2FsaWduX3QgZ2FwWzB4MTAwMC0weDEwZl07Ci0KLQkvKioKLQkgKiBJUlEgU291cmNlL0Fja25vd2xlZGdlLgotCSAqLwotCWV4Y2l0ZV9jY2lfZnBnYV9hbGlnbl90IHJtOWtfaXJxX3NyYzsKLQotCS8qKgotCSAqIElSUSBNYXNrLgotCSAqIFNldCBiaXRzIGVuYWJsZSB0aGUgcmVsYXRlZCBpbnRlcnJ1cHQuCi0JICovCi0JZXhjaXRlX2NjaV9mcGdhX2FsaWduX3Qgcm05a19pcnFfbWFzazsKLSNlbmRpZgotCi0KLX0gZXhjaXRlX2ZwZ2E7Ci0KLQotCi0jZW5kaWYJLyogbmRlZiBFWENJVEVfRlBHQV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvZXhjaXRlX25hbmRmbGFzaC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL2V4Y2l0ZV9uYW5kZmxhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjZjYxNC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvZXhjaXRlX25hbmRmbGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9fRVhDSVRFX05BTkRGTEFTSF9IX18KLSNkZWZpbmUgX19FWENJVEVfTkFOREZMQVNIX0hfXwotCi0vKiBSZXNvdXJjZSBuYW1lcyAqLwotI2RlZmluZSBFWENJVEVfTkFOREZMQVNIX1JFU09VUkNFX1JFR1MJImV4Y2l0ZV9uYW5kZmxhc2hfcmVncyIKLQotI2VuZGlmIC8qIF9fRVhDSVRFX05BTkRGTEFTSF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS9ybTlrX2V0aC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfZXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NzA1YTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfZXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaWYgIWRlZmluZWQoX19STTlLX0VUSF9IX18pCi0jZGVmaW5lIF9fUk05S19FVEhfSF9fCi0KLSNkZWZpbmUgUk05S19HRV9OQU1FCQkJInJtOWtfZ2UiCi0KLS8qIFJlc291cmNlIG5hbWVzICovCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfTUFDICAgICAgCSJybTlrX2dlX21hYyIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9NU1RBVCAgICAgIAkicm05a19nZV9tc3RhdCIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9QS1RQUk9DCSJybTlrX2dlX3BrdHByb2MiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfWERNQQkJInJtOWtfZ2VfeGRtYSIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9GSUZPX1JYICAJInJtOWtfZ2VfZmlmb19yeCIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9GSUZPX1RYICAJInJtOWtfZ2VfZmlmb190eCIKLSNkZWZpbmUgUk05S19HRV9SRVNPVVJDRV9GSUZPTUVNX1JYICAJInJtOWtfZ2VfZmlmb19tZW1vcnlfcngiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRklGT01FTV9UWCAgCSJybTlrX2dlX2ZpZm9fbWVtb3J5X3R4IgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX1BIWSAgICAgIAkicm05a19nZV9waHkiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRE1BREVTQ19SWCAgCSJybTlrX2dlX2RtYWRlc2NfcngiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfRE1BREVTQ19UWCAgCSJybTlrX2dlX2RtYWRlc2NfdHgiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfSVJRX01BSU4JInJtOWtfZ2VfaXJxX21haW4iCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfSVJRX1BIWQkicm05a19nZV9pcnFfcGh5IgotI2RlZmluZSBSTTlLX0dFX1JFU09VUkNFX0dQSV9TTElDRQkicm05a19nZV9ncGlfc2xpY2UiCi0jZGVmaW5lIFJNOUtfR0VfUkVTT1VSQ0VfTURJT19DSEFOTkVMCSJybTlrX2dlX21kaW9fY2hhbm5lbCIKLQotI2VuZGlmIC8qICFkZWZpbmVkKF9fUk05S19FVEhfSF9fKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfd2R0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvcm05a193ZHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhM2MwOC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvcm05a193ZHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX19STTlLX1dEVF9IX18KLSNkZWZpbmUgX19STTlLX1dEVF9IX18KLQotLyogRGV2aWNlIG5hbWUgKi8KLSNkZWZpbmUgV0RUX05BTUUJCSJ3ZHRfZ3BpIgotCi0vKiBSZXNvdXJjZSBuYW1lcyAqLwotI2RlZmluZSBXRFRfUkVTT1VSQ0VfUkVHUwkiZXhjaXRlX3dhdGNoZG9nX3JlZ3MiCi0jZGVmaW5lIFdEVF9SRVNPVVJDRV9JUlEJImV4Y2l0ZV93YXRjaGRvZ19pcnEiCi0jZGVmaW5lIFdEVF9SRVNPVVJDRV9DT1VOVEVSCSJleGNpdGVfd2F0Y2hkb2dfY291bnRlciIKLQotI2VuZGlmIC8qIF9fUk05S19XRFRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvcm05a194aWNhcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZXhjaXRlL3JtOWtfeGljYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA5NTc3Ny4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvcm05a194aWNhcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2lmbmRlZiBfX0VYQ0lURV9YSUNBUF9IX18KLSNkZWZpbmUgX19FWENJVEVfWElDQVBfSF9fCi0KLQotLyogUmVzb3VyY2UgbmFtZXMgKi8KLSNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfRklGT19SWAkJInhpY2FwX2ZpZm9fcngiCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0ZJRk9fVFgJCSJ4aWNhcF9maWZvX3R4IgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9YRE1BIAkJInhpY2FwX3hkbWEiCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0RNQURFU0MJCSJ4aWNhcF9kbWFkZXNjIgotI2RlZmluZSBYSUNBUF9SRVNPVVJDRV9QS1RQUk9DICAJInhpY2FwX3BrdHByb2MiCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0lSUQkJInhpY2FwX2lycSIKLSNkZWZpbmUgWElDQVBfUkVTT1VSQ0VfR1BJX1NMSUNFCSJ4aWNhcF9ncGlfc2xpY2UiCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX0ZJRk9fQkxLCQkieGljYXBfZmlmb19ibG9ja3MiCi0jZGVmaW5lIFhJQ0FQX1JFU09VUkNFX1BLVF9TVFJFQU0JInhpY2FwX3BrdF9zdHJlYW0iCi0KLSNlbmRpZiAvKiBfX0VYQ0lURV9YSUNBUF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS93YXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWV4Y2l0ZS93YXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY4MjE4MC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1leGNpdGUvd2FyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA3IGJ5IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KLSAqLwotI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfRVhDSVRFX1dBUl9ICi0jZGVmaW5lIF9fQVNNX01JUFNfTUFDSF9FWENJVEVfV0FSX0gKLQotI2RlZmluZSBSNDYwMF9WMV9JTkRFWF9JQ0FDSEVPUF9XQVIJMAotI2RlZmluZSBSNDYwMF9WMV9ISVRfQ0FDSEVPUF9XQVIJMAotI2RlZmluZSBSNDYwMF9WMl9ISVRfQ0FDSEVPUF9XQVIJMAotI2RlZmluZSBSNTQzMl9DUDBfSU5URVJSVVBUX1dBUgkJMAotI2RlZmluZSBCQ00xMjUwX00zX1dBUgkJCTAKLSNkZWZpbmUgU0lCWVRFXzE5NTZfV0FSCQkJMAotI2RlZmluZSBNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIJMAotI2RlZmluZSBNSVBTX0NBQ0hFX1NZTkNfV0FSCQkwCi0jZGVmaW5lIFRYNDlYWF9JQ0FDSEVfSU5ERVhfSU5WX1dBUgkwCi0jZGVmaW5lIFJNOTAwMF9DREVYX1NNUF9XQVIJCTEKLSNkZWZpbmUgSUNBQ0hFX1JFRklMTFNfV09SS0FST1VORF9XQVIgICAxCi0jZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKLSNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJMAotCi0jZW5kaWYgLyogX19BU01fTUlQU19NQUNIX0VYQ0lURV9XQVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCmluZGV4IDA5YTU5YmMuLjFiMWE3ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKQEAgLTI0LDcgKzI0LDkgQEAKIAogI2RlZmluZSBjcHVfdG9fbm9kZShjcHUpCShzbl9jcHVfaW5mb1soY3B1KV0ucF9ub2RlaWQpCiAjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpCShub2RlKQotI2RlZmluZSBjcHVtYXNrX29mX25vZGUobm9kZSkJKCZodWJfZGF0YShub2RlKS0+aF9jcHVzKQorI2RlZmluZSBjcHVtYXNrX29mX25vZGUobm9kZSkJKChub2RlKSA9PSAtMSA/CQkJCVwKKwkJCQkgY3B1X2FsbF9tYXNrIDoJCQkJXAorCQkJCSAmaHViX2RhdGEobm9kZSktPmhfY3B1cykKIHN0cnVjdCBwY2lfYnVzOwogZXh0ZXJuIGludCBwY2lidXNfdG9fbm9kZShzdHJ1Y3QgcGNpX2J1cyAqKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWY3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2LmgKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBUaGUgaGVhZGVyIGZpbGUgb2YgY3M1NTM2IHNvdXJ0aCBicmlkZ2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUgPGxpdWpsQGxlbW90ZS5jb20+CisgKi8KKworI2lmbmRlZglfQ1M1NTM2X0gKKyNkZWZpbmUJX0NTNTUzNl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdm9pZCBfcmRtc3IodTMyIG1zciwgdTMyICpoaSwgdTMyICpsbyk7CitleHRlcm4gdm9pZCBfd3Jtc3IodTMyIG1zciwgdTMyIGhpLCB1MzIgbG8pOworCisvKgorICogTVNSIG1vZHVsZSBiYXNlCisgKi8KKyNkZWZpbmUJQ1M1NTM2X1NCX01TUl9CQVNFCSgweDAwMDAwMDAwKQorI2RlZmluZQlDUzU1MzZfR0xJVV9NU1JfQkFTRQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUJQ1M1NTM2X0lMTEVHQUxfTVNSX0JBU0UJKDB4MjAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9VU0JfTVNSX0JBU0UJKDB4NDAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9JREVfTVNSX0JBU0UJKDB4NjAwMDAwMDApCisjZGVmaW5lCUNTNTUzNl9ESVZJTF9NU1JfQkFTRQkoMHg4MDAwMDAwMCkKKyNkZWZpbmUJQ1M1NTM2X0FDQ19NU1JfQkFTRQkoMHhhMDAwMDAwMCkKKyNkZWZpbmUJQ1M1NTM2X1VOVVNFRF9NU1JfQkFTRQkoMHhjMDAwMDAwMCkKKyNkZWZpbmUJQ1M1NTM2X0dMQ1BfTVNSX0JBU0UJKDB4ZTAwMDAwMDApCisKKyNkZWZpbmUJU0JfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfU0JfTVNSX0JBU0UJfCAob2Zmc2V0KSkKKyNkZWZpbmUJR0xJVV9NU1JfUkVHKG9mZnNldCkJKENTNTUzNl9HTElVX01TUl9CQVNFCXwgKG9mZnNldCkpCisjZGVmaW5lCUlMTEVHQUxfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfSUxMRUdBTF9NU1JfQkFTRSB8IChvZmZzZXQpKQorI2RlZmluZQlVU0JfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfVVNCX01TUl9CQVNFCXwgKG9mZnNldCkpCisjZGVmaW5lCUlERV9NU1JfUkVHKG9mZnNldCkJKENTNTUzNl9JREVfTVNSX0JBU0UJfCAob2Zmc2V0KSkKKyNkZWZpbmUJRElWSUxfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfRElWSUxfTVNSX0JBU0UJfCAob2Zmc2V0KSkKKyNkZWZpbmUJQUNDX01TUl9SRUcob2Zmc2V0KQkoQ1M1NTM2X0FDQ19NU1JfQkFTRQl8IChvZmZzZXQpKQorI2RlZmluZQlVTlVTRURfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfVU5VU0VEX01TUl9CQVNFCXwgKG9mZnNldCkpCisjZGVmaW5lCUdMQ1BfTVNSX1JFRyhvZmZzZXQpCShDUzU1MzZfR0xDUF9NU1JfQkFTRQl8IChvZmZzZXQpKQorCisvKgorICogQkFSIFNQQUNFIE9GIFZJUlRVQUwgUENJIDoKKyAqIHJhbmdlIGZvciBwY2kgcHJvYmUgdXNlLCBsZW5ndGggaXMgdGhlIGFjdHVhbCBzaXplLgorICovCisvKiBJTyBzcGFjZSBmb3IgYWxsIERJVklMIG1vZHVsZXMgKi8KKyNkZWZpbmUJQ1M1NTM2X0lSUV9SQU5HRQkweGZmZmZmZmUwIC8qIFVTRVJEIEZPUiBQQ0kgUFJPQkUgKi8KKyNkZWZpbmUJQ1M1NTM2X0lSUV9MRU5HVEgJMHgyMAkvKiBUSEUgUkVHUyBBQ1RVQUwgTEVOR1RIICovCisjZGVmaW5lCUNTNTUzNl9TTUJfUkFOR0UJMHhmZmZmZmZmOAorI2RlZmluZQlDUzU1MzZfU01CX0xFTkdUSAkweDA4CisjZGVmaW5lCUNTNTUzNl9HUElPX1JBTkdFCTB4ZmZmZmZmMDAKKyNkZWZpbmUJQ1M1NTM2X0dQSU9fTEVOR1RICTB4MTAwCisjZGVmaW5lCUNTNTUzNl9NRkdQVF9SQU5HRQkweGZmZmZmZmMwCisjZGVmaW5lCUNTNTUzNl9NRkdQVF9MRU5HVEgJMHg0MAorI2RlZmluZQlDUzU1MzZfQUNQSV9SQU5HRQkweGZmZmZmZmUwCisjZGVmaW5lCUNTNTUzNl9BQ1BJX0xFTkdUSAkweDIwCisjZGVmaW5lCUNTNTUzNl9QTVNfUkFOR0UJMHhmZmZmZmY4MAorI2RlZmluZQlDUzU1MzZfUE1TX0xFTkdUSAkweDgwCisvKiBJTyBzcGFjZSBmb3IgSURFICovCisjZGVmaW5lCUNTNTUzNl9JREVfUkFOR0UJMHhmZmZmZmZmMAorI2RlZmluZQlDUzU1MzZfSURFX0xFTkdUSAkweDEwCisvKiBJTyBzcGFjZSBmb3IgQUNDICovCisjZGVmaW5lCUNTNTUzNl9BQ0NfUkFOR0UJMHhmZmZmZmY4MAorI2RlZmluZQlDUzU1MzZfQUNDX0xFTkdUSAkweDgwCisvKiBNRU0gc3BhY2UgZm9yIEFMTCBVU0IgbW9kdWxlcyAqLworI2RlZmluZQlDUzU1MzZfT0hDSV9SQU5HRQkweGZmZmZmMDAwCisjZGVmaW5lCUNTNTUzNl9PSENJX0xFTkdUSAkweDEwMDAKKyNkZWZpbmUJQ1M1NTM2X0VIQ0lfUkFOR0UJMHhmZmZmZjAwMAorI2RlZmluZQlDUzU1MzZfRUhDSV9MRU5HVEgJMHgxMDAwCisKKy8qCisgKiBQQ0kgTVNSIEFDQ0VTUworICovCisjZGVmaW5lCVBDSV9NU1JfQ1RSTAkJMHhGMAorI2RlZmluZQlQQ0lfTVNSX0FERFIJCTB4RjQKKyNkZWZpbmUJUENJX01TUl9EQVRBX0xPCQkweEY4CisjZGVmaW5lCVBDSV9NU1JfREFUQV9ISQkJMHhGQworCisvKioqKioqKioqKioqKioqKiBNU1IgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBHTElVIFNUQU5EQVJEIE1TUgorICovCisjZGVmaW5lCUdMSVVfQ0FQCQkweDAwCisjZGVmaW5lCUdMSVVfQ09ORklHCQkweDAxCisjZGVmaW5lCUdMSVVfU01JCQkweDAyCisjZGVmaW5lCUdMSVVfRVJST1IJCTB4MDMKKyNkZWZpbmUJR0xJVV9QTQkJCTB4MDQKKyNkZWZpbmUJR0xJVV9ESUFHCQkweDA1CisKKy8qCisgKiBHTElVIFNQRUMuIE1TUgorICovCisjZGVmaW5lCUdMSVVfUDJEX0JNMAkJMHgyMAorI2RlZmluZQlHTElVX1AyRF9CTTEJCTB4MjEKKyNkZWZpbmUJR0xJVV9QMkRfQk0yCQkweDIyCisjZGVmaW5lCUdMSVVfUDJEX0JNSzAJCTB4MjMKKyNkZWZpbmUJR0xJVV9QMkRfQk1LMQkJMHgyNAorI2RlZmluZQlHTElVX1AyRF9CTTMJCTB4MjUKKyNkZWZpbmUJR0xJVV9QMkRfQk00CQkweDI2CisjZGVmaW5lCUdMSVVfQ09ICQkweDgwCisjZGVmaW5lCUdMSVVfUEFFCQkweDgxCisjZGVmaW5lCUdMSVVfQVJCCQkweDgyCisjZGVmaW5lCUdMSVVfQVNNSQkJMHg4MworI2RlZmluZQlHTElVX0FFUlIJCTB4ODQKKyNkZWZpbmUJR0xJVV9ERUJVRwkJMHg4NQorI2RlZmluZQlHTElVX1BIWV9DQVAJCTB4ODYKKyNkZWZpbmUJR0xJVV9OT1VUX1JFU1AJCTB4ODcKKyNkZWZpbmUJR0xJVV9OT1VUX1dEQVRBCQkweDg4CisjZGVmaW5lCUdMSVVfV0hPQU1JCQkweDhCCisjZGVmaW5lCUdMSVVfU0xWX0RJUwkJMHg4QworI2RlZmluZQlHTElVX0lPRF9CTTAJCTB4RTAKKyNkZWZpbmUJR0xJVV9JT0RfQk0xCQkweEUxCisjZGVmaW5lCUdMSVVfSU9EX0JNMgkJMHhFMgorI2RlZmluZQlHTElVX0lPRF9CTTMJCTB4RTMKKyNkZWZpbmUJR0xJVV9JT0RfQk00CQkweEU0CisjZGVmaW5lCUdMSVVfSU9EX0JNNQkJMHhFNQorI2RlZmluZQlHTElVX0lPRF9CTTYJCTB4RTYKKyNkZWZpbmUJR0xJVV9JT0RfQk03CQkweEU3CisjZGVmaW5lCUdMSVVfSU9EX0JNOAkJMHhFOAorI2RlZmluZQlHTElVX0lPRF9CTTkJCTB4RTkKKyNkZWZpbmUJR0xJVV9JT0RfU0MwCQkweEVBCisjZGVmaW5lCUdMSVVfSU9EX1NDMQkJMHhFQgorI2RlZmluZQlHTElVX0lPRF9TQzIJCTB4RUMKKyNkZWZpbmUJR0xJVV9JT0RfU0MzCQkweEVECisjZGVmaW5lCUdMSVVfSU9EX1NDNAkJMHhFRQorI2RlZmluZQlHTElVX0lPRF9TQzUJCTB4RUYKKyNkZWZpbmUJR0xJVV9JT0RfU0M2CQkweEYwCisjZGVmaW5lCUdMSVVfSU9EX1NDNwkJMHhGMQorCisvKgorICogU0IgU1RBTkRBUkQKKyAqLworI2RlZmluZQlTQl9DQVAJCTB4MDAKKyNkZWZpbmUJU0JfQ09ORklHCTB4MDEKKyNkZWZpbmUJU0JfU01JCQkweDAyCisjZGVmaW5lCVNCX0VSUk9SCTB4MDMKKyNkZWZpbmUJU0JfTUFSX0VSUl9FTgkJMHgwMDAwMDAwMQorI2RlZmluZQlTQl9UQVJfRVJSX0VOCQkweDAwMDAwMDAyCisjZGVmaW5lCVNCX1JTVkRfQklUMQkJMHgwMDAwMDAwNAorI2RlZmluZQlTQl9FWENFUF9FUlJfRU4JCTB4MDAwMDAwMDgKKyNkZWZpbmUJU0JfU1lTRV9FUlJfRU4JCTB4MDAwMDAwMTAKKyNkZWZpbmUJU0JfUEFSRV9FUlJfRU4JCTB4MDAwMDAwMjAKKyNkZWZpbmUJU0JfVEFTX0VSUl9FTgkJMHgwMDAwMDA0MAorI2RlZmluZQlTQl9NQVJfRVJSX0ZMQUcJCTB4MDAwMTAwMDAKKyNkZWZpbmUJU0JfVEFSX0VSUl9GTEFHCQkweDAwMDIwMDAwCisjZGVmaW5lCVNCX1JTVkRfQklUMgkJMHgwMDA0MDAwMAorI2RlZmluZQlTQl9FWENFUF9FUlJfRkxBRwkweDAwMDgwMDAwCisjZGVmaW5lCVNCX1NZU0VfRVJSX0ZMQUcJMHgwMDEwMDAwMAorI2RlZmluZQlTQl9QQVJFX0VSUl9GTEFHCTB4MDAyMDAwMDAKKyNkZWZpbmUJU0JfVEFTX0VSUl9GTEFHCQkweDAwNDAwMDAwCisjZGVmaW5lCVNCX1BNCQkweDA0CisjZGVmaW5lCVNCX0RJQUcJCTB4MDUKKworLyoKKyAqIFNCIFNQRUMuCisgKi8KKyNkZWZpbmUJU0JfQ1RSTAkJMHgxMAorI2RlZmluZQlTQl9SMAkJMHgyMAorI2RlZmluZQlTQl9SMQkJMHgyMQorI2RlZmluZQlTQl9SMgkJMHgyMgorI2RlZmluZQlTQl9SMwkJMHgyMworI2RlZmluZQlTQl9SNAkJMHgyNAorI2RlZmluZQlTQl9SNQkJMHgyNQorI2RlZmluZQlTQl9SNgkJMHgyNgorI2RlZmluZQlTQl9SNwkJMHgyNworI2RlZmluZQlTQl9SOAkJMHgyOAorI2RlZmluZQlTQl9SOQkJMHgyOQorI2RlZmluZQlTQl9SMTAJCTB4MkEKKyNkZWZpbmUJU0JfUjExCQkweDJCCisjZGVmaW5lCVNCX1IxMgkJMHgyQworI2RlZmluZQlTQl9SMTMJCTB4MkQKKyNkZWZpbmUJU0JfUjE0CQkweDJFCisjZGVmaW5lCVNCX1IxNQkJMHgyRgorCisvKgorICogR0xDUCBTVEFOREFSRAorICovCisjZGVmaW5lCUdMQ1BfQ0FQCQkweDAwCisjZGVmaW5lCUdMQ1BfQ09ORklHCQkweDAxCisjZGVmaW5lCUdMQ1BfU01JCQkweDAyCisjZGVmaW5lCUdMQ1BfRVJST1IJCTB4MDMKKyNkZWZpbmUJR0xDUF9QTQkJCTB4MDQKKyNkZWZpbmUJR0xDUF9ESUFHCQkweDA1CisKKy8qCisgKiBHTENQIFNQRUMuCisgKi8KKyNkZWZpbmUJR0xDUF9DTEtfRElTX0RFTEFZCTB4MDgKKyNkZWZpbmUJR0xDUF9QTV9DTEtfRElTQUJMRQkweDA5CisjZGVmaW5lCUdMQ1BfR0xCX1BNCQkweDBCCisjZGVmaW5lCUdMQ1BfREJHX09VVAkJMHgwQworI2RlZmluZQlHTENQX1JTVkQxCQkweDBECisjZGVmaW5lCUdMQ1BfU09GVF9DT00JCTB4MEUKKyNkZWZpbmUJU09GVF9CQVJfU01CX0ZMQUcJMHgwMDAwMDAwMQorI2RlZmluZQlTT0ZUX0JBUl9HUElPX0ZMQUcJMHgwMDAwMDAwMgorI2RlZmluZQlTT0ZUX0JBUl9NRkdQVF9GTEFHCTB4MDAwMDAwMDQKKyNkZWZpbmUJU09GVF9CQVJfSVJRX0ZMQUcJMHgwMDAwMDAwOAorI2RlZmluZQlTT0ZUX0JBUl9QTVNfRkxBRwkweDAwMDAwMDEwCisjZGVmaW5lCVNPRlRfQkFSX0FDUElfRkxBRwkweDAwMDAwMDIwCisjZGVmaW5lCVNPRlRfQkFSX0lERV9GTEFHCTB4MDAwMDA0MDAKKyNkZWZpbmUJU09GVF9CQVJfQUNDX0ZMQUcJMHgwMDAwMDgwMAorI2RlZmluZQlTT0ZUX0JBUl9PSENJX0ZMQUcJMHgwMDAwMTAwMAorI2RlZmluZQlTT0ZUX0JBUl9FSENJX0ZMQUcJMHgwMDAwMjAwMAorI2RlZmluZQlHTENQX1JTVkQyCQkweDBGCisjZGVmaW5lCUdMQ1BfQ0xLX09GRgkJMHgxMAorI2RlZmluZQlHTENQX0NMS19BQ1RJVkUJCTB4MTEKKyNkZWZpbmUJR0xDUF9DTEtfRElTQUJMRQkweDEyCisjZGVmaW5lCUdMQ1BfQ0xLNEFDSwkJMHgxMworI2RlZmluZQlHTENQX1NZU19SU1QJCTB4MTQKKyNkZWZpbmUJR0xDUF9SU1ZEMwkJMHgxNQorI2RlZmluZQlHTENQX0RCR19DTEtfQ1RSTAkweDE2CisjZGVmaW5lCUdMQ1BfQ0hJUF9SRVZfSUQJMHgxNworCisvKiBQSUMgKi8KKyNkZWZpbmUJUElDX1lTRUxfTE9XCQkweDIwCisjZGVmaW5lCVBJQ19ZU0VMX0xPV19VU0JfU0hJRlQJCTgKKyNkZWZpbmUJUElDX1lTRUxfTE9XX0FDQ19TSElGVAkJMTYKKyNkZWZpbmUJUElDX1lTRUxfTE9XX0ZMQVNIX1NISUZUCTI0CisjZGVmaW5lCVBJQ19ZU0VMX0hJR0gJCTB4MjEKKyNkZWZpbmUJUElDX1pTRUxfTE9XCQkweDIyCisjZGVmaW5lCVBJQ19aU0VMX0hJR0gJCTB4MjMKKyNkZWZpbmUJUElDX0lSUU1fUFJJTQkJMHgyNAorI2RlZmluZQlQSUNfSVJRTV9MUEMJCTB4MjUKKyNkZWZpbmUJUElDX1hJUlJfU1RTX0xPVwkweDI2CisjZGVmaW5lCVBJQ19YSVJSX1NUU19ISUdICTB4MjcKKyNkZWZpbmUJUENJX1NIRFcJCTB4MzQKKworLyoKKyAqIERJVklMIFNUQU5EQVJECisgKi8KKyNkZWZpbmUJRElWSUxfQ0FQCQkweDAwCisjZGVmaW5lCURJVklMX0NPTkZJRwkJMHgwMQorI2RlZmluZQlESVZJTF9TTUkJCTB4MDIKKyNkZWZpbmUJRElWSUxfRVJST1IJCTB4MDMKKyNkZWZpbmUJRElWSUxfUE0JCTB4MDQKKyNkZWZpbmUJRElWSUxfRElBRwkJMHgwNQorCisvKgorICogRElWSUwgU1BFQy4KKyAqLworI2RlZmluZQlESVZJTF9MQkFSX0lSUQkJMHgwOAorI2RlZmluZQlESVZJTF9MQkFSX0tFTAkJMHgwOQorI2RlZmluZQlESVZJTF9MQkFSX1NNQgkJMHgwQgorI2RlZmluZQlESVZJTF9MQkFSX0dQSU8JCTB4MEMKKyNkZWZpbmUJRElWSUxfTEJBUl9NRkdQVAkweDBECisjZGVmaW5lCURJVklMX0xCQVJfQUNQSQkJMHgwRQorI2RlZmluZQlESVZJTF9MQkFSX1BNUwkJMHgwRgorI2RlZmluZQlESVZJTF9MRUdfSU8JCTB4MTQKKyNkZWZpbmUJRElWSUxfQkFMTF9PUFRTCQkweDE1CisjZGVmaW5lCURJVklMX1NPRlRfSVJRCQkweDE2CisjZGVmaW5lCURJVklMX1NPRlRfUkVTRVQJMHgxNworCisvKiBNRkdQVCAqLworI2RlZmluZSBNRkdQVF9JUlEJMHgyOAorCisvKgorICogSURFIFNUQU5EQVJECisgKi8KKyNkZWZpbmUJSURFX0NBUAkJMHgwMAorI2RlZmluZQlJREVfQ09ORklHCTB4MDEKKyNkZWZpbmUJSURFX1NNSQkJMHgwMgorI2RlZmluZQlJREVfRVJST1IJMHgwMworI2RlZmluZQlJREVfUE0JCTB4MDQKKyNkZWZpbmUJSURFX0RJQUcJMHgwNQorCisvKgorICogSURFIFNQRUMuCisgKi8KKyNkZWZpbmUJSURFX0lPX0JBUgkweDA4CisjZGVmaW5lCUlERV9DRkcJCTB4MTAKKyNkZWZpbmUJSURFX0RUQwkJMHgxMgorI2RlZmluZQlJREVfQ0FTVAkweDEzCisjZGVmaW5lCUlERV9FVEMJCTB4MTQKKyNkZWZpbmUJSURFX0lOVEVSTkFMX1BNCTB4MTUKKworLyoKKyAqIEFDQyBTVEFOREFSRAorICovCisjZGVmaW5lCUFDQ19DQVAJCTB4MDAKKyNkZWZpbmUJQUNDX0NPTkZJRwkweDAxCisjZGVmaW5lCUFDQ19TTUkJCTB4MDIKKyNkZWZpbmUJQUNDX0VSUk9SCTB4MDMKKyNkZWZpbmUJQUNDX1BNCQkweDA0CisjZGVmaW5lCUFDQ19ESUFHCTB4MDUKKworLyoKKyAqIFVTQiBTVEFOREFSRAorICovCisjZGVmaW5lCVVTQl9DQVAJCTB4MDAKKyNkZWZpbmUJVVNCX0NPTkZJRwkweDAxCisjZGVmaW5lCVVTQl9TTUkJCTB4MDIKKyNkZWZpbmUJVVNCX0VSUk9SCTB4MDMKKyNkZWZpbmUJVVNCX1BNCQkweDA0CisjZGVmaW5lCVVTQl9ESUFHCTB4MDUKKworLyoKKyAqIFVTQiBTUEVDLgorICovCisjZGVmaW5lCVVTQl9PSENJCTB4MDgKKyNkZWZpbmUJVVNCX0VIQ0kJMHgwOQorCisvKioqKioqKioqKioqKioqKioqIE5BVElWRSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBHUElPIDogSS9PIFNQQUNFOyBSRUcgOiAzMkJJVFMgKi8KKyNkZWZpbmUJR1BJT0xfT1VUX1ZBTAkJMHgwMAorI2RlZmluZQlHUElPTF9PVVRfRU4JCTB4MDQKKworI2VuZGlmCQkJCS8qIF9DUzU1MzZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDkzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X21mZ3B0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIGNzNTUzNiBtZmdwdCBoZWFkZXIgZmlsZQorICovCisKKyNpZm5kZWYgX0NTNTUzNl9NRkdQVF9ICisjZGVmaW5lIF9DUzU1MzZfTUZHUFRfSAorCisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNi5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfcGNpLmg+CisKKyNpZmRlZiBDT05GSUdfQ1M1NTM2X01GR1BUCitleHRlcm4gdm9pZCBzZXR1cF9tZmdwdDBfdGltZXIodm9pZCk7CitleHRlcm4gdm9pZCBkaXNhYmxlX21mZ3B0MF9jb3VudGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgZW5hYmxlX21mZ3B0MF9jb3VudGVyKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21heWJlX3VudXNlZCBzZXR1cF9tZmdwdDBfdGltZXIodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21heWJlX3VudXNlZCBkaXNhYmxlX21mZ3B0MF9jb3VudGVyKHZvaWQpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgX19tYXliZV91bnVzZWQgZW5hYmxlX21mZ3B0MF9jb3VudGVyKHZvaWQpCit7Cit9CisjZW5kaWYKKworI2RlZmluZSBNRkdQVF9USUNLX1JBVEUgMTQzMTgwMDAKKyNkZWZpbmUgQ09NUEFSRSAgKChNRkdQVF9USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQorCisjZGVmaW5lIE1GR1BUX0JBU0UJbWZncHRfYmFzZQorI2RlZmluZSBNRkdQVDBfQ01QMgkoTUZHUFRfQkFTRSArIDIpCisjZGVmaW5lIE1GR1BUMF9DTlQJKE1GR1BUX0JBU0UgKyA0KQorI2RlZmluZSBNRkdQVDBfU0VUVVAJKE1GR1BUX0JBU0UgKyA2KQorCisjZW5kaWYgLyohX0NTNTUzNl9NRkdQVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3BjaS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGNhOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl9wY2kuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIHRoZSBkZWZpbml0aW9uIGZpbGUgb2YgY3M1NTM2IFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKS4KKyAqIHBjaSBjb25maWd1cmF0aW9uIHNwYWNlIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBWU00sIHNvCisgKiB0aGVyZSBpcyBubyBuZWVkIG9mIHRoZSBNU1IgcmVhZC93cml0ZSBub3csIGV4Y2VwdCB0aGUgc3BlYy4KKyAqIE1TUiByZWdpc3RlcnMgd2hpY2ggYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSBJbmMuCisgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQorICovCisKKyNpZm5kZWYJX0NTNTUzNl9QQ0lfSAorI2RlZmluZQlfQ1M1NTM2X1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9yZWdzLmg+CisKK2V4dGVybiB2b2lkIGNzNTUzNl9wY2lfY29uZl93cml0ZTQoaW50IGZ1bmN0aW9uLCBpbnQgcmVnLCB1MzIgdmFsdWUpOworZXh0ZXJuIHUzMiBjczU1MzZfcGNpX2NvbmZfcmVhZDQoaW50IGZ1bmN0aW9uLCBpbnQgcmVnKTsKKworI2RlZmluZQlDUzU1MzZfQUNDX0lOVFIJCTkKKyNkZWZpbmUJQ1M1NTM2X0lERV9JTlRSCQkxNAorI2RlZmluZQlDUzU1MzZfVVNCX0lOVFIJCTExCisjZGVmaW5lCUNTNTUzNl9NRkdQVF9JTlRSCTUKKyNkZWZpbmUJQ1M1NTM2X1VBUlQxX0lOVFIJNAorI2RlZmluZQlDUzU1MzZfVUFSVDJfSU5UUgkzCisKKy8qKioqKioqKioqKioqKiBQQ0kgQlVTIERFVklDRSBGVU5DVElPTiAqKioqKioqKioqKioqKiovCisKKy8qCisgKiBQQ0kgYnVzIGRldmljZSBmdW5jdGlvbgorICovCisjZGVmaW5lCVBDSV9CVVNfQ1M1NTM2CQkwCisjZGVmaW5lCVBDSV9JRFNFTF9DUzU1MzYJMTQKKworLyoqKioqKioqKiogU1RBTkRBUkQgUENJLTIuMiBFWFBBTlNJT04gKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgKiB3ZSBoYXZlIHRvIHZpcnR1YWxpemUgdGhlIFBDSSBjb25maWd1cmUgc3BhY2UgaGVhZCwgc28gd2Ugc2hvdWxkCisgKiBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBJRHMgYW5kIHNvbWUgb3RoZXJzLgorICovCisKKy8qIENPTkZJRyBvZiBQQ0kgVkVORE9SIElEKi8KKyNkZWZpbmUgQ0ZHX1BDSV9WRU5ET1JfSUQobW9kX2Rldl9pZCwgc3lzX3ZlbmRvcl9pZCkgXAorCSgoKG1vZF9kZXZfaWQpIDw8IDE2KSB8IChzeXNfdmVuZG9yX2lkKSkKKworLyogVkVORE9SIElEICovCisjZGVmaW5lCUNTNTUzNl9WRU5ET1JfSUQJMHgxMDIyCisKKy8qIERFVklDRSBJRCAqLworI2RlZmluZQlDUzU1MzZfSVNBX0RFVklDRV9JRAkJMHgyMDkwCisjZGVmaW5lCUNTNTUzNl9JREVfREVWSUNFX0lECQkweDIwOWEKKyNkZWZpbmUJQ1M1NTM2X0FDQ19ERVZJQ0VfSUQJCTB4MjA5MworI2RlZmluZQlDUzU1MzZfT0hDSV9ERVZJQ0VfSUQJCTB4MjA5NAorI2RlZmluZQlDUzU1MzZfRUhDSV9ERVZJQ0VfSUQJCTB4MjA5NQorCisvKiBDTEFTUyBDT0RFIDogQ0xBU1MgU1VCLUNMQVNTIElOVEVSRkFDRSAqLworI2RlZmluZQlDUzU1MzZfSVNBX0NMQVNTX0NPREUJCTB4MDYwMTAwCisjZGVmaW5lIENTNTUzNl9JREVfQ0xBU1NfQ09ERQkJMHgwMTAxODAKKyNkZWZpbmUJQ1M1NTM2X0FDQ19DTEFTU19DT0RFCQkweDA0MDEwMAorI2RlZmluZQlDUzU1MzZfT0hDSV9DTEFTU19DT0RFCQkweDBDMDMxMAorI2RlZmluZQlDUzU1MzZfRUhDSV9DTEFTU19DT0RFCQkweDBDMDMyMAorCisvKiBCSExDIDogQklTVCBIRUFERVItVFlQRSBMQVRFTkNZLVRJTUVSIENBQ0hFLUxJTkUtU0laRSAqLworCisjZGVmaW5lIENGR19QQ0lfQ0FDSEVfTElORV9TSVpFKGhlYWRlcl90eXBlLCBsYXRlbmN5X3RpbWVyKQlcCisJKChQQ0lfTk9ORV9CSVNUIDw8IDI0KSB8ICgoaGVhZGVyX3R5cGUpIDw8IDE2KSBcCisJCXwgKChsYXRlbmN5X3RpbWVyKSA8PCA4KSB8IFBDSV9OT1JNQUxfQ0FDSEVfTElORV9TSVpFKTsKKworI2RlZmluZQlQQ0lfTk9ORV9CSVNUCQkJMHgwMAkvKiBSTyBub3QgaW1wbGVtZW50ZWQgeWV0LiAqLworI2RlZmluZQlQQ0lfQlJJREdFX0hFQURFUl9UWVBFCQkweDgwCS8qIFJPICovCisjZGVmaW5lCVBDSV9OT1JNQUxfSEVBREVSX1RZUEUJCTB4MDAKKyNkZWZpbmUJUENJX05PUk1BTF9MQVRFTkNZX1RJTUVSCTB4MDAKKyNkZWZpbmUJUENJX05PUk1BTF9DQUNIRV9MSU5FX1NJWkUJMHgwOAkvKiBSVyAqLworCisvKiBCQVIgKi8KKyNkZWZpbmUJUENJX0JBUjBfUkVHCQkJMHgxMAorI2RlZmluZQlQQ0lfQkFSMV9SRUcJCQkweDE0CisjZGVmaW5lCVBDSV9CQVIyX1JFRwkJCTB4MTgKKyNkZWZpbmUJUENJX0JBUjNfUkVHCQkJMHgxYworI2RlZmluZQlQQ0lfQkFSNF9SRUcJCQkweDIwCisjZGVmaW5lCVBDSV9CQVI1X1JFRwkJCTB4MjQKKyNkZWZpbmUJUENJX0JBUl9DT1VOVAkJCTYKKyNkZWZpbmUJUENJX0JBUl9SQU5HRV9NQVNLCQkweEZGRkZGRkZGCisKKy8qIENBUkRCVVMgQ0lTIFBPSU5URVIgKi8KKyNkZWZpbmUJUENJX0NBUkRCVVNfQ0lTX1BPSU5URVIJCTB4MDAwMDAwMDAKKworLyogU1VCU1lTVEVNIFZFTkRPUiBJRCAgKi8KKyNkZWZpbmUJQ1M1NTM2X1NVQl9WRU5ET1JfSUQJCUNTNTUzNl9WRU5ET1JfSUQKKworLyogU1VCU1lTVEVNIElEICovCisjZGVmaW5lCUNTNTUzNl9JU0FfU1VCX0lECQlDUzU1MzZfSVNBX0RFVklDRV9JRAorI2RlZmluZQlDUzU1MzZfSURFX1NVQl9JRAkJQ1M1NTM2X0lERV9ERVZJQ0VfSUQKKyNkZWZpbmUJQ1M1NTM2X0FDQ19TVUJfSUQJCUNTNTUzNl9BQ0NfREVWSUNFX0lECisjZGVmaW5lCUNTNTUzNl9PSENJX1NVQl9JRAkJQ1M1NTM2X09IQ0lfREVWSUNFX0lECisjZGVmaW5lCUNTNTUzNl9FSENJX1NVQl9JRAkJQ1M1NTM2X0VIQ0lfREVWSUNFX0lECisKKy8qIEVYUEFOU0lPTiBST00gQkFSICovCisjZGVmaW5lCVBDSV9FWFBBTlNJT05fUk9NX0JBUgkJMHgwMDAwMDAwMAorCisvKiBDQVBBQklMSVRJRVMgUE9JTlRFUiAqLworI2RlZmluZQlQQ0lfQ0FQTElTVF9QT0lOVEVSCQkweDAwMDAwMDAwCisjZGVmaW5lIFBDSV9DQVBMSVNUX1VTQl9QT0lOVEVSCQkweDQwCisvKiBJTlRFUlJVUFQgKi8KKworI2RlZmluZSBDRkdfUENJX0lOVEVSUlVQVF9MSU5FKHBpbiwgbW9kX2ludHIpIFwKKwkoKFBDSV9NQVhfTEFURU5DWSA8PCAyNCkgfCAoUENJX01JTl9HUkFOVCA8PCAxNikgfCBcCisJCSgocGluKSA8PCA4KSB8IChtb2RfaW50cikpCisKKyNkZWZpbmUJUENJX01BWF9MQVRFTkNZCQkJMHg0MAorI2RlZmluZQlQQ0lfTUlOX0dSQU5UCQkJMHgwMAorI2RlZmluZQlQQ0lfREVGQVVMVF9QSU4JCQkweDAxCisKKy8qKioqKioqKioqKiBFWFBBTlNJT04gUENJIFJFRyAqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJU0EgRVhQQU5TSU9OCisgKi8KKyNkZWZpbmUJUENJX1VBUlQxX0lOVF9SRUcgCTB4NTAKKyNkZWZpbmUgUENJX1VBUlQyX0lOVF9SRUcJMHg1NAorI2RlZmluZQlQQ0lfSVNBX0ZJWFVQX1JFRwkweDU4CisKKy8qCisgKiBJREUgRVhQQU5TSU9OCisgKi8KKyNkZWZpbmUJUENJX0lERV9DRkdfUkVHCQkweDQwCisjZGVmaW5lCUNTNTUzNl9JREVfRkxBU0hfU0lHTkFUVVJFCTB4REVBREJFRUYKKyNkZWZpbmUJUENJX0lERV9EVENfUkVHCQkweDQ4CisjZGVmaW5lCVBDSV9JREVfQ0FTVF9SRUcJMHg0QworI2RlZmluZQlQQ0lfSURFX0VUQ19SRUcJCTB4NTAKKyNkZWZpbmUJUENJX0lERV9QTV9SRUcJCTB4NTQKKyNkZWZpbmUJUENJX0lERV9JTlRfUkVHCQkweDYwCisKKy8qCisgKiBBQ0MgRVhQQU5TSU9OCisgKi8KKyNkZWZpbmUJUENJX0FDQ19JTlRfUkVHCQkweDUwCisKKy8qCisgKiBPSENJIEVYUEFOU0lPTiA6IElOVFRFUlVQVCBJUyBJTVBMRU1FTlRFRCBCWSBUSEUgT0hDSQorICovCisjZGVmaW5lCVBDSV9PSENJX1BNX1JFRwkJMHg0MAorI2RlZmluZQlQQ0lfT0hDSV9JTlRfUkVHCTB4NTAKKworLyoKKyAqIEVIQ0kgRVhQQU5TSU9OCisgKi8KKyNkZWZpbmUJUENJX0VIQ0lfTEVHU01JRU5fUkVHCTB4NTAKKyNkZWZpbmUJUENJX0VIQ0lfTEVHU01JU1RTX1JFRwkweDU0CisjZGVmaW5lCVBDSV9FSENJX0ZMQURKX1JFRwkweDYwCisKKyNlbmRpZgkJCQkvKiBfQ1M1NTM2X1BDSV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwNWJlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIHRoZSByZWFkL3dyaXRlIGludGVyZmFjZXMgZm9yIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqLworCisjaWZuZGVmCV9DUzU1MzZfVlNNX0gKKyNkZWZpbmUJX0NTNTUzNl9WU01fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB2b2lkICgqY3M1NTM2X3BjaV92c21fd3JpdGUpKGludCByZWcsIHUzMiB2YWx1ZSk7Cit0eXBlZGVmIHUzMiAoKmNzNTUzNl9wY2lfdnNtX3JlYWQpKGludCByZWcpOworCisjZGVmaW5lIERFQ0xBUkVfQ1M1NTM2X01PRFVMRShuYW1lKSBcCitleHRlcm4gdm9pZCBwY2lfIyNuYW1lIyNfd3JpdGVfcmVnKGludCByZWcsIHUzMiB2YWx1ZSk7IFwKK2V4dGVybiB1MzIgcGNpXyMjbmFtZSMjX3JlYWRfcmVnKGludCByZWcpOworCisvKiBpZGUgbW9kdWxlICovCitERUNMQVJFX0NTNTUzNl9NT0RVTEUoaWRlKQorLyogYWNjIG1vZHVsZSAqLworREVDTEFSRV9DUzU1MzZfTU9EVUxFKGFjYykKKy8qIG9oY2kgbW9kdWxlICovCitERUNMQVJFX0NTNTUzNl9NT0RVTEUob2hjaSkKKy8qIGlzYSBtb2R1bGUgKi8KK0RFQ0xBUkVfQ1M1NTM2X01PRFVMRShpc2EpCisvKiBlaGNpIG1vZHVsZSAqLworREVDTEFSRV9DUzU1MzZfTU9EVUxFKGVoY2kpCisKKyNlbmRpZgkJCQkvKiBfQ1M1NTM2X1ZTTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9kbWEtY29oZXJlbmNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9kbWEtY29oZXJlbmNlLmgKaW5kZXggNzFhNjg1MS4uOTgxYzc1ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vZG1hLWNvaGVyZW5jZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2RtYS1jb2hlcmVuY2UuaApAQCAtMjgsNyArMjgsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbGF0X2RtYV9hZGRyX3RvX3BoeXMoc3RydWN0IGRldmljZSAqZGV2LAogCWRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xPT05HU09OMkYpICYmIGRlZmluZWQoQ09ORklHXzY0QklUKQorCXJldHVybiAoZG1hX2FkZHIgPiAweDhmZmZmZmZmKSA/IGRtYV9hZGRyIDogKGRtYV9hZGRyICYgMHgwZmZmZmZmZik7CisjZWxzZQogCXJldHVybiBkbWFfYWRkciAmIDB4N2ZmZmZmZmY7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBsYXRfdW5tYXBfZG1hX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaAppbmRleCBkYTcwYmNmLi5lZThiYzgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgogICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTUsOSArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0vKiB0aGVyZSBpcyBhbiBpbnRlcm5hbCBib25pdG82NC1jb21wYXRpYWJsZSBub3J0aGJyaWRnZSBpbiBsb29uZ3NvbjJlLzJmICovCi0jaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0Lmg+Ci0KIC8qIGxvb25nc29uIGludGVybmFsIG5vcnRoYnJpZGdlIGluaXRpYWxpemF0aW9uICovCiBleHRlcm4gdm9pZCBib25pdG9faXJxX2luaXQodm9pZCk7CiAKQEAgLTMyLDcgKzI5LDE5IEBACiAvKiBsb29uZ3Nvbi1zcGVjaWZpYyBjb21tYW5kIGxpbmUsIGVudiBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uICovCiBleHRlcm4gdm9pZCBfX2luaXQgcHJvbV9pbml0X21lbW9yeSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBwcm9tX2luaXRfbWFjaHR5cGUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHJvbV9pbml0X2Vudih2b2lkKTsKKyNpZmRlZiBDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFCitleHRlcm4gdW5zaWduZWQgbG9uZyBfbG9vbmdzb25fdWFydF9iYXNlLCBsb29uZ3Nvbl91YXJ0X2Jhc2U7CitleHRlcm4gdm9pZCBwcm9tX2luaXRfbG9vbmdzb25fdWFydF9iYXNlKHZvaWQpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9tX2luaXRfdWFydF9iYXNlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRQorCXByb21faW5pdF9sb29uZ3Nvbl91YXJ0X2Jhc2UoKTsKKyNlbmRpZgorfQogCiAvKiBpcnEgb3BlcmF0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHZvaWQgYm9uaXRvX2lycWRpc3BhdGNoKHZvaWQpOwpAQCAtNDAsMjUgKzQ5LDI3NiBAQAogZXh0ZXJuIHZvaWQgX19pbml0IHNldF9pcnFfdHJpZ2dlcl9tb2RlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IG1hY2hfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBtYWNoX2lycV9kaXNwYXRjaCh1bnNpZ25lZCBpbnQgcGVuZGluZyk7CitleHRlcm4gaW50IG1hY2hfaTgyNTlfaXJxKHZvaWQpOworCisvKiBXZSBuZWVkIHRoaXMgaW4gc29tZSBwbGFjZXMuLi4gKi8KKyNkZWZpbmUgZGVsYXkoKQkoewkJXAorCWludCB4OwkJCQlcCisJZm9yICh4ID0gMDsgeCA8IDEwMDAwMDsgeCsrKQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIiKTsgXAorfSkKKworI2RlZmluZSBMT09OR1NPTl9SRUcoeCkgXAorCSgqKHZvbGF0aWxlIHUzMiAqKSgoY2hhciAqKUNLU0VHMUFERFIoTE9PTkdTT05fUkVHX0JBU0UpICsgKHgpKSkKKworI2RlZmluZSBMT09OR1NPTl9JUlFfQkFTRQkzMgorI2RlZmluZSBMT09OR1NPTjJfUEVSRkNOVF9JUlEJKE1JUFNfQ1BVX0lSUV9CQVNFICsgNikgLyogY3B1IHBlcmYgY291bnRlciAqLworCisjZGVmaW5lIExPT05HU09OX0ZMQVNIX0JBU0UJMHgxYzAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9GTEFTSF9TSVpFCTB4MDIwMDAwMDAJLyogMzJNICovCisjZGVmaW5lIExPT05HU09OX0ZMQVNIX1RPUAkoTE9PTkdTT05fRkxBU0hfQkFTRStMT09OR1NPTl9GTEFTSF9TSVpFLTEpCisKKyNkZWZpbmUgTE9PTkdTT05fTElPMF9CQVNFCTB4MWUwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fTElPMF9TSVpFCTB4MDFDMDAwMDAJLyogMjhNICovCisjZGVmaW5lIExPT05HU09OX0xJTzBfVE9QCShMT09OR1NPTl9MSU8wX0JBU0UrTE9PTkdTT05fTElPMF9TSVpFLTEpCisKKyNkZWZpbmUgTE9PTkdTT05fQk9PVF9CQVNFCTB4MWZjMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fQk9PVF9TSVpFCTB4MDAxMDAwMDAJLyogMU0gKi8KKyNkZWZpbmUgTE9PTkdTT05fQk9PVF9UT1AgCShMT09OR1NPTl9CT09UX0JBU0UrTE9PTkdTT05fQk9PVF9TSVpFLTEpCisjZGVmaW5lIExPT05HU09OX1JFR19CQVNFIAkweDFmZTAwMDAwCisjZGVmaW5lIExPT05HU09OX1JFR19TSVpFIAkweDAwMTAwMDAwCS8qIDI1NkJ5dGVzICsgMjU2Qnl0ZXMgKyA/Pz8gKi8KKyNkZWZpbmUgTE9PTkdTT05fUkVHX1RPUAkoTE9PTkdTT05fUkVHX0JBU0UrTE9PTkdTT05fUkVHX1NJWkUtMSkKKworI2RlZmluZSBMT09OR1NPTl9MSU8xX0JBU0UgCTB4MWZmMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fTElPMV9TSVpFIAkweDAwMTAwMDAwCS8qIDFNICovCisjZGVmaW5lIExPT05HU09OX0xJTzFfVE9QCShMT09OR1NPTl9MSU8xX0JBU0UrTE9PTkdTT05fTElPMV9TSVpFLTEpCisKKyNkZWZpbmUgTE9PTkdTT05fUENJTE8wX0JBU0UJMHgxMDAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lMTzFfQkFTRQkweDE0MDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUxPMl9CQVNFCTB4MTgwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJTE9fQkFTRQlMT09OR1NPTl9QQ0lMTzBfQkFTRQorI2RlZmluZSBMT09OR1NPTl9QQ0lMT19TSVpFCTB4MGMwMDAwMDAJLyogNjRNICogMyAqLworI2RlZmluZSBMT09OR1NPTl9QQ0lMT19UT1AJKExPT05HU09OX1BDSUxPMF9CQVNFK0xPT05HU09OX1BDSUxPX1NJWkUtMSkKKworI2RlZmluZSBMT09OR1NPTl9QQ0lDRkdfQkFTRQkweDFmZTgwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUNGR19TSVpFCTB4MDAwMDA4MDAJLyogMksgKi8KKyNkZWZpbmUgTE9PTkdTT05fUENJQ0ZHX1RPUAkoTE9PTkdTT05fUENJQ0ZHX0JBU0UrTE9PTkdTT05fUENJQ0ZHX1NJWkUtMSkKKyNkZWZpbmUgTE9PTkdTT05fUENJSU9fQkFTRQkweDFmZDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUlPX1NJWkUJMHgwMDEwMDAwMAkvKiAxTSAqLworI2RlZmluZSBMT09OR1NPTl9QQ0lJT19UT1AJKExPT05HU09OX1BDSUlPX0JBU0UrTE9PTkdTT05fUENJSU9fU0laRS0xKQorCisvKiBMb29uZ3NvbiBSZWdpc3RlciBCYXNlcyAqLworCisjZGVmaW5lIExPT05HU09OX1BDSUNPTkZJR0JBU0UJMHgwMAorI2RlZmluZSBMT09OR1NPTl9SRUdCQVNFCTB4MTAwCiAKIC8qIFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLwotI2RlZmluZSBMT09OR1NPTl9QQ0lfSVNSNEMgIEJPTklUT19QQ0lfUkVHKDB4NGMpCisKKyNkZWZpbmUgTE9PTkdTT05fUENJX1JFRyh4KQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUENJQ09ORklHQkFTRSArICh4KSkKKyNkZWZpbmUgTE9PTkdTT05fUENJRElECQlMT09OR1NPTl9QQ0lfUkVHKDB4MDApCisjZGVmaW5lIExPT05HU09OX1BDSUNNRAkJTE9PTkdTT05fUENJX1JFRygweDA0KQorI2RlZmluZSBMT09OR1NPTl9QQ0lDTEFTUyAJTE9PTkdTT05fUENJX1JFRygweDA4KQorI2RlZmluZSBMT09OR1NPTl9QQ0lMVElNRVIJTE9PTkdTT05fUENJX1JFRygweDBjKQorI2RlZmluZSBMT09OR1NPTl9QQ0lCQVNFMCAJTE9PTkdTT05fUENJX1JFRygweDEwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lCQVNFMSAJTE9PTkdTT05fUENJX1JFRygweDE0KQorI2RlZmluZSBMT09OR1NPTl9QQ0lCQVNFMiAJTE9PTkdTT05fUENJX1JFRygweDE4KQorI2RlZmluZSBMT09OR1NPTl9QQ0lCQVNFMyAJTE9PTkdTT05fUENJX1JFRygweDFjKQorI2RlZmluZSBMT09OR1NPTl9QQ0lCQVNFNCAJTE9PTkdTT05fUENJX1JFRygweDIwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lFWFBSQkFTRQlMT09OR1NPTl9QQ0lfUkVHKDB4MzApCisjZGVmaW5lIExPT05HU09OX1BDSUlOVAkJTE9PTkdTT05fUENJX1JFRygweDNjKQorCisjZGVmaW5lIExPT05HU09OX1BDSV9JU1I0QwlMT09OR1NPTl9QQ0lfUkVHKDB4NGMpCisKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX1BFUlJfQ0xSCTB4ODAwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX1NFUlJfQ0xSCTB4NDAwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX01BQk9SVF9DTFIJMHgyMDAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lDTURfTVRBQk9SVF9DTFIJMHgxMDAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9QQ0lDTURfVEFCT1JUX0NMUgkweDA4MDAwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSUNNRF9NUEVSUl9DTFIgCTB4MDEwMDAwMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJQ01EX1BFUlJSRVNQRU4JMHgwMDAwMDA0MAorI2RlZmluZSBMT09OR1NPTl9QQ0lDTURfQVNURVBFTgkJMHgwMDAwMDA4MAorI2RlZmluZSBMT09OR1NPTl9QQ0lDTURfU0VSUkVOCQkweDAwMDAwMTAwCisjZGVmaW5lIExPT05HU09OX1BDSUxUSU1FUl9CVVNMQVRFTkNZCTB4MDAwMGZmMDAKKyNkZWZpbmUgTE9PTkdTT05fUENJTFRJTUVSX0JVU0xBVEVOQ1lfU0hJRlQJOAorCisvKiBMb29uZ3NvbiBoL3cgQ29uZmlndXJhdGlvbiAqLworCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19PRkZTRVQJCTB4NAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkcJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyBMT09OR1NPTl9HRU5DRkdfT0ZGU0VUKQorCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19ERUJVR01PREUJMHgwMDAwMDAwMQorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfU05PT1BFTgkJMHgwMDAwMDAwMgorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfQ1BVU0VMRlJFU0VUCTB4MDAwMDAwMDQKKworI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfRk9SQ0VfSVJRQQkweDAwMDAwMDA4CisjZGVmaW5lIExPT05HU09OX0dFTkNGR19JUlFBX0lTT1VUCTB4MDAwMDAwMTAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0lSUUFfRlJPTV9JTlQxCTB4MDAwMDAwMjAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0JZVEVTV0FQCTB4MDAwMDAwNDAKKworI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfVU5DQUNIRUQJMHgwMDAwMDA4MAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfUFJFRkVUQ0hFTgkweDAwMDAwMTAwCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19XQkVISU5ERU4JMHgwMDAwMDIwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfQ0FDSEVBTEcJMHgwMDAwMGMwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfQ0FDSEVBTEdfU0hJRlQJMTAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX1BDSVFVRVVFCTB4MDAwMDEwMDAKKyNkZWZpbmUgTE9PTkdTT05fR0VOQ0ZHX0NBQ0hFU1RPUAkweDAwMDAyMDAwCisjZGVmaW5lIExPT05HU09OX0dFTkNGR19NU1RSQllURVNXQVAJMHgwMDAwNDAwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfQlVTRVJSRU4JMHgwMDAwODAwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfTk9SRVRSWVRJTUVPVVQJMHgwMDAxMDAwMAorI2RlZmluZSBMT09OR1NPTl9HRU5DRkdfU0hPUlRDT1BZVElNRU9VVAkweDAwMDIwMDAwCisKKy8qIFBDSSBhZGRyZXNzIG1hcCBjb250cm9sICovCisKKyNkZWZpbmUgTE9PTkdTT05fUENJTUFQCQkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDEwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lNRU1CQVNFQ0ZHCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MTQpCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9DRkcJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgxOCkKKworLyogR1BJTyBSZWdzIC0gci93ICovCisKKyNkZWZpbmUgTE9PTkdTT05fR1BJT0RBVEEgCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MWMpCisjZGVmaW5lIExPT05HU09OX0dQSU9JRQkJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgyMCkKKworLyogSUNVIENvbmZpZ3VyYXRpb24gUmVncyAtIHIvdyAqLworCisjZGVmaW5lIExPT05HU09OX0lOVEVER0UJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgyNCkKKyNkZWZpbmUgTE9PTkdTT05fSU5UU1RFRVIgCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MjgpCisjZGVmaW5lIExPT05HU09OX0lOVFBPTAkJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgyYykKKworLyogSUNVIEVuYWJsZSBSZWdzIC0gSW50RW4gJiBJbnRJU1IgYXJlIHIvby4gKi8KKworI2RlZmluZSBMT09OR1NPTl9JTlRFTlNFVCAJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHgzMCkKKyNkZWZpbmUgTE9PTkdTT05fSU5URU5DTFIgCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4MzQpCisjZGVmaW5lIExPT05HU09OX0lOVEVOCQkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDM4KQorI2RlZmluZSBMT09OR1NPTl9JTlRJU1IJCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4M2MpCisKKy8qIElDVSAqLworI2RlZmluZSBMT09OR1NPTl9JQ1VfTUJPWEVTCQkweDAwMDAwMDBmCisjZGVmaW5lIExPT05HU09OX0lDVV9NQk9YRVNfU0hJRlQgCTAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0RNQVJEWQkJMHgwMDAwMDAxMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfRE1BRU1QVFkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0NPUFlSRFkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0NPUFlFTVBUWQkJMHgwMDAwMDA4MAorI2RlZmluZSBMT09OR1NPTl9JQ1VfQ09QWUVSUgkJMHgwMDAwMDEwMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfUENJSVJRCQkweDAwMDAwMjAwCisjZGVmaW5lIExPT05HU09OX0lDVV9NQVNURVJFUlIJCTB4MDAwMDA0MDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX1NZU1RFTUVSUgkJMHgwMDAwMDgwMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfRFJBTVBFUlIJCTB4MDAwMDEwMDAKKyNkZWZpbmUgTE9PTkdTT05fSUNVX1JFVFJZRVJSCQkweDAwMDAyMDAwCisjZGVmaW5lIExPT05HU09OX0lDVV9HUElPUwkJMHgwMWZmMDAwMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfR1BJT1NfU0hJRlQJCTE2CisjZGVmaW5lIExPT05HU09OX0lDVV9HUElOUwkJMHg3ZTAwMDAwMAorI2RlZmluZSBMT09OR1NPTl9JQ1VfR1BJTlNfU0hJRlQJCTI1CisjZGVmaW5lIExPT05HU09OX0lDVV9NQk9YKE4pCQkoMTw8KExPT05HU09OX0lDVV9NQk9YRVNfU0hJRlQrKE4pKSkKKyNkZWZpbmUgTE9PTkdTT05fSUNVX0dQSU8oTikJCSgxPDwoTE9PTkdTT05fSUNVX0dQSU9TX1NISUZUKyhOKSkpCisjZGVmaW5lIExPT05HU09OX0lDVV9HUElOKE4pCQkoMTw8KExPT05HU09OX0lDVV9HUElOU19TSElGVCsoTikpKQorCisvKiBQQ0kgcHJlZmV0Y2ggd2luZG93IGJhc2UgJiBtYXNrICovCisKKyNkZWZpbmUgTE9PTkdTT05fTUVNX1dJTl9CQVNFX0wgCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg0MCkKKyNkZWZpbmUgTE9PTkdTT05fTUVNX1dJTl9CQVNFX0ggCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg0NCkKKyNkZWZpbmUgTE9PTkdTT05fTUVNX1dJTl9NQVNLX0wgCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg0OCkKKyNkZWZpbmUgTE9PTkdTT05fTUVNX1dJTl9NQVNLX0ggCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg0YykKIAogLyogUENJX0hpdCpfU2VsXyogKi8KIAotI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMF9TRUxfTCAgICAgQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg1MCkKLSNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDBfU0VMX0ggICAgIEJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NTQpCi0jZGVmaW5lIExPT05HU09OX1BDSV9ISVQxX1NFTF9MICAgICBCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDU4KQotI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMV9TRUxfSCAgICAgQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg1YykKLSNkZWZpbmUgTE9PTkdTT05fUENJX0hJVDJfU0VMX0wgICAgIEJPTklUTyhCT05JVE9fUkVHQkFTRSArIDB4NjApCi0jZGVmaW5lIExPT05HU09OX1BDSV9ISVQyX1NFTF9IICAgICBCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDY0KQorI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMF9TRUxfTAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDUwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMF9TRUxfSAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDU0KQorI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMV9TRUxfTAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDU4KQorI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMV9TRUxfSAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDVjKQorI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMl9TRUxfTAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDYwKQorI2RlZmluZSBMT09OR1NPTl9QQ0lfSElUMl9TRUxfSAkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDY0KQogCiAvKiBQWEFyYiBDb25maWcgJiBTdGF0dXMgKi8KIAotI2RlZmluZSBMT09OR1NPTl9QWEFSQl9DRkcgICAgICBCT05JVE8oQk9OSVRPX1JFR0JBU0UgKyAweDY4KQotI2RlZmluZSBMT09OR1NPTl9QWEFSQl9TVEFUVVMgICAgICAgQk9OSVRPKEJPTklUT19SRUdCQVNFICsgMHg2YykKKyNkZWZpbmUgTE9PTkdTT05fUFhBUkJfQ0ZHCQlMT09OR1NPTl9SRUcoTE9PTkdTT05fUkVHQkFTRSArIDB4NjgpCisjZGVmaW5lIExPT05HU09OX1BYQVJCX1NUQVRVUwkJTE9PTkdTT05fUkVHKExPT05HU09OX1JFR0JBU0UgKyAweDZjKQogCi0vKiBsb29uZ3NvbjItc3BlY2lmaWMgcGVyZiBjb3VudGVyIElSUSAqLwotI2RlZmluZSBMT09OR1NPTjJfUEVSRkNOVF9JUlEgICAoTUlQU19DUFVfSVJRX0JBU0UgKyA2KQorLyogcGNpbWFwICovCisKKyNkZWZpbmUgTE9PTkdTT05fUENJTUFQX1BDSU1BUF9MTzAJMHgwMDAwMDAzZgorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQX0xPMF9TSElGVAkwCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9QQ0lNQVBfTE8xCTB4MDAwMDBmYzAKKyNkZWZpbmUgTE9PTkdTT05fUENJTUFQX1BDSU1BUF9MTzFfU0hJRlQJNgorI2RlZmluZSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQX0xPMgkweDAwMDNmMDAwCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9QQ0lNQVBfTE8yX1NISUZUCTEyCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9QQ0lNQVBfMgkweDAwMDQwMDAwCisjZGVmaW5lIExPT05HU09OX1BDSU1BUF9XSU4oV0lOLCBBRERSKQlcCisJKCgoKEFERFIpPj4yNikgJiBMT09OR1NPTl9QQ0lNQVBfUENJTUFQX0xPMCkgPDwgKChXSU4pKjYpKQorCisjaWZkZWYgQ09ORklHX0NQVV9TVVBQT1JUU19DUFVGUkVRCisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorZXh0ZXJuIHZvaWQgbG9vbmdzb24yX2NwdV93YWl0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbXTsKKworLyogQ2hpcCBDb25maWcgKi8KKyNkZWZpbmUgTE9PTkdTT05fQ0hJUENGRzAJCUxPT05HU09OX1JFRyhMT09OR1NPTl9SRUdCQVNFICsgMHg4MCkKKyNlbmRpZgorCisvKgorICogYWRkcmVzcyB3aW5kb3dzIGNvbmZpZ3VyYXRpb24gbW9kdWxlCisgKgorICogbG9vbmdzb24yZSBkbyBub3QgaGF2ZSB0aGlzIG1vZHVsZQorICovCisjaWZkZWYgQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHCisKKy8qIGFkZHJlc3Mgd2luZG93IGNvbmZpZyBtb2R1bGUgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIExPT05HU09OX0FERFJXSU5DRkdfQkFTRQkJMHgzZmYwMDAwMHVsCisjZGVmaW5lIExPT05HU09OX0FERFJXSU5DRkdfU0laRQkJMHgxODAKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2xvb25nc29uX2FkZHJ3aW5jZmdfYmFzZTsKKyNkZWZpbmUgTE9PTkdTT05fQUREUldJTkNGRyhvZmZzZXQpIFwKKwkoKih2b2xhdGlsZSB1NjQgKikoX2xvb25nc29uX2FkZHJ3aW5jZmdfYmFzZSArIChvZmZzZXQpKSkKKworI2RlZmluZSBDUFVfV0lOMF9CQVNFCUxPT05HU09OX0FERFJXSU5DRkcoMHgwMCkKKyNkZWZpbmUgQ1BVX1dJTjFfQkFTRQlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4MDgpCisjZGVmaW5lIENQVV9XSU4yX0JBU0UJTE9PTkdTT05fQUREUldJTkNGRygweDEwKQorI2RlZmluZSBDUFVfV0lOM19CQVNFCUxPT05HU09OX0FERFJXSU5DRkcoMHgxOCkKKworI2RlZmluZSBDUFVfV0lOMF9NQVNLCUxPT05HU09OX0FERFJXSU5DRkcoMHgyMCkKKyNkZWZpbmUgQ1BVX1dJTjFfTUFTSwlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4MjgpCisjZGVmaW5lIENQVV9XSU4yX01BU0sJTE9PTkdTT05fQUREUldJTkNGRygweDMwKQorI2RlZmluZSBDUFVfV0lOM19NQVNLCUxPT05HU09OX0FERFJXSU5DRkcoMHgzOCkKKworI2RlZmluZSBDUFVfV0lOMF9NTUFQCUxPT05HU09OX0FERFJXSU5DRkcoMHg0MCkKKyNkZWZpbmUgQ1BVX1dJTjFfTU1BUAlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4NDgpCisjZGVmaW5lIENQVV9XSU4yX01NQVAJTE9PTkdTT05fQUREUldJTkNGRygweDUwKQorI2RlZmluZSBDUFVfV0lOM19NTUFQCUxPT05HU09OX0FERFJXSU5DRkcoMHg1OCkKKworI2RlZmluZSBQQ0lETUFfV0lOMF9CQVNFCUxPT05HU09OX0FERFJXSU5DRkcoMHg2MCkKKyNkZWZpbmUgUENJRE1BX1dJTjFfQkFTRQlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4NjgpCisjZGVmaW5lIFBDSURNQV9XSU4yX0JBU0UJTE9PTkdTT05fQUREUldJTkNGRygweDcwKQorI2RlZmluZSBQQ0lETUFfV0lOM19CQVNFCUxPT05HU09OX0FERFJXSU5DRkcoMHg3OCkKKworI2RlZmluZSBQQ0lETUFfV0lOMF9NQVNLCUxPT05HU09OX0FERFJXSU5DRkcoMHg4MCkKKyNkZWZpbmUgUENJRE1BX1dJTjFfTUFTSwlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4ODgpCisjZGVmaW5lIFBDSURNQV9XSU4yX01BU0sJTE9PTkdTT05fQUREUldJTkNGRygweDkwKQorI2RlZmluZSBQQ0lETUFfV0lOM19NQVNLCUxPT05HU09OX0FERFJXSU5DRkcoMHg5OCkKKworI2RlZmluZSBQQ0lETUFfV0lOMF9NTUFQCUxPT05HU09OX0FERFJXSU5DRkcoMHhhMCkKKyNkZWZpbmUgUENJRE1BX1dJTjFfTU1BUAlMT09OR1NPTl9BRERSV0lOQ0ZHKDB4YTgpCisjZGVmaW5lIFBDSURNQV9XSU4yX01NQVAJTE9PTkdTT05fQUREUldJTkNGRygweGIwKQorI2RlZmluZSBQQ0lETUFfV0lOM19NTUFQCUxPT05HU09OX0FERFJXSU5DRkcoMHhiOCkKKworI2RlZmluZSBBRERSV0lOX1dJTjAJMAorI2RlZmluZSBBRERSV0lOX1dJTjEJMQorI2RlZmluZSBBRERSV0lOX1dJTjIJMgorI2RlZmluZSBBRERSV0lOX1dJTjMJMworCisjZGVmaW5lIEFERFJXSU5fTUFQX0RTVF9ERFIJMAorI2RlZmluZSBBRERSV0lOX01BUF9EU1RfUENJCTEKKyNkZWZpbmUgQUREUldJTl9NQVBfRFNUX0xJTwkxCisKKy8qCisgKiBzOiBDUFUsIFBDSURNQQorICogZDogRERSLCBQQ0ksIExJTworICogd2luOiAwLCAxLCAyLCAzCisgKiBzcmM6IG1hcCBzb3VyY2UKKyAqIGRzdDogbWFwIGRlc3RpbmF0aW9uCisgKiBzaXplOiB+bWFzayArIDEKKyAqLworI2RlZmluZSBMT09OR1NPTl9BRERSV0lOX0NGRyhzLCBkLCB3LCBzcmMsIGRzdCwgc2l6ZSkgZG8ge1wKKwlzIyNfV0lOIyN3IyNfQkFTRSA9IChzcmMpOyBcCisJcyMjX1dJTiMjdyMjX01NQVAgPSAoc3JjKSB8IEFERFJXSU5fTUFQX0RTVF8jI2Q7IFwKKwlzIyNfV0lOIyN3IyNfTUFTSyA9IH4oc2l6ZS0xKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBMT09OR1NPTl9BRERSV0lOX0NQVVRPUENJKHdpbiwgc3JjLCBkc3QsIHNpemUpIFwKKwlMT09OR1NPTl9BRERSV0lOX0NGRyhDUFUsIFBDSSwgd2luLCBzcmMsIGRzdCwgc2l6ZSkKKyNkZWZpbmUgTE9PTkdTT05fQUREUldJTl9DUFVUT0REUih3aW4sIHNyYywgZHN0LCBzaXplKSBcCisJTE9PTkdTT05fQUREUldJTl9DRkcoQ1BVLCBERFIsIHdpbiwgc3JjLCBkc3QsIHNpemUpCisjZGVmaW5lIExPT05HU09OX0FERFJXSU5fUENJVE9ERFIod2luLCBzcmMsIGRzdCwgc2l6ZSkgXAorCUxPT05HU09OX0FERFJXSU5fQ0ZHKFBDSURNQSwgRERSLCB3aW4sIHNyYywgZHN0LCBzaXplKQorCisjZW5kaWYJLyogISBDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcgKi8KIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTE9PTkdTT05fTE9PTkdTT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCmluZGV4IDIwNmVhMjAuLmFjZjgzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKQEAgLTEzLDEwICsxMywxNSBAQAogCiAjaWZkZWYgQ09ORklHX0xFTU9URV9GVUxPT05HMkUKIAotI2RlZmluZSBMT09OR1NPTl9VQVJUX0JBU0UgKEJPTklUT19QQ0lJT19CQVNFICsgMHgzZjgpCi0KICNkZWZpbmUgTE9PTkdTT05fTUFDSFRZUEUgTUFDSF9MRU1PVEVfRkwyRQogCiAjZW5kaWYKIAorLyogdXNlIGZ1bG9vbmcyZiBhcyB0aGUgZGVmYXVsdCBtYWNoaW5lIG9mIExFTU9URV9NQUNIMkYgKi8KKyNpZmRlZiBDT05GSUdfTEVNT1RFX01BQ0gyRgorCisjZGVmaW5lIExPT05HU09OX01BQ0hUWVBFIE1BQ0hfTEVNT1RFX0ZMMkYKKworI2VuZGlmCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0xPT05HU09OX01BQ0hJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaAppbmRleCBiZDdiM2NiLi5lOTk2MGYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCiAgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xMiwxOSArMTIsMzAgQEAKICNkZWZpbmUgX19BU01fTUFDSF9MT09OR1NPTl9NRU1fSAogCiAvKgotICogT24gTGVtb3RlIExvb25nc29uIDJlCisgKiBoaWdoIG1lbW9yeSBzcGFjZQogICoKLSAqIHRoZSBoaWdoIG1lbW9yeSBzcGFjZSBzdGFydHMgZnJvbSA1MTJNLgotICogdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHJlc2lkZSBiZXR3ZWVuIDB4MTAwMDowMDAwIGFuZCAweDIwMDA6MDAwMC4KKyAqIGluIGxvb25nc29uMmUsIHN0YXJ0cyBmcm9tIDUxMk0KKyAqIGluIGxvb25nc29uMmYsIHN0YXJ0cyBmcm9tIDJHIDI1Nk0KKyAqLworI2lmZGVmIENPTkZJR19DUFVfTE9PTkdTT04yRQorI2RlZmluZSBMT09OR1NPTl9ISUdITUVNX1NUQVJUCTB4MjAwMDAwMDAKKyNlbHNlCisjZGVmaW5lIExPT05HU09OX0hJR0hNRU1fU1RBUlQJMHg5MDAwMDAwMAorI2VuZGlmCisKKy8qCisgKiB0aGUgcGVyaXBoZXJhbCByZWdpc3RlcnMoTU1JTyk6CisgKgorICogT24gdGhlIExlbW90ZSBMb29uZ3NvbiAyZSBzeXN0ZW0sIHJlc2lkZSBiZXR3ZWVuIDB4MTAwMDowMDAwIGFuZCAweDIwMDA6MDAwMC4KKyAqIE9uIHRoZSBMZW1vdGUgTG9vbmdzb24gMmYgc3lzdGVtLCByZXNpZGUgYmV0d2VlbiAweDEwMDA6MDAwMCBhbmQgMHg4MDAwOjAwMDAuCiAgKi8KIAotI2lmZGVmIENPTkZJR19MRU1PVEVfRlVMT09ORzJFCi0KLSNkZWZpbmUgTE9PTkdTT05fSElHSE1FTV9TVEFSVCAgMHgyMDAwMDAwMAotCiAjZGVmaW5lIExPT05HU09OX01NSU9fTUVNX1NUQVJUIDB4MTAwMDAwMDAKLSNkZWZpbmUgTE9PTkdTT05fTU1JT19NRU1fRU5EICAgMHgyMDAwMDAwMAogCisjaWZkZWYgQ09ORklHX0NQVV9MT09OR1NPTjJFCisjZGVmaW5lIExPT05HU09OX01NSU9fTUVNX0VORAkweDIwMDAwMDAwCisjZWxzZQorI2RlZmluZSBMT09OR1NPTl9NTUlPX01FTV9FTkQJMHg4MDAwMDAwMAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0xPT05HU09OX01FTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCmluZGV4IGYxNjYzY2EuLmExOTlhNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwOCBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA5IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CiAgKiBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKQEAgLTIyLDE2ICsyMywzOSBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX1BDSV9IXwogI2RlZmluZSBfX0FTTV9NQUNIX0xPT05HU09OX1BDSV9IXwogCi1leHRlcm4gc3RydWN0IHBjaV9vcHMgYm9uaXRvNjRfcGNpX29wczsKK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBsb29uZ3Nvbl9wY2lfb3BzOwogCi0jaWZkZWYgQ09ORklHX0xFTU9URV9GVUxPT05HMkUKLQotLyogdGhpcyBwY2kgbWVtb3J5IHNwYWNlIGlzIG1hcHBlZCBieSBwY2ltYXAgaW4gcGNpLmMgKi8KLSNkZWZpbmUgTE9PTkdTT05fUENJX01FTV9TVEFSVAlCT05JVE9fUENJTE8xX0JBU0UKLSNkZWZpbmUgTE9PTkdTT05fUENJX01FTV9FTkQJKEJPTklUT19QQ0lMTzFfQkFTRSArIDB4MDQwMDAwMDAgKiAyKQogLyogdGhpcyBpcyBhbiBvZmZzZXQgZnJvbSBtaXBzX2lvX3BvcnRfYmFzZSAqLwogI2RlZmluZSBMT09OR1NPTl9QQ0lfSU9fU1RBUlQJMHgwMDAwNDAwMFVMCiAKLSNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRworCisvKgorICogd2UgdXNlIGFkZHJlc3Mgd2luZG93MiB0byBtYXAgY3B1IGFkZHJlc3Mgc3BhY2UgdG8gcGNpIHNwYWNlCisgKiB3aW5kb3cyOiBjcHUgWzFHLCAyR10gLT4gcGNpIFsxRywgMkddCisgKiB3aHkgbm90IHVzZSB3aW5kb3cgMCAmIDE/IGJlY2F1c2UgdGhleSBhcmUgdXNlZCBieSBjcHUgd2hlbiBib290aW5nLgorICogd2luZG93MDogY3B1IFswLCAyNTZNXSAtPiBkZHIgWzAsIDI1Nk1dCisgKiB3aW5kb3cxOiBjcHUgWzI1Nk0sIDUxMk1dIC0+IHBjaSBbMjU2TSwgNTEyTV0KKyAqLworCisvKiB0aGUgc21hbGxlc3QgTE9PTkdTT05fQ1BVX01FTV9TUkMgY2FuIGJlIDUxMk0gKi8KKyNkZWZpbmUgTE9PTkdTT05fQ1BVX01FTV9TUkMJMHg0MDAwMDAwMHVsCQkvKiAxRyAqLworI2RlZmluZSBMT09OR1NPTl9QQ0lfTUVNX0RTVAlMT09OR1NPTl9DUFVfTUVNX1NSQworCisjZGVmaW5lIExPT05HU09OX1BDSV9NRU1fU1RBUlQJTE9PTkdTT05fUENJX01FTV9EU1QKKyNkZWZpbmUgTE9PTkdTT05fUENJX01FTV9FTkQJKDB4ODAwMDAwMDB1bC0xKQkvKiAyRyAqLworCisjZGVmaW5lIE1NQVBfQ1BVVE9QQ0lfU0laRQkoTE9PTkdTT05fUENJX01FTV9FTkQgLSBcCisJCQkJCUxPT05HU09OX1BDSV9NRU1fU1RBUlQgKyAxKQorCisjZWxzZQkvKiBsb29uZ3NvbjJmLzMyYml0ICYgbG9vbmdzb24yZSAqLworCisvKiB0aGlzIHBjaSBtZW1vcnkgc3BhY2UgaXMgbWFwcGVkIGJ5IHBjaW1hcCBpbiBwY2kuYyAqLworI2RlZmluZSBMT09OR1NPTl9QQ0lfTUVNX1NUQVJUCUxPT05HU09OX1BDSUxPMV9CQVNFCisjZGVmaW5lIExPT05HU09OX1BDSV9NRU1fRU5ECShMT09OR1NPTl9QQ0lMTzFfQkFTRSArIDB4MDQwMDAwMDAgKiAyKQorLyogdGhpcyBpcyBhbiBvZmZzZXQgZnJvbSBtaXBzX2lvX3BvcnRfYmFzZSAqLworI2RlZmluZSBMT09OR1NPTl9QQ0lfSU9fU1RBUlQJMHgwMDAwNDAwMFVMCisKKyNlbmRpZgkvKiAhQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHICovCiAKICNlbmRpZiAvKiAhX19BU01fTUFDSF9MT09OR1NPTl9QQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhZDQzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvYXNpYy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fTUFDSF9QT1dFUlRWX0FTSUNfSAorI2RlZmluZSBfQVNNX01BQ0hfUE9XRVJUVl9BU0lDX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisKKyNkZWZpbmUgRFZSX0NBUEFCTEUgICAgICgxPDwwKQorI2RlZmluZSBQQ0lFX0NBUEFCTEUgICAgKDE8PDEpCisjZGVmaW5lIEZGU19DQVBBQkxFICAgICAoMTw8MikKKyNkZWZpbmUgRElTUExBWV9DQVBBQkxFICgxPDwzKQorCisvKiBQbGF0Zm9ybSBGYW1pbHkgdHlwZXMKKyAqIEZvciBjb21waXRhYmlsaXR5LCB0aGUgbmV3IHZhbHVlIG11c3QgYmUgYWRkZWQgaW4gdGhlIGVuZCAqLworZW51bSBmYW1pbHlfdHlwZSB7CisJRkFNSUxZXzg1MDAsCisJRkFNSUxZXzg1MDBSTkcsCisJRkFNSUxZXzQ1MDAsCisJRkFNSUxZXzE1MDAsCisJRkFNSUxZXzg2MDAsCisJRkFNSUxZXzQ2MDAsCisJRkFNSUxZXzQ2MDBWWkEsCisJRkFNSUxZXzg2MDBWWkIsCisJRkFNSUxZXzE1MDBWWkUsCisJRkFNSUxZXzE1MDBWWkYsCisJRkFNSUxJRVMKK307CisKKy8qIFJlZ2lzdGVyIG1hcHMgZm9yIGVhY2ggQVNJQyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgY2FsbGlvcGVfcmVnaXN0ZXJfbWFwOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgY3JvbnVzX3JlZ2lzdGVyX21hcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwIHpldXNfcmVnaXN0ZXJfbWFwOworCitleHRlcm4gc3RydWN0IHJlc291cmNlIGR2cl9jcm9udXNfcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHJlc291cmNlIGR2cl96ZXVzX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX2NhbGxpb3BlX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX2Nyb251c19yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl9jcm9udXNsaXRlX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX3Z6X2NhbGxpb3BlX3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBub25fZHZyX3Z6ZV9jYWxsaW9wZV9yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl92emZfY2FsbGlvcGVfcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHJlc291cmNlIG5vbl9kdnJfemV1c19yZXNvdXJjZXNbXTsKKworZXh0ZXJuIHZvaWQgcG93ZXJ0dl9wbGF0Zm9ybV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fYWxsb2NfYm9vdG1lbSh2b2lkKTsKK2V4dGVybiBlbnVtIGFzaWNfdHlwZSBwbGF0Zm9ybV9nZXRfYXNpYyh2b2lkKTsKK2V4dGVybiBlbnVtIGZhbWlseV90eXBlIHBsYXRmb3JtX2dldF9mYW1pbHkodm9pZCk7CitleHRlcm4gaW50IHBsYXRmb3JtX3N1cHBvcnRzX2R2cih2b2lkKTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fc3VwcG9ydHNfZmZzKHZvaWQpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9zdXBwb3J0c19wY2llKHZvaWQpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9zdXBwb3J0c19kaXNwbGF5KHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlndXJlX3BsYXRmb3JtKHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9laGNpKHZvaWQpOworZXh0ZXJuIHZvaWQgcGxhdGZvcm1fdW5jb25maWd1cmVfdXNiX2VoY2kodm9pZCk7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV9jb25maWd1cmVfdXNiX29oY2kodm9pZCk7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2Jfb2hjaSh2b2lkKTsKKworLyogUGxhdGZvcm0gUmVzb3VyY2VzICovCisjZGVmaW5lIEFTSUNfUkVTT1VSQ0VfR0VUX0VYSVNUUyAxCitleHRlcm4gc3RydWN0IHJlc291cmNlICphc2ljX3Jlc291cmNlX2dldChjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX3JlbGVhc2VfbWVtb3J5KHZvaWQgKmJhZGRyLCBpbnQgc2l6ZSk7CisKKy8qIFJlYm9vdCBDYXVzZSAqLworZXh0ZXJuIHZvaWQgc2V0X3JlYm9vdF9jYXVzZShjaGFyIGNvZGUsIHVuc2lnbmVkIGludCBkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YTIpOworZXh0ZXJuIHZvaWQgc2V0X2xvY2tlZF9yZWJvb3RfY2F1c2UoY2hhciBjb2RlLCB1bnNpZ25lZCBpbnQgZGF0YSwKKwl1bnNpZ25lZCBpbnQgZGF0YTIpOworCitlbnVtIHN5c19yZWJvb3RfdHlwZSB7CisJc3lzX3Vua25vd25fcmVib290ID0gMHgwMCwJLyogVW5rbm93biByZWJvb3QgY2F1c2UgKi8KKwlzeXNfZGF2aWNfY2hhbmdlID0gMHgwMSwJLyogUmVib290IGR1ZSB0byBjaGFuZ2UgaW4gREFWSUMKKwkJCQkJICogbW9kZSAqLworCXN5c191c2VyX3JlYm9vdCA9IDB4MDIsCQkvKiBSZWJvb3QgaW5pdGlhdGVkIGJ5IHVzZXIgKi8KKwlzeXNfc3lzdGVtX3JlYm9vdCA9IDB4MDMsCS8qIFJlYm9vdCBpbml0aWF0ZWQgYnkgT1MgKi8KKwlzeXNfdHJhcF9yZWJvb3QgPSAweDA0LAkJLyogUmVib290IGR1ZSB0byBhIENQVSB0cmFwICovCisJc3lzX3NpbGVudF9yZWJvb3QgPSAweDA1LAkvKiBTaWxlbnQgcmVib290ICovCisJc3lzX2Jvb3RfbGRyX3JlYm9vdCA9IDB4MDYsCS8qIEJvb3Rsb2FkZXIgcmVib290ICovCisJc3lzX3Bvd2VyX3VwX3JlYm9vdCA9IDB4MDcsCS8qIFBvd2VyIG9uIGJvb3R1cC4gIE9sZGVyCisJCQkJCSAqIGRyaXZlcnMgbWF5IHJlcG9ydCBhcworCQkJCQkgKiB1c2VyUmVib290LiAqLworCXN5c19jb2RlX2NoYW5nZSA9IDB4MDgsCQkvKiBSZWJvb3QgdG8gdGFrZSBjb2RlIGNoYW5nZS4KKwkJCQkJICogT2xkZXIgZHJpdmVycyBtYXkgcmVwb3J0IGFzCisJCQkJCSAqIHVzZXJSZWJvb3QuICovCisJc3lzX2hhcmR3YXJlX3Jlc2V0ID0gMHgwOSwJLyogSFcgd2F0Y2hkb2cgb3IgZnJvbnQtcGFuZWwKKwkJCQkJICogcmVzZXQgYnV0dG9uIHJlc2V0LiAgT2xkZXIKKwkJCQkJICogZHJpdmVycyBtYXkgcmVwb3J0IGFzCisJCQkJCSAqIHVzZXJSZWJvb3QuICovCisJc3lzX3dhdGNoZG9nSW50ZXJydXB0ID0gMHgwQQkvKiBQcmUtd2F0Y2hkb2cgaW50ZXJydXB0ICovCit9OworCisjZW5kaWYgLyogX0FTTV9NQUNIX1BPV0VSVFZfQVNJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY1YzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ3MuaApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX1BPV0VSVFZfQVNJQ19IXworI2RlZmluZSBfX0FTTV9NQUNIX1BPV0VSVFZfQVNJQ19IXworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qIEFTSUMgdHlwZXMgKi8KK2VudW0gYXNpY190eXBlIHsKKwlBU0lDX1VOS05PV04sCisJQVNJQ19aRVVTLAorCUFTSUNfQ0FMTElPUEUsCisJQVNJQ19DUk9OVVMsCisJQVNJQ19DUk9OVVNMSVRFLAorCUFTSUNTCit9OworCisvKiBoYXJkY29kZWQgdmFsdWVzIHJlYWQgZnJvbSBDaGlwIFZlcnNpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIENST05VU18xMAkweDBCNEMxQzIwCisjZGVmaW5lIENST05VU18xMQkweDBCNEMxQzIxCisjZGVmaW5lIENST05VU0xJVEVfMTAJMHgwQjRDMUM0MAorCisjZGVmaW5lIE5BTkRfRkxBU0hfQkFTRQkweDAzMDAwMDAwCisjZGVmaW5lIFpFVVNfSU9fQkFTRQkweDA5MDAwMDAwCisjZGVmaW5lIENBTExJT1BFX0lPX0JBU0UJMHgwODAwMDAwMAorI2RlZmluZSBDUk9OVVNfSU9fQkFTRQkweDA5MDAwMDAwCisjZGVmaW5lIEFTSUNfSU9fU0laRQkweDAxMDAwMDAwCisKKy8qIERlZmluaXRpb25zIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFVBUlQxX0lOVFNUQVQJdWFydDFfaW50c3RhdAorI2RlZmluZSBVQVJUMV9JTlRFTgl1YXJ0MV9pbnRlbgorI2RlZmluZSBVQVJUMV9DT05GSUcxCXVhcnQxX2NvbmZpZzEKKyNkZWZpbmUgVUFSVDFfQ09ORklHMgl1YXJ0MV9jb25maWcyCisjZGVmaW5lIFVBUlQxX0RJVklTT1JISQl1YXJ0MV9kaXZpc29yaGkKKyNkZWZpbmUgVUFSVDFfRElWSVNPUkxPCXVhcnQxX2Rpdmlzb3JsbworI2RlZmluZSBVQVJUMV9EQVRBCXVhcnQxX2RhdGEKKyNkZWZpbmUgVUFSVDFfU1RBVFVTCXVhcnQxX3N0YXR1cworCisvKiBBU0lDIHJlZ2lzdGVyIGVudW1lcmF0aW9uICovCitzdHJ1Y3QgcmVnaXN0ZXJfbWFwIHsKKwl1MzIgZWljX3Nsb3cwX3N0cnRfYWRkOworCXUzMiBlaWNfY2ZnX2JpdHM7CisJdTMyIGVpY19yZWFkeV9zdGF0dXM7CisKKwl1MzIgY2hpcHZlcjM7CisJdTMyIGNoaXB2ZXIyOworCXUzMiBjaGlwdmVyMTsKKwl1MzIgY2hpcHZlcjA7CisKKwl1MzIgdWFydDFfaW50c3RhdDsKKwl1MzIgdWFydDFfaW50ZW47CisJdTMyIHVhcnQxX2NvbmZpZzE7CisJdTMyIHVhcnQxX2NvbmZpZzI7CisJdTMyIHVhcnQxX2Rpdmlzb3JoaTsKKwl1MzIgdWFydDFfZGl2aXNvcmxvOworCXUzMiB1YXJ0MV9kYXRhOworCXUzMiB1YXJ0MV9zdGF0dXM7CisKKwl1MzIgaW50X3N0YXRfMzsKKwl1MzIgaW50X3N0YXRfMjsKKwl1MzIgaW50X3N0YXRfMTsKKwl1MzIgaW50X3N0YXRfMDsKKwl1MzIgaW50X2NvbmZpZzsKKwl1MzIgaW50X2ludF9zY2FuOworCXUzMiBpZW5faW50XzM7CisJdTMyIGllbl9pbnRfMjsKKwl1MzIgaWVuX2ludF8xOworCXUzMiBpZW5faW50XzA7CisJdTMyIGludF9sZXZlbF8zXzM7CisJdTMyIGludF9sZXZlbF8zXzI7CisJdTMyIGludF9sZXZlbF8zXzE7CisJdTMyIGludF9sZXZlbF8zXzA7CisJdTMyIGludF9sZXZlbF8yXzM7CisJdTMyIGludF9sZXZlbF8yXzI7CisJdTMyIGludF9sZXZlbF8yXzE7CisJdTMyIGludF9sZXZlbF8yXzA7CisJdTMyIGludF9sZXZlbF8xXzM7CisJdTMyIGludF9sZXZlbF8xXzI7CisJdTMyIGludF9sZXZlbF8xXzE7CisJdTMyIGludF9sZXZlbF8xXzA7CisJdTMyIGludF9sZXZlbF8wXzM7CisJdTMyIGludF9sZXZlbF8wXzI7CisJdTMyIGludF9sZXZlbF8wXzE7CisJdTMyIGludF9sZXZlbF8wXzA7CisJdTMyIGludF9kb2NzaXNfZW47CisKKwl1MzIgbWlwc19wbGxfc2V0dXA7CisJdTMyIHVzYl9mczsKKwl1MzIgdGVzdF9idXM7CisJdTMyIGNydF9zcGFyZTsKKwl1MzIgdXNiMl9vaGNpX2ludF9tYXNrOworCXUzMiB1c2IyX3N0cmFwOworCXUzMiBlaGNpX2hjYXBiYXNlOworCXUzMiBvaGNpX2hjX3JldmlzaW9uOworCXUzMiBiY20xX2JzX2xtaV9zdGVlcjsKKwl1MzIgdXNiMl9jb250cm9sOworCXUzMiB1c2IyX3N0YnVzX29iYzsKKwl1MzIgdXNiMl9zdGJ1c19tZXNzX3NpemU7CisJdTMyIHVzYjJfc3RidXNfY2h1bmtfc2l6ZTsKKworCXUzMiBwY2llX3JlZ3M7CisJdTMyIHRpbV9jaDsKKwl1MzIgdGltX2NsOworCXUzMiBncGlvX2RvdXQ7CisJdTMyIGdwaW9fZGluOworCXUzMiBncGlvX2RpcjsKKwl1MzIgd2F0Y2hkb2c7CisJdTMyIGZyb250X3BhbmVsOworCisJdTMyIHJlZ2lzdGVyX21hcHM7Cit9OworCitleHRlcm4gZW51bSBhc2ljX3R5cGUgYXNpYzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwICpyZWdpc3Rlcl9tYXA7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhc2ljX3BoeV9iYXNlOwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIEFTSUMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGFzaWNfYmFzZTsJCS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBBU0lDICovCisKKy8qCisgKiBNYWNyb3MgdG8gaW50ZXJmYWNlIHRvIHJlZ2lzdGVycyB0aHJvdWdoIHRoZWlyIGlvcmVtYXBwZWQgYWRkcmVzcworICogYXNpY19yZWdfb2Zmc2V0CVJldHVybnMgdGhlIG9mZnNldCBvZiBhIGdpdmVuIHJlZ2lzdGVyIGZyb20gdGhlIHN0YXJ0CisgKgkJCW9mIHRoZSBBU0lDIGFkZHJlc3Mgc3BhY2UKKyAqIGFzaWNfcmVnX3BoeXNfYWRkcglSZXR1cm5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBnaXZlbiByZWdpc3RlcgorICogYXNpY19yZWdfYWRkcglSZXR1cm5zIHRoZSBpb21hcHBlZCB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGdpdmVuCisgKgkJCXJlZ2lzdGVyLgorICovCisjZGVmaW5lIGFzaWNfcmVnX29mZnNldCh4KQkocmVnaXN0ZXJfbWFwLT54KQorI2RlZmluZSBhc2ljX3JlZ19waHlzX2FkZHIoeCkJKGFzaWNfcGh5X2Jhc2UgKyBhc2ljX3JlZ19vZmZzZXQoeCkpCisjZGVmaW5lIGFzaWNfcmVnX2FkZHIoeCkgXAorCSgodW5zaWduZWQgaW50ICopIChhc2ljX2Jhc2UgKyBhc2ljX3JlZ19vZmZzZXQoeCkpKQorCisvKgorICogVGhlIGFzaWNfcmVnIG1hY3JvIGlzIGdvbmUuIEl0IHNob3VsZCBiZSByZXBsYWNlZCBieSBlaXRoZXIgYXNpY19yZWFkIG9yCisgKiBhc2ljX3dyaXRlLCBhcyBhcHByb3ByaWF0ZS4KKyAqLworCisjZGVmaW5lIGFzaWNfcmVhZCh4KQkJcmVhZGwoYXNpY19yZWdfYWRkcih4KSkKKyNkZWZpbmUgYXNpY193cml0ZSh2LCB4KQl3cml0ZWwodiwgYXNpY19yZWdfYWRkcih4KSkKKworZXh0ZXJuIHZvaWQgYXNpY19pcnFfaW5pdCh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2RtYS1jb2hlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhkNWViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBWZXJzaW9uIGZyb20gbWFjaC1nZW5lcmljIG1vZGlmaWVkIHRvIHN1cHBvcnQgUG93ZXJUViBwb3J0CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiAgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUE9XRVJUVl9ETUFfQ09IRVJFTkNFX0gKKyNkZWZpbmUgX19BU01fTUFDSF9QT1dFUlRWX0RNQV9DT0hFUkVOQ0VfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rc2VnMih2b2lkICphZGRyKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZylhZGRyID49IEtTRUcyOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzX2Zyb21fcHRlKHZvaWQgKmFkZHIpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZXAsIHB0ZTsKKworCXVuc2lnbmVkIGxvbmcgdmlydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciA9IDBVTDsKKworCS8qIGdldCB0aGUgcGFnZSBnbG9iYWwgZGlyZWN0b3J5LiAqLworCXBnZCA9IHBnZF9vZmZzZXRfayh2aXJ0X2FkZHIpOworCisJaWYgKCFwZ2Rfbm9uZSgqcGdkKSkgeworCQkvKiBnZXQgdGhlIHBhZ2UgdXBwZXIgZGlyZWN0b3J5ICovCisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCB2aXJ0X2FkZHIpOworCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7CisJCQkvKiBnZXQgdGhlIHBhZ2UgbWlkZGxlIGRpcmVjdG9yeSAqLworCQkJcG1kID0gcG1kX29mZnNldChwdWQsIHZpcnRfYWRkcik7CisJCQlpZiAoIXBtZF9ub25lKCpwbWQpKSB7CisJCQkJLyogZ2V0IGEgcG9pbnRlciB0byB0aGUgcGFnZSB0YWJsZSBlbnRyeSAqLworCQkJCXB0ZXAgPSBwdGVfb2Zmc2V0KHBtZCwgdmlydF9hZGRyKTsKKwkJCQlwdGUgPSAqcHRlcDsKKwkJCQkvKiBjaGVjayBmb3IgYSB2YWxpZCBwYWdlICovCisJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHsKKwkJCQkJLyogZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoZSBwYWdlIGlzCisJCQkJCSAqIHJlZmVyaW5nIHRvICovCisJCQkJCXBoeXNfYWRkciA9ICh1bnNpZ25lZCBsb25nKQorCQkJCQkJcGFnZV90b19waHlzKHB0ZV9wYWdlKHB0ZSkpOworCQkJCQkvKiBhZGQgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UgKi8KKwkJCQkJcGh5c19hZGRyIHw9ICh2aXJ0X2FkZHIgJiB+UEFHRV9NQVNLKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcGh5c19hZGRyOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGxhdF9tYXBfZG1hX21lbShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsCisJc2l6ZV90IHNpemUpCit7CisJaWYgKGlzX2tzZWcyKGFkZHIpKQorCQlyZXR1cm4gcGh5c190b19idXModmlydF90b19waHlzX2Zyb21fcHRlKGFkZHIpKTsKKwllbHNlCisJCXJldHVybiBwaHlzX3RvX2J1cyh2aXJ0X3RvX3BoeXMoYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGxhdF9tYXBfZG1hX21lbV9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcGh5c190b19idXMocGFnZV90b19waHlzKHBhZ2UpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBsYXRfZG1hX2FkZHJfdG9fcGh5cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gYnVzX3RvX3BoeXMoZG1hX2FkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdF91bm1hcF9kbWFfbWVtKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBwbGF0X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwkvKgorCSAqIHdlIGZhbGwgYmFjayB0byBHRlBfRE1BIHdoZW4gdGhlIG1hc2sgaXNuJ3QgYWxsIDFzLAorCSAqIHNvIHdlIGNhbid0IGd1YXJhbnRlZSBhbGxvY2F0aW9ucyB0aGF0IG11c3QgYmUKKwkgKiB3aXRoaW4gYSB0aWdodGVyIHJhbmdlIHRoYW4gR0ZQX0RNQS4uCisJICovCisJaWYgKG1hc2sgPCBETUFfQklUX01BU0soMjQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdF9leHRyYV9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGxhdF9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbGF0X2RldmljZV9pc19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BPV0VSVFZfRE1BX0NPSEVSRU5DRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWE1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaApAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZglfQVNNX01BQ0hfUE9XRVJUVl9JTlRFUlJVUFRTX0hfCisjZGVmaW5lIF9BU01fTUFDSF9QT1dFUlRWX0lOVEVSUlVQVFNfSF8KKworLyoKKyAqIERlZmluZXMgZm9yIGFsbCBvZiB0aGUgaW50ZXJydXB0IGxpbmVzCisgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUga0lycV9VYXJ0MQkJaXJxX3VhcnQxCisKKyNkZWZpbmUgaWJhc2UgMAorCisvKi0tLS0tLS0tLS0tLS0gUmVnaXN0ZXI6IGludF9zdGF0XzMgKi8KKy8qIDEyNiB1bnVzZWQgKGJpdCAzMSkgKi8KKyNkZWZpbmUgaXJxX2FzYzJ2aWRlbwkJKGliYXNlKzEyNikJLyogQVNDIDIgVmlkZW8gSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hc2MxdmlkZW8JCShpYmFzZSsxMjUpCS8qIEFTQyAxIFZpZGVvIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfY29tbXNfYmxvY2tfd2QJKGliYXNlKzEyNCkJLyogQVNDIDEgVmlkZW8gSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9mZG1hX21haWxib3gJKGliYXNlKzEyMykJLyogRkRNQSBNYWlsYm94IE91dHB1dCAqLworI2RlZmluZSBpcnFfZmRtYV9ncAkJKGliYXNlKzEyMikJLyogRkRNQSBHUCBPdXRwdXQgKi8KKyNkZWZpbmUgaXJxX21pcHNfcGljCQkoaWJhc2UrMTIxKQkvKiBNSVBTIFBlcmZvcm1hbmNlIENvdW50ZXIKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfbWlwc190aW1lcgkJKGliYXNlKzEyMCkJLyogTUlQUyBUaW1lciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX21lbW9yeV9wcm90ZWN0CShpYmFzZSsxMTkpCS8qIE1lbW9yeSBQcm90ZWN0aW9uIEludGVycnVwdAorCQkJCQkJICogLS0gT3JlZCBieSBnbHVlIGxvZ2ljIGluc2lkZQorCQkJCQkJICogIFNQQVJDIElMQyAoc2VlCisJCQkJCQkgKiAgSU5UX01FTV9QUk9UX1NUQVQsIGJlbG93LAorCQkJCQkJICogIGZvciBpbmRpdmlkdWFsIGludGVycnVwdHMpCisJCQkJCQkgKi8KKy8qIDExOCB1bnVzZWQgKGJpdCAyMikgKi8KKyNkZWZpbmUgaXJxX3NiYWcJCShpYmFzZSsxMTcpCS8qIFNCQUcgSW50ZXJydXB0IC0tIE9yZWQgYnkKKwkJCQkJCSAqIGdsdWUgbG9naWMgaW5zaWRlIFNQQVJDIElMQworCQkJCQkJICogKHNlZSBJTlRfU0JBR19TVEFULCBiZWxvdywKKwkJCQkJCSAqIGZvciBpbmRpdmlkdWFsIGludGVycnVwdHMpICovCisjZGVmaW5lIGlycV9xYW1fYl9mZWMJCShpYmFzZSsxMTYpCS8qIFFBTSAgQiBGRUMgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9xYW1fYV9mZWMJCShpYmFzZSsxMTUpCS8qIFFBTSBBIEZFQyBJbnRlcnJ1cHQgKi8KKy8qIDExNCB1bnVzZWQgCShiaXQgMTgpICovCisjZGVmaW5lIGlycV9tYWlsYm94CQkoaWJhc2UrMTEzKQkvKiBNYWlsYm94IERlYnVnIEludGVycnVwdCAgLS0KKwkJCQkJCSAqIE9yZWQgYnkgZ2x1ZSBsb2dpYyBpbnNpZGUKKwkJCQkJCSAqIFNQQVJDIElMQyAoc2VlCisJCQkJCQkgKiBJTlRfTUFJTEJPWF9TVEFULCBiZWxvdywgZm9yCisJCQkJCQkgKiBpbmRpdmlkdWFsIGludGVycnVwdHMpICovCisjZGVmaW5lIGlycV9mdXNlX3N0YXQxCQkoaWJhc2UrMTEyKQkvKiBGdXNlIFN0YXR1cyAxICovCisjZGVmaW5lIGlycV9mdXNlX3N0YXQyCQkoaWJhc2UrMTExKQkvKiBGdXNlIFN0YXR1cyAyICovCisjZGVmaW5lIGlycV9mdXNlX3N0YXQzCQkoaWJhc2UrMTEwKQkvKiBCbGl0dGVyIEludGVycnVwdCAvIEZ1c2UKKwkJCQkJCSAqIFN0YXR1cyAzICovCisjZGVmaW5lIGlycV9ibGl0dGVyCQkoaWJhc2UrMTEwKQkvKiBCbGl0dGVyIEludGVycnVwdCAvIEZ1c2UKKwkJCQkJCSAqIFN0YXR1cyAzICovCisjZGVmaW5lIGlycV9hdmMxX3BwMAkJKGliYXNlKzEwOSkJLyogQVZDIERlY29kZXIgIzEgUFAwCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2F2YzFfcHAxCQkoaWJhc2UrMTA4KQkvKiBBVkMgRGVjb2RlciAjMSBQUDEKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYXZjMV9tYmUJCShpYmFzZSsxMDcpCS8qIEFWQyBEZWNvZGVyICMxIE1CRQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hdmMyX3BwMAkJKGliYXNlKzEwNikJLyogQVZDIERlY29kZXIgIzIgUFAwCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2F2YzJfcHAxCQkoaWJhc2UrMTA1KQkvKiBBVkMgRGVjb2RlciAjMiBQUDEKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYXZjMl9tYmUJCShpYmFzZSsxMDQpCS8qIEFWQyBEZWNvZGVyICMyIE1CRQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV96YnVnX3NwaQkJKGliYXNlKzEwMykJLyogWmJ1ZyBTUEkgU2xhdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9xYW1fbW9kMgkJKGliYXNlKzEwMikJLyogUUFNIE1vZHVsYXRvciAyIERNQQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9pcl9yeAkJKGliYXNlKzEwMSkJLyogSVIgUlggMiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2F1ZF9kc3AyCQkoaWJhc2UrMTAwKQkvKiBBdWRpbyBEU1AgIzIgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hdWRfZHNwMQkJKGliYXNlKzk5KQkvKiBBdWRpbyBEU1AgIzEgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9kb2NzaXMJCShpYmFzZSs5OCkJLyogRE9DU0lTIERlYnVnIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfc2RfZHZwMQkJKGliYXNlKzk3KQkvKiBTRCBEVlAgIzEgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9zZF9kdnAyCQkoaWJhc2UrOTYpCS8qIFNEIERWUCAjMiBJbnRlcnJ1cHQgKi8KKy8qLS0tLS0tLS0tLS0tLSBSZWdpc3RlcjogaW50X3N0YXRfMiAqLworI2RlZmluZSBpcnFfaGRfZHZwCQkoaWJhc2UrOTUpCS8qIEhEIERWUCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUga0lycV9QcmV3YXRjaGRvZwkoaWJhc2UrOTQpCS8qIHdhdGNoZG9nIFByZS1JbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3RpbWVyMgkJKGliYXNlKzkzKQkvKiBQcm9ncmFtbWFibGUgVGltZXIKKwkJCQkJCSAqIEludGVycnVwdCAyICovCisjZGVmaW5lIGlycV8xMzk0CQkoaWJhc2UrOTIpCS8qIDEzOTQgRmlyZXdpcmUgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV91c2JvaGNpCQkoaWJhc2UrOTEpCS8qIFVTQiAyLjAgT0hDSSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3VzYmVoY2kJCShpYmFzZSs5MCkJLyogVVNCIDIuMCBFSENJIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcGNpZXhwCQkoaWJhc2UrODkpCS8qIFBDSSBFeHByZXNzIDAgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9wY2lleHAwCQkoaWJhc2UrODkpCS8qIFBDSSBFeHByZXNzIDAgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9hZmUxCQkoaWJhc2UrODgpCS8qIEFGRSAxIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfc2F0YQkJKGliYXNlKzg3KQkvKiBTQVRBIDEgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9zYXRhMQkJKGliYXNlKzg3KQkvKiBTQVRBIDEgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9kdGNwCQkoaWJhc2UrODYpCS8qIERUQ1AgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9wY2lleHAxCQkoaWJhc2UrODUpCS8qIFBDSSBFeHByZXNzIDEgSW50ZXJydXB0ICovCisvKiA4NCB1bnVzZWQgCShiaXQgMjApICovCisvKiA4MyB1bnVzZWQgCShiaXQgMTkpICovCisvKiA4MiB1bnVzZWQgCShiaXQgMTgpICovCisjZGVmaW5lIGlycV9zYXRhMgkJKGliYXNlKzgxKQkvKiBTQVRBMiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3VhcnQyCQkoaWJhc2UrODApCS8qIFVBUlQyIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfbGVnYWN5X3VzYgkJKGliYXNlKzc5KQkvKiBMZWdhY3kgVVNCIEhvc3QgSVNSICgxLjEKKwkJCQkJCSAqIEhvc3QgbW9kdWxlKSAqLworI2RlZmluZSBpcnFfcG9kCQkJKGliYXNlKzc4KQkvKiBQT0QgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9zbGF2ZV91c2IJCShpYmFzZSs3NykJLyogU2xhdmUgVVNCICovCisjZGVmaW5lIGlycV9kZW5jMQkJKGliYXNlKzc2KQkvKiBERU5DICMxIFZURyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3ZiaV92dGcJCShpYmFzZSs3NSkJLyogVkJJIFZURyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2FmZTIJCShpYmFzZSs3NCkJLyogQUZFIDIgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9kZW5jMgkJKGliYXNlKzczKQkvKiBERU5DICMyIFZURyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2FzYzIJCShpYmFzZSs3MikJLyogQVNDICMyIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYXNjMQkJKGliYXNlKzcxKQkvKiBBU0MgIzEgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9tb2RfZG1hCQkoaWJhc2UrNzApCS8qIE1vZHVsYXRvciBETUEgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9ieXRlX2VuZzEJCShpYmFzZSs2OSkJLyogQnl0ZSBFbmdpbmUgSW50ZXJydXB0IFsxXSAqLworI2RlZmluZSBpcnFfYnl0ZV9lbmcwCQkoaWJhc2UrNjgpCS8qIEJ5dGUgRW5naW5lIEludGVycnVwdCBbMF0gKi8KKy8qIDY3IHVudXNlZCAJKGJpdCAwMykgKi8KKy8qIDY2IHVudXNlZCAJKGJpdCAwMikgKi8KKy8qIDY1IHVudXNlZCAJKGJpdCAwMSkgKi8KKy8qIDY0IHVudXNlZCAJKGJpdCAwMCkgKi8KKy8qLS0tLS0tLS0tLS0tLSBSZWdpc3RlcjogaW50X3N0YXRfMSAqLworLyogNjMgdW51c2VkIAkoYml0IDMxKSAqLworLyogNjIgdW51c2VkIAkoYml0IDMwKSAqLworLyogNjEgdW51c2VkIAkoYml0IDI5KSAqLworLyogNjAgdW51c2VkIAkoYml0IDI4KSAqLworLyogNTkgdW51c2VkIAkoYml0IDI3KSAqLworLyogNTggdW51c2VkIAkoYml0IDI2KSAqLworLyogNTcgdW51c2VkIAkoYml0IDI1KSAqLworLyogNTYgdW51c2VkIAkoYml0IDI0KSAqLworI2RlZmluZSBpcnFfYnVmX2RtYV9tZW0ybWVtCShpYmFzZSs1NSkJLyogQnVmRE1BIE1lbW9yeSB0byBNZW1vcnkKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYnVmX2RtYV91c2J0cmFuc21pdAkoaWJhc2UrNTQpCS8qIEJ1ZkRNQSBVU0IgVHJhbnNtaXQKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYnVmX2RtYV9xcHNrcG9kdHJhbnNtaXQgKGliYXNlKzUzKQkvKiBCdWZETUEgUVBTSy9QT0QgVHJhbXNpdAorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9idWZfZG1hX3RyYW5zbWl0X2Vycm9yIChpYmFzZSs1MikJLyogQnVmRE1BIFRyYW5zbWl0IEVycm9yCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2J1Zl9kbWFfdXNicmVjdgkoaWJhc2UrNTEpCS8qIEJ1ZkRNQSBVU0IgUmVjZWl2ZQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9idWZfZG1hX3Fwc2twb2RyZWN2CShpYmFzZSs1MCkJLyogQnVmRE1BIFFQU0svUE9EIFJlY2VpdmUKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfYnVmX2RtYV9yZWN2X2Vycm9yCShpYmFzZSs0OSkJLyogQnVmRE1BIFJlY2VpdmUgRXJyb3IKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcWFtZG1hX3RyYW5zbWl0X3BsYXkgKGliYXNlKzQ4KQkvKiBRQU1ETUEgVHJhbnNtaXQvUGxheQorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9xYW1kbWFfdHJhbnNtaXRfZXJyb3IgKGliYXNlKzQ3KQkvKiBRQU1ETUEgVHJhbnNtaXQgRXJyb3IKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcWFtZG1hX3JlY3YyaGlnaAkoaWJhc2UrNDYpCS8qIFFBTURNQSBSZWNlaXZlIDIgSGlnaAorCQkJCQkJICogKENoYW5zIDYzLTMyKSAqLworI2RlZmluZSBpcnFfcWFtZG1hX3JlY3YybG93CShpYmFzZSs0NSkJLyogUUFNRE1BIFJlY2VpdmUgMiBMb3cKKwkJCQkJCSAqIChDaGFucyAzMS0wKSAqLworI2RlZmluZSBpcnFfcWFtZG1hX3JlY3YxaGlnaAkoaWJhc2UrNDQpCS8qIFFBTURNQSBSZWNlaXZlIDEgSGlnaAorCQkJCQkJICogKENoYW5zIDYzLTMyKSAqLworI2RlZmluZSBpcnFfcWFtZG1hX3JlY3YxbG93CShpYmFzZSs0MykJLyogUUFNRE1BIFJlY2VpdmUgMSBMb3cKKwkJCQkJCSAqIChDaGFucyAzMS0wKSAqLworI2RlZmluZSBpcnFfcWFtZG1hX3JlY3ZfZXJyb3IJKGliYXNlKzQyKQkvKiBRQU1ETUEgUmVjZWl2ZSBFcnJvcgorCQkJCQkJICogSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9tcGVnc3BsaWNlCQkoaWJhc2UrNDEpCS8qIE1QRUcgU3BsaWNlIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfZGVpbnRlcmxhY2VfcmR5CShpYmFzZSs0MCkJLyogRGVpbnRlcmxhY2VyIEZyYW1lIFJlYWR5CisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2V4dF9pbjAJCShpYmFzZSszOSkJLyogRXh0ZXJuYWwgSW50ZXJydXB0IGlycV9pbjAgKi8KKyNkZWZpbmUgaXJxX2dwaW8zCQkoaWJhc2UrMzgpCS8qIEdQIEkvTyBJUlEgMyAtIEZyb20gR1AgSS9PCisJCQkJCQkgKiBNb2R1bGUgKi8KKyNkZWZpbmUgaXJxX2dwaW8yCQkoaWJhc2UrMzcpCS8qIEdQIEkvTyBJUlEgMiAtIEZyb20gR1AgSS9PCisJCQkJCQkgKiBNb2R1bGUgKEFCRV9pbnROKSAqLworI2RlZmluZSBpcnFfcGNyY21wbHQxCQkoaWJhc2UrMzYpCS8qIFBDUiBDYXB0dXJlIENvbXBsZXRlICBvcgorCQkJCQkJICogRGlzY29udGludWl0eSAxICovCisjZGVmaW5lIGlycV9wY3JjbXBsdDIJCShpYmFzZSszNSkJLyogUENSIENhcHR1cmUgQ29tcGxldGUgb3IKKwkJCQkJCSAqIERpc2NvbnRpbnVpdHkgMiAqLworI2RlZmluZSBpcnFfcGFyc2VfcGVpZXJyCShpYmFzZSszNCkJLyogUElEIFBhcnNlciBFcnJvciBEZXRlY3QKKwkJCQkJCSAqIChQRUkpICovCisjZGVmaW5lIGlycV9wYXJzZV9jb250X2VycgkoaWJhc2UrMzMpCS8qIFBJRCBQYXJzZXIgY29udGludWl0eSBlcnJvcgorCQkJCQkJICogZGV0ZWN0ICovCisjZGVmaW5lIGlycV9kczFmcmFtZXIJCShpYmFzZSszMikJLyogRFMxIEZyYW1lciBJbnRlcnJ1cHQgKi8KKy8qLS0tLS0tLS0tLS0tLSBSZWdpc3RlcjogaW50X3N0YXRfMCAqLworI2RlZmluZSBpcnFfZ3BpbzEJCShpYmFzZSszMSkJLyogR1AgSS9PIElSUSAxIC0gRnJvbSBHUCBJL08KKwkJCQkJCSAqIE1vZHVsZSAqLworI2RlZmluZSBpcnFfZ3BpbzAJCShpYmFzZSszMCkJLyogR1AgSS9PIElSUSAwIC0gRnJvbSBHUCBJL08KKwkJCQkJCSAqIE1vZHVsZSAqLworI2RlZmluZSBpcnFfcXBza19vdXRfYWxvaGEJKGliYXNlKzI5KQkvKiBRUFNLIE91dHB1dCBTbG90dGVkIEFsb2hhCisJCQkJCQkgKiAoY2hhbiAzKSBUcmFuc21pc3Npb24KKwkJCQkJCSAqIENvbXBsZXRlZCBPSyAqLworI2RlZmluZSBpcnFfcXBza19vdXRfdGRtYQkoaWJhc2UrMjgpCS8qIFFQU0sgT3V0cHV0IFRETUEgKGNoYW4gMikKKwkJCQkJCSAqIFRyYW5zbWlzc2lvbiBDb21wbGV0ZWQgT0sgKi8KKyNkZWZpbmUgaXJxX3Fwc2tfb3V0X3Jlc2VydmUJKGliYXNlKzI3KQkvKiBRUFNLIE91dHB1dCBSZXNlcnZhdGlvbgorCQkJCQkJICogKGNoYW4gMSkgVHJhbnNtaXNzaW9uCisJCQkJCQkgKiBDb21wbGV0ZWQgT0sgKi8KKyNkZWZpbmUgaXJxX3Fwc2tfb3V0X2Fsb2hhX2VycgkoaWJhc2UrMjYpCS8qIFFQU0sgT3V0cHV0IFNsb3R0ZWQgQWxvaGEKKwkJCQkJCSAqIChjaGFuIDMpVHJhbnNtaXNzaW9uCisJCQkJCQkgKiBjb21wbGV0ZWQgd2l0aCBFcnJvcnMuICovCisjZGVmaW5lIGlycV9xcHNrX291dF90ZG1hX2VycgkoaWJhc2UrMjUpCS8qIFFQU0sgT3V0cHV0IFRETUEgKGNoYW4gMikKKwkJCQkJCSAqIFRyYW5zbWlzc2lvbiBjb21wbGV0ZWQgd2l0aAorCQkJCQkJICogRXJyb3JzLiAqLworI2RlZmluZSBpcnFfcXBza19vdXRfcnNydl9lcnIJKGliYXNlKzI0KQkvKiBRUFNLIE91dHB1dCBSZXNlcnZhdGlvbgorCQkJCQkJICogKGNoYW4gMSkgVHJhbnNtaXNzaW9uCisJCQkJCQkgKiBjb21wbGV0ZWQgd2l0aCBFcnJvcnMgKi8KKyNkZWZpbmUgaXJxX2Fsb2hhX2ZhaWwJCShpYmFzZSsyMykJLyogVW5zdWNjZXNzZnVsIFJlc2VuZCBvZiBBbG9oYQorCQkJCQkJICogZm9yIE4gdGltZXMuIEFsb2hhIHJldHJ5CisJCQkJCQkgKiB0aW1lb3V0IGZvciBjaGFubmVsIDMuICovCisjZGVmaW5lIGlycV90aW1lcjEJCShpYmFzZSsyMikJLyogUHJvZ3JhbW1hYmxlIFRpbWVyCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2tleWJvYXJkCQkoaWJhc2UrMjEpCS8qIEtleWJvYXJkIE1vZHVsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2kyYwkJCShpYmFzZSsyMCkJLyogSTJDIE1vZHVsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3NwaQkJCShpYmFzZSsxOSkJLyogU1BJIE1vZHVsZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2lyYmxhc3RlcgkJKGliYXNlKzE4KQkvKiBJUiBCbGFzdGVyIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfc3BsaWNlX2RldGVjdAkoaWJhc2UrMTcpCS8qIFBJRCBLZXkgQ2hhbmdlIEludGVycnVwdCBvcgorCQkJCQkJICogU3BsaWNlIERldGVjdCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3NlX21pY3JvCQkoaWJhc2UrMTYpCS8qIFNlY3VyZSBNaWNybyBJL0YgTW9kdWxlCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3VhcnQxCQkoaWJhc2UrMTUpCS8qIFVBUlQgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9pcnJlY3YJCShpYmFzZSsxNCkJLyogSVIgUmVjZWl2ZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIGlycV9ob3N0X2ludDEJCShpYmFzZSsxMykJLyogSG9zdC10by1Ib3N0IEludGVycnVwdCAxICovCisjZGVmaW5lIGlycV9ob3N0X2ludDAJCShpYmFzZSsxMikJLyogSG9zdC10by1Ib3N0IEludGVycnVwdCAwICovCisjZGVmaW5lIGlycV9xcHNrX2hlY2VycgkJKGliYXNlKzExKQkvKiBRUFNLIEhFQyBFcnJvciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX3Fwc2tfY3JjZXJyCQkoaWJhc2UrMTApCS8qIFFQU0sgQUFMLTUgQ1JDIEVycm9yCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKy8qIDkgdW51c2VkIAkoYml0IDA5KSAqLworLyogOCB1bnVzZWQgCShiaXQgMDgpICovCisjZGVmaW5lIGlycV9wc2ljcmNlcnIJCShpYmFzZSs3KSAJLyogUUFNIFBTSSBDUkMgRXJyb3IKKwkJCQkJCSAqIEludGVycnVwdCAqLworI2RlZmluZSBpcnFfcHNpbGVuZ3RoX2VycgkoaWJhc2UrNikgCS8qIFFBTSBQU0kgTGVuZ3RoIEVycm9yCisJCQkJCQkgKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgaXJxX2VzZmZvcndhcmQJCShpYmFzZSs1KSAJLyogRVNGIEludGVycnVwdCBNYXJrIEZyb20KKwkJCQkJCSAqIEZvcndhcmQgUGF0aCBSZWZlcmVuY2UgLQorCQkJCQkJICogZXZlcnkgM21zIHdoZW4gZm9yd2FyZCBNYml0cworCQkJCQkJICogYW5kIGZvcndhcmQgc2xvdCBjb250cm9sCisJCQkJCQkgKiBieXRlcyBhcmUgdXBkYXRlZC4gKi8KKyNkZWZpbmUgaXJxX2VzZnJldmVyc2UJCShpYmFzZSs0KSAJLyogRVNGIEludGVycnVwdCBNYXJrIGZyb20KKwkJCQkJCSAqIFJldmVyc2UgUGF0aCBSZWZlcmVuY2UgLQorCQkJCQkJICogZGVsYXllZCBmcm9tIGZvcndhcmQgbWFyayBieQorCQkJCQkJICogdGhlIHJhbmdpbmcgZGVsYXkgcGx1cyBhCisJCQkJCQkgKiBmaXhlZCBhbW91bnQuIFdoZW4gcmV2ZXJzZQorCQkJCQkJICogTWJpdHMgYW5kIHJldmVyc2Ugc2xvdAorCQkJCQkJICogY29udHJvbCBieXRlcyBhcmUgdXBkYXRlZC4KKwkJCQkJCSAqIE9jY3VycyBldmVyeSAzbXMgZm9yIDMuME0gYW5kCisJCQkJCQkgKiAxLjU1NCBNIHVwc3RyZWFtIHJhdGVzIGFuZAorCQkJCQkJICogZXZlcnkgNiBtcyBmb3IgMjU2SyB1cHN0cmVhbQorCQkJCQkJICogcmF0ZS4gKi8KKyNkZWZpbmUgaXJxX2Fsb2hhX3RpbWVvdXQJKGliYXNlKzMpIAkvKiBTbG90dGVkLUFsb2hhIHRpbWVvdXQgb24KKwkJCQkJCSAqIENoYW5uZWwgMS4gKi8KKyNkZWZpbmUgaXJxX3Jlc2VydmF0aW9uCQkoaWJhc2UrMikgCS8qIFBhcnRpYWwgKG9yIEluY3JlbWVudGFsKQorCQkJCQkJICogUmVzZXJ2YXRpb24gTWVzc2FnZSBDb21wbGV0ZWQKKwkJCQkJCSAqIG9yIFNsb3R0ZWQgYWxvaGEgdmVyaWZ5IGZvcgorCQkJCQkJICogY2hhbm5lbCAxLiAqLworI2RlZmluZSBpcnFfYWxvaGEzCQkoaWJhc2UrMSkgCS8qIFNsb3R0ZWQtQWxvaGEgTWVzc2FnZSBWZXJpZnkKKwkJCQkJCSAqIEludGVycnVwdCBvciBSZXNlcnZhdGlvbgorCQkJCQkJICogaW5jcmVtZW50IGNvbXBsZXRlZCBmb3IKKwkJCQkJCSAqIGNoYW5uZWwgMy4gKi8KKyNkZWZpbmUgaXJxX21wZWdfZAkJKGliYXNlKzApIAkvKiBNUEVHIERlY29kZXIgSW50ZXJydXB0ICovCisjZW5kaWYJLyogX0FTTV9NQUNIX1BPV0VSVFZfSU5URVJSVVBUU19IXyAqLworCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2lvcmVtYXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW9yZW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2Mjc2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2lvcmVtYXAuaApAQCAtMCwwICsxLDkwIEBACisvKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9QT1dFUlRWX0lPUkVNQVBfSAorI2RlZmluZSBfX0FTTV9NQUNIX1BPV0VSVFZfSU9SRU1BUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIExPV19NRU1fQk9VTkRBUllfUEhZUwkweDIwMDAwMDAwCisjZGVmaW5lIExPV19NRU1fQk9VTkRBUllfTUFTSwkofihMT1dfTUVNX0JPVU5EQVJZX1BIWVMgLSAxKSkKKworLyoKKyAqIFRoZSBidXMgYWRkcmVzc2VzIGFyZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzIHRoYXQKKyAqIHRoZSBwcm9jZXNzb3Igc2VlcyBieSBhbiBvZmZzZXQuIFRoaXMgb2Zmc2V0IHZhcmllcyBieSBBU0lDCisgKiB2ZXJzaW9uLiBEZWZpbmUgYSB2YXJpYWJsZSB0byBob2xkIHRoZSBvZmZzZXQgYW5kIHNvbWUgbWFjcm9zIHRvCisgKiBtYWtlIHRoZSBjb252ZXJzaW9uIHNpbXBsZXIuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBwaHlzX3RvX2J1c19vZmZzZXQ7CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorI2RlZmluZSBNRU1fR0FQX1BIWVMJCTB4NjAwMDAwMDAKKy8qCisgKiBUT0RPOiBXZSB3aWxsIHVzZSB0aGUgaGFyZCBjb2RlIGZvciBjb252ZXJzaW9uIGJldHdlZW4gcGh5c2ljYWwgYW5kCisgKiBidXMgdW50aWwgdGhlIGJvb3Rsb2FkZXIgcmVsZWFzZXMgdGhlaXIgZGV2aWNlIHRyZWUgdG8gdXMuCisgKi8KKyNkZWZpbmUgcGh5c190b19idXMoeCkgKCgoeCkgPCBMT1dfTUVNX0JPVU5EQVJZX1BIWVMpID8gXAorCSgoeCkgKyBwaHlzX3RvX2J1c19vZmZzZXQpIDogKHgpKQorI2RlZmluZSBidXNfdG9fcGh5cyh4KSAoKCh4KSA8IE1FTV9HQVBfUEhZU19BRERSKSA/IFwKKwkoKHgpIC0gcGh5c190b19idXNfb2Zmc2V0KSA6ICh4KSkKKyNlbHNlCisjZGVmaW5lIHBoeXNfdG9fYnVzKHgpICgoeCkgKyBwaHlzX3RvX2J1c19vZmZzZXQpCisjZGVmaW5lIGJ1c190b19waHlzKHgpICgoeCkgLSBwaHlzX3RvX2J1c19vZmZzZXQpCisjZW5kaWYKKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhZGRyZXNzIHdlIGFyZSBnaXZlbiBpcyBmb3IgYW4gQVNJQyBkZXZpY2UKKyAqIFBhcmFtczogIGFkZHIgICAgQWRkcmVzcyB0byBjaGVjaworICogUmV0dXJuczogWmVybyBpZiB0aGUgYWRkcmVzcyBpcyBub3QgZm9yIEFTSUMgZGV2aWNlcywgbm9uLXplcm8KKyAqICAgICAgaWYgaXQgaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFzaWNfaXNfZGV2aWNlX2FkZHIocGh5c190IGFkZHIpCit7CisJcmV0dXJuICEoKHBoeXNfdClhZGRyICYgKHBoeXNfdCkgTE9XX01FTV9CT1VOREFSWV9NQVNLKTsKK30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhZGRyZXNzIHdlIGFyZSBnaXZlbiBpcyBleHRlcm5hbCBSQU0gbWFwcGFibGUKKyAqIGludG8gS1NFRzEuCisgKiBQYXJhbXM6ICBhZGRyICAgIEFkZHJlc3MgdG8gY2hlY2sKKyAqIFJldHVybnM6IFplcm8gaWYgdGhlIGFkZHJlc3MgaXMgbm90IGZvciBleHRlcm5hbCBSQU0gYW5kCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFzaWNfaXNfbG93bWVtX3JhbV9hZGRyKHBoeXNfdCBhZGRyKQoreworCS8qCisJICogVGhlIFJBTSBhbHdheXMgc3RhcnRzIGF0IHRoZSBmb2xsb3dpbmcgYWRkcmVzcyBpbiB0aGUgcHJvY2Vzc29yJ3MKKwkgKiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCisJICovCisJc3RhdGljIGNvbnN0IHBoeXNfdCBwaHlzX3JhbV9iYXNlID0gMHgxMDAwMDAwMDsKKwlwaHlzX3QgYnVzX3JhbV9iYXNlOworCisJYnVzX3JhbV9iYXNlID0gcGh5c190b19idXNfb2Zmc2V0ICsgcGh5c19yYW1fYmFzZTsKKworCXJldHVybiBhZGRyID49IGJ1c19yYW1fYmFzZSAmJgorCQlhZGRyIDwgKGJ1c19yYW1fYmFzZSArIChMT1dfTUVNX0JPVU5EQVJZX1BIWVMgLSBwaHlzX3JhbV9iYXNlKSk7Cit9CisKKy8qCisgKiBBbGxvdyBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gYmUgZml4ZWQgdXAgdG8gaGVscCBwZXJpcGhlcmFscyBsb2NhdGVkCisgKiBvdXRzaWRlIHRoZSBsb3cgMzItYml0IHJhbmdlIC0tIGdlbmVyaWMgcGFzcy10aHJvdWdoIHZlcnNpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgcGh5c190IGZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QgcGh5c19hZGRyLCBwaHlzX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gcGh5c19hZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGxhdF9pb3JlbWFwKHBoeXNfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbGF0X2lvdW5tYXAoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIF9fQVNNX01BQ0hfUE9XRVJUVl9JT1JFTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaXJxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDVkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2lycS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgX0FTTV9NQUNIX1BPV0VSVFZfSVJRX0gKKyNkZWZpbmUgX0FTTV9NQUNIX1BPV0VSVFZfSVJRX0gKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaD4KKworI2RlZmluZSBNSVBTX0NQVV9JUlFfQkFTRQlpYmFzZQorI2RlZmluZSBOUl9JUlFTCQkJMTI3CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvcG93ZXJ0di1jbG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9wb3dlcnR2LWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZTlhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvcG93ZXJ0di1jbG9jay5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisvKgorICogTG9jYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBwb3dlcnR2IFBDSSBjb2RlCisgKi8KKworI2lmbmRlZiBfUE9XRVJUVl9QQ0lfUE9XRVJUVl9QQ0lfSF8KKyNkZWZpbmUgX1BPV0VSVFZfUENJX1BPV0VSVFZfUENJX0hfCitleHRlcm4gaW50IGFzaWNfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CitleHRlcm4gaW50IGFzaWNfcGNpZV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBhc2ljX3BjaWVfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCBsb2dfbGV2ZWw7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvd2FyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L3dhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzA1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L3dhci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIHZlcnNpb24gZm9yIHRoZSBQb3dlclRWIHBsYXRmb3JtIGNvcGllZCBmcm9tIHRoZSBNYWx0YSB2ZXJzaW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNyBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICovCisjaWZuZGVmIF9fQVNNX01BQ0hfUE9XRVJUVl9XQVJfSAorI2RlZmluZSBfX0FTTV9NQUNIX1BPV0VSVFZfV0FSX0gKKworI2RlZmluZSBSNDYwMF9WMV9JTkRFWF9JQ0FDSEVPUF9XQVIJMAorI2RlZmluZSBSNDYwMF9WMV9ISVRfQ0FDSEVPUF9XQVIJMAorI2RlZmluZSBSNDYwMF9WMl9ISVRfQ0FDSEVPUF9XQVIJMAorI2RlZmluZSBSNTQzMl9DUDBfSU5URVJSVVBUX1dBUgkJMAorI2RlZmluZSBCQ00xMjUwX00zX1dBUgkJCTAKKyNkZWZpbmUgU0lCWVRFXzE5NTZfV0FSCQkJMAorI2RlZmluZSBNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIJMQorI2RlZmluZSBNSVBTX0NBQ0hFX1NZTkNfV0FSCQkxCisjZGVmaW5lIFRYNDlYWF9JQ0FDSEVfSU5ERVhfSU5WX1dBUgkwCisjZGVmaW5lIFJNOTAwMF9DREVYX1NNUF9XQVIJCTAKKyNkZWZpbmUgSUNBQ0hFX1JFRklMTFNfV09SS0FST1VORF9XQVIJMQorI2RlZmluZSBSMTAwMDBfTExTQ19XQVIJCQkwCisjZGVmaW5lIE1JUFMzNEtfTUlTU0VEX0lUTEJfV0FSCQkwCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1BPV0VSVFZfV0FSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0LmgKaW5kZXggYTU3NmNlMC4uZDE0ZTJhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0LmgKQEAgLTI2LDExICsyNiw2IEBACiAvKiBvZmZzZXRzIGZyb20gYmFzZSByZWdpc3RlciAqLwogI2RlZmluZSBCT05JVE8oeCkJKHgpCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpCi0KLSNkZWZpbmUgQk9OSVRPKHgpICgqKHZvbGF0aWxlIHUzMiAqKSgoY2hhciAqKUNLU0VHMUFERFIoQk9OSVRPX1JFR19CQVNFKSArICh4KSkpCi0jZGVmaW5lIEJPTklUT19JUlFfQkFTRSAgIDMyCi0KICNlbHNlCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDYwODNkYjUuLjE0NWJiODEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0yNCw2ICsyNCwzMyBAQAogI2VuZGlmIC8qIFNNVEMgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgogCisjaWZkZWYgQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQKKworI2RlZmluZSBUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHBnZCkJCQkJXAorCXRsYm1pc3NfaGFuZGxlcl9zZXR1cF9wZ2QoKHVuc2lnbmVkIGxvbmcpKHBnZCkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJtaXNzX2hhbmRsZXJfc2V0dXBfcGdkKHVuc2lnbmVkIGxvbmcgcGdkKQoreworCS8qIENoZWNrIGZvciBzd2FwcGVyX3BnX2RpciBhbmQgY29udmVydCB0byBwaHlzaWNhbCBhZGRyZXNzLiAqLworCWlmICgocGdkICYgQ0tTRUczKSA9PSBDS1NFRzApCisJCXBnZCA9IENQSFlTQUREUihwZ2QpOworCXdyaXRlX2MwX2NvbnRleHQocGdkIDw8IDExKTsKK30KKworI2RlZmluZSBUTEJNSVNTX0hBTkRMRVJfU0VUVVAoKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpOwkJXAorCQl3cml0ZV9jMF94Y29udGV4dCgodW5zaWduZWQgbG9uZykgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDUxKTsgXAorCX0gd2hpbGUgKDApCisKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9jdXJyZW50X3BnZCh2b2lkKQoreworCXJldHVybiBQSFlTX1RPX1hLU0VHX0NBQ0hFRCgocmVhZF9jMF9jb250ZXh0KCkgPj4gMTEpICYgfjB4ZmZmVUwpOworfQorCisjZWxzZSAvKiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVDogdXNpbmcgIHBnZF9jdXJyZW50Ki8KKwogLyoKICAqIEZvciB0aGUgZmFzdCB0bGIgbWlzcyBoYW5kbGVycywgd2Uga2VlcCBhIHBlciBjcHUgYXJyYXkgb2YgcG9pbnRlcnMKICAqIHRvIHRoZSBjdXJyZW50IHBnZCBmb3IgZWFjaCBwcm9jZXNzb3IuIEFsc28sIHRoZSBwcm9jLiBpZCBpcyBzdHVmZmVkCkBAIC00Niw3ICs3Myw3IEBACiAJYmFja190b19iYWNrX2MwX2hhemFyZCgpOwkJCQkJXAogCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpCiAjZW5kaWYKLQorI2VuZGlmIC8qIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpCiAKICNkZWZpbmUgQVNJRF9JTkMJMHg0MApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWFnbC1kZWZzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYWdsLWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk0YjlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWFnbC1kZWZzLmgKQEAgLTAsMCArMSwxMTk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKipsaWNlbnNlIHN0YXJ0KioqKioqKioqKioqKioqCisgKiBBdXRob3I6IENhdml1bSBOZXR3b3JrcworICoKKyAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENhdml1bSBOZXR3b3JrcworICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBBUy1JUyBhbmQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSwgb3IKKyAqIE5PTklORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqIG9yIHZpc2l0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIG1heSBhbHNvIGJlIGF2YWlsYWJsZSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIGZyb20gQ2F2aXVtLgorICogQ29udGFjdCBDYXZpdW0gTmV0d29ya3MgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKmxpY2Vuc2UgZW5kKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19DVk1YX0FHTF9ERUZTX0hfXworI2RlZmluZSBfX0NWTVhfQUdMX0RFRlNfSF9fCisKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX0JBRF9SRUcgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNTE4dWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfQklTVCBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0MDB1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9EUlZfQ1RMIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDdGMHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX0lORl9NT0RFIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDdGOHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1BSVFhfQ0ZHKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDEwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfQURSX0NBTTAob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAxODB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDE4OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0FEUl9DQU0yKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMTkwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfQURSX0NBTTMob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAxOTh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNNChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDFBMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0FEUl9DQU01KG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMUE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfQURSX0NBTV9FTihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDEwOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0FEUl9DVEwob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAxMDB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9ERUNJU0lPTihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA0MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0ZSTV9DSEsob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwMjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9GUk1fQ1RMKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfRlJNX01BWChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDAzMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX0ZSTV9NSU4ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwMjh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9JRkcob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwNTh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9JTlRfRU4ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwMDh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9JTlRfUkVHKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDAwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfSkFCQkVSKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDM4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfUEFVU0VfRFJPUF9USU1FKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDY4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfQ1RMKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDUwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfT0NUUyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA4OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX09DVFNfQ1RMKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDk4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfT0NUU19ETUFDKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMEE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfT0NUU19EUlAob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwQjh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19QS1RTKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMDgwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfUEtUU19CQUQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAwQzB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19QS1RTX0NUTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA5MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfRE1BQyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDBBMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfRFJQKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMEIwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9SWFhfVUREX1NLUChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDA0OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhfQlBfRFJPUFgob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0MjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiA4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYX0JQX09GRlgob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0NjB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiA4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1JYX0JQX09OWChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDQ0MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhfUFJUX0lORk8gXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNEU4dWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfUlhfVFhfU1RBVFVTIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDdFOHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1NNQUNYKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjMwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9TVEFUX0JQIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDUyMHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9BUFBFTkQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyMTh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9DVEwob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyNzB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9NSU5fUEtUKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjQwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfUEFVU0VfUEtUX0lOVEVSVkFMKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjQ4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfUEFVU0VfUEtUX1RJTUUob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyMzh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9QQVVTRV9UT0dPKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjU4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfUEFVU0VfWkVSTyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI2MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NPRlRfUEFVU0Uob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyNTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUMChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI4MHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVQxKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMjg4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDIob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyOTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUMyhvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI5OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVQ0KG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMkEwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDUob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyQTh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUNihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDJCMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVQ3KG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwMkI4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWFhfU1RBVDgob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDAyQzB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYWF9TVEFUOShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDJDOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1NUQVRTX0NUTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDI2OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhYX1RIUkVTSChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDIxMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfQlAgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNEQwdWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfQ09MX0FUVEVNUFQgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMEUwMDAwNDk4dWxsKQorI2RlZmluZSBDVk1YX0FHTF9HTVhfVFhfSUZHIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDQ4OHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYX0lOVF9FTiBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA1MDh1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9JTlRfUkVHIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDUwMHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYX0pBTSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0OTB1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9MRlNSIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDBFMDAwMDRGOHVsbCkKKyNkZWZpbmUgQ1ZNWF9BR0xfR01YX1RYX09WUl9CUCBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0Qzh1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9QQVVTRV9QS1RfRE1BQyBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0QTB1bGwpCisjZGVmaW5lIENWTVhfQUdMX0dNWF9UWF9QQVVTRV9QS1RfVFlQRSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwRTAwMDA0QTh1bGwpCisKK3VuaW9uIGN2bXhfYWdsX2dteF9iYWRfcmVnIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iYWRfcmVnX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8zOF82MzoyNjsKKwkJdWludDY0X3QgdHhwc2gxOjE7CisJCXVpbnQ2NF90IHR4cG9wMToxOworCQl1aW50NjRfdCBvdnJmbHcxOjE7CisJCXVpbnQ2NF90IHR4cHNoOjE7CisJCXVpbnQ2NF90IHR4cG9wOjE7CisJCXVpbnQ2NF90IG92cmZsdzoxOworCQl1aW50NjRfdCByZXNlcnZlZF8yN18zMTo1OworCQl1aW50NjRfdCBzdGF0b3ZyOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIzXzI1OjM7CisJCXVpbnQ2NF90IGxvc3RzdGF0OjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzRfMjE6MTg7CisJCXVpbnQ2NF90IG91dF9vdnI6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMF8xOjI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmFkX3JlZ19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2JhZF9yZWdfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2JhZF9yZWdfY241Nnh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzVfNjM6Mjk7CisJCXVpbnQ2NF90IHR4cHNoOjE7CisJCXVpbnQ2NF90IHR4cG9wOjE7CisJCXVpbnQ2NF90IG92cmZsdzoxOworCQl1aW50NjRfdCByZXNlcnZlZF8yN18zMTo1OworCQl1aW50NjRfdCBzdGF0b3ZyOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIzXzI1OjM7CisJCXVpbnQ2NF90IGxvc3RzdGF0OjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzNfMjE6MTk7CisJCXVpbnQ2NF90IG91dF9vdnI6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMF8xOjI7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iYWRfcmVnX2NuNTZ4eCBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9iaXN0IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iaXN0X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xMF82Mzo1NDsKKwkJdWludDY0X3Qgc3RhdHVzOjEwOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2Jpc3RfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iaXN0X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9iaXN0X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfYmlzdF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X2Rydl9jdGwgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2Rydl9jdGxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ5XzYzOjE1OworCQl1aW50NjRfdCBieXBfZW4xOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ1XzQ3OjM7CisJCXVpbnQ2NF90IHBjdGwxOjU7CisJCXVpbnQ2NF90IHJlc2VydmVkXzM3XzM5OjM7CisJCXVpbnQ2NF90IG5jdGwxOjU7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE3XzMxOjE1OworCQl1aW50NjRfdCBieXBfZW46MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTNfMTU6MzsKKwkJdWludDY0X3QgcGN0bDo1OworCQl1aW50NjRfdCByZXNlcnZlZF81Xzc6MzsKKwkJdWludDY0X3QgbmN0bDo1OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2Rydl9jdGxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9kcnZfY3RsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9kcnZfY3RsX2NuNTZ4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE3XzYzOjQ3OworCQl1aW50NjRfdCBieXBfZW46MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTNfMTU6MzsKKwkJdWludDY0X3QgcGN0bDo1OworCQl1aW50NjRfdCByZXNlcnZlZF81Xzc6MzsKKwkJdWludDY0X3QgbmN0bDo1OworCX0gY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfZHJ2X2N0bF9jbjU2eHggY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfaW5mX21vZGUgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2luZl9tb2RlX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yXzYzOjYyOworCQl1aW50NjRfdCBlbjoxOworCQl1aW50NjRfdCByZXNlcnZlZF8wXzA6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9pbmZfbW9kZV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2luZl9tb2RlX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9pbmZfbW9kZV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X2luZl9tb2RlX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcHJ0eF9jZmcgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3BydHhfY2ZnX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF82XzYzOjU4OworCQl1aW50NjRfdCB0eF9lbjoxOworCQl1aW50NjRfdCByeF9lbjoxOworCQl1aW50NjRfdCBzbG90dGltZToxOworCQl1aW50NjRfdCBkdXBsZXg6MTsKKwkJdWludDY0X3Qgc3BlZWQ6MTsKKwkJdWludDY0X3QgZW46MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9wcnR4X2NmZ19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3BydHhfY2ZnX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9wcnR4X2NmZ19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3BydHhfY2ZnX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0wIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTBfcyB7CisJCXVpbnQ2NF90IGFkcjo2NDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0xX3MgeworCQl1aW50NjRfdCBhZHI6NjQ7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0xX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0xX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTFfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTFfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTIgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMl9zIHsKKwkJdWludDY0X3QgYWRyOjY0OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtMl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0yX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0yX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW0zIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTNfcyB7CisJCXVpbnQ2NF90IGFkcjo2NDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTNfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTNfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtM19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtM19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW00X3MgeworCQl1aW50NjRfdCBhZHI6NjQ7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW00X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW00X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTRfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfYWRyX2NhbTUgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNV9zIHsKKwkJdWludDY0X3QgYWRyOjY0OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtNV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW01X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW01X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW1fZW4geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtX2VuX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF84XzYzOjU2OworCQl1aW50NjRfdCBlbjo4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtX2VuX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW1fZW5fcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY2FtX2VuX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jYW1fZW5fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfYWRyX2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jdGxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzRfNjM6NjA7CisJCXVpbnQ2NF90IGNhbV9tb2RlOjE7CisJCXVpbnQ2NF90IG1jc3Q6MjsKKwkJdWludDY0X3QgYmNzdDoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jdGxfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9hZHJfY3RsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfZGVjaXNpb24geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9kZWNpc2lvbl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNV82Mzo1OTsKKwkJdWludDY0X3QgY250OjU7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2RlY2lzaW9uX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2RlY2lzaW9uX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZGVjaXNpb25fcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZGVjaXNpb25fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfZnJtX2NoayB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jaGtfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzlfNjM6NTU7CisJCXVpbnQ2NF90IHNrcGVycjoxOworCQl1aW50NjRfdCByY3ZlcnI6MTsKKwkJdWludDY0X3QgbGVuZXJyOjE7CisJCXVpbnQ2NF90IGFsbmVycjoxOworCQl1aW50NjRfdCBmY3NlcnI6MTsKKwkJdWludDY0X3QgamFiYmVyOjE7CisJCXVpbnQ2NF90IG1heGVycjoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xXzE6MTsKKwkJdWludDY0X3QgbWluZXJyOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jaGtfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX2Noa19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jaGtfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX2Noa19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9mcm1fY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX2N0bF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTBfNjM6NTQ7CisJCXVpbnQ2NF90IHByZV9hbGlnbjoxOworCQl1aW50NjRfdCBwYWRfbGVuOjE7CisJCXVpbnQ2NF90IHZsYW5fbGVuOjE7CisJCXVpbnQ2NF90IHByZV9mcmVlOjE7CisJCXVpbnQ2NF90IGN0bF9zbWFjOjE7CisJCXVpbnQ2NF90IGN0bF9tY3N0OjE7CisJCXVpbnQ2NF90IGN0bF9iY2s6MTsKKwkJdWludDY0X3QgY3RsX2RycDoxOworCQl1aW50NjRfdCBwcmVfc3RycDoxOworCQl1aW50NjRfdCBwcmVfY2hrOjE7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jdGxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9jdGxfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX2N0bF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWF4IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21heF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IGxlbjoxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21heF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWF4X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfZnJtX21heF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWF4X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2ZybV9taW4geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWluX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xNl82Mzo0ODsKKwkJdWludDY0X3QgbGVuOjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWluX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9taW5fcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9mcm1fbWluX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ZybV9taW5fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfaWZnIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaWZnX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80XzYzOjYwOworCQl1aW50NjRfdCBpZmc6NDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaWZnX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2lmZ19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2lmZ19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pZmdfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfaW50X2VuIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X2VuX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yMF82Mzo0NDsKKwkJdWludDY0X3QgcGF1c2VfZHJwOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzE4OjM7CisJCXVpbnQ2NF90IGlmZ2VycjoxOworCQl1aW50NjRfdCBjb2xkZXQ6MTsKKwkJdWludDY0X3QgZmFsZXJyOjE7CisJCXVpbnQ2NF90IHJzdmVycjoxOworCQl1aW50NjRfdCBwY3RlcnI6MTsKKwkJdWludDY0X3Qgb3ZyZXJyOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzlfOToxOworCQl1aW50NjRfdCBza3BlcnI6MTsKKwkJdWludDY0X3QgcmN2ZXJyOjE7CisJCXVpbnQ2NF90IGxlbmVycjoxOworCQl1aW50NjRfdCBhbG5lcnI6MTsKKwkJdWludDY0X3QgZmNzZXJyOjE7CisJCXVpbnQ2NF90IGphYmJlcjoxOworCQl1aW50NjRfdCBtYXhlcnI6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8xOjE7CisJCXVpbnQ2NF90IG1pbmVycjoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pbnRfZW5fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X2VuX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X2VuX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2ludF9lbl9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9pbnRfcmVnIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X3JlZ19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjBfNjM6NDQ7CisJCXVpbnQ2NF90IHBhdXNlX2RycDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xNl8xODozOworCQl1aW50NjRfdCBpZmdlcnI6MTsKKwkJdWludDY0X3QgY29sZGV0OjE7CisJCXVpbnQ2NF90IGZhbGVycjoxOworCQl1aW50NjRfdCByc3ZlcnI6MTsKKwkJdWludDY0X3QgcGN0ZXJyOjE7CisJCXVpbnQ2NF90IG92cmVycjoxOworCQl1aW50NjRfdCByZXNlcnZlZF85Xzk6MTsKKwkJdWludDY0X3Qgc2twZXJyOjE7CisJCXVpbnQ2NF90IHJjdmVycjoxOworCQl1aW50NjRfdCBsZW5lcnI6MTsKKwkJdWludDY0X3QgYWxuZXJyOjE7CisJCXVpbnQ2NF90IGZjc2VycjoxOworCQl1aW50NjRfdCBqYWJiZXI6MTsKKwkJdWludDY0X3QgbWF4ZXJyOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMToxOworCQl1aW50NjRfdCBtaW5lcnI6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X3JlZ19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pbnRfcmVnX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfaW50X3JlZ19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9pbnRfcmVnX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2phYmJlciB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2phYmJlcl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IGNudDoxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfamFiYmVyX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2phYmJlcl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X2phYmJlcl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9qYWJiZXJfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfcGF1c2VfZHJvcF90aW1lIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfcGF1c2VfZHJvcF90aW1lX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xNl82Mzo0ODsKKwkJdWludDY0X3Qgc3RhdHVzOjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9wYXVzZV9kcm9wX3RpbWVfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfcGF1c2VfZHJvcF90aW1lX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfcGF1c2VfZHJvcF90aW1lX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3BhdXNlX2Ryb3BfdGltZV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19jdGwgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19jdGxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfNjM6NjM7CisJCXVpbnQ2NF90IHJkX2NscjoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19jdGxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfY3RsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfY3RsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX2N0bF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDhfNjM6MTY7CisJCXVpbnQ2NF90IGNudDo0ODsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19jdGxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzQ4XzYzOjE2OworCQl1aW50NjRfdCBjbnQ6NDg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfY3RsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19jdGxfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kbWFjIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kbWFjX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80OF82MzoxNjsKKwkJdWludDY0X3QgY250OjQ4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RtYWNfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kbWFjX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfb2N0c19kbWFjX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZG1hY19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RycCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZHJwX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80OF82MzoxNjsKKwkJdWludDY0X3QgY250OjQ4OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RycF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19vY3RzX2RycF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZHJwX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX29jdHNfZHJwX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHMgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8zMl82MzozMjsKKwkJdWludDY0X3QgY250OjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19iYWQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2JhZF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzJfNjM6MzI7CisJCXVpbnQ2NF90IGNudDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19iYWRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19iYWRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2JhZF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2JhZF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2N0bCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8zMl82MzozMjsKKwkJdWludDY0X3QgY250OjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2N0bF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfY3RsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfY3RsX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZG1hYyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZG1hY19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzJfNjM6MzI7CisJCXVpbnQ2NF90IGNudDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kbWFjX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZG1hY19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnh4X3N0YXRzX3BrdHNfZG1hY19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RtYWNfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kcnAgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RycF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzJfNjM6MzI7CisJCXVpbnQ2NF90IGNudDozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kcnBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfc3RhdHNfcGt0c19kcnBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RycF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF9zdGF0c19wa3RzX2RycF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4eF91ZGRfc2twIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfdWRkX3NrcF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOV82Mzo1NTsKKwkJdWludDY0X3QgZmNzc2VsOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzdfNzoxOworCQl1aW50NjRfdCBsZW46NzsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfdWRkX3NrcF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF91ZGRfc2twX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeHhfdWRkX3NrcF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4eF91ZGRfc2twX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnhfYnBfZHJvcHggeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX2Ryb3B4X3MgeworCQl1aW50NjRfdCByZXNlcnZlZF82XzYzOjU4OworCQl1aW50NjRfdCBtYXJrOjY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfZHJvcHhfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9kcm9weF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfZHJvcHhfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9kcm9weF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3J4X2JwX29mZnggeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29mZnhfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzZfNjM6NTg7CisJCXVpbnQ2NF90IG1hcms6NjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9icF9vZmZ4X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfb2ZmeF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfb2ZmeF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29mZnhfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeF9icF9vbnggeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29ueF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOV82Mzo1NTsKKwkJdWludDY0X3QgbWFyazo5OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29ueF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X2JwX29ueF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfb254X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfYnBfb254X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfcnhfcHJ0X2luZm8geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X3BydF9pbmZvX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xOF82Mzo0NjsKKwkJdWludDY0X3QgZHJvcDoyOworCQl1aW50NjRfdCByZXNlcnZlZF8yXzE1OjE0OworCQl1aW50NjRfdCBjb21taXQ6MjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9wcnRfaW5mb19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X3BydF9pbmZvX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF9wcnRfaW5mb19jbjU2eHggeworCQl1aW50NjRfdCByZXNlcnZlZF8xN182Mzo0NzsKKwkJdWludDY0X3QgZHJvcDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xXzE1OjE1OworCQl1aW50NjRfdCBjb21taXQ6MTsKKwl9IGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X3BydF9pbmZvX2NuNTZ4eCBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF9yeF90eF9zdGF0dXMgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3J4X3R4X3N0YXR1c19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNl82Mzo1ODsKKwkJdWludDY0X3QgdHg6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMl8zOjI7CisJCXVpbnQ2NF90IHJ4OjI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfdHhfc3RhdHVzX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfcnhfdHhfc3RhdHVzX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF90eF9zdGF0dXNfY241Nnh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNV82Mzo1OTsKKwkJdWludDY0X3QgdHg6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8zOjM7CisJCXVpbnQ2NF90IHJ4OjE7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9yeF90eF9zdGF0dXNfY241Nnh4IGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3NtYWN4IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zbWFjeF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDhfNjM6MTY7CisJCXVpbnQ2NF90IHNtYWM6NDg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfc21hY3hfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zbWFjeF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfc21hY3hfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zbWFjeF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3N0YXRfYnAgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3N0YXRfYnBfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE3XzYzOjQ3OworCQl1aW50NjRfdCBicDoxOworCQl1aW50NjRfdCBjbnQ6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfc3RhdF9icF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3N0YXRfYnBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3N0YXRfYnBfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF9zdGF0X2JwX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X2FwcGVuZCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2FwcGVuZF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNF82Mzo2MDsKKwkJdWludDY0X3QgZm9yY2VfZmNzOjE7CisJCXVpbnQ2NF90IGZjczoxOworCQl1aW50NjRfdCBwYWQ6MTsKKwkJdWludDY0X3QgcHJlYW1ibGU6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfYXBwZW5kX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2FwcGVuZF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2FwcGVuZF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9hcHBlbmRfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yXzYzOjYyOworCQl1aW50NjRfdCB4c2RlZl9lbjoxOworCQl1aW50NjRfdCB4c2NvbF9lbjoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9jdGxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfY3RsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfY3RsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X2N0bF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9taW5fcGt0IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfbWluX3BrdF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOF82Mzo1NjsKKwkJdWludDY0X3QgbWluX3NpemU6ODsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfbWluX3BrdF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9taW5fcGt0X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfbWluX3BrdF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9taW5fcGt0X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF9pbnRlcnZhbCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF9pbnRlcnZhbF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IGludGVydmFsOjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfaW50ZXJ2YWxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X2ludGVydmFsX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X2ludGVydmFsX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF9pbnRlcnZhbF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfdGltZSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3BrdF90aW1lX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xNl82Mzo0ODsKKwkJdWludDY0X3QgdGltZToxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X3RpbWVfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfcGt0X3RpbWVfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfdGltZV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV9wa3RfdGltZV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV90b2dvIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfdG9nb19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IHRpbWU6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3RvZ29fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfdG9nb19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3RvZ29fcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfdG9nb19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV96ZXJvIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfcGF1c2VfemVyb19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV82Mzo2MzsKKwkJdWludDY0X3Qgc2VuZDoxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV96ZXJvX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3plcm9fcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9wYXVzZV96ZXJvX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3BhdXNlX3plcm9fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc29mdF9wYXVzZSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3NvZnRfcGF1c2VfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE2XzYzOjQ4OworCQl1aW50NjRfdCB0aW1lOjE2OworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zb2Z0X3BhdXNlX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3NvZnRfcGF1c2VfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zb2Z0X3BhdXNlX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3NvZnRfcGF1c2VfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDAgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MF9zIHsKKwkJdWludDY0X3QgeHNkZWY6MzI7CisJCXVpbnQ2NF90IHhzY29sOjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0MF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQwX3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQwX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQxIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDFfcyB7CisJCXVpbnQ2NF90IHNjb2w6MzI7CisJCXVpbnQ2NF90IG1jb2w6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQxX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQxX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDFfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDFfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDIgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0Ml9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDhfNjM6MTY7CisJCXVpbnQ2NF90IG9jdHM6NDg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQyX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQyX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDJfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDJfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDMgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0M19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzJfNjM6MzI7CisJCXVpbnQ2NF90IHBrdHM6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQzX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQzX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDNfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDNfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NF9zIHsKKwkJdWludDY0X3QgaGlzdDE6MzI7CisJCXVpbnQ2NF90IGhpc3QwOjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ0X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ0X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQ1IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDVfcyB7CisJCXVpbnQ2NF90IGhpc3QzOjMyOworCQl1aW50NjRfdCBoaXN0MjozMjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDVfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDVfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0NV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4eF9zdGF0NiB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ2X3MgeworCQl1aW50NjRfdCBoaXN0NTozMjsKKwkJdWludDY0X3QgaGlzdDQ6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ2X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ2X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDZfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDZfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDcgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0N19zIHsKKwkJdWludDY0X3QgaGlzdDc6MzI7CisJCXVpbnQ2NF90IGhpc3Q2OjMyOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0N19zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0N19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ3X3MgY241Nnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ3X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQ4IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDhfcyB7CisJCXVpbnQ2NF90IG1jc3Q6MzI7CisJCXVpbnQ2NF90IGJjc3Q6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ4X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ4X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDhfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDhfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdDkgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0OV9zIHsKKwkJdWludDY0X3QgdW5kZmx3OjMyOworCQl1aW50NjRfdCBjdGw6MzI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ5X3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXQ5X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDlfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdDlfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfc3RhdHNfY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdHNfY3RsX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xXzYzOjYzOworCQl1aW50NjRfdCByZF9jbHI6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfc3RhdHNfY3RsX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXRzX2N0bF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3N0YXRzX2N0bF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF9zdGF0c19jdGxfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eHhfdGhyZXNoIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfdGhyZXNoX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF82XzYzOjU4OworCQl1aW50NjRfdCBjbnQ6NjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eHhfdGhyZXNoX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3RocmVzaF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHh4X3RocmVzaF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4eF90aHJlc2hfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9icCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfYnBfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzJfNjM6NjI7CisJCXVpbnQ2NF90IGJwOjI7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfYnBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9icF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfYnBfY241Nnh4IHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV82Mzo2MzsKKwkJdWludDY0X3QgYnA6MTsKKwl9IGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2JwX2NuNTZ4eCBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9jb2xfYXR0ZW1wdCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfY29sX2F0dGVtcHRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzVfNjM6NTk7CisJCXVpbnQ2NF90IGxpbWl0OjU7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfY29sX2F0dGVtcHRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9jb2xfYXR0ZW1wdF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfY29sX2F0dGVtcHRfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9jb2xfYXR0ZW1wdF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4X2lmZyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaWZnX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF84XzYzOjU2OworCQl1aW50NjRfdCBpZmcyOjQ7CisJCXVpbnQ2NF90IGlmZzE6NDsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pZmdfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pZmdfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2lmZ19zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2lmZ19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4X2ludF9lbiB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X2VuX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xOF82Mzo0NjsKKwkJdWludDY0X3QgbGF0ZV9jb2w6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTRfMTU6MjsKKwkJdWludDY0X3QgeHNkZWY6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTBfMTE6MjsKKwkJdWludDY0X3QgeHNjb2w6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNF83OjQ7CisJCXVpbnQ2NF90IHVuZGZsdzoyOworCQl1aW50NjRfdCByZXNlcnZlZF8xXzE6MTsKKwkJdWludDY0X3QgcGtvX254YToxOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9lbl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9lbl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X2VuX2NuNTZ4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE3XzYzOjQ3OworCQl1aW50NjRfdCBsYXRlX2NvbDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8xM18xNTozOworCQl1aW50NjRfdCB4c2RlZjoxOworCQl1aW50NjRfdCByZXNlcnZlZF85XzExOjM7CisJCXVpbnQ2NF90IHhzY29sOjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzNfNzo1OworCQl1aW50NjRfdCB1bmRmbHc6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8xOjE7CisJCXVpbnQ2NF90IHBrb19ueGE6MTsKKwl9IGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2ludF9lbl9jbjU2eHggY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X2FnbF9nbXhfdHhfaW50X3JlZyB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X3JlZ19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMThfNjM6NDY7CisJCXVpbnQ2NF90IGxhdGVfY29sOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE0XzE1OjI7CisJCXVpbnQ2NF90IHhzZGVmOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzEwXzExOjI7CisJCXVpbnQ2NF90IHhzY29sOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzRfNzo0OworCQl1aW50NjRfdCB1bmRmbHc6MjsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8xOjE7CisJCXVpbnQ2NF90IHBrb19ueGE6MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pbnRfcmVnX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X3JlZ19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfaW50X3JlZ19jbjU2eHggeworCQl1aW50NjRfdCByZXNlcnZlZF8xN182Mzo0NzsKKwkJdWludDY0X3QgbGF0ZV9jb2w6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTNfMTU6MzsKKwkJdWludDY0X3QgeHNkZWY6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOV8xMTozOworCQl1aW50NjRfdCB4c2NvbDoxOworCQl1aW50NjRfdCByZXNlcnZlZF8zXzc6NTsKKwkJdWludDY0X3QgdW5kZmx3OjE7CisJCXVpbnQ2NF90IHJlc2VydmVkXzFfMToxOworCQl1aW50NjRfdCBwa29fbnhhOjE7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9pbnRfcmVnX2NuNTZ4eCBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9qYW0geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2phbV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfOF82Mzo1NjsKKwkJdWludDY0X3QgamFtOjg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfamFtX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfamFtX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9qYW1fcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9qYW1fcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9sZnNyIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9sZnNyX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8xNl82Mzo0ODsKKwkJdWludDY0X3QgbGZzcjoxNjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9sZnNyX3MgY241Mnh4OworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfbGZzcl9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfbGZzcl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X2xmc3JfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfYWdsX2dteF90eF9vdnJfYnAgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X292cl9icF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTBfNjM6NTQ7CisJCXVpbnQ2NF90IGVuOjI7CisJCXVpbnQ2NF90IHJlc2VydmVkXzZfNzoyOworCQl1aW50NjRfdCBicDoyOworCQl1aW50NjRfdCByZXNlcnZlZF8yXzM6MjsKKwkJdWludDY0X3QgaWduX2Z1bGw6MjsKKwl9IHM7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9vdnJfYnBfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9vdnJfYnBfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9hZ2xfZ214X3R4X292cl9icF9jbjU2eHggeworCQl1aW50NjRfdCByZXNlcnZlZF85XzYzOjU1OworCQl1aW50NjRfdCBlbjoxOworCQl1aW50NjRfdCByZXNlcnZlZF81Xzc6MzsKKwkJdWludDY0X3QgYnA6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV8zOjM7CisJCXVpbnQ2NF90IGlnbl9mdWxsOjE7CisJfSBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9vdnJfYnBfY241Nnh4IGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4X3BhdXNlX3BrdF9kbWFjIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfZG1hY19zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNDhfNjM6MTY7CisJCXVpbnQ2NF90IGRtYWM6NDg7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X2RtYWNfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfZG1hY19zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X2RtYWNfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfZG1hY19zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9hZ2xfZ214X3R4X3BhdXNlX3BrdF90eXBlIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfdHlwZV9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTZfNjM6NDg7CisJCXVpbnQ2NF90IHR5cGU6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X3R5cGVfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfdHlwZV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X2FnbF9nbXhfdHhfcGF1c2VfcGt0X3R5cGVfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfYWdsX2dteF90eF9wYXVzZV9wa3RfdHlwZV9zIGNuNTZ4eHAxOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbWl4eC1kZWZzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbWl4eC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiNmRjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1taXh4LWRlZnMuaApAQCAtMCwwICsxLDI0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqbGljZW5zZSBzdGFydCoqKioqKioqKioqKioqKgorICogQXV0aG9yOiBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBDb250YWN0OiBzdXBwb3J0QGNhdml1bW5ldHdvcmtzLmNvbQorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9DVEVPTiBTREsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogQVMtSVMgYW5kIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUsIG9yCisgKiBOT05JTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgKiBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKiBvciB2aXNpdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYWxzbyBiZSBhdmFpbGFibGUgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBmcm9tIENhdml1bS4KKyAqIENvbnRhY3QgQ2F2aXVtIE5ldHdvcmtzIGZvciBtb3JlIGluZm9ybWF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKipsaWNlbnNlIGVuZCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ1ZNWF9NSVhYX0RFRlNfSF9fCisjZGVmaW5lIF9fQ1ZNWF9NSVhYX0RFRlNfSF9fCisKKyNkZWZpbmUgQ1ZNWF9NSVhYX0JJU1Qob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwNzh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX0NUTChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDAyMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfSU5URU5BKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDUwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9JUkNOVChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDAzMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfSVJIV00ob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwMjh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX0lSSU5HMShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDAxMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfSVJJTkcyKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9JU1Iob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwNDh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX09SQ05UKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDQwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9PUkhXTShvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDAzOHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorI2RlZmluZSBDVk1YX01JWFhfT1JJTkcxKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMDcwMDAwMTAwMDAwdWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjA0OCkpCisjZGVmaW5lIENWTVhfTUlYWF9PUklORzIob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDEwNzAwMDAxMDAwMDh1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyMDQ4KSkKKyNkZWZpbmUgQ1ZNWF9NSVhYX1JFTUNOVChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTA3MDAwMDEwMDA1OHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDIwNDgpKQorCit1bmlvbiBjdm14X21peHhfYmlzdCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfYmlzdF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNF82Mzo2MDsKKwkJdWludDY0X3QgbXJxZGF0OjE7CisJCXVpbnQ2NF90IGlwZmRhdDoxOworCQl1aW50NjRfdCBpcmZkYXQ6MTsKKwkJdWludDY0X3Qgb3JmZGF0OjE7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfYmlzdF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2Jpc3RfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9taXh4X2Jpc3RfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9iaXN0X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfY3RsIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9jdGxfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzhfNjM6NTY7CisJCXVpbnQ2NF90IGNyY19zdHJpcDoxOworCQl1aW50NjRfdCBidXN5OjE7CisJCXVpbnQ2NF90IGVuOjE7CisJCXVpbnQ2NF90IHJlc2V0OjE7CisJCXVpbnQ2NF90IGxlbmRpYW46MTsKKwkJdWludDY0X3QgbmJ0YXJiOjE7CisJCXVpbnQ2NF90IG1ycV9od206MjsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9jdGxfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9jdGxfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9taXh4X2N0bF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2N0bF9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X2ludGVuYSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfaW50ZW5hX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF83XzYzOjU3OworCQl1aW50NjRfdCBvcnVuZW5hOjE7CisJCXVpbnQ2NF90IGlydW5lbmE6MTsKKwkJdWludDY0X3QgZGF0YV9kcnBlbmE6MTsKKwkJdWludDY0X3QgaXRoZW5hOjE7CisJCXVpbnQ2NF90IG90aGVuYToxOworCQl1aW50NjRfdCBpdmZlbmE6MTsKKwkJdWludDY0X3Qgb3ZmZW5hOjE7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfaW50ZW5hX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfaW50ZW5hX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9pbnRlbmFfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9pbnRlbmFfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9pcmNudCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfaXJjbnRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIwXzYzOjQ0OworCQl1aW50NjRfdCBpcmNudDoyMDsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9pcmNudF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyY250X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9pcmNudF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyY250X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfaXJod20geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaHdtX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF80MF82MzoyNDsKKwkJdWludDY0X3QgaWJwbHdtOjIwOworCQl1aW50NjRfdCBpcmh3bToyMDsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9pcmh3bV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaHdtX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9pcmh3bV9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaHdtX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfaXJpbmcxIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzFfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzYwXzYzOjQ7CisJCXVpbnQ2NF90IGlzaXplOjIwOworCQl1aW50NjRfdCByZXNlcnZlZF8zNl8zOTo0OworCQl1aW50NjRfdCBpYmFzZTozMzsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMF8yOjM7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfaXJpbmcxX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfaXJpbmcxX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzFfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzFfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9pcmluZzIgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaW5nMl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNTJfNjM6MTI7CisJCXVpbnQ2NF90IGl0bHB0cjoyMDsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMjBfMzE6MTI7CisJCXVpbnQ2NF90IGlkYmVsbDoyMDsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzJfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9pcmluZzJfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaW5nMl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X2lyaW5nMl9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X2lzciB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfaXNyX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF83XzYzOjU3OworCQl1aW50NjRfdCBvcnVuOjE7CisJCXVpbnQ2NF90IGlydW46MTsKKwkJdWludDY0X3QgZGF0YV9kcnA6MTsKKwkJdWludDY0X3QgaXJ0aHJlc2g6MTsKKwkJdWludDY0X3Qgb3J0aHJlc2g6MTsKKwkJdWludDY0X3QgaWRibG92ZjoxOworCQl1aW50NjRfdCBvZGJsb3ZmOjE7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfaXNyX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfaXNyX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9pc3JfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9pc3JfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9vcmNudCB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfb3JjbnRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIwXzYzOjQ0OworCQl1aW50NjRfdCBvcmNudDoyMDsKKwl9IHM7CisJc3RydWN0IGN2bXhfbWl4eF9vcmNudF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yY250X3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9vcmNudF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yY250X3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfb3Jod20geworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaHdtX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yMF82Mzo0NDsKKwkJdWludDY0X3Qgb3Jod206MjA7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfb3Jod21fcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfbWl4eF9vcmh3bV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfb3Jod21fcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9vcmh3bV9zIGNuNTZ4eHAxOworfTsKKwordW5pb24gY3ZteF9taXh4X29yaW5nMSB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X21peHhfb3JpbmcxX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF82MF82Mzo0OworCQl1aW50NjRfdCBvc2l6ZToyMDsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMzZfMzk6NDsKKwkJdWludDY0X3Qgb2Jhc2U6MzM7CisJCXVpbnQ2NF90IHJlc2VydmVkXzBfMjozOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMV9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X29yaW5nMV9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfb3JpbmcxX3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfb3JpbmcxX3MgY241Nnh4cDE7Cit9OworCit1bmlvbiBjdm14X21peHhfb3JpbmcyIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfbWl4eF9vcmluZzJfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzUyXzYzOjEyOworCQl1aW50NjRfdCBvdGxwdHI6MjA7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIwXzMxOjEyOworCQl1aW50NjRfdCBvZGJlbGw6MjA7CisJfSBzOworCXN0cnVjdCBjdm14X21peHhfb3JpbmcyX3MgY241Mnh4OworCXN0cnVjdCBjdm14X21peHhfb3JpbmcyX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfbWl4eF9vcmluZzJfcyBjbjU2eHg7CisJc3RydWN0IGN2bXhfbWl4eF9vcmluZzJfcyBjbjU2eHhwMTsKK307CisKK3VuaW9uIGN2bXhfbWl4eF9yZW1jbnQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9taXh4X3JlbWNudF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfNTJfNjM6MTI7CisJCXVpbnQ2NF90IGlyZW1jbnQ6MjA7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIwXzMxOjEyOworCQl1aW50NjRfdCBvcmVtY250OjIwOworCX0gczsKKwlzdHJ1Y3QgY3ZteF9taXh4X3JlbWNudF9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9taXh4X3JlbWNudF9zIGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X21peHhfcmVtY250X3MgY241Nnh4OworCXN0cnVjdCBjdm14X21peHhfcmVtY250X3MgY241Nnh4cDE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1zbWl4LWRlZnMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1zbWl4LWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWU0NWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LXNtaXgtZGVmcy5oCkBAIC0wLDAgKzEsMTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKipsaWNlbnNlIHN0YXJ0KioqKioqKioqKioqKioqCisgKiBBdXRob3I6IENhdml1bSBOZXR3b3JrcworICoKKyAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESworICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENhdml1bSBOZXR3b3JrcworICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBBUy1JUyBhbmQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSwgb3IKKyAqIE5PTklORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqIG9yIHZpc2l0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIG1heSBhbHNvIGJlIGF2YWlsYWJsZSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIGZyb20gQ2F2aXVtLgorICogQ29udGFjdCBDYXZpdW0gTmV0d29ya3MgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKmxpY2Vuc2UgZW5kKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19DVk1YX1NNSVhfREVGU19IX18KKyNkZWZpbmUgX19DVk1YX1NNSVhfREVGU19IX18KKworI2RlZmluZSBDVk1YX1NNSVhfQ0xLKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMDAwMDAxODE4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjU2KSkKKyNkZWZpbmUgQ1ZNWF9TTUlYX0NNRChvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDAwMDAwMTgwMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDI1NikpCisjZGVmaW5lIENWTVhfU01JWF9FTihvZmZzZXQpIFwKKwkgQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTE4MDAwMDAwMTgyMHVsbCArICgoKG9mZnNldCkgJiAxKSAqIDI1NikpCisjZGVmaW5lIENWTVhfU01JWF9SRF9EQVQob2Zmc2V0KSBcCisJIENWTVhfQUREX0lPX1NFRygweDAwMDExODAwMDAwMDE4MTB1bGwgKyAoKChvZmZzZXQpICYgMSkgKiAyNTYpKQorI2RlZmluZSBDVk1YX1NNSVhfV1JfREFUKG9mZnNldCkgXAorCSBDVk1YX0FERF9JT19TRUcoMHgwMDAxMTgwMDAwMDAxODA4dWxsICsgKCgob2Zmc2V0KSAmIDEpICogMjU2KSkKKwordW5pb24gY3ZteF9zbWl4X2NsayB7CisJdWludDY0X3QgdTY0OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX3MgeworCQl1aW50NjRfdCByZXNlcnZlZF8yNV82MzozOTsKKwkJdWludDY0X3QgbW9kZToxOworCQl1aW50NjRfdCByZXNlcnZlZF8yMV8yMzozOworCQl1aW50NjRfdCBzYW1wbGVfaGk6NTsKKwkJdWludDY0X3Qgc2FtcGxlX21vZGU6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTRfMTQ6MTsKKwkJdWludDY0X3QgY2xrX2lkbGU6MTsKKwkJdWludDY0X3QgcHJlYW1ibGU6MTsKKwkJdWludDY0X3Qgc2FtcGxlOjQ7CisJCXVpbnQ2NF90IHBoYXNlOjg7CisJfSBzOworCXN0cnVjdCBjdm14X3NtaXhfY2xrX2NuMzB4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzIxXzYzOjQzOworCQl1aW50NjRfdCBzYW1wbGVfaGk6NTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTRfMTU6MjsKKwkJdWludDY0X3QgY2xrX2lkbGU6MTsKKwkJdWludDY0X3QgcHJlYW1ibGU6MTsKKwkJdWludDY0X3Qgc2FtcGxlOjQ7CisJCXVpbnQ2NF90IHBoYXNlOjg7CisJfSBjbjMweHg7CisJc3RydWN0IGN2bXhfc21peF9jbGtfY24zMHh4IGNuMzF4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjMweHggY24zOHh4OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX2NuMzB4eCBjbjM4eHhwMjsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjUweHggeworCQl1aW50NjRfdCByZXNlcnZlZF8yNV82MzozOTsKKwkJdWludDY0X3QgbW9kZToxOworCQl1aW50NjRfdCByZXNlcnZlZF8yMV8yMzozOworCQl1aW50NjRfdCBzYW1wbGVfaGk6NTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTRfMTU6MjsKKwkJdWludDY0X3QgY2xrX2lkbGU6MTsKKwkJdWludDY0X3QgcHJlYW1ibGU6MTsKKwkJdWludDY0X3Qgc2FtcGxlOjQ7CisJCXVpbnQ2NF90IHBoYXNlOjg7CisJfSBjbjUweHg7CisJc3RydWN0IGN2bXhfc21peF9jbGtfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfc21peF9jbGtfY241MHh4IGNuNTJ4eHAxOworCXN0cnVjdCBjdm14X3NtaXhfY2xrX3MgY241Nnh4OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX2NuNTB4eCBjbjU2eHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2Nsa19jbjMweHggY241OHh4OworCXN0cnVjdCBjdm14X3NtaXhfY2xrX2NuMzB4eCBjbjU4eHhwMTsKK307CisKK3VuaW9uIGN2bXhfc21peF9jbWQgeworCXVpbnQ2NF90IHU2NDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMThfNjM6NDY7CisJCXVpbnQ2NF90IHBoeV9vcDoyOworCQl1aW50NjRfdCByZXNlcnZlZF8xM18xNTozOworCQl1aW50NjRfdCBwaHlfYWRyOjU7CisJCXVpbnQ2NF90IHJlc2VydmVkXzVfNzozOworCQl1aW50NjRfdCByZWdfYWRyOjU7CisJfSBzOworCXN0cnVjdCBjdm14X3NtaXhfY21kX2NuMzB4eCB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE3XzYzOjQ3OworCQl1aW50NjRfdCBwaHlfb3A6MTsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMTNfMTU6MzsKKwkJdWludDY0X3QgcGh5X2Fkcjo1OworCQl1aW50NjRfdCByZXNlcnZlZF81Xzc6MzsKKwkJdWludDY0X3QgcmVnX2Fkcjo1OworCX0gY24zMHh4OworCXN0cnVjdCBjdm14X3NtaXhfY21kX2NuMzB4eCBjbjMxeHg7CisJc3RydWN0IGN2bXhfc21peF9jbWRfY24zMHh4IGNuMzh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9jbjMweHggY24zOHh4cDI7CisJc3RydWN0IGN2bXhfc21peF9jbWRfcyBjbjUweHg7CisJc3RydWN0IGN2bXhfc21peF9jbWRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfc21peF9jbWRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2NtZF9zIGNuNTZ4eHAxOworCXN0cnVjdCBjdm14X3NtaXhfY21kX2NuMzB4eCBjbjU4eHg7CisJc3RydWN0IGN2bXhfc21peF9jbWRfY24zMHh4IGNuNTh4eHAxOworfTsKKwordW5pb24gY3ZteF9zbWl4X2VuIHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIHsKKwkJdWludDY0X3QgcmVzZXJ2ZWRfMV82Mzo2MzsKKwkJdWludDY0X3QgZW46MTsKKwl9IHM7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuMzB4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2VuX3MgY24zMXh4OworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjM4eHg7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuMzh4eHAyOworCXN0cnVjdCBjdm14X3NtaXhfZW5fcyBjbjUweHg7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuNTJ4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2VuX3MgY241Mnh4cDE7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2VuX3MgY241Nnh4cDE7CisJc3RydWN0IGN2bXhfc21peF9lbl9zIGNuNTh4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X2VuX3MgY241OHh4cDE7Cit9OworCit1bmlvbiBjdm14X3NtaXhfcmRfZGF0IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfc21peF9yZF9kYXRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE4XzYzOjQ2OworCQl1aW50NjRfdCBwZW5kaW5nOjE7CisJCXVpbnQ2NF90IHZhbDoxOworCQl1aW50NjRfdCBkYXQ6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY24zMHh4OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY24zMXh4OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY24zOHh4OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY24zOHh4cDI7CisJc3RydWN0IGN2bXhfc21peF9yZF9kYXRfcyBjbjUweHg7CisJc3RydWN0IGN2bXhfc21peF9yZF9kYXRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfc21peF9yZF9kYXRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3JkX2RhdF9zIGNuNTZ4eHAxOworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY241OHh4OworCXN0cnVjdCBjdm14X3NtaXhfcmRfZGF0X3MgY241OHh4cDE7Cit9OworCit1bmlvbiBjdm14X3NtaXhfd3JfZGF0IHsKKwl1aW50NjRfdCB1NjQ7CisJc3RydWN0IGN2bXhfc21peF93cl9kYXRfcyB7CisJCXVpbnQ2NF90IHJlc2VydmVkXzE4XzYzOjQ2OworCQl1aW50NjRfdCBwZW5kaW5nOjE7CisJCXVpbnQ2NF90IHZhbDoxOworCQl1aW50NjRfdCBkYXQ6MTY7CisJfSBzOworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY24zMHh4OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY24zMXh4OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY24zOHh4OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY24zOHh4cDI7CisJc3RydWN0IGN2bXhfc21peF93cl9kYXRfcyBjbjUweHg7CisJc3RydWN0IGN2bXhfc21peF93cl9kYXRfcyBjbjUyeHg7CisJc3RydWN0IGN2bXhfc21peF93cl9kYXRfcyBjbjUyeHhwMTsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuNTZ4eDsKKwlzdHJ1Y3QgY3ZteF9zbWl4X3dyX2RhdF9zIGNuNTZ4eHAxOworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY241OHh4OworCXN0cnVjdCBjdm14X3NtaXhfd3JfZGF0X3MgY241OHh4cDE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCmluZGV4IGNhYzliMWEuLjRkMGE4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaApAQCAtNDcsNiArNDcsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb2N0ZW9uX2NyeXB0b19lbmFibGUoc3RydWN0IG9jdGVvbl9jb3AyX3N0YXRlICpzdGF0ZSk7CiBleHRlcm4gdm9pZCBvY3Rlb25fY3J5cHRvX2Rpc2FibGUoc3RydWN0IG9jdGVvbl9jb3AyX3N0YXRlICpzdGF0ZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBvY3Rlb25fY29wMl9yZXN0b3JlKHN0cnVjdCBvY3Rlb25fY29wMl9zdGF0ZSAqdGFzayk7CiAKIGV4dGVybiB2b2lkIG9jdGVvbl9pbml0X2N2bWNvdW50KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBkNmViNjEzLi4xODU0MzM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTM5MCw2ICszOTAsMTkgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKIC8qCisgKiB1bmNhY2hlZCBhY2NlbGVyYXRlZCBUTEIgbWFwIGZvciB2aWRlbyBtZW1vcnkgYWNjZXNzCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX1VOQ0FDSEVEX0FDQ0VMRVJBVEVECisjZGVmaW5lIF9fSEFWRV9QSFlTX01FTV9BQ0NFU1NfUFJPVAorCitzdHJ1Y3QgZmlsZTsKK3BncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbiwKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCk7CitpbnQgcGh5c19tZW1fYWNjZXNzX3Byb3RfYWxsb3dlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgKnZtYV9wcm90KTsKKyNlbmRpZgorCisvKgogICogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZCBhcmVhIHRvIGNvcGUgd2l0aCB0aGUgdmlydHVhbCBhbGlhc2luZwogICogY29uc3RyYWludHMgcGxhY2VkIG9uIHVzIGJ5IHRoZSBjYWNoZSBhcmNoaXRlY3R1cmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCmluZGV4IGJmY2U1YzcuLjYzNzQxY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaApAQCAtODUsOCArODUsNyBAQAogZXh0ZXJuIFBDSEFSIEFyY0dldEVudmlyb25tZW50VmFyaWFibGUoUENIQVIgbmFtZSk7CiBleHRlcm4gTE9ORyBBcmNTZXRFbnZpcm9ubWVudFZhcmlhYmxlKFBDSEFSIG5hbWUsIFBDSEFSIHZhbHVlKTsKIAotLyogQVJDUyBjb21tYW5kIGxpbmUgYWNxdWlzaXRpb24gYW5kIHBhcnNpbmcuICovCi1leHRlcm4gY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpOworLyogQVJDUyBjb21tYW5kIGxpbmUgcGFyc2luZy4gKi8KIGV4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOwogCiAvKiBBY3F1aXJpbmcgaW5mbyBhYm91dCB0aGUgY3VycmVudCB0aW1lLCBldGMuICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N0YWNrZnJhbWUuaAppbmRleCBkYjBmYTdiLi4zYjZkYTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmgKQEAgLTUxLDkgKzUxLDYgQEAKIAkJTE9OR19TCXYxLCBQVF9BQ1goc3ApCiAjZWxzZQogCQltZmhpCXYxCi0JCUxPTkdfUwl2MSwgUFRfSEkoc3ApCi0JCW1mbG8JdjEKLQkJTE9OR19TCXYxLCBQVF9MTyhzcCkKICNlbmRpZgogI2lmZGVmIENPTkZJR18zMkJJVAogCQlMT05HX1MJJDgsIFBUX1I4KHNwKQpAQCAtNjIsMTAgKzU5LDE3IEBACiAJCUxPTkdfUwkkMTAsIFBUX1IxMChzcCkKIAkJTE9OR19TCSQxMSwgUFRfUjExKHNwKQogCQlMT05HX1MJJDEyLCBQVF9SMTIoc3ApCisjaWZuZGVmIENPTkZJR19DUFVfSEFTX1NNQVJUTUlQUworCQlMT05HX1MJdjEsIFBUX0hJKHNwKQorCQltZmxvCXYxCisjZW5kaWYKIAkJTE9OR19TCSQxMywgUFRfUjEzKHNwKQogCQlMT05HX1MJJDE0LCBQVF9SMTQoc3ApCiAJCUxPTkdfUwkkMTUsIFBUX1IxNShzcCkKIAkJTE9OR19TCSQyNCwgUFRfUjI0KHNwKQorI2lmbmRlZiBDT05GSUdfQ1BVX0hBU19TTUFSVE1JUFMKKwkJTE9OR19TCXYxLCBQVF9MTyhzcCkKKyNlbmRpZgogCQkuZW5kbQogCiAJCS5tYWNybwlTQVZFX1NUQVRJQwpAQCAtODMsMTUgKzg3LDE5IEBACiAjaWZkZWYgQ09ORklHX1NNUAogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKICNkZWZpbmUgUFRFQkFTRV9TSElGVAkxOQkvKiBUQ0JJTkQgKi8KKyNkZWZpbmUgQ1BVX0lEX1JFRyBDUDBfVENCSU5ECisjZGVmaW5lIENQVV9JRF9NRkMwIG1mYzAKKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQpCisjZGVmaW5lIFBURUJBU0VfU0hJRlQJNDgJLyogWENPTlRFWFQgKi8KKyNkZWZpbmUgQ1BVX0lEX1JFRyBDUDBfWENPTlRFWFQKKyNkZWZpbmUgQ1BVX0lEX01GQzAgTUZDMAogI2Vsc2UKICNkZWZpbmUgUFRFQkFTRV9TSElGVAkyMwkvKiBDT05URVhUICovCisjZGVmaW5lIENQVV9JRF9SRUcgQ1AwX0NPTlRFWFQKKyNkZWZpbmUgQ1BVX0lEX01GQzAgTUZDMAogI2VuZGlmCiAJCS5tYWNybwlnZXRfc2F2ZWRfc3AJLyogU01QIHZhcmlhdGlvbiAqLwotI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQkJbWZjMAlrMCwgQ1AwX1RDQklORAotI2Vsc2UKLQkJTUZDMAlrMCwgQ1AwX0NPTlRFWFQKLSNlbmRpZgorCQlDUFVfSURfTUZDMAlrMCwgQ1BVX0lEX1JFRwogI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKSB8fCBkZWZpbmVkKEtCVUlMRF82NEJJVF9TWU0zMikKIAkJbHVpCWsxLCAlaGkoa2VybmVsc3ApCiAjZWxzZQpAQCAtMTA3LDExICsxMTUsNyBAQAogCQkuZW5kbQogCiAJCS5tYWNybwlzZXRfc2F2ZWRfc3Agc3RhY2twIHRlbXAgdGVtcDIKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JCW1mYzAJXHRlbXAsIENQMF9UQ0JJTkQKLSNlbHNlCi0JCU1GQzAJXHRlbXAsIENQMF9DT05URVhUCi0jZW5kaWYKKwkJQ1BVX0lEX01GQzAJXHRlbXAsIENQVV9JRF9SRUcKIAkJTE9OR19TUkwJXHRlbXAsIFBURUJBU0VfU0hJRlQKIAkJTE9OR19TCVxzdGFja3AsIGtlcm5lbHNwKFx0ZW1wKQogCQkuZW5kbQpAQCAtMTY2LDcgKzE3MCw2IEBACiAJCUxPTkdfUwkkMCwgUFRfUjAoc3ApCiAJCW1mYzAJdjEsIENQMF9TVEFUVVMKIAkJTE9OR19TCSQyLCBQVF9SMihzcCkKLQkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogCQkvKgogCQkgKiBJZGVhbGx5LCB0aGVzZSBpbnN0cnVjdGlvbnMgd291bGQgYmUgc2h1ZmZsZWQgaW4KQEAgLTE3OCwyMCArMTgxLDIxIEBACiAJCUxPTkdfUwl2MSwgUFRfVENTVEFUVVMoc3ApCiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCQlMT05HX1MJJDQsIFBUX1I0KHNwKQotCQltZmMwCXYxLCBDUDBfQ0FVU0UKIAkJTE9OR19TCSQ1LCBQVF9SNShzcCkKLQkJTE9OR19TCXYxLCBQVF9DQVVTRShzcCkKKwkJTE9OR19TCXYxLCBQVF9TVEFUVVMoc3ApCisJCW1mYzAJdjEsIENQMF9DQVVTRQogCQlMT05HX1MJJDYsIFBUX1I2KHNwKQotCQlNRkMwCXYxLCBDUDBfRVBDCiAJCUxPTkdfUwkkNywgUFRfUjcoc3ApCisJCUxPTkdfUwl2MSwgUFRfQ0FVU0Uoc3ApCisJCU1GQzAJdjEsIENQMF9FUEMKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJTE9OR19TCSQ4LCBQVF9SOChzcCkKIAkJTE9OR19TCSQ5LCBQVF9SOShzcCkKICNlbmRpZgotCQlMT05HX1MJdjEsIFBUX0VQQyhzcCkKIAkJTE9OR19TCSQyNSwgUFRfUjI1KHNwKQogCQlMT05HX1MJJDI4LCBQVF9SMjgoc3ApCiAJCUxPTkdfUwkkMzEsIFBUX1IzMShzcCkKKwkJTE9OR19TCXYxLCBQVF9FUEMoc3ApCiAJCW9yaQkkMjgsIHNwLCBfVEhSRUFEX01BU0sKIAkJeG9yaQkkMjgsIF9USFJFQURfTUFTSwogI2lmZGVmIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZWVjZDJhOS4uOTMyNmFmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC0yLDE0ICsyLDE3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvTUlQUyBrZXJuZWwuCiAjCiAKLUNQUEZMQUdTX3ZtbGludXgubGRzIDo9ICQoS0JVSUxEX0NGTEFHUykKLQogZXh0cmEteQkJOj0gaGVhZC5vIGluaXRfdGFzay5vIHZtbGludXgubGRzCiAKIG9iai15CQkrPSBjcHUtcHJvYmUubyBicmFuY2gubyBlbnRyeS5vIGdlbmV4Lm8gaXJxLm8gcHJvY2Vzcy5vIFwKIAkJICAgcHRyYWNlLm8gcmVzZXQubyBzZXR1cC5vIHNpZ25hbC5vIHN5c2NhbGwubyBcCiAJCSAgIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gd2F0Y2gubwogCitpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCitDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2Vhcmx5X3ByaW50ay5vID0gLXBnCitlbmRpZgorCiBvYmotJChDT05GSUdfQ0VWVF9CQ00xNDgwKQkrPSBjZXZ0LWJjbTE0ODAubwogb2JqLSQoQ09ORklHX0NFVlRfUjRLX0xJQikJKz0gY2V2dC1yNGsubwogb2JqLSQoQ09ORklHX01JUFNfTVRfU01UQykJKz0gY2V2dC1zbXRjLm8KQEAgLTE5LDYgKzIyLDcgQEAKIG9iai0kKENPTkZJR19DRVZUX1RYWDkpCQkrPSBjZXZ0LXR4eDkubwogb2JqLSQoQ09ORklHX0NTUkNfQkNNMTQ4MCkJKz0gY3NyYy1iY20xNDgwLm8KIG9iai0kKENPTkZJR19DU1JDX0lPQVNJQykJKz0gY3NyYy1pb2FzaWMubworb2JqLSQoQ09ORklHX0NTUkNfUE9XRVJUVikJKz0gY3NyYy1wb3dlcnR2Lm8KIG9iai0kKENPTkZJR19DU1JDX1I0S19MSUIpCSs9IGNzcmMtcjRrLm8KIG9iai0kKENPTkZJR19DU1JDX1NCMTI1MCkJKz0gY3NyYy1zYjEyNTAubwogb2JqLSQoQ09ORklHX1NZTkNfUjRLKQkJKz0gc3luYy1yNGsubwpAQCAtMjYsNiArMzAsOCBAQAogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtaXBzX2tzeW1zLm8gbW9kdWxlLm8KIAorb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikJKz0gbWNvdW50Lm8gZnRyYWNlLm8KKwogb2JqLSQoQ09ORklHX0NQVV9MT09OR1NPTjIpCSs9IHI0a19mcHUubyByNGtfc3dpdGNoLm8KIG9iai0kKENPTkZJR19DUFVfTUlQUzMyKQkrPSByNGtfZnB1Lm8gcjRrX3N3aXRjaC5vCiBvYmotJChDT05GSUdfQ1BVX01JUFM2NCkJKz0gcjRrX2ZwdS5vIHI0a19zd2l0Y2gubwpAQCAtOTIsNCArOTgsOCBAQAogCiBvYmotJChDT05GSUdfSEFWRV9TVERfUENfU0VSSUFMX1BPUlQpCSs9IDgyNTAtcGxhdGZvcm0ubwogCitvYmotJChDT05GSUdfTUlQU19DUFVGUkVRKQkrPSBjcHVmcmVxLworCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgorCitDUFBGTEFHU192bWxpbnV4LmxkcwkJOj0gJChLQlVJTERfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggN2E1MTg2Ni4uODBlMjAyZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYnVncy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KQEAgLTMyLDYgKzMzLDcgQEAKICAqIHRoZSBDUFUgdmVyeSBtdWNoLgogICovCiB2b2lkICgqY3B1X3dhaXQpKHZvaWQpOworRVhQT1JUX1NZTUJPTChjcHVfd2FpdCk7CiAKIHN0YXRpYyB2b2lkIHIzMDgxX3dhaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnIGIvYXJjaC9taXBzL2tlcm5lbC9jcHVmcmVxL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjNjAxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnCkBAIC0wLDAgKzEsNDEgQEAKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisKK2NvbmZpZyBNSVBTX0VYVEVSTkFMX1RJTUVSCisJYm9vbAorCitjb25maWcgTUlQU19DUFVGUkVRCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQ1BVX1NVUFBPUlRTX0NQVUZSRVEgJiYgTUlQU19FWFRFUk5BTF9USU1FUgorCitpZiBNSVBTX0NQVUZSRVEKKworbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgorCitzb3VyY2UgImRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIgorCitpZiBDUFVfRlJFUQorCitjb21tZW50ICJDUFVGcmVxIHByb2Nlc3NvciBkcml2ZXJzIgorCitjb25maWcgTE9PTkdTT04yX0NQVUZSRVEKKwl0cmlzdGF0ZSAiTG9vbmdzb24yIENQVUZyZXEgRHJpdmVyIgorCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQorCWRlcGVuZHMgb24gTUlQU19DUFVGUkVRCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIENQVUZyZXEgZHJpdmVyIGZvciBsb29uZ3NvbiBwcm9jZXNzb3JzIHdoaWNoCisJICBzdXBwb3J0IHNvZnR3YXJlIGNvbmZpZ3VyYWJsZSBjcHUgZnJlcXVlbmN5LgorCisJICBMb29uZ3NvbjJGIGFuZCBpdCdzIHN1Y2Nlc3NvcnMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisKKwkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxLz4uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKworZW5kaWYJIyBDUFVfRlJFUQorCitlbmRtZW51CisKK2VuZGlmCSMgTUlQU19DUFVGUkVRCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdWZyZXEvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL2NwdWZyZXEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0NzlhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2NwdWZyZXEvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvTUlQUyBjcHVmcmVxLgorIworCitvYmotJChDT05GSUdfTE9PTkdTT04yX0NQVUZSRVEpICs9IGxvb25nc29uMl9jcHVmcmVxLm8gbG9vbmdzb24yX2Nsb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY2xvY2suYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2NhMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHVmcmVxL2xvb25nc29uMl9jbG9jay5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIEF1dGhvcjogWWFuaHVhLCB5YW5oQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCitzdGF0aWMgTElTVF9IRUFEKGNsb2NrX2xpc3QpOworc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja19sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tfbGlzdF9zZW0pOworCisvKiBNaW5pbXVtIENMSyBzdXBwb3J0ICovCitlbnVtIHsKKwlEQ19aRVJPLCBEQ18yNVBUID0gMiwgRENfMzdQVCwgRENfNTBQVCwgRENfNjJQVCwgRENfNzVQVCwKKwlEQ184N1BULCBEQ19ESVNBQkxFLCBEQ19SRVNWCit9OworCitzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgbG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW10gPSB7CisJe0RDX1JFU1YsIENQVUZSRVFfRU5UUllfSU5WQUxJRH0sCisJe0RDX1pFUk8sIENQVUZSRVFfRU5UUllfSU5WQUxJRH0sCisJe0RDXzI1UFQsIDB9LAorCXtEQ18zN1BULCAwfSwKKwl7RENfNTBQVCwgMH0sCisJe0RDXzYyUFQsIDB9LAorCXtEQ183NVBULCAwfSwKKwl7RENfODdQVCwgMH0sCisJe0RDX0RJU0FCTEUsIDB9LAorCXtEQ19SRVNWLCBDUFVGUkVRX1RBQkxFX0VORH0sCit9OworRVhQT1JUX1NZTUJPTF9HUEwobG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKKwkubmFtZSA9ICJjcHVfY2xrIiwKKwkuZmxhZ3MgPSBDTEtfQUxXQVlTX0VOQUJMRUQgfCBDTEtfUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlID0gODAwMDAwMDAwLAorfTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXJldHVybiAmY3B1X2NsazsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3N0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAobGlrZWx5KGNsa3AtPnBhcmVudCAhPSBjbGspKQorCQkJY29udGludWU7CisJCWlmIChsaWtlbHkoY2xrcC0+b3BzICYmIGNsa3AtPm9wcy0+cmVjYWxjKSkKKwkJCWNsa3AtPm9wcy0+cmVjYWxjKGNsa3ApOworCQlpZiAodW5saWtlbHkoY2xrcC0+ZmxhZ3MgJiBDTEtfUkFURV9QUk9QQUdBVEVTKSkKKwkJCXByb3BhZ2F0ZV9yYXRlKGNsa3ApOworCX0KK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAodW5zaWduZWQgbG9uZyljbGstPnJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGtfc2V0X3JhdGVfZXgoY2xrLCByYXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19zZXRfcmF0ZSk7CisKK2ludCBjbGtfc2V0X3JhdGVfZXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUsIGludCBhbGdvX2lkKQoreworCWludCByZXQgPSAwOworCWludCByZWd2YWw7CisJaW50IGk7CisKKwlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcmF0ZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPm9wcy0+c2V0X3JhdGUoY2xrLCByYXRlLCBhbGdvX2lkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ0xLX1JBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlmb3IgKGkgPSAwOyBsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOworCSAgICAgaSsrKSB7CisJCWlmIChsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID09CisJCSAgICBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCisJCQljb250aW51ZTsKKwkJaWYgKHJhdGUgPT0gbG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSkKKwkJCWJyZWFrOworCX0KKwlpZiAocmF0ZSAhPSBsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5KQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJlZ3ZhbCA9IExPT05HU09OX0NISVBDRkcwOworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+MHg3KSB8IChsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbaV0uaW5kZXggLSAxKTsKKwlMT09OR1NPTl9DSElQQ0ZHMCA9IHJlZ3ZhbDsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjbGtfc2V0X3JhdGVfZXgpOworCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmIChsaWtlbHkoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPnJvdW5kX3JhdGUpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJvdW5kZWQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJcm91bmRlZCA9IGNsay0+b3BzLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKworCQlyZXR1cm4gcm91bmRlZDsKKwl9CisKKwlyZXR1cm4gcmF0ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNsa19yb3VuZF9yYXRlKTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHNpbXBsZSB2ZXJzaW9uIG9mIExvb25nc29uLTIgd2FpdCwgTWF5YmUgd2UgbmVlZCBkbyB0aGlzIGluCisgKiBpbnRlcnJ1cHQgZGlzYWJsZWQgY29udGVudAorICovCisKK0RFRklORV9TUElOTE9DSyhsb29uZ3NvbjJfd2FpdF9sb2NrKTsKK3ZvaWQgbG9vbmdzb24yX2NwdV93YWl0KHZvaWQpCit7CisJdTMyIGNwdV9mcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9vbmdzb24yX3dhaXRfbG9jaywgZmxhZ3MpOworCWNwdV9mcmVxID0gTE9PTkdTT05fQ0hJUENGRzA7CisJTE9PTkdTT05fQ0hJUENGRzAgJj0gfjB4NzsJLyogUHV0IENQVSBpbnRvIHdhaXQgbW9kZSAqLworCUxPT05HU09OX0NISVBDRkcwID0gY3B1X2ZyZXE7CS8qIFJlc3RvcmUgQ1BVIHN0YXRlICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9vbmdzb24yX3dhaXRfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9vbmdzb24yX2NwdV93YWl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY3B1ZnJlcS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHVmcmVxL2xvb25nc29uMl9jcHVmcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2YTBiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1ZnJlcS9sb29uZ3NvbjJfY3B1ZnJlcS5jCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ3B1ZnJlcSBkcml2ZXIgZm9yIHRoZSBsb29uZ3Nvbi0yIHByb2Nlc3NvcnMKKyAqCisgKiBUaGUgMkUgcmV2aXNpb24gb2YgbG9vbmdzb24gcHJvY2Vzc29yIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA4IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQXV0aG9yOiBZYW5odWEsIHlhbmhAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIHNldF9jcHVzX2FsbG93ZWQoKSAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKK3N0YXRpYyB1aW50IG5vd2FpdDsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNwdWNsazsKKworc3RhdGljIHZvaWQgKCpzYXZlZF9jcHVfd2FpdCkgKHZvaWQpOworCitzdGF0aWMgaW50IGxvb25nc29uMl9jcHVfZnJlcV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbG9vbmdzb24yX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBsb29uZ3NvbjJfY3B1X2ZyZXFfbm90aWZpZXIKK307CisKK3N0YXRpYyBpbnQgbG9vbmdzb24yX2NwdV9mcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCWlmICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFKQorCQljdXJyZW50X2NwdV9kYXRhLnVkZWxheV92YWwgPSBsb29wc19wZXJfamlmZnk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsb29uZ3NvbjJfY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNwdWNsayk7Cit9CisKKy8qCisgKiBIZXJlIHdlIG5vdGlmeSBvdGhlciBkcml2ZXJzIG9mIHRoZSBwcm9wb3NlZCBjaGFuZ2UgYW5kIHRoZSBmaW5hbCBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgbG9vbmdzb24yX2NwdWZyZXFfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKKwl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOworCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CisJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKworCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQKKwkgICAgKHBvbGljeSwgJmxvb25nc29uMl9jbG9ja21vZF90YWJsZVswXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLAorCSAgICAgJm5ld3N0YXRlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmcmVxID0KKwkgICAgKChjcHVfY2xvY2tfZnJlcSAvIDEwMDApICoKKwkgICAgIGxvb25nc29uMl9jbG9ja21vZF90YWJsZVtuZXdzdGF0ZV0uaW5kZXgpIC8gODsKKwlpZiAoZnJlcSA8IHBvbGljeS0+bWluIHx8IGZyZXEgPiBwb2xpY3ktPm1heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiY3B1ZnJlcTogcmVxdWVzdGVkIGZyZXF1ZW5jeSAldSBIelxuIiwgdGFyZ2V0X2ZyZXEgKiAxMDAwKTsKKworCWZyZXFzLmNwdSA9IGNwdTsKKwlmcmVxcy5vbGQgPSBsb29uZ3NvbjJfY3B1ZnJlcV9nZXQoY3B1KTsKKwlmcmVxcy5uZXcgPSBmcmVxOworCWZyZXFzLmZsYWdzID0gMDsKKworCWlmIChmcmVxcy5uZXcgPT0gZnJlcXMub2xkKQorCQlyZXR1cm4gMDsKKworCS8qIG5vdGlmaWVycyAqLworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisKKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdXNfYWxsb3dlZCk7CisKKwkvKiBzZXR0aW5nIHRoZSBjcHUgZnJlcXVlbmN5ICovCisJY2xrX3NldF9yYXRlKGNwdWNsaywgZnJlcSk7CisKKwkvKiBub3RpZmllcnMgKi8KKwljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKworCXByX2RlYnVnKCJjcHVmcmVxOiBzZXQgZnJlcXVlbmN5ICV1IGtIelxuIiwgZnJlcSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb29uZ3NvbjJfY3B1ZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpbnQgaTsKKworCWlmICghY3B1X29ubGluZShwb2xpY3ktPmNwdSkpCisJCXJldHVybiAtRU5PREVWOworCisJY3B1Y2xrID0gY2xrX2dldChOVUxMLCAiY3B1X2NsayIpOworCWlmIChJU19FUlIoY3B1Y2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNvdWxkbid0IGdldCBDUFUgY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3B1Y2xrKTsKKwl9CisKKwljcHVjbGstPnJhdGUgPSBjcHVfY2xvY2tfZnJlcSAvIDEwMDA7CisJaWYgKCFjcHVjbGstPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2xvY2sgdGFibGUgaW5pdCAqLworCWZvciAoaSA9IDI7CisJICAgICAobG9vbmdzb24yX2Nsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7CisJICAgICBpKyspCisJCWxvb25nc29uMl9jbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSAoY3B1Y2xrLT5yYXRlICogaSkgLyA4OworCisJcG9saWN5LT5jdXIgPSBsb29uZ3NvbjJfY3B1ZnJlcV9nZXQocG9saWN5LT5jcHUpOworCisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoJmxvb25nc29uMl9jbG9ja21vZF90YWJsZVswXSwKKwkJCQkJIHBvbGljeS0+Y3B1KTsKKworCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwKKwkJCQkJICAgICZsb29uZ3NvbjJfY2xvY2ttb2RfdGFibGVbMF0pOworfQorCitzdGF0aWMgaW50IGxvb25nc29uMl9jcHVmcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwKKwkJCQkJICAgICAgJmxvb25nc29uMl9jbG9ja21vZF90YWJsZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgbG9vbmdzb24yX2NwdWZyZXFfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljbGtfcHV0KGNwdWNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpsb29uZ3NvbjJfdGFibGVfYXR0cltdID0geworCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBsb29uZ3NvbjJfY3B1ZnJlcV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibG9vbmdzb24yIiwKKwkuaW5pdCA9IGxvb25nc29uMl9jcHVmcmVxX2NwdV9pbml0LAorCS52ZXJpZnkgPSBsb29uZ3NvbjJfY3B1ZnJlcV92ZXJpZnksCisJLnRhcmdldCA9IGxvb25nc29uMl9jcHVmcmVxX3RhcmdldCwKKwkuZ2V0ID0gbG9vbmdzb24yX2NwdWZyZXFfZ2V0LAorCS5leGl0ID0gbG9vbmdzb24yX2NwdWZyZXFfZXhpdCwKKwkuYXR0ciA9IGxvb25nc29uMl90YWJsZV9hdHRyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgcGxhdGZvcm1fZGV2aWNlX2lkc1tdID0geworCXsKKwkJLm5hbWUgPSAibG9vbmdzb24yX2NwdWZyZXEiLAorCX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHBsYXRmb3JtX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibG9vbmdzb24yX2NwdWZyZXEiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5pZF90YWJsZSA9IHBsYXRmb3JtX2RldmljZV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogUmVnaXN0ZXIgcGxhdGZvcm0gc3R1ZmYgKi8KKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByX2luZm8oImNwdWZyZXE6IExvb25nc29uLTJGIENQVSBmcmVxdWVuY3kgZHJpdmVyLlxuIik7CisKKwljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZsb29uZ3NvbjJfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CisKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmbG9vbmdzb24yX2NwdWZyZXFfZHJpdmVyKTsKKworCWlmICghcmV0ICYmICFub3dhaXQpIHsKKwkJc2F2ZWRfY3B1X3dhaXQgPSBjcHVfd2FpdDsKKwkJY3B1X3dhaXQgPSBsb29uZ3NvbjJfY3B1X3dhaXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfZXhpdCh2b2lkKQoreworCWlmICghbm93YWl0ICYmIHNhdmVkX2NwdV93YWl0KQorCQljcHVfd2FpdCA9IHNhdmVkX2NwdV93YWl0OworCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmxvb25nc29uMl9jcHVmcmVxX2RyaXZlcik7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZsb29uZ3NvbjJfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjcHVmcmVxX2luaXQpOworbW9kdWxlX2V4aXQoY3B1ZnJlcV9leGl0KTsKKworbW9kdWxlX3BhcmFtKG5vd2FpdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2FpdCwgIkRpc2FibGUgTG9vbmdzb24tMkYgc3BlY2lmaWMgd2FpdCIpOworCitNT0RVTEVfQVVUSE9SKCJZYW5odWEgPHlhbmhAbGVtb3RlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiY3B1ZnJlcSBkcml2ZXIgZm9yIExvb25nc29uMkYiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1wb3dlcnR2LmMgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyN2MxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNjaWVudGlmaWMtQXRsYW50YSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisvKgorICogVGhlIGZpbGUgY29tZXMgZnJvbSBrZXJuZWwvY3NyYy1yNGsuYworICovCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vdGltZS5oPgkJCS8qIE5vdCBpbmNsdWRlZCBpbiBsaW51eC90aW1lLmggKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisjaW5jbHVkZSAicG93ZXJ0di1jbG9jay5oIgorCisvKiBNSVBTIFBMTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBQTExfR0VUX00oeCkJCSgoKHgpID4+IDgpICYgMHgwMDAwMDBGRikKKyNkZWZpbmUgUExMX0dFVF9OKHgpCQkoKCh4KSA+PiAxNikgJiAweDAwMDAwMEZGKQorI2RlZmluZSBQTExfR0VUX1AoeCkJCSgoKHgpID4+IDI0KSAmIDB4MDAwMDAwMDcpCisKKy8qCisgKiByZXR1cm5zOiAgQ2xvY2sgZnJlcXVlbmN5IGluIGtIegorICovCit1bnNpZ25lZCBpbnQgX19pbml0IG1pcHNfZ2V0X3BsbF9mcmVxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHBsbF9yZWcsIG0sIG4sIHA7CisJdW5zaWduZWQgaW50IGZpbiA9IDU0MDAwOyAvKiBCYXNlIGZyZXF1ZW5jeSBpbiBrSHogKi8KKwl1bnNpZ25lZCBpbnQgZm91dDsKKworCS8qIFJlYWQgUExMIHJlZ2lzdGVyIHNldHRpbmcgKi8KKwlwbGxfcmVnID0gYXNpY19yZWFkKG1pcHNfcGxsX3NldHVwKTsKKwltID0gUExMX0dFVF9NKHBsbF9yZWcpOworCW4gPSBQTExfR0VUX04ocGxsX3JlZyk7CisJcCA9IFBMTF9HRVRfUChwbGxfcmVnKTsKKwlwcl9pbmZvKCJNSVBTIFBMTCBSZWdpc3RlcjoweCV4ICBNPSVkICBOPSVkICBQPSVkXG4iLCBwbGxfcmVnLCBtLCBuLCBwKTsKKworCS8qIENhbGN1bGF0ZSBjbG9jayBmcmVxdWVuY3kgPSAoMiAqIE4gKiA1NE1IeikgLyAoTSAqICgyKipQKSkgKi8KKwlmb3V0ID0gKCgyICogbiAqIGZpbikgLyAobSAqICgweDAxIDw8IHApKSk7CisKKwlwcl9pbmZvKCJNSVBTIENsb2NrIEZyZXE9JWQga0h6XG4iLCBmb3V0KTsKKworCXJldHVybiBmb3V0OworfQorCitzdGF0aWMgY3ljbGVfdCBjMF9ocHRfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiByZWFkX2MwX2NvdW50KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfbWlwcyA9IHsKKwkubmFtZQkJPSAicG93ZXJ0di1jb3VudGVyIiwKKwkucmVhZAkJPSBjMF9ocHRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcG93ZXJ0dl9jMF9ocHRfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBwbGxfZnJlcSA9IG1pcHNfZ2V0X3BsbF9mcmVxKCk7CisKKwlwcl9pbmZvKCJDUFUgZnJlcXVlbmN5ICVkLiUwMmQgTUh6XG4iLCBwbGxfZnJlcSAvIDEwMDAsCisJCShwbGxfZnJlcSAlIDEwMDApICogMTAwIC8gMTAwMCk7CisKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBwbGxfZnJlcSAvIDIgKiAxMDAwOworCisJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAyMDAgKyBtaXBzX2hwdF9mcmVxdWVuY3kgLyAxMDAwMDAwMDsKKworCWNsb2Nrc291cmNlX3NldF9jbG9jaygmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9taXBzKTsKK30KKworLyoqCisgKiBzdHJ1Y3QgdGltX2MgLSBmcmVlIHJ1bm5pbmcgY291bnRlcgorICogQGhpOglIaWdoIDE2IGJpdHMgb2YgdGhlIGNvdW50ZXIKKyAqIEBsbzoJTG93IDMyIGJpdHMgb2YgdGhlIGNvdW50ZXIKKyAqCisgKiBMYXlzIG91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBmcmVlIHJ1bm5pbmcgY291bnRlciBpbiBtZW1vcnkuIFRoaXMgY291bnRlcgorICogaW5jcmVtZW50cyBhdCBhIHJhdGUgb2YgMjcgTUh6Lzggb24gYWxsIHBsYXRmb3Jtcy4KKyAqLworc3RydWN0IHRpbV9jIHsKKwl1bnNpZ25lZCBpbnQgaGk7CisJdW5zaWduZWQgaW50IGxvOworfTsKKworc3RhdGljIHN0cnVjdCB0aW1fYyAqdGltX2M7CisKK3N0YXRpYyBjeWNsZV90IHRpbV9jX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwl1bnNpZ25lZCBpbnQgaGk7CisJdW5zaWduZWQgaW50IG5leHRfaGk7CisJdW5zaWduZWQgaW50IGxvOworCisJaGkgPSByZWFkbCgmdGltX2MtPmhpKTsKKworCWZvciAoOzspIHsKKwkJbG8gPSByZWFkbCgmdGltX2MtPmxvKTsKKwkJbmV4dF9oaSA9IHJlYWRsKCZ0aW1fYy0+aGkpOworCQlpZiAobmV4dF9oaSA9PSBoaSkKKwkJCWJyZWFrOworCQloaSA9IG5leHRfaGk7CisJfQorCitwcl9jcml0KCIlczogcmVhZCAlbGx4XG4iLCBfX2Z1bmNfXywgKCh1NjQpIGhpIDw8IDMyKSB8IGxvKTsKKwlyZXR1cm4gKCh1NjQpIGhpIDw8IDMyKSB8IGxvOworfQorCisjZGVmaW5lIFRJTV9DX1NJWkUJCTQ4CQkvKiAjIGJpdHMgaW4gdGhlIHRpbWVyICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfdGltX2MgPSB7CisJLm5hbWUJCT0gInBvd2VydHYtdGltX2MiLAorCS5yZWFkCQk9IHRpbV9jX3JlYWQsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSyhUSU1fQ19TSVpFKSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCisvKioKKyAqIHBvd2VydHZfdGltX2NfY2xvY2tzb3VyY2VfaW5pdCAtIHNldCB1cCBhIGNsb2NrIHNvdXJjZSBmb3IgdGhlIFRJTV9DIGNsb2NrCisgKgorICogVGhlIGhhcmQgcGFydCBoZXJlIGlzIGNvbWluZyB1cCB3aXRoIGEgY29uc3RhbnQgayBhbmQgc2hpZnQgcyBzdWNoIHRoYXQKKyAqIHRoZSA0OC1iaXQgVElNX0MgdmFsdWUgbXVsdGlwbGllZCBieSBrIGRvZXNuJ3Qgb3ZlcmZsb3cgYW5kIHRoYXQgdmFsdWUsCisgKiB3aGVuIHNoaWZ0ZWQgcmlnaHQgYnkgcywgeWllbGRzIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBuYW5vc2Vjb25kcy4KKyAqIFdlIGtub3cgdGhhdCBUSU1fQyBjb3VudHMgYXQgMjcgTUh6LzgsIHNvIGVhY2ggY3ljbGUgY29ycmVzcG9uZHMgdG8KKyAqIDEgLyAoMjcsMDAwLDAwMC84KSBzZWNvbmRzLiBNdWx0aXBseSB0aGF0IGJ5IGEgYmlsbGlvbiBhbmQgeW91IGdldCB0aGUKKyAqIG51bWJlciBvZiBuYW5vc2Vjb25kcy4gU2luY2UgdGhlIFRJTV9DIHZhbHVlIGhhcyA0OCBiaXRzIGFuZCB0aGUgbWF0aCBpcworICogZG9uZSBpbiA2NCBiaXRzLCBhdm9pZGluZyBhbiBvdmVyZmxvdyBtZWFucyB0aGF0IGsgbXVzdCBiZSBsZXNzIHRoYW4KKyAqIDY0IC0gNDggPSAxNiBiaXRzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcG93ZXJ0dl90aW1fY19jbG9ja3NvdXJjZV9pbml0KHZvaWQpCit7CisJaW50CQkJcHJlc2NhbGU7CisJdW5zaWduZWQgbG9uZwkJZGl2aWRlbmQ7CisJdW5zaWduZWQgbG9uZwkJazsKKwlpbnQJCQlzOworCWNvbnN0IGludAkJbWF4X2tfYml0cyA9ICg2NCAtIDQ4KSAtIDE7CisJY29uc3QgdW5zaWduZWQgbG9uZwliaWxsaW9uID0gMTAwMDAwMDAwMDsKKwljb25zdCB1bnNpZ25lZCBsb25nCWNvdW50c19wZXJfc2Vjb25kID0gMjcwMDAwMDAgLyA4OworCisJcHJlc2NhbGUgPSBCSVRTX1BFUl9MT05HIC0gaWxvZzIoYmlsbGlvbikgLSAxOworCWRpdmlkZW5kID0gYmlsbGlvbiA8PCBwcmVzY2FsZTsKKwlrID0gZGl2aWRlbmQgLyBjb3VudHNfcGVyX3NlY29uZDsKKwlzID0gaWxvZzIoaykgLSBtYXhfa19iaXRzOworCisJaWYgKHMgPCAwKQorCQlzID0gcHJlc2NhbGU7CisKKwllbHNlIHsKKwkJayA+Pj0gczsKKwkJcyArPSBwcmVzY2FsZTsKKwl9CisKKwljbG9ja3NvdXJjZV90aW1fYy5tdWx0ID0gazsKKwljbG9ja3NvdXJjZV90aW1fYy5zaGlmdCA9IHM7CisJY2xvY2tzb3VyY2VfdGltX2MucmF0aW5nID0gMjAwOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3RpbV9jKTsKKwl0aW1fYyA9IChzdHJ1Y3QgdGltX2MgKikgYXNpY19yZWdfYWRkcih0aW1fY2gpOworfQorCisvKioKKyBwb3dlcnR2X2Nsb2Nrc291cmNlX2luaXQgLSBpbml0aWFsaXplIGFsbCBjbG9ja3NvdXJjZXMKKyAqLwordm9pZCBfX2luaXQgcG93ZXJ0dl9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCit7CisJcG93ZXJ0dl9jMF9ocHRfY2xvY2tzb3VyY2VfaW5pdCgpOworCXBvd2VydHZfdGltX2NfY2xvY2tzb3VyY2VfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiMDY3MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb2RlIGZvciByZXBsYWNpbmcgZnRyYWNlIGNhbGxzIHdpdGgganVtcHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiBUaGFua3MgZ29lcyB0byBTdGV2ZW4gUm9zdGVkdCBmb3Igd3JpdGluZyB0aGUgb3JpZ2luYWwgeDg2IHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCisjZGVmaW5lIEpBTCAweDBjMDAwMDAwCQkvKiBqdW1wICYgbGluazogaXAgLS0+IHJhLCBqdW1wIHRvIHRhcmdldCAqLworI2RlZmluZSBBRERSX01BU0sgMHgwM2ZmZmZmZgkvKiAgb3BfY29kZXxhZGRyIDogMzEuLi4yNnwyNSAuLi4uMCAqLworI2RlZmluZSBqdW1wX2luc25fZW5jb2RlKG9wX2NvZGUsIGFkZHIpIFwKKwkoKHVuc2lnbmVkIGludCkoKG9wX2NvZGUpIHwgKCgoYWRkcikgPj4gMikgJiBBRERSX01BU0spKSkKKworc3RhdGljIHVuc2lnbmVkIGludCBmdHJhY2Vfbm9wID0gMHgwMDAwMDAwMDsKKworc3RhdGljIGludCBmdHJhY2VfbW9kaWZ5X2NvZGUodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgaW50IG5ld19jb2RlKQoreworCWludCBmYXVsdGVkOworCisJLyogKih1bnNpZ25lZCBpbnQgKilpcCA9IG5ld19jb2RlOyAqLworCXNhZmVfc3RvcmVfY29kZShuZXdfY29kZSwgaXAsIGZhdWx0ZWQpOworCisJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZsdXNoX2ljYWNoZV9yYW5nZShpcCwgaXAgKyA4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx1aV92MTsKK3N0YXRpYyBpbnQgamFsX21jb3VudDsKKworaW50IGZ0cmFjZV9tYWtlX25vcChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCSAgICBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgaW50IG5ldzsKKwlpbnQgZmF1bHRlZDsKKwl1bnNpZ25lZCBsb25nIGlwID0gcmVjLT5pcDsKKworCS8qIFdlIGhhdmUgY29tcGlsZWQgbW9kdWxlIHdpdGggLW1sb25nLWNhbGxzLCBidXQgY29tcGlsZWQgdGhlIGtlcm5lbAorCSAqIHdpdGhvdXQgaXQsIHdlIG5lZWQgdG8gY29wZSB3aXRoIHRoZW0gcmVzcGVjdGl2ZWx5LiAqLworCWlmIChpcCAmIDB4NDAwMDAwMDApIHsKKwkJLyogcmVjb3JkIGl0IGZvciBmdHJhY2VfbWFrZV9jYWxsICovCisJCWlmIChsdWlfdjEgPT0gMCkgeworCQkJLyogbHVpX3YxID0gKih1bnNpZ25lZCBpbnQgKilpcDsgKi8KKwkJCXNhZmVfbG9hZF9jb2RlKGx1aV92MSwgaXAsIGZhdWx0ZWQpOworCisJCQlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQkvKiBsdWkgdjEsIGhpXzE2Yml0X29mX21jb3VudCAgICAgICAgLS0+IGIgMWYgKDB4MTAwMDAwMDQpCisJCSAqIGFkZGl1IHYxLCB2MSwgbG93XzE2Yml0X29mX21jb3VudAorCQkgKiBtb3ZlIGF0LCByYQorCQkgKiBqYWxyIHYxCisJCSAqIG5vcAorCQkgKiAJCQkJICAgICAxZjogKGlwICsgMTIpCisJCSAqLworCQluZXcgPSAweDEwMDAwMDA0OworCX0gZWxzZSB7CisJCS8qIHJlY29yZC9jYWxjdWxhdGUgaXQgZm9yIGZ0cmFjZV9tYWtlX2NhbGwgKi8KKwkJaWYgKGphbF9tY291bnQgPT0gMCkgeworCQkJLyogV2UgY2FuIHJlY29yZCBpdCBkaXJlY3RseSBsaWtlIHRoaXM6CisJCQkgKiAgICAgamFsX21jb3VudCA9ICoodW5zaWduZWQgaW50ICopaXA7CisJCQkgKiBIZXJlaW4sIGp1bXAgb3ZlciB0aGUgZmlyc3QgdHdvIG5vcCBpbnN0cnVjdGlvbnMgKi8KKwkJCWphbF9tY291bnQgPSBqdW1wX2luc25fZW5jb2RlKEpBTCwgKE1DT1VOVF9BRERSICsgOCkpOworCQl9CisKKwkJLyogbW92ZSBhdCwgcmEKKwkJICogamFsciB2MQkJLS0+IG5vcAorCQkgKi8KKwkJbmV3ID0gZnRyYWNlX25vcDsKKwl9CisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShpcCwgbmV3KTsKK30KKworc3RhdGljIGludCBtb2RpZmllZDsJLyogaW5pdGlhbGl6ZWQgYXMgMCBieSBkZWZhdWx0ICovCisKK2ludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgbmV3OworCXVuc2lnbmVkIGxvbmcgaXAgPSByZWMtPmlwOworCisJLyogV2UganVzdCBuZWVkIHRvIHJlbW92ZSB0aGUgImIgZnRyYWNlX3N0dWIiIGF0IHRoZSBmaXN0IHRpbWUhICovCisJaWYgKG1vZGlmaWVkID09IDApIHsKKwkJbW9kaWZpZWQgPSAxOworCQlmdHJhY2VfbW9kaWZ5X2NvZGUoYWRkciwgZnRyYWNlX25vcCk7CisJfQorCS8qIGlwLCBtb2R1bGU6IDB4YzAwMDAwMDAsIGtlcm5lbDogMHg4MDAwMDAwMCAqLworCW5ldyA9IChpcCAmIDB4NDAwMDAwMDApID8gbHVpX3YxIDogamFsX21jb3VudDsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG5ldyk7Cit9CisKKyNkZWZpbmUgRlRSQUNFX0NBTExfSVAgKCh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGwpKQorCitpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCit7CisJdW5zaWduZWQgaW50IG5ldzsKKworCW5ldyA9IGp1bXBfaW5zbl9lbmNvZGUoSkFMLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoRlRSQUNFX0NBTExfSVAsIG5ldyk7Cit9CisKK2ludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKK3sKKwkvKiBUaGUgcmV0dXJuIGNvZGUgaXMgcmV0dXJlZCB2aWEgZGF0YSAqLworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSAwOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKworZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX2NhbGwodm9pZCk7CisjZGVmaW5lIEpNUAkweDA4MDAwMDAwCS8qIGp1bXAgdG8gdGFyZ2V0IGRpcmVjdGx5ICovCisjZGVmaW5lIENBTExfRlRSQUNFX0dSQVBIX0NBTExFUiBcCisJanVtcF9pbnNuX2VuY29kZShKTVAsICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2dyYXBoX2NhbGxlcikpCisjZGVmaW5lIEZUUkFDRV9HUkFQSF9DQUxMX0lQCSgodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9jYWxsKSkKKworaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoRlRSQUNFX0dSQVBIX0NBTExfSVAsCisJCQkJICBDQUxMX0ZUUkFDRV9HUkFQSF9DQUxMRVIpOworfQorCitpbnQgZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoRlRSQUNFX0dSQVBIX0NBTExfSVAsIGZ0cmFjZV9ub3ApOworfQorCisjZW5kaWYJCQkJLyogIUNPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZuZGVmIEtCVUlMRF9NQ09VTlRfUkFfQUREUkVTUworI2RlZmluZSBTX1JBX1NQCSgweGFmYmYgPDwgMTYpCS8qIHN7ZCx3fSByYSwgb2Zmc2V0KHNwKSAqLworI2RlZmluZSBTX1JfU1AJKDB4YWZiMCA8PCAxNikgIC8qIHN7ZCx3fSBSLCBvZmZzZXQoc3ApICovCisjZGVmaW5lIE9GRlNFVF9NQVNLCTB4ZmZmZgkvKiBzdGFjayBvZmZzZXQgcmFuZ2U6IDAgfiBQVF9TSVpFICovCisKK3Vuc2lnbmVkIGxvbmcgZnRyYWNlX2dldF9wYXJlbnRfYWRkcih1bnNpZ25lZCBsb25nIHNlbGZfYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZnApCit7CisJdW5zaWduZWQgbG9uZyBzcCwgaXAsIHJhOworCXVuc2lnbmVkIGludCBjb2RlOworCWludCBmYXVsdGVkOworCisJLyogaW4gbW9kdWxlIG9yIGtlcm5lbD8gKi8KKwlpZiAoc2VsZl9hZGRyICYgMHg0MDAwMDAwMCkgeworCQkvKiBtb2R1bGU6IG1vdmUgdG8gdGhlIGluc3RydWN0aW9uICJsdWkgdjEsIEhJXzE2QklUX09GX01DT1VOVCIgKi8KKwkJaXAgPSBzZWxmX2FkZHIgLSAyMDsKKwl9IGVsc2UgeworCQkvKiBrZXJuZWw6IG1vdmUgdG8gdGhlIGluc3RydWN0aW9uICJtb3ZlIHJhLCBhdCIgKi8KKwkJaXAgPSBzZWxmX2FkZHIgLSAxMjsKKwl9CisKKwkvKiBzZWFyY2ggdGhlIHRleHQgdW50aWwgZmluZGluZyB0aGUgbm9uLXN0b3JlIGluc3RydWN0aW9uIG9yICJze2Qsd30KKwkgKiByYSwgb2Zmc2V0KHNwKSIgaW5zdHJ1Y3Rpb24gKi8KKwlkbyB7CisJCWlwIC09IDQ7CisKKwkJLyogZ2V0IHRoZSBjb2RlIGF0ICJpcCI6IGNvZGUgPSAqKHVuc2lnbmVkIGludCAqKWlwOyAqLworCQlzYWZlX2xvYWRfY29kZShjb2RlLCBpcCwgZmF1bHRlZCk7CisKKwkJaWYgKHVubGlrZWx5KGZhdWx0ZWQpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgd2UgaGl0IHRoZSBub24tc3RvcmUgaW5zdHJ1Y3Rpb24gYmVmb3JlIGZpbmRpbmcgd2hlcmUgdGhlCisJCSAqIHJhIGlzIHN0b3JlZCwgdGhlbiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiBhbmQgaXQgZG9lcyBub3QKKwkJICogc3RvcmUgdGhlIHJhIG9uIHRoZSBzdGFjay4gKi8KKwkJaWYgKChjb2RlICYgU19SX1NQKSAhPSBTX1JfU1ApCisJCQlyZXR1cm4gcGFyZW50X2FkZHI7CisKKwl9IHdoaWxlICgoKGNvZGUgJiBTX1JBX1NQKSAhPSBTX1JBX1NQKSk7CisKKwlzcCA9IGZwICsgKGNvZGUgJiBPRkZTRVRfTUFTSyk7CisKKwkvKiByYSA9ICoodW5zaWduZWQgbG9uZyAqKXNwOyAqLworCXNhZmVfbG9hZF9zdGFjayhyYSwgc3AsIGZhdWx0ZWQpOworCWlmICh1bmxpa2VseShmYXVsdGVkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmEgPT0gcGFyZW50KQorCQlyZXR1cm4gc3A7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKgorICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRycworICogaW4gY3VycmVudCB0aHJlYWQgaW5mby4KKyAqLwordm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZnApCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CisJdW5zaWduZWQgbG9uZyByZXR1cm5faG9va2VyID0gKHVuc2lnbmVkIGxvbmcpCisJICAgICZyZXR1cm5fdG9faGFuZGxlcjsKKwlpbnQgZmF1bHRlZDsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQorCQlyZXR1cm47CisKKwkvKiAicGFyZW50IiBpcyB0aGUgc3RhY2sgYWRkcmVzcyBzYXZlZCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGNhbGxlcgorCSAqIG9mIF9tY291bnQuCisJICoKKwkgKiBpZiB0aGUgZ2NjIDwgNC41LCBhIGxlYWYgZnVuY3Rpb24gZG9lcyBub3Qgc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MKKwkgKiBpbiB0aGUgc3RhY2sgYWRkcmVzcywgc28sIHdlICJlbXVsYXRlIiBvbmUgaW4gX21jb3VudCdzIHN0YWNrIHNwYWNlLAorCSAqIGFuZCBoaWphY2sgaXQgZGlyZWN0bHksIGJ1dCBmb3IgYSBub24tbGVhZiBmdW5jdGlvbiwgaXQgc2F2ZSB0aGUKKwkgKiByZXR1cm4gYWRkcmVzcyB0byB0aGUgaXRzIG93biBzdGFjayBzcGFjZSwgd2UgY2FuIG5vdCBoaWphY2sgaXQKKwkgKiBkaXJlY3RseSwgYnV0IG5lZWQgdG8gZmluZCB0aGUgcmVhbCBzdGFjayBhZGRyZXNzLAorCSAqIGZ0cmFjZV9nZXRfcGFyZW50X2FkZHIoKSBkb2VzIGl0IQorCSAqCisJICogaWYgZ2NjPj0gNC41LCB3aXRoIHRoZSBuZXcgLW1tY291bnQtcmEtYWRkcmVzcyBvcHRpb24sIGZvciBhCisJICogbm9uLWxlYWYgZnVuY3Rpb24sIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBzYXZlZAorCSAqIHRvICQxMiBmb3IgdXMsIGFuZCBmb3IgYSBsZWFmIGZ1bmN0aW9uLCBvbmx5IHB1dCBhIHplcm8gaW50byAkMTIuIHdlCisJICogZG8gaXQgaW4gZnRyYWNlX2dyYXBoX2NhbGxlciBvZiBtY291bnQuUy4KKwkgKi8KKworCS8qIG9sZCA9ICpwYXJlbnQ7ICovCisJc2FmZV9sb2FkX3N0YWNrKG9sZCwgcGFyZW50LCBmYXVsdGVkKTsKKwlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCWdvdG8gb3V0OworI2lmbmRlZiBLQlVJTERfTUNPVU5UX1JBX0FERFJFU1MKKwlwYXJlbnQgPSAodW5zaWduZWQgbG9uZyAqKWZ0cmFjZV9nZXRfcGFyZW50X2FkZHIoc2VsZl9hZGRyLCBvbGQsCisJCQkJCQkJICh1bnNpZ25lZCBsb25nKXBhcmVudCwKKwkJCQkJCQkgZnApOworCS8qIElmIGZhaWxzIHdoZW4gZ2V0dGluZyB0aGUgc3RhY2sgYWRkcmVzcyBvZiB0aGUgbm9uLWxlYWYgZnVuY3Rpb24ncworCSAqIHJhLCBzdG9wIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBhbmQgcmV0dXJuICovCisJaWYgKHBhcmVudCA9PSAwKQorCQlnb3RvIG91dDsKKyNlbmRpZgorCS8qICpwYXJlbnQgPSByZXR1cm5faG9va2VyOyAqLworCXNhZmVfc3RvcmVfc3RhY2socmV0dXJuX2hvb2tlciwgcGFyZW50LCBmYXVsdGVkKTsKKwlpZiAodW5saWtlbHkoZmF1bHRlZCkpCisJCWdvdG8gb3V0OworCisJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShvbGQsIHNlbGZfYWRkciwgJnRyYWNlLmRlcHRoLCBmcCkgPT0KKwkgICAgLUVCVVNZKSB7CisJCSpwYXJlbnQgPSBvbGQ7CisJCXJldHVybjsKKwl9CisKKwl0cmFjZS5mdW5jID0gc2VsZl9hZGRyOworCisJLyogT25seSB0cmFjZSBpZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBleHBlY3RzIHRvICovCisJaWYgKCFmdHJhY2VfZ3JhcGhfZW50cnkoJnRyYWNlKSkgeworCQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOworCQkqcGFyZW50ID0gb2xkOworCX0KKwlyZXR1cm47CitvdXQ6CisJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwlXQVJOX09OKDEpOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDhiMGI0MTguLjk4MWY4NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMTUwLDMgKzE1MSwzMiBAQAogCQlrZ2RiX2Vhcmx5X3NldHVwID0gMTsKICNlbmRpZgogfQorCisvKgorICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCisgKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKKyAqIGhhbmRsZXJzKS4KKyAqLwordm9pZCBfX2lycV9lbnRyeSBkb19JUlEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfZW50ZXIoKTsKKwlfX0RPX0lSUV9TTVRDX0hPT0soaXJxKTsKKwlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwlpcnFfZXhpdCgpOworfQorCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQ19JUlFBRkYKKy8qCisgKiBUbyBhdm9pZCBpbmVmZmljaWVudCBhbmQgaW4gc29tZSBjYXNlcyBwYXRob2xvZ2ljYWwgcmUtY2hlY2tpbmcgb2YKKyAqIElSUSBhZmZpbml0eSwgd2UgaGF2ZSB0aGlzIHZhcmlhbnQgdGhhdCBza2lwcyB0aGUgYWZmaW5pdHkgY2hlY2suCisgKi8KKwordm9pZCBfX2lycV9lbnRyeSBkb19JUlFfbm9fYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfZW50ZXIoKTsKKwlfX05PX0FGRklOSVRZX0lSUV9TTVRDX0hPT0soaXJxKTsKKwlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwlpcnFfZXhpdCgpOworfQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQ19JUlFBRkYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWNmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogTUlQUyBzcGVjaWZpYyBfbWNvdW50IHN1cHBvcnQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICovCisKKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KKyNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CisKKwkudGV4dAorCS5zZXQgbm9yZW9yZGVyCisJLnNldCBub2F0CisKKwkubWFjcm8gTUNPVU5UX1NBVkVfUkVHUworCVBUUl9TVUJVCXNwLCBQVF9TSVpFCisJUFRSX1MJcmEsIFBUX1IzMShzcCkKKwlQVFJfUwlBVCwgUFRfUjEoc3ApCisJUFRSX1MJYTAsIFBUX1I0KHNwKQorCVBUUl9TCWExLCBQVF9SNShzcCkKKwlQVFJfUwlhMiwgUFRfUjYoc3ApCisJUFRSX1MJYTMsIFBUX1I3KHNwKQorI2lmZGVmIENPTkZJR182NEJJVAorCVBUUl9TCWE0LCBQVF9SOChzcCkKKwlQVFJfUwlhNSwgUFRfUjkoc3ApCisJUFRSX1MJYTYsIFBUX1IxMChzcCkKKwlQVFJfUwlhNywgUFRfUjExKHNwKQorI2VuZGlmCisJLmVuZG0KKworCS5tYWNybyBNQ09VTlRfUkVTVE9SRV9SRUdTCisJUFRSX0wJcmEsIFBUX1IzMShzcCkKKwlQVFJfTAlBVCwgUFRfUjEoc3ApCisJUFRSX0wJYTAsIFBUX1I0KHNwKQorCVBUUl9MCWExLCBQVF9SNShzcCkKKwlQVFJfTAlhMiwgUFRfUjYoc3ApCisJUFRSX0wJYTMsIFBUX1I3KHNwKQorI2lmZGVmIENPTkZJR182NEJJVAorCVBUUl9MCWE0LCBQVF9SOChzcCkKKwlQVFJfTAlhNSwgUFRfUjkoc3ApCisJUFRSX0wJYTYsIFBUX1IxMChzcCkKKwlQVFJfTAlhNywgUFRfUjExKHNwKQorI2VuZGlmCisjaWZkZWYgQ09ORklHXzY0QklUCisJUFRSX0FERElVCXNwLCBQVF9TSVpFCisjZWxzZQorCVBUUl9BRERJVQlzcCwgKFBUX1NJWkUgKyA4KQorI2VuZGlmCisuZW5kbQorCisJLm1hY3JvIFJFVFVSTl9CQUNLCisJanIgcmEKKwkgbW92ZSByYSwgQVQKKwkuZW5kbQorCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisKK05FU1RFRChmdHJhY2VfY2FsbGVyLCBQVF9TSVpFLCByYSkKKwkuZ2xvYmwgX21jb3VudAorX21jb3VudDoKKwliCWZ0cmFjZV9zdHViCisJIG5vcAorCWx3CXQxLCBmdW5jdGlvbl90cmFjZV9zdG9wCisJYm5legl0MSwgZnRyYWNlX3N0dWIKKwkgbm9wCisKKwlNQ09VTlRfU0FWRV9SRUdTCisjaWZkZWYgS0JVSUxEX01DT1VOVF9SQV9BRERSRVNTCisJUFRSX1MJdDAsIFBUX1IxMihzcCkJLyogdDAgc2F2ZWQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXR1cm4gYWRkcmVzcyhhdCkgYnkgLW1tY291bnQtcmEtYWRkcmVzcyAqLworI2VuZGlmCisKKwltb3ZlCWEwLCByYQkJLyogYXJnMTogbmV4dCBpcCwgc2VsZmFkZHIgKi8KKwkuZ2xvYmwgZnRyYWNlX2NhbGwKK2Z0cmFjZV9jYWxsOgorCW5vcAkvKiBhIHBsYWNlaG9sZGVyIGZvciB0aGUgY2FsbCB0byBhIHJlYWwgdHJhY2luZyBmdW5jdGlvbiAqLworCSBtb3ZlCWExLCBBVAkJLyogYXJnMjogdGhlIGNhbGxlcidzIG5leHQgaXAsIHBhcmVudCAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCS5nbG9ibCBmdHJhY2VfZ3JhcGhfY2FsbAorZnRyYWNlX2dyYXBoX2NhbGw6CisJbm9wCisJIG5vcAorI2VuZGlmCisKKwlNQ09VTlRfUkVTVE9SRV9SRUdTCisJLmdsb2JsIGZ0cmFjZV9zdHViCitmdHJhY2Vfc3R1YjoKKwlSRVRVUk5fQkFDSworCUVORChmdHJhY2VfY2FsbGVyKQorCisjZWxzZQkvKiAhIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCitORVNURUQoX21jb3VudCwgUFRfU0laRSwgcmEpCisJbHcJdDEsIGZ1bmN0aW9uX3RyYWNlX3N0b3AKKwlibmV6CXQxLCBmdHJhY2Vfc3R1YgorCSBub3AKKwlQVFJfTEEJdDEsIGZ0cmFjZV9zdHViCisJUFRSX0wJdDIsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbiAvKiBQcmVwYXJlIHQyIGZvciAoMSkgKi8KKwlibmUJdDEsIHQyLCBzdGF0aWNfdHJhY2UKKwkgbm9wCisKKyNpZmRlZglDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJUFRSX0wJdDMsIGZ0cmFjZV9ncmFwaF9yZXR1cm4KKwlibmUJdDEsIHQzLCBmdHJhY2VfZ3JhcGhfY2FsbGVyCisJIG5vcAorCVBUUl9MQQl0MSwgZnRyYWNlX2dyYXBoX2VudHJ5X3N0dWIKKwlQVFJfTAl0MywgZnRyYWNlX2dyYXBoX2VudHJ5CisJYm5lCXQxLCB0MywgZnRyYWNlX2dyYXBoX2NhbGxlcgorCSBub3AKKyNlbmRpZgorCWIJZnRyYWNlX3N0dWIKKwkgbm9wCisKK3N0YXRpY190cmFjZToKKwlNQ09VTlRfU0FWRV9SRUdTCisKKwltb3ZlCWEwLCByYQkJLyogYXJnMTogbmV4dCBpcCwgc2VsZmFkZHIgKi8KKwlqYWxyCXQyCQkvKiAoMSkgY2FsbCAqZnRyYWNlX3RyYWNlX2Z1bmN0aW9uICovCisJIG1vdmUJYTEsIEFUCQkvKiBhcmcyOiB0aGUgY2FsbGVyJ3MgbmV4dCBpcCwgcGFyZW50ICovCisKKwlNQ09VTlRfUkVTVE9SRV9SRUdTCisJLmdsb2JsIGZ0cmFjZV9zdHViCitmdHJhY2Vfc3R1YjoKKwlSRVRVUk5fQkFDSworCUVORChfbWNvdW50KQorCisjZW5kaWYJLyogISBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKworTkVTVEVEKGZ0cmFjZV9ncmFwaF9jYWxsZXIsIFBUX1NJWkUsIHJhKQorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCVBUUl9MCWExLCBQVF9SMzEoc3ApCS8qIGxvYWQgdGhlIG9yaWdpbmFsIHJhIGZyb20gdGhlIHN0YWNrICovCisjaWZkZWYgS0JVSUxEX01DT1VOVF9SQV9BRERSRVNTCisJUFRSX0wJdDAsIFBUX1IxMihzcCkJLyogbG9hZCB0aGUgb3JpZ2luYWwgdDAgZnJvbSB0aGUgc3RhY2sgKi8KKyNlbmRpZgorI2Vsc2UKKwlNQ09VTlRfU0FWRV9SRUdTCisJbW92ZQlhMSwgcmEJCS8qIGFyZzI6IG5leHQgaXAsIHNlbGZhZGRyICovCisjZW5kaWYKKworI2lmZGVmIEtCVUlMRF9NQ09VTlRfUkFfQUREUkVTUworCWJuZXoJdDAsIDFmCQkvKiBub24tbGVhZiBmdW5jOiB0MCBzYXZlZCB0aGUgbG9jYXRpb24gb2YgdGhlIHJldHVybiBhZGRyZXNzICovCisJIG5vcAorCVBUUl9MQQl0MCwgUFRfUjEoc3ApCS8qIGxlYWYgZnVuYzogZ2V0IHRoZSBsb2NhdGlvbiBvZiBhdChvbGQgcmEpIGZyb20gb3VyIG93biBzdGFjayAqLworMToJbW92ZQlhMCwgdDAJCS8qIGFyZzE6IHRoZSBsb2NhdGlvbiBvZiB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KKyNlbHNlCisJUFRSX0xBCWEwLCBQVF9SMShzcCkJLyogYXJnMTogJkFUIC0+IGEwICovCisjZW5kaWYKKwlqYWwJcHJlcGFyZV9mdHJhY2VfcmV0dXJuCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwkgbW92ZQlhMiwgZnAJCS8qIGFyZzM6IGZyYW1lIHBvaW50ZXIgKi8KKyNlbHNlCisjaWZkZWYgQ09ORklHXzY0QklUCisJIFBUUl9MQQlhMiwgUFRfU0laRShzcCkKKyNlbHNlCisJIFBUUl9MQQlhMiwgKFBUX1NJWkUrOCkoc3ApCisjZW5kaWYKKyNlbmRpZgorCisJTUNPVU5UX1JFU1RPUkVfUkVHUworCVJFVFVSTl9CQUNLCisJRU5EKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisKKwkuYWxpZ24JMgorCS5nbG9ibAlyZXR1cm5fdG9faGFuZGxlcgorcmV0dXJuX3RvX2hhbmRsZXI6CisJUFRSX1NVQlUJc3AsIFBUX1NJWkUKKwlQVFJfUwl2MCwgUFRfUjIoc3ApCisKKwlqYWwJZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJIFBUUl9TCXYxLCBQVF9SMyhzcCkKKworCS8qIHJlc3RvcmUgdGhlIHJlYWwgcGFyZW50IGFkZHJlc3M6IHYwIC0+IHJhICovCisJbW92ZQlyYSwgdjAKKworCVBUUl9MCXYwLCBQVF9SMihzcCkKKwlQVFJfTAl2MSwgUFRfUjMoc3ApCisJanIJcmEKKwkgUFRSX0FERElVCXNwLCBQVF9TSVpFCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCisJLnNldCBhdAorCS5zZXQgcmVvcmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwppbmRleCAyMjU3NTVkLi4xZDA0ODA3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYworKysgYi9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CiAKIGV4dGVybiB2b2lkICpfX2J6ZXJvKHZvaWQgKl9fcywgc2l6ZV90IF9fY291bnQpOwogZXh0ZXJuIGxvbmcgX19zdHJuY3B5X2Zyb21fdXNlcl9ub2NoZWNrX2FzbShjaGFyICpfX3RvLApAQCAtNTEsMyArNTIsNyBAQAogRVhQT1JUX1NZTUJPTChfX2NzdW1fcGFydGlhbF9jb3B5X3VzZXIpOwogCiBFWFBPUlRfU1lNQk9MKGludmFsaWRfcHRlX3RhYmxlKTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisvKiBfbWNvdW50IGlzIGRlZmluZWQgaW4gYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUyAqLworRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDJiMjkwZDcuLmY5NTEzZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTU4LDggKzU4LDEyIEBACiAKIHN0cnVjdCBib290X21lbV9tYXAgYm9vdF9tZW1fbWFwOwogCi1zdGF0aWMgY2hhciBjb21tYW5kX2xpbmVbQ0xfU0laRV07Ci0gICAgICAgY2hhciBhcmNzX2NtZGxpbmVbQ0xfU0laRV09Q09ORklHX0NNRExJTkU7CitzdGF0aWMgY2hhciBfX2luaXRkYXRhIGNvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CitjaGFyIF9faW5pdGRhdGEgYXJjc19jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKworI2lmZGVmIENPTkZJR19DTURMSU5FX0JPT0wKK3N0YXRpYyBjaGFyIF9faW5pdGRhdGEgYnVpbHRpbl9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSA9IENPTkZJR19DTURMSU5FOworI2VuZGlmCiAKIC8qCiAgKiBtaXBzX2lvX3BvcnRfYmFzZSBpcyB0aGUgYmVnaW4gb2YgdGhlIGFkZHJlc3Mgc3BhY2UgdG8gd2hpY2ggeDg2IHN0eWxlCkBAIC0xNjYsMjYgKzE3MCw4IEBACiAJICogYWxyZWFkeSBzZXQgdXAgaW5pdHJkX3N0YXJ0IGFuZCBpbml0cmRfZW5kLiBJbiB0aGVzZSBjYXNlcwogCSAqIHBlcmZvbSBzYW5pdHkgY2hlY2tzIGFuZCB1c2UgdGhlbSBpZiBhbGwgbG9va3MgZ29vZC4KIAkgKi8KLQlpZiAoIWluaXRyZF9zdGFydCB8fCBpbml0cmRfZW5kIDw9IGluaXRyZF9zdGFydCkgewotI2lmZGVmIENPTkZJR19QUk9CRV9JTklUUkRfSEVBREVSCi0JCXUzMiAqaW5pdHJkX2hlYWRlcjsKLQotCQkvKgotCQkgKiBTZWUgaWYgaW5pdHJkIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBrZXJuZWwgaW1hZ2UgYnkKLQkJICogYXJjaC9taXBzL2Jvb3QvYWRkaW5pdHJkLmMuIEluIHRoYXQgY2FzZSBhIGhlYWRlciBpcwotCQkgKiBwcmVwZW5kZWQgdG8gaW5pdHJkIGFuZCBpcyBtYWRlIHVwIGJ5IDggYnl0ZXMuIFRoZSBmaXJzdAotCQkgKiB3b3JkIGlzIGEgbWFnaWMgbnVtYmVyIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgc2l6ZSBvZgotCQkgKiBpbml0cmQuICBJbml0cmQgc3RhcnQgbXVzdCBiZSBwYWdlIGFsaWduZWQgaW4gYW55IGNhc2VzLgotCQkgKi8KLQkJaW5pdHJkX2hlYWRlciA9IF9fdmEoUEFHRV9BTElHTihfX3BhX3N5bWJvbCgmX2VuZCkgKyA4KSkgLSA4OwotCQlpZiAoaW5pdHJkX2hlYWRlclswXSAhPSAweDQ5NEU1MjQ0KQotCQkJZ290byBkaXNhYmxlOwotCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZykoaW5pdHJkX2hlYWRlciArIDIpOwotCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgaW5pdHJkX2hlYWRlclsxXTsKLSNlbHNlCisJaWYgKCFpbml0cmRfc3RhcnQgfHwgaW5pdHJkX2VuZCA8PSBpbml0cmRfc3RhcnQpCiAJCWdvdG8gZGlzYWJsZTsKLSNlbmRpZgotCX0KIAogCWlmIChpbml0cmRfc3RhcnQgJiB+UEFHRV9NQVNLKSB7CiAJCXByX2VycigiaW5pdHJkIHN0YXJ0IG11c3QgYmUgcGFnZSBhbGlnbmVkXG4iKTsKQEAgLTQ3Niw4ICs0NjIsMjAgQEAKIAlwcl9pbmZvKCJEZXRlcm1pbmVkIHBoeXNpY2FsIFJBTSBtYXA6XG4iKTsKIAlwcmludF9tZW1vcnlfbWFwKCk7CiAKLQlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYXJjc19jbWRsaW5lLCBzaXplb2YoY29tbWFuZF9saW5lKSk7Ci0Jc3RybGNweShib290X2NvbW1hbmRfbGluZSwgY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisjaWZkZWYgQ09ORklHX0NNRExJTkVfQk9PTAorI2lmZGVmIENPTkZJR19DTURMSU5FX09WRVJSSURFCisJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgYnVpbHRpbl9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZWxzZQorCWlmIChidWlsdGluX2NtZGxpbmVbMF0pIHsKKwkJc3RybGNhdChhcmNzX2NtZGxpbmUsICIgIiwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgYnVpbHRpbl9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisJfQorCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGFyY3NfY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworI2VuZGlmCisjZWxzZQorCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGFyY3NfY21kbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworI2VuZGlmCisJc3RybGNweShjb21tYW5kX2xpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAKIAkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwppbmRleCA2MjU0MDQxLi5kMGM2OGI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKQEAgLTM1LDYgKzM1LDE1IEBACiAKICNpbmNsdWRlICJzaWduYWwtY29tbW9uLmgiCiAKK3N0YXRpYyBpbnQgKCpzYXZlX2ZwX2NvbnRleHQpKHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOworc3RhdGljIGludCAoKnJlc3RvcmVfZnBfY29udGV4dCkoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBfc2F2ZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IF9yZXN0b3JlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpOworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7CisKIC8qCiAgKiBIb3JyaWJseSBjb21wbGljYXRlZCAtIHdpdGggdGhlIGJsb29keSBSTTkwMDAgd29ya2Fyb3VuZHMgZW5hYmxlZAogICogdGhlIHNpZ25hbCB0cmFtcG9saW5lcyBpcyBtb3ZpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlIHNvIHdlIGNhbgpAQCAtNzA5LDMgKzcxOCw0MCBAQAogCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CiAJfQogfQorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBzbXBfc2F2ZV9mcF9jb250ZXh0KHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqc2MpCit7CisJcmV0dXJuIHJhd19jcHVfaGFzX2ZwdQorCSAgICAgICA/IF9zYXZlX2ZwX2NvbnRleHQoc2MpCisJICAgICAgIDogZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dChzYyk7Cit9CisKK3N0YXRpYyBpbnQgc21wX3Jlc3RvcmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKQoreworCXJldHVybiByYXdfY3B1X2hhc19mcHUKKwkgICAgICAgPyBfcmVzdG9yZV9mcF9jb250ZXh0KHNjKQorCSAgICAgICA6IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQoc2MpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2lnbmFsX3NldHVwKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIEZvciBub3cganVzdCBkbyB0aGUgY3B1X2hhc19mcHUgY2hlY2sgd2hlbiB0aGUgZnVuY3Rpb25zIGFyZSBpbnZva2VkICovCisJc2F2ZV9mcF9jb250ZXh0ID0gc21wX3NhdmVfZnBfY29udGV4dDsKKwlyZXN0b3JlX2ZwX2NvbnRleHQgPSBzbXBfcmVzdG9yZV9mcF9jb250ZXh0OworI2Vsc2UKKwlpZiAoY3B1X2hhc19mcHUpIHsKKwkJc2F2ZV9mcF9jb250ZXh0ID0gX3NhdmVfZnBfY29udGV4dDsKKwkJcmVzdG9yZV9mcF9jb250ZXh0ID0gX3Jlc3RvcmVfZnBfY29udGV4dDsKKwl9IGVsc2UgeworCQlzYXZlX2ZwX2NvbnRleHQgPSBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0OworCQlyZXN0b3JlX2ZwX2NvbnRleHQgPSBmcHVfZW11bGF0b3JfcmVzdG9yZV9jb250ZXh0OworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoc2lnbmFsX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYwppbmRleCAyZTc0MDc1Li4wM2FiYWYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCkBAIC0zNSw2ICszNSwxNSBAQAogCiAjaW5jbHVkZSAic2lnbmFsLWNvbW1vbi5oIgogCitzdGF0aWMgaW50ICgqc2F2ZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7CitzdGF0aWMgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7CisKK2V4dGVybiBhc21saW5rYWdlIGludCBfc2F2ZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKK2V4dGVybiBhc21saW5rYWdlIGludCBfcmVzdG9yZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKKworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOworZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOworCiAvKgogICogSW5jbHVkaW5nIDxhc20vdW5pc3RkLmg+IHdvdWxkIGdpdmUgdXNlIHRoZSA2NC1iaXQgc3lzY2FsbCBudW1iZXJzIC4uLgogICovCkBAIC04MjgsMyArODM3LDE4IEBACiAJaW5mby5zaV9jb2RlIHw9IF9fU0lfQ0hMRDsKIAlyZXR1cm4gY29weV9zaWdpbmZvX3RvX3VzZXIzMih1aW5mbywgJmluZm8pOwogfQorCitzdGF0aWMgaW50IHNpZ25hbDMyX2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2hhc19mcHUpIHsKKwkJc2F2ZV9mcF9jb250ZXh0MzIgPSBfc2F2ZV9mcF9jb250ZXh0MzI7CisJCXJlc3RvcmVfZnBfY29udGV4dDMyID0gX3Jlc3RvcmVfZnBfY29udGV4dDMyOworCX0gZWxzZSB7CisJCXNhdmVfZnBfY29udGV4dDMyID0gZnB1X2VtdWxhdG9yX3NhdmVfY29udGV4dDMyOworCQlyZXN0b3JlX2ZwX2NvbnRleHQzMiA9IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQzMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzaWduYWwzMl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IGU3MmU2ODQuLjZjZGNhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMzAsNyArMTMxLDcgQEAKIC8qCiAgKiBDYWxsIGludG8gYm90aCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFzIHdlIHNoYXJlIHRoZSBJUEkgZm9yIHRoZW0KICAqLwotdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCkKK3ZvaWQgX19pcnFfZW50cnkgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCiB7CiAJaXJxX2VudGVyKCk7CiAJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IGEzOGUzZWUuLjIzNDk5YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC05MzksMjMgKzk0MCwyOSBAQAogCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbWlwc19jbG9ja2V2ZW50X2RldmljZSk7CiAKLXZvaWQgaXBpX2RlY29kZShzdHJ1Y3Qgc210Y19pcGkgKnBpcGkpCitzdGF0aWMgdm9pZCBfX2lycV9lbnRyeSBzbXRjX2Nsb2NrX3RpY2tfaW50ZXJydXB0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKKwlpbnQgaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyAxOworCisJaXJxX2VudGVyKCk7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CisJY2QgPSAmcGVyX2NwdShtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOworCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKKwlpcnFfZXhpdCgpOworfQorCit2b2lkIGlwaV9kZWNvZGUoc3RydWN0IHNtdGNfaXBpICpwaXBpKQorewogCXZvaWQgKmFyZ19jb3B5ID0gcGlwaS0+YXJnOwogCWludCB0eXBlX2NvcHkgPSBwaXBpLT50eXBlOwotCWludCBpcnEgPSBNSVBTX0NQVV9JUlFfQkFTRSArIDE7CiAKIAlzbXRjX2lwaV9ucSgmZnJlZUlQSXEsIHBpcGkpOwogCiAJc3dpdGNoICh0eXBlX2NvcHkpIHsKIAljYXNlIFNNVENfQ0xPQ0tfVElDSzoKLQkJaXJxX2VudGVyKCk7Ci0JCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGlycV90b19kZXNjKGlycSkpOwotCQljZCA9ICZwZXJfY3B1KG1pcHNfY2xvY2tldmVudF9kZXZpY2UsIGNwdSk7Ci0JCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKLQkJaXJxX2V4aXQoKTsKKwkJc210Y19jbG9ja190aWNrX2ludGVycnVwdCgpOwogCQlicmVhazsKIAogCWNhc2UgTElOVVhfU01QX0lQSToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCAwYTE4YjRjLi4zMDhlNDM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0yNSwxMCArMjUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9icmFuY2guaD4KICNpbmNsdWRlIDxhc20vYnJlYWsuaD4KKyNpbmNsdWRlIDxhc20vY29wMi5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vZHNwLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpAQCAtNzksMTAgKzgxLDYgQEAKIGV4dGVybiBpbnQgZnB1X2VtdWxhdG9yX2NvcDFIYW5kbGVyKHN0cnVjdCBwdF9yZWdzICp4Y3AsCiAJc3RydWN0IG1pcHNfZnB1X3N0cnVjdCAqY3R4LCBpbnQgaGFzX2ZwdSk7CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KLWV4dGVybiBhc21saW5rYWdlIHZvaWQgb2N0ZW9uX2NvcDJfcmVzdG9yZShzdHJ1Y3Qgb2N0ZW9uX2NvcDJfc3RhdGUgKnRhc2spOwotI2VuZGlmCi0KIHZvaWQgKCpib2FyZF9iZV9pbml0KSh2b2lkKTsKIGludCAoKmJvYXJkX2JlX2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOwogdm9pZCAoKmJvYXJkX25taV9oYW5kbGVyX3NldHVwKSh2b2lkKTsKQEAgLTg1Nyw2ICs4NTUsNDQgQEAKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9GUEFGRiAqLwogfQogCisvKgorICogTm8gbG9jazsgb25seSB3cml0dGVuIGR1cmluZyBlYXJseSBib290dXAgYnkgQ1BVIDAuCisgKi8KK3N0YXRpYyBSQVdfTk9USUZJRVJfSEVBRChjdTJfY2hhaW4pOworCitpbnQgX19yZWYgcmVnaXN0ZXJfY3UyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIHJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY3UyX2NoYWluLCBuYik7Cit9CisKK2ludCBjdTJfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlyZXR1cm4gcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJmN1Ml9jaGFpbiwgdmFsLCB2KTsKK30KKworc3RhdGljIGludCBkZWZhdWx0X2N1Ml9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKyAgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGRhdGE7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWRlZmF1bHQ6CisJCWRpZV9pZl9rZXJuZWwoIlVuaGFuZGxlZCBrZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBvciBpbnZhbGlkICIKKwkJCSAgICAgICJpbnN0cnVjdGlvbiIsIHJlZ3MpOworCQkvKiBGYWxsIHRocm91Z2ggICovCisKKwljYXNlIENVMl9FWENFUFRJT046CisJCWZvcmNlX3NpZyhTSUdJTEwsIGN1cnJlbnQpOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGVmYXVsdF9jdTJfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBkZWZhdWx0X2N1Ml9jYWxsLAorCS5wcmlvcml0eQk9IDB4ODAwMDAwMDAsCQkvKiBSdW4gbGFzdCAgKi8KK307CisKIGFzbWxpbmthZ2Ugdm9pZCBkb19jcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IF9fdXNlciAqZXBjOwpAQCAtOTIwLDE3ICs5NTYsOSBAQAogCQlyZXR1cm47CiAKIAljYXNlIDI6Ci0jaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCi0JCXByZWZldGNoKCZjdXJyZW50LT50aHJlYWQuY3AyKTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlLU1RLX1NUQVRVUyhjdXJyZW50KSB8PSBTVDBfQ1UyOwotCQlzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwotCQl3cml0ZV9jMF9zdGF0dXMoc3RhdHVzIHwgU1QwX0NVMik7Ci0JCW9jdGVvbl9jb3AyX3Jlc3RvcmUoJihjdXJyZW50LT50aHJlYWQuY3AyKSk7Ci0JCXdyaXRlX2MwX3N0YXR1cyhzdGF0dXMgJiB+U1QwX0NVMik7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuOwotI2VuZGlmCisJCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjdTJfY2hhaW4sIENVMl9FWENFUFRJT04sIHJlZ3MpOworCQlicmVhazsKKwogCWNhc2UgMzoKIAkJYnJlYWs7CiAJfQpAQCAtMTM2Nyw3NyArMTM5NSw2IEBACiAJcmV0dXJuIHNldF92aV9zcnNfaGFuZGxlcihuLCBhZGRyLCAwKTsKIH0KIAotLyoKLSAqIFRoaXMgaXMgdXNlZCBieSBuYXRpdmUgc2lnbmFsIGhhbmRsaW5nCi0gKi8KLWFzbWxpbmthZ2UgaW50ICgqc2F2ZV9mcF9jb250ZXh0KShzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLWFzbWxpbmthZ2UgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0KShzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IF9zYXZlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci1leHRlcm4gYXNtbGlua2FnZSBpbnQgX3Jlc3RvcmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyk7Ci1leHRlcm4gYXNtbGlua2FnZSBpbnQgZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBpbnQgc21wX3NhdmVfZnBfY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjKQotewotCXJldHVybiByYXdfY3B1X2hhc19mcHUKLQkgICAgICAgPyBfc2F2ZV9mcF9jb250ZXh0KHNjKQotCSAgICAgICA6IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQoc2MpOwotfQotCi1zdGF0aWMgaW50IHNtcF9yZXN0b3JlX2ZwX2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYykKLXsKLQlyZXR1cm4gcmF3X2NwdV9oYXNfZnB1Ci0JICAgICAgID8gX3Jlc3RvcmVfZnBfY29udGV4dChzYykKLQkgICAgICAgOiBmcHVfZW11bGF0b3JfcmVzdG9yZV9jb250ZXh0KHNjKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFsX2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JLyogRm9yIG5vdyBqdXN0IGRvIHRoZSBjcHVfaGFzX2ZwdSBjaGVjayB3aGVuIHRoZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgKi8KLQlzYXZlX2ZwX2NvbnRleHQgPSBzbXBfc2F2ZV9mcF9jb250ZXh0OwotCXJlc3RvcmVfZnBfY29udGV4dCA9IHNtcF9yZXN0b3JlX2ZwX2NvbnRleHQ7Ci0jZWxzZQotCWlmIChjcHVfaGFzX2ZwdSkgewotCQlzYXZlX2ZwX2NvbnRleHQgPSBfc2F2ZV9mcF9jb250ZXh0OwotCQlyZXN0b3JlX2ZwX2NvbnRleHQgPSBfcmVzdG9yZV9mcF9jb250ZXh0OwotCX0gZWxzZSB7Ci0JCXNhdmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQ7Ci0JCXJlc3RvcmVfZnBfY29udGV4dCA9IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQ7Ci0JfQotI2VuZGlmCi19Ci0KLSNpZmRlZiBDT05GSUdfTUlQUzMyX0NPTVBBVAotCi0vKgotICogVGhpcyBpcyB1c2VkIGJ5IDMyLWJpdCBzaWduYWwgc3R1ZmYgb24gdGhlIDY0LWJpdCBrZXJuZWwKLSAqLwotYXNtbGlua2FnZSBpbnQgKCpzYXZlX2ZwX2NvbnRleHQzMikoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLWFzbWxpbmthZ2UgaW50ICgqcmVzdG9yZV9mcF9jb250ZXh0MzIpKHN0cnVjdCBzaWdjb250ZXh0MzIgX191c2VyICpzYyk7Ci0KLWV4dGVybiBhc21saW5rYWdlIGludCBfc2F2ZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLWV4dGVybiBhc21saW5rYWdlIGludCBfcmVzdG9yZV9mcF9jb250ZXh0MzIoc3RydWN0IHNpZ2NvbnRleHQzMiBfX3VzZXIgKnNjKTsKLQotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9zYXZlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOwotZXh0ZXJuIGFzbWxpbmthZ2UgaW50IGZwdV9lbXVsYXRvcl9yZXN0b3JlX2NvbnRleHQzMihzdHJ1Y3Qgc2lnY29udGV4dDMyIF9fdXNlciAqc2MpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFsMzJfaW5pdCh2b2lkKQotewotCWlmIChjcHVfaGFzX2ZwdSkgewotCQlzYXZlX2ZwX2NvbnRleHQzMiA9IF9zYXZlX2ZwX2NvbnRleHQzMjsKLQkJcmVzdG9yZV9mcF9jb250ZXh0MzIgPSBfcmVzdG9yZV9mcF9jb250ZXh0MzI7Ci0JfSBlbHNlIHsKLQkJc2F2ZV9mcF9jb250ZXh0MzIgPSBmcHVfZW11bGF0b3Jfc2F2ZV9jb250ZXh0MzI7Ci0JCXJlc3RvcmVfZnBfY29udGV4dDMyID0gZnB1X2VtdWxhdG9yX3Jlc3RvcmVfY29udGV4dDMyOwotCX0KLX0KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBjcHVfY2FjaGVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHRsYl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2hhbmRsZXJzKHZvaWQpOwpAQCAtMTc1MSwxMyArMTcwOCwxMCBAQAogCWVsc2UKIAkJbWVtY3B5KCh2b2lkICopKGViYXNlICsgMHgwODApLCAmZXhjZXB0X3ZlYzNfZ2VuZXJpYywgMHg4MCk7CiAKLQlzaWduYWxfaW5pdCgpOwotI2lmZGVmIENPTkZJR19NSVBTMzJfQ09NUEFUCi0Jc2lnbmFsMzJfaW5pdCgpOwotI2VuZGlmCi0KIAlsb2NhbF9mbHVzaF9pY2FjaGVfcmFuZ2UoZWJhc2UsIGViYXNlICsgMHg0MDApOwogCWZsdXNoX3RsYl9oYW5kbGVycygpOwogCiAJc29ydF9leHRhYmxlKF9fc3RhcnRfX19kYmVfdGFibGUsIF9fc3RvcF9fX2RiZV90YWJsZSk7CisKKwlyZWdpc3Rlcl9jdTJfbm90aWZpZXIoJmRlZmF1bHRfY3UyX25vdGlmaWVyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL21pcHMva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDY3YmQ2MjYuLjY5YjAzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC91bmFsaWduZWQuYwpAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vYnJhbmNoLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9jb3AyLmg+CiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ1MSwxNyArNDUyLDI3IEBACiAJCSAqLwogCQlnb3RvIHNpZ2J1czsKIAorCS8qCisJICogQ09QMiBpcyBhdmFpbGFibGUgdG8gaW1wbGVtZW50b3IgZm9yIGFwcGxpY2F0aW9uIHNwZWNpZmljIHVzZS4KKwkgKiBJdCdzIHVwIHRvIGFwcGxpY2F0aW9ucyB0byByZWdpc3RlciBhIG5vdGlmaWVyIGNoYWluIGFuZCBkbworCSAqIHdoYXRldmVyIHRoZXkgaGF2ZSB0byBkbywgaW5jbHVkaW5nIHBvc3NpYmxlIHNlbmRpbmcgb2Ygc2lnbmFscy4KKwkgKi8KIAljYXNlIGx3YzJfb3A6CisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9MV0MyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIGxkYzJfb3A6CisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9MREMyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIHN3YzJfb3A6CisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9TV0MyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIHNkYzJfb3A6Ci0JCS8qCi0JCSAqIFRoZXNlIGFyZSB0aGUgY29wcm9jZXNzb3IgMiBsb2FkL3N0b3Jlcy4gIFRoZSBjdXJyZW50Ci0JCSAqIGltcGxlbWVudGF0aW9ucyBkb24ndCB1c2UgY3AyIGFuZCBjcDIgc2hvdWxkIGFsd2F5cyBiZQotCQkgKiBkaXNhYmxlZCBpbiBjMF9zdGF0dXMuICBTbyBzZW5kIFNJR0lMTC4KLSAgICAgICAgICAgICAgICAgKiAoTm8gbG9uZ2VyIHRydWU6IFRoZSBTb255IFByYXlzdGF0aW9uIHVzZXMgY3AyIGZvcgotICAgICAgICAgICAgICAgICAqIDNEIG1hdHJpeCBvcGVyYXRpb25zLiAgRHVubm8gaWYgdGhhdCB0aGluZ3kgaGFzIGEgTU1VIC4uLikKLQkJICovCisJCWN1Ml9ub3RpZmllcl9jYWxsX2NoYWluKENVMl9TREMyX09QLCByZWdzKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQkvKgogCQkgKiBQaGVlZWUuLi4gIFdlIGVuY291bnRlcmVkIGFuIHlldCB1bmtub3duIGluc3RydWN0aW9uIG9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMTYyYjI5OS4uZjI1ZGY3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDYsNiArNDYsNyBAQAogCQlTQ0hFRF9URVhUCiAJCUxPQ0tfVEVYVAogCQlLUFJPQkVTX1RFWFQKKwkJSVJRRU5UUllfVEVYVAogCQkqKC50ZXh0LiopCiAJCSooLmZpeHVwKQogCQkqKC5nbnUud2FybmluZykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9waWN2dWVfcHJvYy5jIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZV9wcm9jLmMKaW5kZXggMGJiNjAzNy4uOGUzODhkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZV9wcm9jLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZV9wcm9jLmMKQEAgLTQsMTIgKzQsMTQgQEAKICAqIEJyaWFuIE11cnBoeSA8YnJpYW4ubXVycGh5QGVpY29uLmNvbT4KICAqCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTM4LDEyICs0MCw5IEBACiAKIHN0YXRpYyBERUNMQVJFX1RBU0tMRVQocHZjX2Rpc3BsYXlfdGFza2xldCwgJnB2Y19kaXNwbGF5LCAwKTsKIAotc3RhdGljIGludCBwdmNfcHJvY19yZWFkX2xpbmUoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHB2Y19saW5lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JY2hhciAqb3JpZ3BhZ2UgPSBwYWdlOwotCWludCBsaW5lbm8gPSAqKGludCAqKWRhdGE7CisJaW50IGxpbmVubyA9ICooaW50ICopbS0+cHJpdmF0ZTsKIAogCWlmIChsaW5lbm8gPCAwIHx8IGxpbmVubyA+IFBWQ19OTElORVMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicHJvY19yZWFkX2xpbmU6IGludmFsaWQgbGluZW5vICVkXG4iLCBsaW5lbm8pOwpAQCAtNTEsNDUgKzUwLDY2IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcHZjX211dGV4KTsKLQlwYWdlICs9IHNwcmludGYocGFnZSwgIiVzXG4iLCBwdmNfbGluZXNbbGluZW5vXSk7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHB2Y19saW5lc1tsaW5lbm9dKTsKIAltdXRleF91bmxvY2soJnB2Y19tdXRleCk7CiAKLQlyZXR1cm4gcGFnZSAtIG9yaWdwYWdlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB2Y19wcm9jX3dyaXRlX2xpbmUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHB2Y19saW5lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgb3JpZ2NvdW50ID0gY291bnQ7Ci0JaW50IGxpbmVubyA9ICooaW50ICopZGF0YTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHZjX2xpbmVfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KIAotCWlmIChsaW5lbm8gPCAwIHx8IGxpbmVubyA+IFBWQ19OTElORVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicHJvY193cml0ZV9saW5lOiBpbnZhbGlkIGxpbmVubyAlZFxuIiwKLQkJICAgICAgIGxpbmVubyk7Ci0JCXJldHVybiBvcmlnY291bnQ7Ci0JfQorc3RhdGljIHNzaXplX3QgcHZjX2xpbmVfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWludCBsaW5lbm8gPSAqKGludCAqKVBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKwljaGFyIGtidWZbUFZDX0xJTkVMRU5dOworCXNpemVfdCBsZW47CiAKLQlpZiAoY291bnQgPiBQVkNfTElORUxFTikKLQkJY291bnQgPSBQVkNfTElORUxFTjsKKwlCVUdfT04obGluZW5vIDwgMCB8fCBsaW5lbm8gPiBQVkNfTkxJTkVTKTsKIAotCWlmIChidWZmZXJbY291bnQtMV0gPT0gJ1xuJykKLQkJY291bnQtLTsKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihrYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWtidWZbbGVuXSA9ICdcMCc7CisKKwlpZiAobGVuID4gMCAmJiBrYnVmW2xlbiAtIDFdID09ICdcbicpCisJCWxlbi0tOwogCiAJbXV0ZXhfbG9jaygmcHZjX211dGV4KTsKLQlzdHJuY3B5KHB2Y19saW5lc1tsaW5lbm9dLCBidWZmZXIsIGNvdW50KTsKLQlwdmNfbGluZXNbbGluZW5vXVtjb3VudF0gPSAnXDAnOworCXN0cm5jcHkocHZjX2xpbmVzW2xpbmVub10sIGtidWYsIGxlbik7CisJcHZjX2xpbmVzW2xpbmVub11bbGVuXSA9ICdcMCc7CiAJbXV0ZXhfdW5sb2NrKCZwdmNfbXV0ZXgpOwogCiAJdGFza2xldF9zY2hlZHVsZSgmcHZjX2Rpc3BsYXlfdGFza2xldCk7CiAKLQlyZXR1cm4gb3JpZ2NvdW50OworCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBwdmNfcHJvY193cml0ZV9zY3JvbGwoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwdmNfbGluZV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHB2Y19saW5lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwdmNfbGluZV9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIHNzaXplX3QgcHZjX3Njcm9sbF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKLQlpbnQgb3JpZ2NvdW50ID0gY291bnQ7Ci0JaW50IGNtZCA9IHNpbXBsZV9zdHJ0b2woYnVmZmVyLCBOVUxMLCAxMCk7CisJY2hhciBrYnVmWzQyXTsKKwlzaXplX3QgbGVuOworCWludCBjbWQ7CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihrYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWtidWZbbGVuXSA9ICdcMCc7CisKKwljbWQgPSBzaW1wbGVfc3RydG9sKGtidWYsIE5VTEwsIDEwKTsKIAogCW11dGV4X2xvY2soJnB2Y19tdXRleCk7CiAJaWYgKHNjcm9sbF9pbnRlcnZhbCAhPSAwKQpAQCAtMTEwLDIyICsxMzAsMzEgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwdmNfbXV0ZXgpOwogCi0JcmV0dXJuIG9yaWdjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgcHZjX3Byb2NfcmVhZF9zY3JvbGwoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotCQkJICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHB2Y19zY3JvbGxfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQljaGFyICpvcmlncGFnZSA9IHBhZ2U7Ci0KIAltdXRleF9sb2NrKCZwdmNfbXV0ZXgpOwotCXBhZ2UgKz0gc3ByaW50ZihwYWdlLCAiJWRcbiIsIHNjcm9sbF9kaXIgKiBzY3JvbGxfaW50ZXJ2YWwpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCBzY3JvbGxfZGlyICogc2Nyb2xsX2ludGVydmFsKTsKIAltdXRleF91bmxvY2soJnB2Y19tdXRleCk7CiAKLQlyZXR1cm4gcGFnZSAtIG9yaWdwYWdlOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHB2Y19zY3JvbGxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwdmNfc2Nyb2xsX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB2Y19zY3JvbGxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwdmNfc2Nyb2xsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBwdmNfc2Nyb2xsX3Byb2Nfd3JpdGUsCit9OwogCiB2b2lkIHB2Y19wcm9jX3RpbWVyZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0xNjMsMjIgKzE5MiwxNiBAQAogCQlwdmNfbGluZWRhdGFbaV0gPSBpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgUFZDX05MSU5FUzsgaSsrKSB7Ci0JCXByb2NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShwdmNfbGluZW5hbWVbaV0sIDA2NDQsCi0JCQkJCSAgICAgICBwdmNfZGlzcGxheV9kaXIpOworCQlwcm9jX2VudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShwdmNfbGluZW5hbWVbaV0sIDA2NDQsIHB2Y19kaXNwbGF5X2RpciwKKwkJCQkJJnB2Y19saW5lX3Byb2NfZm9wcywgJnB2Y19saW5lZGF0YVtpXSk7CiAJCWlmIChwcm9jX2VudHJ5ID09IE5VTEwpCiAJCQlnb3RvIGVycm9yOwotCi0JCXByb2NfZW50cnktPnJlYWRfcHJvYyA9IHB2Y19wcm9jX3JlYWRfbGluZTsKLQkJcHJvY19lbnRyeS0+d3JpdGVfcHJvYyA9IHB2Y19wcm9jX3dyaXRlX2xpbmU7Ci0JCXByb2NfZW50cnktPmRhdGEgPSAmcHZjX2xpbmVkYXRhW2ldOwogCX0KLQlwcm9jX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNjcm9sbCIsIDA2NDQsIHB2Y19kaXNwbGF5X2Rpcik7CisJcHJvY19lbnRyeSA9IHByb2NfY3JlYXRlKCJzY3JvbGwiLCAwNjQ0LCBwdmNfZGlzcGxheV9kaXIsCisJCQkJICZwdmNfc2Nyb2xsX3Byb2NfZm9wcyk7CiAJaWYgKHByb2NfZW50cnkgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKIAotCXByb2NfZW50cnktPndyaXRlX3Byb2MgPSBwdmNfcHJvY193cml0ZV9zY3JvbGw7Ci0JcHJvY19lbnRyeS0+cmVhZF9wcm9jID0gcHZjX3Byb2NfcmVhZF9zY3JvbGw7Ci0KIAlpbml0X3RpbWVyKCZ0aW1lcik7CiAJdGltZXIuZnVuY3Rpb24gPSBwdmNfcHJvY190aW1lcmZ1bmM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9wcm9tLmMgYi9hcmNoL21pcHMvbGFzYXQvcHJvbS5jCmluZGV4IDZhY2M2Y2IuLjIwZmRlMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3Byb20uYwpAQCAtMTAwLDggKzEwMCw4IEBACiAKIAkvKiBHZXQgdGhlIGNvbW1hbmQgbGluZSAqLwogCWlmIChhcmdjID4gMCkgewotCQlzdHJuY3B5KGFyY3NfY21kbGluZSwgYXJndlswXSwgQ0xfU0laRS0xKTsKLQkJYXJjc19jbWRsaW5lW0NMX1NJWkUtMV0gPSAnXDAnOworCQlzdHJuY3B5KGFyY3NfY21kbGluZSwgYXJndlswXSwgQ09NTUFORF9MSU5FX1NJWkUtMSk7CisJCWFyY3NfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRS0xXSA9ICdcMCc7CiAJfQogCiAJLyogU2V0IHRoZSBJL08gYmFzZSBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMgYi9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKaW5kZXggMTRiOWEyOC4uZDg3ZmZkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2xhc2F0X3ByaWQsCi0uCX0sCisJfSwKICNpZmRlZiBDT05GSUdfSU5FVAogCXsKIAkJLnByb2NuYW1lCT0gImlwYWRkciIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vS2NvbmZpZyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9LY29uZmlnCmluZGV4IGQ0NTA5MjUuLjNkZjE5NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9LY29uZmlnCkBAIC0xLDMxICsxLDg1IEBACiBjaG9pY2UKLSAgICBwcm9tcHQgIk1hY2hpbmUgVHlwZSIKLSAgICBkZXBlbmRzIG9uIE1BQ0hfTE9PTkdTT04KKwlwcm9tcHQgIk1hY2hpbmUgVHlwZSIKKwlkZXBlbmRzIG9uIE1BQ0hfTE9PTkdTT04KIAogY29uZmlnIExFTU9URV9GVUxPT05HMkUKLSAgICBib29sICJMZW1vdGUgRnVsb29uZygyZSkgbWluaS1QQyIKLSAgICBzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0gICAgc2VsZWN0IENFVlRfUjRLCi0gICAgc2VsZWN0IENTUkNfUjRLCi0gICAgc2VsZWN0IFNZU19IQVNfQ1BVX0xPT05HU09OMkUKLSAgICBzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0gICAgc2VsZWN0IEJPT1RfRUxGMzIKLSAgICBzZWxlY3QgQk9BUkRfU0NBQ0hFCi0gICAgc2VsZWN0IEhXX0hBU19QQ0kKLSAgICBzZWxlY3QgSTgyNTkKLSAgICBzZWxlY3QgSVNBCi0gICAgc2VsZWN0IElSUV9DUFUKLSAgICBzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotICAgIHNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCi0gICAgc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0gICAgc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCi0gICAgc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCi0gICAgc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotICAgIHNlbGVjdCBHRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU4KLSAgICBzZWxlY3QgQ1BVX0hBU19XQgotICAgIGhlbHAKLSAgICAgIExlbW90ZSBGdWxvb25nKDJlKSBtaW5pLVBDIGJvYXJkIGJhc2VkIG9uIHRoZSBDaGluZXNlIExvb25nc29uLTJFIENQVSBhbmQKLSAgICAgIGFuIEZQR0Egbm9ydGhicmlkZ2UKKwlib29sICJMZW1vdGUgRnVsb29uZygyZSkgbWluaS1QQyIKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IENFVlRfUjRLCisJc2VsZWN0IENTUkNfUjRLCisJc2VsZWN0IFNZU19IQVNfQ1BVX0xPT05HU09OMkUKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IEJPT1RfRUxGMzIKKwlzZWxlY3QgQk9BUkRfU0NBQ0hFCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSTgyNTkKKwlzZWxlY3QgSVNBCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCXNlbGVjdCBHRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU4KKwlzZWxlY3QgQ1BVX0hBU19XQgorCWhlbHAKKwkgIExlbW90ZSBGdWxvb25nKDJlKSBtaW5pLVBDIGJvYXJkIGJhc2VkIG9uIHRoZSBDaGluZXNlIExvb25nc29uLTJFIENQVSBhbmQKKwkgIGFuIEZQR0Egbm9ydGhicmlkZ2UKIAotICAgICAgTGVtb3RlIEZ1bG9vbmcoMmUpIG1pbmkgUEMgaGF2ZSBhIFZJQTY4NkIgc291dGggYnJpZGdlLgorCSAgTGVtb3RlIEZ1bG9vbmcoMmUpIG1pbmkgUEMgaGF2ZSBhIFZJQTY4NkIgc291dGggYnJpZGdlLgorCitjb25maWcgTEVNT1RFX01BQ0gyRgorCWJvb2wgIkxlbW90ZSBMb29uZ3NvbiAyRiBmYW1pbHkgbWFjaGluZXMiCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBCT0FSRF9TQ0FDSEUKKwlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBDRVZUX1I0SyBpZiAhIE1JUFNfRVhURVJOQUxfVElNRVIKKwlzZWxlY3QgQ1BVX0hBU19XQgorCXNlbGVjdCBDUzU1MzYKKwlzZWxlY3QgQ1NSQ19SNEsgaWYgISBNSVBTX0VYVEVSTkFMX1RJTUVSCisJc2VsZWN0IERNQV9OT05DT0hFUkVOVAorCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlzZWxlY3QgR0VORVJJQ19JU0FfRE1BX1NVUFBPUlRfQlJPS0VOCisJc2VsZWN0IEhXX0hBU19QQ0kKKwlzZWxlY3QgSTgyNTkKKwlzZWxlY3QgSVJRX0NQVQorCXNlbGVjdCBJU0EKKwlzZWxlY3QgU1lTX0hBU19DUFVfTE9PTkdTT04yRgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USworCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwloZWxwCisJICBMZW1vdGUgTG9vbmdzb24gMkYgZmFtaWx5IG1hY2hpbmVzIHV0aWxpemUgdGhlIDJGIHJldmlzaW9uIG9mCisJICBMb29uZ3NvbiBwcm9jZXNzb3IgYW5kIHRoZSBBTUQgQ1M1NTM2IHNvdXRoIGJyaWRnZS4KKworCSAgVGhlc2UgZmFtaWx5IG1hY2hpbmVzIGluY2x1ZGUgZnVsb29uZzJmIG1pbmkgUEMsIHllZWxvb25nMmYgbm90ZWJvb2ssCisJICBMaW5nTG9vbmcgYWxsaW5vbmUgUEMgYW5kIHNvIGZvcnRoLgogZW5kY2hvaWNlCisKK2NvbmZpZyBDUzU1MzYKKwlib29sCisKK2NvbmZpZyBDUzU1MzZfTUZHUFQKKwlib29sICJDUzU1MzYgTUZHUFQgVGltZXIiCisJZGVwZW5kcyBvbiBDUzU1MzYKKwlzZWxlY3QgTUlQU19FWFRFUk5BTF9USU1FUgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG1mZ3B0MCB0aW1lciBvZiBBTUQgQ1M1NTM2LgorCisJICBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIExvb25nc29uMiBDUFVGcmVxIERyaXZlciwgUGxlYXNlIGVuYWJsZQorCSAgdGhpcyBvcHRpb24gYXQgZmlyc3QsIG90aGVyd2lzZSwgWW91IHdpbGwgZ2V0IHdyb25nIHN5c3RlbSB0aW1lLgorCisJICBJZiB1bnN1cmUsIHNheSBZZXMuCisKK2NvbmZpZyBMT09OR1NPTl9TVVNQRU5ECisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQ1BVX1NVUFBPUlRTX0NQVUZSRVEgJiYgU1VTUEVORAorCitjb25maWcgTE9PTkdTT05fVUFSVF9CQVNFCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gRUFSTFlfUFJJTlRLIHx8IFNFUklBTF84MjUwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvbG9vbmdzb24vTWFrZWZpbGUKaW5kZXggMzkwNDhjNC4uMmI3NmNiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9NYWtlZmlsZQpAQCAtOSwzICs5LDkgQEAKICMKIAogb2JqLSQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpICArPSBmdWxvb25nLTJlLworCisjCisjIExlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcworIworCitvYmotJChDT05GSUdfTEVNT1RFX01BQ0gyRikgICs9IGxlbW90ZS0yZi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL01ha2VmaWxlCmluZGV4IDY1NmIzY2MuLjc2NjhjNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9NYWtlZmlsZQpAQCAtMyw5ICszLDIzIEBACiAjCiAKIG9iai15ICs9IHNldHVwLm8gaW5pdC5vIGNtZGxpbmUubyBlbnYubyB0aW1lLm8gcmVzZXQubyBpcnEubyBcCi0gICAgcGNpLm8gYm9uaXRvLWlycS5vIG1lbS5vIG1hY2h0eXBlLm8KKyAgICBwY2kubyBib25pdG8taXJxLm8gbWVtLm8gbWFjaHR5cGUubyBwbGF0Zm9ybS5vCiAKICMKLSMgRWFybHkgcHJpbnRrIHN1cHBvcnQKKyMgU2VyaWFsIHBvcnQgc3VwcG9ydAogIwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykgKz0gZWFybHlfcHJpbnRrLm8KK29iai0kKENPTkZJR19TRVJJQUxfODI1MCkgKz0gc2VyaWFsLm8KK29iai0kKENPTkZJR19MT09OR1NPTl9VQVJUX0JBU0UpICs9IHVhcnRfYmFzZS5vCisKKyMKKyMgRW5hYmxlIENTNTUzNiBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlKFZTTSkgdG8gdmlydHVsaXplIHRoZSBQQ0kgY29uZmlndXJlCisjIHNwYWNlCisjCitvYmotJChDT05GSUdfQ1M1NTM2KSArPSBjczU1MzYvCisKKyMKKyMgU3VzcGVuZCBTdXBwb3J0CisjCisKK29iai0kKENPTkZJR19MT09OR1NPTl9TVVNQRU5EKSArPSBwbS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Jvbml0by1pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vYm9uaXRvLWlycS5jCmluZGV4IDNlMzFlN2EuLjJkYzJhNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vYm9uaXRvLWlycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vYm9uaXRvLWlycS5jCkBAIC0xMiwxOCArMTIsMTkgQEAKICAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib25pdG9faXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQogewotCUJPTklUT19JTlRFTlNFVCA9ICgxIDw8IChpcnEgLSBCT05JVE9fSVJRX0JBU0UpKTsKKwlMT09OR1NPTl9JTlRFTlNFVCA9ICgxIDw8IChpcnEgLSBMT09OR1NPTl9JUlFfQkFTRSkpOwogCW1taW93YigpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm9uaXRvX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JQk9OSVRPX0lOVEVOQ0xSID0gKDEgPDwgKGlycSAtIEJPTklUT19JUlFfQkFTRSkpOworCUxPT05HU09OX0lOVEVOQ0xSID0gKDEgPDwgKGlycSAtIExPT05HU09OX0lSUV9CQVNFKSk7CiAJbW1pb3diKCk7CiB9CiAKQEAgLTM1LDcgKzM2LDcgQEAKIAkudW5tYXNrCT0gYm9uaXRvX2lycV9lbmFibGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBkbWFfdGltZW91dF9pcnFhY3Rpb24gPSB7CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBfX21heWJlX3VudXNlZCBkbWFfdGltZW91dF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCiAJLm5hbWUJCT0gImRtYV90aW1lb3V0IiwKIH07CkBAIC00NCw4ICs0NSwxMCBAQAogewogCXUzMiBpOwogCi0JZm9yIChpID0gQk9OSVRPX0lSUV9CQVNFOyBpIDwgQk9OSVRPX0lSUV9CQVNFICsgMzI7IGkrKykKKwlmb3IgKGkgPSBMT09OR1NPTl9JUlFfQkFTRTsgaSA8IExPT05HU09OX0lSUV9CQVNFICsgMzI7IGkrKykKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZib25pdG9faXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCi0Jc2V0dXBfaXJxKEJPTklUT19JUlFfQkFTRSArIDEwLCAmZG1hX3RpbWVvdXRfaXJxYWN0aW9uKTsKKyNpZmRlZiBDT05GSUdfQ1BVX0xPT05HU09OMkUKKwlzZXR1cF9pcnEoTE9PTkdTT05fSVJRX0JBU0UgKyAxMCwgJmRtYV90aW1lb3V0X2lycWFjdGlvbik7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKaW5kZXggNzVmMWIyNC4uN2FkNDdmMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMKQEAgLTksNyArOSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KICAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtNDksNCArNDksNiBAQAogCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIGNvbnNvbGU9dHR5UzAsMTE1MjAwIik7CiAJaWYgKChzdHJzdHIoYXJjc19jbWRsaW5lLCAicm9vdD0iKSkgPT0gTlVMTCkKIAkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiByb290PS9kZXYvaGRhMSIpOworCisJcHJvbV9pbml0X21hY2h0eXBlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMGQ0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjIE1ha2VmaWxlIGZvciBDUzU1MzYgc3VwcG9ydC4KKyMKKworb2JqLSQoQ09ORklHX0NTNTUzNikgKz0gY3M1NTM2X3BjaS5vIGNzNTUzNl9pZGUubyBjczU1MzZfYWNjLm8gY3M1NTM2X29oY2kubyBcCisJCQljczU1MzZfaXNhLm8gY3M1NTM2X2VoY2kubworCisjCisjIEVuYWJsZSBjczU1MzYgbWZncHQgVGltZXIKKyMKK29iai0kKENPTkZJR19DUzU1MzZfTUZHUFQpICs9IGNzNTUzNl9tZmdwdC5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5NDg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIHRoZSBBQ0MgVmlydHVhbCBTdXBwb3J0IE1vZHVsZSBvZiBBTUQgQ1M1NTM2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKwordm9pZCBwY2lfYWNjX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsdWUpCit7CisJdTMyIGhpID0gMCwgbG8gPSB2YWx1ZTsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJX3JkbXNyKEdMSVVfTVNSX1JFRyhHTElVX1BBRSksICZoaSwgJmxvKTsKKwkJaWYgKHZhbHVlICYgUENJX0NPTU1BTkRfTUFTVEVSKQorCQkJbG8gfD0gKDB4MDMgPDwgOCk7CisJCWVsc2UKKwkJCWxvICY9IH4oMHgwMyA8PCA4KTsKKwkJX3dybXNyKEdMSVVfTVNSX1JFRyhHTElVX1BBRSksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX1NUQVRVUzoKKwkJaWYgKHZhbHVlICYgUENJX1NUQVRVU19QQVJJVFkpIHsKKwkJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQkJaWYgKGxvICYgU0JfUEFSRV9FUlJfRkxBRykgeworCQkJCWxvID0gKGxvICYgMHgwMDAwZmZmZikgfCBTQl9QQVJFX0VSUl9GTEFHOworCQkJCV93cm1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgaGksIGxvKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9CQVIwX1JFRzoKKwkJaWYgKHZhbHVlID09IFBDSV9CQVJfUkFOR0VfTUFTSykgeworCQkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCQkJbG8gfD0gU09GVF9CQVJfQUNDX0ZMQUc7CisJCQlfd3Jtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCBoaSwgbG8pOworCQl9IGVsc2UgaWYgKHZhbHVlICYgMHgwMSkgeworCQkJdmFsdWUgJj0gMHhmZmZmZmZmYzsKKwkJCWhpID0gMHhBMDAwMDAwMCB8ICgodmFsdWUgJiAweDAwMGZmMDAwKSA+PiAxMik7CisJCQlsbyA9IDB4MDAwZmZmODAgfCAoKHZhbHVlICYgMHgwMDAwMGZmZikgPDwgMjApOworCQkJX3dybXNyKEdMSVVfTVNSX1JFRyhHTElVX0lPRF9CTTEpLCBoaSwgbG8pOworCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0FDQ19JTlRfUkVHOgorCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhQSUNfWVNFTF9MT1cpLCAmaGksICZsbyk7CisJCS8qIGRpc2FibGUgYWxsIHRoZSB1c2IgaW50ZXJydXB0IGluIFBJQyAqLworCQlsbyAmPSB+KDB4ZiA8PCBQSUNfWVNFTF9MT1dfQUNDX1NISUZUKTsKKwkJaWYgKHZhbHVlKQkvKiBlbmFibGUgYWxsIHRoZSBhY2MgaW50ZXJydXB0IGluIFBJQyAqLworCQkJbG8gfD0gKENTNTUzNl9BQ0NfSU5UUiA8PCBQSUNfWVNFTF9MT1dfQUNDX1NISUZUKTsKKwkJX3dybXNyKERJVklMX01TUl9SRUcoUElDX1lTRUxfTE9XKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit1MzIgcGNpX2FjY19yZWFkX3JlZyhpbnQgcmVnKQoreworCXUzMiBoaSwgbG87CisJdTMyIGNvbmZfZGF0YSA9IDA7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX1ZFTkRPUl9JRDoKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfVkVORE9SX0lEKENTNTUzNl9BQ0NfREVWSUNFX0lELCBDUzU1MzZfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJX3JkbXNyKEdMSVVfTVNSX1JFRyhHTElVX0lPRF9CTTEpLCAmaGksICZsbyk7CisJCWlmICgoKGxvICYgMHhmZmYwMDAwMCkgfHwgKGhpICYgMHgwMDAwMDBmZikpCisJCSAgICAmJiAoKGhpICYgMHhmMDAwMDAwMCkgPT0gMHhhMDAwMDAwMCkpCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfSU87CisJCV9yZG1zcihHTElVX01TUl9SRUcoR0xJVV9QQUUpLCAmaGksICZsbyk7CisJCWlmICgobG8gJiAweDMwMCkgPT0gMHgzMDApCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfTUFTVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVEFUVVM6CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTXzY2TUhaOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19GQVNUX0JBQ0s7CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKQorCQkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfUEFSSVRZOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19ERVZTRUxfTUVESVVNOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19SRVZJU0lPTjoKKwkJX3JkbXNyKEFDQ19NU1JfUkVHKEFDQ19DQVApLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvICYgMHgwMDAwMDBmZjsKKwkJY29uZl9kYXRhIHw9IChDUzU1MzZfQUNDX0NMQVNTX0NPREUgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgUENJX0NBQ0hFX0xJTkVfU0laRToKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfQ0FDSEVfTElORV9TSVpFKFBDSV9OT1JNQUxfSEVBREVSX1RZUEUsCisJCQkJCSAgICBQQ0lfTk9STUFMX0xBVEVOQ1lfVElNRVIpOworCQlicmVhazsKKwljYXNlIFBDSV9CQVIwX1JFRzoKKwkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTT0ZUX0JBUl9BQ0NfRkxBRykgeworCQkJY29uZl9kYXRhID0gQ1M1NTM2X0FDQ19SQU5HRSB8CisJCQkgICAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTzsKKwkJCWxvICY9IH5TT0ZUX0JBUl9BQ0NfRkxBRzsKKwkJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJCX0gZWxzZSB7CisJCQlfcmRtc3IoR0xJVV9NU1JfUkVHKEdMSVVfSU9EX0JNMSksICZoaSwgJmxvKTsKKwkJCWNvbmZfZGF0YSA9IChoaSAmIDB4MDAwMDAwZmYpIDw8IDEyOworCQkJY29uZl9kYXRhIHw9IChsbyAmIDB4ZmZmMDAwMDApID4+IDIwOworCQkJY29uZl9kYXRhIHw9IDB4MDE7CisJCQljb25mX2RhdGEgJj0gfjB4MDI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0FDQ19TVUJfSUQsIENTNTUzNl9TVUJfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfUk9NX0FERFJFU1M6CisJCWNvbmZfZGF0YSA9IFBDSV9FWFBBTlNJT05fUk9NX0JBUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FQQUJJTElUWV9MSVNUOgorCQljb25mX2RhdGEgPSBQQ0lfQ0FQTElTVF9VU0JfUE9JTlRFUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSU5URVJSVVBUX0xJTkU6CisJCWNvbmZfZGF0YSA9CisJCSAgICBDRkdfUENJX0lOVEVSUlVQVF9MSU5FKFBDSV9ERUZBVUxUX1BJTiwgQ1M1NTM2X0FDQ19JTlRSKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbmZfZGF0YTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjljNTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogdGhlIEVIQ0kgVmlydHVhbCBTdXBwb3J0IE1vZHVsZSBvZiBBTUQgQ1M1NTM2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKwordm9pZCBwY2lfZWhjaV93cml0ZV9yZWcoaW50IHJlZywgdTMyIHZhbHVlKQoreworCXUzMiBoaSA9IDAsIGxvID0gdmFsdWU7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX0NPTU1BTkQ6CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksICZoaSwgJmxvKTsKKwkJaWYgKHZhbHVlICYgUENJX0NPTU1BTkRfTUFTVEVSKQorCQkJaGkgfD0gUENJX0NPTU1BTkRfTUFTVEVSOworCQllbHNlCisJCQloaSAmPSB+UENJX0NPTU1BTkRfTUFTVEVSOworCisJCWlmICh2YWx1ZSAmIFBDSV9DT01NQU5EX01FTU9SWSkKKwkJCWhpIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJZWxzZQorCQkJaGkgJj0gflBDSV9DT01NQU5EX01FTU9SWTsKKwkJX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9FSENJKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQlpZiAodmFsdWUgJiBQQ0lfU1RBVFVTX1BBUklUWSkgeworCQkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKSB7CisJCQkJbG8gPSAobG8gJiAweDAwMDBmZmZmKSB8IFNCX1BBUkVfRVJSX0ZMQUc7CisJCQkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlpZiAodmFsdWUgPT0gUENJX0JBUl9SQU5HRV9NQVNLKSB7CisJCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCQlsbyB8PSBTT0ZUX0JBUl9FSENJX0ZMQUc7CisJCQlfd3Jtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCBoaSwgbG8pOworCQl9IGVsc2UgaWYgKCh2YWx1ZSAmIDB4MDEpID09IDB4MDApIHsKKwkJCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksIGhpLCBsbyk7CisKKwkJCXZhbHVlICY9IDB4ZmZmZmZmZjA7CisJCQloaSA9IDB4NDAwMDAwMDAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMCkgPj4gMjQpOworCQkJbG8gPSAweDAwMGZmZmZmIHwgKCh2YWx1ZSAmIDB4MDBmZmYwMDApIDw8IDgpOworCQkJX3dybXNyKEdMSVVfTVNSX1JFRyhHTElVX1AyRF9CTTQpLCBoaSwgbG8pOworCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0VIQ0lfTEVHU01JRU5fUkVHOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCWhpICY9IDB4MDAzZjAwMDA7CisJCWhpIHw9ICh2YWx1ZSAmIDB4M2YpIDw8IDE2OworCQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCBoaSwgbG8pOworCQlicmVhazsKKwljYXNlIFBDSV9FSENJX0ZMQURKX1JFRzoKKwkJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9FSENJKSwgJmhpLCAmbG8pOworCQloaSAmPSB+MHgwMDAwM2YwMDsKKwkJaGkgfD0gdmFsdWUgJiAweDAwMDAzZjAwOworCQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCBoaSwgbG8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3UzMiBwY2lfZWhjaV9yZWFkX3JlZyhpbnQgcmVnKQoreworCXUzMiBjb25mX2RhdGEgPSAwOworCXUzMiBoaSwgbG87CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX1ZFTkRPUl9JRDoKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfVkVORE9SX0lEKENTNTUzNl9FSENJX0RFVklDRV9JRCwgQ1M1NTM2X1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX0NPTU1BTkQ6CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksICZoaSwgJmxvKTsKKwkJaWYgKGhpICYgUENJX0NPTU1BTkRfTUFTVEVSKQorCQkJY29uZl9kYXRhIHw9IFBDSV9DT01NQU5EX01BU1RFUjsKKwkJaWYgKGhpICYgUENJX0NPTU1BTkRfTUVNT1JZKQorCQkJY29uZl9kYXRhIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU182Nk1IWjsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfRkFTVF9CQUNLOworCQlfcmRtc3IoU0JfTVNSX1JFRyhTQl9FUlJPUiksICZoaSwgJmxvKTsKKwkJaWYgKGxvICYgU0JfUEFSRV9FUlJfRkxBRykKKwkJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTX1BBUklUWTsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfREVWU0VMX01FRElVTTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0xBU1NfUkVWSVNJT046CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfQ0FQKSwgJmhpLCAmbG8pOworCQljb25mX2RhdGEgPSBsbyAmIDB4MDAwMDAwZmY7CisJCWNvbmZfZGF0YSB8PSAoQ1M1NTM2X0VIQ0lfQ0xBU1NfQ09ERSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FDSEVfTElORV9TSVpFOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9DQUNIRV9MSU5FX1NJWkUoUENJX05PUk1BTF9IRUFERVJfVFlQRSwKKwkJCQkJICAgIFBDSV9OT1JNQUxfTEFURU5DWV9USU1FUik7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCWlmIChsbyAmIFNPRlRfQkFSX0VIQ0lfRkxBRykgeworCQkJY29uZl9kYXRhID0gQ1M1NTM2X0VIQ0lfUkFOR0UgfAorCQkJICAgIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfTUVNT1JZOworCQkJbG8gJj0gflNPRlRfQkFSX0VIQ0lfRkxBRzsKKwkJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJCX0gZWxzZSB7CisJCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCQljb25mX2RhdGEgPSBsbyAmIDB4ZmZmZmYwMDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0VIQ0lfU1VCX0lELCBDUzU1MzZfU1VCX1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX1JPTV9BRERSRVNTOgorCQljb25mX2RhdGEgPSBQQ0lfRVhQQU5TSU9OX1JPTV9CQVI7CisJCWJyZWFrOworCWNhc2UgUENJX0NBUEFCSUxJVFlfTElTVDoKKwkJY29uZl9kYXRhID0gUENJX0NBUExJU1RfVVNCX1BPSU5URVI7CisJCWJyZWFrOworCWNhc2UgUENJX0lOVEVSUlVQVF9MSU5FOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9JTlRFUlJVUFRfTElORShQQ0lfREVGQVVMVF9QSU4sIENTNTUzNl9VU0JfSU5UUik7CisJCWJyZWFrOworCWNhc2UgUENJX0VIQ0lfTEVHU01JRU5fUkVHOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IChoaSAmIDB4MDAzZjAwMDApID4+IDE2OworCQlicmVhazsKKwljYXNlIFBDSV9FSENJX0xFR1NNSVNUU19SRUc6CisJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfRUhDSSksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gKGhpICYgMHgzZjAwMDAwMCkgPj4gMjQ7CisJCWJyZWFrOworCWNhc2UgUENJX0VIQ0lfRkxBREpfUkVHOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0VIQ0kpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGhpICYgMHgwMDAwM2YwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbmZfZGF0YTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYxNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogdGhlIElERSBWaXJ0dWFsIFN1cHBvcnQgTW9kdWxlIG9mIEFNRCBDUzU1MzYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuCisgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGNzNTUzNi9jczU1MzYuaD4KKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2X3BjaS5oPgorCit2b2lkIHBjaV9pZGVfd3JpdGVfcmVnKGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IHZhbHVlOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBDSV9DT01NQU5EOgorCQlfcmRtc3IoR0xJVV9NU1JfUkVHKEdMSVVfUEFFKSwgJmhpLCAmbG8pOworCQlpZiAodmFsdWUgJiBQQ0lfQ09NTUFORF9NQVNURVIpCisJCQlsbyB8PSAoMHgwMyA8PCA0KTsKKwkJZWxzZQorCQkJbG8gJj0gfigweDAzIDw8IDQpOworCQlfd3Jtc3IoR0xJVV9NU1JfUkVHKEdMSVVfUEFFKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQlpZiAodmFsdWUgJiBQQ0lfU1RBVFVTX1BBUklUWSkgeworCQkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKSB7CisJCQkJbG8gPSAobG8gJiAweDAwMDBmZmZmKSB8IFNCX1BBUkVfRVJSX0ZMQUc7CisJCQkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0NBQ0hFX0xJTkVfU0laRToKKwkJdmFsdWUgJj0gMHgwMDAwZmYwMDsKKwkJX3JkbXNyKFNCX01TUl9SRUcoU0JfQ1RSTCksICZoaSwgJmxvKTsKKwkJaGkgJj0gMHhmZmZmZmYwMDsKKwkJaGkgfD0gKHZhbHVlID4+IDgpOworCQlfd3Jtc3IoU0JfTVNSX1JFRyhTQl9DVFJMKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFSNF9SRUc6CisJCWlmICh2YWx1ZSA9PSBQQ0lfQkFSX1JBTkdFX01BU0spIHsKKwkJCV9yZG1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksICZoaSwgJmxvKTsKKwkJCWxvIHw9IFNPRlRfQkFSX0lERV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIGlmICh2YWx1ZSAmIDB4MDEpIHsKKwkJCWxvID0gKHZhbHVlICYgMHhmZmZmZmZmMCkgfCAweDE7CisJCQlfd3Jtc3IoSURFX01TUl9SRUcoSURFX0lPX0JBUiksIGhpLCBsbyk7CisKKwkJCXZhbHVlICY9IDB4ZmZmZmZmZmM7CisJCQloaSA9IDB4NjAwMDAwMDAgfCAoKHZhbHVlICYgMHgwMDBmZjAwMCkgPj4gMTIpOworCQkJbG8gPSAweDAwMGZmZmYwIHwgKCh2YWx1ZSAmIDB4MDAwMDBmZmYpIDw8IDIwKTsKKwkJCV93cm1zcihHTElVX01TUl9SRUcoR0xJVV9JT0RfQk0yKSwgaGksIGxvKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9JREVfQ0ZHX1JFRzoKKwkJaWYgKHZhbHVlID09IENTNTUzNl9JREVfRkxBU0hfU0lHTkFUVVJFKSB7CisJCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9CQUxMX09QVFMpLCAmaGksICZsbyk7CisJCQlsbyB8PSAweDAxOworCQkJX3dybXNyKERJVklMX01TUl9SRUcoRElWSUxfQkFMTF9PUFRTKSwgaGksIGxvKTsKKwkJfSBlbHNlCisJCQlfd3Jtc3IoSURFX01TUl9SRUcoSURFX0NGRyksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX0lERV9EVENfUkVHOgorCQlfd3Jtc3IoSURFX01TUl9SRUcoSURFX0RUQyksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX0lERV9DQVNUX1JFRzoKKwkJX3dybXNyKElERV9NU1JfUkVHKElERV9DQVNUKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSURFX0VUQ19SRUc6CisJCV93cm1zcihJREVfTVNSX1JFRyhJREVfRVRDKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSURFX1BNX1JFRzoKKwkJX3dybXNyKElERV9NU1JfUkVHKElERV9JTlRFUk5BTF9QTSksIGhpLCBsbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordTMyIHBjaV9pZGVfcmVhZF9yZWcoaW50IHJlZykKK3sKKwl1MzIgY29uZl9kYXRhID0gMDsKKwl1MzIgaGksIGxvOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBDSV9WRU5ET1JfSUQ6CisJCWNvbmZfZGF0YSA9CisJCSAgICBDRkdfUENJX1ZFTkRPUl9JRChDUzU1MzZfSURFX0RFVklDRV9JRCwgQ1M1NTM2X1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX0NPTU1BTkQ6CisJCV9yZG1zcihJREVfTVNSX1JFRyhJREVfSU9fQkFSKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiAweGZmZmZmZmYwKQorCQkJY29uZl9kYXRhIHw9IFBDSV9DT01NQU5EX0lPOworCQlfcmRtc3IoR0xJVV9NU1JfUkVHKEdMSVVfUEFFKSwgJmhpLCAmbG8pOworCQlpZiAoKGxvICYgMHgzMCkgPT0gMHgzMCkKKwkJCWNvbmZfZGF0YSB8PSBQQ0lfQ09NTUFORF9NQVNURVI7CisJCWJyZWFrOworCWNhc2UgUENJX1NUQVRVUzoKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfNjZNSFo7CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTX0ZBU1RfQkFDSzsKKwkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCWlmIChsbyAmIFNCX1BBUkVfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19QQVJJVFk7CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTX0RFVlNFTF9NRURJVU07CisJCWJyZWFrOworCWNhc2UgUENJX0NMQVNTX1JFVklTSU9OOgorCQlfcmRtc3IoSURFX01TUl9SRUcoSURFX0NBUCksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG8gJiAweDAwMDAwMGZmOworCQljb25mX2RhdGEgfD0gKENTNTUzNl9JREVfQ0xBU1NfQ09ERSA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FDSEVfTElORV9TSVpFOgorCQlfcmRtc3IoU0JfTVNSX1JFRyhTQl9DVFJMKSwgJmhpLCAmbG8pOworCQloaSAmPSAweDAwMDAwMGY4OworCQljb25mX2RhdGEgPSBDRkdfUENJX0NBQ0hFX0xJTkVfU0laRShQQ0lfTk9STUFMX0hFQURFUl9UWVBFLCBoaSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjRfUkVHOgorCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCWlmIChsbyAmIFNPRlRfQkFSX0lERV9GTEFHKSB7CisJCQljb25mX2RhdGEgPSBDUzU1MzZfSURFX1JBTkdFIHwKKwkJCSAgICBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPOworCQkJbG8gJj0gflNPRlRfQkFSX0lERV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIHsKKwkJCV9yZG1zcihJREVfTVNSX1JFRyhJREVfSU9fQkFSKSwgJmhpLCAmbG8pOworCQkJY29uZl9kYXRhID0gbG8gJiAweGZmZmZmZmYwOworCQkJY29uZl9kYXRhIHw9IDB4MDE7CisJCQljb25mX2RhdGEgJj0gfjB4MDI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0lERV9TVUJfSUQsIENTNTUzNl9TVUJfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfUk9NX0FERFJFU1M6CisJCWNvbmZfZGF0YSA9IFBDSV9FWFBBTlNJT05fUk9NX0JBUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FQQUJJTElUWV9MSVNUOgorCQljb25mX2RhdGEgPSBQQ0lfQ0FQTElTVF9QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9JTlRFUlJVUFRfTElORToKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfSU5URVJSVVBUX0xJTkUoUENJX0RFRkFVTFRfUElOLCBDUzU1MzZfSURFX0lOVFIpOworCQlicmVhazsKKwljYXNlIFBDSV9JREVfQ0ZHX1JFRzoKKwkJX3JkbXNyKElERV9NU1JfUkVHKElERV9DRkcpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvOworCQlicmVhazsKKwljYXNlIFBDSV9JREVfRFRDX1JFRzoKKwkJX3JkbXNyKElERV9NU1JfUkVHKElERV9EVEMpLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvOworCQlicmVhazsKKwljYXNlIFBDSV9JREVfQ0FTVF9SRUc6CisJCV9yZG1zcihJREVfTVNSX1JFRyhJREVfQ0FTVCksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG87CisJCWJyZWFrOworCWNhc2UgUENJX0lERV9FVENfUkVHOgorCQlfcmRtc3IoSURFX01TUl9SRUcoSURFX0VUQyksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG87CisJY2FzZSBQQ0lfSURFX1BNX1JFRzoKKwkJX3JkbXNyKElERV9NU1JfUkVHKElERV9JTlRFUk5BTF9QTSksICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb25mX2RhdGE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmMTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYwpAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIHRoZSBJU0EgVmlydHVhbCBTdXBwb3J0IE1vZHVsZSBvZiBBTUQgQ1M1NTM2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLgorICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9wY2kuaD4KKworLyogY29tbW9uIHZhcmlhYmxlcyBmb3IgUENJX0lTQV9SRUFEL1dSSVRFX0JBUiAqLworc3RhdGljIGNvbnN0IHUzMiBkaXZpbF9tc3JfcmVnWzZdID0geworCURJVklMX01TUl9SRUcoRElWSUxfTEJBUl9TTUIpLCBESVZJTF9NU1JfUkVHKERJVklMX0xCQVJfR1BJTyksCisJRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX01GR1BUKSwgRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX0lSUSksCisJRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX1BNUyksIERJVklMX01TUl9SRUcoRElWSUxfTEJBUl9BQ1BJKSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc29mdF9iYXJfZmxhZ1s2XSA9IHsKKwlTT0ZUX0JBUl9TTUJfRkxBRywgU09GVF9CQVJfR1BJT19GTEFHLCBTT0ZUX0JBUl9NRkdQVF9GTEFHLAorCVNPRlRfQkFSX0lSUV9GTEFHLCBTT0ZUX0JBUl9QTVNfRkxBRywgU09GVF9CQVJfQUNQSV9GTEFHLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBzYl9tc3JfcmVnWzZdID0geworCVNCX01TUl9SRUcoU0JfUjApLCBTQl9NU1JfUkVHKFNCX1IxKSwgU0JfTVNSX1JFRyhTQl9SMiksCisJU0JfTVNSX1JFRyhTQl9SMyksIFNCX01TUl9SRUcoU0JfUjQpLCBTQl9NU1JfUkVHKFNCX1I1KSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYmFyX3NwYWNlX3JhbmdlWzZdID0geworCUNTNTUzNl9TTUJfUkFOR0UsIENTNTUzNl9HUElPX1JBTkdFLCBDUzU1MzZfTUZHUFRfUkFOR0UsCisJQ1M1NTM2X0lSUV9SQU5HRSwgQ1M1NTM2X1BNU19SQU5HRSwgQ1M1NTM2X0FDUElfUkFOR0UsCit9OworCitzdGF0aWMgY29uc3QgaW50IGJhcl9zcGFjZV9sZW5bNl0gPSB7CisJQ1M1NTM2X1NNQl9MRU5HVEgsIENTNTUzNl9HUElPX0xFTkdUSCwgQ1M1NTM2X01GR1BUX0xFTkdUSCwKKwlDUzU1MzZfSVJRX0xFTkdUSCwgQ1M1NTM2X1BNU19MRU5HVEgsIENTNTUzNl9BQ1BJX0xFTkdUSCwKK307CisKKy8qCisgKiBlbmFibGUgdGhlIGRpdmlsIG1vZHVsZSBiYXIgc3BhY2UuCisgKgorICogRm9yIGFsbCB0aGUgRElWSUwgbW9kdWxlIExCQVIsIHlvdSBzaG91bGQgY29udHJvbCB0aGUgRElWSUwgTEJBUiByZWcKKyAqIGFuZCB0aGUgUkNPTkZ4KDB+NSkgcmVnIHRvIHVzZSB0aGUgbW9kdWxlcy4KKyAqLworc3RhdGljIHZvaWQgZGl2aWxfbGJhcl9lbmFibGUodm9pZCkKK3sKKwl1MzIgaGksIGxvOworCWludCBvZmZzZXQ7CisKKwkvKgorCSAqIFRoZSBESVZJTCBJUlEgaXMgbm90IHVzZWQgeWV0LiBhbmQgbWFrZSB0aGUgUkNPTkYwIHJlc2VydmVkLgorCSAqLworCisJZm9yIChvZmZzZXQgPSBESVZJTF9MQkFSX1NNQjsgb2Zmc2V0IDw9IERJVklMX0xCQVJfUE1TOyBvZmZzZXQrKykgeworCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhvZmZzZXQpLCAmaGksICZsbyk7CisJCWhpIHw9IDB4MDE7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKERJVklMX0xCQVJfU01CKSwgaGksIGxvKTsKKwl9Cit9CisKKy8qCisgKiBkaXNhYmxlIHRoZSBkaXZpbCBtb2R1bGUgYmFyIHNwYWNlLgorICovCitzdGF0aWMgdm9pZCBkaXZpbF9sYmFyX2Rpc2FibGUodm9pZCkKK3sKKwl1MzIgaGksIGxvOworCWludCBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IERJVklMX0xCQVJfU01COyBvZmZzZXQgPD0gRElWSUxfTEJBUl9QTVM7IG9mZnNldCsrKSB7CisJCV9yZG1zcihESVZJTF9NU1JfUkVHKG9mZnNldCksICZoaSwgJmxvKTsKKwkJaGkgJj0gfjB4MDE7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKERJVklMX0xCQVJfU01CKSwgaGksIGxvKTsKKwl9Cit9CisKKy8qCisgKiBCQVIgd3JpdGU6IHdyaXRlIHZhbHVlIHRvIHRoZSBuIEJBUgorICovCisKK3ZvaWQgcGNpX2lzYV93cml0ZV9iYXIoaW50IG4sIHUzMiB2YWx1ZSkKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IHZhbHVlOworCisJaWYgKHZhbHVlID09IFBDSV9CQVJfUkFOR0VfTUFTSykgeworCQlfcmRtc3IoR0xDUF9NU1JfUkVHKEdMQ1BfU09GVF9DT00pLCAmaGksICZsbyk7CisJCWxvIHw9IHNvZnRfYmFyX2ZsYWdbbl07CisJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJfSBlbHNlIGlmICh2YWx1ZSAmIDB4MDEpIHsKKwkJLyogTkFUSVZFIHJlZyAqLworCQloaSA9IDB4MDAwMGYwMDE7CisJCWxvICY9IGJhcl9zcGFjZV9yYW5nZVtuXTsKKwkJX3dybXNyKGRpdmlsX21zcl9yZWdbbl0sIGhpLCBsbyk7CisKKwkJLyogUkNPTkZ4IGlzIDRieXRlcyBpbiB1bml0cyBmb3IgSS9PIHNwYWNlICovCisJCWhpID0gKCh2YWx1ZSAmIDB4MDAwZmZmZmMpIDw8IDEyKSB8CisJCSAgICAoKGJhcl9zcGFjZV9sZW5bbl0gLSA0KSA8PCAxMikgfCAweDAxOworCQlsbyA9ICgodmFsdWUgJiAweDAwMGZmZmZjKSA8PCAxMikgfCAweDAxOworCQlfd3Jtc3Ioc2JfbXNyX3JlZ1tuXSwgaGksIGxvKTsKKwl9Cit9CisKKy8qCisgKiBCQVIgcmVhZDogcmVhZCB0aGUgbiBCQVIKKyAqLworCit1MzIgcGNpX2lzYV9yZWFkX2JhcihpbnQgbikKK3sKKwl1MzIgY29uZl9kYXRhID0gMDsKKwl1MzIgaGksIGxvOworCisJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCWlmIChsbyAmIHNvZnRfYmFyX2ZsYWdbbl0pIHsKKwkJY29uZl9kYXRhID0gYmFyX3NwYWNlX3JhbmdlW25dIHwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTzsKKwkJbG8gJj0gfnNvZnRfYmFyX2ZsYWdbbl07CisJCV93cm1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksIGhpLCBsbyk7CisJfSBlbHNlIHsKKwkJX3JkbXNyKGRpdmlsX21zcl9yZWdbbl0sICZoaSwgJmxvKTsKKwkJY29uZl9kYXRhID0gbG8gJiBiYXJfc3BhY2VfcmFuZ2Vbbl07CisJCWNvbmZfZGF0YSB8PSAweDAxOworCQljb25mX2RhdGEgJj0gfjB4MDI7CisJfQorCXJldHVybiBjb25mX2RhdGE7Cit9CisKKy8qCisgKiBpc2Ffd3JpdGU6IElTQSB3cml0ZSB0cmFuc2ZlcgorICoKKyAqIFdlIGFzc3VtZSB0aGF0IHRoaXMgaXMgbm90IGEgYnVzIG1hc3RlciB0cmFuc2Zlci4KKyAqLwordm9pZCBwY2lfaXNhX3dyaXRlX3JlZyhpbnQgcmVnLCB1MzIgdmFsdWUpCit7CisJdTMyIGhpID0gMCwgbG8gPSB2YWx1ZTsKKwl1MzIgdGVtcDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJaWYgKHZhbHVlICYgUENJX0NPTU1BTkRfSU8pCisJCQlkaXZpbF9sYmFyX2VuYWJsZSgpOworCQllbHNlCisJCQlkaXZpbF9sYmFyX2Rpc2FibGUoKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQlfcmRtc3IoU0JfTVNSX1JFRyhTQl9FUlJPUiksICZoaSwgJmxvKTsKKwkJdGVtcCA9IGxvICYgMHgwMDAwZmZmZjsKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCkgJiYKKwkJICAgIChsbyAmIFNCX1RBU19FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9UQVNfRVJSX0ZMQUc7CisKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCkgJiYKKwkJICAgIChsbyAmIFNCX1RBUl9FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9UQVJfRVJSX0ZMQUc7CisKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkKKwkJICAgICYmIChsbyAmIFNCX01BUl9FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9NQVJfRVJSX0ZMQUc7CisKKwkJaWYgKCh2YWx1ZSAmIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZKQorCQkgICAgJiYgKGxvICYgU0JfUEFSRV9FUlJfRU4pKQorCQkJdGVtcCB8PSBTQl9QQVJFX0VSUl9GTEFHOworCisJCWxvID0gdGVtcDsKKwkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQlicmVhazsKKwljYXNlIFBDSV9DQUNIRV9MSU5FX1NJWkU6CisJCXZhbHVlICY9IDB4MDAwMGZmMDA7CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0NUUkwpLCAmaGksICZsbyk7CisJCWhpICY9IDB4ZmZmZmZmMDA7CisJCWhpIHw9ICh2YWx1ZSA+PiA4KTsKKwkJX3dybXNyKFNCX01TUl9SRUcoU0JfQ1RSTCksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigwLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjFfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigxLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjJfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigyLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjNfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2JhcigzLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjRfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2Jhcig0LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjVfUkVHOgorCQlwY2lfaXNhX3dyaXRlX2Jhcig1LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgUENJX1VBUlQxX0lOVF9SRUc6CisJCV9yZG1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0hJR0gpLCAmaGksICZsbyk7CisJCS8qIGRpc2FibGUgdWFydDEgaW50ZXJydXB0IGluIFBJQyAqLworCQlsbyAmPSB+KDB4ZiA8PCAyNCk7CisJCWlmICh2YWx1ZSkJLyogZW5hYmxlIHVhcnQxIGludGVycnVwdCBpbiBQSUMgKi8KKwkJCWxvIHw9IChDUzU1MzZfVUFSVDFfSU5UUiA8PCAyNCk7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0hJR0gpLCBoaSwgbG8pOworCQlicmVhazsKKwljYXNlIFBDSV9VQVJUMl9JTlRfUkVHOgorCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhQSUNfWVNFTF9ISUdIKSwgJmhpLCAmbG8pOworCQkvKiBkaXNhYmxlIHVhcnQyIGludGVycnVwdCBpbiBQSUMgKi8KKwkJbG8gJj0gfigweGYgPDwgMjgpOworCQlpZiAodmFsdWUpCS8qIGVuYWJsZSB1YXJ0MiBpbnRlcnJ1cHQgaW4gUElDICovCisJCQlsbyB8PSAoQ1M1NTM2X1VBUlQyX0lOVFIgPDwgMjgpOworCQlfd3Jtc3IoRElWSUxfTVNSX1JFRyhQSUNfWVNFTF9ISUdIKSwgaGksIGxvKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfSVNBX0ZJWFVQX1JFRzoKKwkJaWYgKHZhbHVlKSB7CisJCQkvKiBlbmFibGUgdGhlIFRBUkdFVCBBQk9SVC9NQVNURVIgQUJPUlQgZXRjLiAqLworCQkJX3JkbXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCAmaGksICZsbyk7CisJCQlsbyB8PSAweDAwMDAwMDYzOworCQkJX3dybXNyKFNCX01TUl9SRUcoU0JfRVJST1IpLCBoaSwgbG8pOworCQl9CisKKwlkZWZhdWx0OgorCQkvKiBBTEwgT1RIRVIgUENJIENPTkZJRyBTUEFDRSBIRUFERVIgSVMgTk9UIElNUExFTUVOVEVELiAqLworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBpc2FfcmVhZDogSVNBIHJlYWQgdHJhbnNmZXJzCisgKgorICogV2UgYXNzdW1lIHRoYXQgdGhpcyBpcyBub3QgYSBidXMgbWFzdGVyIHRyYW5zZmVyLgorICovCit1MzIgcGNpX2lzYV9yZWFkX3JlZyhpbnQgcmVnKQoreworCXUzMiBjb25mX2RhdGEgPSAwOworCXUzMiBoaSwgbG87CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENJX1ZFTkRPUl9JRDoKKwkJY29uZl9kYXRhID0KKwkJICAgIENGR19QQ0lfVkVORE9SX0lEKENTNTUzNl9JU0FfREVWSUNFX0lELCBDUzU1MzZfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJLyogd2UganVzdCBjaGVjayB0aGUgZmlyc3QgTEJBUiBmb3IgdGhlIElPIGVuYWJsZSBiaXQsICovCisJCS8qIG1heWJlIHdlIHNob3VsZCBjaGFuZ2VkIGxhdGVyLiAqLworCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX1NNQiksICZoaSwgJmxvKTsKKwkJaWYgKGhpICYgMHgwMSkKKwkJCWNvbmZfZGF0YSB8PSBQQ0lfQ09NTUFORF9JTzsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1RBVFVTOgorCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU182Nk1IWjsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfREVWU0VMX01FRElVTTsKKwkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfRkFTVF9CQUNLOworCisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTQl9UQVNfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUOworCQlpZiAobG8gJiBTQl9UQVJfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUOworCQlpZiAobG8gJiBTQl9NQVJfRVJSX0ZMQUcpCisJCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUOworCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKQorCQkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19SRVZJU0lPTjoKKwkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX0NISVBfUkVWX0lEKSwgJmhpLCAmbG8pOworCQljb25mX2RhdGEgPSBsbyAmIDB4MDAwMDAwZmY7CisJCWNvbmZfZGF0YSB8PSAoQ1M1NTM2X0lTQV9DTEFTU19DT0RFIDw8IDgpOworCQlicmVhazsKKwljYXNlIFBDSV9DQUNIRV9MSU5FX1NJWkU6CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0NUUkwpLCAmaGksICZsbyk7CisJCWhpICY9IDB4MDAwMDAwZjg7CisJCWNvbmZfZGF0YSA9IENGR19QQ0lfQ0FDSEVfTElORV9TSVpFKFBDSV9CUklER0VfSEVBREVSX1RZUEUsIGhpKTsKKwkJYnJlYWs7CisJCS8qCisJCSAqIHdlIG9ubHkgdXNlIHRoZSBMQkFSIG9mIERJVklMLCBubyBSQ09ORiB1c2VkLgorCQkgKiBhbGwgb2YgdGhlbSBhcmUgSU8gc3BhY2UuCisJCSAqLworCWNhc2UgUENJX0JBUjBfUkVHOgorCQlyZXR1cm4gcGNpX2lzYV9yZWFkX2JhcigwKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFSMV9SRUc6CisJCXJldHVybiBwY2lfaXNhX3JlYWRfYmFyKDEpOworCQlicmVhazsKKwljYXNlIFBDSV9CQVIyX1JFRzoKKwkJcmV0dXJuIHBjaV9pc2FfcmVhZF9iYXIoMik7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjNfUkVHOgorCQlicmVhazsKKwljYXNlIFBDSV9CQVI0X1JFRzoKKwkJcmV0dXJuIHBjaV9pc2FfcmVhZF9iYXIoNCk7CisJCWJyZWFrOworCWNhc2UgUENJX0JBUjVfUkVHOgorCQlyZXR1cm4gcGNpX2lzYV9yZWFkX2Jhcig1KTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X0lTQV9TVUJfSUQsIENTNTUzNl9TVUJfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfUk9NX0FERFJFU1M6CisJCWNvbmZfZGF0YSA9IFBDSV9FWFBBTlNJT05fUk9NX0JBUjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FQQUJJTElUWV9MSVNUOgorCQljb25mX2RhdGEgPSBQQ0lfQ0FQTElTVF9QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9JTlRFUlJVUFRfTElORToKKwkJLyogbm8gaW50ZXJydXB0IHVzZWQgaGVyZSAqLworCQljb25mX2RhdGEgPSBDRkdfUENJX0lOVEVSUlVQVF9MSU5FKDB4MDAsIDB4MDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29uZl9kYXRhOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I0NGRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDUzU1MzYgR2VuZXJhbCB0aW1lciBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBBdXRob3I6IFlhbmh1YSwgeWFuaEBsZW1vdGUuY29tCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IHpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiBSZWZlcmVuY2U6IEFNRCBHZW9kZShUTSkgQ1M1NTM2IENvbXBhbmlvbiBEZXZpY2UgRGF0YSBCb29rCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2X21mZ3B0Lmg+CisKK0RFRklORV9TUElOTE9DSyhtZmdwdF9sb2NrKTsKK0VYUE9SVF9TWU1CT0wobWZncHRfbG9jayk7CisKK3N0YXRpYyB1MzIgbWZncHRfYmFzZTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIE1GR1BUIHRpbWVyLgorICoKKyAqIFRoaXMgaXMgYWxzbyBjYWxsZWQgYWZ0ZXIgcmVzdW1lIHRvIGJyaW5nIHRoZSBNRkdQVCBpbnRvIG9wZXJhdGlvbiBhZ2Fpbi4KKyAqLworCisvKiBkaXNhYmxlIGNvdW50ZXIgKi8KK3ZvaWQgZGlzYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKQoreworCW91dHcoaW53KE1GR1BUMF9TRVRVUCkgJiAweDdmZmYsIE1GR1BUMF9TRVRVUCk7Cit9CitFWFBPUlRfU1lNQk9MKGRpc2FibGVfbWZncHQwX2NvdW50ZXIpOworCisvKiBlbmFibGUgY291bnRlciwgY29tcGFyYXRvcjIgdG8gZXZlbnQgbW9kZSwgMTQuMzE4TUh6IGNsb2NrICovCit2b2lkIGVuYWJsZV9tZmdwdDBfY291bnRlcih2b2lkKQoreworCW91dHcoMHhlMzEwLCBNRkdQVDBfU0VUVVApOworfQorRVhQT1JUX1NZTUJPTChlbmFibGVfbWZncHQwX2NvdW50ZXIpOworCitzdGF0aWMgdm9pZCBpbml0X21mZ3B0X3RpbWVyKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3Bpbl9sb2NrKCZtZmdwdF9sb2NrKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCW91dHcoQ09NUEFSRSwgTUZHUFQwX0NNUDIpOwkvKiBzZXQgY29tcGFyYXRvcjIgKi8KKwkJb3V0dygwLCBNRkdQVDBfQ05UKTsJLyogc2V0IGNvdW50ZXIgdG8gMCAqLworCQllbmFibGVfbWZncHQwX2NvdW50ZXIoKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCQlpZiAoZXZ0LT5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDIHx8CisJCSAgICBldnQtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCkKKwkJCWRpc2FibGVfbWZncHQwX2NvdW50ZXIoKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCS8qIFRoZSBvbmVzaG90IG1vZGUgaGF2ZSB2ZXJ5IGhpZ2ggZGV2aWF0aW9uLCBOb3QgdXNlIGl0ISAqLworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZtZmdwdF9sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbWZncHRfY2xvY2tldmVudCA9IHsKKwkubmFtZSA9ICJtZmdwdCIsCisJLmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsCisJLnNldF9tb2RlID0gaW5pdF9tZmdwdF90aW1lciwKKwkuaXJxID0gQ1M1NTM2X01GR1BUX0lOVFIsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgYmFzZWhpOworCisJLyoKKwkgKiBnZXQgTUZHUFQgYmFzZSBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBkbyBub3QgcmVtb3ZlIG1lLCBpdCdzIG5lZWQgZm9yIHRoZSB2YWx1ZSBvZiBtZmdwdF9iYXNlIGlzCisJICogdmFyaWFibGUKKwkgKi8KKwlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX01GR1BUKSwgJmJhc2VoaSwgJm1mZ3B0X2Jhc2UpOworCisJLyogYWNrICovCisJb3V0dyhpbncoTUZHUFQwX1NFVFVQKSB8IDB4NDAwMCwgTUZHUFQwX1NFVFVQKTsKKworCW1mZ3B0X2Nsb2NrZXZlbnQuZXZlbnRfaGFuZGxlcigmbWZncHRfY2xvY2tldmVudCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTUgPSB7CisJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAorCS5uYW1lID0gInRpbWVyIgorfTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNvbnZlcnNpb24gZmFjdG9yIGFuZCB0aGUgbWluL21heCBkZWx0YXMgb2YgdGhlIGNsb2NrIGV2ZW50CisgKiBzdHJ1Y3R1cmUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBzb3VyY2Ugd2l0aCB0aGUgZnJhbWV3b3JrLgorICovCit2b2lkIF9faW5pdCBzZXR1cF9tZmdwdDBfdGltZXIodm9pZCkKK3sKKwl1MzIgYmFzZWhpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkID0gJm1mZ3B0X2Nsb2NrZXZlbnQ7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWNkLT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOworCWNsb2NrZXZlbnRfc2V0X2Nsb2NrKGNkLCBNRkdQVF9USUNLX1JBVEUpOworCWNkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZiwgY2QpOworCWNkLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgY2QpOworCisJLyogRW5hYmxlIE1GR1BUMCBDb21wYXJhdG9yIDIgT3V0cHV0IHRvIHRoZSBJbnRlcnJ1cHQgTWFwcGVyICovCisJX3dybXNyKERJVklMX01TUl9SRUcoTUZHUFRfSVJRKSwgMCwgMHgxMDApOworCisJLyogRW5hYmxlIEludGVycnVwdCBHYXRlIDUgKi8KKwlfd3Jtc3IoRElWSUxfTVNSX1JFRyhQSUNfWlNFTF9MT1cpLCAwLCAweDUwMDAwKTsKKworCS8qIGdldCBNRkdQVCBiYXNlIGFkZHJlc3MgKi8KKwlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX01GR1BUKSwgJmJhc2VoaSwgJm1mZ3B0X2Jhc2UpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKKworCXNldHVwX2lycShDUzU1MzZfTUZHUFRfSU5UUiwgJmlycTUpOworfQorCisvKgorICogU2luY2UgdGhlIE1GR1BUIG92ZXJmbG93cyBldmVyeSB0aWNrLCBpdHMgbm90IHZlcnkgdXNlZnVsCisgKiB0byBqdXN0IHJlYWQgYnkgaXRzZWxmLiBTbyB1c2UgamlmZmllcyB0byBlbXVsYXRlIGEgZnJlZQorICogcnVubmluZyBjb3VudGVyOgorICovCitzdGF0aWMgY3ljbGVfdCBtZmdwdF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisJdTMyIGppZnM7CisJc3RhdGljIGludCBvbGRfY291bnQ7CisJc3RhdGljIHUzMiBvbGRfamlmczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZmdwdF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBBbHRob3VnaCBvdXIgY2FsbGVyIG1heSBoYXZlIHRoZSByZWFkIHNpZGUgb2YgeHRpbWVfbG9jaywKKwkgKiB0aGlzIGlzIG5vdyBhIHNlcWxvY2ssIGFuZCB3ZSBhcmUgY2hlYXRpbmcgaW4gdGhpcyByb3V0aW5lCisJICogYnkgaGF2aW5nIHNpZGUgZWZmZWN0cyBvbiBzdGF0ZSB0aGF0IHdlIGNhbm5vdCB1bmRvIGlmCisJICogdGhlcmUgaXMgYSBjb2xsaXNpb24gb24gdGhlIHNlcWxvY2sgYW5kIG91ciBjYWxsZXIgaGFzIHRvCisJICogcmV0cnkuICAoTmFtZWx5LCBvbGRfamlmcyBhbmQgb2xkX2NvdW50LikgIFNvIHdlIG11c3QgdHJlYXQKKwkgKiBqaWZmaWVzIGFzIHZvbGF0aWxlIGRlc3BpdGUgdGhlIGxvY2suICBXZSByZWFkIGppZmZpZXMKKwkgKiBiZWZvcmUgbGF0Y2hpbmcgdGhlIHRpbWVyIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGFsdGhvdWdoCisJICogdGhlIGppZmZpZXMgdmFsdWUgbWlnaHQgYmUgb2xkZXIgdGhhbiB0aGUgY291bnQgKHRoYXQgaXMsCisJICogdGhlIGNvdW50ZXIgbWF5IHVuZGVyZmxvdyBiZXR3ZWVuIHRoZSBsYXN0IHBvaW50IHdoZXJlCisJICogamlmZmllcyB3YXMgaW5jcmVtZW50ZWQgYW5kIHRoZSBwb2ludCB3aGVyZSB3ZSBsYXRjaCB0aGUKKwkgKiBjb3VudCksIGl0IGNhbm5vdCBiZSBuZXdlci4KKwkgKi8KKwlqaWZzID0gamlmZmllczsKKwkvKiByZWFkIHRoZSBjb3VudCAqLworCWNvdW50ID0gaW53KE1GR1BUMF9DTlQpOworCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIGZvciBjb3VudCB0byBhcHBlYXIgdG8gZ28gdGhlIHdyb25nIHdheSBmb3IgdGhpcworCSAqIHJlYXNvbjoKKwkgKgorCSAqICBUaGUgdGltZXIgY291bnRlciB1bmRlcmZsb3dzLCBidXQgd2UgaGF2ZW4ndCBoYW5kbGVkIHRoZSByZXN1bHRpbmcKKwkgKiAgaW50ZXJydXB0IGFuZCBpbmNyZW1lbnRlZCBqaWZmaWVzIHlldC4KKwkgKgorCSAqIFByZXZpb3VzIGF0dGVtcHRzIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBpbnRlbGxpZ2VudGx5IHdlcmUgYnVnZ3ksIHNvCisJICogd2UganVzdCBkbyB0aGUgc2ltcGxlIHRoaW5nIG5vdy4KKwkgKi8KKwlpZiAoY291bnQgPCBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKKwkJY291bnQgPSBvbGRfY291bnQ7CisKKwlvbGRfY291bnQgPSBjb3VudDsKKwlvbGRfamlmcyA9IGppZnM7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZmdwdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gKGN5Y2xlX3QpIChqaWZzICogQ09NUEFSRSkgKyBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9tZmdwdCA9IHsKKwkubmFtZSA9ICJtZmdwdCIsCisJLnJhdGluZyA9IDEyMCwgLyogRnVuY3Rpb25hbCBmb3IgcmVhbCB1c2UsIGJ1dCBub3QgZGVzaXJlZCAqLworCS5yZWFkID0gbWZncHRfcmVhZCwKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5tdWx0ID0gMCwKKwkuc2hpZnQgPSAyMiwKK307CisKK2ludCBfX2luaXQgaW5pdF9tZmdwdF9jbG9ja3NvdXJjZSh2b2lkKQoreworCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkJLyogTUZHUFQgZG9lcyBub3Qgc2NhbGUhICovCisJCXJldHVybiAwOworCisJY2xvY2tzb3VyY2VfbWZncHQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoTUZHUFRfVElDS19SQVRFLCAyMik7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9tZmdwdCk7Cit9CisKK2FyY2hfaW5pdGNhbGwoaW5pdF9tZmdwdF9jbG9ja3NvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmRiMDJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIHRoZSBPSENJIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUgb2YgQU1EIENTNTUzNgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4KKyAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNi5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfcGNpLmg+CisKK3ZvaWQgcGNpX29oY2lfd3JpdGVfcmVnKGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1MzIgaGkgPSAwLCBsbyA9IHZhbHVlOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBDSV9DT01NQU5EOgorCQlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX09IQ0kpLCAmaGksICZsbyk7CisJCWlmICh2YWx1ZSAmIFBDSV9DT01NQU5EX01BU1RFUikKKwkJCWhpIHw9IFBDSV9DT01NQU5EX01BU1RFUjsKKwkJZWxzZQorCQkJaGkgJj0gflBDSV9DT01NQU5EX01BU1RFUjsKKworCQlpZiAodmFsdWUgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCisJCQloaSB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7CisJCWVsc2UKKwkJCWhpICY9IH5QQ0lfQ09NTUFORF9NRU1PUlk7CisJCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfT0hDSSksIGhpLCBsbyk7CisJCWJyZWFrOworCWNhc2UgUENJX1NUQVRVUzoKKwkJaWYgKHZhbHVlICYgUENJX1NUQVRVU19QQVJJVFkpIHsKKwkJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQkJaWYgKGxvICYgU0JfUEFSRV9FUlJfRkxBRykgeworCQkJCWxvID0gKGxvICYgMHgwMDAwZmZmZikgfCBTQl9QQVJFX0VSUl9GTEFHOworCQkJCV93cm1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgaGksIGxvKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9CQVIwX1JFRzoKKwkJaWYgKHZhbHVlID09IFBDSV9CQVJfUkFOR0VfTUFTSykgeworCQkJX3JkbXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgJmhpLCAmbG8pOworCQkJbG8gfD0gU09GVF9CQVJfT0hDSV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIGlmICgodmFsdWUgJiAweDAxKSA9PSAweDAwKSB7CisJCQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX09IQ0kpLCBoaSwgbG8pOworCisJCQl2YWx1ZSAmPSAweGZmZmZmZmYwOworCQkJaGkgPSAweDQwMDAwMDAwIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKKwkJCWxvID0gMHgwMDBmZmZmZiB8ICgodmFsdWUgJiAweDAwZmZmMDAwKSA8PCA4KTsKKwkJCV93cm1zcihHTElVX01TUl9SRUcoR0xJVV9QMkRfQk0zKSwgaGksIGxvKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDSV9PSENJX0lOVF9SRUc6CisJCV9yZG1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0xPVyksICZoaSwgJmxvKTsKKwkJbG8gJj0gfigweGYgPDwgUElDX1lTRUxfTE9XX1VTQl9TSElGVCk7CisJCWlmICh2YWx1ZSkJLyogZW5hYmxlIGFsbCB0aGUgdXNiIGludGVycnVwdCBpbiBQSUMgKi8KKwkJCWxvIHw9IChDUzU1MzZfVVNCX0lOVFIgPDwgUElDX1lTRUxfTE9XX1VTQl9TSElGVCk7CisJCV93cm1zcihESVZJTF9NU1JfUkVHKFBJQ19ZU0VMX0xPVyksIGhpLCBsbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordTMyIHBjaV9vaGNpX3JlYWRfcmVnKGludCByZWcpCit7CisJdTMyIGNvbmZfZGF0YSA9IDA7CisJdTMyIGhpLCBsbzsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ0lfVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X09IQ0lfREVWSUNFX0lELCBDUzU1MzZfVkVORE9SX0lEKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ09NTUFORDoKKwkJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9PSENJKSwgJmhpLCAmbG8pOworCQlpZiAoaGkgJiBQQ0lfQ09NTUFORF9NQVNURVIpCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfTUFTVEVSOworCQlpZiAoaGkgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCisJCQljb25mX2RhdGEgfD0gUENJX0NPTU1BTkRfTUVNT1JZOworCQlicmVhazsKKwljYXNlIFBDSV9TVEFUVVM6CisJCWNvbmZfZGF0YSB8PSBQQ0lfU1RBVFVTXzY2TUhaOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19GQVNUX0JBQ0s7CisJCV9yZG1zcihTQl9NU1JfUkVHKFNCX0VSUk9SKSwgJmhpLCAmbG8pOworCQlpZiAobG8gJiBTQl9QQVJFX0VSUl9GTEFHKQorCQkJY29uZl9kYXRhIHw9IFBDSV9TVEFUVVNfUEFSSVRZOworCQljb25mX2RhdGEgfD0gUENJX1NUQVRVU19ERVZTRUxfTUVESVVNOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19SRVZJU0lPTjoKKwkJX3JkbXNyKFVTQl9NU1JfUkVHKFVTQl9DQVApLCAmaGksICZsbyk7CisJCWNvbmZfZGF0YSA9IGxvICYgMHgwMDAwMDBmZjsKKwkJY29uZl9kYXRhIHw9IChDUzU1MzZfT0hDSV9DTEFTU19DT0RFIDw8IDgpOworCQlicmVhazsKKwljYXNlIFBDSV9DQUNIRV9MSU5FX1NJWkU6CisJCWNvbmZfZGF0YSA9CisJCSAgICBDRkdfUENJX0NBQ0hFX0xJTkVfU0laRShQQ0lfTk9STUFMX0hFQURFUl9UWVBFLAorCQkJCQkgICAgUENJX05PUk1BTF9MQVRFTkNZX1RJTUVSKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFSMF9SRUc6CisJCV9yZG1zcihHTENQX01TUl9SRUcoR0xDUF9TT0ZUX0NPTSksICZoaSwgJmxvKTsKKwkJaWYgKGxvICYgU09GVF9CQVJfT0hDSV9GTEFHKSB7CisJCQljb25mX2RhdGEgPSBDUzU1MzZfT0hDSV9SQU5HRSB8CisJCQkgICAgUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlk7CisJCQlsbyAmPSB+U09GVF9CQVJfT0hDSV9GTEFHOworCQkJX3dybXNyKEdMQ1BfTVNSX1JFRyhHTENQX1NPRlRfQ09NKSwgaGksIGxvKTsKKwkJfSBlbHNlIHsKKwkJCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfT0hDSSksICZoaSwgJmxvKTsKKwkJCWNvbmZfZGF0YSA9IGxvICYgMHhmZmZmZmYwMDsKKwkJCWNvbmZfZGF0YSAmPSB+MHgwMDAwMDAwZjsJLyogMzJiaXQgbWVtICovCisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0FSREJVU19DSVM6CisJCWNvbmZfZGF0YSA9IFBDSV9DQVJEQlVTX0NJU19QT0lOVEVSOworCQlicmVhazsKKwljYXNlIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9WRU5ET1JfSUQoQ1M1NTM2X09IQ0lfU1VCX0lELCBDUzU1MzZfU1VCX1ZFTkRPUl9JRCk7CisJCWJyZWFrOworCWNhc2UgUENJX1JPTV9BRERSRVNTOgorCQljb25mX2RhdGEgPSBQQ0lfRVhQQU5TSU9OX1JPTV9CQVI7CisJCWJyZWFrOworCWNhc2UgUENJX0NBUEFCSUxJVFlfTElTVDoKKwkJY29uZl9kYXRhID0gUENJX0NBUExJU1RfVVNCX1BPSU5URVI7CisJCWJyZWFrOworCWNhc2UgUENJX0lOVEVSUlVQVF9MSU5FOgorCQljb25mX2RhdGEgPQorCQkgICAgQ0ZHX1BDSV9JTlRFUlJVUFRfTElORShQQ0lfREVGQVVMVF9QSU4sIENTNTUzNl9VU0JfSU5UUik7CisJCWJyZWFrOworCWNhc2UgUENJX09IQ0lfSU5UX1JFRzoKKwkJX3JkbXNyKERJVklMX01TUl9SRUcoUElDX1lTRUxfTE9XKSwgJmhpLCAmbG8pOworCQlpZiAoKGxvICYgMHgwMDAwMGYwMCkgPT0gQ1M1NTM2X1VTQl9JTlRSKQorCQkJY29uZl9kYXRhID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbmZfZGF0YTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjNmM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiByZWFkL3dyaXRlIG9wZXJhdGlvbiB0byB0aGUgUENJIGNvbmZpZyBzcGFjZSBvZiBDUzU1MzYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuCisgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJdGhlIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKSBmb3IgdmlydHVsaXppbmcgdGhlIFBDSQorICoJY29uZmlndXJlIHNwYWNlIGFyZSBkZWZpbmVkIGluIGNzNTUzNl9tb2R1bGVuYW1lLmMgcmVzcGVjdGl2ZWx5LAorICoKKyAqCWFmdGVyIHRoaXMgdmlydHVsaXppbmcsIHVzZXIgY2FuIGFjY2VzcyB0aGUgUENJIGNvbmZpZ3VyZSBzcGFjZQorICoJZGlyZWN0bHkgYXMgYSBub3JtYWwgbXVsdGktZnVuY3Rpb24gUENJIGRldmljZSB3aGljaCBmb2xsb3dzCisgKgl0aGUgUENJLTIuMiBzcGVjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfdnNtLmg+CisKK2VudW0geworCUNTNTUzNl9GVU5DX1NUQVJUID0gLTEsCisJQ1M1NTM2X0lTQV9GVU5DLAorCXJlc2VydmVkX2Z1bmMsCisJQ1M1NTM2X0lERV9GVU5DLAorCUNTNTUzNl9BQ0NfRlVOQywKKwlDUzU1MzZfT0hDSV9GVU5DLAorCUNTNTUzNl9FSENJX0ZVTkMsCisJQ1M1NTM2X0ZVTkNfRU5ELAorfTsKKworc3RhdGljIGNvbnN0IGNzNTUzNl9wY2lfdnNtX3dyaXRlIHZzbV9jb25mX3dyaXRlW10gPSB7CisJW0NTNTUzNl9JU0FfRlVOQ10JcGNpX2lzYV93cml0ZV9yZWcsCisJW3Jlc2VydmVkX2Z1bmNdCQlOVUxMLAorCVtDUzU1MzZfSURFX0ZVTkNdCXBjaV9pZGVfd3JpdGVfcmVnLAorCVtDUzU1MzZfQUNDX0ZVTkNdCXBjaV9hY2Nfd3JpdGVfcmVnLAorCVtDUzU1MzZfT0hDSV9GVU5DXQlwY2lfb2hjaV93cml0ZV9yZWcsCisJW0NTNTUzNl9FSENJX0ZVTkNdCXBjaV9laGNpX3dyaXRlX3JlZywKK307CisKK3N0YXRpYyBjb25zdCBjczU1MzZfcGNpX3ZzbV9yZWFkIHZzbV9jb25mX3JlYWRbXSA9IHsKKwlbQ1M1NTM2X0lTQV9GVU5DXQlwY2lfaXNhX3JlYWRfcmVnLAorCVtyZXNlcnZlZF9mdW5jXQkJTlVMTCwKKwlbQ1M1NTM2X0lERV9GVU5DXQlwY2lfaWRlX3JlYWRfcmVnLAorCVtDUzU1MzZfQUNDX0ZVTkNdCXBjaV9hY2NfcmVhZF9yZWcsCisJW0NTNTUzNl9PSENJX0ZVTkNdCXBjaV9vaGNpX3JlYWRfcmVnLAorCVtDUzU1MzZfRUhDSV9GVU5DXQlwY2lfZWhjaV9yZWFkX3JlZywKK307CisKKy8qCisgKiB3cml0ZSB0byBQQ0kgY29uZmlnIHNwYWNlIGFuZCB0cmFuc2ZlciBpdCB0byBNU1Igd3JpdGUuCisgKi8KK3ZvaWQgY3M1NTM2X3BjaV9jb25mX3dyaXRlNChpbnQgZnVuY3Rpb24sIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwlpZiAoKGZ1bmN0aW9uIDw9IENTNTUzNl9GVU5DX1NUQVJUKSB8fCAoZnVuY3Rpb24gPj0gQ1M1NTM2X0ZVTkNfRU5EKSkKKwkJcmV0dXJuOworCWlmICgocmVnIDwgMCkgfHwgKHJlZyA+IDB4MTAwKSB8fCAoKHJlZyAmIDB4MDMpICE9IDApKQorCQlyZXR1cm47CisKKwlpZiAodnNtX2NvbmZfd3JpdGVbZnVuY3Rpb25dICE9IE5VTEwpCisJCXZzbV9jb25mX3dyaXRlW2Z1bmN0aW9uXShyZWcsIHZhbHVlKTsKK30KKworLyoKKyAqIHJlYWQgUENJIGNvbmZpZyBzcGFjZSBhbmQgdHJhbnNmZXIgaXQgdG8gTVNSIGFjY2Vzcy4KKyAqLwordTMyIGNzNTUzNl9wY2lfY29uZl9yZWFkNChpbnQgZnVuY3Rpb24sIGludCByZWcpCit7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKChmdW5jdGlvbiA8PSBDUzU1MzZfRlVOQ19TVEFSVCkgfHwgKGZ1bmN0aW9uID49IENTNTUzNl9GVU5DX0VORCkpCisJCXJldHVybiAwOworCWlmICgocmVnIDwgMCkgfHwgKChyZWcgJiAweDAzKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHJlZyA+IDB4MTAwKQorCQlyZXR1cm4gMHhmZmZmZmZmZjsKKworCWlmICh2c21fY29uZl9yZWFkW2Z1bmN0aW9uXSAhPSBOVUxMKQorCQlkYXRhID0gdnNtX2NvbmZfcmVhZFtmdW5jdGlvbl0ocmVnKTsKKworCXJldHVybiBkYXRhOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKaW5kZXggYmM3M2VkYy4uMjNlN2E4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCkBAIC0xLDcgKzEsNyBAQAogLyogIGVhcmx5IHByaW50ayBzdXBwb3J0CiAgKgogICogIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IExlbW90ZSBJbmMuCiAgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTIsMjYgKzEyLDI5IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KLSNpbmNsdWRlIDxtYWNoaW5lLmg+CiAKICNkZWZpbmUgUE9SVChiYXNlLCBvZmZzZXQpICh1OCAqKShiYXNlICsgb2Zmc2V0KQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZXJpYWxfaW4ocGh5c19hZGRyX3QgYmFzZSwgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9pbih1bnNpZ25lZCBjaGFyICpiYXNlLCBpbnQgb2Zmc2V0KQogewogCXJldHVybiByZWFkYihQT1JUKGJhc2UsIG9mZnNldCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX291dChwaHlzX2FkZHJfdCBiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX291dCh1bnNpZ25lZCBjaGFyICpiYXNlLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJd3JpdGViKHZhbHVlLCBQT1JUKGJhc2UsIG9mZnNldCkpOwogfQogCiB2b2lkIHByb21fcHV0Y2hhcihjaGFyIGMpCiB7Ci0JcGh5c19hZGRyX3QgdWFydF9iYXNlID0KLQkJKHBoeXNfYWRkcl90KSBpb3JlbWFwX25vY2FjaGUoTE9PTkdTT05fVUFSVF9CQVNFLCA4KTsKKwlpbnQgdGltZW91dDsKKwl1bnNpZ25lZCBjaGFyICp1YXJ0X2Jhc2U7CiAKLQl3aGlsZSAoKHNlcmlhbF9pbih1YXJ0X2Jhc2UsIFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RIUkUpID09IDApCisJdWFydF9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKilfbG9vbmdzb25fdWFydF9iYXNlOworCXRpbWVvdXQgPSAxMDI0OworCisJd2hpbGUgKCgoc2VyaWFsX2luKHVhcnRfYmFzZSwgVUFSVF9MU1IpICYgVUFSVF9MU1JfVEhSRSkgPT0gMCkgJiYKKwkJCSh0aW1lb3V0LS0gPiAwKSkKIAkJOwogCiAJc2VyaWFsX291dCh1YXJ0X2Jhc2UsIFVBUlRfVFgsIGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKaW5kZXggYjllZjUwMy4uMTk2ZDk0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCkBAIC0xNywxMSArMTcsMTQgQEAKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogCiB1bnNpZ25lZCBsb25nIGJ1c19jbG9jaywgY3B1X2Nsb2NrX2ZyZXE7CitFWFBPUlRfU1lNQk9MKGNwdV9jbG9ja19mcmVxKTsKIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKIC8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYwppbmRleCAzYWJlOTI3Li5hMmFiZDkzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KICAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTAsMTkgKzEwLDI4IEBACiAKICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLQogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKKy8qIExvb25nc29uIENQVSBhZGRyZXNzIHdpbmRvd3MgY29uZmlnIHNwYWNlIGJhc2UgYWRkcmVzcyAqLwordW5zaWduZWQgbG9uZyBfX21heWJlX3VudXNlZCBfbG9vbmdzb25fYWRkcndpbmNmZ19iYXNlOworCiB2b2lkIF9faW5pdCBwcm9tX2luaXQodm9pZCkKIHsKLSAgICAvKiBpbml0IGJhc2UgYWRkcmVzcyBvZiBpbyBzcGFjZSAqLworCS8qIGluaXQgYmFzZSBhZGRyZXNzIG9mIGlvIHNwYWNlICovCiAJc2V0X2lvX3BvcnRfYmFzZSgodW5zaWduZWQgbG9uZykKLQkJaW9yZW1hcChCT05JVE9fUENJSU9fQkFTRSwgQk9OSVRPX1BDSUlPX1NJWkUpKTsKKwkJaW9yZW1hcChMT09OR1NPTl9QQ0lJT19CQVNFLCBMT09OR1NPTl9QQ0lJT19TSVpFKSk7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcKKwlfbG9vbmdzb25fYWRkcndpbmNmZ19iYXNlID0gKHVuc2lnbmVkIGxvbmcpCisJCWlvcmVtYXAoTE9PTkdTT05fQUREUldJTkNGR19CQVNFLCBMT09OR1NPTl9BRERSV0lOQ0ZHX1NJWkUpOworI2VuZGlmCiAKIAlwcm9tX2luaXRfY21kbGluZSgpOwogCXByb21faW5pdF9lbnYoKTsKIAlwcm9tX2luaXRfbWVtb3J5KCk7CisKKwkvKmluaXQgdGhlIHVhcnQgYmFzZSBhZGRyZXNzICovCisJcHJvbV9pbml0X3VhcnRfYmFzZSgpOwogfQogCiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCmluZGV4IGIzMmI0YTMuLjIwZTczMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwpAQCAtMjAsMjEgKzIwLDIxIEBACiAJaW50IGk7CiAKIAkvKiB3b3JrYXJvdW5kIHRoZSBJTyBkbWEgcHJvYmxlbTogbGV0IGNwdSBsb29waW5nIHRvIGFsbG93IERNQSBmaW5pc2ggKi8KLQlpbnRfc3RhdHVzID0gQk9OSVRPX0lOVElTUjsKKwlpbnRfc3RhdHVzID0gTE9PTkdTT05fSU5USVNSOwogCWlmIChpbnRfc3RhdHVzICYgKDEgPDwgMTApKSB7CiAJCXdoaWxlIChpbnRfc3RhdHVzICYgKDEgPDwgMTApKSB7CiAJCQl1ZGVsYXkoMSk7Ci0JCQlpbnRfc3RhdHVzID0gQk9OSVRPX0lOVElTUjsKKwkJCWludF9zdGF0dXMgPSBMT09OR1NPTl9JTlRJU1I7CiAJCX0KIAl9CiAKIAkvKiBHZXQgcGVuZGluZyBzb3VyY2VzLCBtYXNrZWQgYnkgY3VycmVudCBlbmFibGVzICovCi0JaW50X3N0YXR1cyA9IEJPTklUT19JTlRJU1IgJiBCT05JVE9fSU5URU47CisJaW50X3N0YXR1cyA9IExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOOwogCiAJaWYgKGludF9zdGF0dXMgIT0gMCkgewogCQlpID0gX19mZnMoaW50X3N0YXR1cyk7CiAJCWludF9zdGF0dXMgJj0gfigxIDw8IGkpOwotCQlkb19JUlEoQk9OSVRPX0lSUV9CQVNFICsgaSk7CisJCWRvX0lSUShMT09OR1NPTl9JUlFfQkFTRSArIGkpOwogCX0KIH0KIApAQCAtNjAsMTMgKzYwLDEzIEBACiAJc2V0X2lycV90cmlnZ2VyX21vZGUoKTsKIAogCS8qIG5vIHN0ZWVyICovCi0JQk9OSVRPX0lOVFNURUVSID0gMDsKKwlMT09OR1NPTl9JTlRTVEVFUiA9IDA7CiAKIAkvKgogCSAqIE1hc2sgb3V0IGFsbCBpbnRlcnJ1cHQgYnkgd3JpdGluZyAiMSIgdG8gYWxsIGJpdCBwb3NpdGlvbiBpbgogCSAqIHRoZSBpbnRlcnJ1cHQgcmVzZXQgcmVnLgogCSAqLwotCUJPTklUT19JTlRFTkNMUiA9IH4wOworCUxPT05HU09OX0lOVEVOQ0xSID0gfjA7CiAKIAkvKiBtYWNoaW5lIHNwZWNpZmljIGlycSBpbml0ICovCiAJbWFjaF9pbml0X2lycSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCmluZGV4IDdiMzQ4MjQuLjBlZDUyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKQEAgLTE1LDYgKzE1LDkgQEAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogI2luY2x1ZGUgPG1hY2hpbmUuaD4KIAorLyogcGxlYXNlIGVuc3VyZSB0aGUgbGVuZ3RoIG9mIHRoZSBtYWNodHlwZSBzdHJpbmcgaXMgbGVzcyB0aGFuIDUwICovCisjZGVmaW5lIE1BQ0hUWVBFX0xFTiA1MAorCiBzdGF0aWMgY29uc3QgY2hhciAqc3lzdGVtX3R5cGVzW10gPSB7CiAJW01BQ0hfTE9PTkdTT05fVU5LTk9XTl0gICAgICAgICAidW5rbm93biBsb29uZ3NvbiBtYWNoaW5lIiwKIAlbTUFDSF9MRU1PVEVfRkwyRV0gICAgICAgICAgICAgICJsZW1vdGUtZnVsb29uZy0yZS1ib3giLApAQCAtMjIsMjkgKzI1LDM1IEBACiAJW01BQ0hfTEVNT1RFX01MMkY3XSAgICAgICAgICAgICAibGVtb3RlLW1lbmdsb29uZy0yZi03aW5jaGVzIiwKIAlbTUFDSF9MRU1PVEVfWUwyRjg5XSAgICAgICAgICAgICJsZW1vdGUteWVlbG9vbmctMmYtOC45aW5jaGVzIiwKIAlbTUFDSF9ERVhYT05fR0RJVU0yRjEwXSAgICAgICAgICJkZXh4b24tZ2lkdW0tMmYtMTBpbmNoZXMiLAorCVtNQUNIX0xFTU9URV9OQVNdCQkibGVtb3RlLW5hcy0yZiIsCisJW01BQ0hfTEVNT1RFX0xMMkZdICAgICAgICAgICAgICAibGVtb3RlLWx5bmxvb25nLTJmIiwKIAlbTUFDSF9MT09OR1NPTl9FTkRdICAgICAgICAgICAgIE5VTEwsCiB9OwogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKLQlpZiAobWlwc19tYWNodHlwZSA9PSBNQUNIX1VOS05PV04pCi0JCW1pcHNfbWFjaHR5cGUgPSBMT09OR1NPTl9NQUNIVFlQRTsKLQogCXJldHVybiBzeXN0ZW1fdHlwZXNbbWlwc19tYWNodHlwZV07CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IG1hY2h0eXBlX3NldHVwKGNoYXIgKnN0cikKK3ZvaWQgX19pbml0IHByb21faW5pdF9tYWNodHlwZSh2b2lkKQogeworCWNoYXIgKnAsIHN0cltNQUNIVFlQRV9MRU5dOwogCWludCBtYWNodHlwZSA9IE1BQ0hfTEVNT1RFX0ZMMkU7CiAKLQlpZiAoIXN0cikKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWlwc19tYWNodHlwZSA9IExPT05HU09OX01BQ0hUWVBFOworCisJcCA9IHN0cnN0cihhcmNzX2NtZGxpbmUsICJtYWNodHlwZT0iKTsKKwlpZiAoIXApCisJCXJldHVybjsKKwlwICs9IHN0cmxlbigibWFjaHR5cGU9Iik7CisJc3RybmNweShzdHIsIHAsIE1BQ0hUWVBFX0xFTik7CisJcCA9IHN0cnN0cihzdHIsICIgIik7CisJaWYgKHApCisJCSpwID0gJ1wwJzsKIAogCWZvciAoOyBzeXN0ZW1fdHlwZXNbbWFjaHR5cGVdOyBtYWNodHlwZSsrKQogCQlpZiAoc3Ryc3RyKHN5c3RlbV90eXBlc1ttYWNodHlwZV0sIHN0cikpIHsKIAkJCW1pcHNfbWFjaHR5cGUgPSBtYWNodHlwZTsKIAkJCWJyZWFrOwogCQl9Ci0JcmV0dXJuIDA7CiB9Ci1fX3NldHVwKCJtYWNodHlwZT0iLCBtYWNodHlwZV9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYwppbmRleCBlOTRlZjE1Li5jZWFjZDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKQEAgLTEyLDE1ICsxMiw0MCBAQAogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KICNpbmNsdWRlIDxtZW0uaD4KKyNpbmNsdWRlIDxwY2kuaD4KIAogdm9pZCBfX2luaXQgcHJvbV9pbml0X21lbW9yeSh2b2lkKQogewogICAgIGFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgKG1lbXNpemUgPDwgMjApLCBCT09UX01FTV9SQU0pOworCisgICAgYWRkX21lbW9yeV9yZWdpb24obWVtc2l6ZSA8PCAyMCwgTE9PTkdTT05fUENJX01FTV9TVEFSVCAtIChtZW1zaXplIDw8CisJCQkgICAgMjApLCBCT09UX01FTV9SRVNFUlZFRCk7CisjaWZkZWYgQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHCisJeworCQlpbnQgYml0OworCisJCWJpdCA9IGZscyhtZW1zaXplICsgaGlnaG1lbXNpemUpOworCQlpZiAoYml0ICE9IGZmcyhtZW1zaXplICsgaGlnaG1lbXNpemUpKQorCQkJYml0ICs9IDIwOworCQllbHNlCisJCQliaXQgPSBiaXQgKyAyMCAtIDE7CisKKwkJLyogc2V0IGNwdSB3aW5kb3czIHRvIG1hcCBDUFUgdG8gRERSOiAyRyAtPiAyRyAqLworCQlMT09OR1NPTl9BRERSV0lOX0NQVVRPRERSKEFERFJXSU5fV0lOMywgMHg4MDAwMDAwMHVsLAorCQkJCQkgIDB4ODAwMDAwMDB1bCwgKDEgPDwgYml0KSk7CisJCW1taW93YigpOworCX0KKyNlbmRpZiAvKiAhQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHICovCisKICNpZmRlZiBDT05GSUdfNjRCSVQKLSAgICBpZiAoaGlnaG1lbXNpemUgPiAwKQotCWFkZF9tZW1vcnlfcmVnaW9uKExPT05HU09OX0hJR0hNRU1fU1RBUlQsCi0JCWhpZ2htZW1zaXplIDw8IDIwLCBCT09UX01FTV9SQU0pOwotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCWlmIChoaWdobWVtc2l6ZSA+IDApCisJCWFkZF9tZW1vcnlfcmVnaW9uKExPT05HU09OX0hJR0hNRU1fU1RBUlQsCisJCQkJICBoaWdobWVtc2l6ZSA8PCAyMCwgQk9PVF9NRU1fUkFNKTsKKworCWFkZF9tZW1vcnlfcmVnaW9uKExPT05HU09OX1BDSV9NRU1fRU5EICsgMSwgTE9PTkdTT05fSElHSE1FTV9TVEFSVCAtCisJCQkgIExPT05HU09OX1BDSV9NRU1fRU5EIC0gMSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCisjZW5kaWYgLyogIUNPTkZJR182NEJJVCAqLwogfQogCiAvKiBvdmVycmlkZSBvZiBhcmNoL21pcHMvbW0vY2FjaGUuYzogX191bmNhY2hlZF9hY2Nlc3MgKi8KQEAgLTMzLDMgKzU4LDYxIEBACiAJCSgoYWRkciA+PSBMT09OR1NPTl9NTUlPX01FTV9TVEFSVCkgJiYKIAkJIChhZGRyIDwgTE9PTkdTT05fTU1JT19NRU1fRU5EKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX1VOQ0FDSEVEX0FDQ0VMRVJBVEVECisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVjYV9zdGFydCwgdWNhX2VuZDsKKworcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBmbiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kID0gb2Zmc2V0ICsgc2l6ZTsKKworCWlmIChfX3VuY2FjaGVkX2FjY2VzcyhmaWxlLCBvZmZzZXQpKSB7CisJCWlmICgoKHVjYV9zdGFydCAmJiBvZmZzZXQpID49IHVjYV9zdGFydCkgJiYKKwkJICAgIChlbmQgPD0gdWNhX2VuZCkpCisJCQlyZXR1cm4gX19wZ3Byb3QoKHBncHJvdF92YWwodm1hX3Byb3QpICYKKwkJCQkJIH5fQ0FDSEVfTUFTSykgfAorCQkJCQlfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQpOworCQllbHNlCisJCQlyZXR1cm4gcGdwcm90X25vbmNhY2hlZCh2bWFfcHJvdCk7CisJfQorCXJldHVybiB2bWFfcHJvdDsKK30KKworc3RhdGljIGludCBfX2luaXQgZmluZF92Z2FfbWVtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGlkeDsKKworCWlmICh1Y2Ffc3RhcnQpCisJCXJldHVybiAwOworCisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKKwkJaWYgKChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkgeworCQkJZm9yIChpZHggPSAwOyBpZHggPCBQQ0lfTlVNX1JFU09VUkNFUzsgaWR4KyspIHsKKwkJCQlyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwkJCQlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJCQkJdWNhX3N0YXJ0ID0gci0+c3RhcnQ7CisJCQkJCXVjYV9lbmQgPSByLT5lbmQ7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGZpbmRfdmdhX21lbV9pbml0KTsKKyNlbmRpZiAvKiAhQ09ORklHX0NQVV9TVVBQT1JUU19VTkNBQ0hFRF9BQ0NFTEVSQVRFRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGNpLmMKaW5kZXggYTNhNGFiZi4uMzFkOGM1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BjaS5jCkBAIC0yNyw3ICsyNyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyICBsb29uZ3Nvbl9wY2lfY29udHJvbGxlciA9IHsKLQkucGNpX29wcyAgICAgICAgPSAmYm9uaXRvNjRfcGNpX29wcywKKwkucGNpX29wcyAgICAgICAgPSAmbG9vbmdzb25fcGNpX29wcywKIAkuaW9fcmVzb3VyY2UgICAgPSAmbG9vbmdzb25fcGNpX2lvX3Jlc291cmNlLAogCS5tZW1fcmVzb3VyY2UgICA9ICZsb29uZ3Nvbl9wY2lfbWVtX3Jlc291cmNlLAogCS5tZW1fb2Zmc2V0ICAgICA9IDB4MDAwMDAwMDBVTCwKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCSAqIHBjaW1hcDogUENJX01BUDIgIFBDSV9NZW1fTG8yIFBDSV9NZW1fTG8xIFBDSV9NZW1fTG8wCiAJICogCSAgICAgWzwyR10gICBbMzg0TSw0NDhNXSBbMzIwTSwzODRNXSBbME0sNjRNXQogCSAqLwotCUJPTklUT19QQ0lNQVAgPSBCT05JVE9fUENJTUFQX1BDSU1BUF8yIHwKLQkJQk9OSVRPX1BDSU1BUF9XSU4oMiwgQk9OSVRPX1BDSUxPMl9CQVNFKSB8Ci0JCUJPTklUT19QQ0lNQVBfV0lOKDEsIEJPTklUT19QQ0lMTzFfQkFTRSkgfAotCQlCT05JVE9fUENJTUFQX1dJTigwLCAwKTsKKwlMT09OR1NPTl9QQ0lNQVAgPSBMT09OR1NPTl9QQ0lNQVBfUENJTUFQXzIgfAorCQlMT09OR1NPTl9QQ0lNQVBfV0lOKDIsIExPT05HU09OX1BDSUxPMl9CQVNFKSB8CisJCUxPT05HU09OX1BDSU1BUF9XSU4oMSwgTE9PTkdTT05fUENJTE8xX0JBU0UpIHwKKwkJTE9PTkdTT05fUENJTUFQX1dJTigwLCAwKTsKIAogCS8qCiAJICogUENJLURNQSB0byBsb2NhbCBtYXBwaW5nOiBbMkcsMkcrMjU2TV0gLT4gWzBNLDI1Nk1dCiAJICovCi0JQk9OSVRPX1BDSUJBU0UwID0gMHg4MDAwMDAwMHVsOyAgIC8qIGJhc2U6IDJHIC0+IG1tYXA6IDBNICovCisJTE9PTkdTT05fUENJQkFTRTAgPSAweDgwMDAwMDAwdWw7ICAgLyogYmFzZTogMkcgLT4gbW1hcDogME0gKi8KIAkvKiBzaXplOiAyNTZNLCBidXJzdCB0cmFuc21pc3Npb24sIHByZS1mZXRjaCBlbmFibGUsIDY0Yml0ICovCiAJTE9PTkdTT05fUENJX0hJVDBfU0VMX0wgPSAweGMwMDAwMDBjdWw7CiAJTE9PTkdTT05fUENJX0hJVDBfU0VMX0ggPSAweGZmZmZmZmZmdWw7CkBAIC02Nyw2ICs2NywxNCBAQAogCS8qIGNhbiBub3QgY2hhbmdlIGdudCB0byBicmVhayBwY2kgdHJhbnNmZXIgd2hlbiBkZXZpY2UncyBnbnQgbm90CiAJZGVhc3NlcnQgZm9yIHNvbWUgYnJva2VuIGRldmljZSAqLwogCUxPT05HU09OX1BYQVJCX0NGRyA9IDB4MDBmZTAxMDV1bDsKKworI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRworCS8qCisJICogc2V0IGNwdSBhZGRyIHdpbmRvdzIgdG8gbWFwIENQVSBhZGRyZXNzIHNwYWNlIHRvIFBDSSBhZGRyZXNzIHNwYWNlCisJICovCisJTE9PTkdTT05fQUREUldJTl9DUFVUT1BDSShBRERSV0lOX1dJTjIsIExPT05HU09OX0NQVV9NRU1fU1JDLAorCQlMT09OR1NPTl9QQ0lfTUVNX0RTVCwgTU1BUF9DUFVUT1BDSV9TSVpFKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTgxNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsb29uZ3NvbjJfY3B1ZnJlcV9kZXZpY2UgPSB7CisJLm5hbWUgPSAibG9vbmdzb24yX2NwdWZyZXEiLAorCS5pZCA9IC0xLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbG9vbmdzb24yX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKworCS8qIE9ubHkgMkYgcmV2aXNpb24gYW5kIGl0J3Mgc3VjY2Vzc29ycyBzdXBwb3J0IENQVUZyZXEgKi8KKwlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIFBSSURfUkVWX01BU0spID49IFBSSURfUkVWX0xPT05HU09OMkYpCisJCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxvb25nc29uMl9jcHVmcmVxX2RldmljZSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworYXJjaF9pbml0Y2FsbChsb29uZ3NvbjJfY3B1ZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI1ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogbG9vbmdzb24tc3BlY2lmaWMgc3VzcGVuZCBzdXBwb3J0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19tYXliZV91bnVzZWQgY2FjaGVkX21hc3Rlcl9tYXNrOwkvKiBpODI1OUEgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19tYXliZV91bnVzZWQgY2FjaGVkX3NsYXZlX21hc2s7CitzdGF0aWMgdW5zaWduZWQgaW50IF9fbWF5YmVfdW51c2VkIGNhY2hlZF9ib25pdG9faXJxX21hc2s7IC8qIGJvbml0byAqLworCit2b2lkIGFyY2hfc3VzcGVuZF9kaXNhYmxlX2lycXModm9pZCkKK3sKKwkvKiBkaXNhYmxlIGFsbCBtaXBzIGV2ZW50cyAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKyNpZmRlZiBDT05GSUdfSTgyNTkKKwkvKiBkaXNhYmxlIGFsbCBldmVudHMgb2YgaTgyNTlBICovCisJY2FjaGVkX3NsYXZlX21hc2sgPSBpbmIoUElDX1NMQVZFX0lNUik7CisJY2FjaGVkX21hc3Rlcl9tYXNrID0gaW5iKFBJQ19NQVNURVJfSU1SKTsKKworCW91dGIoMHhmZiwgUElDX1NMQVZFX0lNUik7CisJaW5iKFBJQ19TTEFWRV9JTVIpOworCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOworCWluYihQSUNfTUFTVEVSX0lNUik7CisjZW5kaWYKKwkvKiBkaXNhYmxlIGFsbCBldmVudHMgb2YgYm9uaXRvICovCisJY2FjaGVkX2Jvbml0b19pcnFfbWFzayA9IExPT05HU09OX0lOVEVOOworCUxPT05HU09OX0lOVEVOQ0xSID0gMHhmZmZmOworCSh2b2lkKUxPT05HU09OX0lOVEVOQ0xSOworfQorCit2b2lkIGFyY2hfc3VzcGVuZF9lbmFibGVfaXJxcyh2b2lkKQoreworCS8qIGVuYWJsZSBhbGwgbWlwcyBldmVudHMgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisjaWZkZWYgQ09ORklHX0k4MjU5CisJLyogb25seSBlbmFibGUgdGhlIGNhY2hlZCBldmVudHMgb2YgaTgyNTlBICovCisJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CisJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsKKyNlbmRpZgorCS8qIGVuYWJsZSBhbGwgY2FjaGVkIGV2ZW50cyBvZiBib25pdG8gKi8KKwlMT09OR1NPTl9JTlRFTlNFVCA9IGNhY2hlZF9ib25pdG9faXJxX21hc2s7CisJKHZvaWQpTE9PTkdTT05fSU5URU5TRVQ7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYm9hcmQtc3BlY2lmaWMgZXZlbnRzIGZvciB3YWtpbmcgdXAgbG9vbmdzb24gZnJvbSB3YWl0IG1vZGUKKyAqLwordm9pZCBfX3dlYWsgc2V0dXBfd2FrZXVwX2V2ZW50cyh2b2lkKQoreworfQorCisvKgorICogQ2hlY2sgd2FrZXVwIGV2ZW50cworICovCitpbnQgX193ZWFrIHdha2V1cF9sb29uZ3Nvbih2b2lkKQoreworCXJldHVybiAxOworfQorCisvKgorICogSWYgdGhlIGV2ZW50cyBhcmUgcmVhbGx5IHdoYXQgd2Ugd2FudCB0byB3YWtldXAgdGhlIENQVSwgd2FrZSBpdCB1cAorICogb3RoZXJ3aXNlIHB1dCB0aGUgQ1BVIGFzbGVlcCBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgd2FpdF9mb3Jfd2FrZXVwX2V2ZW50cyh2b2lkKQoreworCXdoaWxlICghd2FrZXVwX2xvb25nc29uKCkpCisJCUxPT05HU09OX0NISVBDRkcwICY9IH4weDc7Cit9CisKKy8qCisgKiBTdG9wIGFsbCBwZXJmIGNvdW50ZXJzCisgKgorICogJDI0IGlzIHRoZSBjb250cm9sIHJlZ2lzdGVyIG9mIExvb25nc29uIHBlcmYgY291bnRlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9wZXJmX2NvdW50ZXJzKHZvaWQpCit7CisJX193cml0ZV82NGJpdF9jMF9yZWdpc3RlcigkMjQsIDAsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGxvb25nc29uX3N1c3BlbmRfZW50ZXIodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZF9jcHVfZnJlcTsKKworCS8qIHNldHVwIHdha2V1cCBldmVudHMgdmlhIGVuYWJsaW5nIHRoZSBJUlFzICovCisJc2V0dXBfd2FrZXVwX2V2ZW50cygpOworCisJc3RvcF9wZXJmX2NvdW50ZXJzKCk7CisKKwljYWNoZWRfY3B1X2ZyZXEgPSBMT09OR1NPTl9DSElQQ0ZHMDsKKworCS8qIFB1dCBDUFUgaW50byB3YWl0IG1vZGUgKi8KKwlMT09OR1NPTl9DSElQQ0ZHMCAmPSB+MHg3OworCisJLyogd2FpdCBmb3IgdGhlIGdpdmVuIGV2ZW50cyB0byB3YWtldXAgY3B1IGZyb20gd2FpdCBtb2RlICovCisJd2FpdF9mb3Jfd2FrZXVwX2V2ZW50cygpOworCisJTE9PTkdTT05fQ0hJUENGRzAgPSBjYWNoZWRfY3B1X2ZyZXE7CisJbW1pb3diKCk7Cit9CisKK3ZvaWQgX193ZWFrIG1hY2hfc3VzcGVuZCh2b2lkKQoreworfQorCit2b2lkIF9fd2VhayBtYWNoX3Jlc3VtZSh2b2lkKQoreworfQorCitzdGF0aWMgaW50IGxvb25nc29uX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwltYWNoX3N1c3BlbmQoKTsKKworCS8qIHByb2Nlc3NvciBzcGVjaWZpYyBzdXNwZW5kICovCisJbG9vbmdzb25fc3VzcGVuZF9lbnRlcigpOworCisJbWFjaF9yZXN1bWUoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvb25nc29uX3BtX3ZhbGlkX3N0YXRlKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX09OOgorCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGxvb25nc29uX3BtX29wcyA9IHsKKwkudmFsaWQJPSBsb29uZ3Nvbl9wbV92YWxpZF9zdGF0ZSwKKwkuZW50ZXIJPSBsb29uZ3Nvbl9wbV9lbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxvb25nc29uX3BtX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX3NldF9vcHMoJmxvb25nc29uX3BtX29wcyk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwobG9vbmdzb25fcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKaW5kZXggOTdlOTE4Mi4uZDU3ZjE3MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYwpAQCAtMjIsNyArMjIsNyBAQAogCW1hY2hfcHJlcGFyZV9yZWJvb3QoKTsKIAogCS8qIHJlYm9vdCB2aWEganVtcGluZyB0byBib290IGJhc2UgYWRkcmVzcyAqLwotCSgodm9pZCAoKikodm9pZCkpaW9yZW1hcF9ub2NhY2hlKEJPTklUT19CT09UX0JBU0UsIDQpKSAoKTsKKwkoKHZvaWQgKCopKHZvaWQpKWlvcmVtYXBfbm9jYWNoZShMT09OR1NPTl9CT09UX0JBU0UsIDQpKSAoKTsKIH0KIAogc3RhdGljIHZvaWQgbG9vbmdzb25faGFsdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNjZhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBZYW4gaHVhICh5YW5odWFAbGVtb3RlLmNvbSkKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gKHd1empAbGVtb3RlLmNvbSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSA8bG9vbmdzb24uaD4KKyNpbmNsdWRlIDxtYWNoaW5lLmg+CisKKyNkZWZpbmUgUE9SVChpbnQpCQkJXAorewkJCQkJCQkJXAorCS5pcnEJCT0gaW50LAkJCQkJXAorCS51YXJ0Y2xrCT0gMTg0MzIwMCwJCQkJXAorCS5pb3R5cGUJCT0gVVBJT19QT1JULAkJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAorCS5yZWdzaGlmdAk9IDAsCQkJCQlcCit9CisKKyNkZWZpbmUgUE9SVF9NKGludCkJCQkJXAorewkJCQkJCQkJXAorCS5pcnEJCT0gTUlQU19DUFVfSVJRX0JBU0UgKyAoaW50KSwJCVwKKwkudWFydGNsawk9IDM2ODY0MDAsCQkJCVwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCisJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopTlVMTCwJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAorCS5yZWdzaGlmdAk9IDAsCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgdWFydDgyNTBfZGF0YVtdWzJdID0geworCVtNQUNIX0xPT05HU09OX1VOS05PV05dICAgICAgICAge30sCisJW01BQ0hfTEVNT1RFX0ZMMkVdICAgICAgICAgICAgICB7UE9SVCg0KSwge30gfSwKKwlbTUFDSF9MRU1PVEVfRkwyRl0gICAgICAgICAgICAgIHtQT1JUKDMpLCB7fSB9LAorCVtNQUNIX0xFTU9URV9NTDJGN10gICAgICAgICAgICAge1BPUlRfTSgzKSwge30gfSwKKwlbTUFDSF9MRU1PVEVfWUwyRjg5XSAgICAgICAgICAgIHtQT1JUX00oMyksIHt9IH0sCisJW01BQ0hfREVYWE9OX0dESVVNMkYxMF0gICAgICAgICB7UE9SVF9NKDMpLCB7fSB9LAorCVtNQUNIX0xFTU9URV9OQVNdICAgICAgICAgICAgICAge1BPUlRfTSgzKSwge30gfSwKKwlbTUFDSF9MRU1PVEVfTEwyRl0gICAgICAgICAgICAgIHtQT1JUKDMpLCB7fSB9LAorCVtNQUNIX0xPT05HU09OX0VORF0gICAgICAgICAgICAge30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1YXJ0ODI1MF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2VyaWFsX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGlvdHlwZTsKKworCWlvdHlwZSA9IHVhcnQ4MjUwX2RhdGFbbWlwc19tYWNodHlwZV1bMF0uaW90eXBlOworCisJaWYgKFVQSU9fTUVNID09IGlvdHlwZSkKKwkJdWFydDgyNTBfZGF0YVttaXBzX21hY2h0eXBlXVswXS5tZW1iYXNlID0KKwkJCSh2b2lkIF9faW9tZW0gKilfbG9vbmdzb25fdWFydF9iYXNlOworCWVsc2UgaWYgKFVQSU9fUE9SVCA9PSBpb3R5cGUpCisJCXVhcnQ4MjUwX2RhdGFbbWlwc19tYWNodHlwZV1bMF0uaW9iYXNlID0KKwkJICAgIGxvb25nc29uX3VhcnRfYmFzZSAtIExPT05HU09OX1BDSUlPX0JBU0U7CisKKwl1YXJ0ODI1MF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSB1YXJ0ODI1MF9kYXRhW21pcHNfbWFjaHR5cGVdOworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWFydDgyNTBfZGV2aWNlKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNlcmlhbF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKaW5kZXggNmUwOGM4Mi4uMzVmMGI2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKQEAgLTE0LDExICsxNCwxNCBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfbWZncHQuaD4KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKIAkvKiBzZXR1cCBtaXBzIHI0ayB0aW1lciAqLwogCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNwdV9jbG9ja19mcmVxIC8gMjsKKworCXNldHVwX21mZ3B0MF90aW1lcigpOwogfQogCiB2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmZjY2YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCisvKiBpb3JlbWFwcGVkICovCit1bnNpZ25lZCBsb25nIF9sb29uZ3Nvbl91YXJ0X2Jhc2U7CitFWFBPUlRfU1lNQk9MKF9sb29uZ3Nvbl91YXJ0X2Jhc2UpOworLyogcmF3ICovCit1bnNpZ25lZCBsb25nIGxvb25nc29uX3VhcnRfYmFzZTsKK0VYUE9SVF9TWU1CT0wobG9vbmdzb25fdWFydF9iYXNlKTsKKwordm9pZCBwcm9tX2luaXRfbG9vbmdzb25fdWFydF9iYXNlKHZvaWQpCit7CisJc3dpdGNoIChtaXBzX21hY2h0eXBlKSB7CisJY2FzZSBNQUNIX0xFTU9URV9GTDJFOgorCQlsb29uZ3Nvbl91YXJ0X2Jhc2UgPSBMT09OR1NPTl9QQ0lJT19CQVNFICsgMHgzZjg7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfRkwyRjoKKwljYXNlIE1BQ0hfTEVNT1RFX0xMMkY6CisJCWxvb25nc29uX3VhcnRfYmFzZSA9IExPT05HU09OX1BDSUlPX0JBU0UgKyAweDJmODsKKwkJYnJlYWs7CisJY2FzZSBNQUNIX0xFTU9URV9NTDJGNzoKKwljYXNlIE1BQ0hfTEVNT1RFX1lMMkY4OToKKwljYXNlIE1BQ0hfREVYWE9OX0dESVVNMkYxMDoKKwljYXNlIE1BQ0hfTEVNT1RFX05BUzoKKwlkZWZhdWx0OgorCQkvKiBUaGUgQ1BVIHByb3ZpZGVkIHNlcmlhbCBwb3J0ICovCisJCWxvb25nc29uX3VhcnRfYmFzZSA9IExPT05HU09OX0xJTzFfQkFTRSArIDB4M2Y4OworCQlicmVhazsKKwl9CisKKwlfbG9vbmdzb25fdWFydF9iYXNlID0KKwkJKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGxvb25nc29uX3VhcnRfYmFzZSwgOCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9pcnEuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jCmluZGV4IDc4ODhjZjYuLjMyMGU5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL2lycS5jCkBAIC00Nyw4ICs0Nyw4IEBACiB2b2lkIF9faW5pdCBzZXRfaXJxX3RyaWdnZXJfbW9kZSh2b2lkKQogewogCS8qIG1vc3QgYm9uaXRvIGlycSBzaG91bGQgYmUgbGV2ZWwgdHJpZ2dlcmVkICovCi0JQk9OSVRPX0lOVEVER0UgPSBCT05JVE9fSUNVX1NZU1RFTUVSUiB8IEJPTklUT19JQ1VfTUFTVEVSRVJSIHwKLQkgICAgQk9OSVRPX0lDVV9SRVRSWUVSUiB8IEJPTklUT19JQ1VfTUJPWEVTOworCUxPT05HU09OX0lOVEVER0UgPSBMT09OR1NPTl9JQ1VfU1lTVEVNRVJSIHwgTE9PTkdTT05fSUNVX01BU1RFUkVSUiB8CisJICAgIExPT05HU09OX0lDVV9SRVRSWUVSUiB8IExPT05HU09OX0lDVV9NQk9YRVM7CiB9CiAKIHZvaWQgX19pbml0IG1hY2hfaW5pdF9pcnEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCmluZGV4IDY3N2ZlMTguLmZjMTZjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYwpAQCAtMTQsOCArMTQsOCBAQAogCiB2b2lkIG1hY2hfcHJlcGFyZV9yZWJvb3Qodm9pZCkKIHsKLQlCT05JVE9fQk9OR0VOQ0ZHICY9IH4oMSA8PCAyKTsKLQlCT05JVE9fQk9OR0VOQ0ZHIHw9ICgxIDw8IDIpOworCUxPT05HU09OX0dFTkNGRyAmPSB+KDEgPDwgMik7CisJTE9PTkdTT05fR0VOQ0ZHIHw9ICgxIDw8IDIpOwogfQogCiB2b2lkIG1hY2hfcHJlcGFyZV9zaHV0ZG93bih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4NGIyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgbGVtb3RlIGxvb25nc29uMmYgZmFtaWx5IG1hY2hpbmVzCisjCisKK29iai15ICs9IGlycS5vIHJlc2V0Lm8gZWNfa2IzMzEwYi5vCisKKyMKKyMgU3VzcGVuZCBTdXBwb3J0CisjCisKK29iai0kKENPTkZJR19MT09OR1NPTl9TVVNQRU5EKSArPSBwbS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkODQxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIEJhc2ljIEtCMzMxMEIgRW1iZWRkZWQgQ29udHJvbGxlciBzdXBwb3J0IGZvciB0aGUgWWVlTG9vbmcgMkYgbmV0Ym9vaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTGVtb3RlIEluYy4KKyAqICBBdXRob3I6IGxpdWpsIDxsaXVqbEBsZW1vdGUuY29tPiwgMjAwOC0wNC0yMAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImVjX2tiMzMxMGIuaCIKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpbmRleF9hY2Nlc3NfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBvcnRfYWNjZXNzX2xvY2spOworCit1bnNpZ25lZCBjaGFyIGVjX3JlYWQodW5zaWduZWQgc2hvcnQgYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5kZXhfYWNjZXNzX2xvY2ssIGZsYWdzKTsKKwlvdXRiKChhZGRyICYgMHhmZjAwKSA+PiA4LCBFQ19JT19QT1JUX0hJR0gpOworCW91dGIoKGFkZHIgJiAweDAwZmYpLCBFQ19JT19QT1JUX0xPVyk7CisJdmFsdWUgPSBpbmIoRUNfSU9fUE9SVF9EQVRBKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmRleF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZWNfcmVhZCk7CisKK3ZvaWQgZWNfd3JpdGUodW5zaWduZWQgc2hvcnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmRleF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCW91dGIoKGFkZHIgJiAweGZmMDApID4+IDgsIEVDX0lPX1BPUlRfSElHSCk7CisJb3V0YigoYWRkciAmIDB4MDBmZiksIEVDX0lPX1BPUlRfTE9XKTsKKwlvdXRiKHZhbCwgRUNfSU9fUE9SVF9EQVRBKTsKKwkvKiAgZmx1c2ggdGhlIHdyaXRlIGFjdGlvbiAqLworCWluYihFQ19JT19QT1JUX0RBVEEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZGV4X2FjY2Vzc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlY193cml0ZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIEVDIGNvbW1hbmQgd3JpdGVzIGFuZCBjb3JyZXNwb25kaW5nIHN0YXR1cyBxdWVyaWVzLgorICovCitpbnQgZWNfcXVlcnlfc2VxKHVuc2lnbmVkIGNoYXIgY21kKQoreworCWludCB0aW1lb3V0OworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBjaGlwIGdvdG8gcmVzZXQgbW9kZSAqLworCXVkZWxheShFQ19SRUdfREVMQVkpOworCW91dGIoY21kLCBFQ19DTURfUE9SVCk7CisJdWRlbGF5KEVDX1JFR19ERUxBWSk7CisKKwkvKiBjaGVjayBpZiB0aGUgY29tbWFuZCBpcyByZWNlaXZlZCBieSBlYyAqLworCXRpbWVvdXQgPSBFQ19DTURfVElNRU9VVDsKKwlzdGF0dXMgPSBpbmIoRUNfU1RTX1BPUlQpOworCXdoaWxlICh0aW1lb3V0LS0gJiYgKHN0YXR1cyAmICgxIDw8IDEpKSkgeworCQlzdGF0dXMgPSBpbmIoRUNfU1RTX1BPUlQpOworCQl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKKwl9CisKKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlYWRhYmxlIGVycm9yIDogdGltZW91dC4uLlxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAiKCV4LyVkKWVjIGlzc3VlZCBjb21tYW5kICVkIHN0YXR1cyA6IDB4JXhcbiIsCisJCQkgICB0aW1lb3V0LCBFQ19DTURfVElNRU9VVCAtIHRpbWVvdXQsIGNtZCwgc3RhdHVzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRfYWNjZXNzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlY19xdWVyeV9zZXEpOworCisvKgorICogU2VuZCBxdWVyeSBjb21tYW5kIHRvIEVDIHRvIGdldCB0aGUgcHJvcGVyIGV2ZW50IG51bWJlcgorICovCitpbnQgZWNfcXVlcnlfZXZlbnRfbnVtKHZvaWQpCit7CisJcmV0dXJuIGVjX3F1ZXJ5X3NlcShDTURfR0VUX0VWRU5UX05VTSk7Cit9CitFWFBPUlRfU1lNQk9MKGVjX3F1ZXJ5X2V2ZW50X251bSk7CisKKy8qCisgKiBHZXQgZXZlbnQgbnVtYmVyIGZyb20gRUMKKyAqCisgKiBOT1RFOiBUaGlzIHJvdXRpbmUgbXVzdCBmb2xsb3cgdGhlIHF1ZXJ5X2V2ZW50X251bSBmdW5jdGlvbiBpbiB0aGUKKyAqIGludGVycnVwdC4KKyAqLworaW50IGVjX2dldF9ldmVudF9udW0odm9pZCkKK3sKKwlpbnQgdGltZW91dCA9IDEwMDsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisJdWRlbGF5KEVDX1JFR19ERUxBWSk7CisJc3RhdHVzID0gaW5iKEVDX1NUU19QT1JUKTsKKwl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKKwl3aGlsZSAodGltZW91dC0tICYmICEoc3RhdHVzICYgKDEgPDwgMCkpKSB7CisJCXN0YXR1cyA9IGluYihFQ19TVFNfUE9SVCk7CisJCXVkZWxheShFQ19SRUdfREVMQVkpOworCX0KKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXByX2luZm8oIiVzOiBnZXQgZXZlbnQgbnVtYmVyIHRpbWVvdXQuXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZhbHVlID0gaW5iKEVDX0RBVF9QT1JUKTsKKwl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKKworCXJldHVybiB2YWx1ZTsKK30KK0VYUE9SVF9TWU1CT0woZWNfZ2V0X2V2ZW50X251bSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuaCBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OTVhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIEtCMzMxMEIgRW1iZWRkZWQgQ29udHJvbGxlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTGVtb3RlIEluYy4KKyAqICBBdXRob3I6IGxpdWpsIDxsaXVqbEBsZW1vdGUuY29tPiwgMjAwOC0wMy0xNAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfRUNfS0IzMzEwQl9ICisjZGVmaW5lIF9FQ19LQjMzMTBCX0gKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZWNfcmVhZCh1bnNpZ25lZCBzaG9ydCBhZGRyKTsKK2V4dGVybiB2b2lkIGVjX3dyaXRlKHVuc2lnbmVkIHNob3J0IGFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsKTsKK2V4dGVybiBpbnQgZWNfcXVlcnlfc2VxKHVuc2lnbmVkIGNoYXIgY21kKTsKK2V4dGVybiBpbnQgZWNfcXVlcnlfZXZlbnRfbnVtKHZvaWQpOworZXh0ZXJuIGludCBlY19nZXRfZXZlbnRfbnVtKHZvaWQpOworCit0eXBlZGVmIGludCAoKnNjaV9oYW5kbGVyKSAoaW50IHN0YXR1cyk7CitleHRlcm4gc2NpX2hhbmRsZXIgeWVlbG9vbmdfcmVwb3J0X2xpZF9zdGF0dXM7CisKKyNkZWZpbmUgU0NJX0lSUV9OVU0gMHgwQQorCisvKgorICogVGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGRldGVybWluZWQgYnkgdGhlIEVDIGluZGV4IGNvbmZpZ3VyYXRpb24uCisgKiAxLCBmaWxsIHRoZSBQT1JUX0hJR0ggYXMgRUMgcmVnaXN0ZXIgaGlnaCBwYXJ0LgorICogMiwgZmlsbCB0aGUgUE9SVF9MT1cgYXMgRUMgcmVnaXN0ZXIgbG93IHBhcnQuCisgKiAzLCBmaWxsIHRoZSBQT1JUX0RBVEEgYXMgRUMgcmVnaXN0ZXIgd3JpdGUgZGF0YSBvciBnZXQgdGhlIGRhdGEgZnJvbSBpdC4KKyAqLworI2RlZmluZQlFQ19JT19QT1JUX0hJR0gJMHgwMzgxCisjZGVmaW5lCUVDX0lPX1BPUlRfTE9XCTB4MDM4MgorI2RlZmluZQlFQ19JT19QT1JUX0RBVEEJMHgwMzgzCisKKy8qCisgKiBFQyBkZWxheSB0aW1lIGlzIDUwMHVzIGZvciByZWdpc3RlciBhbmQgc3RhdHVzIGFjY2VzcworICovCisjZGVmaW5lCUVDX1JFR19ERUxBWQk1MDAJLyogdW5pdCA6IHVzICovCisjZGVmaW5lCUVDX0NNRF9USU1FT1VUCTB4MTAwMAorCisvKgorICogRUMgYWNjZXNzIHBvcnQgZm9yIFNDSSBjb21tdW5pY2F0aW9uCisgKi8KKyNkZWZpbmUJRUNfQ01EX1BPUlQJCTB4NjYKKyNkZWZpbmUJRUNfU1RTX1BPUlQJCTB4NjYKKyNkZWZpbmUJRUNfREFUX1BPUlQJCTB4NjIKKyNkZWZpbmUJQ01EX0lOSVRfSURMRV9NT0RFCTB4ZGQKKyNkZWZpbmUJQ01EX0VYSVRfSURMRV9NT0RFCTB4ZGYKKyNkZWZpbmUJQ01EX0lOSVRfUkVTRVRfTU9ERQkweGQ4CisjZGVmaW5lCUNNRF9SRUJPT1RfU1lTVEVNCTB4OGMKKyNkZWZpbmUJQ01EX0dFVF9FVkVOVF9OVU0JMHg4NAorI2RlZmluZQlDTURfUFJPR1JBTV9QSUVDRQkweGRhCisKKy8qIHRlbXBlcmF0dXJlICYgZmFuIHJlZ2lzdGVycyAqLworI2RlZmluZQlSRUdfVEVNUEVSQVRVUkVfVkFMVUUJMHhGNDU4CisjZGVmaW5lCVJFR19GQU5fQVVUT19NQU5fU1dJVENIIDB4RjQ1OQorI2RlZmluZQlCSVRfRkFOX0FVVE8JCTAKKyNkZWZpbmUJQklUX0ZBTl9NQU5VQUwJCTEKKyNkZWZpbmUJUkVHX0ZBTl9DT05UUk9MCQkweEY0RDIKKyNkZWZpbmUJQklUX0ZBTl9DT05UUk9MX09OCSgxIDw8IDApCisjZGVmaW5lCUJJVF9GQU5fQ09OVFJPTF9PRkYJKDAgPDwgMCkKKyNkZWZpbmUJUkVHX0ZBTl9TVEFUVVMJCTB4RjREQQorI2RlZmluZQlCSVRfRkFOX1NUQVRVU19PTgkoMSA8PCAwKQorI2RlZmluZQlCSVRfRkFOX1NUQVRVU19PRkYJKDAgPDwgMCkKKyNkZWZpbmUJUkVHX0ZBTl9TUEVFRF9ISUdICTB4RkUyMgorI2RlZmluZQlSRUdfRkFOX1NQRUVEX0xPVwkweEZFMjMKKyNkZWZpbmUJUkVHX0ZBTl9TUEVFRF9MRVZFTAkweEY0Q0MKKy8qIGZhbiBzcGVlZCBkaXZpZGVyICovCisjZGVmaW5lCUZBTl9TUEVFRF9ESVZJREVSCTQ4MDAwMAkvKiAoNjAqMTAwMCoxMDAwLzYyLjUvMikqLworCisvKiBiYXR0ZXJ5IHJlZ2lzdGVycyAqLworI2RlZmluZQlSRUdfQkFUX0RFU0lHTl9DQVBfSElHSAkJMHhGNzdECisjZGVmaW5lCVJFR19CQVRfREVTSUdOX0NBUF9MT1cJCTB4Rjc3RQorI2RlZmluZQlSRUdfQkFUX0ZVTExDSEdfQ0FQX0hJR0gJMHhGNzgwCisjZGVmaW5lCVJFR19CQVRfRlVMTENIR19DQVBfTE9XCQkweEY3ODEKKyNkZWZpbmUJUkVHX0JBVF9ERVNJR05fVk9MX0hJR0gJCTB4Rjc4MgorI2RlZmluZQlSRUdfQkFUX0RFU0lHTl9WT0xfTE9XCQkweEY3ODMKKyNkZWZpbmUJUkVHX0JBVF9DVVJSRU5UX0hJR0gJCTB4Rjc4NAorI2RlZmluZQlSRUdfQkFUX0NVUlJFTlRfTE9XCQkweEY3ODUKKyNkZWZpbmUJUkVHX0JBVF9WT0xUQUdFX0hJR0gJCTB4Rjc4NgorI2RlZmluZQlSRUdfQkFUX1ZPTFRBR0VfTE9XCQkweEY3ODcKKyNkZWZpbmUJUkVHX0JBVF9URU1QRVJBVFVSRV9ISUdICTB4Rjc4OAorI2RlZmluZQlSRUdfQkFUX1RFTVBFUkFUVVJFX0xPVwkJMHhGNzg5CisjZGVmaW5lCVJFR19CQVRfUkVMQVRJVkVfQ0FQX0hJR0gJMHhGNDkyCisjZGVmaW5lCVJFR19CQVRfUkVMQVRJVkVfQ0FQX0xPVwkweEY0OTMKKyNkZWZpbmUJUkVHX0JBVF9WRU5ET1IJCQkweEY0QzQKKyNkZWZpbmUJRkxBR19CQVRfVkVORE9SX1NBTllPCQkweDAxCisjZGVmaW5lCUZMQUdfQkFUX1ZFTkRPUl9TSU1QTE8JCTB4MDIKKyNkZWZpbmUJUkVHX0JBVF9DRUxMX0NPVU5UCQkweEY0QzYKKyNkZWZpbmUJRkxBR19CQVRfQ0VMTF8zUzFQCQkweDAzCisjZGVmaW5lCUZMQUdfQkFUX0NFTExfM1MyUAkJMHgwNgorI2RlZmluZQlSRUdfQkFUX0NIQVJHRQkJCTB4RjRBMgorI2RlZmluZQlGTEFHX0JBVF9DSEFSR0VfRElTQ0hBUkdFCTB4MDEKKyNkZWZpbmUJRkxBR19CQVRfQ0hBUkdFX0NIQVJHRQkJMHgwMgorI2RlZmluZQlGTEFHX0JBVF9DSEFSR0VfQUNQT1dFUgkJMHgwMAorI2RlZmluZQlSRUdfQkFUX1NUQVRVUwkJCTB4RjRCMAorI2RlZmluZQlCSVRfQkFUX1NUQVRVU19MT1cJCSgxIDw8IDUpCisjZGVmaW5lCUJJVF9CQVRfU1RBVFVTX0RFU1RST1kJCSgxIDw8IDIpCisjZGVmaW5lCUJJVF9CQVRfU1RBVFVTX0ZVTEwJCSgxIDw8IDEpCisjZGVmaW5lCUJJVF9CQVRfU1RBVFVTX0lOCQkoMSA8PCAwKQorI2RlZmluZQlSRUdfQkFUX0NIQVJHRV9TVEFUVVMJCTB4RjRCMQorI2RlZmluZQlCSVRfQkFUX0NIQVJHRV9TVEFUVVNfT1ZFUlRFTVAJKDEgPDwgMikKKyNkZWZpbmUJQklUX0JBVF9DSEFSR0VfU1RBVFVTX1BSRUNIRwkoMSA8PCAxKQorI2RlZmluZQlSRUdfQkFUX1NUQVRFCQkJMHhGNDgyCisjZGVmaW5lCUJJVF9CQVRfU1RBVEVfQ0hBUkdJTkcJCSgxIDw8IDEpCisjZGVmaW5lCUJJVF9CQVRfU1RBVEVfRElTQ0hBUkdJTkcJKDEgPDwgMCkKKyNkZWZpbmUJUkVHX0JBVF9QT1dFUgkJCTB4RjQ0MAorI2RlZmluZQlCSVRfQkFUX1BPV0VSX1MzCQkoMSA8PCAyKQorI2RlZmluZQlCSVRfQkFUX1BPV0VSX09OCQkoMSA8PCAxKQorI2RlZmluZQlCSVRfQkFUX1BPV0VSX0FDSU4JCSgxIDw8IDApCisKKy8qIG90aGVyIHJlZ2lzdGVycyAqLworLyogQXVkaW86IHJkL3dyICovCisjZGVmaW5lCVJFR19BVURJT19WT0xVTUUJMHhGNDZDCisjZGVmaW5lCVJFR19BVURJT19NVVRFCQkweEY0RTcKKyNkZWZpbmUJUkVHX0FVRElPX0JFRVAJCTB4RjREMAorLyogVVNCIHBvcnQgcG93ZXIgb3Igbm90OiByZC93ciAqLworI2RlZmluZQlSRUdfVVNCMF9GTEFHCQkweEY0NjEKKyNkZWZpbmUJUkVHX1VTQjFfRkxBRwkJMHhGNDYyCisjZGVmaW5lCVJFR19VU0IyX0ZMQUcJCTB4RjQ2MworI2RlZmluZQlCSVRfVVNCX0ZMQUdfT04JCTEKKyNkZWZpbmUJQklUX1VTQl9GTEFHX09GRgkwCisvKiBMSUQgKi8KKyNkZWZpbmUJUkVHX0xJRF9ERVRFQ1QJCTB4RjRCRAorI2RlZmluZQlCSVRfTElEX0RFVEVDVF9PTgkxCisjZGVmaW5lCUJJVF9MSURfREVURUNUX09GRgkwCisvKiBDUlQgKi8KKyNkZWZpbmUJUkVHX0NSVF9ERVRFQ1QJCTB4RjRBRAorI2RlZmluZQlCSVRfQ1JUX0RFVEVDVF9QTFVHCTEKKyNkZWZpbmUJQklUX0NSVF9ERVRFQ1RfVU5QTFVHCTAKKy8qIExDRCBiYWNrbGlnaHQgYnJpZ2h0bmVzcyBhZGp1c3Q6IDkgbGV2ZWxzICovCisjZGVmaW5lCVJFR19ESVNQTEFZX0JSSUdIVE5FU1MJMHhGNEY1CisvKiBCbGFjayBzY3JlZW4gU3RhdHVzICovCisjZGVmaW5lCUJJVF9ESVNQTEFZX0xDRF9PTgkxCisjZGVmaW5lCUJJVF9ESVNQTEFZX0xDRF9PRkYJMAorLyogTENEIGJhY2tsaWdodCBjb250cm9sOiBvZmYvcmVzdG9yZSAqLworI2RlZmluZQlSRUdfQkFDS0xJR0hUX0NUUkwJMHhGN0JECisjZGVmaW5lCUJJVF9CQUNLTElHSFRfT04JMQorI2RlZmluZQlCSVRfQkFDS0xJR0hUX09GRgkwCisvKiBSZXNldCB0aGUgbWFjaGluZSBhdXRvLWNsZWFyOiByZC93ciAqLworI2RlZmluZQlSRUdfUkVTRVQJCTB4RjRFQworI2RlZmluZQlCSVRfUkVTRVRfT04JCTEKKy8qIExpZ2h0IHRoZSBsZWQ6IHJkL3dyICovCisjZGVmaW5lCVJFR19MRUQJCQkweEY0QzgKKyNkZWZpbmUJQklUX0xFRF9SRURfUE9XRVIJKDEgPDwgMCkKKyNkZWZpbmUJQklUX0xFRF9PUkFOR0VfUE9XRVIJKDEgPDwgMSkKKyNkZWZpbmUJQklUX0xFRF9HUkVFTl9DSEFSR0UJKDEgPDwgMikKKyNkZWZpbmUJQklUX0xFRF9SRURfQ0hBUkdFCSgxIDw8IDMpCisjZGVmaW5lCUJJVF9MRURfTlVNTE9DSwkJKDEgPDwgNCkKKy8qIFRlc3QgbGVkIG1vZGUsIGFsbCBsZWQgb24vb2ZmICovCisjZGVmaW5lCVJFR19MRURfVEVTVAkJMHhGNEMyCisjZGVmaW5lCUJJVF9MRURfVEVTVF9JTgkJMQorI2RlZmluZQlCSVRfTEVEX1RFU1RfT1VUCTAKKy8qIENhbWVyYSBvbi9vZmYgKi8KKyNkZWZpbmUJUkVHX0NBTUVSQV9TVEFUVVMJMHhGNDZBCisjZGVmaW5lCUJJVF9DQU1FUkFfU1RBVFVTX09OCTEKKyNkZWZpbmUJQklUX0NBTUVSQV9TVEFUVVNfT0ZGCTAKKyNkZWZpbmUJUkVHX0NBTUVSQV9DT05UUk9MCTB4RjdCNworI2RlZmluZQlCSVRfQ0FNRVJBX0NPTlRST0xfT0ZGCTAKKyNkZWZpbmUJQklUX0NBTUVSQV9DT05UUk9MX09OCTEKKy8qIFdsYW4gU3RhdHVzICovCisjZGVmaW5lCVJFR19XTEFOCQkweEY0RkEKKyNkZWZpbmUJQklUX1dMQU5fT04JCTEKKyNkZWZpbmUJQklUX1dMQU5fT0ZGCQkwCisjZGVmaW5lCVJFR19ESVNQTEFZX0xDRAkJMHhGNzlGCisKKy8qIFNDSSBFdmVudCBOdW1iZXIgZnJvbSBFQyAqLworZW51bSB7CisJRVZFTlRfTElEID0gMHgyMywJLyogIExJRCBvcGVuL2Nsb3NlICovCisJRVZFTlRfRElTUExBWV9UT0dHTEUsCS8qICBGbitGMyBmb3IgZGlzcGxheSBzd2l0Y2ggKi8KKwlFVkVOVF9TTEVFUCwJCS8qICBGbitGMSBmb3IgZW50ZXJpbmcgc2xlZXAgbW9kZSAqLworCUVWRU5UX09WRVJURU1QLAkJLyogIE92ZXItdGVtcGVyYXR1cmUgaGFwcGVuZWQgKi8KKwlFVkVOVF9DUlRfREVURUNULAkvKiAgQ1JUIGlzIGNvbm5lY3RlZCAqLworCUVWRU5UX0NBTUVSQSwJCS8qICBDYW1lcmEgb24vb2ZmICovCisJRVZFTlRfVVNCX09DMiwJCS8qICBVU0IyIE92ZXIgQ3VycmVudCBvY2N1cnJlZCAqLworCUVWRU5UX1VTQl9PQzAsCQkvKiAgVVNCMCBPdmVyIEN1cnJlbnQgb2NjdXJyZWQgKi8KKwlFVkVOVF9CTEFDS19TQ1JFRU4sCS8qICBUdXJuIG9uL29mZiBiYWNrbGlnaHQgKi8KKwlFVkVOVF9BVURJT19NVVRFLAkvKiAgTXV0ZSBvbi9vZmYgKi8KKwlFVkVOVF9ESVNQTEFZX0JSSUdIVE5FU1MsLyogTENEIGJhY2tsaWdodCBicmlnaHRuZXNzIGFkanVzdCAqLworCUVWRU5UX0FDX0JBVCwJCS8qICBBQyAmIEJhdHRlcnkgcmVsYXRpdmUgaXNzdWUgKi8KKwlFVkVOVF9BVURJT19WT0xVTUUsCS8qICBWb2x1bWUgYWRqdXN0ICovCisJRVZFTlRfV0xBTiwJCS8qICBXbGFuIG9uL29mZiAqLworCUVWRU5UX0VORAorfTsKKworI2VuZGlmIC8qICFfRUNfS0IzMzEwQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QzMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisjaW5jbHVkZSA8bWFjaGluZS5oPgorCisjZGVmaW5lIExPT05HU09OX1RJTUVSX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyA3KQkvKiBjcHUgdGltZXIgKi8KKyNkZWZpbmUgTE9PTkdTT05fUEVSRkNOVF9JUlEJKE1JUFNfQ1BVX0lSUV9CQVNFICsgNikJLyogY3B1IHBlcmYgY291bnRlciAqLworI2RlZmluZSBMT09OR1NPTl9OT1JUSF9CUklER0VfSVJRCShNSVBTX0NQVV9JUlFfQkFTRSArIDYpCS8qIGJvbml0byAqLworI2RlZmluZSBMT09OR1NPTl9VQVJUX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyAzKQkvKiBjcHUgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgTE9PTkdTT05fU09VVEhfQlJJREdFX0lSUQkoTUlQU19DUFVfSVJRX0JBU0UgKyAyKQkvKiBpODI1OSAqLworCisjZGVmaW5lIExPT05HU09OX0lOVF9CSVRfSU5UMAkJKDEgPDwgMTEpCisjZGVmaW5lIExPT05HU09OX0lOVF9CSVRfSU5UMQkJKDEgPDwgMTIpCisKKy8qCisgKiBUaGUgZ2VuZXJpYyBpODI1OV9pcnEoKSBtYWtlIHRoZSBrZXJuZWwgaGFuZyBvbiBib290aW5nLiAgU2luY2Ugd2UgY2Fubm90CisgKiBnZXQgdGhlIGlycSB2aWEgdGhlIElSUiBkaXJlY3RseSwgd2UgYWNjZXNzIHRoZSBJU1IgaW5zdGVhZC4KKyAqLworaW50IG1hY2hfaTgyNTlfaXJxKHZvaWQpCit7CisJaW50IGlycSwgaXNyOworCisJaXJxID0gLTE7CisKKwlpZiAoKExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOKSAmIExPT05HU09OX0lOVF9CSVRfSU5UMCkgeworCQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwkJaXNyID0gaW5iKFBJQ19NQVNURVJfQ01EKSAmCisJCQl+aW5iKFBJQ19NQVNURVJfSU1SKSAmIH4oMSA8PCBQSUNfQ0FTQ0FERV9JUik7CisJCWlmICghaXNyKQorCQkJaXNyID0gKGluYihQSUNfU0xBVkVfQ01EKSAmIH5pbmIoUElDX1NMQVZFX0lNUikpIDw8IDg7CisJCWlycSA9IGZmcyhpc3IpIC0gMTsKKwkJaWYgKHVubGlrZWx5KGlycSA9PSA3KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgbWF5IGJlIGEgc3B1cmlvdXMgaW50ZXJydXB0LgorCQkJICoKKwkJCSAqIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKElTUikuIElmIHRoZSBtb3N0CisJCQkgKiBzaWduaWZpY2FudCBiaXQgaXMgbm90IHNldCB0aGVuIHRoZXJlIGlzIG5vIHZhbGlkCisJCQkgKiBpbnRlcnJ1cHQuCisJCQkgKi8KKwkJCW91dGIoMHgwQiwgUElDX01BU1RFUl9JU1IpOwkvKiBJU1IgcmVnaXN0ZXIgKi8KKwkJCWlmICh+aW5iKFBJQ19NQVNURVJfSVNSKSAmIDB4ODApCisJCQkJaXJxID0gLTE7CisJCX0KKwkJc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKKwl9CisKKwlyZXR1cm4gaXJxOworfQorRVhQT1JUX1NZTUJPTChtYWNoX2k4MjU5X2lycSk7CisKK3N0YXRpYyB2b2lkIGk4MjU5X2lycWRpc3BhdGNoKHZvaWQpCit7CisJaW50IGlycTsKKworCWlycSA9IG1hY2hfaTgyNTlfaXJxKCk7CisJaWYgKGlycSA+PSAwKQorCQlkb19JUlEoaXJxKTsKKwllbHNlCisJCXNwdXJpb3VzX2ludGVycnVwdCgpOworfQorCit2b2lkIG1hY2hfaXJxX2Rpc3BhdGNoKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykKKwkJZG9fSVJRKExPT05HU09OX1RJTUVSX0lSUSk7CisJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDYpIHsJLyogTm9ydGggQnJpZGdlLCBQZXJmIGNvdW50ZXIgKi8KKyNpZmRlZiBDT05GSUdfT1BST0ZJTEUKKwkJZG9fSVJRKExPT05HU09OMl9QRVJGQ05UX0lSUSk7CisjZW5kaWYKKwkJYm9uaXRvX2lycWRpc3BhdGNoKCk7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykJLyogQ1BVIFVBUlQgKi8KKwkJZG9fSVJRKExPT05HU09OX1VBUlRfSVJRKTsKKwllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikJLyogU291dGggQnJpZGdlICovCisJCWk4MjU5X2lycWRpc3BhdGNoKCk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKK30KKwordm9pZCBfX2luaXQgc2V0X2lycV90cmlnZ2VyX21vZGUodm9pZCkKK3sKKwkvKiBzZXR1cCBjczU1MzYgYXMgaGlnaCBsZXZlbCB0cmlnZ2VyICovCisJTE9PTkdTT05fSU5UUE9MID0gTE9PTkdTT05fSU5UX0JJVF9JTlQwIHwgTE9PTkdTT05fSU5UX0JJVF9JTlQxOworCUxPT05HU09OX0lOVEVER0UgJj0gfihMT09OR1NPTl9JTlRfQklUX0lOVDAgfCBMT09OR1NPTl9JTlRfQklUX0lOVDEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXA2X2FjdGlvbihpbnQgY3BsLCB2b2lkICpkZXZfaWQpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdHJ1Y3QgaXJxYWN0aW9uIGlwNl9pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPSBpcDZfYWN0aW9uLAorCS5uYW1lID0gImNhc2NhZGUiLAorCS5mbGFncyA9IElSUUZfU0hBUkVELAorfTsKKworc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlciA9IG5vX2FjdGlvbiwKKwkubmFtZSA9ICJjYXNjYWRlIiwKK307CisKK3ZvaWQgX19pbml0IG1hY2hfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBpbml0IGFsbCBjb250cm9sbGVyCisJICogICAwLTE1ICAgICAgICAgLS0tLS0tPiBpODI1OSBpbnRlcnJ1cHQKKwkgKiAgIDE2LTIzICAgICAgICAtLS0tLS0+IG1pcHMgY3B1IGludGVycnVwdAorCSAqICAgMzItNjMgICAgICAgIC0tLS0tLT4gYm9uaXRvIGlycQorCSAqLworCisJLyogU2V0cyB0aGUgZmlyc3QtbGV2ZWwgaW50ZXJydXB0IGRpc3BhdGNoZXIuICovCisJbWlwc19jcHVfaXJxX2luaXQoKTsKKwlpbml0X2k4MjU5X2lycXMoKTsKKwlib25pdG9faXJxX2luaXQoKTsKKworCS8qIHNldHVwIG5vcnRoIGJyaWRnZSBpcnEgKGJvbml0bykgKi8KKwlzZXR1cF9pcnEoTE9PTkdTT05fTk9SVEhfQlJJREdFX0lSUSwgJmlwNl9pcnFhY3Rpb24pOworCS8qIHNldHVwIHNvdXJjZSBicmlkZ2UgaXJxIChpODI1OSkgKi8KKwlzZXR1cF9pcnEoTE9PTkdTT05fU09VVEhfQlJJREdFX0lSUSwgJmNhc2NhZGVfaXJxYWN0aW9uKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FmMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIExlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcycgc3BlY2lmaWMgc3VzcGVuZCBzdXBwb3J0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pODA0Mi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNl9tZmdwdC5oPgorI2luY2x1ZGUgImVjX2tiMzMxMGIuaCIKKworI2RlZmluZSBJODA0Ml9LQkRfSVJRCQkxCisjZGVmaW5lIEk4MDQyX0NUUl9LQkRJTlQJMHgwMQorI2RlZmluZSBJODA0Ml9DVFJfS0JERElTCTB4MTAKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaTgwNDJfY3RyOworCitzdGF0aWMgaW50IGk4MDQyX2VuYWJsZV9rYmRfcG9ydCh2b2lkKQoreworCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfUkNUUikpIHsKKwkJcHJfZXJyKCJpODA0Mi5jOiBDYW4ndCByZWFkIENUUiB3aGlsZSBlbmFibGluZyBpODA0MiBrYmQgcG9ydC4iCisJCSAgICAgICAiXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaTgwNDJfY3RyICY9IH5JODA0Ml9DVFJfS0JERElTOworCWk4MDQyX2N0ciB8PSBJODA0Ml9DVFJfS0JESU5UOworCisJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkgeworCQlpODA0Ml9jdHIgJj0gfkk4MDQyX0NUUl9LQkRJTlQ7CisJCWk4MDQyX2N0ciB8PSBJODA0Ml9DVFJfS0JERElTOworCQlwcl9lcnIoImk4MDQyLmM6IEZhaWxlZCB0byBlbmFibGUgS0JEIHBvcnQuXG4iKTsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXR1cF93YWtldXBfZXZlbnRzKHZvaWQpCit7CisJaW50IGlycV9tYXNrOworCisJc3dpdGNoIChtaXBzX21hY2h0eXBlKSB7CisJY2FzZSBNQUNIX0xFTU9URV9NTDJGNzoKKwljYXNlIE1BQ0hfTEVNT1RFX1lMMkY4OToKKwkJLyogb3BlbiB0aGUga2V5Ym9hcmQgaXJxIGluIGk4MjU5QSAqLworCQlvdXRiKCgweGZmICYgfigxIDw8IEk4MDQyX0tCRF9JUlEpKSwgUElDX01BU1RFUl9JTVIpOworCQlpcnFfbWFzayA9IGluYihQSUNfTUFTVEVSX0lNUik7CisKKwkJLyogZW5hYmxlIGtleWJvYXJkIHBvcnQgKi8KKwkJaTgwNDJfZW5hYmxlX2tiZF9wb3J0KCk7CisKKwkJLyogV2FrZXVwIENQVSB2aWEgU0NJIGxpZCBvcGVuIGV2ZW50ICovCisJCW91dGIoaXJxX21hc2sgJiB+KDEgPDwgUElDX0NBU0NBREVfSVIpLCBQSUNfTUFTVEVSX0lNUik7CisJCWluYihQSUNfTUFTVEVSX0lNUik7CisJCW91dGIoMHhmZiAmIH4oMSA8PCAoU0NJX0lSUV9OVU0gLSA4KSksIFBJQ19TTEFWRV9JTVIpOworCQlpbmIoUElDX1NMQVZFX0lNUik7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIGxpZF90YXNrOworc3RhdGljIGludCBpbml0aWFsaXplZDsKKy8qIHllZWxvb25nX3JlcG9ydF9saWRfc3RhdHVzIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4geWVlbG9vbmdfbGFwdG9wLmMgKi8KK3NjaV9oYW5kbGVyIHllZWxvb25nX3JlcG9ydF9saWRfc3RhdHVzOworRVhQT1JUX1NZTUJPTCh5ZWVsb29uZ19yZXBvcnRfbGlkX3N0YXR1cyk7CitzdGF0aWMgdm9pZCB5ZWVsb29uZ19saWRfdXBkYXRlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWlmICh5ZWVsb29uZ19yZXBvcnRfbGlkX3N0YXR1cykKKwkJeWVlbG9vbmdfcmVwb3J0X2xpZF9zdGF0dXMoQklUX0xJRF9ERVRFQ1RfT04pOworfQorCitpbnQgd2FrZXVwX2xvb25nc29uKHZvaWQpCit7CisJaW50IGlycTsKKworCS8qIHF1ZXJ5IHRoZSBpbnRlcnJ1cHQgbnVtYmVyICovCisJaXJxID0gbWFjaF9pODI1OV9pcnEoKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogaXJxID0gJWRcbiIsIF9fZnVuY19fLCBpcnEpOworCisJaWYgKGlycSA9PSBJODA0Ml9LQkRfSVJRKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChpcnEgPT0gU0NJX0lSUV9OVU0pIHsKKwkJaW50IHJldCwgc2NpX2V2ZW50OworCQkvKiBxdWVyeSB0aGUgZXZlbnQgbnVtYmVyICovCisJCXJldCA9IGVjX3F1ZXJ5X3NlcShDTURfR0VUX0VWRU5UX05VTSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIDA7CisJCXNjaV9ldmVudCA9IGVjX2dldF9ldmVudF9udW0oKTsKKwkJaWYgKHNjaV9ldmVudCA8IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHNjaV9ldmVudCA9PSBFVkVOVF9MSUQpIHsKKwkJCWludCBsaWRfc3RhdHVzOworCQkJLyogY2hlY2sgdGhlIExJRCBzdGF0dXMgKi8KKwkJCWxpZF9zdGF0dXMgPSBlY19yZWFkKFJFR19MSURfREVURUNUKTsKKwkJCS8qIHdha2V1cCBjcHUgd2hlbiBwZW9wbGUgb3BlbiB0aGUgTElEICovCisJCQlpZiAobGlkX3N0YXR1cyA9PSBCSVRfTElEX0RFVEVDVF9PTikgeworCQkJCS8qIElmIHdlIGNhbGwgaXQgZGlyZWN0bHkgaGVyZSwgdGhlIFdBUk5JTkcKKwkJCQkgKiB3aWxsIGJlIHNlbnQgb3V0IGJ5IGdldG5zdGltZW9mZGF5CisJCQkJICogdmlhICJXQVJOX09OKHRpbWVrZWVwaW5nX3N1c3BlbmRlZCk7IgorCQkJCSAqIGJlY2F1c2Ugd2UgY2FuIG5vdCBzY2hlZHVsZSBpbiBzdXNwZW5kIG1vZGUuCisJCQkJICovCisJCQkJaWYgKGluaXRpYWxpemVkID09IDApIHsKKwkJCQkJSU5JVF9ERUxBWUVEX1dPUksoJmxpZF90YXNrLAorCQkJCQkJeWVlbG9vbmdfbGlkX3VwZGF0ZV90YXNrKTsKKwkJCQkJaW5pdGlhbGl6ZWQgPSAxOworCQkJCX0KKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmxpZF90YXNrLCAxKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCit2b2lkIF9fd2VhayBtYWNoX3N1c3BlbmQodm9pZCkKK3sKKwlkaXNhYmxlX21mZ3B0MF9jb3VudGVyKCk7Cit9CisKK3ZvaWQgX193ZWFrIG1hY2hfcmVzdW1lKHZvaWQpCit7CisJZW5hYmxlX21mZ3B0MF9jb3VudGVyKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkMWE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYwpAQCAtMCwwICsxLDE1OSBAQAorLyogQm9hcmQtc3BlY2lmaWMgcmVib290L3NodXRkb3duIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKKyNpbmNsdWRlIDxjczU1MzYvY3M1NTM2Lmg+CisjaW5jbHVkZSAiZWNfa2IzMzEwYi5oIgorCitzdGF0aWMgdm9pZCByZXNldF9jcHUodm9pZCkKK3sKKwkvKgorCSAqIHJlc2V0IGNwdSB0byBmdWxsIHNwZWVkLCB0aGlzIGlzIG5lZWRlZCB3aGVuIGVuYWJsaW5nIGNwdSBmcmVxdWVuY3kKKwkgKiBzY2FsbGluZworCSAqLworCUxPT05HU09OX0NISVBDRkcwIHw9IDB4NzsKK30KKworLyogcmVzZXQgc3VwcG9ydCBmb3IgZnVsb29uZzJmICovCisKK3N0YXRpYyB2b2lkIGZsMmZfcmVib290KHZvaWQpCit7CisJcmVzZXRfY3B1KCk7CisKKwkvKiBzZW5kIGEgcmVzZXQgc2lnbmFsIHRvIHNvdXRoIGJyaWRnZS4KKwkgKgorCSAqIE5PVEU6IGlmIGVuYWJsZSAiUG93ZXIgTWFuYWdlbWVudCIgaW4ga2VybmVsLCBydGw4MTY5IHdpbGwgbm90IHJlc2V0CisJICogbm9ybWFsbHkgd2l0aCB0aGlzIHJlc2V0IG9wZXJhdGlvbiBhbmQgaXQgd2lsbCBub3Qgd29yayBpbiBQTU9OLCBidXQKKwkgKiB5b3UgY2FuIHR5cGUgaGFsdCBjb21tYW5kIGFuZCB0aGVuIHJlYm9vdCwgc2VlbXMgdGhlIGhhcmR3YXJlIHJlc2V0CisJICogbG9naWMgbm90IHdvcmsgbm9ybWFsbHkuCisJICovCisJeworCQl1MzIgaGksIGxvOworCQlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9TT0ZUX1JFU0VUKSwgJmhpLCAmbG8pOworCQlsbyB8PSAweDAwMDAwMDAxOworCQlfd3Jtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9TT0ZUX1JFU0VUKSwgaGksIGxvKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsMmZfc2h1dGRvd24odm9pZCkKK3sKKwl1MzIgaGksIGxvLCB2YWw7CisJaW50IGdwaW9fYmFzZTsKKworCS8qIGdldCBncGlvIGJhc2UgKi8KKwlfcmRtc3IoRElWSUxfTVNSX1JFRyhESVZJTF9MQkFSX0dQSU8pLCAmaGksICZsbyk7CisJZ3Bpb19iYXNlID0gbG8gJiAweGZmMDA7CisKKwkvKiBtYWtlIGNzNTUzNiBncGlvMTMgb3V0cHV0IGVuYWJsZSAqLworCXZhbCA9IGlubChncGlvX2Jhc2UgKyBHUElPTF9PVVRfRU4pOworCXZhbCAmPSB+KDEgPDwgKDE2ICsgMTMpKTsKKwl2YWwgfD0gKDEgPDwgMTMpOworCW91dGwodmFsLCBncGlvX2Jhc2UgKyBHUElPTF9PVVRfRU4pOworCW1taW93YigpOworCS8qIG1ha2UgY3M1NTM2IGdwaW8xMyBvdXRwdXQgbG93IGxldmVsIHZvbHRhZ2UuICovCisJdmFsID0gaW5sKGdwaW9fYmFzZSArIEdQSU9MX09VVF9WQUwpICYgfigxIDw8ICgxMykpOworCXZhbCB8PSAoMSA8PCAoMTYgKyAxMykpOworCW91dGwodmFsLCBncGlvX2Jhc2UgKyBHUElPTF9PVVRfVkFMKTsKKwltbWlvd2IoKTsKK30KKworLyogcmVzZXQgc3VwcG9ydCBmb3IgeWVlbG9vbmcyZiBhbmQgbWVuZ2xvb25nMmYgbm90ZWJvb2sgKi8KKwordm9pZCBtbDJmX3JlYm9vdCh2b2lkKQoreworCXJlc2V0X2NwdSgpOworCisJLyogc2VuZGluZyBhbiByZXNldCBzaWduYWwgdG8gRUMoZW1iZWRkZWQgY29udHJvbGxlcikgKi8KKwllY193cml0ZShSRUdfUkVTRVQsIEJJVF9SRVNFVF9PTik7Cit9CisKKyNkZWZpbmUgeWwyZjg5X3JlYm9vdCBtbDJmX3JlYm9vdAorCisvKiBtZW5nbG9uZyg3aW5jaGVzKSBsYXB0b3AgaGFzIGRpZmZlcmVudCBzaHV0ZG93biBsb2dpYyBmcm9tIDguOWluY2hlcyAqLworI2RlZmluZSBFQ19TSFVURE9XTl9JT19QT1JUX0hJR0ggMHhmZjJkCisjZGVmaW5lIEVDX1NIVVRET1dOX0lPX1BPUlRfTE9XCSAweGZmMmUKKyNkZWZpbmUgRUNfU0hVVERPV05fSU9fUE9SVF9EQVRBIDB4ZmYyZgorI2RlZmluZSBSRUdfU0hVVERPV05fSElHSCAgICAgICAgMHhGQworI2RlZmluZSBSRUdfU0hVVERPV05fTE9XICAgICAgICAgMHgyOQorI2RlZmluZSBCSVRfU0hVVERPV05fT04gICAgICAgICAgKDEgPDwgMSkKKworc3RhdGljIHZvaWQgbWwyZl9zaHV0ZG93bih2b2lkKQoreworCXU4IHZhbDsKKwl1NjQgaTsKKworCW91dGIoUkVHX1NIVVRET1dOX0hJR0gsIEVDX1NIVVRET1dOX0lPX1BPUlRfSElHSCk7CisJb3V0YihSRUdfU0hVVERPV05fTE9XLCBFQ19TSFVURE9XTl9JT19QT1JUX0xPVyk7CisJbW1pb3diKCk7CisJdmFsID0gaW5iKEVDX1NIVVRET1dOX0lPX1BPUlRfREFUQSk7CisJb3V0Yih2YWwgJiAofkJJVF9TSFVURE9XTl9PTiksIEVDX1NIVVRET1dOX0lPX1BPUlRfREFUQSk7CisJbW1pb3diKCk7CisJLyogbmVlZCBlbm91Z2ggd2FpdCBoZXJlLi4uIGhvdyBtYW55IG1pY3Jvc2Vjb25kcyBuZWVkcz8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKQorCQlkZWxheSgpOworCW91dGIodmFsIHwgQklUX1NIVVRET1dOX09OLCBFQ19TSFVURE9XTl9JT19QT1JUX0RBVEEpOworCW1taW93YigpOworfQorCitzdGF0aWMgdm9pZCB5bDJmODlfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBjcHUtZ3BpbzAgb3V0cHV0IGxvdyAqLworCUxPT05HU09OX0dQSU9EQVRBICY9IH4weDAwMDAwMDAxOworCS8qIGNwdS1ncGlvMCBhcyBvdXRwdXQgKi8KKwlMT09OR1NPTl9HUElPSUUgJj0gfjB4MDAwMDAwMDE7Cit9CisKK3ZvaWQgbWFjaF9wcmVwYXJlX3JlYm9vdCh2b2lkKQoreworCXN3aXRjaCAobWlwc19tYWNodHlwZSkgeworCWNhc2UgTUFDSF9MRU1PVEVfRkwyRjoKKwljYXNlIE1BQ0hfTEVNT1RFX05BUzoKKwljYXNlIE1BQ0hfTEVNT1RFX0xMMkY6CisJCWZsMmZfcmVib290KCk7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfTUwyRjc6CisJCW1sMmZfcmVib290KCk7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfWUwyRjg5OgorCQl5bDJmODlfcmVib290KCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordm9pZCBtYWNoX3ByZXBhcmVfc2h1dGRvd24odm9pZCkKK3sKKwlzd2l0Y2ggKG1pcHNfbWFjaHR5cGUpIHsKKwljYXNlIE1BQ0hfTEVNT1RFX0ZMMkY6CisJY2FzZSBNQUNIX0xFTU9URV9OQVM6CisJY2FzZSBNQUNIX0xFTU9URV9MTDJGOgorCQlmbDJmX3NodXRkb3duKCk7CisJCWJyZWFrOworCWNhc2UgTUFDSF9MRU1PVEVfTUwyRjc6CisJCW1sMmZfc2h1dGRvd24oKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNIX0xFTU9URV9ZTDJGODk6CisJCXlsMmY4OV9zaHV0ZG93bigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKaW5kZXggNDU0YjUzOS4uOGYyZjhlOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9jcDFlbXUuYwpAQCAtMzUsNiArMzUsNyBAQAogICogYmV0dGVyIHBlcmZvcm1hbmNlIGJ5IGNvbXBpbGluZyB3aXRoIC1tc29mdC1mbG9hdCEKICAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjaW5jbHVkZSA8YXNtL2luc3QuaD4KQEAgLTY4LDcgKzY5LDkgQEAKIAogLyogRnVydGhlciBwcml2YXRlIGRhdGEgZm9yIHdoaWNoIG5vIHNwYWNlIGV4aXN0cyBpbiBtaXBzX2ZwdV9zdHJ1Y3QgKi8KIAotc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzIGZwdWVtdXN0YXRzOworI2lmZGVmIENPTkZJR19ERUJVR19GUworREVGSU5FX1BFUl9DUFUoc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzLCBmcHVlbXVzdGF0cyk7CisjZW5kaWYKIAogLyogQ29udHJvbCByZWdpc3RlcnMgKi8KIApAQCAtMjA5LDcgKzIxMiw3IEBACiAJdW5zaWduZWQgaW50IGNvbmQ7CiAKIAlpZiAoZ2V0X3VzZXIoaXIsIChtaXBzX2luc3RydWN0aW9uIF9fdXNlciAqKSB4Y3AtPmNwMF9lcGMpKSB7Ci0JCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCXJldHVybiBTSUdCVVM7CiAJfQogCkBAIC0yNDAsNyArMjQzLDcgQEAKIAkJCXJldHVybiBTSUdJTEw7CiAJCX0KIAkJaWYgKGdldF91c2VyKGlyLCAobWlwc19pbnN0cnVjdGlvbiBfX3VzZXIgKikgZW11bHBjKSkgewotCQkJZnB1ZW11c3RhdHMuZXJyb3JzKys7CisJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQlyZXR1cm4gU0lHQlVTOwogCQl9CiAJCS8qIF9fY29tcHV0ZV9yZXR1cm5fZXBjKCkgd2lsbCBoYXZlIHVwZGF0ZWQgY3AwX2VwYyAqLwpAQCAtMjUzLDE2ICsyNTYsMTYgQEAKIAl9CiAKICAgICAgIGVtdWw6Ci0JZnB1ZW11c3RhdHMuZW11bGF0ZWQrKzsKKwlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVtdWxhdGVkKTsKIAlzd2l0Y2ggKE1JUFNJbnN0X09QQ09ERShpcikpIHsKIAljYXNlIGxkYzFfb3A6ewogCQl1NjQgX191c2VyICp2YSA9ICh1NjQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfUlMoaXIpXSArCiAJCQlNSVBTSW5zdF9TSU1NKGlyKSk7CiAJCXU2NCB2YWw7CiAKLQkJZnB1ZW11c3RhdHMubG9hZHMrKzsKKwkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhsb2Fkcyk7CiAJCWlmIChnZXRfdXNlcih2YWwsIHZhKSkgewotCQkJZnB1ZW11c3RhdHMuZXJyb3JzKys7CisJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQlyZXR1cm4gU0lHQlVTOwogCQl9CiAJCURJVE9SRUcodmFsLCBNSVBTSW5zdF9SVChpcikpOwpAQCAtMjc0LDEwICsyNzcsMTAgQEAKIAkJCU1JUFNJbnN0X1NJTU0oaXIpKTsKIAkJdTY0IHZhbDsKIAotCQlmcHVlbXVzdGF0cy5zdG9yZXMrKzsKKwkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhzdG9yZXMpOwogCQlESUZST01SRUcodmFsLCBNSVBTSW5zdF9SVChpcikpOwogCQlpZiAocHV0X3VzZXIodmFsLCB2YSkpIHsKLQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQkJcmV0dXJuIFNJR0JVUzsKIAkJfQogCQlicmVhazsKQEAgLTI4OCw5ICsyOTEsOSBAQAogCQkJTUlQU0luc3RfU0lNTShpcikpOwogCQl1MzIgdmFsOwogCi0JCWZwdWVtdXN0YXRzLmxvYWRzKys7CisJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMobG9hZHMpOwogCQlpZiAoZ2V0X3VzZXIodmFsLCB2YSkpIHsKLQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQkJcmV0dXJuIFNJR0JVUzsKIAkJfQogCQlTSVRPUkVHKHZhbCwgTUlQU0luc3RfUlQoaXIpKTsKQEAgLTMwMiwxMCArMzA1LDEwIEBACiAJCQlNSVBTSW5zdF9TSU1NKGlyKSk7CiAJCXUzMiB2YWw7CiAKLQkJZnB1ZW11c3RhdHMuc3RvcmVzKys7CisJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoc3RvcmVzKTsKIAkJU0lGUk9NUkVHKHZhbCwgTUlQU0luc3RfUlQoaXIpKTsKIAkJaWYgKHB1dF91c2VyKHZhbCwgdmEpKSB7Ci0JCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoZXJyb3JzKTsKIAkJCXJldHVybiBTSUdCVVM7CiAJCX0KIAkJYnJlYWs7CkBAIC00MjksNyArNDMyLDcgQEAKIAogCQkJCWlmIChnZXRfdXNlcihpciwKIAkJCQkgICAgKG1pcHNfaW5zdHJ1Y3Rpb24gX191c2VyICopIHhjcC0+Y3AwX2VwYykpIHsKLQkJCQkJZnB1ZW11c3RhdHMuZXJyb3JzKys7CisJCQkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoZXJyb3JzKTsKIAkJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCQl9CiAKQEAgLTU5NSw3ICs1OTgsNyBAQAogewogCXVuc2lnbmVkIHJjc3IgPSAwOwkvKiByZXN1bHRpbmcgY3NyICovCiAKLQlmcHVlbXVzdGF0cy5jcDF4b3BzKys7CisJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhjcDF4b3BzKTsKIAogCXN3aXRjaCAoTUlQU0luc3RfRk1BX0ZGTVQoaXIpKSB7CiAJY2FzZSBzX2ZtdDp7CQkvKiAwICovCkBAIC02MTAsOSArNjEzLDkgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5sb2FkcysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhsb2Fkcyk7CiAJCQlpZiAoZ2V0X3VzZXIodmFsLCB2YSkpIHsKLQkJCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCX0KIAkJCVNJVE9SRUcodmFsLCBNSVBTSW5zdF9GRChpcikpOwpAQCAtNjIyLDExICs2MjUsMTEgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5zdG9yZXMrKzsKKwkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoc3RvcmVzKTsKIAogCQkJU0lGUk9NUkVHKHZhbCwgTUlQU0luc3RfRlMoaXIpKTsKIAkJCWlmIChwdXRfdXNlcih2YWwsIHZhKSkgewotCQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoZXJyb3JzKTsKIAkJCQlyZXR1cm4gU0lHQlVTOwogCQkJfQogCQkJYnJlYWs7CkBAIC02ODcsOSArNjkwLDkgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5sb2FkcysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhsb2Fkcyk7CiAJCQlpZiAoZ2V0X3VzZXIodmFsLCB2YSkpIHsKLQkJCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCX0KIAkJCURJVE9SRUcodmFsLCBNSVBTSW5zdF9GRChpcikpOwpAQCAtNjk5LDEwICs3MDIsMTAgQEAKIAkJCXZhID0gKHZvaWQgX191c2VyICopICh4Y3AtPnJlZ3NbTUlQU0luc3RfRlIoaXIpXSArCiAJCQkJeGNwLT5yZWdzW01JUFNJbnN0X0ZUKGlyKV0pOwogCi0JCQlmcHVlbXVzdGF0cy5zdG9yZXMrKzsKKwkJCU1JUFNfRlBVX0VNVV9JTkNfU1RBVFMoc3RvcmVzKTsKIAkJCURJRlJPTVJFRyh2YWwsIE1JUFNJbnN0X0ZTKGlyKSk7CiAJCQlpZiAocHV0X3VzZXIodmFsLCB2YSkpIHsKLQkJCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCQkJcmV0dXJuIFNJR0JVUzsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNzY5LDcgKzc3Miw3IEBACiAjZW5kaWYKIAl9IHJ2OwkJCS8qIHJlc3VsdGluZyB2YWx1ZSAqLwogCi0JZnB1ZW11c3RhdHMuY3Axb3BzKys7CisJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhjcDFvcHMpOwogCXN3aXRjaCAocmZtdCA9IChNSVBTSW5zdF9GRk1UKGlyKSAmIDB4ZikpIHsKIAljYXNlIHNfZm10OnsJCS8qIDAgKi8KIAkJdW5pb24gewpAQCAtMTI0MCw3ICsxMjQzLDcgQEAKIAkJcHJldmVwYyA9IHhjcC0+Y3AwX2VwYzsKIAogCQlpZiAoZ2V0X3VzZXIoaW5zbiwgKG1pcHNfaW5zdHJ1Y3Rpb24gX191c2VyICopIHhjcC0+Y3AwX2VwYykpIHsKLQkJCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQkJcmV0dXJuIFNJR0JVUzsKIAkJfQogCQlpZiAoaW5zbiA9PSAwKQpAQCAtMTI3NiwzMyArMTI3OSw1MCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgZnB1ZW11X3N0YXRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBzdW0gPSAwOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXN0cnVjdCBtaXBzX2ZwdV9lbXVsYXRvcl9zdGF0cyAqcHM7CisJCWxvY2FsX3QgKnB2OworCQlwcyA9ICZwZXJfY3B1KGZwdWVtdXN0YXRzLCBjcHUpOworCQlwdiA9ICh2b2lkICopcHMgKyAodW5zaWduZWQgbG9uZylkYXRhOworCQlzdW0gKz0gbG9jYWxfcmVhZChwdik7CisJfQorCSp2YWwgPSBzdW07CisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmb3BzX2ZwdWVtdV9zdGF0LCBmcHVlbXVfc3RhdF9nZXQsIE5VTEwsICIlbGx1XG4iKTsKKwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm1pcHNfZGVidWdmc19kaXI7CiBzdGF0aWMgaW50IF9faW5pdCBkZWJ1Z2ZzX2ZwdWVtdSh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmQsICpkaXI7Ci0JaW50IGk7Ci0Jc3RhdGljIHN0cnVjdCB7Ci0JCWNvbnN0IGNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIGludCAqdjsKLQl9IHZhcnNbXSBfX2luaXRkYXRhID0gewotCQl7ICJlbXVsYXRlZCIsICZmcHVlbXVzdGF0cy5lbXVsYXRlZCB9LAotCQl7ICJsb2FkcyIsICAgICZmcHVlbXVzdGF0cy5sb2FkcyB9LAotCQl7ICJzdG9yZXMiLCAgICZmcHVlbXVzdGF0cy5zdG9yZXMgfSwKLQkJeyAiY3Axb3BzIiwgICAmZnB1ZW11c3RhdHMuY3Axb3BzIH0sCi0JCXsgImNwMXhvcHMiLCAgJmZwdWVtdXN0YXRzLmNwMXhvcHMgfSwKLQkJeyAiZXJyb3JzIiwgICAmZnB1ZW11c3RhdHMuZXJyb3JzIH0sCi0JfTsKIAogCWlmICghbWlwc19kZWJ1Z2ZzX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJmcHVlbXVzdGF0cyIsIG1pcHNfZGVidWdmc19kaXIpOwogCWlmICghZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2YXJzKTsgaSsrKSB7Ci0JCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIodmFyc1tpXS5uYW1lLCBTX0lSVUdPLCBkaXIsIHZhcnNbaV0udik7Ci0JCWlmICghZCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKworI2RlZmluZSBGUFVfU1RBVF9DUkVBVEUoTSkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgjTSAsIFNfSVJVR08sIGRpciwJCVwKKwkJCSh2b2lkICopb2Zmc2V0b2Yoc3RydWN0IG1pcHNfZnB1X2VtdWxhdG9yX3N0YXRzLCBNKSwgXAorCQkJJmZvcHNfZnB1ZW11X3N0YXQpOwkJCQlcCisJCWlmICghZCkJCQkJCQkJXAorCQkJcmV0dXJuIC1FTk9NRU07CQkJCQlcCisJfSB3aGlsZSAoMCkKKworCUZQVV9TVEFUX0NSRUFURShlbXVsYXRlZCk7CisJRlBVX1NUQVRfQ1JFQVRFKGxvYWRzKTsKKwlGUFVfU1RBVF9DUkVBVEUoc3RvcmVzKTsKKwlGUFVfU1RBVF9DUkVBVEUoY3Axb3BzKTsKKwlGUFVfU1RBVF9DUkVBVEUoY3AxeG9wcyk7CisJRlBVX1NUQVRfQ1JFQVRFKGVycm9ycyk7CisKIAlyZXR1cm4gMDsKIH0KIF9faW5pdGNhbGwoZGVidWdmc19mcHVlbXUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jCmluZGV4IGRmN2I5ZDkuLjM2ZDk3NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kc2VtdWwuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHNlbXVsLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAllcnIgfD0gX19wdXRfdXNlcihjcGMsICZmci0+ZXBjKTsKIAogCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCWZwdWVtdXN0YXRzLmVycm9ycysrOworCQlNSVBTX0ZQVV9FTVVfSU5DX1NUQVRTKGVycm9ycyk7CiAJCXJldHVybiBTSUdCVVM7CiAJfQogCkBAIC0xMzYsNyArMTM2LDcgQEAKIAllcnIgfD0gX19nZXRfdXNlcihjb29raWUsICZmci0+Y29va2llKTsKIAogCWlmICh1bmxpa2VseShlcnIgfHwgKGluc24gIT0gQlJFQUtfTUFUSCkgfHwgKGNvb2tpZSAhPSBCRF9DT09LSUUpKSkgewotCQlmcHVlbXVzdGF0cy5lcnJvcnMrKzsKKwkJTUlQU19GUFVfRU1VX0lOQ19TVEFUUyhlcnJvcnMpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzc2ltL01ha2VmaWxlIGIvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKaW5kZXggNTdmNDNjMS4uNDFiOTY1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21pcHNzaW0vTWFrZWZpbGUKQEAgLTE3LDggKzE3LDcgQEAKICMgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogIwogCi1vYmoteSA6PSBzaW1fcGxhdGZvcm0ubyBzaW1fc2V0dXAubyBzaW1fbWVtLm8gc2ltX3RpbWUubyBzaW1faW50Lm8gXAotCSBzaW1fY21kbGluZS5vCitvYmoteSA6PSBzaW1fcGxhdGZvcm0ubyBzaW1fc2V0dXAubyBzaW1fbWVtLm8gc2ltX3RpbWUubyBzaW1faW50Lm8KIAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykgKz0gc2ltX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX01JUFNfTVRfU01UQykgKz0gc2ltX3NtdGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHNzaW0vc2ltX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwc3NpbS9zaW1fc2V0dXAuYwppbmRleCAyODc3Njc1Li41NWYyMmEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwc3NpbS9zaW1fc2V0dXAuYworKysgYi9hcmNoL21pcHMvbWlwc3NpbS9zaW1fc2V0dXAuYwpAQCAtNDksOSArNDksNiBAQAogCXNldF9pb19wb3J0X2Jhc2UoMHhiZmQwMDAwMCk7CiAKIAlzZXJpYWxfaW5pdCgpOwotCi0JcHJfaW5mbygiTGludXggc3RhcnRlZC4uLlxuIik7Ci0KIH0KIAogZXh0ZXJuIHN0cnVjdCBwbGF0X3NtcF9vcHMgc3NtdGNfc21wX29wczsKQEAgLTYwLDggKzU3LDYgQEAKIHsKIAlzZXRfaW9fcG9ydF9iYXNlKDB4YmZkMDAwMDApOwogCi0JcHJfaW5mbygiXG5MSU5VWCBzdGFydGVkLi4uXG4iKTsKLQlwcm9tX2luaXRfY21kbGluZSgpOwogCXByb21fbWVtaW5pdCgpOwogCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01QCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2Vyci1zYjEuYyBiL2FyY2gvbWlwcy9tbS9jZXJyLXNiMS5jCmluZGV4IDFiZDFmMTguLjM1NzEwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jZXJyLXNiMS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jZXJyLXNiMS5jCkBAIC01NjcsMTMgKzU2NywxMCBAQAogCQkJCWRhdGFsbyA9ICgodW5zaWduZWQgbG9uZyBsb25nKWRhdGFsb2hpIDw8IDMyKSB8IGRhdGFsb2xvOwogCQkJCWVjYyA9IGRjX2VjYyhkYXRhbG8pOwogCQkJCWlmIChlY2MgIT0gZGF0YWhpKSB7Ci0JCQkJCWludCBiaXRzID0gMDsKKwkJCQkJaW50IGJpdHM7CiAJCQkJCWJhZF9lY2MgfD0gMSA8PCAoMy1vZmZzZXQpOwogCQkJCQllY2MgXj0gZGF0YWhpOwotCQkJCQl3aGlsZSAoZWNjKSB7Ci0JCQkJCQlpZiAoZWNjICYgMSkgYml0cysrOwotCQkJCQkJZWNjID4+PSAxOwotCQkJCQl9CisJCQkJCWJpdHMgPSBod2VpZ2h0OChlY2MpOwogCQkJCQlyZXMgfD0gKGJpdHMgPT0gMSkgPyBDUDBfQ0VSUkRfREFUQV9TQkUgOiBDUDBfQ0VSUkRfREFUQV9EQkU7CiAJCQkJfQogCQkJCXByaW50aygiICAlMDJYLSUwMTZsbFgiLCBkYXRhaGksIGRhdGFsbyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCA4ZDFmNGYzLi4xNjUxOTQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkgICAgICAgZGF0YXNpemUgPj4gMTAsCiAJICAgICAgIGluaXRzaXplID4+IDEwLAotCSAgICAgICAodW5zaWduZWQgbG9uZykgKHRvdGFsaGlnaF9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCkpKTsKKwkgICAgICAgdG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSk7CiB9CiAjZW5kaWYgLyogIUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCiAKQEAgLTQ2Miw3ICs0NjIsOSBAQAogCQkJX19wYV9zeW1ib2woJl9faW5pdF9lbmQpKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVAogdW5zaWduZWQgbG9uZyBwZ2RfY3VycmVudFtOUl9DUFVTXTsKKyNlbmRpZgogLyoKICAqIE9uIDY0LWJpdCB3ZSd2ZSBnb3QgdGhyZWUtbGV2ZWwgcGFnZXRhYmxlcyB3aXRoIGEgc2xpZ2h0bHkKICAqIGRpZmZlcmVudCBsYXlvdXQgLi4uCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGJiMTcxOWEuLmJhZGNmNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC03Myw5ICs3Myw2IEBACiBlbnVtIGxhYmVsX2lkIHsKIAlsYWJlbF9zZWNvbmRfcGFydCA9IDEsCiAJbGFiZWxfbGVhdmUsCi0jaWZkZWYgTU9EVUxFX1NUQVJUCi0JbGFiZWxfbW9kdWxlX2FsbG9jLAotI2VuZGlmCiAJbGFiZWxfdm1hbGxvYywKIAlsYWJlbF92bWFsbG9jX2RvbmUsCiAJbGFiZWxfdGxid19oYXphcmQsCkBAIC05Miw5ICs4OSw2IEBACiAKIFVBU01fTF9MQShfc2Vjb25kX3BhcnQpCiBVQVNNX0xfTEEoX2xlYXZlKQotI2lmZGVmIE1PRFVMRV9TVEFSVAotVUFTTV9MX0xBKF9tb2R1bGVfYWxsb2MpCi0jZW5kaWYKIFVBU01fTF9MQShfdm1hbGxvYykKIFVBU01fTF9MQShfdm1hbGxvY19kb25lKQogVUFTTV9MX0xBKF90bGJ3X2hhemFyZCkKQEAgLTE2MCw2ICsxNTQsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgdWFzbV9sYWJlbCBsYWJlbHNbMTI4XSBfX2NwdWluaXRkYXRhOwogc3RhdGljIHN0cnVjdCB1YXNtX3JlbG9jIHJlbG9jc1sxMjhdIF9fY3B1aW5pdGRhdGE7CiAKKyNpZm5kZWYgQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQKKy8qCisgKiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVCBpbXBsaWVzIDY0IGJpdCBhbmQgbGFjayBvZiBwZ2RfY3VycmVudCwKKyAqIHdlIGNhbm5vdCBkbyByMzAwMCB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLgorICovCisKIC8qCiAgKiBUaGUgUjMwMDAgVExCIGhhbmRsZXIgaXMgc2ltcGxlLgogICovCkBAIC0xOTksNiArMTk5LDcgQEAKIAogCWR1bXBfaGFuZGxlcigodTMyICopZWJhc2UsIDMyKTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfTUlQU19QR0RfQzBfQ09OVEVYVCAqLwogCiAvKgogICogVGhlIFI0MDAwIFRMQiBoYW5kbGVyIGlzIG11Y2ggbW9yZSBjb21wbGljYXRlZC4gV2UgaGF2ZSB0d28KQEAgLTQ5Nyw4ICs0OTgsOSBAQAogYnVpbGRfZ2V0X3BtZGU2NCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9sYWJlbCAqKmwsIHN0cnVjdCB1YXNtX3JlbG9jICoqciwKIAkJIHVuc2lnbmVkIGludCB0bXAsIHVuc2lnbmVkIGludCBwdHIpCiB7CisjaWZuZGVmIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUCiAJbG9uZyBwZ2RjID0gKGxvbmcpcGdkX2N1cnJlbnQ7Ci0KKyNlbmRpZgogCS8qCiAJICogVGhlIHZtYWxsb2MgaGFuZGxpbmcgaXMgbm90IGluIHRoZSBob3RwYXRoLgogCSAqLwpAQCAtNTA2LDcgKzUwOCwxNSBAQAogCXVhc21faWxfYmx0eihwLCByLCB0bXAsIGxhYmVsX3ZtYWxsb2MpOwogCS8qIE5vIHVhc21faV9ub3AgbmVlZGVkIGhlcmUsIHNpbmNlIHRoZSBuZXh0IGluc24gZG9lc24ndCB0b3VjaCBUTVAuICovCiAKLSNpZmRlZiBDT05GSUdfU01QCisjaWZkZWYgQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQKKwkvKgorCSAqICZwZ2QgPDwgMTEgc3RvcmVkIGluIENPTlRFWFQgWzIzLi42M10uCisJICovCisJVUFTTV9pX01GQzAocCwgcHRyLCBDMF9DT05URVhUKTsKKwl1YXNtX2lfZGlucyhwLCBwdHIsIDAsIDAsIDIzKTsgLyogQ2xlYXIgbG93ZXIgMjMgYml0cyBvZiBjb250ZXh0LiAqLworCXVhc21faV9vcmkocCwgcHRyLCBwdHIsIDB4NTQwKTsgLyogMSAwICAxIDAgMSAgPDwgNiAgeGtwaHlzIGNhY2hlZCAqLworCXVhc21faV9kcm90cihwLCBwdHIsIHB0ciwgMTEpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU01QKQogIyBpZmRlZiAgQ09ORklHX01JUFNfTVRfU01UQwogCS8qCiAJICogU01UQyB1c2VzIFRDQmluZCB2YWx1ZSBhcyAiQ1BVIiBpbmRleApAQCAtNTIwLDcgKzUzMCw3IEBACiAJICovCiAJdWFzbV9pX2RtZmMwKHAsIHB0ciwgQzBfQ09OVEVYVCk7CiAJdWFzbV9pX2RzcmwocCwgcHRyLCBwdHIsIDIzKTsKLSNlbmRpZgorIyBlbmRpZgogCVVBU01faV9MQV9tb3N0bHkocCwgdG1wLCBwZ2RjKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7CiAJdWFzbV9pX2RtZmMwKHAsIHRtcCwgQzBfQkFEVkFERFIpOwpAQCAtODAyLDggKzgxMiw2IEBACiAJfSBlbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0UpCiAJCWNvbnN0IGVudW0gbGFiZWxfaWQgbHMgPSBsYWJlbF90bGJfaHVnZV91cGRhdGU7Ci0jZWxpZiBkZWZpbmVkKE1PRFVMRV9TVEFSVCkKLQkJY29uc3QgZW51bSBsYWJlbF9pZCBscyA9IGxhYmVsX21vZHVsZV9hbGxvYzsKICNlbHNlCiAJCWNvbnN0IGVudW0gbGFiZWxfaWQgbHMgPSBsYWJlbF92bWFsbG9jOwogI2VuZGlmCkBAIC0xMDMzLDYgKzEwNDEsNyBAQAogCWlQVEVfTFcocCwgcHRlLCBwdHIpOwogfQogCisjaWZuZGVmIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUCiAvKgogICogUjMwMDAgc3R5bGUgVExCIGxvYWQvc3RvcmUvbW9kaWZ5IGhhbmRsZXJzLgogICovCkBAIC0xMTg0LDYgKzExOTMsNyBAQAogCiAJZHVtcF9oYW5kbGVyKGhhbmRsZV90bGJtLCBBUlJBWV9TSVpFKGhhbmRsZV90bGJtKSk7CiB9CisjZW5kaWYgLyogQ09ORklHX01JUFNfUEdEX0MwX0NPTlRFWFQgKi8KIAogLyoKICAqIFI0MDAwIHN0eWxlIFRMQiBsb2FkL3N0b3JlL21vZGlmeSBoYW5kbGVycy4KQEAgLTE0MDAsNiArMTQxMCw3IEBACiAJY2FzZSBDUFVfVFgzOTEyOgogCWNhc2UgQ1BVX1RYMzkyMjoKIAljYXNlIENQVV9UWDM5Mjc6CisjaWZuZGVmIENPTkZJR19NSVBTX1BHRF9DMF9DT05URVhUCiAJCWJ1aWxkX3IzMDAwX3RsYl9yZWZpbGxfaGFuZGxlcigpOwogCQlpZiAoIXJ1bl9vbmNlKSB7CiAJCQlidWlsZF9yMzAwMF90bGJfbG9hZF9oYW5kbGVyKCk7CkBAIC0xNDA3LDYgKzE0MTgsOSBAQAogCQkJYnVpbGRfcjMwMDBfdGxiX21vZGlmeV9oYW5kbGVyKCk7CiAJCQlydW5fb25jZSsrOwogCQl9CisjZWxzZQorCQlwYW5pYygiTm8gUjMwMDAgVExCIHJlZmlsbCBoYW5kbGVyIik7CisjZW5kaWYKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9SNjAwMDoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmMgYi9hcmNoL21pcHMvbW0vdWFzbS5jCmluZGV4IGY0NjcxOTkuLjBhMTY1YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS91YXNtLmMKKysrIGIvYXJjaC9taXBzL21tL3Vhc20uYwpAQCAtNjAsMTEgKzYwLDExIEBACiAJaW5zbl9iZXFsLCBpbnNuX2JnZXosIGluc25fYmdlemwsIGluc25fYmx0eiwgaW5zbl9ibHR6bCwKIAlpbnNuX2JuZSwgaW5zbl9jYWNoZSwgaW5zbl9kYWRkdSwgaW5zbl9kYWRkaXUsIGluc25fZG1mYzAsCiAJaW5zbl9kbXRjMCwgaW5zbl9kc2xsLCBpbnNuX2RzbGwzMiwgaW5zbl9kc3JhLCBpbnNuX2RzcmwsCi0JaW5zbl9kc3JsMzIsIGluc25fZHN1YnUsIGluc25fZXJldCwgaW5zbl9qLCBpbnNuX2phbCwgaW5zbl9qciwKLQlpbnNuX2xkLCBpbnNuX2xsLCBpbnNuX2xsZCwgaW5zbl9sdWksIGluc25fbHcsIGluc25fbWZjMCwKKwlpbnNuX2RzcmwzMiwgaW5zbl9kcm90ciwgaW5zbl9kc3VidSwgaW5zbl9lcmV0LCBpbnNuX2osIGluc25famFsLAorCWluc25fanIsIGluc25fbGQsIGluc25fbGwsIGluc25fbGxkLCBpbnNuX2x1aSwgaW5zbl9sdywgaW5zbl9tZmMwLAogCWluc25fbXRjMCwgaW5zbl9vcmksIGluc25fcHJlZiwgaW5zbl9yZmUsIGluc25fc2MsIGluc25fc2NkLAogCWluc25fc2QsIGluc25fc2xsLCBpbnNuX3NyYSwgaW5zbl9zcmwsIGluc25fc3VidSwgaW5zbl9zdywKLQlpbnNuX3RsYnAsIGluc25fdGxid2ksIGluc25fdGxid3IsIGluc25feG9yLCBpbnNuX3hvcmkKKwlpbnNuX3RsYnAsIGluc25fdGxid2ksIGluc25fdGxid3IsIGluc25feG9yLCBpbnNuX3hvcmksIGluc25fZGlucwogfTsKIAogc3RydWN0IGluc24gewpAQCAtMTA0LDYgKzEwNCw3IEBACiAJeyBpbnNuX2RzcmEsIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgZHNyYV9vcCksIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9kc3JsLCBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIGRzcmxfb3ApLCBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fZHNybDMyLCBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIGRzcmwzMl9vcCksIFJUIHwgUkQgfCBSRSB9LAorCXsgaW5zbl9kcm90ciwgTShzcGVjX29wLCAxLCAwLCAwLCAwLCBkc3JsX29wKSwgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX2RzdWJ1LCBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIGRzdWJ1X29wKSwgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX2VyZXQsICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgZXJldF9vcCksICAwIH0sCiAJeyBpbnNuX2osICBNKGpfb3AsIDAsIDAsIDAsIDAsIDApLCAgSklNTSB9LApAQCAtMTMyLDYgKzEzMyw3IEBACiAJeyBpbnNuX3RsYndyLCAgTShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYndyX29wKSwgIDAgfSwKIAl7IGluc25feG9yLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCB4b3Jfb3ApLCAgUlMgfCBSVCB8IFJEIH0sCiAJeyBpbnNuX3hvcmksICBNKHhvcmlfb3AsIDAsIDAsIDAsIDAsIDApLCAgUlMgfCBSVCB8IFVJTU0gfSwKKwl7IGluc25fZGlucywgTShzcGVjM19vcCwgMCwgMCwgMCwgMCwgZGluc19vcCksIFJTIHwgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX2ludmFsaWQsIDAsIDAgfQogfTsKIApAQCAtMzA0LDYgKzMwNiwxMiBAQAogCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYiwgYSwgYyk7CQlcCiB9CiAKKyNkZWZpbmUgSV91MnUxbXNidTMob3ApCQkJCQlcCitJcF91MnUxbXNidTMob3ApCQkJCQlcCit7CQkJCQkJCVwKKwlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMrZC0xLCBjKTsJXAorfQorCiAjZGVmaW5lIElfdTF1MihvcCkJCQkJCVwKIElwX3UxdTIob3ApCQkJCQkJXAogewkJCQkJCQlcCkBAIC0zNDksNiArMzU3LDcgQEAKIElfdTJ1MXUzKF9kc3JhKQogSV91MnUxdTMoX2RzcmwpCiBJX3UydTF1MyhfZHNybDMyKQorSV91MnUxdTMoX2Ryb3RyKQogSV91M3UxdTIoX2RzdWJ1KQogSV8wKF9lcmV0KQogSV91MShfaikKQEAgLTM3Nyw2ICszODYsNyBAQAogSV8wKF90bGJ3cikKIElfdTN1MXUyKF94b3IpCiBJX3UydTF1MyhfeG9yaSkKK0lfdTJ1MW1zYnUzKF9kaW5zKTsKIAogLyogSGFuZGxlIGxhYmVscy4gKi8KIHZvaWQgX19jcHVpbml0IHVhc21fYnVpbGRfbGFiZWwoc3RydWN0IHVhc21fbGFiZWwgKipsYWIsIHUzMiAqYWRkciwgaW50IGxpZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmggYi9hcmNoL21pcHMvbW0vdWFzbS5oCmluZGV4IGM2ZDFlM2QuLjNkMTUzZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS91YXNtLmgKKysrIGIvYXJjaC9taXBzL21tL3Vhc20uaApAQCAtMzQsNiArMzQsMTEgQEAKIHZvaWQgX19jcHVpbml0CQkJCQkJCQlcCiB1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCiAKKyNkZWZpbmUgSXBfdTJ1MW1zYnUzKG9wKQkJCQkJCVwKK3ZvaWQgX19jcHVpbml0CQkJCQkJCQlcCit1YXNtX2kjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYywJXAorCSAgIHVuc2lnbmVkIGludCBkKQorCiAjZGVmaW5lIElwX3UxdTIob3ApCQkJCQkJCVwKIHZvaWQgX19jcHVpbml0IHVhc21faSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCiAKQEAgLTY1LDYgKzcwLDcgQEAKIElwX3UydTF1MyhfZHNyYSk7CiBJcF91MnUxdTMoX2RzcmwpOwogSXBfdTJ1MXUzKF9kc3JsMzIpOworSXBfdTJ1MXUzKF9kcm90cik7CiBJcF91M3UxdTIoX2RzdWJ1KTsKIElwXzAoX2VyZXQpOwogSXBfdTEoX2opOwpAQCAtOTMsNiArOTksNyBAQAogSXBfMChfdGxid3IpOwogSXBfdTN1MXUyKF94b3IpOwogSXBfdTJ1MXUzKF94b3JpKTsKK0lwX3UydTFtc2J1MyhfZGlucyk7CiAKIC8qIEhhbmRsZSBsYWJlbHMuICovCiBzdHJ1Y3QgdWFzbV9sYWJlbCB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCmluZGV4IGYxYjE0YzguLjQxNGYwYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCkBAIC0zNTUsNyArMzU1LDYgQEAKIAlib2FyZF9ubWlfaGFuZGxlcl9zZXR1cCA9IG1pcHNfbm1pX3NldHVwOwogCWJvYXJkX2VqdGFnX2hhbmRsZXJfc2V0dXAgPSBtaXBzX2VqdGFnX3NldHVwOwogCi0JcHJfaW5mbygiXG5MSU5VWCBzdGFydGVkLi4uXG4iKTsKIAlwcm9tX2luaXRfY21kbGluZSgpOwogCXByb21fbWVtaW5pdCgpOwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYwppbmRleCA5MDM1YzY0Li5iMjc0MTljIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKQEAgLTU1LDcgKzU1LDcgQEAKIAljaGFyICptZW1zaXplX3N0cjsKIAl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKIAljaGFyICpwdHI7Ci0Jc3RhdGljIGNoYXIgY21kbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOworCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdIF9faW5pdGRhdGE7CiAKIAkvKiBvdGhlcndpc2UgbG9vayBpbiB0aGUgZW52aXJvbm1lbnQgKi8KIAltZW1zaXplX3N0ciA9IHByb21fZ2V0ZW52KCJtZW1zaXplIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYyBiL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jCmluZGV4IDMwNTMzYmEuLjNhNDY3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbng4MzN4X3BpY19pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiUE5YLVBJQyIsCisJLm5hbWUgPSAiUE5YLVBJQyIsCiAJLnN0YXJ0dXAgPSBwbng4MzN4X3N0YXJ0dXBfcGljX2lycSwKIAkuc2h1dGRvd24gPSBwbng4MzN4X3NodXRkb3duX3BpY19pcnEsCiAJLmVuYWJsZSA9IHBueDgzM3hfZW5hYmxlX3BpY19pcnEsCkBAIC0zMDUsNyArMzA1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG54ODMzeF9ncGlvX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICJQTlgtR1BJTyIsCisJLm5hbWUgPSAiUE5YLUdQSU8iLAogCS5zdGFydHVwID0gcG54ODMzeF9zdGFydHVwX2dwaW9faXJxLAogCS5zaHV0ZG93biA9IHBueDgzM3hfZGlzYWJsZV9ncGlvX2lycSwKIAkuZW5hYmxlID0gcG54ODMzeF9lbmFibGVfZ3Bpb19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKaW5kZXggNTc1Y2QxNC4uNDc1ZmY0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBMb29uZ3NvbjIgcGVyZm9ybWFuY2UgY291bnRlciBkcml2ZXIgZm9yIG9wcm9maWxlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IFlhbmh1YSA8eWFuaEBsZW1vdGUuY29tPgogICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgogICoKQEAgLTEyNSw2ICsxMjUsOSBAQAogCSAqLwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGUgaXJxIGJlbG9uZ3MgdG8gbWUgKi8KKwllbmFibGVkID0gcmVhZF9jMF9wZXJmY250KCkgJiBMT09OR1NPTjJfUEVSRkNOVF9JTlRfRU47CisJaWYgKCFlbmFibGVkKQorCQlyZXR1cm4gSVJRX05PTkU7CiAJZW5hYmxlZCA9IHJlZy5jbnQxX2VuYWJsZWQgfCByZWcuY250Ml9lbmFibGVkOwogCWlmICghZW5hYmxlZCkKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKaW5kZXggOTFiZmU3My4uYzkyMDljYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCkBAIC0yMiwxMyArMjIsMTMgQEAKICMKICMgVGhlc2UgYXJlIHN0aWxsIHByZXR0eSBtdWNoIGluIHRoZSBvbGQgc3RhdGUsIHdhdGNoLCBnbyBibGluZC4KICMKLW9iai0kKENPTkZJR19CQVNMRVJfRVhDSVRFKQkrPSBvcHMtdGl0YW4ubyBwY2ktZXhjaXRlLm8gZml4dXAtZXhjaXRlLm8KIG9iai0kKENPTkZJR19MQVNBVCkJCSs9IHBjaS1sYXNhdC5vCiBvYmotJChDT05GSUdfTUlQU19DT0JBTFQpCSs9IGZpeHVwLWNvYmFsdC5vCiBvYmotJChDT05GSUdfU09DX0FVMTUwMCkJKz0gZml4dXAtYXUxMDAwLm8gb3BzLWF1MTAwMC5vCiBvYmotJChDT05GSUdfU09DX0FVMTU1MCkJKz0gZml4dXAtYXUxMDAwLm8gb3BzLWF1MTAwMC5vCiBvYmotJChDT05GSUdfU09DX1BOWDg1NTApCSs9IGZpeHVwLXBueDg1NTAubyBvcHMtcG54ODU1MC5vCi1vYmotJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkJKz0gZml4dXAtZnVsb29uZzJlLm8gb3BzLWJvbml0bzY0Lm8KK29iai0kKENPTkZJR19MRU1PVEVfRlVMT09ORzJFKQkrPSBmaXh1cC1mdWxvb25nMmUubyBvcHMtbG9vbmdzb24yLm8KK29iai0kKENPTkZJR19MRU1PVEVfTUFDSDJGKQkrPSBmaXh1cC1sZW1vdGUyZi5vIG9wcy1sb29uZ3NvbjIubwogb2JqLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IGZpeHVwLW1hbHRhLm8KIG9iai0kKENPTkZJR19QTUNfTVNQNzEyMF9HVykJKz0gZml4dXAtcG1jbXNwLm8gb3BzLXBtY21zcC5vCiBvYmotJChDT05GSUdfUE1DX01TUDcxMjBfRVZBTCkJKz0gZml4dXAtcG1jbXNwLm8gb3BzLXBtY21zcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWV4Y2l0ZS5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1leGNpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2NGQ5Zi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWV4Y2l0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgQmFzbGVyIFZpc2lvbiBUZWNobm9sb2dpZXMgQUcKLSAqICBBdXRob3I6IFRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGV4Y2l0ZS5oPgotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JaWYgKHBpbiA9PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gVVNCX0lSUTsJCS8qIFVTQiBjb250cm9sbGVyIGlzIHRoZSBvbmx5IFBDSSBkZXZpY2UgKi8KLX0KLQotLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwotaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1mdWxvb25nMmUuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtZnVsb29uZzJlLmMKaW5kZXggMGM0YzdhOC4uNGY2ZDhkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1mdWxvb25nMmUuYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWZ1bG9vbmcyZS5jCkBAIC0xMyw3ICsxMyw4IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2Jvbml0bzY0Lmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogCiAvKiBTb3V0aCBicmlkZ2Ugc2xvdCBudW1iZXIgaXMgc2V0IGJ5IHRoZSBwY2kgcHJvYmUgcHJvY2VzcyAqLwogc3RhdGljIHU4IHNiX3Nsb3QgPSA1OwpAQCAtMzUsNyArMzYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewotCQlpcnEgPSBCT05JVE9fSVJRX0JBU0UgKyAyNSArIHBpbjsKKwkJaXJxID0gTE9PTkdTT05fSVJRX0JBU0UgKyAyNSArIHBpbjsKIAl9CiAJcmV0dXJuIGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZjJlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTGVtb3RlIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJQ1QgQ0FTCisgKiBBdXRob3I6IExpIHhpYW95dSwgbGl4eUBpY3QuYWMuY24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNi5oPgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfcGNpLmg+CisKKy8qIFBDSSBpbnRlcnJ1cHQgcGlucworICoKKyAqIFRoZXNlIHNob3VsZCBub3QgYmUgY2hhbmdlZCwgb3IgeW91IHNob3VsZCBjb25zaWRlciBsb29uZ3NvbjJmIGludGVycnVwdAorICogcmVnaXN0ZXIgYW5kIHlvdXIgcGNpIGNhcmQgZGlzcGF0Y2gKKyAqLworCisjZGVmaW5lIFBDSUEJCTQKKyNkZWZpbmUgUENJQgkJNQorI2RlZmluZSBQQ0lDCQk2CisjZGVmaW5lIFBDSUQJCTcKKworLyogYWxsIHRoZSBwY2kgZGV2aWNlIGhhcyB0aGUgUENJQSBwaW4sIGNoZWNrIHRoZSBkYXRhc2hlZXQuICovCitzdGF0aWMgY2hhciBpcnFfdGFiW11bNV0gX19pbml0ZGF0YSA9IHsKKwkvKiAgICAgIElOVEEgICAgSU5UQiAgICBJTlRDICAgIElOVEQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAxMTogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMTI6IFVudXNlZCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDEzOiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAxNDogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMTU6IFVudXNlZCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDE2OiBVbnVzZWQgKi8KKwl7MCwgUENJQSwgMCwgMCwgMH0sCS8qICAxNzogUlRMODExMC0wICovCisJezAsIFBDSUIsIDAsIDAsIDB9LAkvKiAgMTg6IFJUTDgxMTAtMSAqLworCXswLCBQQ0lDLCAwLCAwLCAwfSwJLyogIDE5OiBTaUkzMTE0ICovCisJezAsIFBDSUQsIDAsIDAsIDB9LAkvKiAgMjA6IDMtcG9ydHMgbmVjIHVzYiAqLworCXswLCBQQ0lBLCBQQ0lCLCBQQ0lDLCBQQ0lEfSwJLyogIDIxOiBQQ0ktU0xPVCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDIyOiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAyMzogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMjQ6IFVudXNlZCAqLworCXswLCAwLCAwLCAwLCAwfSwJLyogIDI1OiBVbnVzZWQgKi8KKwl7MCwgMCwgMCwgMCwgMH0sCS8qICAyNjogVW51c2VkICovCisJezAsIDAsIDAsIDAsIDB9LAkvKiAgMjc6IFVudXNlZCAqLworfTsKKworaW50IF9faW5pdCBwY2liaW9zX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWludCB2aXJxOworCisJaWYgKChQQ0lfU0xPVChkZXYtPmRldmZuKSAhPSBQQ0lfSURTRUxfQ1M1NTM2KQorCSAgICAmJiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPCAzMikpIHsKKwkJdmlycSA9IGlycV90YWJbc2xvdF1bcGluXTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2xvdDogJWQsIHBpbjogJWQsIGlycTogJWRcbiIsIHNsb3QsIHBpbiwKKwkJICAgICAgIHZpcnEgKyBMT09OR1NPTl9JUlFfQkFTRSk7CisJCWlmICh2aXJxICE9IDApCisJCQlyZXR1cm4gTE9PTkdTT05fSVJRX0JBU0UgKyB2aXJxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IFBDSV9JRFNFTF9DUzU1MzYpIHsJLyogIGNzNTUzNiAqLworCQlzd2l0Y2ggKFBDSV9GVU5DKGRldi0+ZGV2Zm4pKSB7CisJCWNhc2UgMjoKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKKwkJCQkJICAgICAgQ1M1NTM2X0lERV9JTlRSKTsKKwkJCXJldHVybiBDUzU1MzZfSURFX0lOVFI7CS8qICBmb3IgSURFICovCisJCWNhc2UgMzoKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKKwkJCQkJICAgICAgQ1M1NTM2X0FDQ19JTlRSKTsKKwkJCXJldHVybiBDUzU1MzZfQUNDX0lOVFI7CS8qICBmb3IgQVVESU8gKi8KKwkJY2FzZSA0OgkvKiAgZm9yIE9IQ0kgKi8KKwkJY2FzZSA1OgkvKiAgZm9yIEVIQ0kgKi8KKwkJY2FzZSA2OgkvKiAgZm9yIFVEQyAqLworCQljYXNlIDc6CS8qICBmb3IgT1RHICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsCisJCQkJCSAgICAgIENTNTUzNl9VU0JfSU5UUik7CisJCQlyZXR1cm4gQ1M1NTM2X1VTQl9JTlRSOworCQl9CisJCXJldHVybiBkZXYtPmlycTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIgc3RyYW5nZSBwY2kgc2xvdCBudW1iZXIuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitpbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIENTNTUzNiBTUEVDLiBmaXh1cCAqLworc3RhdGljIHZvaWQgX19pbml0IGxvb25nc29uX2NzNTUzNl9pc2FfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyogdGhlIHVhcnQxIGFuZCB1YXJ0MiBpbnRlcnJ1cHQgaW4gUElDIGlzIGVuYWJsZWQgYXMgZGVmYXVsdCAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX1VBUlQxX0lOVF9SRUcsIDEpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX1VBUlQyX0lOVF9SRUcsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbG9vbmdzb25fY3M1NTM2X2lkZV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKiBzZXR0aW5nIHRoZSBtdXRleCBwaW4gYXMgSURFIGZ1bmN0aW9uICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfSURFX0NGR19SRUcsCisJCQkgICAgICAgQ1M1NTM2X0lERV9GTEFTSF9TSUdOQVRVUkUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbG9vbmdzb25fY3M1NTM2X2FjY19maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKiBlbmFibGUgdGhlIEFVRElPIGludGVycnVwdCBpbiBQSUMgICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQUNDX0lOVF9SRUcsIDEpOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGMwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxvb25nc29uX2NzNTUzNl9vaGNpX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCS8qIGVuYWJsZSB0aGUgT0hDSSBpbnRlcnJ1cHQgaW4gUElDICovCisJLyogVEhFIE9IQ0ksIEVIQ0ksIFVEQywgT1RHIGFyZSBzaGFyZWQgd2l0aCBpbnRlcnJ1cHQgaW4gUElDICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfT0hDSV9JTlRfUkVHLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxvb25nc29uX2NzNTUzNl9laGNpX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXUzMiBoaSwgbG87CisKKwkvKiBTZXJpYWwgc2hvcnQgZGV0ZWN0IGVuYWJsZSAqLworCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgJmhpLCAmbG8pOworCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDMpLCBsbyk7CisKKwkvKiBzZXR0aW5nIHRoZSBVU0IyLjAgbWljcm8gZnJhbWUgbGVuZ3RoICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfRUhDSV9GTEFESl9SRUcsIDB4MjAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsb29uZ3Nvbl9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAmdmFsKTsKKwkvKiBPbmx5IDIgcG9ydCBiZSB1c2VkICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjMpIHwgMHgyKTsKK30KKworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBLAorCQkJIGxvb25nc29uX2NzNTUzNl9pc2FfZml4dXApOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfT0hDLAorCQkJIGxvb25nc29uX2NzNTUzNl9vaGNpX2ZpeHVwKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0VIQywKKwkJCSBsb29uZ3Nvbl9jczU1MzZfZWhjaV9maXh1cCk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9BVURJTywKKwkJCSBsb29uZ3Nvbl9jczU1MzZfYWNjX2ZpeHVwKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSwKKwkJCSBsb29uZ3Nvbl9jczU1MzZfaWRlX2ZpeHVwKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCQkJIGxvb25nc29uX25lY19maXh1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1ib25pdG82NC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtYm9uaXRvNjQuYwppbmRleCA1NGU1NWU3Li4xYjNlMDNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1ib25pdG82NC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWJvbml0bzY0LmMKQEAgLTI5LDEzICsyOSw4IEBACiAjZGVmaW5lIFBDSV9BQ0NFU1NfUkVBRCAgMAogI2RlZmluZSBQQ0lfQUNDRVNTX1dSSVRFIDEKIAotI2lmZGVmIENPTkZJR19MRU1PVEVfRlVMT09ORzJFCi0jZGVmaW5lIENGR19TUEFDRV9SRUcob2Zmc2V0KSAodm9pZCAqKUNLU0VHMUFERFIoQk9OSVRPX1BDSUNGR19CQVNFIHwgKG9mZnNldCkpCi0jZGVmaW5lIElEX1NFTF9CRUdJTiAxMQotI2Vsc2UKICNkZWZpbmUgQ0ZHX1NQQUNFX1JFRyhvZmZzZXQpICh2b2lkICopQ0tTRUcxQUREUihfcGNpY3RybF9ib25pdG9fcGNpY2ZnICsgKG9mZnNldCkpCiAjZGVmaW5lIElEX1NFTF9CRUdJTiAxMAotI2VuZGlmCiAjZGVmaW5lIE1BWF9ERVZfTlVNICgzMSAtIElEX1NFTF9CRUdJTikKIAogCkBAIC03NywxMCArNzIsOCBAQAogCWFkZHJwID0gQ0ZHX1NQQUNFX1JFRyhhZGRyICYgMHhmZmZmKTsKIAlpZiAoYWNjZXNzX3R5cGUgPT0gUENJX0FDQ0VTU19XUklURSkgewogCQl3cml0ZWwoY3B1X3RvX2xlMzIoKmRhdGEpLCBhZGRycCk7Ci0jaWZuZGVmIENPTkZJR19MRU1PVEVfRlVMT09ORzJFCiAJCS8qIFdhaXQgdGlsbCBkb25lICovCiAJCXdoaWxlIChCT05JVE9fUENJTVNUQVQgJiAweEYpOwotI2VuZGlmCiAJfSBlbHNlIHsKIAkJKmRhdGEgPSBsZTMyX3RvX2NwdShyZWFkbChhZGRycCkpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jIGIvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1ZDNkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogZnVsb29uZzJlIHNwZWNpZmljIFBDSSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNCAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqCUFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CisgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsb29uZ3Nvbi5oPgorCisjaWZkZWYgQ09ORklHX0NTNTUzNgorI2luY2x1ZGUgPGNzNTUzNi9jczU1MzZfcGNpLmg+CisjaW5jbHVkZSA8Y3M1NTM2L2NzNTUzNi5oPgorI2VuZGlmCisKKyNkZWZpbmUgUENJX0FDQ0VTU19SRUFEICAwCisjZGVmaW5lIFBDSV9BQ0NFU1NfV1JJVEUgMQorCisjZGVmaW5lIENGR19TUEFDRV9SRUcob2Zmc2V0KSBcCisJKHZvaWQgKilDS1NFRzFBRERSKExPT05HU09OX1BDSUNGR19CQVNFIHwgKG9mZnNldCkpCisjZGVmaW5lIElEX1NFTF9CRUdJTiAxMQorI2RlZmluZSBNQVhfREVWX05VTSAoMzEgLSBJRF9TRUxfQkVHSU4pCisKKworc3RhdGljIGludCBsb29uZ3Nvbl9wY2liaW9zX2NvbmZpZ19hY2Nlc3ModW5zaWduZWQgY2hhciBhY2Nlc3NfdHlwZSwKKwkJCQkgICAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQkJCSAgICAgIHUzMiAqZGF0YSkKK3sKKwl1MzIgYnVzbnVtID0gYnVzLT5udW1iZXI7CisJdTMyIGFkZHIsIHR5cGU7CisJdTMyIGR1bW15OworCXZvaWQgKmFkZHJwOworCWludCBkZXZpY2UgPSBQQ0lfU0xPVChkZXZmbik7CisJaW50IGZ1bmN0aW9uID0gUENJX0ZVTkMoZGV2Zm4pOworCWludCByZWcgPSB3aGVyZSAmIH4zOworCisJaWYgKGJ1c251bSA9PSAwKSB7CisJCS8qIGJvYXJkLXNwZWNpZmljIHBhcnQsY3VycmVudGx5LG9ubHkgZnVsb29uZzJmLHllZWxvb25nMmYKKwkJICogdXNlIENTNTUzNiwgZnVsb29uZzJlIHVzZSB2aWE2ODZiLCBnZGl1bSBoYXMgbm8KKwkJICogc291dGggYnJpZGdlCisJCSAqLworI2lmZGVmIENPTkZJR19DUzU1MzYKKwkJLyogY3M1NTM2X3BjaV9jb25mX3JlYWQ0L3dyaXRlNCgpIHdpbGwgY2FsbCBfcmRtc3IvX3dybXNyKCkgdG8KKwkJICogYWNjZXNzIHRoZSByZWdzdGVycyBQQ0lfTVNSX0FERFIsIFBDSV9NU1JfREFUQV9MTywKKwkJICogUENJX01TUl9EQVRBX0hJLCB3aGljaCBpcyBiaWdnZXIgdGhhbiBQQ0lfTVNSX0NUUkwsIHNvLCBpdAorCQkgKiB3aWxsIG5vdCBnbyB0aGlzIGJyYW5jaCwgYnV0IHRoZSBvdGhlcnMuIHNvLCBubyBjYWxsaW5nIGRlYWQKKwkJICogbG9vcCBoZXJlLgorCQkgKi8KKwkJaWYgKChQQ0lfSURTRUxfQ1M1NTM2ID09IGRldmljZSkgJiYgKHJlZyA8IFBDSV9NU1JfQ1RSTCkpIHsKKwkJCXN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKKwkJCWNhc2UgUENJX0FDQ0VTU19SRUFEOgorCQkJCSpkYXRhID0gY3M1NTM2X3BjaV9jb25mX3JlYWQ0KGZ1bmN0aW9uLCByZWcpOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ0lfQUNDRVNTX1dSSVRFOgorCQkJCWNzNTUzNl9wY2lfY29uZl93cml0ZTQoZnVuY3Rpb24sIHJlZywgKmRhdGEpOworCQkJCWJyZWFrOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCQkvKiBUeXBlIDAgY29uZmlndXJhdGlvbiBmb3Igb25ib2FyZCBQQ0kgYnVzICovCisJCWlmIChkZXZpY2UgPiBNQVhfREVWX05VTSkKKwkJCXJldHVybiAtMTsKKworCQlhZGRyID0gKDEgPDwgKGRldmljZSArIElEX1NFTF9CRUdJTikpIHwgKGZ1bmN0aW9uIDw8IDgpIHwgcmVnOworCQl0eXBlID0gMDsKKwl9IGVsc2UgeworCQkvKiBUeXBlIDEgY29uZmlndXJhdGlvbiBmb3Igb2ZmYm9hcmQgUENJIGJ1cyAqLworCQlhZGRyID0gKGJ1c251bSA8PCAxNikgfCAoZGV2aWNlIDw8IDExKSB8IChmdW5jdGlvbiA8PCA4KSB8IHJlZzsKKwkJdHlwZSA9IDB4MTAwMDA7CisJfQorCisJLyogQ2xlYXIgYWJvcnRzICovCisJTE9PTkdTT05fUENJQ01EIHw9IExPT05HU09OX1BDSUNNRF9NQUJPUlRfQ0xSIHwgXAorCQkJCUxPT05HU09OX1BDSUNNRF9NVEFCT1JUX0NMUjsKKworCUxPT05HU09OX1BDSU1BUF9DRkcgPSAoYWRkciA+PiAxNikgfCB0eXBlOworCisJLyogRmx1c2ggQm9uaXRvIHJlZ2lzdGVyIGJsb2NrICovCisJZHVtbXkgPSBMT09OR1NPTl9QQ0lNQVBfQ0ZHOworCW1taW93YigpOworCisJYWRkcnAgPSBDRkdfU1BBQ0VfUkVHKGFkZHIgJiAweGZmZmYpOworCWlmIChhY2Nlc3NfdHlwZSA9PSBQQ0lfQUNDRVNTX1dSSVRFKQorCQl3cml0ZWwoY3B1X3RvX2xlMzIoKmRhdGEpLCBhZGRycCk7CisJZWxzZQorCQkqZGF0YSA9IGxlMzJfdG9fY3B1KHJlYWRsKGFkZHJwKSk7CisKKwkvKiBEZXRlY3QgTWFzdGVyL1RhcmdldCBhYm9ydCAqLworCWlmIChMT09OR1NPTl9QQ0lDTUQgJiAoTE9PTkdTT05fUENJQ01EX01BQk9SVF9DTFIgfAorCQkJICAgICBMT09OR1NPTl9QQ0lDTURfTVRBQk9SVF9DTFIpKSB7CisJCS8qIEVycm9yIG9jY3VycmVkICovCisKKwkJLyogQ2xlYXIgYml0cyAqLworCQlMT09OR1NPTl9QQ0lDTUQgfD0gKExPT05HU09OX1BDSUNNRF9NQUJPUlRfQ0xSIHwKKwkJCQkgIExPT05HU09OX1BDSUNNRF9NVEFCT1JUX0NMUik7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworCit9CisKKworLyoKKyAqIFdlIGNhbid0IGFkZHJlc3MgOCBhbmQgMTYgYml0IHdvcmRzIGRpcmVjdGx5LiAgSW5zdGVhZCB3ZSBoYXZlIHRvCisgKiByZWFkL3dyaXRlIGEgMzJiaXQgd29yZCBhbmQgbWFzay9tb2RpZnkgdGhlIGRhdGEgd2UgYWN0dWFsbHkgd2FudC4KKyAqLworc3RhdGljIGludCBsb29uZ3Nvbl9wY2liaW9zX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl1MzIgZGF0YSA9IDA7CisKKwlpZiAoKHNpemUgPT0gMikgJiYgKHdoZXJlICYgMSkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJZWxzZSBpZiAoKHNpemUgPT0gNCkgJiYgKHdoZXJlICYgMykpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlpZiAobG9vbmdzb25fcGNpYmlvc19jb25maWdfYWNjZXNzKFBDSV9BQ0NFU1NfUkVBRCwgYnVzLCBkZXZmbiwgd2hlcmUsCisJCQkJICAgICAgICZkYXRhKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmZmY7CisJZWxzZQorCQkqdmFsID0gZGF0YTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgbG9vbmdzb25fcGNpYmlvc193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXUzMiBkYXRhID0gMDsKKworCWlmICgoc2l6ZSA9PSAyKSAmJiAod2hlcmUgJiAxKSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKwllbHNlIGlmICgoc2l6ZSA9PSA0KSAmJiAod2hlcmUgJiAzKSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCWlmIChzaXplID09IDQpCisJCWRhdGEgPSB2YWw7CisJZWxzZSB7CisJCWlmIChsb29uZ3Nvbl9wY2liaW9zX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLAorCQkJCQl3aGVyZSwgJmRhdGEpKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChzaXplID09IDEpCisJCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCQkJCSh2YWwgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKTsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkJZGF0YSA9IChkYXRhICYgfigweGZmZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCQkJCSh2YWwgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKTsKKwl9CisKKwlpZiAobG9vbmdzb25fcGNpYmlvc19jb25maWdfYWNjZXNzKFBDSV9BQ0NFU1NfV1JJVEUsIGJ1cywgZGV2Zm4sIHdoZXJlLAorCQkJCSAgICAgICAmZGF0YSkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0cnVjdCBwY2lfb3BzIGxvb25nc29uX3BjaV9vcHMgPSB7CisJLnJlYWQgPSBsb29uZ3Nvbl9wY2liaW9zX3JlYWQsCisJLndyaXRlID0gbG9vbmdzb25fcGNpYmlvc193cml0ZQorfTsKKworI2lmZGVmIENPTkZJR19DUzU1MzYKK3ZvaWQgX3JkbXNyKHUzMiBtc3IsIHUzMiAqaGksIHUzMiAqbG8pCit7CisJc3RydWN0IHBjaV9idXMgYnVzID0geworCQkubnVtYmVyID0gUENJX0JVU19DUzU1MzYKKwl9OworCXUzMiBkZXZmbiA9IFBDSV9ERVZGTihQQ0lfSURTRUxfQ1M1NTM2LCAwKTsKKwlsb29uZ3Nvbl9wY2liaW9zX3dyaXRlKCZidXMsIGRldmZuLCBQQ0lfTVNSX0FERFIsIDQsIG1zcik7CisJbG9vbmdzb25fcGNpYmlvc19yZWFkKCZidXMsIGRldmZuLCBQQ0lfTVNSX0RBVEFfTE8sIDQsIGxvKTsKKwlsb29uZ3Nvbl9wY2liaW9zX3JlYWQoJmJ1cywgZGV2Zm4sIFBDSV9NU1JfREFUQV9ISSwgNCwgaGkpOworfQorRVhQT1JUX1NZTUJPTChfcmRtc3IpOworCit2b2lkIF93cm1zcih1MzIgbXNyLCB1MzIgaGksIHUzMiBsbykKK3sKKwlzdHJ1Y3QgcGNpX2J1cyBidXMgPSB7CisJCS5udW1iZXIgPSBQQ0lfQlVTX0NTNTUzNgorCX07CisJdTMyIGRldmZuID0gUENJX0RFVkZOKFBDSV9JRFNFTF9DUzU1MzYsIDApOworCWxvb25nc29uX3BjaWJpb3Nfd3JpdGUoJmJ1cywgZGV2Zm4sIFBDSV9NU1JfQUREUiwgNCwgbXNyKTsKKwlsb29uZ3Nvbl9wY2liaW9zX3dyaXRlKCZidXMsIGRldmZuLCBQQ0lfTVNSX0RBVEFfTE8sIDQsIGxvKTsKKwlsb29uZ3Nvbl9wY2liaW9zX3dyaXRlKCZidXMsIGRldmZuLCBQQ0lfTVNSX0RBVEFfSEksIDQsIGhpKTsKK30KK0VYUE9SVF9TWU1CT0woX3dybXNyKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktZXhjaXRlLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE1Njg3Ni4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRwotICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Ci0gKiAgQmFzZWQgb24gdGhlIFBNQy1TaWVycmEgWW9zZW1pdGUgYm9hcmQgc3VwcG9ydCBieSBSYWxmIEJhZWNobGUuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4KLSNpbmNsdWRlIDxleGNpdGUuaD4KLQotCi1leHRlcm4gc3RydWN0IHBjaV9vcHMgdGl0YW5fcGNpX29wczsKLQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlCi0JbWVtX3Jlc291cmNlID0gCXsKLQkJLm5hbWUJPSAiUENJIG1lbW9yeSIsCi0JCS5zdGFydAk9IEVYQ0lURV9QSFlTX1BDSV9NRU0sCi0JCS5lbmQJPSBFWENJVEVfUEhZU19QQ0lfTUVNICsgRVhDSVRFX1NJWkVfUENJX01FTSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlpb19yZXNvdXJjZSA9IHsKLQkJLm5hbWUJPSAiUENJIEkvTyIsCi0JCS5zdGFydAk9IEVYQ0lURV9QSFlTX1BDSV9JTywKLQkJLmVuZAk9IEVYQ0lURV9QSFlTX1BDSV9JTyArIEVYQ0lURV9TSVpFX1BDSV9JTyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KLQl9OwotCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgYnhfY29udHJvbGxlciA9IHsKLQkucGNpX29wcwk9ICZ0aXRhbl9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJPSAmbWVtX3Jlc291cmNlLAotCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMLAotCS5pb19yZXNvdXJjZQk9ICZpb19yZXNvdXJjZSwKLQkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMCi19OwotCi0KLXN0YXRpYyBjaGFyCi0JaW9wYWdlX2ZhaWxlZFtdIF9faW5pdGRhdGEgICA9ICJDYW5ub3QgYWxsb2NhdGUgUENJIEkvTyBwYWdlIiwKLQltb2RlYml0c19ub19wY2lbXSBfX2luaXRkYXRhID0gIlBDSSBpcyBub3QgY29uZmlndXJlZCBpbiBtb2RlIGJpdHMiOwotCi0jZGVmaW5lIFJNOTAwMHgyX09DRF9IVFNDCTB4MDYwNAotI2RlZmluZSBSTTkwMDB4Ml9PQ0RfSFRCSEwJMHgwNjBjCi0jZGVmaW5lIFJNOTAwMHgyX09DRF9QQ0lIUlNUCTB4MDc4YwotCi0jZGVmaW5lIFJNOUtfT0NEX01PREVCSVQxCTB4MDBkNCAvKiAoTU9ERUJJVDEpIE1vZGUgQml0IDEgKi8KLSNkZWZpbmUgUk05S19PQ0RfQ1BIRENSCQkweDAwZjQgLyogQ1BVLVBDSS9IVCBEYXRhIENvbnRyb2wuICovCi0KLSNkZWZpbmUgUENJU0NfRkIyQiAJCTB4MDAwMDAyMDAKLSNkZWZpbmUgUENJU0NfTVdJQ0cJCTB4MDAwMDAwMTAKLSNkZWZpbmUgUENJU0NfRU1DCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFBDSVNDX0VSTUEJCTB4MDAwMDAwMDIKLQotCi0KLXN0YXRpYyBpbnQgX19pbml0IGJhc2xlcl9leGNpdGVfcGNpX3NldHVwKHZvaWQpCi17Ci0JY29uc3QgdW5zaWduZWQgaW50IGZ1bGxiYXJzID0gbWVtc2l6ZSAvICgyNTYgPDwgMjApOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyogQ2hlY2sgbW9kZWJpdHMgdG8gc2VlIGlmIFBDSSBpcyByZWFsbHkgZW5hYmxlZC4gKi8KLQlpZiAoISgob2NkX3JlYWRsKFJNOUtfT0NEX01PREVCSVQxKSA+PiAoNDctMzIpKSAmIDB4MSkpCi0JCXBhbmljKG1vZGViaXRzX25vX3BjaSk7Ci0KLQlpZiAoTlVMTCA9PSByZXF1ZXN0X21lbV9yZWdpb24oRVhDSVRFX1BIWVNfUENJX0lPLCBFWENJVEVfU0laRV9QQ0lfSU8sCi0JCQkJICAgICAgICJNZW1vcnktbWFwcGVkIFBDSSBJL08gcGFnZSIpKQotCQlwYW5pYyhpb3BhZ2VfZmFpbGVkKTsKLQotCS8qIEVuYWJsZSBQQ0kgMCBhcyBtYXN0ZXIgZm9yIGNvbmZpZyBjeWNsZXMgKi8KLQlvY2Rfd3JpdGVsKFBDSVNDX0VNQyB8IFBDSVNDX0VSTUEsIFJNOTAwMHgyX09DRF9IVFNDKTsKLQotCi0JLyogU2V0IHVwIGxhdGVuY3kgdGltZXIgKi8KLQlvY2Rfd3JpdGVsKDB4ODAwOCwgUk05MDAweDJfT0NEX0hUQkhMKTsKLQotCS8qICBTZXR1cCBob3N0IElPIGFuZCBNZW1vcnkgc3BhY2UgKi8KLQlvY2Rfd3JpdGVsKChFWENJVEVfUEhZU19QQ0lfSU8gPj4gNCkgfCAxLCBMS0I3KTsKLQlvY2Rfd3JpdGVsKCgoRVhDSVRFX1NJWkVfUENJX0lPID4+IDQpICYgMHg3ZmZmZmYwMCkgLSAweDEwMCwgTEtNNyk7Ci0Jb2NkX3dyaXRlbCgoRVhDSVRFX1BIWVNfUENJX01FTSA+PiA0KSB8IDEsIExLQjgpOwotCW9jZF93cml0ZWwoKChFWENJVEVfU0laRV9QQ0lfTUVNID4+IDQpICYgMHg3ZmZmZmYwMCkgLSAweDEwMCwgTEtNOCk7Ci0KLQkvKiBTZXQgdXAgUENJIEJBUnMgdG8gbWFwIGFsbCBpbnN0YWxsZWQgbWVtb3J5ICovCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQljb25zdCB1bnNpZ25lZCBpbnQgYmFyID0gMHg2MTAgKyBpICogNDsKLQotCSAgICAgCWlmIChpIDwgZnVsbGJhcnMpIHsKLQkJCW9jZF93cml0ZWwoMHgxMDAwMDAwMCAqIGksIGJhcik7Ci0JCQlvY2Rfd3JpdGVsKDB4MDEwMDAwMDAgKiBpLCBiYXIgKyAweDE0MCk7Ci0JCQlvY2Rfd3JpdGVsKDB4MGZmZmYwMjksIGJhciArIDB4MTAwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkgICAgIAlpZiAoaSA9PSBmdWxsYmFycykgewotCQkJaW50IG87Ci0JCQl1MzIgbWFzazsKLQotCQkJY29uc3QgdW5zaWduZWQgbG9uZyByZW0gPSBtZW1zaXplIC0gaSAqIDB4MTAwMDAwMDA7Ci0JCQlpZiAoIXJlbSkgewotCQkJCW9jZF93cml0ZWwoMHgwMDAwMDAwMCwgYmFyICsgMHgxMDApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlvID0gZmZzKHJlbSkgLSAxOwotCQkJaWYgKHJlbSAmIH4oMHgxIDw8IG8pKQotCQkJCW8rKzsKLQkJCW1hc2sgPSAoKDB4MSA8PCBvKSAmIDB4MGZmZmYwMDApIC0gMHgxMDAwOwotCQkJb2NkX3dyaXRlbCgweDEwMDAwMDAwICogaSwgYmFyKTsKLQkJCW9jZF93cml0ZWwoMHgwMTAwMDAwMCAqIGksIGJhciArIDB4MTQwKTsKLQkJCW9jZF93cml0ZWwoMHgwMDAwMDAyOSB8IG1hc2ssIGJhciArIDB4MTAwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJb2NkX3dyaXRlbCgweDAwMDAwMDAwLCBiYXIgKyAweDEwMCk7Ci0JfQotCi0JLyogRmluYWxseSwgZW5hYmxlIHRoZSBQQ0kgaW50ZXJydXB0ICovCi0jaWYgVVNCX0lSUSA+IDcKLQlzZXRfYzBfaW50Y29udHJvbCgxIDw8IFVTQl9JUlEpOwotI2Vsc2UKLQlzZXRfYzBfc3RhdHVzKDEgPDwgKFVTQl9JUlEgKyA4KSk7Ci0jZW5kaWYKLQotCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IEVYQ0lURV9QSFlTX1BDSV9JTzsKLQlpb3BvcnRfcmVzb3VyY2UuZW5kID0gRVhDSVRFX1BIWVNfUENJX0lPICsgRVhDSVRFX1NJWkVfUENJX0lPIC0gMTsKLQlzZXRfaW9fcG9ydF9iYXNlKCh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoRVhDSVRFX1BIWVNfUENJX0lPLCBFWENJVEVfU0laRV9QQ0lfSU8pKTsKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmYnhfY29udHJvbGxlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotYXJjaF9pbml0Y2FsbChiYXNsZXJfZXhjaXRlX3BjaV9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnIGIvYXJjaC9taXBzL3Bvd2VydHYvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBlN2UzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitzb3VyY2UgImFyY2gvbWlwcy9wb3dlcnR2L2FzaWMvS2NvbmZpZyIKKworY29uZmlnIEJPT1RMT0FERVJfRFJJVkVSCisJYm9vbCAiUG93ZXJUViBCb290bG9hZGVyIERyaXZlciBTdXBwb3J0IgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gUE9XRVJUVgorCWhlbHAKKwkgIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBsb2FkIGJvb3Rsb2FkZXIgZHJpdmVyLgorCitjb25maWcgQk9PVExPQURFUl9GQU1JTFkKKwlzdHJpbmcgIlBPV0VSVFYgQm9vdGxvYWRlciBGYW1pbHkgc3RyaW5nIgorCWRlZmF1bHQgIjg1IgorCWRlcGVuZHMgb24gUE9XRVJUViAmJiAhQk9PVExPQURFUl9EUklWRVIKKwloZWxwCisJICBUaGlzIHZhbHVlIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiB0aGUgYm9vdGxvYWRlciBkcml2ZXIgaXMgZGlzYWJsZWQKKwkgIGFuZCBtdXN0IGJlIGV4YWN0bHkgdHdvIGNoYXJhY3RlcnMgbG9uZy4gRmFtaWxpZXMgc3VwcG9ydGVkIGFyZToKKwkgICAgUjEgLSBSTkctMTAwICBSMiAtIFJORy0yMDAKKwkgICAgQTEgLSBDbGFzcyBBICBCMSAtIENsYXNzIEIKKwkgICAgRTEgLSBDbGFzcyBFICBGMSAtIENsYXNzIEYKKwkgICAgNDQgLSA0NXh4ICAgICA0NiAtIDQ2eHgKKwkgICAgODUgLSA4NXh4ICAgICA4NiAtIDg2eHgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L01ha2VmaWxlIGIvYXJjaC9taXBzL3Bvd2VydHYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwZDczYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L01ha2VmaWxlCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisjIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyMgQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpICAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIE1ha2VmaWxlIGZvciB0aGUgQ2lzY28gUG93ZXJUVi1zcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzCisjIHVuZGVyIExpbnV4LgorIworCitvYmoteSArPSBpbml0Lm8gbWVtb3J5Lm8gcmVzZXQubyB0aW1lLm8gcG93ZXJ0dl9zZXR1cC5vIGFzaWMvIHBjaS8KKworRVhUUkFfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvS2NvbmZpZyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDE2YmZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9LY29uZmlnCkBAIC0wLDAgKzEsMjggQEAKK2NvbmZpZyBNSU5fUlVOVElNRV9SRVNPVVJDRVMKKwlib29sICJTdXBwb3J0IGZvciBtaW5pbXVtIHJ1bnRpbWUgcmVzb3VyY2VzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gUE9XRVJUVgorCWhlbHAKKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIChTQSBhc2ljKSBydW50aW1lCisJICByZXNvdXJjZXMgdGhhdCBhcmUgcHJlYWxsb2NhdGVkIGJ5IHRoZSBrZXJuZWwuCisKK2NvbmZpZyBNSU5fUlVOVElNRV9ET0NTSVMKKwlib29sICJTdXBwb3J0IGZvciBtaW5pbXVtIERPQ1NJUyByZXNvdXJjZSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1JTl9SVU5USU1FX1JFU09VUkNFUworCWhlbHAKKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHByZWFsbG9jYXRlZCBET0NTSVMgcmVzb3VyY2UuCisKK2NvbmZpZyBNSU5fUlVOVElNRV9QTUVNCisJYm9vbCAiU3VwcG9ydCBmb3IgbWluaW11bSBQTUVNIHJlc291cmNlIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gTUlOX1JVTlRJTUVfUkVTT1VSQ0VTCisJaGVscAorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgcHJlYWxsb2NhdGVkIE1lbW9yeSByZXNvdXJjZS4KKworY29uZmlnIE1JTl9SVU5USU1FX1RGVFAKKwlib29sICJTdXBwb3J0IGZvciBtaW5pbXVtIFRGVFAgcmVzb3VyY2UiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBNSU5fUlVOVElNRV9SRVNPVVJDRVMKKwloZWxwCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBwcmVhbGxvY2F0ZWQgVEZUUCByZXNvdXJjZS4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvTWFrZWZpbGUgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYmZkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyMKKworb2JqLXkgKz0gYXNpYy1jYWxsaW9wZS5vIGFzaWMtY3JvbnVzLm8gYXNpYy16ZXVzLm8gYXNpY19kZXZpY2VzLm8gYXNpY19pbnQubyBcCisJIGlycV9hc2ljLm8gcHJlYWxsb2MtY2FsbGlvcGUubyBwcmVhbGxvYy1jcm9udXMubyBcCisJIHByZWFsbG9jLWNyb251c2xpdGUubyBwcmVhbGxvYy16ZXVzLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XYWxsIC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLWNhbGxpb3BlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkMzg4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jYWxsaW9wZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBMb2NhdGlvbnMgb2YgZGV2aWNlcyBpbiB0aGUgQ2FsbGlvcGUgQVNJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKworY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCBjYWxsaW9wZV9yZWdpc3Rlcl9tYXAgPSB7CisJLmVpY19zbG93MF9zdHJ0X2FkZCA9IDB4ODAwMDAwLAorCS5laWNfY2ZnX2JpdHMgPSAweDgwMDAzOCwKKwkuZWljX3JlYWR5X3N0YXR1cyA9IDB4ODAwMDRjLAorCisJLmNoaXB2ZXIzID0gMHhBMDA4MDAsCisJLmNoaXB2ZXIyID0gMHhBMDA4MDQsCisJLmNoaXB2ZXIxID0gMHhBMDA4MDgsCisJLmNoaXB2ZXIwID0gMHhBMDA4MGMsCisKKwkvKiBUaGUgcmVnaXN0ZXJzIG9mIElSQmxhc3RlciAqLworCS51YXJ0MV9pbnRzdGF0ID0gMHhBMDE4MDAsCisJLnVhcnQxX2ludGVuID0gMHhBMDE4MDQsCisJLnVhcnQxX2NvbmZpZzEgPSAweEEwMTgwOCwKKwkudWFydDFfY29uZmlnMiA9IDB4QTAxODBDLAorCS51YXJ0MV9kaXZpc29yaGkgPSAweEEwMTgxMCwKKwkudWFydDFfZGl2aXNvcmxvID0gMHhBMDE4MTQsCisJLnVhcnQxX2RhdGEgPSAweEEwMTgxOCwKKwkudWFydDFfc3RhdHVzID0gMHhBMDE4MUMsCisKKwkuaW50X3N0YXRfMyA9IDB4QTAyODAwLAorCS5pbnRfc3RhdF8yID0gMHhBMDI4MDQsCisJLmludF9zdGF0XzEgPSAweEEwMjgwOCwKKwkuaW50X3N0YXRfMCA9IDB4QTAyODBjLAorCS5pbnRfY29uZmlnID0gMHhBMDI4MTAsCisJLmludF9pbnRfc2NhbiA9IDB4QTAyODE4LAorCS5pZW5faW50XzMgPSAweEEwMjgzMCwKKwkuaWVuX2ludF8yID0gMHhBMDI4MzQsCisJLmllbl9pbnRfMSA9IDB4QTAyODM4LAorCS5pZW5faW50XzAgPSAweEEwMjgzYywKKwkuaW50X2xldmVsXzNfMyA9IDB4QTAyODgwLAorCS5pbnRfbGV2ZWxfM18yID0gMHhBMDI4ODQsCisJLmludF9sZXZlbF8zXzEgPSAweEEwMjg4OCwKKwkuaW50X2xldmVsXzNfMCA9IDB4QTAyODhjLAorCS5pbnRfbGV2ZWxfMl8zID0gMHhBMDI4OTAsCisJLmludF9sZXZlbF8yXzIgPSAweEEwMjg5NCwKKwkuaW50X2xldmVsXzJfMSA9IDB4QTAyODk4LAorCS5pbnRfbGV2ZWxfMl8wID0gMHhBMDI4OWMsCisJLmludF9sZXZlbF8xXzMgPSAweEEwMjhhMCwKKwkuaW50X2xldmVsXzFfMiA9IDB4QTAyOGE0LAorCS5pbnRfbGV2ZWxfMV8xID0gMHhBMDI4YTgsCisJLmludF9sZXZlbF8xXzAgPSAweEEwMjhhYywKKwkuaW50X2xldmVsXzBfMyA9IDB4QTAyOGIwLAorCS5pbnRfbGV2ZWxfMF8yID0gMHhBMDI4YjQsCisJLmludF9sZXZlbF8wXzEgPSAweEEwMjhiOCwKKwkuaW50X2xldmVsXzBfMCA9IDB4QTAyOGJjLAorCS5pbnRfZG9jc2lzX2VuID0gMHhBMDI4RjQsCisKKwkubWlwc19wbGxfc2V0dXAgPSAweDk4MDAwMCwKKwkudXNiX2ZzID0gMHg5ODAwMzAsICAgICAJLyogLWRlZmF1bHQgNzI4MDAwMjgtICovCisJLnRlc3RfYnVzID0gMHg5ODAwQ0MsCisJLmNydF9zcGFyZSA9IDB4OTgwMGQ0LAorCS51c2IyX29oY2lfaW50X21hc2sgPSAweDlBMDAwYywKKwkudXNiMl9zdHJhcCA9IDB4OUEwMDE0LAorCS5laGNpX2hjYXBiYXNlID0gMHg5QkZFMDAsCisJLm9oY2lfaGNfcmV2aXNpb24gPSAweDlCRkMwMCwKKwkuYmNtMV9ic19sbWlfc3RlZXIgPSAweDlFMDAwNCwKKwkudXNiMl9jb250cm9sID0gMHg5RTAwNTQsCisJLnVzYjJfc3RidXNfb2JjID0gMHg5QkZGMDAsCisJLnVzYjJfc3RidXNfbWVzc19zaXplID0gMHg5QkZGMDQsCisJLnVzYjJfc3RidXNfY2h1bmtfc2l6ZSA9IDB4OUJGRjA4LAorCisJLnBjaWVfcmVncyA9IDB4MDAwMDAwLCAgICAgIAkvKiAtZG9lc24ndCBleGlzdC0gKi8KKwkudGltX2NoID0gMHhBMDJDMTAsCisJLnRpbV9jbCA9IDB4QTAyQzE0LAorCS5ncGlvX2RvdXQgPSAweEEwMmMyMCwKKwkuZ3Bpb19kaW4gPSAweEEwMmMyNCwKKwkuZ3Bpb19kaXIgPSAweEEwMmMyQywKKwkud2F0Y2hkb2cgPSAweEEwMmMzMCwKKwkuZnJvbnRfcGFuZWwgPSAweDAwMDAwMCwgICAgCS8qIC1ub3QgdXNlZC0gKi8KK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtY3JvbnVzLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWMtY3JvbnVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0NTg5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy1jcm9udXMuYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogTG9jYXRpb25zIG9mIGRldmljZXMgaW4gdGhlIENyb251cyBBU0lDCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYy1BdGxhbnRhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBBdXRob3I6ICAgICAgIEtlbiBFcHBpbmV0dAorICogICAgICAgICAgICAgICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqCisgKiBEZXNjcmlwdGlvbjogIERlZmluZXMgdGhlIHBsYXRmb3JtIHJlc291cmNlcyBmb3IgdGhlIFNBIHNldHRvcC4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKK2NvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXAgY3JvbnVzX3JlZ2lzdGVyX21hcCA9IHsKKwkuZWljX3Nsb3cwX3N0cnRfYWRkID0gMHgwMDAwMDAsCisJLmVpY19jZmdfYml0cyA9IDB4MDAwMDM4LAorCS5laWNfcmVhZHlfc3RhdHVzID0gMHgwMDAwNEMsCisKKwkuY2hpcHZlcjMgPSAweDJBMDgwMCwKKwkuY2hpcHZlcjIgPSAweDJBMDgwNCwKKwkuY2hpcHZlcjEgPSAweDJBMDgwOCwKKwkuY2hpcHZlcjAgPSAweDJBMDgwQywKKworCS8qIFRoZSByZWdpc3RlcnMgb2YgSVJCbGFzdGVyICovCisJLnVhcnQxX2ludHN0YXQgPSAweDJBMTgwMCwKKwkudWFydDFfaW50ZW4gPSAweDJBMTgwNCwKKwkudWFydDFfY29uZmlnMSA9IDB4MkExODA4LAorCS51YXJ0MV9jb25maWcyID0gMHgyQTE4MEMsCisJLnVhcnQxX2Rpdmlzb3JoaSA9IDB4MkExODEwLAorCS51YXJ0MV9kaXZpc29ybG8gPSAweDJBMTgxNCwKKwkudWFydDFfZGF0YSA9IDB4MkExODE4LAorCS51YXJ0MV9zdGF0dXMgPSAweDJBMTgxQywKKworCS5pbnRfc3RhdF8zID0gMHgyQTI4MDAsCisJLmludF9zdGF0XzIgPSAweDJBMjgwNCwKKwkuaW50X3N0YXRfMSA9IDB4MkEyODA4LAorCS5pbnRfc3RhdF8wID0gMHgyQTI4MEMsCisJLmludF9jb25maWcgPSAweDJBMjgxMCwKKwkuaW50X2ludF9zY2FuID0gMHgyQTI4MTgsCisJLmllbl9pbnRfMyA9IDB4MkEyODMwLAorCS5pZW5faW50XzIgPSAweDJBMjgzNCwKKwkuaWVuX2ludF8xID0gMHgyQTI4MzgsCisJLmllbl9pbnRfMCA9IDB4MkEyODNDLAorCS5pbnRfbGV2ZWxfM18zID0gMHgyQTI4ODAsCisJLmludF9sZXZlbF8zXzIgPSAweDJBMjg4NCwKKwkuaW50X2xldmVsXzNfMSA9IDB4MkEyODg4LAorCS5pbnRfbGV2ZWxfM18wID0gMHgyQTI4OEMsCisJLmludF9sZXZlbF8yXzMgPSAweDJBMjg5MCwKKwkuaW50X2xldmVsXzJfMiA9IDB4MkEyODk0LAorCS5pbnRfbGV2ZWxfMl8xID0gMHgyQTI4OTgsCisJLmludF9sZXZlbF8yXzAgPSAweDJBMjg5QywKKwkuaW50X2xldmVsXzFfMyA9IDB4MkEyOEEwLAorCS5pbnRfbGV2ZWxfMV8yID0gMHgyQTI4QTQsCisJLmludF9sZXZlbF8xXzEgPSAweDJBMjhBOCwKKwkuaW50X2xldmVsXzFfMCA9IDB4MkEyOEFDLAorCS5pbnRfbGV2ZWxfMF8zID0gMHgyQTI4QjAsCisJLmludF9sZXZlbF8wXzIgPSAweDJBMjhCNCwKKwkuaW50X2xldmVsXzBfMSA9IDB4MkEyOEI4LAorCS5pbnRfbGV2ZWxfMF8wID0gMHgyQTI4QkMsCisJLmludF9kb2NzaXNfZW4gPSAweDJBMjhGNCwKKworCS5taXBzX3BsbF9zZXR1cCA9IDB4MUMwMDAwLAorCS51c2JfZnMgPSAweDFDMDAxOCwKKwkudGVzdF9idXMgPSAweDFDMDBDQywKKwkuY3J0X3NwYXJlID0gMHgxYzAwZDQsCisJLnVzYjJfb2hjaV9pbnRfbWFzayA9IDB4MjAwMDBDLAorCS51c2IyX3N0cmFwID0gMHgyMDAwMTQsCisJLmVoY2lfaGNhcGJhc2UgPSAweDIxRkUwMCwKKwkub2hjaV9oY19yZXZpc2lvbiA9IDB4MUUwMDAwLAorCS5iY20xX2JzX2xtaV9zdGVlciA9IDB4MkUwMDA4LAorCS51c2IyX2NvbnRyb2wgPSAweDJFMDA0QywKKwkudXNiMl9zdGJ1c19vYmMgPSAweDIxRkYwMCwKKwkudXNiMl9zdGJ1c19tZXNzX3NpemUgPSAweDIxRkYwNCwKKwkudXNiMl9zdGJ1c19jaHVua19zaXplID0gMHgyMUZGMDgsCisKKwkucGNpZV9yZWdzID0gMHgyMjAwMDAsCisJLnRpbV9jaCA9IDB4MkEyQzEwLAorCS50aW1fY2wgPSAweDJBMkMxNCwKKwkuZ3Bpb19kb3V0ID0gMHgyQTJDMjAsCisJLmdwaW9fZGluID0gMHgyQTJDMjQsCisJLmdwaW9fZGlyID0gMHgyQTJDMkMsCisJLndhdGNoZG9nID0gMHgyQTJDMzAsCisJLmZyb250X3BhbmVsID0gMHgyQTM4MDAsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljLXpldXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy16ZXVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2OWRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpYy16ZXVzLmMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIExvY2F0aW9ucyBvZiBkZXZpY2VzIGluIHRoZSBaZXVzIEFTSUMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWMuaD4KKworY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCB6ZXVzX3JlZ2lzdGVyX21hcCA9IHsKKwkuZWljX3Nsb3cwX3N0cnRfYWRkID0gMHgwMDAwMDAsCisJLmVpY19jZmdfYml0cyA9IDB4MDAwMDM4LAorCS5laWNfcmVhZHlfc3RhdHVzID0gMHgwMDAwNGMsCisKKwkuY2hpcHZlcjMgPSAweDI4MDgwMCwKKwkuY2hpcHZlcjIgPSAweDI4MDgwNCwKKwkuY2hpcHZlcjEgPSAweDI4MDgwOCwKKwkuY2hpcHZlcjAgPSAweDI4MDgwYywKKworCS8qIFRoZSByZWdpc3RlcnMgb2YgSVJCbGFzdGVyICovCisJLnVhcnQxX2ludHN0YXQgPSAweDI4MTgwMCwKKwkudWFydDFfaW50ZW4gPSAweDI4MTgwNCwKKwkudWFydDFfY29uZmlnMSA9IDB4MjgxODA4LAorCS51YXJ0MV9jb25maWcyID0gMHgyODE4MEMsCisJLnVhcnQxX2Rpdmlzb3JoaSA9IDB4MjgxODEwLAorCS51YXJ0MV9kaXZpc29ybG8gPSAweDI4MTgxNCwKKwkudWFydDFfZGF0YSA9IDB4MjgxODE4LAorCS51YXJ0MV9zdGF0dXMgPSAweDI4MTgxQywKKworCS5pbnRfc3RhdF8zID0gMHgyODI4MDAsCisJLmludF9zdGF0XzIgPSAweDI4MjgwNCwKKwkuaW50X3N0YXRfMSA9IDB4MjgyODA4LAorCS5pbnRfc3RhdF8wID0gMHgyODI4MGMsCisJLmludF9jb25maWcgPSAweDI4MjgxMCwKKwkuaW50X2ludF9zY2FuID0gMHgyODI4MTgsCisJLmllbl9pbnRfMyA9IDB4MjgyODMwLAorCS5pZW5faW50XzIgPSAweDI4MjgzNCwKKwkuaWVuX2ludF8xID0gMHgyODI4MzgsCisJLmllbl9pbnRfMCA9IDB4MjgyODNjLAorCS5pbnRfbGV2ZWxfM18zID0gMHgyODI4ODAsCisJLmludF9sZXZlbF8zXzIgPSAweDI4Mjg4NCwKKwkuaW50X2xldmVsXzNfMSA9IDB4MjgyODg4LAorCS5pbnRfbGV2ZWxfM18wID0gMHgyODI4OGMsCisJLmludF9sZXZlbF8yXzMgPSAweDI4Mjg5MCwKKwkuaW50X2xldmVsXzJfMiA9IDB4MjgyODk0LAorCS5pbnRfbGV2ZWxfMl8xID0gMHgyODI4OTgsCisJLmludF9sZXZlbF8yXzAgPSAweDI4Mjg5YywKKwkuaW50X2xldmVsXzFfMyA9IDB4MjgyOGEwLAorCS5pbnRfbGV2ZWxfMV8yID0gMHgyODI4YTQsCisJLmludF9sZXZlbF8xXzEgPSAweDI4MjhhOCwKKwkuaW50X2xldmVsXzFfMCA9IDB4MjgyOGFjLAorCS5pbnRfbGV2ZWxfMF8zID0gMHgyODI4YjAsCisJLmludF9sZXZlbF8wXzIgPSAweDI4MjhiNCwKKwkuaW50X2xldmVsXzBfMSA9IDB4MjgyOGI4LAorCS5pbnRfbGV2ZWxfMF8wID0gMHgyODI4YmMsCisJLmludF9kb2NzaXNfZW4gPSAweDI4MjhGNCwKKworCS5taXBzX3BsbF9zZXR1cCA9IDB4MWEwMDAwLAorCS51c2JfZnMgPSAweDFhMDAxOCwKKwkudGVzdF9idXMgPSAweDFhMDIzOCwKKwkuY3J0X3NwYXJlID0gMHgxYTAwOTAsCisJLnVzYjJfb2hjaV9pbnRfbWFzayA9IDB4MWUwMDBjLAorCS51c2IyX3N0cmFwID0gMHgxZTAwMTQsCisJLmVoY2lfaGNhcGJhc2UgPSAweDFGRkUwMCwKKwkub2hjaV9oY19yZXZpc2lvbiA9IDB4MUZGQzAwLAorCS5iY20xX2JzX2xtaV9zdGVlciA9IDB4MkMwMDA4LAorCS51c2IyX2NvbnRyb2wgPSAweDJjMDFhMCwKKwkudXNiMl9zdGJ1c19vYmMgPSAweDFGRkYwMCwKKwkudXNiMl9zdGJ1c19tZXNzX3NpemUgPSAweDFGRkYwNCwKKwkudXNiMl9zdGJ1c19jaHVua19zaXplID0gMHgxRkZGMDgsCisKKwkucGNpZV9yZWdzID0gMHgyMDAwMDAsCisJLnRpbV9jaCA9IDB4MjgyQzEwLAorCS50aW1fY2wgPSAweDI4MkMxNCwKKwkuZ3Bpb19kb3V0ID0gMHgyODJjMjAsCisJLmdwaW9fZGluID0gMHgyODJjMjQsCisJLmdwaW9fZGlyID0gMHgyODJjMkMsCisJLndhdGNoZG9nID0gMHgyODJjMzAsCisJLmZyb250X3BhbmVsID0gMHgyODM4MDAsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlODI4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKQEAgLTAsMCArMSw3ODcgQEAKKy8qCisgKiAgICAgICAgICAgICAgICAgICBBU0lDIERldmljZSBMaXN0IEludGlhbGl6YXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjogIERlZmluZXMgdGhlIHBsYXRmb3JtIHJlc291cmNlcyBmb3IgdGhlIFNBIHNldHRvcC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICoKKyAqIERlc2NyaXB0aW9uOiAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciB0aGUgU0Egc2V0dG9wLgorICoKKyAqIE5PVEU6IFRoZSBib290bG9hZGVyIGFsbG9jYXRlcyBwZXJzaXN0ZW50IG1lbW9yeSBhdCBhbiBhZGRyZXNzIHdoaWNoIGlzCisgKiAxNiBNaUIgYmVsb3cgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCBhZGRyZXNzIGluIEtTRUcwLiBBbGwgZml4ZWQKKyAqIGFkZHJlc3MgbWVtb3J5IHJlc2VydmF0aW9ucyBtdXN0IGF2b2lkIHRoaXMgcmVnaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmg+CisKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2tibGRyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2RlZmluZSBCT09UTERSRkFNSUxZKGJ5dGUxLCBieXRlMCkgKCgoYnl0ZTEpIDw8IDgpIHwgKGJ5dGUwKSkKKworLyoKKyAqIEZvcndhcmQgUHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBwbWVtX3NldHVwX3Jlc291cmNlKHZvaWQpOworCisvKgorICogR2xvYmFsIFZhcmlhYmxlcworICovCitlbnVtIGFzaWNfdHlwZSBhc2ljOworCit1bnNpZ25lZCBpbnQgcGxhdGZvcm1fZmVhdHVyZXM7Cit1bnNpZ25lZCBpbnQgcGxhdGZvcm1fZmFtaWx5OworY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcCAgKnJlZ2lzdGVyX21hcDsKK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbWFwKTsJCQkvKiBFeHBvcnRlZCBmb3IgdGVzdGluZyAqLwordW5zaWduZWQgbG9uZyBhc2ljX3BoeV9iYXNlOwordW5zaWduZWQgbG9uZyBhc2ljX2Jhc2U7CitFWFBPUlRfU1lNQk9MKGFzaWNfYmFzZSk7CQkJLyogRXhwb3J0ZWQgZm9yIHRlc3RpbmcgKi8KK3N0cnVjdCByZXNvdXJjZSAqZ3BfcmVzb3VyY2VzOworc3RhdGljIGJvb2wgdXNiX2NvbmZpZ3VyZWQ7CisKKy8qCisgKiBEb24ndCByZWNvbW1lbmQgdG8gdXNlIGl0IGRpcmVjdGx5LCBpdCBpcyB1c3VhbGx5IHVzZWQgYnkga2VybmVsIGludGVybmFsbHkuCisgKiBQb3J0YWJsZSBjb2RlIHNob3VsZCBiZSB1c2luZyBpbnRlcmZhY2VzIHN1Y2ggYXMgaW9yZW1wLCBkbWFfbWFwX3NpbmdsZSwgZXRjLgorICovCit1bnNpZ25lZCBsb25nIHBoeXNfdG9fYnVzX29mZnNldDsKK0VYUE9SVF9TWU1CT0wocGh5c190b19idXNfb2Zmc2V0KTsKKworLyoKKyAqCisgKiBJTyBSZXNvdXJjZSBEZWZpbml0aW9uCisgKgorICovCisKK3N0cnVjdCByZXNvdXJjZSBhc2ljX3Jlc291cmNlID0geworCS5uYW1lICA9ICJBU0lDIFJlc291cmNlIiwKKwkuc3RhcnQgPSAwLAorCS5lbmQgICA9IEFTSUNfSU9fU0laRSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKKy8qCisgKgorICogVVNCIEhvc3QgUmVzb3VyY2UgRGVmaW5pdGlvbgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVoY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkucGFyZW50ID0gJmFzaWNfcmVzb3VyY2UsCisJCS5zdGFydCAgPSAwLAorCQkuZW5kICAgID0gMHhmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgID0gaXJxX3VzYmVoY2ksCisJCS5lbmQgICAgPSBpcnFfdXNiZWhjaSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IGVoY2lfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVoY2lfZGV2aWNlID0geworCS5uYW1lID0gInBvd2VydHYtZWhjaSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlID0gZWhjaV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrID0gJmVoY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnBhcmVudCA9ICZhc2ljX3Jlc291cmNlLAorCQkuc3RhcnQgID0gMCwKKwkJLmVuZCAgICA9IDB4ZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ICA9IGlycV91c2JvaGNpLAorCQkuZW5kICAgID0gaXJxX3VzYm9oY2ksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvaGNpX2RldmljZSA9IHsKKwkubmFtZSA9ICJwb3dlcnR2LW9oY2kiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSAyLAorCS5yZXNvdXJjZSA9IG9oY2lfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayA9ICZvaGNpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gPSB7CisJJmVoY2lfZGV2aWNlLAorCSZvaGNpX2RldmljZSwKK307CisKKy8qCisgKgorICogUGxhdGZvcm0gQ29uZmlndXJhdGlvbiBhbmQgRGV2aWNlIEluaXRpYWxpemF0aW9uCisgKgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZnNfdXBkYXRlKGludCBwZSwgaW50IG1kLCBpbnQgc2RpdiwgaW50IGRpc2FibGVfZGl2X2J5XzMpCit7CisJaW50IGVuX3ByZywgYnlwLCBwd3IsIG5zYiwgdmFsOworCWludCBzb3V0OworCisJc291dCA9IDE7CisJZW5fcHJnID0gMTsKKwlieXAgPSAwOworCW5zYiA9IDE7CisJcHdyID0gMTsKKworCXZhbCA9ICgoc2RpdiA8PCAyOSkgfCAobWQgPDwgMjQpIHwgKHBlPDw4KSB8IChzb3V0PDwzKSB8IChieXA8PDIpIHwKKwkJKG5zYjw8MSkgfCAoZGlzYWJsZV9kaXZfYnlfMzw8NSkpOworCisJYXNpY193cml0ZSh2YWwsIHVzYl9mcyk7CisJYXNpY193cml0ZSh2YWwgfCAoZW5fcHJnPDw0KSwgdXNiX2ZzKTsKKwlhc2ljX3dyaXRlKHZhbCB8IChlbl9wcmc8PDQpIHwgcHdyLCB1c2JfZnMpOworfQorCisvKgorICogQWxsb3cgb3ZlcnJpZGUgb2YgYm9vdGxvYWRlci1zcGVjaWZpZWQgbW9kZWwKKyAqLworc3RhdGljIGNoYXIgX19pbml0ZGF0YSBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKworI2RlZmluZQlGT1JDRUZBTUlMWV9QQVJBTQkiZm9yY2VmYW1pbHkiCisKK3N0YXRpYyBfX2luaXQgaW50IGNoZWNrX2ZvcmNlZmFtaWx5KHVuc2lnbmVkIGNoYXIgZm9yY2VkX2ZhbWlseVsyXSkKK3sKKwljb25zdCBjaGFyICpwOworCisJZm9yY2VkX2ZhbWlseVswXSA9ICdcMCc7CisJZm9yY2VkX2ZhbWlseVsxXSA9ICdcMCc7CisKKwkvKiBDaGVjayB0aGUgY29tbWFuZCBsaW5lIGZvciBhIGZvcmNlZmFtaWx5IGRpcmVjdGl2ZSAqLworCXN0cm5jcHkoY21kbGluZSwgYXJjc19jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSAtIDEpOworCXAgPSBzdHJzdHIoY21kbGluZSwgRk9SQ0VGQU1JTFlfUEFSQU0pOworCWlmIChwICYmIChwICE9IGNtZGxpbmUpICYmICgqKHAgLSAxKSAhPSAnICcpKQorCQlwID0gc3Ryc3RyKHAsICIgIiBGT1JDRUZBTUlMWV9QQVJBTSAiPSIpOworCisJaWYgKHApIHsKKwkJcCArPSBzdHJsZW4oRk9SQ0VGQU1JTFlfUEFSQU0gIj0iKTsKKworCQlpZiAoKnAgPT0gJ1wwJyB8fCAqKHAgKyAxKSA9PSAnXDAnIHx8CisJCQkoKihwICsgMikgIT0gJ1wwJyAmJiAqKHAgKyAyKSAhPSAnICcpKQorCQkJcHJfZXJyKEZPUkNFRkFNSUxZX1BBUkFNICIgbXVzdCBiZSBleGFjdGx5IHR3byAiCisJCQkJImNoYXJhY3RlcnMgbG9uZywgaWdub3JpbmcgdmFsdWVcbiIpOworCisJCWVsc2UgeworCQkJZm9yY2VkX2ZhbWlseVswXSA9ICpwOworCQkJZm9yY2VkX2ZhbWlseVsxXSA9ICoocCArIDEpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwbGF0Zm9ybV9zZXRfZmFtaWx5IC0gZGV0ZXJtaW5lIG1ham9yIHBsYXRmb3JtIGZhbWlseSB0eXBlLgorICoKKyAqIFJldHVybnMgZmFtaWx5IHR5cGU7IC0xIGlmIG5vbmUKKyAqIFJldHVybnMgdGhlIGZhbWlseSB0eXBlOyAtMSBpZiBub25lCisgKgorICovCitzdGF0aWMgX19pbml0IG5vaW5saW5lIHZvaWQgcGxhdGZvcm1fc2V0X2ZhbWlseSh2b2lkKQoreworI2RlZmluZSBCT09UTERSRkFNSUxZKGJ5dGUxLCBieXRlMCkgKCgoYnl0ZTEpIDw8IDgpIHwgKGJ5dGUwKSkKKworCXVuc2lnbmVkIGNoYXIgZm9yY2VkX2ZhbWlseVsyXTsKKwl1bnNpZ25lZCBzaG9ydCBib290bGRyX2ZhbWlseTsKKworCWNoZWNrX2ZvcmNlZmFtaWx5KGZvcmNlZF9mYW1pbHkpOworCisJaWYgKGZvcmNlZF9mYW1pbHlbMF0gIT0gJ1wwJyAmJiBmb3JjZWRfZmFtaWx5WzFdICE9ICdcMCcpCisJCWJvb3RsZHJfZmFtaWx5ID0gQk9PVExEUkZBTUlMWShmb3JjZWRfZmFtaWx5WzBdLAorCQkJZm9yY2VkX2ZhbWlseVsxXSk7CisJZWxzZSB7CisKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKwkJYm9vdGxkcl9mYW1pbHkgPSAodW5zaWduZWQgc2hvcnQpIGtibGRyX0dldFNXRmFtaWx5KCk7CisjZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX0JPT1RMT0FERVJfRkFNSUxZKQorCQlib290bGRyX2ZhbWlseSA9ICh1bnNpZ25lZCBzaG9ydCkgQk9PVExEUkZBTUlMWSgKKwkJCUNPTkZJR19CT09UTE9BREVSX0ZBTUlMWVswXSwKKwkJCUNPTkZJR19CT09UTE9BREVSX0ZBTUlMWVsxXSk7CisjZWxzZQorI2Vycm9yICJVbmtub3duIEJvb3Rsb2FkZXIgRmFtaWx5IgorI2VuZGlmCisjZW5kaWYKKwl9CisKKwlwcl9pbmZvKCJCb290bG9hZGVyIEZhbWlseSA9IDB4JTA0WFxuIiwgYm9vdGxkcl9mYW1pbHkpOworCisJc3dpdGNoIChib290bGRyX2ZhbWlseSkgeworCWNhc2UgQk9PVExEUkZBTUlMWSgnUicsICcxJyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV8xNTAwOworCQlicmVhazsKKwljYXNlIEJPT1RMRFJGQU1JTFkoJzQnLCAnNCcpOgorCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfNDUwMDsKKwkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCc0JywgJzYnKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzQ2MDA7CisJCWJyZWFrOworCWNhc2UgQk9PVExEUkZBTUlMWSgnQScsICcxJyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV80NjAwVlpBOworCQlicmVhazsKKwljYXNlIEJPT1RMRFJGQU1JTFkoJzgnLCAnNScpOgorCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfODUwMDsKKwkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCdSJywgJzInKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzg1MDBSTkc7CisJCWJyZWFrOworCWNhc2UgQk9PVExEUkZBTUlMWSgnOCcsICc2Jyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV84NjAwOworCQlicmVhazsKKwljYXNlIEJPT1RMRFJGQU1JTFkoJ0InLCAnMScpOgorCQlwbGF0Zm9ybV9mYW1pbHkgPSBGQU1JTFlfODYwMFZaQjsKKwkJYnJlYWs7CisJY2FzZSBCT09UTERSRkFNSUxZKCdFJywgJzEnKToKKwkJcGxhdGZvcm1fZmFtaWx5ID0gRkFNSUxZXzE1MDBWWkU7CisJCWJyZWFrOworCWNhc2UgQk9PVExEUkZBTUlMWSgnRicsICcxJyk6CisJCXBsYXRmb3JtX2ZhbWlseSA9IEZBTUlMWV8xNTAwVlpGOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwbGF0Zm9ybV9mYW1pbHkgPSAtMTsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBwbGF0Zm9ybV9nZXRfZmFtaWx5KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2ZhbWlseTsKK30KK0VYUE9SVF9TWU1CT0wocGxhdGZvcm1fZ2V0X2ZhbWlseSk7CisKKy8qCisgKiBcYnJpZWYgdXNiX2V5ZV9jb25maWd1cmUoKSBmb3Igb3B0aW1pemluZyB0aGUgVVNCIGV5ZSBvbiBDYWxsaW9wZS4KKyAqCisgKiBccGFyYW0gICAgIHVuc2lnbmVkIGludCB2YWx1ZSBzYXZlZCB0byB0aGUgcmVnaXN0ZXIuCisgKgorICogXHJldHVybiAgICBub25lCisgKgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdXNiX2V5ZV9jb25maWd1cmUodW5zaWduZWQgaW50IHZhbHVlKQoreworCWFzaWNfd3JpdGUoYXNpY19yZWFkKGNydF9zcGFyZSkgfCB2YWx1ZSwgY3J0X3NwYXJlKTsKK30KKworLyoKKyAqIHBsYXRmb3JtX2dldF9hc2ljIC0gZGV0ZXJtaW5lIHRoZSBBU0lDIHR5cGUuCisgKgorICogXHBhcmFtICAgICBub25lCisgKgorICogXHJldHVybiAgICBBU0lDIHR5cGU7IEFTSUNfVU5LTk9XTiBpZiBub25lCisgKgorICovCitlbnVtIGFzaWNfdHlwZSBwbGF0Zm9ybV9nZXRfYXNpYyh2b2lkKQoreworCXJldHVybiBhc2ljOworfQorRVhQT1JUX1NZTUJPTChwbGF0Zm9ybV9nZXRfYXNpYyk7CisKKy8qCisgKiBwbGF0Zm9ybV9jb25maWd1cmVfdXNiIC0gdXNiIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gcGxhdGZvcm0gdHlwZS4KKyAqIEBiY20xX3VzYjJfY3RsOgl2YWx1ZSBmb3IgdGhlIEJDTTFfVVNCMl9DVEwgcmVnaXN0ZXIsIHdoaWNoIGlzCisgKgkJCXF1aXJreQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGxhdGZvcm1fY29uZmlndXJlX3VzYih2b2lkKQoreworCXUzMiBiY20xX3VzYjJfY3RsOworCisJaWYgKHVzYl9jb25maWd1cmVkKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGFzaWMpIHsKKwljYXNlIEFTSUNfWkVVUzoKKwkJZnNfdXBkYXRlKDB4MDAwMCwgMHgxMSwgMHgwMiwgMCk7CisJCWJjbTFfdXNiMl9jdGwgPSAweDgwMzsKKwkJYnJlYWs7CisKKwljYXNlIEFTSUNfQ1JPTlVTOgorCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgorCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKKwkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOworCQlicmVhazsKKworCWNhc2UgQVNJQ19DQUxMSU9QRToKKwkJZnNfdXBkYXRlKDB4MDAwMCwgMHgxMSwgMHgwMiwgMSk7CisKKwkJc3dpdGNoIChwbGF0Zm9ybV9mYW1pbHkpIHsKKwkJY2FzZSBGQU1JTFlfMTUwMFZaRToKKwkJCWJyZWFrOworCisJCWNhc2UgRkFNSUxZXzE1MDBWWkY6CisJCQl1c2JfZXllX2NvbmZpZ3VyZSgweDAwM2MwMDAwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl1c2JfZXllX2NvbmZpZ3VyZSgweDAwMzAwMDAwKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByX2VycigiVW5rbm93biBBU0lDIHR5cGU6ICVkXG4iLCBhc2ljKTsKKwkJYnJlYWs7CisJfQorCisJLyogdHVybiBvbiBVU0IgcG93ZXIgKi8KKwlhc2ljX3dyaXRlKDAsIHVzYjJfc3RyYXApOworCS8qIEVuYWJsZSBhbGwgT0hDSSBpbnRlcnJ1cHRzICovCisJYXNpY193cml0ZShiY20xX3VzYjJfY3RsLCB1c2IyX2NvbnRyb2wpOworCS8qIFVTQjJfU1RCVVNfT0JDIHN0b3JlMzIvbG9hZDMyICovCisJYXNpY193cml0ZSgzLCB1c2IyX3N0YnVzX29iYyk7CisJLyogVVNCMl9TVEJVU19NRVNTX1NJWkUgMiBwYWNrZXRzICovCisJYXNpY193cml0ZSgxLCB1c2IyX3N0YnVzX21lc3Nfc2l6ZSk7CisJLyogVVNCMl9TVEJVU19DSFVOS19TSVpFIDIgcGFja2V0cyAqLworCWFzaWNfd3JpdGUoMSwgdXNiMl9zdGJ1c19jaHVua19zaXplKTsKKworCXVzYl9jb25maWd1cmVkID0gdHJ1ZTsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgVVNCIEVIQ0kgaW50ZXJmYWNlCisgKi8KK3ZvaWQgcGxhdGZvcm1fY29uZmlndXJlX3VzYl9laGNpKCkKK3sKKwlwbGF0Zm9ybV9jb25maWd1cmVfdXNiKCk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIFVTQiBPSENJIGludGVyZmFjZQorICovCit2b2lkIHBsYXRmb3JtX2NvbmZpZ3VyZV91c2Jfb2hjaSgpCit7CisJcGxhdGZvcm1fY29uZmlndXJlX3VzYigpOworfQorCisvKgorICogU2h1dCB0aGUgVVNCIEVIQ0kgaW50ZXJmYWNlIGRvd24tLWN1cnJlbnRseSBhIE5PUAorICovCit2b2lkIHBsYXRmb3JtX3VuY29uZmlndXJlX3VzYl9laGNpKCkKK3sKK30KKworLyoKKyAqIFNodXQgdGhlIFVTQiBPSENJIGludGVyZmFjZSBkb3duLS1jdXJyZW50bHkgYSBOT1AKKyAqLwordm9pZCBwbGF0Zm9ybV91bmNvbmZpZ3VyZV91c2Jfb2hjaSgpCit7Cit9CisKKy8qKgorICogY29uZmlndXJlX3BsYXRmb3JtIC0gY29uZmlndXJhdGlvbiBiYXNlZCBvbiBwbGF0Zm9ybSB0eXBlLgorICovCit2b2lkIF9faW5pdCBjb25maWd1cmVfcGxhdGZvcm0odm9pZCkKK3sKKwlwbGF0Zm9ybV9zZXRfZmFtaWx5KCk7CisKKwlzd2l0Y2ggKHBsYXRmb3JtX2ZhbWlseSkgeworCWNhc2UgRkFNSUxZXzE1MDA6CisJY2FzZSBGQU1JTFlfMTUwMFZaRToKKwljYXNlIEZBTUlMWV8xNTAwVlpGOgorCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFOworCQlhc2ljID0gQVNJQ19DQUxMSU9QRTsKKwkJYXNpY19waHlfYmFzZSA9IENBTExJT1BFX0lPX0JBU0U7CisJCXJlZ2lzdGVyX21hcCA9ICZjYWxsaW9wZV9yZWdpc3Rlcl9tYXA7CisJCWFzaWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXBfbm9jYWNoZShhc2ljX3BoeV9iYXNlLAorCQkJQVNJQ19JT19TSVpFKTsKKworCQlpZiAocGxhdGZvcm1fZmFtaWx5ID09IEZBTUlMWV8xNTAwVlpFKSB7CisJCQlncF9yZXNvdXJjZXMgPSBub25fZHZyX3Z6ZV9jYWxsaW9wZV9yZXNvdXJjZXM7CisJCQlwcl9pbmZvKCJQbGF0Zm9ybTogMTUwMC9WeiBDbGFzcyBFIC0gIgorCQkJCSJDQUxMSU9QRSwgTk9OX0RWUl9DQVBBQkxFXG4iKTsKKwkJfSBlbHNlIGlmIChwbGF0Zm9ybV9mYW1pbHkgPT0gRkFNSUxZXzE1MDBWWkYpIHsKKwkJCWdwX3Jlc291cmNlcyA9IG5vbl9kdnJfdnpmX2NhbGxpb3BlX3Jlc291cmNlczsKKwkJCXByX2luZm8oIlBsYXRmb3JtOiAxNTAwL1Z6IENsYXNzIEYgLSAiCisJCQkJIkNBTExJT1BFLCBOT05fRFZSX0NBUEFCTEVcbiIpOworCQl9IGVsc2UgeworCQkJZ3BfcmVzb3VyY2VzID0gbm9uX2R2cl9jYWxsaW9wZV9yZXNvdXJjZXM7CisJCQlwcl9pbmZvKCJQbGF0Zm9ybTogMTUwMC9STkcxMDAgLSBDQUxMSU9QRSwgIgorCQkJCSJOT05fRFZSX0NBUEFCTEVcbiIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQU1JTFlfNDUwMDoKKwkJcGxhdGZvcm1fZmVhdHVyZXMgPSBGRlNfQ0FQQUJMRSB8IFBDSUVfQ0FQQUJMRSB8CisJCQlESVNQTEFZX0NBUEFCTEU7CisJCWFzaWMgPSBBU0lDX1pFVVM7CisJCWFzaWNfcGh5X2Jhc2UgPSBaRVVTX0lPX0JBU0U7CisJCXJlZ2lzdGVyX21hcCA9ICZ6ZXVzX3JlZ2lzdGVyX21hcDsKKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBub25fZHZyX3pldXNfcmVzb3VyY2VzOworCisJCXByX2luZm8oIlBsYXRmb3JtOiA0NTAwIC0gWkVVUywgTk9OX0RWUl9DQVBBQkxFXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEZBTUlMWV80NjAwOgorCXsKKwkJdW5zaWduZWQgaW50IGNoaXB2ZXJzaW9uID0gMDsKKworCQkvKiBUaGUgc2V0dG9wIGhhcyBQQ0lFIGJ1dCBpdCBpc24ndCB1c2VkLCBzbyBkb24ndCBhZHZlcnRpc2UKKwkJICogaXQqLworCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFIHwgRElTUExBWV9DQVBBQkxFOworCQlhc2ljX3BoeV9iYXNlID0gQ1JPTlVTX0lPX0JBU0U7ICAgLyogc2FtZSBhcyBDcm9udXMgKi8KKwkJcmVnaXN0ZXJfbWFwID0gJmNyb251c19yZWdpc3Rlcl9tYXA7ICAgLyogc2FtZSBhcyBDcm9udXMgKi8KKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBub25fZHZyX2Nyb251c2xpdGVfcmVzb3VyY2VzOworCisJCS8qIEFTSUMgdmVyc2lvbiB3aWxsIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcmVhbCBDcm9udXNMaXRlIG9yCisJCSAqIENhc3RyYXRpKENyb251cykgKi8KKwkJY2hpcHZlcnNpb24gID0gYXNpY19yZWFkKGNoaXB2ZXIzKSA8PCAyNDsKKwkJY2hpcHZlcnNpb24gfD0gYXNpY19yZWFkKGNoaXB2ZXIyKSA8PCAxNjsKKwkJY2hpcHZlcnNpb24gfD0gYXNpY19yZWFkKGNoaXB2ZXIxKSA8PCA4OworCQljaGlwdmVyc2lvbiB8PSBhc2ljX3JlYWQoY2hpcHZlcjApOworCisJCWlmICgoY2hpcHZlcnNpb24gPT0gQ1JPTlVTXzEwKSB8fCAoY2hpcHZlcnNpb24gPT0gQ1JPTlVTXzExKSkKKwkJCWFzaWMgPSBBU0lDX0NST05VUzsKKwkJZWxzZQorCQkJYXNpYyA9IEFTSUNfQ1JPTlVTTElURTsKKworCQlwcl9pbmZvKCJQbGF0Zm9ybTogNDYwMCAtICVzLCBOT05fRFZSX0NBUEFCTEUsICIKKwkJCSJjaGlwdmVyc2lvbj0weCUwOFhcbiIsCisJCQkoYXNpYyA9PSBBU0lDX0NST05VUykgPyAiQ1JPTlVTIiA6ICJDUk9OVVMgTElURSIsCisJCQljaGlwdmVyc2lvbik7CisJCWJyZWFrOworCX0KKwljYXNlIEZBTUlMWV80NjAwVlpBOgorCQlwbGF0Zm9ybV9mZWF0dXJlcyA9IEZGU19DQVBBQkxFIHwgRElTUExBWV9DQVBBQkxFOworCQlhc2ljID0gQVNJQ19DUk9OVVM7CisJCWFzaWNfcGh5X2Jhc2UgPSBDUk9OVVNfSU9fQkFTRTsKKwkJcmVnaXN0ZXJfbWFwID0gJmNyb251c19yZWdpc3Rlcl9tYXA7CisJCWFzaWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXBfbm9jYWNoZShhc2ljX3BoeV9iYXNlLAorCQkJQVNJQ19JT19TSVpFKTsKKwkJZ3BfcmVzb3VyY2VzID0gbm9uX2R2cl9jcm9udXNfcmVzb3VyY2VzOworCisJCXByX2luZm8oIlBsYXRmb3JtOiBWeiBDbGFzcyBBIC0gQ1JPTlVTLCBOT05fRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKworCWNhc2UgRkFNSUxZXzg1MDA6CisJY2FzZSBGQU1JTFlfODUwMFJORzoKKwkJcGxhdGZvcm1fZmVhdHVyZXMgPSBEVlJfQ0FQQUJMRSB8IFBDSUVfQ0FQQUJMRSB8CisJCQlESVNQTEFZX0NBUEFCTEU7CisJCWFzaWMgPSBBU0lDX1pFVVM7CisJCWFzaWNfcGh5X2Jhc2UgPSBaRVVTX0lPX0JBU0U7CisJCXJlZ2lzdGVyX21hcCA9ICZ6ZXVzX3JlZ2lzdGVyX21hcDsKKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBkdnJfemV1c19yZXNvdXJjZXM7CisKKwkJcHJfaW5mbygiUGxhdGZvcm06IDg1MDAvUk5HMjAwIC0gWkVVUywgRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKworCWNhc2UgRkFNSUxZXzg2MDA6CisJY2FzZSBGQU1JTFlfODYwMFZaQjoKKwkJcGxhdGZvcm1fZmVhdHVyZXMgPSBEVlJfQ0FQQUJMRSB8IFBDSUVfQ0FQQUJMRSB8CisJCQlESVNQTEFZX0NBUEFCTEU7CisJCWFzaWMgPSBBU0lDX0NST05VUzsKKwkJYXNpY19waHlfYmFzZSA9IENST05VU19JT19CQVNFOworCQlyZWdpc3Rlcl9tYXAgPSAmY3JvbnVzX3JlZ2lzdGVyX21hcDsKKwkJYXNpY19iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKGFzaWNfcGh5X2Jhc2UsCisJCQlBU0lDX0lPX1NJWkUpOworCQlncF9yZXNvdXJjZXMgPSBkdnJfY3JvbnVzX3Jlc291cmNlczsKKworCQlwcl9pbmZvKCJQbGF0Zm9ybTogODYwMC9WeiBDbGFzcyBCIC0gQ1JPTlVTLCAiCisJCQkiRFZSX0NBUEFCTEVcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByX2NyaXQoIlBsYXRmb3JtOiAgVU5LTk9XTiBQTEFURk9STVxuIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoYXNpYykgeworCWNhc2UgQVNJQ19aRVVTOgorCQlwaHlzX3RvX2J1c19vZmZzZXQgPSAweDMwMDAwMDAwOworCQlicmVhazsKKwljYXNlIEFTSUNfQ0FMTElPUEU6CisJCXBoeXNfdG9fYnVzX29mZnNldCA9IDB4MTAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIEFTSUNfQ1JPTlVTOgorCQkvKgorCQkgKiBUT0RPOiBXZSBzdXBwb3NlIDB4MTAwMDAwMDAgYWxpYXNlcyBpbnRvIDB4MjAwMDAwMDAtCisJCSAqIDB4MlhYWFhYWFguIElmIDB4MTAwMDAwMDAgYWxpYXNlcyBpbnRvIDB4NjAwMDAwMDAtCisJCSAqIDB4NlhYWFhYWFgsIHRoZSBvZmZzZXQgc2hvdWxkIGJlIDB4NTAwMDAwMDAsIG5vdCAweDEwMDAwMDAwLgorCQkgKi8KKwkJcGh5c190b19idXNfb2Zmc2V0ID0gMHgxMDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGh5c190b19idXNfb2Zmc2V0ID0gMHgwMDAwMDAwMDsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIHBsYXRmb3JtX2RldmljZXNfaW5pdCAtIHNldHMgdXAgVVNCIGRldmljZSByZXNvdXJzZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgcGxhdGZvcm1fZGV2aWNlc19pbml0KHZvaWQpCit7CisJcHJfbm90aWNlKCIlczogLS0tLS0gSW5pdGlhbGl6aW5nIFVTQiByZXNvdXJjZXMgLS0tLS1cbiIsIF9fZnVuY19fKTsKKworCWFzaWNfcmVzb3VyY2Uuc3RhcnQgPSBhc2ljX3BoeV9iYXNlOworCWFzaWNfcmVzb3VyY2UuZW5kICs9IGFzaWNfcmVzb3VyY2Uuc3RhcnQ7CisKKwllaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihlaGNpX2hjYXBiYXNlKTsKKwllaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gZWhjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7CisKKwlvaGNpX3Jlc291cmNlc1swXS5zdGFydCA9IGFzaWNfcmVnX3BoeXNfYWRkcihvaGNpX2hjX3JldmlzaW9uKTsKKwlvaGNpX3Jlc291cmNlc1swXS5lbmQgKz0gb2hjaV9yZXNvdXJjZXNbMF0uc3RhcnQ7CisKKwlzZXRfaW9fcG9ydF9iYXNlKDApOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0Zm9ybV9kZXZpY2VzX2luaXQpOworCisvKgorICoKKyAqIEJPT1RNRU0gQUxMT0NBVElPTgorICoKKyAqLworLyoKKyAqIEFsbG9jYXRlcy9yZXNlcnZlcyB0aGUgUGxhdGZvcm0gbWVtb3J5IHJlc291cmNlcyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICogVGhpcyBpZ25vcmVzIGFueSByZXNvdXJjZXMgdGhhdCBhcmUgZGVzaWduYXRlZCBJT1JFU09VUkNFX0lPCisgKi8KK3ZvaWQgX19pbml0IHBsYXRmb3JtX2FsbG9jX2Jvb3RtZW0odm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgdG90YWwgPSAwOworCisJLyogR2V0IHBlcnNpc3RlbnQgbWVtb3J5IGRhdGEgZnJvbSBjb21tYW5kIGxpbmUgYmVmb3JlIGFsbG9jYXRpbmcKKwkgKiByZXNvdXJjZXMuIFRoaXMgbmVlZCB0byBoYXBwZW4gYmVmb3JlIG5vcm1hbCBjb21tYW5kIGxpbmUgcGFyc2luZworCSAqIGhhcyBiZWVuIGRvbmUgKi8KKwlwbWVtX3NldHVwX3Jlc291cmNlKCk7CisKKwkvKiBMb29wIHRocm91Z2ggbG9va2luZyBmb3IgcmVzb3VyY2VzIHRoYXQgd2FudCBhIHBhcnRpY3VsYXIgYWRkcmVzcyAqLworCWZvciAoaSA9IDA7IGdwX3Jlc291cmNlc1tpXS5mbGFncyAhPSAwOyBpKyspIHsKKwkJaW50IHNpemUgPSBncF9yZXNvdXJjZXNbaV0uZW5kIC0gZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0ICsgMTsKKwkJaWYgKChncF9yZXNvdXJjZXNbaV0uc3RhcnQgIT0gMCkgJiYKKwkJCSgoZ3BfcmVzb3VyY2VzW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICE9IDApKSB7CisJCQlyZXNlcnZlX2Jvb3RtZW0oYnVzX3RvX3BoeXMoZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0KSwKKwkJCQlzaXplLCAwKTsKKwkJCXRvdGFsICs9IGdwX3Jlc291cmNlc1tpXS5lbmQgLQorCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCArIDE7CisJCQlwcl9pbmZvKCJyZXNlcnZlIHJlc291cmNlICVzIGF0ICUwOHggKCV1IGJ5dGVzKVxuIiwKKwkJCQlncF9yZXNvdXJjZXNbaV0ubmFtZSwgZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0LAorCQkJCWdwX3Jlc291cmNlc1tpXS5lbmQgLQorCQkJCQlncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyAxKTsKKwkJfQorCX0KKworCS8qIExvb3AgdGhyb3VnaCBhc3NpZ25pbmcgYWRkcmVzc2VzIGZvciB0aG9zZSB0aGF0IGFyZSBsZWZ0ICovCisJZm9yIChpID0gMDsgZ3BfcmVzb3VyY2VzW2ldLmZsYWdzICE9IDA7IGkrKykgeworCQlpbnQgc2l6ZSA9IGdwX3Jlc291cmNlc1tpXS5lbmQgLSBncF9yZXNvdXJjZXNbaV0uc3RhcnQgKyAxOworCQlpZiAoKGdwX3Jlc291cmNlc1tpXS5zdGFydCA9PSAwKSAmJgorCQkJKChncF9yZXNvdXJjZXNbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgIT0gMCkpIHsKKwkJCXZvaWQgKm1lbSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoc2l6ZSk7CisKKwkJCWlmIChtZW0gPT0gTlVMTCkKKwkJCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBib290bWVtIHBhZ2VzICIKKwkJCQkJImZvciAlc1xuIiwgZ3BfcmVzb3VyY2VzW2ldLm5hbWUpOworCisJCQllbHNlIHsKKwkJCQlncF9yZXNvdXJjZXNbaV0uc3RhcnQgPQorCQkJCQlwaHlzX3RvX2J1cyh2aXJ0X3RvX3BoeXMobWVtKSk7CisJCQkJZ3BfcmVzb3VyY2VzW2ldLmVuZCA9CisJCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCArIHNpemUgLSAxOworCQkJCXRvdGFsICs9IHNpemU7CisJCQkJcHJfaW5mbygiYWxsb2NhdGUgcmVzb3VyY2UgJXMgYXQgJTA4eCAiCisJCQkJCQkiKCV1IGJ5dGVzKVxuIiwKKwkJCQkJZ3BfcmVzb3VyY2VzW2ldLm5hbWUsCisJCQkJCWdwX3Jlc291cmNlc1tpXS5zdGFydCwgc2l6ZSk7CisJCQl9CisJCX0KKwl9CisKKwlwcl9pbmZvKCJUb3RhbCBQbGF0Zm9ybSBkcml2ZXIgbWVtb3J5IGFsbG9jYXRpb246IDB4JTA4eFxuIiwgdG90YWwpOworCisJLyogaW5kaWNhdGUgcmVzb3VyY2VzIHRoYXQgYXJlIHBsYXRmb3JtIEkvTyByZWxhdGVkICovCisJZm9yIChpID0gMDsgZ3BfcmVzb3VyY2VzW2ldLmZsYWdzICE9IDA7IGkrKykgeworCQlpZiAoKGdwX3Jlc291cmNlc1tpXS5zdGFydCAhPSAwKSAmJgorCQkJKChncF9yZXNvdXJjZXNbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAhPSAwKSkgeworCQkJcHJfaW5mbygicmVzZXJ2ZWQgcGxhdGZvcm0gcmVzb3VyY2UgJXMgYXQgJTA4eFxuIiwKKwkJCQlncF9yZXNvdXJjZXNbaV0ubmFtZSwgZ3BfcmVzb3VyY2VzW2ldLnN0YXJ0KTsKKwkJfQorCX0KK30KKworLyoKKyAqCisgKiBQRVJTSVNURU5UIE1FTU9SWSAoUE1FTSkgQ09ORklHVVJBVElPTgorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcG1lbWFkZHIgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyYW1fcG1lbWFkZHIoY2hhciAqcCkKK3sKKwlwbWVtYWRkciA9ICh1bnNpZ25lZCBsb25nKXNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInBtZW1hZGRyIiwgZWFybHlfcGFyYW1fcG1lbWFkZHIpOworCitzdGF0aWMgbG9uZyBwbWVtbGVuIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcmFtX3BtZW1sZW4oY2hhciAqcCkKK3sKKy8qIFRPRE86IHdlIGNhbiB1c2UgdGhpcyBjb2RlIHdoZW4gYW5kIGlmIHRoZSBib290bG9hZGVyIGV2ZXIgY2hhbmdlcyB0aGlzICovCisjaWYgMAorCXBtZW1sZW4gPSAodW5zaWduZWQgbG9uZylzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKyNlbHNlCisJcG1lbWxlbiA9IDB4MjAwMDA7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJwbWVtbGVuIiwgZWFybHlfcGFyYW1fcG1lbWxlbik7CisKKy8qCisgKiBTZXQgdXAgcGVyc2lzdGVudCBtZW1vcnkuIElmIHdlIHdlcmUgZ2l2ZW4gdmFsdWVzLCB3ZSBwYXRjaCB0aGUgYXJyYXkgb2YKKyAqIHJlc291cmNlcy4gT3RoZXJ3aXNlLCBwZXJzaXN0ZW50IG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGFueXdoZXJlIGF0IGFsbC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHBtZW1fc2V0dXBfcmVzb3VyY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlOworCXJlc291cmNlID0gYXNpY19yZXNvdXJjZV9nZXQoIkRpYWdQZXJzaXN0ZW50TWVtb3J5Iik7CisKKwlpZiAocmVzb3VyY2UgJiYgcG1lbWFkZHIgJiYgcG1lbWxlbikgeworCQkvKiBUaGUgYWRkcmVzcyBwcm92aWRlZCBieSBib290bG9hZGVyIGlzIGluIGtzZWcwLiBDb252ZXJ0IHRvCisJCSAqIGEgYnVzIGFkZHJlc3MuICovCisJCXJlc291cmNlLT5zdGFydCA9IHBoeXNfdG9fYnVzKHBtZW1hZGRyIC0gMHg4MDAwMDAwMCk7CisJCXJlc291cmNlLT5lbmQgPSByZXNvdXJjZS0+c3RhcnQgKyBwbWVtbGVuIC0gMTsKKworCQlwcl9pbmZvKCJwZXJzaXN0ZW50IG1lbW9yeTogc3RhcnQ9MHgleCAgZW5kPTB4JXhcbiIsCisJCQlyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQpOworCX0KK30KKworLyoKKyAqCisgKiBSRVNPVVJDRSBBQ0NFU1MgRlVOQ1RJT05TCisgKgorICovCisKKy8qKgorICogYXNpY19yZXNvdXJjZV9nZXQgLSByZXRyaWV2ZXMgcGFyYW1ldGVycyBmb3IgYSBwbGF0Zm9ybSByZXNvdXJjZS4KKyAqIEBuYW1lOglzdHJpbmcgdG8gbWF0Y2ggcmVzb3VyY2UKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCByZXNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIENBTk5PVCBCRSBOQU1FRCBwbGF0Zm9ybV9yZXNvdXJjZV9nZXQsIHdoaWNoIHdvdWxkIGJlIHRoZSBvYnZpb3VzIGNob2ljZSwKKyAqIGFzIHRoaXMgZnVuY3Rpb24gbmFtZSBpcyBhbHJlYWR5IGRlY2xhcmVkCisgKi8KK3N0cnVjdCByZXNvdXJjZSAqYXNpY19yZXNvdXJjZV9nZXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGdwX3Jlc291cmNlc1tpXS5mbGFncyAhPSAwOyBpKyspIHsKKwkJaWYgKHN0cmNtcChncF9yZXNvdXJjZXNbaV0ubmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmZ3BfcmVzb3VyY2VzW2ldOworCX0KKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChhc2ljX3Jlc291cmNlX2dldCk7CisKKy8qKgorICogcGxhdGZvcm1fcmVsZWFzZV9tZW1vcnkgLSByZWxlYXNlIHByZS1hbGxvY2F0ZWQgbWVtb3J5CisgKiBAcHRyOglwb2ludGVyIHRvIG1lbW9yeSB0byByZWxlYXNlCisgKiBAc2l6ZToJc2l6ZSBvZiByZXNvdXJjZQorICoKKyAqIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBmb3IgbWVtb3J5IGFsbG9jYXRlZCBvciByZXNlcnZlZCB2aWEgdGhlIGJvb3QKKyAqIG1lbW9yeSBhbGxvY2F0b3IuCisgKi8KK3ZvaWQgcGxhdGZvcm1fcmVsZWFzZV9tZW1vcnkodm9pZCAqcHRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlhZGRyID0gKCh1bnNpZ25lZCBsb25nKXB0ciArIChQQUdFX1NJWkUgLSAxKSkgJiBQQUdFX01BU0s7CisJZW5kID0gKCh1bnNpZ25lZCBsb25nKXB0ciArIHNpemUpICYgUEFHRV9NQVNLOworCisJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShfX3ZhKGFkZHIpKSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpX192YShhZGRyKSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwbGF0Zm9ybV9yZWxlYXNlX21lbW9yeSk7CisKKy8qCisgKgorICogRkVBVFVSRSBBVkFJTEFCSUxJVFkgRlVOQ1RJT05TCisgKgorICovCitpbnQgcGxhdGZvcm1fc3VwcG9ydHNfZHZyKHZvaWQpCit7CisJcmV0dXJuIChwbGF0Zm9ybV9mZWF0dXJlcyAmIERWUl9DQVBBQkxFKSAhPSAwOworfQorCitpbnQgcGxhdGZvcm1fc3VwcG9ydHNfZmZzKHZvaWQpCit7CisJcmV0dXJuIChwbGF0Zm9ybV9mZWF0dXJlcyAmIEZGU19DQVBBQkxFKSAhPSAwOworfQorCitpbnQgcGxhdGZvcm1fc3VwcG9ydHNfcGNpZSh2b2lkKQoreworCXJldHVybiAocGxhdGZvcm1fZmVhdHVyZXMgJiBQQ0lFX0NBUEFCTEUpICE9IDA7Cit9CisKK2ludCBwbGF0Zm9ybV9zdXBwb3J0c19kaXNwbGF5KHZvaWQpCit7CisJcmV0dXJuIChwbGF0Zm9ybV9mZWF0dXJlcyAmIERJU1BMQVlfQ0FQQUJMRSkgIT0gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGIyZWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDQgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBSYWxmIEJhZWNobGUKKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwOSAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFJvdXRpbmVzIGZvciBnZW5lcmljIG1hbmlwdWxhdGlvbiBvZiB0aGUgaW50ZXJydXB0cyBmb3VuZCBvbiB0aGUgUG93ZXJUVgorICogcGxhdGZvcm0uCisgKgorICogVGhlIGludGVycnVwdCBjb250cm9sbGVyIGlzIGxvY2F0ZWQgaW4gdGhlIFNvdXRoIEJyaWRnZSBhIFBJSVg0IGRldmljZQorICogd2l0aCB0d28gaW50ZXJuYWwgODJDOTUgaW50ZXJydXB0IGNvbnRyb2xsZXJzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9pbnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpcnE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOworCisJaXJxID0gKGFzaWNfcmVhZChpbnRfaW50X3NjYW4pID4+IDQpIC0gMTsKKworCWlmIChpcnEgPT0gMCB8fCBpcnEgPj0gTlJfSVJRUykKKwkJaXJxID0gLTE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaXJxOworfQorCitzdGF0aWMgdm9pZCBhc2ljX2lycWRpc3BhdGNoKHZvaWQpCit7CisJaW50IGlycTsKKworCWlycSA9IGdldF9pbnQoKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuOyAgLyogaW50ZXJydXB0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCAqLworCisJZG9fSVJRKGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNseih1bnNpZ25lZCBsb25nIHgpCit7CisJX19hc21fXygKKwkiCS5zZXQJcHVzaAkJCQkJXG4iCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCisJIgljbHoJJTAsICUxCQkJCQlcbiIKKwkiCS5zZXQJcG9wCQkJCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisvKgorICogVmVyc2lvbiBvZiBmZnMgdGhhdCBvbmx5IGxvb2tzIGF0IGJpdHMgMTIuLjE1LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcnFfZmZzKHVuc2lnbmVkIGludCBwZW5kaW5nKQoreworCXJldHVybiBmbHMocGVuZGluZykgLSAxICsgQ0FVU0VCX0lQOworfQorCisvKgorICogVE9ETzogY2hlY2sgaG93IGl0IHdvcmtzIHVuZGVyIEVJQyBtb2RlLgorICovCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfY2F1c2UoKSAmIHJlYWRfYzBfc3RhdHVzKCkgJiBTVDBfSU07CisJaW50IGlycTsKKworCWlycSA9IGlycV9mZnMocGVuZGluZyk7CisKKwlpZiAoaXJxID09IENBVVNFRl9JUDMpCisJCWFzaWNfaXJxZGlzcGF0Y2goKTsKKwllbHNlIGlmIChpcnEgPj0gMCkKKwkJZG9fSVJRKGlycSk7CisJZWxzZQorCQlzcHVyaW91c19pbnRlcnJ1cHQoKTsKK30KKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQoreworCWludCBpOworCisJYXNpY19pcnFfaW5pdCgpOworCisJLyoKKwkgKiBJbml0aWFsaXplIGludGVycnVwdCBleGNlcHRpb24gdmVjdG9ycy4KKwkgKi8KKwlpZiAoY3B1X2hhc192ZWljIHx8IGNwdV9oYXNfdmludCkgeworCQlpbnQgbnZlYyA9IGNwdV9oYXNfdmVpYyA/IDY0IDogODsKKwkJZm9yIChpID0gMDsgaSA8IG52ZWM7IGkrKykKKwkJCXNldF92aV9oYW5kbGVyKGksIGFzaWNfaXJxZGlzcGF0Y2gpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvaXJxX2FzaWMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvaXJxX2FzaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRkMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9pcnFfYXNpYy5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYyBBdGxhbnRhCisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIE1vZGlmaWVkIGZyb20gYXJjaC9taXBzL2tlcm5lbC9pcnEtcm03MDAwLmM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmFsZiBCYWVjaGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljX3JlZ3MuaD4KKworc3RhdGljIGlubGluZSB2b2lkIHVubWFza19hc2ljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZW5hYmxlX2JpdDsKKworCWVuYWJsZV9iaXQgPSAoMSA8PCAoaXJxICYgMHgxZikpOworCisJc3dpdGNoIChpcnEgPj4gNSkgeworCWNhc2UgMDoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8wKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8xKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8yKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8zKSB8IGVuYWJsZV9iaXQsIGllbl9pbnRfMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hc2tfYXNpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpc2FibGVfbWFzazsKKworCWRpc2FibGVfbWFzayA9IH4oMSA8PCAoaXJxICYgMHgxZikpOworCisJc3dpdGNoIChpcnEgPj4gNSkgeworCWNhc2UgMDoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8wKSAmIGRpc2FibGVfbWFzaywgaWVuX2ludF8wKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhc2ljX3dyaXRlKGFzaWNfcmVhZChpZW5faW50XzEpICYgZGlzYWJsZV9tYXNrLCBpZW5faW50XzEpOworCQlicmVhazsKKwljYXNlIDI6CisJCWFzaWNfd3JpdGUoYXNpY19yZWFkKGllbl9pbnRfMikgJiBkaXNhYmxlX21hc2ssIGllbl9pbnRfMik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXNpY193cml0ZShhc2ljX3JlYWQoaWVuX2ludF8zKSAmIGRpc2FibGVfbWFzaywgaWVuX2ludF8zKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGFzaWNfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiQVNJQyBMZXZlbCIsCisJLmFjayA9IG1hc2tfYXNpY19pcnEsCisJLm1hc2sgPSBtYXNrX2FzaWNfaXJxLAorCS5tYXNrX2FjayA9IG1hc2tfYXNpY19pcnEsCisJLnVubWFzayA9IHVubWFza19hc2ljX2lycSwKKwkuZW9pID0gdW5tYXNrX2FzaWNfaXJxLAorfTsKKwordm9pZCBfX2luaXQgYXNpY19pcnFfaW5pdCh2b2lkKQoreworCWludCBpOworCisJLyogc2V0IHByaW9yaXR5IHRvIDAgKi8KKwl3cml0ZV9jMF9zdGF0dXMocmVhZF9jMF9zdGF0dXMoKSAmIH4oMHgwMDAwZmMwMCkpOworCisJYXNpY193cml0ZSgwLCBpZW5faW50XzApOworCWFzaWNfd3JpdGUoMCwgaWVuX2ludF8xKTsKKwlhc2ljX3dyaXRlKDAsIGllbl9pbnRfMik7CisJYXNpY193cml0ZSgwLCBpZW5faW50XzMpOworCisJYXNpY193cml0ZSgweDBmZmZmZmZmLCBpbnRfbGV2ZWxfM18zKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8zXzIpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzNfMSk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfM18wKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8yXzMpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzJfMik7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMl8xKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8yXzApOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzFfMyk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMV8yKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8xXzEpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzFfMCk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMF8zKTsKKwlhc2ljX3dyaXRlKDB4ZmZmZmZmZmYsIGludF9sZXZlbF8wXzIpOworCWFzaWNfd3JpdGUoMHhmZmZmZmZmZiwgaW50X2xldmVsXzBfMSk7CisJYXNpY193cml0ZSgweGZmZmZmZmZmLCBpbnRfbGV2ZWxfMF8wKTsKKworCWFzaWNfd3JpdGUoMHhmLCBpbnRfaW50X3NjYW4pOworCisJLyoKKwkgKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGVycy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmFzaWNfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jYWxsaW9wZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jYWxsaW9wZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWI3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL3ByZWFsbG9jLWNhbGxpb3BlLmMKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgKiBNZW1vcnkgcHJlLWFsbG9jYXRpb25zIGZvciBDYWxsaW9wZSBib3hlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKKy8qCisgKiBOT05fRFZSX0NBUEFCTEUgQ0FMTElPUEUgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2NhbGxpb3BlX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICogVklERU8gLyBMWDEKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLCAgICAgCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyNDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDAwMDAgLSAxLAkvKjJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLCAgIC8qOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDIwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS5lbmQgICAgPSAweDI2NzAwMDAwIC0gMSwgLyp+MzYuOU1pQiAoMzJNaUIgLSAoMk1pQiArIDhLaUIpKSAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQVZNRU1QYXJ0aXRpb24wIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwNjAwMDAwIC0gMSwJLyogNiBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERPQ1NJUyBTdWJzeXN0ZW0KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRG9jc2lzIiwKKwkJLnN0YXJ0ICA9IDB4MjIwMDAwMDAsCisJCS5lbmQgICAgPSAweDIyNzAwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHgyMjcwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjM1MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDIzNzAwMDAwLAorCQkuZW5kICAgID0gMHgyMzcyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRE1BIFJpbmcgYnVmZmVyIChkb24ndCBuZWVkIHJlY29yZGluZyBidWZmZXJzKQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJCTU1fQnVmZmVyIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMEFBMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczAiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsCQkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBBVkZTOiBwbGF5ZXIgSEFMIG1lbW9yeQorCSAqCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDJjNGMwMCAtIDEsCS8qIDk0NUsgKiAzIGZvciBwbGF5YmFjayAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFBNRU0KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNtYXJ0Y2FyZAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTbWFydENhcmRJbmZvIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIE5BTkQgRmxhc2gKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTmFuZEZsYXNoIiwKKwkJLnN0YXJ0ICA9IE5BTkRfRkxBU0hfQkFTRSwKKwkJLmVuZCAgICA9IE5BTkRfRkxBU0hfQkFTRSArIDB4NDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqIFN5bm9wc3lzIEdNQUMgTWVtb3J5IFJlZ2lvbgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHTUFDIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBBZGQgb3RoZXIgcmVzb3VyY2VzIGhlcmUKKwkgKgorCSAqLworCXsgfSwKK307CisKK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX3Z6X2NhbGxpb3BlX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICogVklERU8gLyBMWDEKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjQwMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MjAwMDAwIC0gMSwgLyoyIE1lZyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhrIGJsb2NrIFNUMjMxYSBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDI0MjAwMDAwLAorCQkuZW5kICAgID0gMHgyNDIwMjAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHgyMjIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MjJDMjBCODUgLSAxLAkvKiAxMC4xMiBNZWcgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTeXNhdWRpbyBEcml2ZXIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTVEFWRU0gZHJpdmVyL1NUQVBJCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDIwMzAwMDAwLAorCQkuZW5kICAgID0gMHgyMDYyMDAwMC0xLCAgLyozLjEyNSBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDIwMTAwMDAwLAorCQkuZW5kICAgID0gMHgyMDMwMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4MjM5MDAwMDAsCisJCS5lbmQgICAgPSAweDIzOTIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBETUEgUmluZyBidWZmZXIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQk1NX0J1ZmZlciIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBBQTAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlciBmb3IgdW5pdDAKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMwIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFBNRU0KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNtYXJ0Y2FyZAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTbWFydENhcmRJbmZvIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIE5BTkQgRmxhc2gKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTmFuZEZsYXNoIiwKKwkJLnN0YXJ0ICA9IE5BTkRfRkxBU0hfQkFTRSwKKwkJLmVuZCAgICA9IE5BTkRfRkxBU0hfQkFTRSsweDQwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKiBTeW5vcHN5cyBHTUFDIE1lbW9yeSBSZWdpb24KKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiR01BQyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKKworc3RydWN0IHJlc291cmNlIG5vbl9kdnJfdnplX2NhbGxpb3BlX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICogVklERU8gLyBMWDEKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjIwMDAwMDAsCisJCS5lbmQgICAgPSAweDIyMjAwMDAwIC0gMSwJLyoyICBNZWcgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLAkvKiA4ayBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyMjIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjIyMDIwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjIyMDIwMDAsCisJCS5lbmQgICAgPSAweDIyQzIwQjg1IC0gMSwJLyogMTAuMTIgTWVnICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU3lzYXVkaW8gRHJpdmVyCisJICovCisJeworCQkubmFtZSAgID0gIkRTUF9JbWFnZV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMEZGRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19DUFVfUENNX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDlGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0FVWF9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19NYWluX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBVk1FTVBhcnRpdGlvbjAiLAorCQkuc3RhcnQgID0gMHgyMDM5NjAwMCwKKwkJLmVuZCAgICA9IDB4MjA2QjYwMDAgLSAxLAkJLyogMy4xMjUgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHgyMDEwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjAzOTYwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDIwNkI2MDAwLAorCQkuZW5kICAgID0gMHgyMDZENjAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRE1BIFJpbmcgYnVmZmVyCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBQTUVNCisJICovCisJeworCQkubmFtZSAgID0gIkRpYWdQZXJzaXN0ZW50TWVtb3J5IiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTbWFydGNhcmQKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgyODAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBOQU5EIEZsYXNoCisJICovCisJeworCQkubmFtZSAgID0gIk5hbmRGbGFzaCIsCisJCS5zdGFydCAgPSBOQU5EX0ZMQVNIX0JBU0UsCisJCS5lbmQgICAgPSBOQU5EX0ZMQVNIX0JBU0UrMHg0MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFN5bm9wc3lzIEdNQUMgTWVtb3J5IFJlZ2lvbgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHTUFDIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBBZGQgb3RoZXIgcmVzb3VyY2VzIGhlcmUKKwkgKi8KKwl7IH0sCit9OworCitzdHJ1Y3QgcmVzb3VyY2Ugbm9uX2R2cl92emZfY2FsbGlvcGVfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9Cit7CisJLyoKKwkgKiBWSURFTyAvIExYMQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qRGVsdGEtTXUgMSBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDI0MDAwMDAwLAorCQkuZW5kICAgID0gMHgyNDIwMDAwMCAtIDEsCS8qMk1pQiAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDIwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS8qIH4xOS40ICgyMS41TWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmVuZCAgICA9IDB4MjU1ODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQVZNRU1QYXJ0aXRpb24wIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwNDgwMDAwIC0gMSwgIC8qIDQuNSBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDIyNzAwMDAwLAorCQkuZW5kICAgID0gMHgyMzUwMDAwMCAtIDEsIC8qIDE0IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4MjM3MDAwMDAsCisJCS5lbmQgICAgPSAweDIzNzIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBETUEgUmluZyBidWZmZXIgKGRvbid0IG5lZWQgcmVjb3JkaW5nIGJ1ZmZlcnMpCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwgIC8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczEiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsICAvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBBVkZTOiBwbGF5ZXIgSEFMIG1lbW9yeQorCSAqCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDJjNGMwMCAtIDEsICAvKiA5NDVLICogMyBmb3IgcGxheWJhY2sgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBQTUVNCisJICovCisJeworCQkubmFtZSAgID0gIkRpYWdQZXJzaXN0ZW50TWVtb3J5IiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTbWFydGNhcmQKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgyODAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBOQU5EIEZsYXNoCisJICovCisJeworCQkubmFtZSAgID0gIk5hbmRGbGFzaCIsCisJCS5zdGFydCAgPSBOQU5EX0ZMQVNIX0JBU0UsCisJCS5lbmQgICAgPSBOQU5EX0ZMQVNIX0JBU0UgKyAweDQwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU3lub3BzeXMgR01BQyBNZW1vcnkgUmVnaW9uCisJICovCisJeworCQkubmFtZSAgID0gIkdNQUMiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEFkZCBvdGhlciByZXNvdXJjZXMgaGVyZQorCSAqLworCXsgfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL3ByZWFsbG9jLWNyb251cy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jcm9udXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE1YzNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jcm9udXMuYwpAQCAtMCwwICsxLDYwOCBAQAorLyoKKyAqIE1lbW9yeSBwcmUtYWxsb2NhdGlvbnMgZm9yIENyb251cyBib3hlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKKy8qCisgKiBEVlJfQ0FQQUJMRSBDUk9OVVMgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBkdnJfY3JvbnVzX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICoKKwkgKiBWSURFTzEgLyBMWDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyNDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFNb25pdG9yIiwJLyogOEtpQiBibG9jayBTVDIzMWEgbW9uaXRvciAqLworCQkuc3RhcnQgID0gMHgyNDIwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjQyMDFGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHgyNDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MjVGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYkltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDYwMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFiTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4NjAyMDAwMDAsCisJCS5lbmQgICAgPSAweDYwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTIiLAorCQkuc3RhcnQgID0gMHg2MDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4NjFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDYzNTgwMDAwLAorCQkuZW5kICAgID0gMHg2NDE4MDAwMCAtIDEsICAvKiAxMiBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDYyMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MjcwMDAwMCAtIDEsCS8qIDcgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogR0hXIEhBTCBEcml2ZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIEdyYXBoaWNzSGVhcCAtIFBvd2VyVFYgR3JhcGhpY3MgSGVhcAorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkdyYXBoaWNzSGVhcCIsCisJCS5zdGFydCAgPSAweDYyNzAwMDAwLAorCQkuZW5kICAgID0gMHg2MzUwMDAwMCAtIDEsCS8qIDE0IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDI2MDAwMDAwLAorCQkuZW5kICAgID0gMHgyNjAyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBETUEgUmluZyBidWZmZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQk1NX0J1ZmZlciIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDI4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyIGZvciB1bml0MAorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRGlzcGxheSBCaW5zIGZvciB1bml0MAorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwJCS8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERpc3BsYXkgQmlucyBmb3IgdW5pdDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczEiLAorCQkuc3RhcnQgID0gMHg2NEFENDAwMCwKKwkJLmVuZCAgICA9IDB4NjRBRDUwMDAgLSAxLCAgLyogNCBLQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBJVEZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIklURlMiLAorCQkuc3RhcnQgID0gMHg2NDE4MDAwMCwKKwkJLyogODE1LDEwNCBieXRlcyBlYWNoIGZvciAyIElURlMgcGFydGl0aW9ucy4gKi8KKwkJLmVuZCAgICA9IDB4NjQzMERGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlMKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiQXZmc0RtYU1lbSIsCisJCS5zdGFydCAgPSAweDY0MzBFMDAwLAorCQkvKiAoOTQ1SyAqIDgpID0gKDEyOEsgKjMpIDUgcGxheWJhY2tzIC8gMyBzZXJ2ZXIgKi8KKwkJLmVuZCAgICA9IDB4NjRBRDAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBdmZzRmlsZVN5cyIsCisJCS5zdGFydCAgPSAweDY0QUQwMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMTAwMCAtIDEsICAvKiA0SyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBQTUVNCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBQZXJzaXN0ZW50IG1lbW9yeSBmb3IgZGlhZ25vc3RpY3MuCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU21hcnRjYXJkCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBSZWFkIGFuZCB3cml0ZSBidWZmZXJzIGZvciBJbnRlcm5hbC9FeHRlcm5hbCBjYXJkcworCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNtYXJ0Q2FyZEluZm8iLAorCQkuc3RhcnQgID0gMHg2NEFEMTAwMCwKKwkJLmVuZCAgICA9IDB4NjRBRDM4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBLQVZORVQKKwkgKiAgICBOUCBSZXNldCBWZWN0b3IgLSBtdXN0IGJlIG9mIHRoZSBmb3JtIHh4Q3h4eHh4CisJICoJICAgTlAgSW1hZ2UgLSBtdXN0IGJlIHZpZGVvIGJhbmsgMQorCSAqCSAgIE5QIElQQyAtIG11c3QgYmUgdmlkZW8gYmFuayAyCisJICovCisJeworCQkubmFtZSAgID0gIk5QX1Jlc2V0X1ZlY3RvciIsCisJCS5zdGFydCAgPSAweDI3YzAwMDAwLAorCQkuZW5kICAgID0gMHgyN2MwMTAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JbWFnZSIsCisJCS5zdGFydCAgPSAweDI3MDIwMDAwLAorCQkuZW5kICAgID0gMHgyNzA2MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JUEMiLAorCQkuc3RhcnQgID0gMHg2MzUwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1ODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKKworLyoKKyAqIE5PTl9EVlJfQ0FQQUJMRSBDUk9OVVMgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2Nyb251c19yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0KK3sKKwkvKgorCSAqCisJICogVklERU8xIC8gTFgxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhSW1hZ2UiLAkvKiBEZWx0YS1NdSAxIGltYWdlIGFuZCByYW0gKi8KKwkJLnN0YXJ0ICA9IDB4MjQwMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MUZGRkZGLAkJLyogMk1pQiAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFhIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4MjQyMDAwMDAsCisJCS5lbmQgICAgPSAweDI0MjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjQyMDIwMDAsCisJCS5lbmQgICAgPSAweDI1RkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBWSURFTzIgLyBMWDIKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWJJbWFnZSIsCS8qIERlbHRhLU11IDIgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHg2MDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYk1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYiBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDYwMjAwMDAwLAorCQkuZW5kICAgID0gMHg2MDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkyIiwKKwkJLnN0YXJ0ICA9IDB4NjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDYxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFN5c2F1ZGlvIERyaXZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRFNQX0ltYWdlX0J1ZmYgLSBEU1AgY29kZSBhbmQgZGF0YSBpbWFnZXMgKDFNQikKKwkgKiAgQURTQ19DUFVfUENNX0J1ZmYgLSBBRFNDIENQVSBQQ00gYnVmZmVyICg0MEtCKQorCSAqICBBRFNDX0FVWF9CdWZmIC0gQURTQyBBVVggYnVmZmVyICgxNktCKQorCSAqICBBRFNDX01haW5fQnVmZiAtIEFEU0MgTWFpbiBidWZmZXIgKDE2S0IpCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFNUQVZFTSBkcml2ZXIvU1RBUEkKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFRoaXMgbWVtb3J5IGFyZWEgaXMgdXNlZCBmb3IgYWxsb2NhdGluZyBidWZmZXJzIGZvciBWaWRlbyBkZWNvZGluZworCSAqICBwdXJwb3Nlcy4gIEFsbG9jYXRpb24vRGUtYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBidWZmZXIgaXMgbWFuYWdlZAorCSAqICBieSB0aGUgU1RBVk1FTSBkcml2ZXIgb2YgdGhlIFNUQVBJLiAgVGhleSBjb3VsZCBiZSBEZWNpbWF0ZWQKKwkgKiAgUGljdHVyZSBCdWZmZXJzLCBJbnRlcm1lZGlhdGUgQnVmZmVycywgYXMgZGVlbWVkIG5lY2Vzc2FyeSBmb3IKKwkgKiAgdmlkZW8gZGVjb2RpbmcgcHVycG9zZXMsIGZvciBhbnkgdmlkZW8gZGVjb2RlcnMgb24gWmV1cy4KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBVk1FTVBhcnRpdGlvbjAiLAorCQkuc3RhcnQgID0gMHg2MzU4MDAwMCwKKwkJLmVuZCAgICA9IDB4NjQxODAwMDAgLSAxLCAgLyogMTIgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogRE9DU0lTIFN1YnN5c3RlbQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEb2NzaXMiLAorCQkuc3RhcnQgID0gMHg2MjAwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjI3MDAwMDAgLSAxLAkvKiA3IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBHcmFwaGljc0hlYXAgLSBQb3dlclRWIEdyYXBoaWNzIEhlYXAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg2MjcwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBtdWx0aSBjb20gYnVmZmVyIGFyZWEKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTXVsdGljb21TSE0iLAorCQkuc3RhcnQgID0gMHgyNjAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjYwMjAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRE1BIFJpbmcgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwQUEwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlciBmb3IgdW5pdDAKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERpc3BsYXkgQmlucyBmb3IgdW5pdDAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaXNwbGF5QmluczAiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDBGRkYsCQkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMxIiwKKwkJLnN0YXJ0ICA9IDB4NjRBRDQwMDAsCisJCS5lbmQgICAgPSAweDY0QUQ1MDAwIC0gMSwgIC8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogQVZGUzogcGxheWVyIEhBTCBtZW1vcnkKKwkgKgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkF2ZnNEbWFNZW0iLAorCQkuc3RhcnQgID0gMHg2NDMwRTAwMCwKKwkJLmVuZCAgICA9IDB4NjQ1RDJDMDAgLSAxLCAgLyogOTQ1SyAqIDMgZm9yIHBsYXliYWNrICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFBNRU0KKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFBlcnNpc3RlbnQgbWVtb3J5IGZvciBkaWFnbm9zdGljcy4KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaWFnUGVyc2lzdGVudE1lbW9yeSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBTbWFydGNhcmQKKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIFJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgZm9yIEludGVybmFsL0V4dGVybmFsIGNhcmRzCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiU21hcnRDYXJkSW5mbyIsCisJCS5zdGFydCAgPSAweDY0QUQxMDAwLAorCQkuZW5kICAgID0gMHg2NEFEMzgwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEtBVk5FVAorCSAqICAgIE5QIFJlc2V0IFZlY3RvciAtIG11c3QgYmUgb2YgdGhlIGZvcm0geHhDeHh4eHgKKwkgKgkgICBOUCBJbWFnZSAtIG11c3QgYmUgdmlkZW8gYmFuayAxCisJICoJICAgTlAgSVBDIC0gbXVzdCBiZSB2aWRlbyBiYW5rIDIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiTlBfUmVzZXRfVmVjdG9yIiwKKwkJLnN0YXJ0ICA9IDB4MjdjMDAwMDAsCisJCS5lbmQgICAgPSAweDI3YzAxMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0ltYWdlIiwKKwkJLnN0YXJ0ICA9IDB4MjcwMjAwMDAsCisJCS5lbmQgICAgPSAweDI3MDYwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIk5QX0lQQyIsCisJCS5zdGFydCAgPSAweDYzNTAwMDAwLAorCQkuZW5kICAgID0gMHg2MzU4MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtY3JvbnVzbGl0ZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy1jcm9udXNsaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhOTA1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtY3JvbnVzbGl0ZS5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogTWVtb3J5IHByZS1hbGxvY2F0aW9ucyBmb3IgQ3JvbnVzIExpdGUgYm94ZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgU2NpZW50aWZpYy1BdGxhbnRhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBBdXRob3I6ICAgICAgIEtlbiBFcHBpbmV0dAorICogICAgICAgICAgICAgICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpYy5oPgorCisvKgorICogTk9OX0RWUl9DQVBBQkxFIENST05VU0xJVEUgUkVTT1VSQ0VTCisgKi8KK3N0cnVjdCByZXNvdXJjZSBub25fZHZyX2Nyb251c2xpdGVfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9Cit7CisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYUltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDYwMDAwMDAwLAorCQkuZW5kICAgID0gMHg2MDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFhTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4NjAyMDAwMDAsCisJCS5lbmQgICAgPSAweDYwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTEiLAorCQkuc3RhcnQgID0gMHg2MDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4NjFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDYzNTgwMDAwLAorCQkuZW5kICAgID0gMHg2M0I4MDAwMCAtIDEsICAvKiA2IE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIERPQ1NJUyBTdWJzeXN0ZW0KKwkgKgorCSAqIFRoaXMgZHJpdmVyIHJlcXVpcmVzOgorCSAqCisJICogQXJiaXRyYXJ5IEJhc2VkIEJ1ZmZlcnM6CisJICogIERvY3NpcyAtCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRG9jc2lzIiwKKwkJLnN0YXJ0ICA9IDB4NjIwMDAwMDAsCisJCS5lbmQgICAgPSAweDYyNzAwMDAwIC0gMSwJLyogNyBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgR3JhcGhpY3NIZWFwIC0gUG93ZXJUViBHcmFwaGljcyBIZWFwCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiR3JhcGhpY3NIZWFwIiwKKwkJLnN0YXJ0ICA9IDB4NjI3MDAwMDAsCisJCS5lbmQgICAgPSAweDYzNTAwMDAwIC0gMSwJLyogMTQgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4MjYwMDAwMDAsCisJCS5lbmQgICAgPSAweDI2MDIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERNQSBSaW5nIGJ1ZmZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJCTU1fQnVmZmVyIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMEFBMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQwCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMwIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAkJLyogNCBLQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogRGlzcGxheSBiaW5zIGJ1ZmZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRGlzcGxheSBCaW5zIGZvciB1bml0MQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMSIsCisJCS5zdGFydCAgPSAweDYzQjgzMDAwLAorCQkuZW5kICAgID0gMHg2M0I4NDAwMCAtIDEsICAvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlM6IHBsYXllciBIQUwgbWVtb3J5CisJICoKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBdmZzRG1hTWVtIiwKKwkJLnN0YXJ0ICA9IDB4NjNCODQwMDAsCisJCS5lbmQgICAgPSAweDYzRTQ4QzAwIC0gMSwgIC8qIDk0NUsgKiAzIGZvciBwbGF5YmFjayAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBQTUVNCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBQZXJzaXN0ZW50IG1lbW9yeSBmb3IgZGlhZ25vc3RpY3MuCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlhZ1BlcnNpc3RlbnRNZW1vcnkiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU21hcnRjYXJkCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBSZWFkIGFuZCB3cml0ZSBidWZmZXJzIGZvciBJbnRlcm5hbC9FeHRlcm5hbCBjYXJkcworCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNtYXJ0Q2FyZEluZm8iLAorCQkuc3RhcnQgID0gMHg2M0I4MDAwMCwKKwkJLmVuZCAgICA9IDB4NjNCODI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICoKKwkgKiBLQVZORVQKKwkgKiAgICBOUCBSZXNldCBWZWN0b3IgLSBtdXN0IGJlIG9mIHRoZSBmb3JtIHh4Q3h4eHh4CisJICoJICAgTlAgSW1hZ2UgLSBtdXN0IGJlIHZpZGVvIGJhbmsgMQorCSAqCSAgIE5QIElQQyAtIG11c3QgYmUgdmlkZW8gYmFuayAyCisJICovCisJeworCQkubmFtZSAgID0gIk5QX1Jlc2V0X1ZlY3RvciIsCisJCS5zdGFydCAgPSAweDI3YzAwMDAwLAorCQkuZW5kICAgID0gMHgyN2MwMTAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JbWFnZSIsCisJCS5zdGFydCAgPSAweDI3MDIwMDAwLAorCQkuZW5kICAgID0gMHgyNzA2MDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJOUF9JUEMiLAorCQkuc3RhcnQgID0gMHg2MzUwMDAwMCwKKwkJLmVuZCAgICA9IDB4NjM1ODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogTkFORCBGbGFzaAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJOYW5kRmxhc2giLAorCQkuc3RhcnQgID0gTkFORF9GTEFTSF9CQVNFLAorCQkuZW5kICAgID0gTkFORF9GTEFTSF9CQVNFICsgMHg0MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtemV1cy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9wcmVhbGxvYy16ZXVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4ZDQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvcHJlYWxsb2MtemV1cy5jCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogTWVtb3J5IHByZS1hbGxvY2F0aW9ucyBmb3IgWmV1cyBib3hlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyAqIEF1dGhvcjogICAgICAgS2VuIEVwcGluZXR0CisgKiAgICAgICAgICAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKKy8qCisgKiBEVlJfQ0FQQUJMRSBSRVNPVVJDRVMKKyAqLworc3RydWN0IHJlc291cmNlIGR2cl96ZXVzX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPQoreworCS8qCisJICoKKwkgKiBWSURFTzEgLyBMWDEKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYSBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDIwMjAwMDAwLAorCQkuZW5kICAgID0gMHgyMDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDIxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKgorCSAqIFZJREVPMiAvIExYMgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIlNUMjMxYkltYWdlIiwJLyogRGVsdGEtTXUgMiBpbWFnZSBhbmQgcmFtICovCisJCS5zdGFydCAgPSAweDMwMDAwMDAwLAorCQkuZW5kICAgID0gMHgzMDFGRkZGRiwJCS8qIDJNaUIgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiU1QyMzFiTW9uaXRvciIsCS8qIDhLaUIgYmxvY2sgU1QyMzFiIG1vbml0b3IgKi8KKwkJLnN0YXJ0ICA9IDB4MzAyMDAwMDAsCisJCS5lbmQgICAgPSAweDMwMjAxRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJNZWRpYU1lbW9yeTIiLAorCQkuc3RhcnQgID0gMHgzMDIwMjAwMCwKKwkJLmVuZCAgICA9IDB4MzFGRkZGRkYsIC8qfjI5LjlNaUIgKDMyTWlCIC0gKDJNaUIgKyA4S2lCKSkgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwkvKgorCSAqCisJICogU3lzYXVkaW8gRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEU1BfSW1hZ2VfQnVmZiAtIERTUCBjb2RlIGFuZCBkYXRhIGltYWdlcyAoMU1CKQorCSAqICBBRFNDX0NQVV9QQ01fQnVmZiAtIEFEU0MgQ1BVIFBDTSBidWZmZXIgKDQwS0IpCisJICogIEFEU0NfQVVYX0J1ZmYgLSBBRFNDIEFVWCBidWZmZXIgKDE2S0IpCisJICogIEFEU0NfTWFpbl9CdWZmIC0gQURTQyBNYWluIGJ1ZmZlciAoMTZLQikKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEU1BfSW1hZ2VfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDBGRkZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQ1BVX1BDTV9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDA5RkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiQURTQ19BVVhfQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfTWFpbl9CdWZmIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAzRkZGLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogU1RBVkVNIGRyaXZlci9TVEFQSQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgVGhpcyBtZW1vcnkgYXJlYSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yIFZpZGVvIGRlY29kaW5nCisJICogIHB1cnBvc2VzLiAgQWxsb2NhdGlvbi9EZS1hbGxvY2F0aW9uIHdpdGhpbiB0aGlzIGJ1ZmZlciBpcyBtYW5hZ2VkCisJICogIGJ5IHRoZSBTVEFWTUVNIGRyaXZlciBvZiB0aGUgU1RBUEkuICBUaGV5IGNvdWxkIGJlIERlY2ltYXRlZAorCSAqICBQaWN0dXJlIEJ1ZmZlcnMsIEludGVybWVkaWF0ZSBCdWZmZXJzLCBhcyBkZWVtZWQgbmVjZXNzYXJ5IGZvcgorCSAqICB2aWRlbyBkZWNvZGluZyBwdXJwb3NlcywgZm9yIGFueSB2aWRlbyBkZWNvZGVycyBvbiBaZXVzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMGMwMDAwMCAtIDEsCS8qIDEyIE1CIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDQwMTAwMDAwLAorCQkuZW5kICAgID0gMHg0MDdmZmZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIEdIVyBIQUwgRHJpdmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBHcmFwaGljc0hlYXAgLSBQb3dlclRWIEdyYXBoaWNzIEhlYXAKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg0NjkwMDAwMCwKKwkJLmVuZCAgICA9IDB4NDc3MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogbXVsdGkgY29tIGJ1ZmZlciBhcmVhCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIk11bHRpY29tU0hNIiwKKwkJLnN0YXJ0ICA9IDB4NDc5MDAwMDAsCisJCS5lbmQgICAgPSAweDQ3OTIwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERNQSBSaW5nIGJ1ZmZlcgorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgRG9jc2lzIC0KKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJCTU1fQnVmZmVyIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMjgwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQwCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMwIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBEaXNwbGF5IGJpbnMgYnVmZmVyCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEaXNwbGF5IEJpbnMgZm9yIHVuaXQxCisJICoKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRGlzcGxheUJpbnMxIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMDAwRkZGLAkvKiA0IEtCIHRvdGFsICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBJVEZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIklURlMiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLyogODE1LDEwNCBieXRlcyBlYWNoIGZvciAyIElURlMgcGFydGl0aW9ucy4gKi8KKwkJLmVuZCAgICA9IDB4MDAxOERGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICoKKwkgKiBBVkZTCisJICoKKwkgKiBUaGlzIGRyaXZlciByZXF1aXJlczoKKwkgKgorCSAqIEFyYml0cmFyeSBCYXNlZCBCdWZmZXJzOgorCSAqICBEb2NzaXMgLQorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkF2ZnNEbWFNZW0iLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLyogKDk0NUsgKiA4KSA9ICgxMjhLICogMykgNSBwbGF5YmFja3MgLyAzIHNlcnZlciAqLworCQkuZW5kICAgID0gMHgwMDdjMjAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBdmZzRmlsZVN5cyIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMTAwMCAtIDEsICAvKiA0SyAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqCisJICogUE1FTQorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgUGVyc2lzdGVudCBtZW1vcnkgZm9yIGRpYWdub3N0aWNzLgorCSAqCisJICovCisJeworCQkubmFtZSAgID0gIkRpYWdQZXJzaXN0ZW50TWVtb3J5IiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDEwMDAwIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIFNtYXJ0Y2FyZAorCSAqCisJICogVGhpcyBkcml2ZXIgcmVxdWlyZXM6CisJICoKKwkgKiBBcmJpdHJhcnkgQmFzZWQgQnVmZmVyczoKKwkgKiAgUmVhZCBhbmQgd3JpdGUgYnVmZmVycyBmb3IgSW50ZXJuYWwvRXh0ZXJuYWwgY2FyZHMKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTbWFydENhcmRJbmZvIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDI4MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIEFkZCBvdGhlciByZXNvdXJjZXMgaGVyZQorCSAqLworCXsgfSwKK307CisKKy8qCisgKiBOT05fRFZSX0NBUEFCTEUgWkVVUyBSRVNPVVJDRVMKKyAqLworc3RydWN0IHJlc291cmNlIG5vbl9kdnJfemV1c19yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0KK3sKKwkvKgorCSAqIFZJREVPMSAvIExYMQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJTVDIzMWFJbWFnZSIsCS8qIERlbHRhLU11IDEgaW1hZ2UgYW5kIHJhbSAqLworCQkuc3RhcnQgID0gMHgyMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjAxRkZGRkYsCQkvKiAyTWlCICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJeworCQkubmFtZSAgID0gIlNUMjMxYU1vbml0b3IiLAkvKiA4S2lCIGJsb2NrIFNUMjMxYSBtb25pdG9yICovCisJCS5zdGFydCAgPSAweDIwMjAwMDAwLAorCQkuZW5kICAgID0gMHgyMDIwMUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwl7CisJCS5uYW1lICAgPSAiTWVkaWFNZW1vcnkxIiwKKwkJLnN0YXJ0ICA9IDB4MjAyMDIwMDAsCisJCS5lbmQgICAgPSAweDIxRkZGRkZGLCAvKn4yOS45TWlCICgzMk1pQiAtICgyTWlCICsgOEtpQikpICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lPLAorCX0sCisJLyoKKwkgKiBTeXNhdWRpbyBEcml2ZXIKKwkgKi8KKwl7CisJCS5uYW1lICAgPSAiRFNQX0ltYWdlX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwRkZGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX0NQVV9QQ01fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwOUZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSAgID0gIkFEU0NfQVVYX0J1ZmYiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAwMDNGRkYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUgICA9ICJBRFNDX01haW5fQnVmZiIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwM0ZGRiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBTVEFWRU0gZHJpdmVyL1NUQVBJCisJICovCisJeworCQkubmFtZSAgID0gIkFWTUVNUGFydGl0aW9uMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDYwMDAwMCAtIDEsCS8qIDYgTUIgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBET0NTSVMgU3Vic3lzdGVtCisJICovCisJeworCQkubmFtZSAgID0gIkRvY3NpcyIsCisJCS5zdGFydCAgPSAweDQwMTAwMDAwLAorCQkuZW5kICAgID0gMHg0MDdmZmZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKiBHSFcgSEFMIERyaXZlcgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJHcmFwaGljc0hlYXAiLAorCQkuc3RhcnQgID0gMHg0NjkwMDAwMCwKKwkJLmVuZCAgICA9IDB4NDc3MDAwMDAgLSAxLAkvKiAxNCBNQiB0b3RhbCAqLworCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIG11bHRpIGNvbSBidWZmZXIgYXJlYQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJNdWx0aWNvbVNITSIsCisJCS5zdGFydCAgPSAweDQ3OTAwMDAwLAorCQkuZW5kICAgID0gMHg0NzkyMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogRE1BIFJpbmcgYnVmZmVyCisJICovCisJeworCQkubmFtZSAgID0gIkJNTV9CdWZmZXIiLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MDAyODAwMDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKgorCSAqIERpc3BsYXkgYmlucyBidWZmZXIgZm9yIHVuaXQwCisJICovCisJeworCQkubmFtZSAgID0gIkRpc3BsYXlCaW5zMCIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgwMDAwMEZGRiwJCS8qIDQgS0IgdG90YWwgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwkgKgorCSAqIEFWRlM6IHBsYXllciBIQUwgbWVtb3J5CisJICoKKwkgKgorCSAqLworCXsKKwkJLm5hbWUgICA9ICJBdmZzRG1hTWVtIiwKKwkJLnN0YXJ0ICA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICAgPSAweDAwMmM0YzAwIC0gMSwJLyogOTQ1SyAqIDMgZm9yIHBsYXliYWNrICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogUE1FTQorCSAqLworCXsKKwkJLm5hbWUgICA9ICJEaWFnUGVyc2lzdGVudE1lbW9yeSIsCisJCS5zdGFydCAgPSAweDAwMDAwMDAwLAorCQkuZW5kICAgID0gMHgxMDAwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogU21hcnRjYXJkCisJICovCisJeworCQkubmFtZSAgID0gIlNtYXJ0Q2FyZEluZm8iLAorCQkuc3RhcnQgID0gMHgwMDAwMDAwMCwKKwkJLmVuZCAgICA9IDB4MjgwMCAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qCisJICogTkFORCBGbGFzaAorCSAqLworCXsKKwkJLm5hbWUgICA9ICJOYW5kRmxhc2giLAorCQkuc3RhcnQgID0gTkFORF9GTEFTSF9CQVNFLAorCQkuZW5kICAgID0gTkFORF9GTEFTSF9CQVNFICsgMHg0MDAgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JTywKKwl9LAorCS8qCisJICogQWRkIG90aGVyIHJlc291cmNlcyBoZXJlCisJICovCisJeyB9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2luaXQuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWZlMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvaW5pdC5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDA0LCAyMDA1ICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICoJQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCUF1dGhvcnM6IENhcnN0ZW4gTGFuZ2dhYXJkIDxjYXJzdGVubEBtaXBzLmNvbT4KKyAqCQkgTWFjaWVqIFcuIFJvenlja2kgPG1hY3JvQG1pcHMuY29tPgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBQUk9NIGxpYnJhcnkgaW5pdGlhbGlzYXRpb24gY29kZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKKyNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9nZW5lcmljLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9hc2ljLmg+CisKK3N0YXRpYyBpbnQgKl9wcm9tX2VudnA7Cit1bnNpZ25lZCBsb25nIF9wcm9tX21lbXNpemU7CisKKy8qCisgKiBZQU1PTiAoMzItYml0IFBST00pIHBhc3MgYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBhcyAzMi1iaXQgcG9pbnRlci4KKyAqIFRoaXMgbWFjcm8gdGFrZSBjYXJlIG9mIHNpZ24gZXh0ZW5zaW9uLCBpZiBydW5uaW5nIGluIDY0LWJpdCBtb2RlLgorICovCisjZGVmaW5lIHByb21fZW52cChpbmRleCkgKChjaGFyICopKGxvbmcpX3Byb21fZW52cFsoaW5kZXgpXSkKKworY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSkKK3sKKwljaGFyICpyZXN1bHQgPSBOVUxMOworCisJaWYgKF9wcm9tX2VudnAgIT0gTlVMTCkgeworCQkvKgorCQkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwkJICogSW4gNjQtYml0IG1vZGU6IHdlJ3JlIHVzaW5nIDY0LWJpdCBwb2ludGVycywgYnV0IGFsbCBwb2ludGVycworCQkgKiBpbiB0aGUgUFJPTSBzdHJ1Y3R1cmVzIGFyZSBvbmx5IDMyLWJpdCwgc28gd2UgbmVlZCBzb21lCisJCSAqIHdvcmthcm91bmRzLCBpZiB3ZSBhcmUgcnVubmluZyBpbiA2NC1iaXQgbW9kZS4KKwkJICovCisJCWludCBpLCBpbmRleCA9IDA7CisKKwkJaSA9IHN0cmxlbihlbnZuYW1lKTsKKworCQl3aGlsZSAocHJvbV9lbnZwKGluZGV4KSkgeworCQkJaWYgKHN0cm5jbXAoZW52bmFtZSwgcHJvbV9lbnZwKGluZGV4KSwgaSkgPT0gMCkgeworCQkJCXJlc3VsdCA9IHByb21fZW52cChpbmRleCArIDEpOworCQkJCWJyZWFrOworCQkJfQorCQkJaW5kZXggKz0gMjsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIFRPRE86IFZlcmlmeSBvbiBsaW51eC1taXBzIG1haWxpbmcgbGlzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHdvICAqLworLyogZnVuY3Rpb25zIGFyZSBjb3JyZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUT0RPOiBDb3B5IE5NSSBhbmQgRUpUQUcgZXhjZXB0aW9uIHZlY3RvcnMgdG8gbWVtb3J5IGZyb20gdGhlICAgKi8KKy8qIEJvb3RST00gZXhjZXB0aW9uIHZlY3RvcnMuIEZsdXNoIHRoZWlyIGNhY2hlIGVudHJpZXMuIHRlc3QgaXQuICAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgbWlwc19ubWlfc2V0dXAodm9pZCkKK3sKKwl2b2lkICpiYXNlOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCisJYmFzZSA9IGNwdV9oYXNfdmVpYyA/CisJCSh2b2lkICopKENBQ19CQVNFICsgMHhhODApIDoKKwkJKHZvaWQgKikoQ0FDX0JBU0UgKyAweDM4MCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyX1IyKQorCWJhc2UgPSAodm9pZCAqKTB4YmZjMDAwMDA7CisjZWxzZQorI2Vycm9yIE5NSSBleGNlcHRpb24gaGFuZGxlciBhZGRyZXNzIG5vdCBkZWZpbmVkCisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1pcHNfZWp0YWdfc2V0dXAodm9pZCkKK3sKKwl2b2lkICpiYXNlOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMl9SMSkKKwliYXNlID0gY3B1X2hhc192ZWljID8KKwkJKHZvaWQgKikoQ0FDX0JBU0UgKyAweGEwMCkgOgorCQkodm9pZCAqKShDQUNfQkFTRSArIDB4MzAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCisJYmFzZSA9ICh2b2lkICopMHhiZmMwMDQ4MDsKKyNlbHNlCisjZXJyb3IgRUpUQUcgZXhjZXB0aW9uIGhhbmRsZXIgYWRkcmVzcyBub3QgZGVmaW5lZAorI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCWludCBwcm9tX2FyZ2M7CisJY2hhciAqcHJvbV9hcmd2OworCisJcHJvbV9hcmdjID0gZndfYXJnMDsKKwlwcm9tX2FyZ3YgPSAoY2hhciAqKSBmd19hcmcxOworCV9wcm9tX2VudnAgPSAoaW50ICopIGZ3X2FyZzI7CisJX3Byb21fbWVtc2l6ZSA9ICh1bnNpZ25lZCBsb25nKSBmd19hcmczOworCisJYm9hcmRfbm1pX2hhbmRsZXJfc2V0dXAgPSBtaXBzX25taV9zZXR1cDsKKwlib2FyZF9lanRhZ19oYW5kbGVyX3NldHVwID0gbWlwc19lanRhZ19zZXR1cDsKKworCWlmIChwcm9tX2FyZ2MgPT0gMSkKKwkJc3RybGNhdChhcmNzX2NtZGxpbmUsIHByb21fYXJndiwgQ09NTUFORF9MSU5FX1NJWkUpOworCisJY29uZmlndXJlX3BsYXRmb3JtKCk7CisJcHJvbV9tZW1pbml0KCk7CisKKyNpZm5kZWYgQ09ORklHX0JPT1RMT0FERVJfRFJJVkVSCisJcHJfaW5mbygiXG5Cb290bG9hZGVyIGRyaXZlciBpc24ndCBsb2FkZWQuLi5cbiIpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9pbml0LmggYi9hcmNoL21pcHMvcG93ZXJ0di9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5NGMzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2luaXQuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogRGVmaW5pdGlvbnMgZnJvbSBwb3dlcnR2IGluaXQuYyBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3I6IERhdmlkIFZvbUxlaG4KKyAqLworCisjaWZuZGVmIF9QT1dFUlRWX0lOSVRfSAorI2RlZmluZSBfUE9XRVJUVl9JTklUX0gKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9wcm9tX21lbXNpemU7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L21lbW9yeS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5ZWIzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L21lbW9yeS5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQXBwYXJlbnRseSBvcmlnaW5hbGx5IGZyb20gYXJjaC9taXBzL21hbHRhLW1lbW9yeS5jLiBNb2RpZmllZCB0byB3b3JrCisgKiB3aXRoIHRoZSBQb3dlclRWIGJvb3Rsb2FkZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3Byb20uaD4KKworI2luY2x1ZGUgImluaXQuaCIKKworLyogTWVtb3J5IGNvbnN0YW50cyAqLworI2RlZmluZSBLSUJJQllURShuKQkJKChuKSAqIDEwMjQpCS8qIE51bWJlciBvZiBraWJpYnl0ZXMgKi8KKyNkZWZpbmUgTUVCSUJZVEUobikJCSgobikgKiBLSUJJQllURSgxMDI0KSkgLyogTnVtYmVyIG9mIG1lYmlieXRlcyAqLworI2RlZmluZSBERUZBVUxUX01FTVNJWkUJCU1FQklCWVRFKDI1NikJLyogSWYgbm8gbWVtc2l6ZSBwcm92aWRlZCAqLworI2RlZmluZSBMT1dfTUVNX01BWAkJTUVCSUJZVEUoMjUyKQkvKiBNYXggdXNhYmxlIGxvdyBtZW0gKi8KKyNkZWZpbmUgUkVTX0JPT1RMRFJfTUVNU0laRQlNRUJJQllURSgxKQkvKiBNZW1vcnkgcmVzZXJ2ZWQgZm9yIGJsZHIgKi8KKyNkZWZpbmUgQk9PVF9NRU1fU0laRQkJS0lCSUJZVEUoMjU2KQkvKiBNZW1vcnkgcmVzZXJ2ZWQgZm9yIGJsZHIgKi8KKyNkZWZpbmUgUEhZU19NRU1fU1RBUlQJCTB4MTAwMDAwMDAJLyogU3RhcnQgb2YgcGh5c2ljYWwgbWVtb3J5ICovCisKK2NoYXIgX19pbml0ZGF0YSBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKwordm9pZCBfX2luaXQgcHJvbV9tZW1pbml0KHZvaWQpCit7CisJY2hhciAqbWVtc2l6ZV9zdHI7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgcGh5c2VuZDsKKwljaGFyICpwdHI7CisJaW50IGxvd19tZW07CisJaW50IGhpZ2hfbWVtOworCisJLyogQ2hlY2sgdGhlIGNvbW1hbmQgbGluZSBmaXJzdCBmb3IgYSBtZW1zaXplIGRpcmVjdGl2ZSAqLworCXN0cmNweShjbWRsaW5lLCBhcmNzX2NtZGxpbmUpOworCXB0ciA9IHN0cnN0cihjbWRsaW5lLCAibWVtc2l6ZT0iKTsKKwlpZiAocHRyICYmIChwdHIgIT0gY21kbGluZSkgJiYgKCoocHRyIC0gMSkgIT0gJyAnKSkKKwkJcHRyID0gc3Ryc3RyKHB0ciwgIiBtZW1zaXplPSIpOworCisJaWYgKHB0cikgeworCQltZW1zaXplID0gbWVtcGFyc2UocHRyICsgOCwgJnB0cik7CisJfSBlbHNlIHsKKwkJLyogb3RoZXJ3aXNlIGxvb2sgaW4gdGhlIGVudmlyb25tZW50ICovCisJCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKKworCQlpZiAobWVtc2l6ZV9zdHIgIT0gTlVMTCkgeworCQkJcHJfaW5mbygicHJvbSBtZW1zaXplID0gJXNcbiIsIG1lbXNpemVfc3RyKTsKKwkJCW1lbXNpemUgPSBzaW1wbGVfc3RydG9sKG1lbXNpemVfc3RyLCBOVUxMLCAwKTsKKwkJfQorCisJCWlmIChtZW1zaXplID09IDApIHsKKwkJCWlmIChfcHJvbV9tZW1zaXplICE9IDApIHsKKwkJCQltZW1zaXplID0gX3Byb21fbWVtc2l6ZTsKKwkJCQlwcl9pbmZvKCJfcHJvbV9tZW1zaXplID0gMHglbHhcbiIsIG1lbXNpemUpOworCQkJCS8qIGFkZCBpbiBtZW1vcnkgdGhhdCB0aGUgYm9vdGxvYWRlciBkb2Vzbid0CisJCQkJICogcmVwb3J0ICovCisJCQkJbWVtc2l6ZSArPSBCT09UX01FTV9TSVpFOworCQkJfSBlbHNlIHsKKwkJCQltZW1zaXplID0gREVGQVVMVF9NRU1TSVpFOworCQkJCXByX2luZm8oIk1lbXNpemUgbm90IHBhc3NlZCBieSBib290bG9hZGVyLCAiCisJCQkJCSJkZWZhdWx0aW5nIHRvIDB4JWx4XG4iLCBtZW1zaXplKTsKKwkJCX0KKwkJfQorCX0KKworCXBoeXNlbmQgPSBQRk5fQUxJR04oJl9lbmQpIC0gMHg4MDAwMDAwMDsKKwlpZiAobWVtc2l6ZSA+IExPV19NRU1fTUFYKSB7CisJCWxvd19tZW0gPSBMT1dfTUVNX01BWDsKKwkJaGlnaF9tZW0gPSBtZW1zaXplIC0gbG93X21lbTsKKwl9IGVsc2UgeworCQlsb3dfbWVtID0gbWVtc2l6ZTsKKwkJaGlnaF9tZW0gPSAwOworCX0KKworLyoKKyAqIFRPRE86IFdlIHdpbGwgdXNlIHRoZSBoYXJkIGNvZGUgZm9yIG1lbW9yeSBjb25maWd1cmF0aW9uIHVudGlsCisgKiB0aGUgYm9vdGxvYWRlciByZWxlYXNlcyB0aGVpciBkZXZpY2UgdHJlZSB0byB1cy4KKyAqLworCS8qCisJICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgYm9vdGxvYWRlciB0byB0aGUKKwkgKiBtZW1vcnkgbWFwLgorCSAqLworCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfTUVNX1NUQVJULCBSRVNfQk9PVExEUl9NRU1TSVpFLAorCQlCT09UX01FTV9SRVNFUlZFRCk7CisjaWZkZWYgQ09ORklHX0hJR0hNRU1fMjU2XzEyOAorCS8qCisJICogQWRkIG1lbW9yeSBpbiBsb3cgZm9yIGdlbmVyYWwgdXNlIGJ5IHRoZSBrZXJuZWwgYW5kIGl0cyBmcmllbmRzCisJICogKGxpa2UgZHJpdmVycywgYXBwbGljYXRpb25zLCBldGMpLgorCSAqLworCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfTUVNX1NUQVJUICsgUkVTX0JPT1RMRFJfTUVNU0laRSwKKwkJTE9XX01FTV9NQVggLSBSRVNfQk9PVExEUl9NRU1TSVpFLCBCT09UX01FTV9SQU0pOworCS8qCisJICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHJlc2V0IHZlY3Rvci4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbigweDFmYzAwMDAwLCBNRUJJQllURSg0KSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCS8qCisJICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQuCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oMHgyMDAwMDAwMCwgTUVCSUJZVEUoMTAyNCArIDc1KSwgQk9PVF9NRU1fUkVTRVJWRUQpOworCS8qCisJICogQWRkIG1lbW9yeSBpbiBoaWdoIGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcworCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KKwkgKgorCSAqIDc1TUIgaXMgcmVzZXJ2ZWQgZm9yIGRldmljZXMgd2hpY2ggYXJlIHVzaW5nIHRoZSBtZW1vcnkgaW4gaGlnaC4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbigweDYwMDAwMDAwICsgTUVCSUJZVEUoNzUpLCBNRUJJQllURSgxMjggLSA3NSksCisJCUJPT1RfTUVNX1JBTSk7CisjZWxpZiBkZWZpbmVkIENPTkZJR19ISUdITUVNXzEyOF8xMjgKKwkvKgorCSAqIEFkZCBtZW1vcnkgaW4gbG93IGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcworCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX01FTV9TVEFSVCArIFJFU19CT09UTERSX01FTVNJWkUsCisJCU1FQklCWVRFKDEyOCkgLSBSRVNfQk9PVExEUl9NRU1TSVpFLCBCT09UX01FTV9SQU0pOworCS8qCisJICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQuCisJICovCisJYWRkX21lbW9yeV9yZWdpb24oUEhZU19NRU1fU1RBUlQgKyBNRUJJQllURSgxMjgpLAorCQlNRUJJQllURSgxMjggKyAxMDI0ICsgNzUpLCBCT09UX01FTV9SRVNFUlZFRCk7CisJLyoKKwkgKiBBZGQgbWVtb3J5IGluIGhpZ2ggZm9yIGdlbmVyYWwgdXNlIGJ5IHRoZSBrZXJuZWwgYW5kIGl0cyBmcmllbmRzCisJICogKGxpa2UgZHJpdmVycywgYXBwbGljYXRpb25zLCBldGMpLgorCSAqCisJICogNzVNQiBpcyByZXNlcnZlZCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgdXNpbmcgdGhlIG1lbW9yeSBpbiBoaWdoLgorCSAqLworCWFkZF9tZW1vcnlfcmVnaW9uKDB4NjAwMDAwMDAgKyBNRUJJQllURSg3NSksIE1FQklCWVRFKDEyOCAtIDc1KSwKKwkJQk9PVF9NRU1fUkFNKTsKKyNlbHNlCisJLyogQWRkIGxvdyBtZW1vcnkgcmVnaW9ucyBmb3IgZWl0aGVyOgorCSAqICAgLSBuby1oaWdobWVtb3J5IGNvbmZpZ3VyYXRpb24gY2FzZSAtT1ItCisJICogICAtIGhpZ2htZW1vcnkgIkhJR0hNRU1fTE9XQkFOS19PTkxZIiBjYXNlCisJICovCisJLyoKKwkgKiBBZGQgbWVtb3J5IGZvciBnZW5lcmFsIHVzZSBieSB0aGUga2VybmVsIGFuZCBpdHMgZnJpZW5kcworCSAqIChsaWtlIGRyaXZlcnMsIGFwcGxpY2F0aW9ucywgZXRjKS4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX01FTV9TVEFSVCArIFJFU19CT09UTERSX01FTVNJWkUsCisJCWxvd19tZW0gLSBSRVNfQk9PVExEUl9NRU1TSVpFLCBCT09UX01FTV9SQU0pOworCS8qCisJICogQWRkIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHJlc2V0IHZlY3Rvci4KKwkgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbigweDFmYzAwMDAwLCBNRUJJQllURSg0KSwgQk9PVF9NRU1fUkVTRVJWRUQpOworI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBib290X21lbV9tYXAubnJfbWFwOyBpKyspIHsKKwkJaWYgKGJvb3RfbWVtX21hcC5tYXBbaV0udHlwZSAhPSBCT09UX01FTV9ST01fREFUQSkKKwkJCWNvbnRpbnVlOworCisJCWFkZHIgPSBib290X21lbV9tYXAubWFwW2ldLmFkZHI7CisJCWZyZWVfaW5pdF9wYWdlcygicHJvbSBtZW1vcnkiLAorCQkJCWFkZHIsIGFkZHIgKyBib290X21lbV9tYXAubWFwW2ldLnNpemUpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wb3dlcnR2L3BjaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM2MjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcGNpL01ha2VmaWxlCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBTY2llbnRpZmljLUF0bGFudGEsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyMKKworb2JqLSQoQ09ORklHX1BDSSkJKz0gZml4dXAtcG93ZXJ0di5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2FsbCAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wY2kvZml4dXAtcG93ZXJ0di5jIGIvYXJjaC9taXBzL3Bvd2VydHYvcGNpL2ZpeHVwLXBvd2VydHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZiYzJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcGNpL2ZpeHVwLXBvd2VydHYuYwpAQCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oPgorI2luY2x1ZGUgInBvd2VydHYtcGNpLmgiCisKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlyZXR1cm4gYXNpY19wY2llX21hcF9pcnEoZGV2LCBzbG90LCBwaW4pOworfQorCisvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCitpbnQgcGNpYmlvc19wbGF0X2Rldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhc2ljX3BjaWVfbWFwX2lycQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAqZGV2IC0gcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlICAobm90IHVzZWQpCisgKiBzbG90IC0gc2xvdCBudW1iZXIgIChub3QgdXNlZCkKKyAqIHBpbiAtIHBpbiBudW1iZXIgIChub3QgdXNlZCkKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBSZXR1cm5zOiBJUlEgbnVtYmVyIChhbHdheXMgdGhlIFBDSSBFeHByZXNzIElSUSBudW1iZXIpCisgKgorICogRGVzY3JpcHRpb246CisgKiBhc2ljX3BjaWVfbWFwX2lycSB3aWxsIHJldHVybiB0aGUgSVJRIG51bWJlciBvZiB0aGUgUENJIEV4cHJlc3MgaW50ZXJydXB0LgorICoKKyAqLworaW50IGFzaWNfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlyZXR1cm4gaXJxX3BjaWV4cDsKK30KK0VYUE9SVF9TWU1CT0woYXNpY19wY2llX21hcF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvcGNpL3Bvd2VydHYtcGNpLmggYi9hcmNoL21pcHMvcG93ZXJ0di9wY2kvcG93ZXJ0di1wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU4ODZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcGNpL3Bvd2VydHYtcGNpLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqCQkJCXBvd2VydHYtcGNpLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisvKgorICogTG9jYWwgZGVmaW5pdGlvbnMgZm9yIHRoZSBwb3dlcnR2IFBDSSBjb2RlCisgKi8KKworI2lmbmRlZiBfUE9XRVJUVl9QQ0lfUE9XRVJUVl9QQ0lfSF8KKyNkZWZpbmUgX1BPV0VSVFZfUENJX1BPV0VSVFZfUENJX0hfCitleHRlcm4gaW50IGFzaWNfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CitleHRlcm4gaW50IGFzaWNfcGNpZV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBhc2ljX3BjaWVfaW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCBsb2dfbGV2ZWw7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHYtY2xvY2suaCBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHYtY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRjNTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0di1jbG9jay5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEF1dGhvcjogRGF2aWQgVm9tTGVobgorICovCisKKyNpZm5kZWYgX1BPV0VSVFZfUE9XRVJUVl9DTE9DS19ICisjZGVmaW5lIF9QT1dFUlRWX1BPV0VSVFZfQ0xPQ0tfSAorZXh0ZXJuIGludCBwb3dlcnR2X2Nsb2NrZXZlbnRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBvd2VydHZfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWlwc19nZXRfcGxsX2ZyZXEodm9pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OThiMWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKEMpIDIwMDkgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9nZW5lcmljLmg+CisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgInJlc2V0LmgiCisKKyNkZWZpbmUgVkFMKG4pCQlTVFIobikKKworLyoKKyAqIE1hY3JvcyBmb3IgbG9hZGluZyBhZGRyZXNzZXMgYW5kIHN0b3JpbmcgcmVnaXN0ZXJzOgorICogUFRSX0xBCUxvYWQgdGhlIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyCisgKiBMT05HX1MJU3RvcmUgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLgorICogTE9OR19MCUxvYWQgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdpdmVuIHJlZ2lzdGVyCisgKiBQVFJfQURESVUJQWRkIGEgY29uc3RhbnQgdmFsdWUgdG8gYSByZWdpc3RlciB1c2VkIGFzIGEgcG9pbnRlcgorICogUkVHX1NJWkUJTnVtYmVyIG9mIDgtYml0IGJ5dGVzIGluIGEgZnVsbCB3aWR0aCByZWdpc3RlcgorICovCisjaWZkZWYgQ09ORklHXzY0QklUCisjd2FybmluZyBUT0RPOiA2NC1iaXQgY29kZSBuZWVkcyB0byBiZSB2ZXJpZmllZAorI2RlZmluZSBQVFJfTEEJCSJkbGEJIgorI2RlZmluZSBMT05HX1MJCSJzZAkiCisjZGVmaW5lIExPTkdfTAkJImxkCSIKKyNkZWZpbmUgUFRSX0FERElVCSJkYWRkaXUJIgorI2RlZmluZSBSRUdfU0laRQkiOCIJCS8qIEluIGJ5dGVzICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR18zMkJJVAorI2RlZmluZSBQVFJfTEEJCSJsYQkiCisjZGVmaW5lIExPTkdfUwkJInN3CSIKKyNkZWZpbmUgTE9OR19MCQkibHcJIgorI2RlZmluZSBQVFJfQURESVUJImFkZGl1CSIKKyNkZWZpbmUgUkVHX1NJWkUJIjQiCQkvKiBJbiBieXRlcyAqLworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3BhbmljX25vdGlmaWVyKHZvaWQpOworc3RhdGljIGludCBwYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXJfYmxvY2ssCisJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqY2F1c2Vfc3RyaW5nKTsKKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJcmV0dXJuICJQb3dlclRWIjsKK30KKwordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKK3sKKwlwYW5pY19vbl9vb3BzID0gMTsKKwlyZWdpc3Rlcl9wYW5pY19ub3RpZmllcigpOworCisjaWYgMAorCW1pcHNfcGNpYmlvc19pbml0KCk7CisjZW5kaWYKKwltaXBzX3JlYm9vdF9zZXR1cCgpOworfQorCisvKgorICogSW5zdGFsbCBhIHBhbmljIG5vdGlmaWVyIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBkaWFnbm9zdGljcworICovCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9wYW5pY19ub3RpZmllcigpCit7CisJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ub3RpZmllciA9IHsKKwkJLm5vdGlmaWVyX2NhbGwgPSBwYW5pY19oYW5kbGVyLAorCQkubmV4dCA9IE5VTEwsCisJCS5wcmlvcml0eQk9IElOVF9NQVgKKwl9OworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljX25vdGlmaWVyKTsKK30KKworc3RhdGljIGludCBwYW5pY19oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZpZXJfYmxvY2ssCisJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqY2F1c2Vfc3RyaW5nKQoreworCXN0cnVjdCBwdF9yZWdzCW15X3JlZ3M7CisKKwkvKiBTYXZlIGFsbCBvZiB0aGUgcmVnaXN0ZXJzICovCisJeworCQl1bnNpZ25lZCBsb25nCWF0LCB2MCwgdjE7IC8qIE11c3QgYmUgb24gdGhlIHN0YWNrICovCisKKwkJLyogU3RhcnQgYnkgc2F2aW5nICRhdCBhbmQgdjAgb24gdGhlIHN0YWNrLiBXZSB1c2UgJGF0CisJCSAqIG91cnNlbHZlcywgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIGNvbXBpbGVyIG1heSB1c2UgdjAgb3IgdjEKKwkJICogdG8gbG9hZCB0aGUgYWRkcmVzcyBvZiB0aGUgcHRfcmVncyBzdHJ1Y3R1cmUuIFdlJ2xsIGNvbWUKKwkJICogYmFjayBsYXRlciB0byBzdG9yZSB0aGUgcmVnaXN0ZXJzIGluIHRoZSBwdF9yZWdzCisJCSAqIHN0cnVjdHVyZS4gKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkJIi5zZXQJbm9hdFxuIgorCQkJTE9OR19TCQkiJGF0LCAlW2F0XVxuIgorCQkJTE9OR19TCQkiJDIsICVbdjBdXG4iCisJCQlMT05HX1MJCSIkMywgJVt2MV1cbiIKKwkJOgorCQkJW2F0XSAiPW0iIChhdCksCisJCQlbdjBdICI9bSIgKHYwKSwKKwkJCVt2MV0gIj1tIiAodjEpCisJCToKKwkJOgkiYXQiCisJCSk7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkJIi5zZXQJbm9hdFxuIgorCQkJIm1vdmUJCSRhdCwgJVtwdF9yZWdzXVxuIgorCisJCQkvKiBBcmd1bWVudCByZWdpc3RlcnMgKi8KKwkJCUxPTkdfUwkJIiQ0LCAiIFZBTChQVF9SNCkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkNSwgIiBWQUwoUFRfUjUpICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJDYsICIgVkFMKFBUX1I2KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQ3LCAiIFZBTChQVF9SNykgIigkYXQpXG4iCisKKwkJCS8qIFRlbXBvcmFyeSByZWdzICovCisJCQlMT05HX1MJCSIkOCwgIiBWQUwoUFRfUjgpICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJDksICIgVkFMKFBUX1I5KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxMCwgIiBWQUwoUFRfUjEwKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxMSwgIiBWQUwoUFRfUjExKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxMiwgIiBWQUwoUFRfUjEyKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxMywgIiBWQUwoUFRfUjEzKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxNCwgIiBWQUwoUFRfUjE0KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxNSwgIiBWQUwoUFRfUjE1KSAiKCRhdClcbiIKKworCQkJLyogIlNhdmVkIiByZWdpc3RlcnMgKi8KKwkJCUxPTkdfUwkJIiQxNiwgIiBWQUwoUFRfUjE2KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxNywgIiBWQUwoUFRfUjE3KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxOCwgIiBWQUwoUFRfUjE4KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQxOSwgIiBWQUwoUFRfUjE5KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQyMCwgIiBWQUwoUFRfUjIwKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQyMSwgIiBWQUwoUFRfUjIxKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQyMiwgIiBWQUwoUFRfUjIyKSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQyMywgIiBWQUwoUFRfUjIzKSAiKCRhdClcbiIKKworCQkJLyogQWRkJ2wgdGVtcCByZWdzICovCisJCQlMT05HX1MJCSIkMjQsICIgVkFMKFBUX1IyNCkgIigkYXQpXG4iCisJCQlMT05HX1MJCSIkMjUsICIgVkFMKFBUX1IyNSkgIigkYXQpXG4iCisKKwkJCS8qIEtlcm5lbCB0ZW1wIHJlZ3MgKi8KKwkJCUxPTkdfUwkJIiQyNiwgIiBWQUwoUFRfUjI2KSAiKCRhdClcbiIKKwkJCUxPTkdfUwkJIiQyNywgIiBWQUwoUFRfUjI3KSAiKCRhdClcbiIKKworCQkJLyogR2xvYmFsIHBvaW50ZXIsIHN0YWNrIHBvaW50ZXIsIGZyYW1lIHBvaW50ZXIgYW5kCisJCQkgKiByZXR1cm4gYWRkcmVzcyAqLworCQkJTE9OR19TCQkiJGdwLCAiIFZBTChQVF9SMjgpICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJHNwLCAiIFZBTChQVF9SMjkpICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJGZwLCAiIFZBTChQVF9SMzApICIoJGF0KVxuIgorCQkJTE9OR19TCQkiJHJhLCAiIFZBTChQVF9SMzEpICIoJGF0KVxuIgorCisJCQkvKiBOb3cgd2UgY2FuIGdldCB0aGUgJGF0IGFuZCB2MCByZWdpc3RlcnMgYmFjayBhbmQKKwkJCSAqIHN0b3JlIHRoZW0gKi8KKwkJCUxPTkdfTAkJIiQ4LCAlW2F0XVxuIgorCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IxKSAiKCRhdClcbiIKKwkJCUxPTkdfTAkJIiQ4LCAlW3YwXVxuIgorCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IyKSAiKCRhdClcbiIKKwkJCUxPTkdfTAkJIiQ4LCAlW3YxXVxuIgorCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKKwkJOgorCQk6CisJCQlbYXRdICJtIiAoYXQpLAorCQkJW3YwXSAibSIgKHYwKSwKKwkJCVt2MV0gIm0iICh2MSksCisJCQlbcHRfcmVnc10gInIiICgmbXlfcmVncykKKwkJOgkiYXQiLCAidDAiCisJCSk7CisKKwkJLyogU2V0IHRoZSBjdXJyZW50IEVQQyB2YWx1ZSB0byBiZSB0aGUgY3VycmVudCBsb2NhdGlvbiBpbiB0aGlzCisJCSAqIGZ1bmN0aW9uICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSIuc2V0CW5vYXRcbiIKKwkJIjE6XG4iCisJCQlQVFJfTEEJCSIkYXQsIDFiXG4iCisJCQlMT05HX1MJCSIkYXQsICVbY3AwX2VwY11cbiIKKwkJOgorCQkJW2NwMF9lcGNdICI9bSIgKG15X3JlZ3MuY3AwX2VwYykKKwkJOgorCQk6CSJhdCIKKwkJKTsKKworCQlteV9yZWdzLmNwMF9jYXVzZSA9IHJlYWRfYzBfY2F1c2UoKTsKKwkJbXlfcmVncy5jcDBfc3RhdHVzID0gcmVhZF9jMF9zdGF0dXMoKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfRElBR05PU1RJQ1MKKwlmYWlsdXJlX3JlcG9ydCgoY2hhciAqKSBjYXVzZV9zdHJpbmcsCisJCWhhdmVfZGllX3JlZ3MgPyAmZGllX3JlZ3MgOiAmbXlfcmVncyk7CisJaGF2ZV9kaWVfcmVncyA9IGZhbHNlOworI2Vsc2UKKwlwcl9jcml0KCJJJ20gZmVlbGluZyBhIGJpdCBzbGVlcHkuIGhtbW1tbS4uLiBwZXJoYXBzIGEgbmFwIHdvdWxkLi4uICIKKwkJInp6enouLi4gXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgUkYgTUFDIGFkZHJlc3MsIGlmIG9uZSB3YXMgc3VwcGxpZWQgb24gdGhlCisgKiBjb21tYW5kIGxpbmUuICovCitzdGF0aWMgYm9vbCBoYXZlX3JmbWFjOworc3RhdGljIHU4IHJmbWFjW0VUSF9BTEVOXTsKKworc3RhdGljIGludCByZm1hY19wYXJhbShjaGFyICpwKQoreworCXU4CSpxOworCWJvb2wJaXNfaGlnaF9uaWJibGU7CisJaW50CWM7CisKKwkvKiBTa2lwIGEgbGVhZGluZyAiMHgiLCBpZiBwcmVzZW50ICovCisJaWYgKCpwID09ICcwJyAmJiAqKHArMSkgPT0gJ3gnKQorCQlwICs9IDI7CisKKwlxID0gcmZtYWM7CisJaXNfaGlnaF9uaWJibGUgPSB0cnVlOworCisJZm9yIChjID0gKHVuc2lnbmVkIGNoYXIpICpwKys7CisJCWlzeGRpZ2l0KGMpICYmIHEgLSByZm1hYyA8IEVUSF9BTEVOOworCQljID0gKHVuc2lnbmVkIGNoYXIpICpwKyspIHsKKwkJaW50CW5pYmJsZTsKKworCQluaWJibGUgPSAoaXNkaWdpdChjKSA/IChjIC0gJzAnKSA6CisJCQkoaXN1cHBlcihjKSA/IGMgLSAnQScgKyAxMCA6IGMgLSAnYScgKyAxMCkpOworCisJCWlmIChpc19oaWdoX25pYmJsZSkKKwkJCSpxID0gbmliYmxlIDw8IDQ7CisJCWVsc2UKKwkJCSpxKysgfD0gbmliYmxlOworCisJCWlzX2hpZ2hfbmliYmxlID0gIWlzX2hpZ2hfbmliYmxlOworCX0KKworCS8qIElmIHdlIHBhcnNlZCBhbGwgdGhlIHdheSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUgYW5kCisJICogcGFyc2VkIGFsbCBFVEhfQUxFTiBieXRlcywgd2UgaGF2ZSBhIHVzYWJsZSBSRiBNQUMgYWRkcmVzcyAqLworCWhhdmVfcmZtYWMgPSAoYyA9PSAnXDAnICYmIHEgLSByZm1hYyA9PSBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oInJmbWFjIiwgcmZtYWNfcGFyYW0pOworCisvKgorICogR2VuZXJhdGUgYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3MgdGhhdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBiZWluZyB1bmlxdWUuCisgKiBAYWRkcjoJUG9pbnRlciB0byBzaXgtYnl0ZSBhcnJheSBjb250YWluaW5nIHRoZSBFdGhlcm5ldCBhZGRyZXNzCisgKiBHZW5lcmF0ZXMgYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3MgdGhhdCBpcyBoaWdobHkgbGlrZWx5IHRvIGJlIHVuaXF1ZSBmb3IKKyAqIHRoaXMgcGFydGljdWxhciBzeXN0ZW0gb24gYSBuZXR3b3JrIHdpdGggb3RoZXIgc3lzdGVtcyBvZiB0aGUgc2FtZSB0eXBlLgorICoKKyAqIFRoZSBwcm9ibGVtIHdlIGFyZSBzb2x2aW5nIGlzIHRoYXQsIHdoZW4gcmFuZG9tX2V0aGVyX2FkZHIoKSBpcyB1c2VkIHRvCisgKiBnZW5lcmF0ZSBNQUMgYWRkcmVzc2VzIGF0IHN0YXJ0dXAsIHRoZXJlIGlzbid0IG11Y2ggZW50cm9weSBmb3IgdGhlIHJhbmRvbQorICogbnVtYmVyIGdlbmVyYXRvciB0byB1c2UgYW5kIHRoZSBhZGRyZXNzZXMgaXQgcHJvZHVjZXMgYXJlIGZhaXJseSBsaWtlbHkgdG8KKyAqIGJlIHRoZSBzYW1lIGFzIHRob3NlIG9mIG90aGVyIGlkZW50aWNhbCBzeXN0ZW1zIG9uIHRoZSBzYW1lIGxvY2FsIG5ldHdvcmsuCisgKiBUaGlzIGlzIHRydWUgZXZlbiBmb3IgcmVsYXRpdmVseSBzbWFsbCBudW1iZXJzIG9mIHN5c3RlbXMgKGZvciB0aGUgcmVhc29uCisgKiB3aHksIHNlZSB0aGUgV2lraXBlZGlhIGVudHJ5IGZvciAiQmlydGhkYXkgcHJvYmxlbSIgYXQ6CisgKglodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW0KKyAqCisgKiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGEgTUFDIGFkZHJlc3Mga25vd24gdG8gYmUgdW5pcXVlLCB0aGUKKyAqIFJGIE1BQyBhZGRyZXNzLiBUaGUgYmFkIG5ld3MgaXMgdGhhdCB0aGlzIGFkZHJlc3MgaXMgYWxyZWFkeSBpbiB1c2Ugb24gdGhlCisgKiBSRiBpbnRlcmZhY2UuIFdvcnNlLCB0aGUgb2J2aW91cyB0cmljaywgdGFraW5nIHRoZSBSRiBNQUMgYWRkcmVzcyBhbmQKKyAqIHR1cm5pbmcgb24gdGhlIGxvY2FsbHkgbWFuYWdlZCBiaXQsIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBmb3Igb3RoZXIgZGV2aWNlcy4KKyAqIFN0aWxsLCB0aGlzIGRvZXMgZ2l2ZSB1cyBzb21ldGhpbmcgdG8gd29yayB3aXRoLgorICoKKyAqIFRoZSBhcHByb2FjaCB3ZSB0YWtlIGlzOgorICogMS4JSWYgd2UgY2FuJ3QgZ2V0IHRoZSBSRiBNQUMgQWRkcmVzcywganVzdCBjYWxsIHJhbmRvbV9ldGhlcl9hZGRyLgorICogMi4JVXNlIHRoZSAyNC1iaXQgTklDLXNwZWNpZmljIGJpdHMgb2YgdGhlIFJGIE1BQyBhZGRyZXNzIGFzIHRoZSBsYXN0IDI0CisgKgliaXRzIG9mIHRoZSBuZXcgYWRkcmVzcy4gVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBiZSB1bmlxdWUsIGV4Y2VwdCBmb3IKKyAqCXRoZSBjdXJyZW50IGJveC4KKyAqIDMuCVRvIGF2b2lkIHVzaW5nIGFkZHJlc3NlcyBhbHJlYWR5IG9uIHRoZSBjdXJyZW50IGJveCwgd2Ugc2V0IHRoZSB0b3AKKyAqCXNpeCBiaXRzIG9mIHRoZSBhZGRyZXNzIHdpdGggYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSBhbnkgY3VycmVudGx5CisgKglyZWdpc3RlcmVkIFNjaWVudGlmaWMgQXRsYW50YSBvcmdhbml6YXRpb25hbGx5IHVuaXF1ZSBpZGVudGlmeWVyCisgKgkoT1VJKS4gVGhpcyBhdm9pZHMgZHVwbGljYXRpb24gd2l0aCBhbnkgYWRkcmVzc2VzIG9uIHRoZSBzeXN0ZW0gdGhhdAorICoJd2VyZSBnZW5lcmF0ZWQgZnJvbSB2YWxpZCBTY2llbnRpZmljIEF0bGFudGEtcmVnaXN0ZXJlZCBhZGRyZXNzIGJ5CisgKglzaW1wbHkgZmxpcHBpbmcgdGhlIGxvY2FsbHkgbWFuYWdlZCBiaXQuCisgKiA0LglXZSBhcmVuJ3QgZ2VuZXJhdGluZyBhIG11bHRpY2FzdCBhZGRyZXNzLCBzbyB3ZSBsZWF2ZSB0aGUgbXVsdGljYXN0CisgKgliaXQgb2ZmLiBTaW5jZSB3ZSBhcmVuJ3QgdXNpbmcgYSByZWdpc3RlcmVkIGFkZHJlc3MsIHdlIGhhdmUgdG8gc2V0CisgKgl0aGUgbG9jYWxseSBtYW5hZ2VkIGJpdC4KKyAqIDUuCVdlIHRoZW4gcmFuZG9tbHkgZ2VuZXJhdGUgdGhlIHJlbWFpbmluZyAxNi1iaXRzLiBUaGlzIGRvZXMgdHdvCisgKgl0aGluZ3M6CisgKglhLglJdCBhbGxvd3MgdXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBtb3JlIHRoYW4gb25lIGRldmljZQorICoJCWluIHRoaXMgc3lzdGVtCisgKgliLglJdCBlbnN1cmVzIHRoYXQgdGhpbmdzIHdpbGwgcHJvYmFibHkgc3RpbGwgd29yayBldmVuIGlmCisgKgkJc29tZSBkZXZpY2Ugb24gdGhlIGRldmljZSBuZXR3b3JrIGhhcyBhIGxvY2FsbHkgbWFuYWdlZAorICoJCWFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSB0b3Agc2l4IGJpdHMgZnJvbSBzdGVwIDIuCisgKi8KK3ZvaWQgcGxhdGZvcm1fcmFuZG9tX2V0aGVyX2FkZHIodTggYWRkcltFVEhfQUxFTl0pCit7CisJY29uc3QgaW50IG51bV9yYW5kb21fYnl0ZXMgPSAyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbm9uX3NjaWF0bF9vdWlfYml0cyA9IDB4YzB1OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJfbG9jYWxseV9tYW5hZ2VkID0gKDEgPDwgMSk7CisKKwlpZiAoIWhhdmVfcmZtYWMpIHsKKwkJcHJfd2FybmluZygicmZtYWMgbm90IGF2YWlsYWJsZSBvbiBjb21tYW5kIGxpbmU7ICIKKwkJCSJnZW5lcmF0aW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xuIik7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGFkZHIpOworCX0KKworCWVsc2UgeworCQlpbnQJaTsKKworCQkvKiBTZXQgdGhlIGZpcnN0IGJ5dGUgdG8gc29tZXRoaW5nIHRoYXQgd29uJ3QgbWF0Y2ggYSBTY2llbnRpZmljCisJCSAqIEF0bGFudGEgT1VJLCBpcyBsb2NhbGx5IG1hbmFnZWQsIGFuZCBpc24ndCBhIG11bHRpY2FzdAorCQkgKiBhZGRyZXNzICovCisJCWFkZHJbMF0gPSBub25fc2NpYXRsX291aV9iaXRzIHwgbWFjX2FkZHJfbG9jYWxseV9tYW5hZ2VkOworCisJCS8qIEdldCBzb21lIGJ5dGVzIG9mIHJhbmRvbSBhZGRyZXNzIGluZm9ybWF0aW9uICovCisJCWdldF9yYW5kb21fYnl0ZXMoJmFkZHJbMV0sIG51bV9yYW5kb21fYnl0ZXMpOworCisJCS8qIENvcHkgb3ZlciB0aGUgTklDLXNwZWNpZmljIGJpdHMgb2YgdGhlIFJGIE1BQyBhZGRyZXNzICovCisJCWZvciAoaSA9IDEgKyBudW1fcmFuZG9tX2J5dGVzOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJCWFkZHJbaV0gPSByZm1hY1tpXTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9yZXNldC5jIGIvYXJjaC9taXBzL3Bvd2VydHYvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA3NjUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcmVzZXQuYwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoQykgMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CQkJLyogTm90IGluY2x1ZGVkIGJ5IGxpbnV4L3JlYm9vdC5oICovCisKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKyNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2tibGRyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CisjaW5jbHVkZSAicmVzZXQuaCIKKworc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKK3sKKyNpZmRlZiBDT05GSUdfQk9PVExPQURFUl9EUklWRVIKKwkvKgorCSAqIENhbGwgdGhlIGJvb3Rsb2FkZXIncyByZXNldCBmdW5jdGlvbiB0byBlbnN1cmUKKwkgKiB0aGF0IHBlcnNpc3RlbnQgZGF0YSBpcyBmbHVzaGVkIGJlZm9yZSBoYXJkIHJlc2V0CisJICovCisJa2JsZHJfU2V0Q2F1c2VBbmRSZXNldCgpOworI2Vsc2UKKwl3cml0ZWwoMHgxLCBhc2ljX3JlZ19hZGRyKHdhdGNoZG9nKSk7CisjZW5kaWYKK30KKwordm9pZCBtaXBzX3JlYm9vdF9zZXR1cCh2b2lkKQoreworCV9tYWNoaW5lX3Jlc3RhcnQgPSBtaXBzX21hY2hpbmVfcmVzdGFydDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3Jlc2V0LmggYi9hcmNoL21pcHMvcG93ZXJ0di9yZXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OGZkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcG93ZXJ0di9yZXNldC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmcm9tIHBvd2VydHYgcmVzZXQuYyBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBDaXNjbyBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBdXRob3I6IERhdmlkIFZvbUxlaG4KKyAqLworCisjaWZuZGVmIF9QT1dFUlRWX1BPV0VSVFZfUkVTRVRfSAorI2RlZmluZSBfUE9XRVJUVl9QT1dFUlRWX1JFU0VUX0gKK2V4dGVybiB2b2lkIG1pcHNfcmVib290X3NldHVwKHZvaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwc3NpbS9zaW1fY21kbGluZS5jIGIvYXJjaC9taXBzL3Bvd2VydHYvdGltZS5jCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9taXBzc2ltL3NpbV9jbWRsaW5lLmMKcmVuYW1lIHRvIGFyY2gvbWlwcy9wb3dlcnR2L3RpbWUuYwppbmRleCA3NDI0MGUxLi45ZmQ3YjY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwc3NpbS9zaW1fY21kbGluZS5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3RpbWUuYwpAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgY29weXJpZ2h0IChDKSAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwpAQCAtMTQsMTkgKzE2LDIxIEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgorICogU2V0dGluZyB1cCB0aGUgY2xvY2sgb24gdGhlIE1JUFMgYm9hcmRzLgogICovCisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAotZXh0ZXJuIGNoYXIgYXJjc19jbWRsaW5lW107CisjaW5jbHVkZSAicG93ZXJ0di1jbG9jay5oIgogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQordW5zaWduZWQgaW50IF9fY3B1aW5pdCBnZXRfYzBfY29tcGFyZV9pbnQodm9pZCkKIHsKLQlyZXR1cm4gYXJjc19jbWRsaW5lOworCXJldHVybiBpcnFfbWlwc190aW1lcjsKIH0KIAotdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCit2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQogewotCS8qIFhYWDogR2V0IGJvb3QgbGluZSBmcm9tIGVudmlyb25tZW50PyAqLworCXBvd2VydHZfY2xvY2tzb3VyY2VfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL3Byb20uYyBiL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKaW5kZXggYWQ1YmQxMC4uZDdjMjZkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3JiNTMyL3Byb20uYworKysgYi9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCkBAIC02OSw3ICs2OSw3IEBACiAKIHZvaWQgX19pbml0IHByb21fc2V0dXBfY21kbGluZSh2b2lkKQogewotCXN0YXRpYyBjaGFyIGNtZF9saW5lW0NMX1NJWkVdIF9faW5pdGRhdGE7CisJc3RhdGljIGNoYXIgY21kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdIF9faW5pdGRhdGE7CiAJY2hhciAqY3AsICpib2FyZDsKIAlpbnQgcHJvbV9hcmdjOwogCWNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCXN0cmNweShjcCwgYXJjc19jbWRsaW5lKTsKIAkJY3AgKz0gc3RybGVuKGFyY3NfY21kbGluZSk7CiAJfQotCWNtZF9saW5lW0NMX1NJWkUtMV0gPSAnXDAnOworCWNtZF9saW5lW0NPTU1BTkRfTElORV9TSVpFIC0gMV0gPSAnXDAnOwogCiAJc3RyY3B5KGFyY3NfY21kbGluZSwgY21kX2xpbmUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItZWlzYS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItZWlzYS5jCmluZGV4IDE2MTcyNDEuLmRhNDRjY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWVpc2EuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1laXNhLmMKQEAgLTUwLDkgKzUwLDkgQEAKIAogc3RhdGljIGNoYXIgX19pbml0ICpkZWNvZGVfZWlzYV9zaWcodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgICAgICBzdGF0aWMgY2hhciBzaWdfc3RyW0VJU0FfU0lHX0xFTl07CisJc3RhdGljIGNoYXIgc2lnX3N0cltFSVNBX1NJR19MRU5dIF9faW5pdGRhdGE7CiAJdTggc2lnWzRdOwotICAgICAgICB1MTYgcmV2OworCXUxNiByZXY7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1pbnQuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCmluZGV4IDBlY2Q1ZmUuLjM4M2YxMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLWludC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgogI2luY2x1ZGUgPGFzbS9zZ2kvaHBjMy5oPgpAQCAtMTUwLDcgKzE1MSw3IEBACiAKIGV4dGVybiB2b2lkIGlwMjJfYmVfaW50ZXJydXB0KGludCBpcnEpOwogCi1zdGF0aWMgdm9pZCBpbmR5X2J1c2Vycm9yX2lycSh2b2lkKQorc3RhdGljIHZvaWQgX19pcnFfZW50cnkgaW5keV9idXNlcnJvcl9pcnEodm9pZCkKIHsKIAlpbnQgaXJxID0gU0dJX0JVU0VSUl9JUlE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCmluZGV4IGI5YTkzMTMuLjVkZWViNjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwpAQCAtNjcsNyArNjcsNyBAQAogCWNzZXJpYWwgPSBBcmNHZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJDb25zb2xlT3V0Iik7CiAKIAlpZiAoKGN0eXBlICYmICpjdHlwZSA9PSAnZCcpIHx8IChjc2VyaWFsICYmICpjc2VyaWFsID09ICdzJykpIHsKLQkJc3RhdGljIGNoYXIgb3B0aW9uc1s4XTsKKwkJc3RhdGljIGNoYXIgb3B0aW9uc1s4XSBfX2luaXRkYXRhOwogCQljaGFyICpiYXVkID0gQXJjR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiZGJhdWQiKTsKIAkJaWYgKGJhdWQpCiAJCQlzdHJjcHkob3B0aW9ucywgYmF1ZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKaW5kZXggYzhmN2QyMy4uNjAzZmM5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgpAQCAtMTE1LDcgKzExNiw3IEBACiB9CiAKIC8qIEdlbmVyaWMgU0dJIGhhbmRsZXIgZm9yIChzcHVyaW91cykgODI1NCBpbnRlcnJ1cHRzICovCi12b2lkIGluZHlfODI1NHRpbWVyX2lycSh2b2lkKQordm9pZCBfX2lycV9lbnRyeSBpbmR5XzgyNTR0aW1lcl9pcnEodm9pZCkKIHsKIAlpbnQgaXJxID0gU0dJXzgyNTRfMF9JUlE7CiAJVUxPTkcgY250OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbWVtb3J5LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYwppbmRleCBmNjFjMTY0Li5iYzEyOTcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1tZW1vcnkuYwpAQCAtNTA1LDUgKzUwNSw1IEBACiAJICAgICAgIChudW1fcGh5c3BhZ2VzIC0gdG1wKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJICAgICAgIGRhdGFzaXplID4+IDEwLAogCSAgICAgICBpbml0c2l6ZSA+PiAxMCwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcpICh0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKSk7CisJICAgICAgIHRvdGFsaGlnaF9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKaW5kZXggYzVhNWQ0YS4uM2FiZDE0NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCkBAIC05MCw3ICs5MCw3IEBACiAJewogCQljaGFyKiBjb24gPSBBcmNHZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJjb25zb2xlIik7CiAJCWlmIChjb24gJiYgKmNvbiA9PSAnZCcpIHsKLQkJCXN0YXRpYyBjaGFyIG9wdGlvbnNbOF07CisJCQlzdGF0aWMgY2hhciBvcHRpb25zWzhdIF9faW5pdGRhdGE7CiAJCQljaGFyICpiYXVkID0gQXJjR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiZGJhdWQiKTsKIAkJCWlmIChiYXVkKQogCQkJCXN0cmNweShvcHRpb25zLCBiYXVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL2NmZS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vY2ZlLmMKaW5kZXggZWI1Mzk2Yy4uNjM0MzAxMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vY2ZlLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vY2ZlLmMKQEAgLTI4Nyw3ICsyODcsNyBAQAogCSAqIGJvb3QgY29uc29sZQogCSAqLwogCWNmZV9jb25zX2hhbmRsZSA9IGNmZV9nZXRzdGRoYW5kbGUoQ0ZFX1NUREhBTkRMRV9DT05TT0xFKTsKLQlpZiAoY2ZlX2dldGVudigiTElOVVhfQ01ETElORSIsIGFyY3NfY21kbGluZSwgQ0xfU0laRSkgPCAwKSB7CisJaWYgKGNmZV9nZXRlbnYoIkxJTlVYX0NNRExJTkUiLCBhcmNzX2NtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKSA8IDApIHsKIAkJaWYgKGFyZ2MgPj0gMCkgewogCQkJLyogVGhlIGxvYWRlciBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgbGluZSAqLwogCQkJLyogdG9vIGVhcmx5IGZvciBwYW5pYyB0byBkbyBhbnkgZ29vZCAqLwpAQCAtMzE4LDcgKzMxOCw3IEBACiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCiAKIAkvKiBOb3Qgc3VyZSB0aGlzIGlzIG5lZWRlZCwgYnV0IGl0J3MgdGhlIHNhZmUgd2F5LiAqLwotCWFyY3NfY21kbGluZVtDTF9TSVpFLTFdID0gMDsKKwlhcmNzX2NtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAwOwogCiAJcHJvbV9tZW1pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvYTIwci5jIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKaW5kZXggN2RkNzZmYi4uZTY5ODA4OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9hMjByLmMKKysrIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGEyMHJfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lCT0gIkEyMFIiLAorCS5uYW1lCQk9ICJBMjBSIiwKIAkuYWNrCQk9IG1hc2tfYTIwcl9pcnEsCiAJLm1hc2sJCT0gbWFza19hMjByX2lycSwKIAkubWFza19hY2sJPSBtYXNrX2EyMHJfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9wY2ltdC5jIGIvYXJjaC9taXBzL3NuaS9wY2ltdC5jCmluZGV4IDc0ZTZjNjcuLjUxZTYyYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvcGNpbXQuYworKysgYi9hcmNoL21pcHMvc25pL3BjaW10LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBjaW10X2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICJQQ0lNVCIsCisJLm5hbWUgPSAiUENJTVQiLAogCS5hY2sgPSBkaXNhYmxlX3BjaW10X2lycSwKIAkubWFzayA9IGRpc2FibGVfcGNpbXRfaXJxLAogCS5tYXNrX2FjayA9IGRpc2FibGVfcGNpbXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9wY2l0LmMgYi9hcmNoL21pcHMvc25pL3BjaXQuYwppbmRleCAwNzFhOTU3Li5mNDY5OWQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3BjaXQuYworKysgYi9hcmNoL21pcHMvc25pL3BjaXQuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGNpdF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUgPSAiUENJVCIsCisJLm5hbWUgPSAiUENJVCIsCiAJLmFjayA9IGRpc2FibGVfcGNpdF9pcnEsCiAJLm1hc2sgPSBkaXNhYmxlX3BjaXRfaXJxLAogCS5tYXNrX2FjayA9IGRpc2FibGVfcGNpdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKaW5kZXggNWU2ODc4MS4uNDZmMDA2OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcm0yMDBfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIlJNMjAwIiwKKwkubmFtZSA9ICJSTTIwMCIsCiAJLmFjayA9IGRpc2FibGVfcm0yMDBfaXJxLAogCS5tYXNrID0gZGlzYWJsZV9ybTIwMF9pcnEsCiAJLm1hc2tfYWNrID0gZGlzYWJsZV9ybTIwMF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3NldHVwLmMgYi9hcmNoL21pcHMvc25pL3NldHVwLmMKaW5kZXggYTQ5MjcyYy4uZDE2YjQ2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvc2V0dXAuYwpAQCAtNjAsNyArNjAsNyBAQAogCWNoYXIgKmNkZXY7CiAJY2hhciAqYmF1ZDsKIAlpbnQgcG9ydDsKLQlzdGF0aWMgY2hhciBvcHRpb25zWzhdOworCXN0YXRpYyBjaGFyIG9wdGlvbnNbOF0gX19pbml0ZGF0YTsKIAogCWNkZXYgPSBwcm9tX2dldGVudigiY29uc29sZV9kZXYiKTsKIAlpZiAoc3RybmNtcChjZGV2LCAidHR5IiwgMykgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCmluZGV4IGQ2NjgwMmUuLmUyNzgwOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKQEAgLTE2MCw3ICsxNjAsNiBAQAogCWludCBhcmdjOwogCWludCAqYXJndjMyOwogCWludCBpOwkJCS8qIEFsd2F5cyBpZ25vcmUgdGhlICItYyIgYXQgYXJndlswXSAqLwotCXN0YXRpYyBjaGFyIGJ1aWx0aW5bQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCWlmIChmd19hcmcwID49IENLU0VHMCB8fCBmd19hcmcxIDwgQ0tTRUcwKSB7CiAJCS8qCkBAIC0xNzQsMjAgKzE3Myw2IEBACiAJCWFyZ3YzMiA9IChpbnQgKilmd19hcmcxOwogCX0KIAotCS8qIGlnbm9yZSBhbGwgYnVpbHQtaW4gYXJncyBpZiBhbnkgZi93IGFyZ3MgZ2l2ZW4gKi8KLQkvKgotCSAqIEJ1dCBpZiBidWlsdC1pbiBzdHJpbmdzIHdhcyBzdGFydGVkIHdpdGggJysnLCBhcHBlbmQgdGhlbQotCSAqIHRvIGNvbW1hbmQgbGluZSBhcmdzLiAgSWYgYnVpbHQtaW4gd2FzIHN0YXJ0ZWQgd2l0aCAnLScsCi0JICogaWdub3JlIGFsbCBmL3cgYXJncy4KLQkgKi8KLQlidWlsdGluWzBdID0gJ1wwJzsKLQlpZiAoYXJjc19jbWRsaW5lWzBdID09ICcrJykKLQkJc3RyY3B5KGJ1aWx0aW4sIGFyY3NfY21kbGluZSArIDEpOwotCWVsc2UgaWYgKGFyY3NfY21kbGluZVswXSA9PSAnLScpIHsKLQkJc3RyY3B5KGJ1aWx0aW4sIGFyY3NfY21kbGluZSArIDEpOwotCQlhcmdjID0gMDsKLQl9IGVsc2UgaWYgKGFyZ2MgPD0gMSkKLQkJc3RyY3B5KGJ1aWx0aW4sIGFyY3NfY21kbGluZSk7CiAJYXJjc19jbWRsaW5lWzBdID0gJ1wwJzsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKQEAgLTIwMSwxMiArMTg2LDYgQEAKIAkJfSBlbHNlCiAJCQlzdHJjYXQoYXJjc19jbWRsaW5lLCBzdHIpOwogCX0KLQkvKiBhcHBlbmQgc2F2ZWQgYnVpbHRpbiBhcmdzICovCi0JaWYgKGJ1aWx0aW5bMF0pIHsKLQkJaWYgKGFyY3NfY21kbGluZVswXSkKLQkJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7Ci0JCXN0cmNhdChhcmNzX2NtZGxpbmUsIGJ1aWx0aW4pOwotCX0KIH0KIAogc3RhdGljIGludCB0eHg5X2ljX2Rpc2FibGUgX19pbml0ZGF0YTsKQEAgLTMxNSw3ICsyOTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJlcHJvY2Vzc19jbWRsaW5lKHZvaWQpCiB7Ci0Jc3RhdGljIGNoYXIgY21kbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOworCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdIF9faW5pdGRhdGE7CiAJY2hhciAqczsKIAogCXN0cmNweShjbWRsaW5lLCBhcmNzX2NtZGxpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jCmluZGV4IDEzODZlNmYuLjIzOTE2MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2luaXQuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbml0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGluaXQuYywgQ29tbW9uIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBORUMgVlI0MTAwIHNlcmllcy4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggIFlvaWNoaSBZdWFzYSA8eXVhc2FAbGludXgtbWlwcy5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDkgIFlvaWNoaSBZdWFzYSA8eXVhc2FAbGludXgtbWlwcy5vcmc+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY2LDkgKzY2LDkgQEAKIAlhcmd2ID0gKGNoYXIgKiopZndfYXJnMTsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLQkJc3RyY2F0KGFyY3NfY21kbGluZSwgYXJndltpXSk7CisJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCBhcmd2W2ldLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJCWlmIChpIDwgKGFyZ2MgLSAxKSkKLQkJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7CisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvTWFrZWZpbGUgYi9hcmNoL21uMTAzMDAvTWFrZWZpbGUKaW5kZXggZGQwYzhmZi4uYWM1YzZiZCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL01ha2VmaWxlCisrKyBiL2FyY2gvbW4xMDMwMC9NYWtlZmlsZQpAQCAtMTksNyArMTksNyBAQAogS0JVSUxEX0NQUEZMQUdTICs9IC1ub3N0ZGluYyAtSSQoQ0NESVIpL2luY2x1ZGUKIAogTERGTEFHUwkJOj0KLU9CSkNPUFlGTEFHUwk6PSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVMKK09CSkNPUFlGTEFHUwk6PSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLkdDQy1jb21tYW5kLWxpbmUgLVIgLm5vdGUuZ251LmJ1aWxkLWlkIC1TCiAjTERGTEFHU192bWxpbnV4IDo9IC1NYXAgbGlua21hcC50eHQKIENIRUNLRkxBR1MJKz0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2NvbmZpZ3MvYXNiMjMwM19kZWZjb25maWcgYi9hcmNoL21uMTAzMDAvY29uZmlncy9hc2IyMzAzX2RlZmNvbmZpZwppbmRleCAzYWNjZTIzLi40NDE5MjBkIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvY29uZmlncy9hc2IyMzAzX2RlZmNvbmZpZworKysgYi9hcmNoL21uMTAzMDAvY29uZmlncy9hc2IyMzAzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAxMToxMzoyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCisjIFR1ZSBEZWMgMjIgMTk6MjY6MjUgMjAwOQogIwogQ09ORklHX01OMTAzMDA9eQogQ09ORklHX0FNMzM9eQpAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogQ09ORklHX0haPTEwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MywxMSArNDQsMTAgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKICMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC02Miw3ICs2Miw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC03NSwxNCArNzQsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtOTAsNiArOTcsMzUgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNDUsOSArMTgxLDggQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0xCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKQEAgLTIwMiw2ICsyMzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTIxNiw2ICsyNTIsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0MSw3ICszNzgsNiBAQAogIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTM2MiwxNCArMzk4LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTQzMCwxMSArNDYzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDUxLDIyICs0ODgsNyBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTQ5MCwxMSArNTEyLDE3IEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTUzOSw2ICs1NjcsNyBAQAogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CkBAIC01NjEsMTMgKzU5MCwxMyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogCkBAIC01NzcsNyArNjA2LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCAwYjYxMGY0Li5mNDlhYzQ5IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0xNjUsNyArMTY1LDcgQEAKIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB4KQogewogCWludCBiaXQ7Ci0JYXNtKCJic2NoICUyLCUwIiA6ICI9ciIoYml0KSA6ICIwIigwKSwgInIiKHggJiAteCkpOworCWFzbSgiYnNjaCAlMiwlMCIgOiAiPXIiKGJpdCkgOiAiMCIoMCksICJyIih4ICYgLXgpIDogImNjIik7CiAJcmV0dXJuIGJpdDsKIH0KIApAQCAtMTc3LDcgKzE3Nyw3IEBACiBpbnQgX19pbG9nMl91MzIodTMyIG4pCiB7CiAJaW50IGJpdDsKLQlhc20oImJzY2ggJTIsJTAiIDogIj1yIihiaXQpIDogIjAiKDApLCAiciIobikpOworCWFzbSgiYnNjaCAlMiwlMCIgOiAiPXIiKGJpdCkgOiAiMCIoMCksICJyIihuKSA6ICJjYyIpOwogCXJldHVybiBiaXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9kaXY2NC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RpdjY0LmgKaW5kZXggM2E4MzI5Yi4uMzRkY2I4ZSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RpdjY0LmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RpdjY0LmgKQEAgLTcyLDYgKzcyLDcgQEAKIAkJCQkJICogTURSID0gTURSOnZhbCVkaXYgKi8KIAkgICAgOiAiPXIiKHJlc3VsdCkKIAkgICAgOiAiMCIodmFsKSwgImlyIihtdWx0KSwgInIiKGRpdikKKwkgICAgOiAiY2MiCiAJICAgICk7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtOTIsNiArOTMsNyBAQAogCQkJCQkgKiBNRFIgPSBNRFI6dmFsJWRpdiAqLwogCSAgICA6ICI9ciIocmVzdWx0KQogCSAgICA6ICIwIih2YWwpLCAiaXIiKG11bHQpLCAiciIoZGl2KQorCSAgICA6ICJjYyIKIAkgICAgKTsKIAogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODIxNGZiNy4uMzYzNmMwNSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTQzLDYgKzE0Myw3IEBACiAJCSIJbW92CSUwLGVwc3cJCVxuIgkJCVwKIAkJOiAiPSZkIih0bXApCQkJCQkJXAogCQk6ICJpIih+RVBTV19JTSksICJyIihfX21uMTAzMDBfaXJxX2VuYWJsZWRfZXBzdykJXAorCQk6ICJjYyIJCQkJCQkJXAogCQkpOwkJCQkJCQlcCiB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGUwMjM5ODYuLjFhN2UyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0yMiw3ICsyMiw3IEBACiAJCSAiCW1vdiAlMCwlMQkJXG4iCQlcCiAJCSA6ICI9ZCIodykJCQkJCVwKIAkJIDogIm0iKE1NVUNUUiksICJpIihNTVVDVFJfSUlWfE1NVUNUUl9ESVYpCVwKLQkJIDogIm1lbW9yeSIJCQkJCVwKKwkJIDogImNjIiwgIm1lbW9yeSIJCQkJXAogCQkgKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCAxNjdlMTBmLi4xOTdhN2FmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJIgkucHJldmlvdXNcbiIJCQkJXAogCQkJOiAiPWEiKF9fZnJvbSksICI9YSIoX190byksICI9ciIoc2l6ZSksICI9JnIiKHcpXAogCQkJOiAiMCIoX19mcm9tKSwgIjEiKF9fdG8pLCAiMiIoc2l6ZSkJCVwKLQkJCTogIm1lbW9yeSIpOwkJCQkJXAorCQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCVwKIAl9CQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkJCSIJLnByZXZpb3VzXG4iCQkJCVwKIAkJCTogIj1hIihfX2Zyb20pLCAiPWEiKF9fdG8pLCAiPXIiKHNpemUpLCAiPSZyIih3KVwKIAkJCTogIjAiKF9fZnJvbSksICIxIihfX3RvKSwgIjIiKHNpemUpCQlcCi0JCQk6ICJtZW1vcnkiKTsJCQkJCVwKKwkJCTogImNjIiwgIm1lbW9yeSIpOwkJCQlcCiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDJhOTgzOTMuLmMwNWFjYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM0OCwxMCArMzQ4LDExIEBACiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzM1CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzM2CiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzNworI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkzMzgKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscyAzMzgKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzM5CiAKIC8qCiAgKiBzcGVjaWZ5IHRoZSBkZXByZWNhdGVkIHN5c2NhbGxzIHdlIHdhbnQgdG8gc3VwcG9ydCBvbiB0aGlzIGFyY2gKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUwppbmRleCBjOWVlNmMwLi44OGUzZTFjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9lbnRyeS5TCkBAIC03MjQsNiArNzI0LDcgQEAKIAkubG9uZyBzeXNfcHdyaXRldgkJLyogMzM1ICovCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCiAJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgorCS5sb25nIHN5c19yZWN2bW1zZwogCiAKIG5yX3N5c2NhbGxzPSguLXN5c19jYWxsX3RhYmxlKS80CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL21uMTAzMDAtc2VyaWFsLmMKaW5kZXggMjI5YjcxMC4uZWYzNGQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9tbjEwMzAwLXNlcmlhbC5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvbW4xMDMwMC1zZXJpYWwuYwpAQCAtMzgwLDcgKzM4MCw4IEBACiAJdTMyIGVwc3c7CiAJYXNtIHZvbGF0aWxlKCIJYmNscgklMSwoJTIpCQlcbiIKIAkJICAgICAiCW1vdgllcHN3LCUwCQlcbiIKLQkJICAgICA6ICI9ZCIoZXBzdykgOiAiZCIobWFzayksICJhIihwdHIpKTsKKwkJICAgICA6ICI9ZCIoZXBzdykgOiAiZCIobWFzayksICJhIihwdHIpCisJCSAgICAgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuICEoZXBzdyAmIEVQU1dfRkxBR19aKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYTIxZjQzYi4uNzE3ZGIxNCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3NpZ25hbC5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAogCS8qIHRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWlmICghb25fc2lnX3N0YWNrKHNwKSkKKwkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKIAkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbGliL2NoZWNrc3VtLmMgYi9hcmNoL21uMTAzMDAvbGliL2NoZWNrc3VtLmMKaW5kZXggMjc0ZjI5ZS4uYjY1ODBmNSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvbW4xMDMwMC9saWIvY2hlY2tzdW0uYwpAQCAtMjIsNiArMjIsNyBAQAogCSAgICAiCWFkZGMJMHhmZmZmLCUwCVxuIgogCSAgICA6ICI9ciIgKHN1bSkKIAkgICAgOiAiciIgKHN1bSA8PCAxNiksICIwIiAoc3VtICYgMHhmZmZmMDAwMCkKKwkgICAgOiAiY2MiCiAJICAgICk7CiAJcmV0dXJuIHN1bSA+PiAxNjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9saWIvZGVsYXkuYyBiL2FyY2gvbW4xMDMwMC9saWIvZGVsYXkuYwppbmRleCBjY2U2NmJjLi5mZGY2ZjcxIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9tbjEwMzAwL2xpYi9kZWxheS5jCkBAIC0yOCw3ICsyOCw4IEBACiAJCSIyOglhZGQJLTEsJTAJXG4iCiAJCSIJYm5lCTJiCVxuIgogCQk6ICI9JmQiIChkMCkKLQkJOiAiMCIgKGxvb3BzKSk7CisJCTogIjAiIChsb29wcykKKwkJOiAiY2MiKTsKIH0KIEVYUE9SVF9TWU1CT0woX19kZWxheSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9saWIvdXNlcmNvcHkuYyBiL2FyY2gvbW4xMDMwMC9saWIvdXNlcmNvcHkuYwppbmRleCBhNzViMjAzLi43ODI2ZTZjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvbGliL3VzZXJjb3B5LmMKKysrIGIvYXJjaC9tbjEwMzAwL2xpYi91c2VyY29weS5jCkBAIC02Miw3ICs2Miw3IEBACiAJCSIJLnByZXZpb3VzIgkJCQlcCiAJCToiPSZyIihyZXMpLCAiPXIiKGNvdW50KSwgIj0mciIodykJCVwKIAkJOiJpIigtRUZBVUxUKSwgIjEiKGNvdW50KSwgImEiKHNyYyksICJhIihkc3QpCVwKLQkJOiJtZW1vcnkiKTsJCQkJCVwKKwkJOiAibWVtb3J5IiwgImNjIik7CQkJCQlcCiB9IHdoaWxlICgwKQogCiBsb25nCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJIi5wcmV2aW91c1xuIgkJCVwKIAkJOiAiK3IiKHNpemUpLCAiPSZyIih3KQkJXAogCQk6ICJhIihhZGRyKSwgImQiKDApCQlcCi0JCTogIm1lbW9yeSIpOwkJCVwKKwkJOiAibWVtb3J5IiwgImNjIik7CQlcCiB9IHdoaWxlICgwKQogCiB1bnNpZ25lZCBsb25nCkBAIC0xNjEsNiArMTYxLDYgQEAKIAkJIi5wcmV2aW91c1xuIgogCQk6Ij1kIihyZXMpLCAiPSZyIih3KQogCQk6IjAiKDApLCAiYSIocyksICJyIihuKQotCQk6Im1lbW9yeSIpOworCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL21tL2RtYS1hbGxvYy5jIGIvYXJjaC9tbjEwMzAwL21tL2RtYS1hbGxvYy5jCmluZGV4IGYzNjQ5ZDguLmVlODJkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9kbWEtYWxsb2MuYworKysgYi9hcmNoL21uMTAzMDAvbW0vZG1hLWFsbG9jLmMKQEAgLTE2LDEyICsxNiwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfc3JhbV9hbGxvY2F0ZWQgPSAweGJjMDAwMDAwOworCiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBpbnQgZ2ZwKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl2b2lkICpyZXQ7CiAKKwlwcmludGsoImRtYV9hbGxvY19jb2hlcmVudCglcywlenUsLCV4KVxuIiwgZGV2X25hbWUoZGV2KSwgc2l6ZSwgZ2ZwKTsKKworCWlmICgweGJlMDAwMDAwIC0gcGNpX3NyYW1fYWxsb2NhdGVkID49IHNpemUpIHsKKwkJc2l6ZSA9IChzaXplICsgMjU1KSAmIH4yNTU7CisJCWFkZHIgPSBwY2lfc3JhbV9hbGxvY2F0ZWQ7CisJCXBjaV9zcmFtX2FsbG9jYXRlZCArPSBzaXplOworCQlyZXQgPSAodm9pZCAqKSBhZGRyOworCQlnb3RvIGRvbmU7CisJfQorCiAJLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCiAJZ2ZwICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7CiAKQEAgLTQxLDcgKzUzLDkgQEAKIAkvKiB3cml0ZSBiYWNrIGFuZCBldmljdCBhbGwgY2FjaGUgbGluZXMgY292ZXJpbmcgdGhpcyByZWdpb24gKi8KIAltbjEwMzAwX2RjYWNoZV9mbHVzaF9pbnZfcmFuZ2UyKHZpcnRfdG9fcGh5cygodm9pZCAqKSBhZGRyKSwgUEFHRV9TSVpFKTsKIAorZG9uZToKIAkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fYnVzKCh2b2lkICopIGFkZHIpOworCXByaW50aygiZG1hX2FsbG9jX2NvaGVyZW50KCkgPSAlcCBbJXhdXG4iLCByZXQsICpkbWFfaGFuZGxlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfY29oZXJlbnQpOwpAQCAtNTEsNiArNjUsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB2YWRkciAmIH4weDIwMDAwMDAwOwogCisJaWYgKGFkZHIgPj0gMHg5YzAwMDAwMCkKKwkJcmV0dXJuOworCiAJZnJlZV9wYWdlcyhhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbW0vaW5pdC5jIGIvYXJjaC9tbjEwMzAwL21tL2luaXQuYwppbmRleCBlYzE0MjA1Li5kZDI3YTlhIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvbW0vaW5pdC5jCisrKyBiL2FyY2gvbW4xMDMwMC9tbS9pbml0LmMKQEAgLTExOCw4ICsxMTgsNyBAQAogCSAgICAgICByZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLAogCSAgICAgICBkYXRhc2l6ZSA+PiAxMCwKIAkgICAgICAgaW5pdHNpemUgPj4gMTAsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKSAodG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApKQotCSAgICAgICApOworCSAgICAgICB0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQgLSAxMCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL21tL21pc2FsaWdubWVudC5jIGIvYXJjaC9tbjEwMzAwL21tL21pc2FsaWdubWVudC5jCmluZGV4IDMwMDE2MjUuLjZkZmZiZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9taXNhbGlnbm1lbnQuYworKysgYi9hcmNoL21uMTAzMDAvbW0vbWlzYWxpZ25tZW50LmMKQEAgLTYzMywxMyArNjMzLDEzIEBACiAJCQlnb3RvIGRpc3BsYWNlX29yX2luYzsKIAkJY2FzZSBTRDI0OgogCQkJdG1wID0gZGlzcCA8PCA4OwotCQkJYXNtKCJhc3IgOCwlMCIgOiAiPXIiKHRtcCkgOiAiMCIodG1wKSk7CisJCQlhc20oImFzciA4LCUwIiA6ICI9ciIodG1wKSA6ICIwIih0bXApIDogImNjIik7CiAJCQlkaXNwID0gKGxvbmcpIHRtcDsKIAkJCWdvdG8gZGlzcGxhY2Vfb3JfaW5jOwogCQljYXNlIFNJTU00XzI6CiAJCQl0bXAgPSBvcGNvZGUgPj4gNCAmIDB4MGY7CiAJCQl0bXAgPDw9IDI4OwotCQkJYXNtKCJhc3IgMjgsJTAiIDogIj1yIih0bXApIDogIjAiKHRtcCkpOworCQkJYXNtKCJhc3IgMjgsJTAiIDogIj1yIih0bXApIDogIjAiKHRtcCkgOiAiY2MiKTsKIAkJCWRpc3AgPSAobG9uZykgdG1wOwogCQkJZ290byBkaXNwbGFjZV9vcl9pbmM7CiAJCWNhc2UgSU1NODoKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L3NlcmlhbC5oIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvc2VyaWFsLmgKaW5kZXggM2JmYzkwOTMuLjgwODZjYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L3NlcmlhbC5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L3NlcmlhbC5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9BU01fVU5JVF9TRVJJQUxfSAogI2RlZmluZSBfQVNNX1VOSVRfU0VSSUFMX0gKIAotI2luY2x1ZGUgPGFzbS9jcHUvY3B1LXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vY3B1LXJlZ3MuaD4KICNpbmNsdWRlIDxwcm9jL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvdGltZXguaCBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L3RpbWV4LmgKaW5kZXggYTcxYzQ5YS4uZDFjNzJkNSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvdGltZXguaAorKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC90aW1leC5oCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLSNpbmNsdWRlIDxhc20vY3B1L3RpbWVyLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vdGltZXItcmVncy5oPgogI2luY2x1ZGUgPHVuaXQvY2xvY2suaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvbGVkcy5jIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9sZWRzLmMKaW5kZXggZDM0NWZmOS4uNmY4ZGU5OSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9sZWRzLmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9sZWRzLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9jcHUvaW50Y3RsLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vY3B1L3J0Yy1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2ludGN0bC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy1yZWdzLmg+CiAjaW5jbHVkZSA8dW5pdC9sZWRzLmg+CiAKIHN0YXRpYyBjb25zdCB1OCBhc2IyMzA1X2xlZF9oZXhfdGJsWzE2XSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYwppbmRleCBkMTAwY2E3Li43OGNkMTM0IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCkBAIC0yMTgsNDUgKzIxOCw2IEBACiAJcGNpYmlvc19hbGxvY2F0ZV9yZXNvdXJjZXMoMSk7CiB9CiAKLWludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCi17Ci0JdTE2IGNtZCwgb2xkX2NtZDsKLQlpbnQgaWR4OwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwotCW9sZF9jbWQgPSBjbWQ7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IDY7IGlkeCsrKSB7Ci0JCS8qIE9ubHkgc2V0IHVwIHRoZSByZXF1ZXN0ZWQgc3R1ZmYgKi8KLQkJaWYgKCEobWFzayAmICgxIDw8IGlkeCkpKQotCQkJY29udGludWU7Ci0KLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0KLQkJaWYgKCFyLT5zdGFydCAmJiByLT5lbmQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJQQ0k6IERldmljZSAlcyBub3QgYXZhaWxhYmxlIGJlY2F1c2Ugb2YiCi0JCQkgICAgICAgIiByZXNvdXJjZSBjb2xsaXNpb25zXG4iLAotCQkJICAgICAgIHBjaV9uYW1lKGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX0lPOwotCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0JfQotCi0JaWYgKGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpCi0JCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0KLQlpZiAoY21kICE9IG9sZF9jbWQpCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiAgSWYgd2Ugc2V0IHVwIGEgZGV2aWNlIGZvciBidXMgbWFzdGVyaW5nLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBsYXRlbmN5CiAgKiAgdGltZXIgYXMgY2VydGFpbiBjcmFwcHkgQklPU2VzIGZvcmdldCB0byBzZXQgaXQgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmggYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmgKaW5kZXggOTc2M2QxYy4uYzNmYTI5NCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuaApAQCAtMzQsNyArMzQsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX21heF9sYXRlbmN5OwogCiBleHRlcm4gdm9pZCBwY2liaW9zX3Jlc291cmNlX3N1cnZleSh2b2lkKTsKLWV4dGVybiBpbnQgcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKTsKIAogLyogcGNpLmMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKaW5kZXggMDdkYmJjZC4uMmNiN2U3NSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCkBAIC0yNyw2ICsyNywyOSBAQAogc3RydWN0IHBjaV9vcHMgKnBjaV9yb290X29wczsKIAogLyoKKyAqIFRoZSBhY2Nlc3NpYmxlIFBDSSB3aW5kb3cgZG9lcyBub3QgY292ZXIgdGhlIGVudGlyZSBDUFUgYWRkcmVzcyBzcGFjZSwgYnV0CisgKiB0aGVyZSBhcmUgZGV2aWNlcyB3ZSB3YW50IHRvIGFjY2VzcyBvdXRzaWRlIG9mIHRoYXQgd2luZG93LCBzbyB3ZSBuZWVkIHRvCisgKiBpbnNlcnQgc3BlY2lmaWMgUENJIGJ1cyByZXNvdXJjZXMgaW5zdGVhZCBvZiB1c2luZyB0aGUgcGxhdGZvcm0tbGV2ZWwgYnVzCisgKiByZXNvdXJjZXMgZGlyZWN0bHkgZm9yIHRoZSBQQ0kgcm9vdCBidXMuCisgKgorICogVGhlc2UgYXJlIGNvbmZpZ3VyZWQgYW5kIGluc2VydGVkIGJ5IHBjaWJpb3NfaW5pdCgpIGFuZCBhcmUgYXR0YWNoZWQgdG8gdGhlCisgKiByb290IGJ1cyBieSBwY2liaW9zX2ZpeHVwX2J1cygpLgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb3BvcnRfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAiUENJIElPIiwKKwkuc3RhcnQJPSAweGJlMDAwMDAwLAorCS5lbmQJPSAweGJlMDNmZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb21lbV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJQQ0kgbWVtIiwKKwkuc3RhcnQJPSAweGI4MDAwMDAwLAorCS5lbmQJPSAweGJiZmZmZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworLyoKICAqIEZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCiAgKi8KIApAQCAtMjc5LDcgKzMwMiw3IEBACiAJICAgICAoeCA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMIHx8IHggPT0gUENJX1ZFTkRPUl9JRF9DT01QQVEpKSkKIAkJcmV0dXJuIDE7CiAKLQlwcmludGsoS0VSTl9FUlJPUiAiUENJOiBTYW5pdHkgY2hlY2sgZmFpbGVkXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIlBDSTogU2FuaXR5IGNoZWNrIGZhaWxlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5Nyw2ICszMjAsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIGNvbmZpZ3VyYXRpb24gYW1wY2lcbiIpOwogCQlyZXF1ZXN0X21lbV9yZWdpb24oMHhCRTA0MDAwMCwgMjU2LCAiQU1QQ0kgYnJpZGdlIik7CiAJCXJlcXVlc3RfbWVtX3JlZ2lvbigweEJGRkZGRkY0LCAxMiwgIlBDSSBhbXBjaSIpOworCQlyZXF1ZXN0X21lbV9yZWdpb24oMHhCQzAwMDAwMCwgMzIgKiAxMDI0ICogMTAyNCwgIlBDSSBTUkFNIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzU4LDYgKzM4MiwxMSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKKwlpZiAoYnVzLT5udW1iZXIgPT0gMCkgeworCQlidXMtPnJlc291cmNlWzBdID0gJnBjaV9pb3BvcnRfcmVzb3VyY2U7CisJCWJ1cy0+cmVzb3VyY2VbMV0gPSAmcGNpX2lvbWVtX3Jlc291cmNlOworCX0KKwogCWlmIChidXMtPnNlbGYpIHsKIAkJcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKGJ1cyk7CiAJCXBjaWJpb3NfZml4dXBfZGV2aWNlX3Jlc291cmNlcyhidXMtPnNlbGYpOwpAQCAtMzgwLDYgKzQwOSwxMSBAQAogCWlvbWVtX3Jlc291cmNlLnN0YXJ0CT0gMHhBMDAwMDAwMDsKIAlpb21lbV9yZXNvdXJjZS5lbmQJPSAweERGRkZGRkZGOwogCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZwY2lfaW9tZW1fcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIlVuYWJsZSB0byBpbnNlcnQgUENJIElPTUVNIHJlc291cmNlXG4iKTsKKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZwY2lfaW9wb3J0X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJVbmFibGUgdG8gaW5zZXJ0IFBDSSBJT1BPUlQgcmVzb3VyY2VcbiIpOworCiAJaWYgKCFwY2lfcHJvYmUpCiAJCXJldHVybiAwOwogCkBAIC0zOTEsMzIgKzQyNSwxMSBAQAogCXByaW50ayhLRVJOX0lORk8gIlBDSTogUHJvYmluZyBQQ0kgaGFyZHdhcmUgW21lbXBhZ2UgJTA4eF1cbiIsCiAJICAgICAgIE1FTV9QQUdJTkdfUkVHKTsKIAotCXsKLSNpZiAwCi0JCXN0YXRpYyBzdHJ1Y3QgcGNpX2J1cyBhbTMzX3Jvb3RfYnVzID0gewotCQkJLmNoaWxkcmVuICA9IExJU1RfSEVBRF9JTklUKGFtMzNfcm9vdF9idXMuY2hpbGRyZW4pLAotCQkJLmRldmljZXMgICA9IExJU1RfSEVBRF9JTklUKGFtMzNfcm9vdF9idXMuZGV2aWNlcyksCi0JCQkubnVtYmVyICAgID0gMCwKLQkJCS5zZWNvbmRhcnkgPSAwLAotCQkJLnJlc291cmNlID0geyAmaW9wb3J0X3Jlc291cmNlLCAmaW9tZW1fcmVzb3VyY2UgfSwKLQkJfTsKLQotCQlhbTMzX3Jvb3RfYnVzLm9wcyA9IHBjaV9yb290X29wczsKLQkJbGlzdF9hZGRfdGFpbCgmYW0zM19yb290X2J1cy5ub2RlLCAmcGNpX3Jvb3RfYnVzZXMpOwotCi0JCWFtMzNfcm9vdF9idXMuc3Vib3JkaW5hdGUgPSBwY2lfZG9fc2Nhbl9idXMoMCk7Ci0KLQkJcGNpX3Jvb3RfYnVzID0gJmFtMzNfcm9vdF9idXM7Ci0jZWxzZQotCQlwY2lfcm9vdF9idXMgPSBwY2lfc2Nhbl9idXMoMCwgJnBjaV9kaXJlY3RfYW1wY2ksIE5VTEwpOwotI2VuZGlmCi0JfQorCXBjaV9yb290X2J1cyA9IHBjaV9zY2FuX2J1cygwLCAmcGNpX2RpcmVjdF9hbXBjaSwgTlVMTCk7CiAKIAlwY2liaW9zX2lycV9pbml0KCk7CiAJcGNpYmlvc19maXh1cF9pcnFzKCk7Ci0jaWYgMAogCXBjaWJpb3NfcmVzb3VyY2Vfc3VydmV5KCk7Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQwLDcgKzQ1Myw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spOworCWVyciA9IHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzayk7CiAJaWYgKGVyciA9PSAwKQogCQlwY2liaW9zX2VuYWJsZV9pcnEoZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtNDU1LDYgKzQ2OCw3IEBACiAKIAlidXMtPm51bWJlciA9IDA7CiAKKwlvLT5yZWFkIChidXMsIFBDSV9ERVZGTigyLCAwKSwgUENJX1ZFTkRPUl9JRCwJCTQsICZ4KTsKIAlvLT5yZWFkIChidXMsIFBDSV9ERVZGTigyLCAwKSwgUENJX0NPTU1BTkQsCQkyLCAmeCk7CiAJeCB8PSBQQ0lfQ09NTUFORF9NQVNURVIgfAogCQlQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3VuaXQtaW5pdC5jIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS91bml0LWluaXQuYwppbmRleCAxYzQ1MmNjLi5hNzZjOGUwIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3VuaXQtaW5pdC5jCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvdW5pdC1pbml0LmMKQEAgLTE1LDkgKzE1LDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdS9pbnRjdGwtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9jcHUvcnRjLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vY3B1L3NlcmlhbC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2ludGN0bC1yZWdzLmg+CisjaW5jbHVkZSA8YXNtL3NlcmlhbC1yZWdzLmg+CiAjaW5jbHVkZSA8dW5pdC9zZXJpYWwuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggYmIyNDY1Yi4uODI2YTMwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTIwLDcgKzIwLDcgQEAKIGFsbDogJChvYmopL3pJbWFnZQogCiBCT09UQ0ZMQUdTICAgIDo9IC1XYWxsIC1XdW5kZWYgLVdzdHJpY3QtcHJvdG90eXBlcyAtV25vLXRyaWdyYXBocyBcCi0JCSAtZm5vLXN0cmljdC1hbGlhc2luZyAtT3MgLW1zb2Z0LWZsb2F0IC1waXBlIFwKKwkJIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PcyAtbXNvZnQtZmxvYXQgLXBpcGUgLURfX0tFUk5FTF9fXAogCQkgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1idWlsdGluIC1mUElDIC1ub3N0ZGluYyBcCiAJCSAtaXN5c3RlbSAkKHNoZWxsICQoQ1JPU1MzMkNDKSAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGUpCiBCT09UQUZMQUdTCTo9IC1EX19BU1NFTUJMWV9fICQoQk9PVENGTEFHUykgLXRyYWRpdGlvbmFsIC1ub3N0ZGluYwpAQCAtMzQsNiArMzQsOCBAQAogZW5kaWYKIAogQk9PVENGTEFHUwkrPSAtSSQob2JqKSAtSSQoc3JjdHJlZSkvJChvYmopCitCT09UQ0ZMQUdTCSs9IC1pbmNsdWRlIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCAtSWFyY2gvcG93ZXJwYy9pbmNsdWRlCitCT09UQ0ZMQUdTCSs9IC1JaW5jbHVkZQogCiBEVFNfRkxBR1MJPz0gLXAgMTAyNAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCmluZGV4IDUxZWI2ZWQuLjhmMzQ1ZGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwpAQCAtMTA4LDEyICsxMDgsMTkgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCU1RMDogbXEgeworCQljb21wYXRpYmxlID0gImlibSxtcS00NDBzcGUiOworCQlkY3ItcmVnID0gPDB4MDQwIDB4MDIwPjsKKwl9OworCiAJcGxiIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ0MHNwZSIsICJpYm0scGxiLTQ0MGdwIiwgImlibSxwbGI0IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQkvKiAgICAgICAgYWRkci1jaGlsZCAgICAgYWRkci1wYXJlbnQgICAgc2l6ZSAqLwotCQlyYW5nZXMgPSA8MHg0IDB4ZTAwMDAwMDAgMHg0IDB4ZTAwMDAwMDAgMHgyMDAwMDAwMAorCQlyYW5nZXMgPSA8MHg0IDB4MDAxMDAwMDAgMHg0IDB4MDAxMDAwMDAgMHgwMDAwMTAwMAorCQkJICAweDQgMHgwMDIwMDAwMCAweDQgMHgwMDIwMDAwMCAweDAwMDAwNDAwCisJCQkgIDB4NCAweGUwMDAwMDAwIDB4NCAweGUwMDAwMDAwIDB4MjAwMDAwMDAKIAkJCSAgMHhjIDB4MDAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgyMDAwMDAwMAogCQkJICAweGQgMHgwMDAwMDAwMCAweGQgMHgwMDAwMDAwMCAweDgwMDAwMDAwCiAJCQkgIDB4ZCAweDgwMDAwMDAwIDB4ZCAweDgwMDAwMDAwIDB4ODAwMDAwMDAKQEAgLTQwMCw2ICs0MDcsNDkgQEAKIAkJCQkweDAgMHgwIDB4MCAweDMgJlVJQzMgMHhhIDB4NCAvKiBzd2l6emxlZCBpbnQgQyAqLwogCQkJCTB4MCAweDAgMHgwIDB4NCAmVUlDMyAweGIgMHg0IC8qIHN3aXp6bGVkIGludCBEICovPjsKIAkJfTsKKworCQlJMk86IGkyb0A0MDAxMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJpYm0saTJvLTQ0MHNwZSI7CisJCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMTAwMDAwIDB4MTAwPjsKKwkJCWRjci1yZWcgPSA8MHgwNjAgMHgwMjA+OworCQl9OworCisJCURNQTA6IGRtYTBANDAwMTAwMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLGRtYS00NDBzcGUiOworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAxMDAxMDAgMHgxMDA+OworCQkJZGNyLXJlZyA9IDwweDA2MCAweDAyMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZETUEwPjsKKwkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkwICZVSUMwIDB4MTQgNAorCQkJCTEgJlVJQzEgMHgxNiA0PjsKKwkJfTsKKworCQlETUExOiBkbWExQDQwMDEwMDIwMCB7CisJCQljb21wYXRpYmxlID0gImlibSxkbWEtNDQwc3BlIjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlyZWcgPSA8MHgwMDAwMDAwNCAweDAwMTAwMjAwIDB4MTAwPjsKKwkJCWRjci1yZWcgPSA8MHgwNjAgMHgwMjA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRE1BMT47CisJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisJCQkJMCAmVUlDMCAweDE2IDQKKwkJCQkxICZVSUMxIDB4MTYgND47CisJCX07CisKKwkJeG9yLWFjY2VsQDQwMDIwMDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MseG9yLWFjY2VsZXJhdG9yIjsKKwkJCXJlZyA9IDwweDAwMDAwMDA0IDB4MDAyMDAwMDAgMHg0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgND47CisJCX07CiAJfTsKIAogCWNob3NlbiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwppbmRleCAzMmUxMGY1Li44YTNhNGYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkwID47CisJCQlmc2wsbWFnaWMtcGFja2V0OwogCiAJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yNDYsNiArMjQ3LDcgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCAmcGh5MSA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKIAogCQkJbWRpb0A1MjAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMzA5LDYgKzMxMSwyMiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCX07CiAKKwkJZ3RtMTogdGltZXJANTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZ3RtIiwgImZzbCxndG0iOworCQkJcmVnID0gPDB4NTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8OTAgOCA3OCA4IDg0IDggNzIgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzMzMzMzMzM+OworCQl9OworCisJCXRpbWVyQDYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LWd0bSIsICJmc2wsZ3RtIjsKKwkJCXJlZyA9IDwweDYwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDkxIDggNzkgOCA4NSA4IDczIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMzMzMzMzMzPjsKKwkJfTsKKwogCQkvKiBJUElDCiAJCSAqIGludGVycnVwdHMgY2VsbCA9IDxpbnRyICMsIHNlbnNlPgogCQkgKiBzZW5zZSB2YWx1ZXMgbWF0Y2ggbGludXggSU9SRVNPVVJDRV9JUlFfKiBkZWZpbmVzOgpAQCAtMzM3LDYgKzM1NSwxNSBAQAogCQkJCSAgICAgIDB4NTkgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1wbWMiLCAiZnNsLG1wYzgzMTMtcG1jIiwKKwkJCQkgICAgICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgOD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWZzbCxtcGM4MzEzLXdha2V1cC10aW1lciA9IDwmZ3RtMT47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCmluZGV4IGZlZWViN2YuLmI1M2QxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCkBAIC02Myw2ICs2MywyNCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAorCQlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCiAJCWkyY0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC03Miw2ICs5MCwxMiBAQAogCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlkZnNycjsKKworCQkJZWVwcm9tOiBhdDI0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gInN0LW1pY3JvLDI0YzI1NiI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQl9OwogCiAJCWkyY0AzMTAwIHsKQEAgLTkxLDYgKzExNSwyNSBAQAogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJfTsKIAorCQkJcGNmMTogaWV4cEAzOCB7CisJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJY29tcGF0aWJsZSA9ICJ0aSxwY2Y4NTc0YSI7CisJCQkJcmVnID0gPDB4Mzg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKKwkJCXBjZjI6IGlleHBAMzkgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAidGkscGNmODU3NGEiOworCQkJCXJlZyA9IDwweDM5PjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQl9OworCisJCQlzcGQ6IGF0MjRANTEgeworCQkJCWNvbXBhdGlibGUgPSAiYXQyNCxzcGQiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisKIAkJCW1jdV9waW86IG1jdUBhIHsKIAkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM0OWVtaXR4IiwKQEAgLTI3NSw2ICszMTgsMjQgQEAKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJpcGljIjsKIAkJfTsKKworCQlncGlvLWxlZHMgeworCQkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworCisJCQlncmVlbiB7CisJCQkJbGFiZWwgPSAiR3JlZW4iOworCQkJCWdwaW9zID0gPCZwY2YxIDAgMT47CisJCQkJbGludXgsZGVmYXVsdC10cmlnZ2VyID0gImhlYXJ0YmVhdCI7CisJCQl9OworCisJCQl5ZWxsb3cgeworCQkJCWxhYmVsID0gIlllbGxvdyI7CisJCQkJZ3Bpb3MgPSA8JnBjZjEgMSAxPjsKKwkJCQkvKiBsaW51eCxkZWZhdWx0LXRyaWdnZXIgPSAiaGVhcnRiZWF0IjsgKi8KKwkJCQlkZWZhdWx0LXN0YXRlID0gIm9uIjsKKwkJCX07CisJCX07CisKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTMzMSw3ICszOTIsMjYgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OWUtbG9jYWxidXMiLAogCQkJICAgICAiZnNsLHBxMnByby1sb2NhbGJ1cyI7CiAJCXJlZyA9IDwweGUwMDA1MDAwIDB4ZDg+OwotCQlyYW5nZXMgPSA8MHgzIDB4MCAweGYwMDAwMDAwIDB4MjEwPjsKKwkJcmFuZ2VzID0gPDB4MCAweDAgMHhmZTAwMDAwMCAweDEwMDAwMDAJLyogZmxhc2ggKi8KKwkJCSAgMHgxIDB4MCAweGY4MDAwMDAwIDB4MjAwMDAJLyogVlNDIDczODUgKi8KKwkJCSAgMHgyIDB4MCAweGY5MDAwMDAwIDB4MjAwMDAwCS8qIGV4cCBzbG90ICovCisJCQkgIDB4MyAweDAgMHhmMDAwMDAwMCAweDIxMD47CS8qIENGIHNsb3QgKi8KKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAgICAgIDB4MCAweDgwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCQl9OworCisJCWZsYXNoQDAsODAwMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4ODAwMDAwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCX07CiAKIAkJcGF0YUAzLDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OWVtaXR4LXBhdGEiLCAiYXRhLWdlbmVyaWMiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3dhcnAuZHRzCmluZGV4IDMxNjA1ZWUuLmU1NzZlZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy93YXJwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvd2FycC5kdHMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAJCQkJZnBnYUAyLDQwMDAgewogCQkJCQljb21wYXRpYmxlID0gInBpa2EsZnBnYS1zZCI7Ci0JCQkJCXJlZyA9IDwweDAwMDAwMDAyIDB4MDAwMDQwMDAgMHgwMDAwMEEwMD47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAyIDB4MDAwMDQwMDAgMHgwMDAwNDAwMD47CiAJCQkJfTsKIAogCQkJCW5vckAwLDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvdWdlY29uLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYwppbmRleCA1MDYwOWVhLi44ZjJhNmIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC91Z2Vjb24uYwpAQCAtODYsNyArODYsNyBAQAogCiAJd2hpbGUgKCF1Z19pc190eGZpZm9fcmVhZHkoKSAmJiBjb3VudC0tKQogCQliYXJyaWVyKCk7Ci0JaWYgKGNvdW50KQorCWlmIChjb3VudCA+PSAwKQogCQl1Z19yYXdfcHV0YyhjaCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwppbmRleCBmYzkwNTkyLi44MjZhNjVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCkBAIC03NTcsNyArNzU3LDcgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUM9bQogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQpAQCAtNzk0LDggKzc5NCw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwppbmRleCBmOTI1YzU1Li43Njk4MmM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwpAQCAtNzE0LDggKzcxNCw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IDI1MjQwMTguLjdiMzgwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKQEAgLTMwNCwxMSArMzA0LDExIEBACiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfU0NIRURfSFJUSUNLPXkKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldApAQCAtOTgwLDcgKzk4MCw3IEBACiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKLUNPTkZJR19BQ0VOSUM9eQorQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15CkBAIC0xMDIzLDggKzEwMjMsOCBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiAKQEAgLTE4NjMsNyArMTg2Myw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz15CitDT05GSUdfQ1JBTUZTPW0KICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwppbmRleCAxOGFmNDYwLi44MTk1ZjE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKQEAgLTEwMDgsOCArMTAwOCw4IEBACiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotQ09ORklHX1RSPXkKLUNPTkZJR19JQk1PTD15CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0CiAjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IGM1NjgzMjkuLmNhOWZmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0yMzAsMTEgKzIzMCwxMSBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQorQ09ORklHX0haXzEwMD15CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAorQ09ORklHX0haPTEwMAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKQEAgLTc5Niw3ICs3OTYsNyBAQAogIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUM9bQogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQpAQCAtODM0LDggKzgzNCw4IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFI9eQotQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKICMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKIApAQCAtMTQ5NCw3ICsxNDk0LDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19DUkFNRlM9bQogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9idWcuaAppbmRleCA2NGUxZmRjLi4yYzE1MjEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC02OCw3ICs2OCw3IEBACiAJCV9FTUlUX0JVR19FTlRSWQkJCQkJXAogCQk6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAkJXAogCQkgICAgImkiICgwKSwgImkiICAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSk7CVwKLQlmb3IoOzspIDsJCQkJCQlcCisJdW5yZWFjaGFibGUoKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEJVR19PTih4KSBkbyB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ncGlvLmgKaW5kZXggZWEwNDYzMi4uMzg3NjJlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0zOCwxMiArMzgsOSBAQAogCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7CiB9CiAKLS8qCi0gKiBOb3QgaW1wbGVtZW50ZWQsIHlldC4KLSAqLwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgaW50IGdwaW8pCiB7Ci0JcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIF9fZ3Bpb190b19pcnEoZ3Bpbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKaW5kZXggMzgzOTgzOS4uYjg3NmU5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwpAQCAtNjQyLDEwICs2NDIsMTQgQEAKICAqLwogc3RhdGljIGludCBlbXVsYXRlX3ZzeCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqYWRkciwgdW5zaWduZWQgaW50IHJlZywKIAkJICAgICAgIHVuc2lnbmVkIGludCBhcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGxlbmd0aCkKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBlbHNpemUpCiB7CiAJY2hhciAqcHRyOworCXVuc2lnbmVkIGxvbmcgKmxwdHI7CiAJaW50IHJldCA9IDA7CisJaW50IHN3ID0gMDsKKwlpbnQgaSwgajsKIAogCWZsdXNoX3ZzeF90b190aHJlYWQoY3VycmVudCk7CiAKQEAgLTY1NCwxOSArNjU4LDM1IEBACiAJZWxzZQogCQlwdHIgPSAoY2hhciAqKSAmY3VycmVudC0+dGhyZWFkLnZyW3JlZyAtIDMyXTsKIAotCWlmIChmbGFncyAmIFNUKQotCQlyZXQgPSBfX2NvcHlfdG9fdXNlcihhZGRyLCBwdHIsIGxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotCQlpZiAoZmxhZ3MgJiBTUExUKXsKLQkJCXJldCA9IF9fY29weV9mcm9tX3VzZXIocHRyLCBhZGRyLCBsZW5ndGgpOwotCQkJcHRyICs9IGxlbmd0aDsKKwlscHRyID0gKHVuc2lnbmVkIGxvbmcgKikgcHRyOworCisJaWYgKGZsYWdzICYgU1cpCisJCXN3ID0gZWxzaXplLTE7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuZ3RoOyBqICs9IGVsc2l6ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZWxzaXplOyArK2kpIHsKKwkJCWlmIChmbGFncyAmIFNUKQorCQkJCXJldCB8PSBfX3B1dF91c2VyKHB0cltpXnN3XSwgYWRkciArIGkpOworCQkJZWxzZQorCQkJCXJldCB8PSBfX2dldF91c2VyKHB0cltpXnN3XSwgYWRkciArIGkpOwogCQl9Ci0JCXJldCB8PSBfX2NvcHlfZnJvbV91c2VyKHB0ciwgYWRkciwgbGVuZ3RoKTsKKwkJcHRyICArPSBlbHNpemU7CisJCWFkZHIgKz0gZWxzaXplOwogCX0KLQlpZiAoZmxhZ3MgJiBVKQotCQlyZWdzLT5ncHJbYXJlZ10gPSByZWdzLT5kYXI7Ci0JaWYgKHJldCkKKworCWlmICghcmV0KSB7CisJCWlmIChmbGFncyAmIFUpCisJCQlyZWdzLT5ncHJbYXJlZ10gPSByZWdzLT5kYXI7CisKKwkJLyogU3BsYXQgbG9hZCBjb3BpZXMgdGhlIHNhbWUgZGF0YSB0byB0b3AgYW5kIGJvdHRvbSA4IGJ5dGVzICovCisJCWlmIChmbGFncyAmIFNQTFQpCisJCQlscHRyWzFdID0gbHB0clswXTsKKwkJLyogRm9yIDggYnl0ZSBsb2FkcywgemVybyB0aGUgdG9wIDggYnl0ZXMgKi8KKwkJZWxzZSBpZiAoIShmbGFncyAmIFNUKSAmJiAoOCA9PSBsZW5ndGgpKQorCQkJbHB0clsxXSA9IDA7CisJfSBlbHNlCiAJCXJldHVybiAtRUZBVUxUOworCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKQEAgLTc2NywxNiArNzg3LDI1IEBACiAKICNpZmRlZiBDT05GSUdfVlNYCiAJaWYgKChpbnN0cnVjdGlvbiAmIDB4ZmMwMDAwM2UpID09IDB4N2MwMDAwMTgpIHsKLQkJLyogQWRkaXRpb25hbCByZWdpc3RlciBhZGRyZXNzaW5nIGJpdCAoNjQgVlNYIHZzIDMyIEZQUi9HUFIgKi8KKwkJdW5zaWduZWQgaW50IGVsc2l6ZTsKKworCQkvKiBBZGRpdGlvbmFsIHJlZ2lzdGVyIGFkZHJlc3NpbmcgYml0ICg2NCBWU1ggdnMgMzIgRlBSL0dQUikgKi8KIAkJcmVnIHw9IChpbnN0cnVjdGlvbiAmIDB4MSkgPDwgNTsKIAkJLyogU2ltcGxlIGlubGluZSBkZWNvZGVyIGluc3RlYWQgb2YgYSB0YWJsZSAqLworCQkvKiBWU1ggaGFzIG9ubHkgOCBhbmQgMTYgYnl0ZSBtZW1vcnkgYWNjZXNzZXMgKi8KKwkJbmIgPSA4OwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDIwMCkKIAkJCW5iID0gMTY7Ci0JCWVsc2UgaWYgKGluc3RydWN0aW9uICYgMHgwODApCi0JCQluYiA9IDg7Ci0JCWVsc2UKLQkJCW5iID0gNDsKKworCQkvKiBWZWN0b3Igc3RvcmVzIGluIGxpdHRsZS1lbmRpYW4gbW9kZSBzd2FwIGluZGl2aWR1YWwKKwkJICAgZWxlbWVudHMsIHNvIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5ICovCisJCWVsc2l6ZSA9IDQ7CisJCWlmIChpbnN0cnVjdGlvbiAmIDB4ODApCisJCQllbHNpemUgPSA4OworCiAJCWZsYWdzID0gMDsKKwkJaWYgKHJlZ3MtPm1zciAmIE1TUl9MRSkKKwkJCWZsYWdzIHw9IFNXOwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDEwMCkKIAkJCWZsYWdzIHw9IFNUOwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiAweDA0MCkKQEAgLTc4Nyw3ICs4MTYsNyBAQAogCQkJbmIgPSA4OwogCQl9CiAJCVBQQ19XQVJOX0FMSUdOTUVOVCh2c3gsIHJlZ3MpOwotCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIpOworCQlyZXR1cm4gZW11bGF0ZV92c3goYWRkciwgcmVnLCBhcmVnLCByZWdzLCBmbGFncywgbmIsIGVsc2l6ZSk7CiAJfQogI2VuZGlmCiAJLyogQSBzaXplIG9mIDAgaW5kaWNhdGVzIGFuIGluc3RydWN0aW9uIHdlIGRvbid0IHN1cHBvcnQsIHdpdGgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggZThkZmRiZC4uY2FkYmVkNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTExMDcsNiArMTEwNywxMiBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQlzdHJ1Y3QgZGV2X2FyY2hkYXRhICpzZCA9ICZkZXYtPmRldi5hcmNoZGF0YTsKIAorCQkvKiBDYXJkYnVzIGNhbiBjYWxsIHVzIHRvIGFkZCBuZXcgZGV2aWNlcyB0byBhIGJ1cywgc28gaWdub3JlCisJCSAqIHRob3NlIHdobyBhcmUgYWxyZWFkeSBmdWxseSBkaXNjb3ZlcmVkCisJCSAqLworCQlpZiAoZGV2LT5pc19hZGRlZCkKKwkJCWNvbnRpbnVlOworCiAJCS8qIFNldHVwIE9GIG5vZGUgcG9pbnRlciBpbiBhcmNoZGF0YSAqLwogCQlzZC0+b2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCkBAIC0xMTQ3LDYgKzExNTMsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19maXh1cF9idXMpOwogCit2b2lkIF9fZGV2aW5pdCBwY2lfZml4dXBfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCS8qIE5vdyBmaXh1cCBkZXZpY2VzIG9uIHRoYXQgYnVzICovCisJcGNpYmlvc19zZXR1cF9idXNfZGV2aWNlcyhidXMpOworfQorCisKIHN0YXRpYyBpbnQgc2tpcF9pc2FfaW9yZXNvdXJjZV9hbGlnbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWlmICgocHBjX3BjaV9mbGFncyAmIFBQQ19QQ0lfQ0FOX1NLSVBfSVNBX0FMSUdOKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwppbmRleCA1NTk4Zjg4Li5lNGJlZWIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwpAQCAtMzkwLDYgKzM5MCwyNiBAQAogewogCXU2NCByYiA9IDAsIHJzID0gMDsKIAorCS8qCisJICogQWNjb3JkaW5nIHRvIEJvb2szIDIuMDEgbXRzcmluIGlzIGltcGxlbWVudGVkIGFzOgorCSAqCisJICogVGhlIFNMQiBlbnRyeSBzcGVjaWZpZWQgYnkgKFJCKTMyOjM1IGlzIGxvYWRlZCBmcm9tIHJlZ2lzdGVyCisJICogUlMsIGFzIGZvbGxvd3MuCisJICoKKwkgKiBTTEJFIEJpdAlTb3VyY2UJCQlTTEIgRmllbGQKKwkgKgorCSAqIDA6MzEJCTB4MDAwMF8wMDAwCQlFU0lELTA6MzEKKwkgKiAzMjozNQkoUkIpMzI6MzUJCUVTSUQtMzI6MzUKKwkgKiAzNgkJMGIxCQkJVgorCSAqIDM3OjYxCTB4MDBfMDAwMHx8IDBiMAkJVlNJRC0wOjI0CisJICogNjI6ODgJKFJTKTM3OjYzCQlWU0lELTI1OjUxCisJICogODk6OTEJKFJTKTMzOjM1CQlLcyBLcCBOCisJICogOTIJCShSUykzNgkJCUwgKChSUykzNiBtdXN0IGJlIDBiMCkKKwkgKiA5MwkJMGIwCQkJQworCSAqLworCisJZHByaW50aygiS1ZNIE1NVTogbXRzcmluKDB4JXgsIDB4JWx4KVxuIiwgc3JudW0sIHZhbHVlKTsKKwogCS8qIEVTSUQgPSBzcm51bSAqLwogCXJiIHw9IChzcm51bSAmIDB4ZikgPDwgMjg7CiAJLyogU2V0IHRoZSB2YWxpZCBiaXQgKi8KQEAgLTQwMCw3ICs0MjAsNyBAQAogCS8qIFZTSUQgPSBWU0lEICovCiAJcnMgfD0gKHZhbHVlICYgMHhmZmZmZmZmKSA8PCAxMjsKIAkvKiBmbGFncyA9IGZsYWdzICovCi0JcnMgfD0gKCh2YWx1ZSA+PiAyNykgJiAweGYpIDw8IDk7CisJcnMgfD0gKCh2YWx1ZSA+PiAyOCkgJiAweDcpIDw8IDk7CiAKIAlrdm1wcGNfbW11X2Jvb2szc182NF9zbGJtdGUodmNwdSwgcnMsIHJiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDUwZjg2N2QuLjNlY2RjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCQllbHNlCiAJCQkJZGVmLT50bGJpZWwgPSAwOwogCi0JCQlEQkcoIiAlZDogc2hpZnQ9JTAyeCwgc2xscD0lMDR4LCBhdnBubT0lMDh4LCAiCisJCQlEQkcoIiAlZDogc2hpZnQ9JTAyeCwgc2xscD0lMDRseCwgYXZwbm09JTA4bHgsICIKIAkJCSAgICAidGxiaWVsPSVkLCBwZW5jPSVkXG4iLAogCQkJICAgIGlkeCwgc2hpZnQsIGRlZi0+c2xscCwgZGVmLT5hdnBubSwgZGVmLT50bGJpZWwsCiAJCQkgICAgZGVmLT5wZW5jKTsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpX192YShsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlKTsKIAkJc2l6ZSA9IGxtYi5tZW1vcnkucmVnaW9uW2ldLnNpemU7CiAKLQkJREJHKCJjcmVhdGluZyBtYXBwaW5nIGZvciByZWdpb246ICVseC4uJWx4IChwcm90OiAleClcbiIsCisJCURCRygiY3JlYXRpbmcgbWFwcGluZyBmb3IgcmVnaW9uOiAlbHguLiVseCAocHJvdDogJWx4KVxuIiwKIAkJICAgIGJhc2UsIHNpemUsIHByb3QpOwogCiAjaWZkZWYgQ09ORklHX1UzX0RBUlQKQEAgLTg3OSw3ICs4NzksNyBAQAogICovCiBpbnQgaGFzaF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgYWNjZXNzLCB1bnNpZ25lZCBsb25nIHRyYXApCiB7Ci0Jdm9pZCAqcGdkaXI7CisJcGdkX3QgKnBnZGlyOwogCXVuc2lnbmVkIGxvbmcgdnNpZDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlwdGVfdCAqcHRlcDsKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAJZWxzZQogI2VuZGlmIC8qIENPTkZJR19QUENfSEFTX0hBU0hfNjRLICovCiAJewotCQlpbnQgc3BwID0gc3VicGFnZV9wcm90ZWN0aW9uKHBnZGlyLCBlYSk7CisJCWludCBzcHAgPSBzdWJwYWdlX3Byb3RlY3Rpb24obW0sIGVhKTsKIAkJaWYgKGFjY2VzcyAmIHNwcCkKIAkJCXJjID0gLTI7CiAJCWVsc2UKQEAgLTExMTUsNyArMTExNSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBoYXNoLCBpbmRleCwgc2hpZnQsIGhpZHgsIHNsb3Q7CiAKLQlEQkdfTE9XKCJmbHVzaF9oYXNoX3BhZ2UodmE9JTAxNngpXG4iLCB2YSk7CisJREJHX0xPVygiZmx1c2hfaGFzaF9wYWdlKHZhPSUwMTZseClcbiIsIHZhKTsKIAlwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkgewogCQloYXNoID0gaHB0X2hhc2godmEsIHNoaWZ0LCBzc2l6ZSk7CiAJCWhpZHggPSBfX3JwdGVfdG9faGlkeChwdGUsIGluZGV4KTsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJCQloYXNoID0gfmhhc2g7CiAJCXNsb3QgPSAoaGFzaCAmIGh0YWJfaGFzaF9tYXNrKSAqIEhQVEVTX1BFUl9HUk9VUDsKIAkJc2xvdCArPSBoaWR4ICYgX1BURUlEWF9HUk9VUF9JWDsKLQkJREJHX0xPVygiIHN1YiAlZDogaGFzaD0leCwgaGlkeD0leFxuIiwgaW5kZXgsIHNsb3QsIGhpZHgpOworCQlEQkdfTE9XKCIgc3ViICVsZDogaGFzaD0lbHgsIGhpZHg9JWx4XG4iLCBpbmRleCwgc2xvdCwgaGlkeCk7CiAJCXBwY19tZC5ocHRlX2ludmFsaWRhdGUoc2xvdCwgdmEsIHBzaXplLCBzc2l6ZSwgbG9jYWwpOwogCX0gcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IGJlNGYzNGMuLjEwNDRhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKIAkJCWlmIChwLT5tbSkKLQkJCQljcHVfbWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHAtPm1tKSk7CisJCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHAtPm1tKSk7CiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggMTc3ZTQwMy4uNTczYjNiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC0zODIsNyArMzgyLDcgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKCFnZXRfcHRlcHRyKCZpbml0X21tLCBhZGRyZXNzLCAma3B0ZSwgJmtwbWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyZXNzLCBrcHRlLCBta19wdGUocGFnZSwgcHJvdCkpOworCV9fc2V0X3B0ZV9hdCgmaW5pdF9tbSwgYWRkcmVzcywga3B0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpLCAwKTsKIAl3bWIoKTsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAlmbHVzaF9oYXNoX3BhZ2VzKDAsIGFkZHJlc3MsIHBtZF92YWwoKmtwbWQpLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCmluZGV4IGQzMDZmMDcuLjQzODA1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBQTUNDUjFfTkVYVF9TVEFURSAgICAgICAweDBDIC8qIE5leHQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgUE1DQ1IxX05FWFRfU1RBVEVfU0hJRlQgMgogI2RlZmluZSBQTUNDUjFfQ1VSUl9TVEFURSAgICAgICAweDAzIC8qIEN1cnJlbnQgc3RhdGUgZm9yIHBvd2VyIG1hbmFnZW1lbnQqLworI2RlZmluZSBJTU1SX1NZU0NSX09GRlNFVCAgICAgICAweDEwMAogI2RlZmluZSBJTU1SX1JDV19PRkZTRVQgICAgICAgICAweDkwMAogI2RlZmluZSBSQ1dfUENJX0hPU1QgICAgICAgICAgICAweDgwMDAwMDAwCiAKQEAgLTc4LDYgKzc5LDIyIEBACiAJdTMyIHNjY3I7CiB9OwogCitzdHJ1Y3QgbXBjODN4eF9zeXNjciB7CisJX19iZTMyIHNncHJsOworCV9fYmUzMiBzZ3ByaDsKKwlfX2JlMzIgc3ByaWRyOworCV9fYmUzMiA6MzI7CisJX19iZTMyIHNwY3I7CisJX19iZTMyIHNpY3JsOworCV9fYmUzMiBzaWNyaDsKK307CisKK3N0cnVjdCBtcGM4M3h4X3NhdmVkIHsKKwl1MzIgc2ljcmw7CisJdTMyIHNpY3JoOworCXUzMiBzY2NyOworfTsKKwogc3RydWN0IHBtY190eXBlIHsKIAlpbnQgaGFzX2RlZXBfc2xlZXA7CiB9OwpAQCAtODcsNiArMTA0LDggQEAKIHN0YXRpYyBpbnQgcG1jX2lycTsKIHN0YXRpYyBzdHJ1Y3QgbXBjODN4eF9wbWMgX19pb21lbSAqcG1jX3JlZ3M7CiBzdGF0aWMgc3RydWN0IG1wYzgzeHhfY2xvY2sgX19pb21lbSAqY2xvY2tfcmVnczsKK3N0YXRpYyBzdHJ1Y3QgbXBjODN4eF9zeXNjciBfX2lvbWVtICpzeXNjcl9yZWdzOworc3RhdGljIHN0cnVjdCBtcGM4M3h4X3NhdmVkIHNhdmVkX3JlZ3M7CiBzdGF0aWMgaW50IGlzX3BjaV9hZ2VudCwgd2FrZV9mcm9tX3BjaTsKIHN0YXRpYyBwaHlzX2FkZHJfdCBpbW1yYmFzZTsKIHN0YXRpYyBpbnQgcGNpX3BtX3N0YXRlOwpAQCAtMTM3LDYgKzE1NiwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9yZXN0b3JlX3JlZ3Modm9pZCkKK3sKKwlvdXRfYmUzMigmc3lzY3JfcmVncy0+c2ljcmwsIHNhdmVkX3JlZ3Muc2ljcmwpOworCW91dF9iZTMyKCZzeXNjcl9yZWdzLT5zaWNyaCwgc2F2ZWRfcmVncy5zaWNyaCk7CisJb3V0X2JlMzIoJmNsb2NrX3JlZ3MtPnNjY3IsIHNhdmVkX3JlZ3Muc2Njcik7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9zYXZlX3JlZ3Modm9pZCkKK3sKKwlzYXZlZF9yZWdzLnNpY3JsID0gaW5fYmUzMigmc3lzY3JfcmVncy0+c2ljcmwpOworCXNhdmVkX3JlZ3Muc2ljcmggPSBpbl9iZTMyKCZzeXNjcl9yZWdzLT5zaWNyaCk7CisJc2F2ZWRfcmVncy5zY2NyID0gaW5fYmUzMigmY2xvY2tfcmVncy0+c2Njcik7Cit9CisKIHN0YXRpYyBpbnQgbXBjODN4eF9zdXNwZW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gLUVBR0FJTjsKQEAgLTE2Niw2ICsxOTksOCBAQAogCSAqLwogCiAJaWYgKGRlZXBfc2xlZXBpbmcpIHsKKwkJbXBjODN4eF9zdXNwZW5kX3NhdmVfcmVncygpOworCiAJCW91dF9iZTMyKCZwbWNfcmVncy0+bWFzaywgUE1DRVJfQUxMKTsKIAogCQlvdXRfYmUzMigmcG1jX3JlZ3MtPmNvbmZpZzEsCkBAIC0xNzksNiArMjE0LDggQEAKIAkJICAgICAgICAgaW5fYmUzMigmcG1jX3JlZ3MtPmNvbmZpZzEpICYgflBNQ0NSMV9QT1dFUl9PRkYpOwogCiAJCW91dF9iZTMyKCZwbWNfcmVncy0+bWFzaywgUE1DRVJfUE1DSSk7CisKKwkJbXBjODN4eF9zdXNwZW5kX3Jlc3RvcmVfcmVncygpOwogCX0gZWxzZSB7CiAJCW91dF9iZTMyKCZwbWNfcmVncy0+bWFzaywgUE1DRVJfUE1DSSk7CiAKQEAgLTE5NCw3ICsyMzEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9maW5pc2godm9pZCkKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3VzcGVuZF9lbmQodm9pZCkKIHsKIAlkZWVwX3NsZWVwaW5nID0gMDsKIH0KQEAgLTI3OCw3ICszMTUsNyBAQAogCS52YWxpZCA9IG1wYzgzeHhfc3VzcGVuZF92YWxpZCwKIAkuYmVnaW4gPSBtcGM4M3h4X3N1c3BlbmRfYmVnaW4sCiAJLmVudGVyID0gbXBjODN4eF9zdXNwZW5kX2VudGVyLAotCS5maW5pc2ggPSBtcGM4M3h4X3N1c3BlbmRfZmluaXNoLAorCS5lbmQgPSBtcGM4M3h4X3N1c3BlbmRfZW5kLAogfTsKIAogc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCkBAIC0zMzMsMTIgKzM3MCwyMyBAQAogCQlnb3RvIG91dF9wbWM7CiAJfQogCisJaWYgKGhhc19kZWVwX3NsZWVwKSB7CisJCXN5c2NyX3JlZ3MgPSBpb3JlbWFwKGltbXJiYXNlICsgSU1NUl9TWVNDUl9PRkZTRVQsCisJCQkJICAgICBzaXplb2YoKnN5c2NyX3JlZ3MpKTsKKwkJaWYgKCFzeXNjcl9yZWdzKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfc3lzY3I7CisJCX0KKwl9CisKIAlpZiAoaXNfcGNpX2FnZW50KQogCQltcGM4M3h4X3NldF9hZ2VudCgpOwogCiAJc3VzcGVuZF9zZXRfb3BzKCZtcGM4M3h4X3N1c3BlbmRfb3BzKTsKIAlyZXR1cm4gMDsKIAorb3V0X3N5c2NyOgorCWlvdW5tYXAoY2xvY2tfcmVncyk7CiBvdXRfcG1jOgogCWlvdW5tYXAocG1jX3JlZ3MpOwogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCBjNTAyOGEyLi4yMWY2MWI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtODYsNyArODYsNyBAQAogCXNjciA9IHBoeV9yZWFkKHBoeWRldiwgTVY4OEUxMTExX1NDUik7CiAKIAlpZiAoc2NyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIHNjcjsKIAogCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1WODhFMTExMV9TQ1IsIHNjciB8IDB4MDAwOCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYwppbmRleCBkNTk2MzI4Li5jMjc4YmQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCSAgIGlycV9od19udW1iZXJfdCBod2lycSkKIHsKIAlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBoLT5ob3N0X2RhdGEpOwotCWdldF9pcnFfZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwlpcnFfdG9fZGVzYyh2aXJxKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmZsaXBwZXJfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYwppbmRleCBkZDIwYmZmLi5hNzcxZjkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCkBAIC05NSw3ICs5NSw3IEBACiAJCQkgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CiAJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKLQlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJaXJxX3RvX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZobHdkX3BpYywgaGFuZGxlX2xldmVsX2lycSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzIsOSArMTMyLDkgQEAKIAlzdHJ1Y3QgaXJxX2hvc3QgKmlycV9ob3N0ID0gZ2V0X2lycV9kYXRhKGNhc2NhZGVfdmlycSk7CiAJdW5zaWduZWQgaW50IHZpcnE7CiAKLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCWRlc2MtPmNoaXAtPm1hc2soY2FzY2FkZV92aXJxKTsgLyogSVJRX0xFVkVMICovCi0Jc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAl2aXJxID0gX19obHdkX3BpY19nZXRfaXJxKGlycV9ob3N0KTsKIAlpZiAodmlycSAhPSBOT19JUlEpCkBAIC0xNDIsMTEgKzE0MiwxMSBAQAogCWVsc2UKIAkJcHJfZXJyKCJzcHVyaW91cyBpbnRlcnJ1cHQhXG4iKTsKIAotCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJZGVzYy0+Y2hpcC0+YWNrKGNhc2NhZGVfdmlycSk7IC8qIElSUV9MRVZFTCAqLwogCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQogCQlkZXNjLT5jaGlwLT51bm1hc2soY2FzY2FkZV92aXJxKTsKLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvdXNiZ2Vja29fdWRiZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmMKaW5kZXggZWRjOTU2Yy4uMjBhOGVkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC91c2JnZWNrb191ZGJnLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJd2hpbGUgKCF1Z19pc190eGZpZm9fcmVhZHkoKSAmJiBjb3VudC0tKQogCQliYXJyaWVyKCk7Ci0JaWYgKGNvdW50KQorCWlmIChjb3VudCA+PSAwKQogCQl1Z19yYXdfcHV0YyhjaCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKaW5kZXggMGQ5MzQzZC4uNjYxNzkxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKQEAgLTg1NSw1OSArODU1LDU4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCi1zdGF0aWMgaW50IHByb2NfbWZfZHVtcF9jbWRsaW5lKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9jbWRsaW5lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbjsKLQljaGFyICpwOworCWNoYXIgKnBhZ2UsICpwOwogCXN0cnVjdCB2c3BfY21kX2RhdGEgdnNwX2NtZDsKIAlpbnQgcmM7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAogCS8qIFRoZSBIViBhcHBlYXJzIHRvIHJldHVybiBubyBtb3JlIHRoYW4gMjU2IGJ5dGVzIG9mIGNvbW1hbmQgbGluZSAqLwotCWlmIChvZmYgPj0gMjU2KQotCQlyZXR1cm4gMDsKLQlpZiAoKG9mZiArIGNvdW50KSA+IDI1NikKLQkJY291bnQgPSAyNTYgLSBvZmY7Ci0KLQlkbWFfYWRkciA9IGlzZXJpZXNfaHZfbWFwKHBhZ2UsIG9mZiArIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOwotCWlmIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSkKKwlwYWdlID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHBhZ2UsIDAsIG9mZiArIGNvdW50KTsKKworCWRtYV9hZGRyID0gaXNlcmllc19odl9tYXAocGFnZSwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSkgeworCQlrZnJlZShwYWdlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChwYWdlLCAwLCAyNTYpOwogCW1lbXNldCgmdnNwX2NtZCwgMCwgc2l6ZW9mKHZzcF9jbWQpKTsKIAl2c3BfY21kLmNtZCA9IDMzOwogCXZzcF9jbWQuc3ViX2RhdGEua2Vybi50b2tlbiA9IGRtYV9hZGRyOwogCXZzcF9jbWQuc3ViX2RhdGEua2Vybi5hZGRyZXNzX3R5cGUgPSBIdkxwRG1hX0FkZHJlc3NUeXBlX1RjZUluZGV4OwotCXZzcF9jbWQuc3ViX2RhdGEua2Vybi5zaWRlID0gKHU2NClkYXRhOwotCXZzcF9jbWQuc3ViX2RhdGEua2Vybi5sZW5ndGggPSBvZmYgKyBjb3VudDsKKwl2c3BfY21kLnN1Yl9kYXRhLmtlcm4uc2lkZSA9ICh1NjQpbS0+cHJpdmF0ZTsKKwl2c3BfY21kLnN1Yl9kYXRhLmtlcm4ubGVuZ3RoID0gMjU2OwogCW1iKCk7CiAJcmMgPSBzaWduYWxfdnNwX2luc3RydWN0aW9uKCZ2c3BfY21kKTsKLQlpc2VyaWVzX2h2X3VubWFwKGRtYV9hZGRyLCBvZmYgKyBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAocmMpCisJaXNlcmllc19odl91bm1hcChkbWFfYWRkciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChyYykgeworCQlrZnJlZShwYWdlKTsKIAkJcmV0dXJuIHJjOwotCWlmICh2c3BfY21kLnJlc3VsdF9jb2RlICE9IDApCisJfQorCWlmICh2c3BfY21kLnJlc3VsdF9jb2RlICE9IDApIHsKKwkJa2ZyZWUocGFnZSk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlwID0gcGFnZTsKLQlsZW4gPSAwOwotCXdoaWxlIChsZW4gPCAob2ZmICsgY291bnQpKSB7Ci0JCWlmICgoKnAgPT0gJ1wwJykgfHwgKCpwID09ICdcbicpKSB7Ci0JCQlpZiAoKnAgPT0gJ1wwJykKLQkJCQkqcCA9ICdcbic7Ci0JCQlwKys7Ci0JCQlsZW4rKzsKLQkJCSplb2YgPSAxOworCXdoaWxlIChwIC0gcGFnZSA8IDI1NikgeworCQlpZiAoKnAgPT0gJ1wwJyB8fCAqcCA9PSAnXG4nKSB7CisJCQkqcCA9ICdcbic7CiAJCQlicmVhazsKIAkJfQogCQlwKys7Ci0JCWxlbisrOwotCX0KIAotCWlmIChsZW4gPCBvZmYpIHsKLQkJKmVvZiA9IDE7Ci0JCWxlbiA9IDA7CiAJfQotCXJldHVybiBsZW47CisJc2VxX3dyaXRlKG0sIHBhZ2UsIHAgLSBwYWdlKTsKKwlrZnJlZShwYWdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZl9jbWRsaW5lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWZfY21kbGluZV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCiAjaWYgMApAQCAtOTYyLDEwICs5NjEsOCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHJvY19tZl9kdW1wX3NpZGUoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1mX3NpZGVfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuOwogCWNoYXIgbWZfY3VycmVudF9zaWRlID0gJyAnOwogCXN0cnVjdCB2c3BfY21kX2RhdGEgdnNwX2NtZDsKIApAQCAtOTg5LDIxICs5ODYsMTcgQEAKIAkJfQogCX0KIAotCWxlbiA9IHNwcmludGYocGFnZSwgIiVjXG4iLCBtZl9jdXJyZW50X3NpZGUpOwotCi0JaWYgKGxlbiA8PSAob2ZmICsgY291bnQpKQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCWxlbiAtPSBvZmY7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOworCXNlcV9wcmludGYobSwgIiVjXG4iLCBtZl9jdXJyZW50X3NpZGUpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByb2NfbWZfY2hhbmdlX3NpZGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1mX3NpZGVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtZl9zaWRlX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1mX3NpZGVfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBzaWRlOwogCXU2NCBuZXdTaWRlOwpAQCAtMTA0MSw2ICsxMDM0LDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZl9zaWRlX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbWZfc2lkZV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbWZfc2lkZV9wcm9jX3dyaXRlLAorfTsKKwogI2lmIDAKIHN0YXRpYyB2b2lkIG1mX2dldFNyY0hpc3RvcnkoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKIHsKQEAgLTEwODcsOCArMTA4OSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBwcm9jX21mX2R1bXBfc3JjKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zcmNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKICNpZiAwCiAJaW50IGxlbjsKQEAgLTExMDksOCArMTExMCwxMyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgcHJvY19tZl9jaGFuZ2Vfc3JjKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtZl9zcmNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtZl9zcmNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbWZfc3JjX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciBzdGtidWZbMTBdOwogCkBAIC0xMTM1LDkgKzExNDEsMTkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19tZl9jaGFuZ2VfY21kbGluZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1mX3NyY19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1mX3NyY19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbWZfc3JjX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgc3NpemVfdCBtZl9jbWRsaW5lX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogeworCXZvaWQgKmRhdGEgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJc3RydWN0IHZzcF9jbWRfZGF0YSB2c3BfY21kOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJY2hhciAqcGFnZTsKQEAgLTExNzIsNiArMTE4OCwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1mX2NtZGxpbmVfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtZl9jbWRsaW5lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBtZl9jbWRsaW5lX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgc3NpemVfdCBwcm9jX21mX2NoYW5nZV92bWxpbnV4KHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC0xMjQ2LDEyICsxMjcxLDEwIEBACiAJCWlmICghbWYpCiAJCQlyZXR1cm4gMTsKIAotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgiY21kbGluZSIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZik7CisJCWVudCA9IHByb2NfY3JlYXRlX2RhdGEoImNtZGxpbmUiLCBTX0lSVVNSfFNfSVdVU1IsIG1mLAorCQkJCSAgICAgICAmbWZfY21kbGluZV9wcm9jX2ZvcHMsICh2b2lkICopKGxvbmcpaSk7CiAJCWlmICghZW50KQogCQkJcmV0dXJuIDE7Ci0JCWVudC0+ZGF0YSA9ICh2b2lkICopKGxvbmcpaTsKLQkJZW50LT5yZWFkX3Byb2MgPSBwcm9jX21mX2R1bXBfY21kbGluZTsKLQkJZW50LT53cml0ZV9wcm9jID0gcHJvY19tZl9jaGFuZ2VfY21kbGluZTsKIAogCQlpZiAoaSA9PSAzKQkvKiBubyB2bWxpbnV4IGVudHJ5IGZvciAnRCcgKi8KIAkJCWNvbnRpbnVlOwpAQCAtMTI2MywxOSArMTI4NiwxNSBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInNpZGUiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwgbWZfcHJvY19yb290KTsKKwllbnQgPSBwcm9jX2NyZWF0ZSgic2lkZSIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZl9wcm9jX3Jvb3QsCisJCQkgICZtZl9zaWRlX3Byb2NfZm9wcyk7CiAJaWYgKCFlbnQpCiAJCXJldHVybiAxOwotCWVudC0+ZGF0YSA9ICh2b2lkICopMDsKLQllbnQtPnJlYWRfcHJvYyA9IHByb2NfbWZfZHVtcF9zaWRlOwotCWVudC0+d3JpdGVfcHJvYyA9IHByb2NfbWZfY2hhbmdlX3NpZGU7CiAKLQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgic3JjIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsIG1mX3Byb2Nfcm9vdCk7CisJZW50ID0gcHJvY19jcmVhdGUoInNyYyIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBtZl9wcm9jX3Jvb3QsCisJCQkgICZtZl9zcmNfcHJvY19mb3BzKTsKIAlpZiAoIWVudCkKIAkJcmV0dXJuIDE7Ci0JZW50LT5kYXRhID0gKHZvaWQgKikwOwotCWVudC0+cmVhZF9wcm9jID0gcHJvY19tZl9kdW1wX3NyYzsKLQllbnQtPndyaXRlX3Byb2MgPSBwcm9jX21mX2NoYW5nZV9zcmM7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCmluZGV4IDQ5ZmY0ZGMuLjVhZWE5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJdTE2IHZsYW5NYXA7CiAJZG1hX2FkZHJfdCBoYW5kbGU7CiAJSHZMcEV2ZW50X1JjIGh2cmM7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIAljb25zdCBjaGFyICpzeXNpZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwppbmRleCAyNzU1NGM4Li5jNjY3ZjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwpAQCAtMiw2ICsyLDggQEAKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJJQk0gcFNlcmllcyAmIG5ldyAoUE9XRVI1LWJhc2VkKSBpU2VyaWVzIgogCXNlbGVjdCBNUElDCisJc2VsZWN0IFBDSV9NU0kKKwlzZWxlY3QgWElDUwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX1JUQVMKIAlzZWxlY3QgUFBDX1JUQVNfREFFTU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKaW5kZXggYmNkY2YwYy4uYTI3N2YyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYwpAQCAtMzgsMTkgKzM4LDI4IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKICNkZWZpbmUgQ01NX0RSSVZFUl9WRVJTSU9OCSIxLjAuMCIKICNkZWZpbmUgQ01NX0RFRkFVTFRfREVMQVkJMQorI2RlZmluZSBDTU1fSE9UUExVR19ERUxBWQk1CiAjZGVmaW5lIENNTV9ERUJVRwkJCTAKICNkZWZpbmUgQ01NX0RJU0FCTEUJCTAKICNkZWZpbmUgQ01NX09PTV9LQgkJMTAyNAogI2RlZmluZSBDTU1fTUlOX01FTV9NQgkJMjU2CiAjZGVmaW5lIEtCMlBBR0VTKF9wKQkJKChfcCk+PihQQUdFX1NISUZULTEwKSkKICNkZWZpbmUgUEFHRVMyS0IoX3ApCQkoKF9wKTw8KFBBR0VfU0hJRlQtMTApKQorLyoKKyAqIFRoZSBwcmlvcml0eSBsZXZlbCB0cmllcyB0byBlbnN1cmUgdGhhdCB0aGlzIG5vdGlmaWVyIGlzIGNhbGxlZCBhcworICogbGF0ZSBhcyBwb3NzaWJsZSB0byByZWR1Y2UgdGhyYXNoaW5nIGluIHRoZSBzaGFyZWQgbWVtb3J5IHBvb2wuCisgKi8KKyNkZWZpbmUgQ01NX01FTV9IT1RQTFVHX1BSSQkxCisjZGVmaW5lIENNTV9NRU1fSVNPTEFURV9QUkkJMTUKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWxheSA9IENNTV9ERUZBVUxUX0RFTEFZOworc3RhdGljIHVuc2lnbmVkIGludCBob3RwbHVnX2RlbGF5ID0gQ01NX0hPVFBMVUdfREVMQVk7CiBzdGF0aWMgdW5zaWduZWQgaW50IG9vbV9rYiA9IENNTV9PT01fS0I7CiBzdGF0aWMgdW5zaWduZWQgaW50IGNtbV9kZWJ1ZyA9IENNTV9ERUJVRzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY21tX2Rpc2FibGVkID0gQ01NX0RJU0FCTEU7CkBAIC02NSw2ICs3NCwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGRlbGF5LCBkZWxheSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgIkRlbGF5IChpbiBzZWNvbmRzKSBiZXR3ZWVuIHBvbGxzIHRvIHF1ZXJ5IGh5cGVydmlzb3IgcGFnaW5nIHJlcXVlc3RzLiAiCiAJCSAiW0RlZmF1bHQ9IiBfX3N0cmluZ2lmeShDTU1fREVGQVVMVF9ERUxBWSkgIl0iKTsKK21vZHVsZV9wYXJhbV9uYW1lZChob3RwbHVnX2RlbGF5LCBob3RwbHVnX2RlbGF5LCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlbGF5LCAiRGVsYXkgKGluIHNlY29uZHMpIGFmdGVyIG1lbW9yeSBob3RwbHVnIHJlbW92ZSAiCisJCSAiYmVmb3JlIGxvYW5pbmcgcmVzdW1lcy4gIgorCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX0hPVFBMVUdfREVMQVkpICJdIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQob29tX2tiLCBvb21fa2IsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0Mob29tX2tiLCAiQW1vdW50IG9mIG1lbW9yeSBpbiBrYiB0byBmcmVlIG9uIE9PTS4gIgogCQkgIltEZWZhdWx0PSIgX19zdHJpbmdpZnkoQ01NX09PTV9LQikgIl0iKTsKQEAgLTkyLDYgKzEwNSw5IEBACiBzdGF0aWMgc3RydWN0IGNtbV9wYWdlX2FycmF5ICpjbW1fcGFnZV9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhjbW1fbG9jayk7CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaG90cGx1Z19tdXRleCk7CitzdGF0aWMgaW50IGhvdHBsdWdfb2NjdXJyZWQ7IC8qIHByb3RlY3RlZCBieSB0aGUgaG90cGx1ZyBtdXRleCAqLworCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjbW1fdGhyZWFkX3B0cjsKIAogLyoqCkBAIC0xMTAsNiArMTI2LDE3IEBACiAJY21tX2RiZygiQmVnaW4gcmVxdWVzdCBmb3IgJWxkIHBhZ2VzXG4iLCBucik7CiAKIAl3aGlsZSAobnIpIHsKKwkJLyogRXhpdCBpZiBhIGhvdHBsdWcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIG9yIG9jY3VycmVkICovCisJCWlmIChtdXRleF90cnlsb2NrKCZob3RwbHVnX211dGV4KSkgeworCQkJaWYgKGhvdHBsdWdfb2NjdXJyZWQpIHsKKwkJCQltdXRleF91bmxvY2soJmhvdHBsdWdfbXV0ZXgpOworCQkJCWJyZWFrOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisKIAkJYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8CiAJCQkJICAgICAgIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DKTsKIAkJaWYgKCFhZGRyKQpAQCAtMTE5LDggKzE0Niw5IEBACiAJCWlmICghcGEgfHwgcGEtPmluZGV4ID49IENNTV9OUl9QQUdFUykgewogCQkJLyogTmVlZCBhIG5ldyBwYWdlIGZvciB0aGUgcGFnZSBsaXN0LiAqLwogCQkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKLQkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAotCQkJCQkJCQkgICAgICAgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOworCQkJbnBhID0gKHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqKV9fZ2V0X2ZyZWVfcGFnZSgKKwkJCQkJR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAorCQkJCQlfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9NRU1BTExPQyk7CiAJCQlpZiAoIW5wYSkgewogCQkJCXByX2luZm8oIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldyBwYWdlIGxpc3RcbiIsIF9fZnVuY19fKTsKIAkJCQlmcmVlX3BhZ2UoYWRkcik7CkBAIC0yODIsOSArMzEwLDI4IEBACiAJd2hpbGUgKDEpIHsKIAkJdGltZWxlZnQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZShkZWxheSAqIDEwMDApOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGltZWxlZnQpIHsKLQkJCWxvYW5lZF9wYWdlc190YXJnZXQgPSBsb2FuZWRfcGFnZXM7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGltZWxlZnQpCiAJCQlicmVhazsKKworCQlpZiAobXV0ZXhfdHJ5bG9jaygmaG90cGx1Z19tdXRleCkpIHsKKwkJCWlmIChob3RwbHVnX29jY3VycmVkKSB7CisJCQkJaG90cGx1Z19vY2N1cnJlZCA9IDA7CisJCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJCQljbW1fZGJnKCJIb3RwbHVnIG9wZXJhdGlvbiBoYXMgb2NjdXJyZWQsICIKKwkJCQkJCSJsb2FuaW5nIGFjdGl2aXR5IHN1c3BlbmRlZCAiCisJCQkJCQkiZm9yICVkIHNlY29uZHMuXG4iLAorCQkJCQkJaG90cGx1Z19kZWxheSk7CisJCQkJdGltZWxlZnQgPSBtc2xlZXBfaW50ZXJydXB0aWJsZShob3RwbHVnX2RlbGF5ICoKKwkJCQkJCTEwMDApOworCQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGltZWxlZnQpCisJCQkJCWJyZWFrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJfSBlbHNlIHsKKwkJCWNtbV9kYmcoIkhvdHBsdWcgb3BlcmF0aW9uIGluIHByb2dyZXNzLCBhY3Rpdml0eSAiCisJCQkJCSJzdXNwZW5kZWRcbiIpOworCQkJY29udGludWU7CiAJCX0KIAogCQljbW1fZ2V0X21wcCgpOwpAQCAtNDE0LDYgKzQ2MSwxOTMgQEAKIH07CiAKIC8qKgorICogY21tX2NvdW50X3BhZ2VzIC0gQ291bnQgdGhlIG51bWJlciBvZiBwYWdlcyBsb2FuZWQgaW4gYSBwYXJ0aWN1bGFyIHJhbmdlLgorICoKKyAqIEBhcmc6IG1lbW9yeV9pc29sYXRlX25vdGlmeSBzdHJ1Y3R1cmUgd2l0aCBhZGRyZXNzIHJhbmdlIGFuZCBjb3VudAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICAgICAgMCBvbiBzdWNjZXNzCisgKiovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbW1fY291bnRfcGFnZXModm9pZCAqYXJnKQoreworCXN0cnVjdCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgKm1hcmcgPSBhcmc7CisJc3RydWN0IGNtbV9wYWdlX2FycmF5ICpwYTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKG1hcmctPnN0YXJ0X3Bmbik7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIChtYXJnLT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKworCXNwaW5fbG9jaygmY21tX2xvY2spOworCXBhID0gY21tX3BhZ2VfbGlzdDsKKwl3aGlsZSAocGEpIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKXBhID49IHN0YXJ0ICYmICh1bnNpZ25lZCBsb25nKXBhIDwgZW5kKQorCQkJbWFyZy0+cGFnZXNfZm91bmQrKzsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBwYS0+aW5kZXg7IGlkeCsrKQorCQkJaWYgKHBhLT5wYWdlW2lkeF0gPj0gc3RhcnQgJiYgcGEtPnBhZ2VbaWR4XSA8IGVuZCkKKwkJCQltYXJnLT5wYWdlc19mb3VuZCsrOworCQlwYSA9IHBhLT5uZXh0OworCX0KKwlzcGluX3VubG9jaygmY21tX2xvY2spOworCXJldHVybiAwOworfQorCisvKioKKyAqIGNtbV9tZW1vcnlfaXNvbGF0ZV9jYiAtIEhhbmRsZSBtZW1vcnkgaXNvbGF0aW9uIG5vdGlmaWVyIGNhbGxzCisgKiBAc2VsZjoJbm90aWZpZXIgYmxvY2sgc3RydWN0CisgKiBAYWN0aW9uOglhY3Rpb24gdG8gdGFrZQorICogQGFyZzoJc3RydWN0IG1lbW9yeV9pc29sYXRlX25vdGlmeSBkYXRhIGZvciBoYW5kbGVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJTk9USUZZX09LIG9yIG5vdGlmaWVyIGVycm9yIGJhc2VkIG9uIHN1YmZ1bmN0aW9uIHJldHVybiB2YWx1ZQorICoqLworc3RhdGljIGludCBjbW1fbWVtb3J5X2lzb2xhdGVfY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJaWYgKGFjdGlvbiA9PSBNRU1fSVNPTEFURV9DT1VOVCkKKwkJcmV0ID0gY21tX2NvdW50X3BhZ2VzKGFyZyk7CisKKwlpZiAocmV0KQorCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7CisJZWxzZQorCQlyZXQgPSBOT1RJRllfT0s7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNtbV9tZW1faXNvbGF0ZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGNtbV9tZW1vcnlfaXNvbGF0ZV9jYiwKKwkucHJpb3JpdHkgPSBDTU1fTUVNX0lTT0xBVEVfUFJJCit9OworCisvKioKKyAqIGNtbV9tZW1fZ29pbmdfb2ZmbGluZSAtIFVubG9hbiBwYWdlcyB3aGVyZSBtZW1vcnkgaXMgdG8gYmUgcmVtb3ZlZAorICogQGFyZzogbWVtb3J5X25vdGlmeSBzdHJ1Y3R1cmUgd2l0aCBwYWdlIHJhbmdlIHRvIGJlIG9mZmxpbmVkCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMCBvbiBzdWNjZXNzCisgKiovCitzdGF0aWMgaW50IGNtbV9tZW1fZ29pbmdfb2ZmbGluZSh2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKm1hcmcgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKG1hcmctPnN0YXJ0X3Bmbik7CisJdW5zaWduZWQgbG9uZyBlbmRfcGFnZSA9IHN0YXJ0X3BhZ2UgKyAobWFyZy0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJc3RydWN0IGNtbV9wYWdlX2FycmF5ICpwYV9jdXJyLCAqcGFfbGFzdCwgKm5wYTsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKwl1bnNpZ25lZCBsb25nIGZyZWVkID0gMDsKKworCWNtbV9kYmcoIk1lbW9yeSBnb2luZyBvZmZsaW5lLCBzZWFyY2hpbmcgMHglbHggKCVsZCBwYWdlcykuXG4iLAorCQkJc3RhcnRfcGFnZSwgbWFyZy0+bnJfcGFnZXMpOworCXNwaW5fbG9jaygmY21tX2xvY2spOworCisJLyogU2VhcmNoIHRoZSBwYWdlIGxpc3QgZm9yIHBhZ2VzIGluIHRoZSByYW5nZSB0byBiZSBvZmZsaW5lZCAqLworCXBhX2xhc3QgPSBwYV9jdXJyID0gY21tX3BhZ2VfbGlzdDsKKwl3aGlsZSAocGFfY3VycikgeworCQlmb3IgKGlkeCA9IChwYV9jdXJyLT5pbmRleCAtIDEpOyAoaWR4ICsgMSkgPiAwOyBpZHgtLSkgeworCQkJaWYgKChwYV9jdXJyLT5wYWdlW2lkeF0gPCBzdGFydF9wYWdlKSB8fAorCQkJICAgIChwYV9jdXJyLT5wYWdlW2lkeF0gPj0gZW5kX3BhZ2UpKQorCQkJCWNvbnRpbnVlOworCisJCQlwbHBhcl9wYWdlX3NldF9hY3RpdmUoX19wYShwYV9jdXJyLT5wYWdlW2lkeF0pKTsKKwkJCWZyZWVfcGFnZShwYV9jdXJyLT5wYWdlW2lkeF0pOworCQkJZnJlZWQrKzsKKwkJCWxvYW5lZF9wYWdlcy0tOworCQkJdG90YWxyYW1fcGFnZXMrKzsKKwkJCXBhX2N1cnItPnBhZ2VbaWR4XSA9IHBhX2xhc3QtPnBhZ2VbLS1wYV9sYXN0LT5pbmRleF07CisJCQlpZiAocGFfbGFzdC0+aW5kZXggPT0gMCkgeworCQkJCWlmIChwYV9jdXJyID09IHBhX2xhc3QpCisJCQkJCXBhX2N1cnIgPSBwYV9sYXN0LT5uZXh0OworCQkJCXBhX2xhc3QgPSBwYV9sYXN0LT5uZXh0OworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljbW1fcGFnZV9saXN0KTsKKwkJCQljbW1fcGFnZV9saXN0ID0gcGFfbGFzdDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlwYV9jdXJyID0gcGFfY3Vyci0+bmV4dDsKKwl9CisKKwkvKiBTZWFyY2ggZm9yIHBhZ2UgbGlzdCBzdHJ1Y3R1cmVzIGluIHRoZSByYW5nZSB0byBiZSBvZmZsaW5lZCAqLworCXBhX2xhc3QgPSBOVUxMOworCXBhX2N1cnIgPSBjbW1fcGFnZV9saXN0OworCXdoaWxlIChwYV9jdXJyKSB7CisJCWlmICgoKHVuc2lnbmVkIGxvbmcpcGFfY3VyciA+PSBzdGFydF9wYWdlKSAmJgorCQkJCSgodW5zaWduZWQgbG9uZylwYV9jdXJyIDwgZW5kX3BhZ2UpKSB7CisJCQlucGEgPSAoc3RydWN0IGNtbV9wYWdlX2FycmF5ICopX19nZXRfZnJlZV9wYWdlKAorCQkJCQlHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTiB8CisJCQkJCV9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DKTsKKwkJCWlmICghbnBhKSB7CisJCQkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKKwkJCQljbW1fZGJnKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBsaXN0ICIKKwkJCQkJCSJtYW5hZ2VtZW50LiBNZW1vcnkgaG90cGx1ZyAiCisJCQkJCQkiZmFpbGVkLlxuIik7CisJCQkJcmV0dXJuIEVOT01FTTsKKwkJCX0KKwkJCW1lbWNweShucGEsIHBhX2N1cnIsIFBBR0VfU0laRSk7CisJCQlpZiAocGFfY3VyciA9PSBjbW1fcGFnZV9saXN0KQorCQkJCWNtbV9wYWdlX2xpc3QgPSBucGE7CisJCQlpZiAocGFfbGFzdCkKKwkJCQlwYV9sYXN0LT5uZXh0ID0gbnBhOworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYV9jdXJyKTsKKwkJCWZyZWVkKys7CisJCQlwYV9jdXJyID0gbnBhOworCQl9CisKKwkJcGFfbGFzdCA9IHBhX2N1cnI7CisJCXBhX2N1cnIgPSBwYV9jdXJyLT5uZXh0OworCX0KKworCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7CisJY21tX2RiZygiUmVsZWFzZWQgJWxkIHBhZ2VzIGluIHRoZSBzZWFyY2ggcmFuZ2UuXG4iLCBmcmVlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbW1fbWVtb3J5X2NiIC0gSGFuZGxlIG1lbW9yeSBob3RwbHVnIG5vdGlmaWVyIGNhbGxzCisgKiBAc2VsZjoJbm90aWZpZXIgYmxvY2sgc3RydWN0CisgKiBAYWN0aW9uOglhY3Rpb24gdG8gdGFrZQorICogQGFyZzoJc3RydWN0IG1lbW9yeV9ub3RpZnkgZGF0YSBmb3IgaGFuZGxlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCU5PVElGWV9PSyBvciBub3RpZmllciBlcnJvciBiYXNlZCBvbiBzdWJmdW5jdGlvbiByZXR1cm4gdmFsdWUKKyAqCisgKiovCitzdGF0aWMgaW50IGNtbV9tZW1vcnlfY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJbXV0ZXhfbG9jaygmaG90cGx1Z19tdXRleCk7CisJCWhvdHBsdWdfb2NjdXJyZWQgPSAxOworCQlyZXQgPSBjbW1fbWVtX2dvaW5nX29mZmxpbmUoYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fT0ZGTElORToKKwljYXNlIE1FTV9DQU5DRUxfT0ZGTElORToKKwkJbXV0ZXhfdW5sb2NrKCZob3RwbHVnX211dGV4KTsKKwkJY21tX2RiZygiTWVtb3J5IG9mZmxpbmUgb3BlcmF0aW9uIGNvbXBsZXRlLlxuIik7CisJCWJyZWFrOworCWNhc2UgTUVNX0dPSU5HX09OTElORToKKwljYXNlIE1FTV9PTkxJTkU6CisJY2FzZSBNRU1fQ0FOQ0VMX09OTElORToKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworCWVsc2UKKwkJcmV0ID0gTk9USUZZX09LOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbW1fbWVtX25iID0geworCS5ub3RpZmllcl9jYWxsID0gY21tX21lbW9yeV9jYiwKKwkucHJpb3JpdHkgPSBDTU1fTUVNX0hPVFBMVUdfUFJJCit9OworCisvKioKICAqIGNtbV9pbml0IC0gTW9kdWxlIGluaXRpYWxpemF0aW9uCiAgKgogICogUmV0dXJuIHZhbHVlOgpAQCAtNDM1LDE4ICs2NjksMjQgQEAKIAlpZiAoKHJjID0gY21tX3N5c2ZzX3JlZ2lzdGVyKCZjbW1fc3lzZGV2KSkpCiAJCWdvdG8gb3V0X3JlYm9vdF9ub3RpZmllcjsKIAorCWlmIChyZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmNtbV9tZW1fbmIpIHx8CisJICAgIHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKCZjbW1fbWVtX2lzb2xhdGVfbmIpKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyX25vdGlmaWVyOworCiAJaWYgKGNtbV9kaXNhYmxlZCkKIAkJcmV0dXJuIHJjOwogCiAJY21tX3RocmVhZF9wdHIgPSBrdGhyZWFkX3J1bihjbW1fdGhyZWFkLCBOVUxMLCAiY21tdGhyZWFkIik7CiAJaWYgKElTX0VSUihjbW1fdGhyZWFkX3B0cikpIHsKIAkJcmMgPSBQVFJfRVJSKGNtbV90aHJlYWRfcHRyKTsKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9zeXNmczsKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9ub3RpZmllcjsKIAl9CiAKIAlyZXR1cm4gcmM7CiAKLW91dF91bnJlZ2lzdGVyX3N5c2ZzOgorb3V0X3VucmVnaXN0ZXJfbm90aWZpZXI6CisJdW5yZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmNtbV9tZW1fbmIpOworCXVucmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoJmNtbV9tZW1faXNvbGF0ZV9uYik7CiAJY21tX3VucmVnaXN0ZXJfc3lzZnMoJmNtbV9zeXNkZXYpOwogb3V0X3JlYm9vdF9ub3RpZmllcjoKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmY21tX3JlYm9vdF9uYik7CkBAIC00NjcsNiArNzA3LDggQEAKIAkJa3RocmVhZF9zdG9wKGNtbV90aHJlYWRfcHRyKTsKIAl1bnJlZ2lzdGVyX29vbV9ub3RpZmllcigmY21tX29vbV9uYik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmNtbV9yZWJvb3RfbmIpOworCXVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZjbW1fbWVtX25iKTsKKwl1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKCZjbW1fbWVtX2lzb2xhdGVfbmIpOwogCWNtbV9mcmVlX3BhZ2VzKGxvYW5lZF9wYWdlcyk7CiAJY21tX3VucmVnaXN0ZXJfc3lzZnMoJmNtbV9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwppbmRleCAxMmRmOWU4Li42N2I3YTEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYwpAQCAtMzQ2LDEyICszNDYsMTQgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChwc2VyaWVzX2NwdV9ob3RwbHVnX211dGV4KTsKIAotdm9pZCBjcHVfaG90cGx1Z19kcml2ZXJfbG9jaygpCit2b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl9sb2NrKHZvaWQpCitfX2FjcXVpcmVzKHBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpCiB7CiAJbXV0ZXhfbG9jaygmcHNlcmllc19jcHVfaG90cGx1Z19tdXRleCk7CiB9CiAKLXZvaWQgY3B1X2hvdHBsdWdfZHJpdmVyX3VubG9jaygpCit2b2lkIGNwdV9ob3RwbHVnX2RyaXZlcl91bmxvY2sodm9pZCkKK19fcmVsZWFzZXMocHNlcmllc19jcHVfaG90cGx1Z19tdXRleCkKIHsKIAltdXRleF91bmxvY2soJnBzZXJpZXNfY3B1X2hvdHBsdWdfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IDg4NjhjMDEuLmI0ODg2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOwogCQlpZiAocmMgIT0gSF9TVUNDRVNTKQotCQkJcGFuaWMoIkVycm9yOiBQcm9kIHRvIHdha2UgdXAgcHJvY2Vzc29yICVkIFJldD0gJWxkXG4iLAotCQkJCW5yLCByYyk7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBQcm9kIHRvIHdha2UgdXAgcHJvY2Vzc29yICVkXAorCQkJCQkJUmV0PSAlbGRcbiIsIG5yLCByYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKaW5kZXggOTcxNDgzZi4uMTcwOWFjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYwpAQCAtMTQzLDEzICsxNDMsMjMgQEAKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKIAl1bnNpZ25lZCBpbnQgdm9sZCwgdm5ldywgZWRpYml0OwogCi0JaWYgKGZsb3dfdHlwZSA9PSBJUlFfVFlQRV9OT05FKQotCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJLyogUG9ydCBDIGludGVycnVwdHMgYXJlIGVpdGhlciBJUlFfVFlQRV9FREdFX0ZBTExJTkcgb3IKKwkgKiBJUlFfVFlQRV9FREdFX0JPVEggKGRlZmF1bHQpLiAgQWxsIG90aGVycyBhcmUgSVJRX1RZUEVfRURHRV9GQUxMSU5HCisJICogb3IgSVJRX1RZUEVfTEVWRUxfTE9XIChkZWZhdWx0KQorCSAqLworCWlmIChzcmMgPj0gQ1BNMl9JUlFfUE9SVEMxNSAmJiBzcmMgPD0gQ1BNMl9JUlFfUE9SVEMwKSB7CisJCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJCWZsb3dfdHlwZSA9IElSUV9UWVBFX0VER0VfQk9USDsKIAotCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykgewotCQlwcmludGsoS0VSTl9FUlIgIkNQTTIgUElDOiBzZW5zZSB0eXBlIDB4JXggbm90IHN1cHBvcnRlZFxuIiwKLQkJCWZsb3dfdHlwZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmxvd190eXBlICE9IElSUV9UWVBFX0VER0VfQk9USCAmJgorCQkgICAgZmxvd190eXBlICE9IElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJCWdvdG8gZXJyX3NlbnNlOworCX0gZWxzZSB7CisJCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJCWZsb3dfdHlwZSA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKworCQlpZiAoZmxvd190eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfTEVWRUxfSElHSCkpCisJCQlnb3RvIGVycl9zZW5zZTsKIAl9CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX0xFVkVMKTsKQEAgLTE4MSw2ICsxOTEsMTAgQEAKIAlpZiAodm9sZCAhPSB2bmV3KQogCQlvdXRfYmUzMigmY3BtMl9pbnRjdGwtPmljX3NpZXhyLCB2bmV3KTsKIAlyZXR1cm4gMDsKKworZXJyX3NlbnNlOgorCXByX2VycigiQ1BNMiBQSUM6IHNlbnNlIHR5cGUgMHgleCBub3Qgc3VwcG9ydGVkXG4iLCBmbG93X3R5cGUpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwppbmRleCA0ZTNhM2UzLi5lMWEwMjhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwpAQCAtNDY0LDggKzQ2NCw3IEBACiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CiAJc3RydWN0IG1wYzgzeHhfcGNpZV9wcml2ICpwY2llID0gaG9zZS0+ZG4tPmRhdGE7Ci0JdTggYnVzX25vID0gYnVzLT5udW1iZXIgLSBob3NlLT5maXJzdF9idXNubzsKLQl1MzIgZGV2X2Jhc2UgPSBidXNfbm8gPDwgMjQgfCBkZXZmbiA8PCAxNjsKKwl1MzIgZGV2X2Jhc2UgPSBidXMtPm51bWJlciA8PCAyNCB8IGRldmZuIDw8IDE2OwogCWludCByZXQ7CiAKIAlyZXQgPSBtcGM4M3h4X3BjaWVfZXhjbHVkZV9kZXZpY2UoYnVzLCBkZXZmbik7CkBAIC01MTUsMTIgKzUxNCwxNyBAQAogc3RhdGljIGludCBtcGM4M3h4X3BjaWVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKIAkJCQkgICAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpCiB7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CiAJdm9pZCBfX2lvbWVtICpjZmdfYWRkcjsKIAogCWNmZ19hZGRyID0gbXBjODN4eF9wY2llX3JlbWFwX2NmZyhidXMsIGRldmZuLCBvZmZzZXQpOwogCWlmICghY2ZnX2FkZHIpCiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKKwkvKiBQUENfSU5ESVJFQ1RfVFlQRV9TVVJQUkVTU19QUklNQVJZX0JVUyAqLworCWlmIChvZmZzZXQgPT0gUENJX1BSSU1BUllfQlVTICYmIGJ1cy0+bnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vKQorCQl2YWwgJj0gMHhmZmZmZmYwMDsKKwogCXN3aXRjaCAobGVuKSB7CiAJY2FzZSAxOgogCQlvdXRfOChjZmdfYWRkciwgdmFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCmluZGV4IDEwM2VhY2UuLmVlMWMwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYwpAQCAtNTQsNiArNTQsMjIgQEAKIAltcGM4eHh4X2djLT5kYXRhID0gaW5fYmUzMihtbS0+cmVncyArIEdQSU9fREFUKTsKIH0KIAorLyogV29ya2Fyb3VuZCBHUElPIDEgZXJyYXRhIG9uIE1QQzg1NzIvTVBDODUzNi4gVGhlIHN0YXR1cyBvZiBHUElPcworICogZGVmaW5lZCBhcyBvdXRwdXQgY2Fubm90IGJlIGRldGVybWluZWQgYnkgcmVhZGluZyBHUERBVCByZWdpc3RlciwKKyAqIHNvIHdlIHVzZSBzaGFkb3cgZGF0YSByZWdpc3RlciBpbnN0ZWFkLiBUaGUgc3RhdHVzIG9mIGlucHV0IHBpbnMKKyAqIGlzIGRldGVybWluZWQgYnkgcmVhZGluZyBHUERBVCByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBtcGM4NTcyX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwl1MzIgdmFsOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisKKwl2YWwgPSBpbl9iZTMyKG1tLT5yZWdzICsgR1BJT19EQVQpICYgfmluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RJUik7CisKKwlyZXR1cm4gKHZhbCB8IG1wYzh4eHhfZ2MtPmRhdGEpICYgbXBjOHh4eF9ncGlvMm1hc2soZ3Bpbyk7Cit9CisKIHN0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwpAQCAtMTM2LDcgKzE1MiwxMCBAQAogCWdjLT5uZ3BpbyA9IE1QQzhYWFhfR1BJT19QSU5TOwogCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBtcGM4eHh4X2dwaW9fZGlyX2luOwogCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gbXBjOHh4eF9ncGlvX2Rpcl9vdXQ7Ci0JZ2MtPmdldCA9IG1wYzh4eHhfZ3Bpb19nZXQ7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NzItZ3BpbyIpKQorCQlnYy0+Z2V0ID0gbXBjODU3Ml9ncGlvX2dldDsKKwllbHNlCisJCWdjLT5nZXQgPSBtcGM4eHh4X2dwaW9fZ2V0OwogCWdjLT5zZXQgPSBtcGM4eHh4X2dwaW9fc2V0OwogCiAJcmV0ID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBtbV9nYyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IGFhOWQwNmUuLjQ3MGRjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC01NjcsMTMgKzU2NywxMSBAQAogI2VuZGlmIC8qIENPTkZJR19NUElDX1UzX0hUX0lSUVMgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyBpbnQgaXJxX2Nob29zZV9jcHUodW5zaWduZWQgaW50IHZpcnRfaXJxKQorc3RhdGljIGludCBpcnFfY2hvb3NlX2NwdShjb25zdCBjcHVtYXNrX3QgKm1hc2spCiB7Ci0JY3B1bWFza190IG1hc2s7CiAJaW50IGNwdWlkOwogCi0JY3B1bWFza19jb3B5KCZtYXNrLCBpcnFfdG9fZGVzYyh2aXJ0X2lycSktPmFmZmluaXR5KTsKLQlpZiAoY3B1c19lcXVhbChtYXNrLCBDUFVfTUFTS19BTEwpKSB7CisJaWYgKGNwdW1hc2tfZXF1YWwobWFzaywgY3B1X2FsbF9tYXNrKSkgewogCQlzdGF0aWMgaW50IGlycV9yb3ZlcjsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01OTQsMjAgKzU5MiwxNSBAQAogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkJY3B1bWFza190IHRtcDsKLQotCQljcHVzX2FuZCh0bXAsIGNwdV9vbmxpbmVfbWFwLCBtYXNrKTsKLQotCQlpZiAoY3B1c19lbXB0eSh0bXApKQorCQljcHVpZCA9IGNwdW1hc2tfZmlyc3RfYW5kKG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJCWlmIChjcHVpZCA+PSBucl9jcHVfaWRzKQogCQkJZ290byBkb19yb3VuZF9yb2JpbjsKLQotCQljcHVpZCA9IGZpcnN0X2NwdSh0bXApOwogCX0KIAogCXJldHVybiBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdWlkKTsKIH0KICNlbHNlCi1zdGF0aWMgaW50IGlycV9jaG9vc2VfY3B1KHVuc2lnbmVkIGludCB2aXJ0X2lycSkKK3N0YXRpYyBpbnQgaXJxX2Nob29zZV9jcHUoY29uc3QgY3B1bWFza190ICptYXNrKQogewogCXJldHVybiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIH0KQEAgLTgxNiw3ICs4MDksNyBAQAogCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhpcnEpOwogCiAJaWYgKG1waWMtPmZsYWdzICYgTVBJQ19TSU5HTEVfREVTVF9DUFUpIHsKLQkJaW50IGNwdWlkID0gaXJxX2Nob29zZV9jcHUoaXJxKTsKKwkJaW50IGNwdWlkID0gaXJxX2Nob29zZV9jcHUoY3B1bWFzayk7CiAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwgMSA8PCBjcHVpZCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwppbmRleCAxZDQ0ZWVlLi4wZjY3Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCkBAIC0zOSw3ICszOSwxMiBAQAogCiAJcHJfZGVidWcoIm1waWM6IGZvdW5kIFUzLCBndWVzc2luZyBtc2kgYWxsb2NhdG9yIHNldHVwXG4iKTsKIAotCS8qIFJlc2VydmUgc291cmNlIG51bWJlcnMgd2Uga25vdyBhcmUgcmVzZXJ2ZWQgaW4gdGhlIEhXICovCisJLyogUmVzZXJ2ZSBzb3VyY2UgbnVtYmVycyB3ZSBrbm93IGFyZSByZXNlcnZlZCBpbiB0aGUgSFcuCisJICoKKwkgKiBUaGlzIGlzIGEgYml0IG9mIGEgbWl4IG9mIFUzIGFuZCBVNCByZXNlcnZlcyBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gd29yayBmaW5lLCB3ZSBoYXZlIHBsZW50eSBlbnVnaCBudW1iZXJzIGxlZnQgc28gbGV0J3MganVzdAorCSAqIG1hcmsgYW55dGhpbmcgd2UgZG9uJ3QgbGlrZSByZXNlcnZlZC4KKwkgKi8KIAlmb3IgKGkgPSAwOyAgIGkgPCA4OyAgIGkrKykKIAkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIApAQCAtNDksNiArNTQsMTAgQEAKIAlmb3IgKGkgPSAxMDA7IGkgPCAxMDU7IGkrKykKIAkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIAorCWZvciAoaSA9IDEyNDsgaSA8IG1waWMtPmlycV9jb3VudDsgaSsrKQorCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOworCisKIAlucCA9IE5VTEw7CiAJd2hpbGUgKChucCA9IG9mX2ZpbmRfYWxsX25vZGVzKG5wKSkpIHsKIAkJcHJfZGVidWcoIm1waWM6IG1hcHBpbmcgaHdpcnFzIGZvciAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfdTNtc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCmluZGV4IGQzY2FmMjMuLmJjYmZlNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jCkBAIC02NCwxMiArNjQsMTIgQEAKIAlyZXR1cm4gYWRkcjsKIH0KIAotc3RhdGljIHU2NCBmaW5kX2h0X21hZ2ljX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdTY0IGZpbmRfaHRfbWFnaWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGh3aXJxKQogewogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJdW5zaWduZWQgaW50IHBvczsKIAotCWZvciAoYnVzID0gcGRldi0+YnVzOyBidXM7IGJ1cyA9IGJ1cy0+cGFyZW50KSB7CisJZm9yIChidXMgPSBwZGV2LT5idXM7IGJ1cyAmJiBidXMtPnNlbGY7IGJ1cyA9IGJ1cy0+cGFyZW50KSB7CiAJCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoYnVzLT5zZWxmLCBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKIAkJaWYgKHBvcykKIAkJCXJldHVybiByZWFkX2h0X21hZ2ljX2FkZHIoYnVzLT5zZWxmLCBwb3MpOwpAQCAtNzgsMTMgKzc4LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgZmluZF91NF9tYWdpY19hZGRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KHBkZXYtPmJ1cyk7CisKKwkvKiBVNCBQQ0llIE1TSXMgbmVlZCB0byB3cml0ZSB0byB0aGUgc3BlY2lhbCByZWdpc3RlciBpbgorCSAqIHRoZSBicmlkZ2UgdGhhdCBnZW5lcmF0ZXMgaW50ZXJydXB0cy4gVGhlcmUgc2hvdWxkIGJlCisJICogdGhlb3JpY2FsbHkgYSByZWdpc3RlciBhdCAweGY4MDA1MDAwIHdoZXJlIHlvdSBqdXN0IHdyaXRlCisJICogdGhlIE1TSSBudW1iZXIgYW5kIHRoYXQgdHJpZ2dlcnMgdGhlIHJpZ2h0IGludGVycnVwdCwgYnV0CisJICogdW5mb3J0dW5hdGVseSwgdGhpcyBpcyBidXN0ZWQgaW4gSFcsIHRoZSBicmlkZ2UgZW5kaWFuIHN3YXBzCisJICogdGhlIHZhbHVlIGFuZCBoaXRzIHRoZSB3cm9uZyBuaWJibGUgaW4gdGhlIHJlZ2lzdGVyLgorCSAqCisJICogU28gaW5zdGVhZCB3ZSB1c2UgYW5vdGhlciByZWdpc3RlciBzZXQgd2hpY2ggaXMgdXNlZCBub3JtYWxseQorCSAqIGZvciBjb252ZXJ0aW5nIEhUIGludGVycnVwdHMgdG8gTVBJQyBpbnRlcnJ1cHRzLCB3aGljaCBkZWNvZGVzCisJICogdGhlIGludGVycnVwdCBudW1iZXIgYXMgcGFydCBvZiB0aGUgbG93IGFkZHJlc3MgYml0cworCSAqCisJICogVGhpcyB3aWxsIG5vdCB3b3JrIGlmIHdlIGV2ZXIgdXNlIG1vcmUgdGhhbiBvbmUgbGVnYWN5IE1TSSBpbgorCSAqIGEgYmxvY2sgYnV0IHdlIG5ldmVyIGRvLiBGb3Igb25lIE1TSSBvciBtdWx0aXBsZSBNU0ktWCB3aGVyZQorCSAqIGVhY2ggaW50ZXJydXB0IGFkZHJlc3MgY2FuIGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LCBpdCB3b3JrcworCSAqIGp1c3QgZmluZS4KKwkgKi8KKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaG9zZS0+ZG4sICJ1NC1wY2llIikgfHwKKwkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaG9zZS0+ZG4sICJVNC1wY2llIikpCisJCXJldHVybiAweGY4MDA0MDAwIHwgKGh3aXJxIDw8IDQpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdTNtc2lfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewogCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKIAkJcHJfZGVidWcoInUzbXNpOiBNU0ktWCB1bnRlc3RlZCwgdHJ5aW5nIGFueXdheS5cbiIpOwogCiAJLyogSWYgd2UgY2FuJ3QgZmluZCBhIG1hZ2ljIGFkZHJlc3MgdGhlbiBNU0kgYWluJ3QgZ29ubmEgd29yayAqLwotCWlmIChmaW5kX2h0X21hZ2ljX2FkZHIocGRldikgPT0gMCkgeworCWlmIChmaW5kX2h0X21hZ2ljX2FkZHIocGRldiwgMCkgPT0gMCAmJgorCSAgICBmaW5kX3U0X21hZ2ljX2FkZHIocGRldiwgMCkgPT0gMCkgewogCQlwcl9kZWJ1ZygidTNtc2k6IG5vIG1hZ2ljIGFkZHJlc3MgZm91bmQgZm9yICVzXG4iLAogCQkJIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTExOCwxMCArMTQ2LDYgQEAKIAl1NjQgYWRkcjsKIAlpbnQgaHdpcnE7CiAKLQlhZGRyID0gZmluZF9odF9tYWdpY19hZGRyKHBkZXYpOwotCW1zZy5hZGRyZXNzX2xvID0gYWRkciAmIDB4RkZGRkZGRkY7Ci0JbXNnLmFkZHJlc3NfaGkgPSBhZGRyID4+IDMyOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCWh3aXJxID0gbXNpX2JpdG1hcF9hbGxvY19od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLCAxKTsKIAkJaWYgKGh3aXJxIDwgMCkgewpAQCAtMTI5LDYgKzE1MywxMiBAQAogCQkJcmV0dXJuIGh3aXJxOwogCQl9CiAKKwkJYWRkciA9IGZpbmRfaHRfbWFnaWNfYWRkcihwZGV2LCBod2lycSk7CisJCWlmIChhZGRyID09IDApCisJCQlhZGRyID0gZmluZF91NF9tYWdpY19hZGRyKHBkZXYsIGh3aXJxKTsKKwkJbXNnLmFkZHJlc3NfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKKwkJbXNnLmFkZHJlc3NfaGkgPSBhZGRyID4+IDMyOworCiAJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcobXNpX21waWMtPmlycWhvc3QsIGh3aXJxKTsKIAkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7CiAJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsIGh3aXJxKTsKQEAgLTE0Myw2ICsxNzMsOCBAQAogCQlwcl9kZWJ1ZygidTNtc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JXgpIGFkZHIgMHglbHhcbiIsCiAJCQkgIHZpcnEsIGh3aXJxLCAodW5zaWduZWQgbG9uZylhZGRyKTsKIAorCQlwcmludGsoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSBhZGRyIDB4JWx4XG4iLAorCQkJICB2aXJxLCBod2lycSwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAJCW1zZy5kYXRhID0gaHdpcnE7CiAJCXdyaXRlX21zaV9tc2codmlycSwgJm1zZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwppbmRleCA2MTE4ODkwLi42YmU0NTAzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAlpZiAoSVNfRVJSKHNjdHgtPmZhbGxiYWNrLmNpcCkpIHsKIAkJcHJfZXJyKCJBbGxvY2F0aW5nIEFFUyBmYWxsYmFjayBhbGdvcml0aG0gJXMgZmFpbGVkXG4iLAogCQkgICAgICAgbmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKHNjdHgtPmZhbGxiYWNrLmJsayk7CisJCXJldHVybiBQVFJfRVJSKHNjdHgtPmZhbGxiYWNrLmNpcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCBmNGU1M2M2Li5iNDE2YWExIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVHVlIFNlcCAyMiAxNzo0MzoxMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMDk6MDM6MDcgMjAxMAogIwogQ09ORklHX1NDSEVEX01DPXkKIENPTkZJR19NTVU9eQpAQCAtNTEsNiArNTEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTY0CiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTExMyw3ICsxMTQsNiBAQAogIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKQEAgLTE0OSwyMSArMTQ5LDc4IEBACiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DR1JPVVAgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9ERUFETElORT15CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlM9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DSz15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JIPXkKK0NPTkZJR19BUkNIX0lOTElORV9TUElOX0xPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fTE9DS19CSD15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0lSUT15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkU9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1NQSU5fVU5MT0NLPXkKK0NPTkZJR19BUkNIX0lOTElORV9TUElOX1VOTE9DS19CSD15CitDT05GSUdfQVJDSF9JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKK0NPTkZJR19BUkNIX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX1RSWUxPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1JFQURfTE9DSz15CitDT05GSUdfQVJDSF9JTkxJTkVfUkVBRF9MT0NLX0JIPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX0xPQ0tfSVJRPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRT15CitDT05GSUdfQVJDSF9JTkxJTkVfUkVBRF9VTkxPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1JFQURfVU5MT0NLX0JIPXkKK0NPTkZJR19BUkNIX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkU9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1dSSVRFX1RSWUxPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1dSSVRFX0xPQ0s9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1dSSVRFX0xPQ0tfQkg9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkU9eQorQ09ORklHX0FSQ0hfSU5MSU5FX1dSSVRFX1VOTE9DSz15CitDT05GSUdfQVJDSF9JTkxJTkVfV1JJVEVfVU5MT0NLX0JIPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKK0NPTkZJR19BUkNIX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMjcsMTQgKzI4NCwxMyBAQAogQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5CiBDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzM5LDYgKzM5NSw3IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD15CisjIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAogQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldApAQCAtNTA0LDYgKzU2MSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogIyBDT05GSUdfQkxLX0RFVl9PU0QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTcxMCw3ICs3NzEsNiBAQAogIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTg2NCw2ICs5MjQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MzEsNyArOTkyLDYgQEAKIENPTkZJR19TQU1QTEVTPXkKICMgQ09ORklHX1NBTVBMRV9LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRV9LUFJPQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTM5LDcgKzk5OSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCmluZGV4IDc3ZGY3MjYuLjJiOTJkNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCSAgICAgICBMUEFSX05BTUVfTEVOKTsKIAlFQkNBU0MobmFtZSwgTFBBUl9OQU1FX0xFTik7CiAJbmFtZVtMUEFSX05BTUVfTEVOXSA9IDA7Ci0Jc3Ryc3RyaXAobmFtZSk7CisJc3RyaW0obmFtZSk7CiB9CiAKIHN0cnVjdCBjcHVfaW5mbyB7CkBAIC01MjMsNyArNTIzLDcgQEAKIAltZW1jcHkobmFtZSwgZGlhZzIyNF9jcHVfbmFtZXMgKyAoKGluZGV4ICsgMSkgKiBDUFVfTkFNRV9MRU4pLAogCQlDUFVfTkFNRV9MRU4pOwogCW5hbWVbQ1BVX05BTUVfTEVOXSA9IDA7Ci0Jc3Ryc3RyaXAobmFtZSk7CisJc3RyaW0obmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMKaW5kZXggZDAxZmM4Zi4uZjBiMGQzMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX3ZtLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCS8qIGd1ZXN0IGRpciAqLwogCW1lbWNweShndWVzdF9uYW1lLCBkYXRhLT5ndWVzdF9uYW1lLCBOQU1FX0xFTik7CiAJRUJDQVNDKGd1ZXN0X25hbWUsIE5BTUVfTEVOKTsKLQlzdHJzdHJpcChndWVzdF9uYW1lKTsKKwlzdHJpbShndWVzdF9uYW1lKTsKIAlndWVzdF9kaXIgPSBoeXBmc19ta2RpcihzYiwgc3lzdGVtc19kaXIsIGd1ZXN0X25hbWUpOwogCWlmIChJU19FUlIoZ3Vlc3RfZGlyKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ3Vlc3RfZGlyKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggMzRhYWE0Ni4uYzYxNjgyMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTEsMzAgKzEsNiBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1zMzkwL3BhcmFtLmgKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKgotICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9wYXJhbS5oIgotICovCi0KICNpZm5kZWYgX0FTTVMzOTBfUEFSQU1fSAogI2RlZmluZSBfQVNNUzM5MF9QQVJBTV9ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLwotIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KIAotI2lmbmRlZiBIWgotI2RlZmluZSBIWiAxMDAKLSNlbmRpZgotCi0jZGVmaW5lIEVYRUNfUEFHRVNJWkUJNDA5NgotCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLwotCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNUzM5MF9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2I1MjMyZC4uMTkyYTcyMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMjY5LDcgKzI2OSw4IEBACiAjZGVmaW5lCV9fTlJfcHdyaXRldgkJMzI5CiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzMwCiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzMQotI2RlZmluZSBOUl9zeXNjYWxscyAzMzIKKyNkZWZpbmUgX19OUl9yZWN2bW1zZwkJMzMyCisjZGVmaW5lIE5SX3N5c2NhbGxzIDMzMwogCiAvKiAKICAqIFRoZXJlIGFyZSBzb21lIHN5c3RlbSBjYWxscyB0aGF0IGFyZSBub3QgcHJlc2VudCBvbiA2NCBiaXQsIHNvbWUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCAzMGRlMmQwLi5mYWVhY2NjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC0xODUzLDMgKzE4NTMsMTIgQEAKIAlsbGd0cgklcjMsJXIzCQkJIyBjb21wYXRfdXB0cl90ICoKIAlsbGd0cgklcjQsJXI0CQkJIyBjb21wYXRfdXB0cl90ICoKIAlqZwlzeXMzMl9leGVjdmUJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisKKwkuZ2xvYmwJY29tcGF0X3N5c19yZWN2bW1zZ193cmFwcGVyCitjb21wYXRfc3lzX3JlY3ZtbXNnX3dyYXBwZXI6CisJbGdmcgklcjIsJXIyCQkJIyBpbnQKKwlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgY29tcGF0X21tc2doZHIgKgorCWxsZ2ZyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGludAorCWxsZ2ZyCSVyNSwlcjUJCQkjIHVuc2lnbmVkIGludAorCWxsZ3RyCSVyNiwlcjYJCQkjIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKgorCWpnCWNvbXBhdF9zeXNfcmVjdm1tc2cKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDQ4OTBhYzYuLjRkNzMyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJuY3B5KF92YWx1ZSwgYnVmLCBzaXplb2YoX3ZhbHVlKSAtIDEpOwkJCVwKLQlzdHJzdHJpcChfdmFsdWUpOwkJCQkJCVwKKwlzdHJpbShfdmFsdWUpOwkJCQkJCQlcCiAJcmV0dXJuIGxlbjsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgc3lzXyMjX3ByZWZpeCMjXyMjX25hbWUjI19hdHRyID0JCVwKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiI3Vua25vd24jXG4iKTsKIAltZW1jcHkobG9hZHBhcm0sICZzY2xwX2lwbF9pbmZvLmxvYWRwYXJtLCBMT0FEUEFSTV9MRU4pOwogCUVCQ0FTQyhsb2FkcGFybSwgTE9BRFBBUk1fTEVOKTsKLQlzdHJzdHJpcChsb2FkcGFybSk7CisJc3RyaW0obG9hZHBhcm0pOwogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlc1xuIiwgbG9hZHBhcm0pOwogfQogCkBAIC03NzYsNyArNzc2LDcgQEAKIAltZW1jcHkobG9hZHBhcm0sIGlicC0+aXBsX2luZm8uY2N3LmxvYWRfcGFybSwgTE9BRFBBUk1fTEVOKTsKIAlFQkNBU0MobG9hZHBhcm0sIExPQURQQVJNX0xFTik7CiAJbG9hZHBhcm1bTE9BRFBBUk1fTEVOXSA9IDA7Ci0Jc3Ryc3RyaXAobG9hZHBhcm0pOworCXN0cmltKGxvYWRwYXJtKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVpcGxfZ2VuZXJpY19sb2FkcGFybV9zaG93KHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICppcGIsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwppbmRleCA2NTNjNmExLi4xMzgxNWQzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTk1OSw3ICs5NTksNyBAQAogCQkuc2V0ID0gczM5MF9mcHJlZ3Nfc2V0LAogCX0sCiAJW1JFR1NFVF9HRU5FUkFMX0VYVEVOREVEXSA9IHsKLQkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJYU1RBVFVTLAorCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9TMzkwX0hJR0hfR1BSUywKIAkJLm4gPSBzaXplb2YoczM5MF9jb21wYXRfcmVnc19oaWdoKSAvIHNpemVvZihjb21wYXRfbG9uZ190KSwKIAkJLnNpemUgPSBzaXplb2YoY29tcGF0X2xvbmdfdCksCiAJCS5hbGlnbiA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCAzMGVjYTA3Li40ZjI5MmM5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0zNDAsMyArMzQwLDQgQEAKIFNZU0NBTEwoc3lzX3B3cml0ZXYsc3lzX3B3cml0ZXYsY29tcGF0X3N5c19wd3JpdGV2X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19ydF90Z3NpZ3F1ZXVlaW5mbyxzeXNfcnRfdGdzaWdxdWV1ZWluZm8sY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mb193cmFwcGVyKSAvKiAzMzAgKi8KIFNZU0NBTEwoc3lzX3BlcmZfZXZlbnRfb3BlbixzeXNfcGVyZl9ldmVudF9vcGVuLHN5c19wZXJmX2V2ZW50X29wZW5fd3JhcHBlcikKK1NZU0NBTEwoc3lzX3JlY3ZtbXNnLHN5c19yZWN2bW1zZyxjb21wYXRfc3lzX3JlY3ZtbXNnX3dyYXBwZXIpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggYzJlNDJjYy4uNmU3YWQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCQkJCVNJR1RSQVApID09IE5PVElGWV9TVE9QKXsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpICE9IDApCisJaWYgKHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwoY3VycmVudCwgU0lHVFJBUCkpCiAJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIH0KIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChnZXRfdXNlcigqKChfX3UxNiAqKSBvcGNvZGUpLCAoX191MTYgX191c2VyICopIGxvY2F0aW9uKSkKIAkJCXJldHVybjsKIAkJaWYgKCooKF9fdTE2ICopIG9wY29kZSkgPT0gUzM5MF9CUkVBS1BPSU5UX1UxNikgewotCQkJaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpCisJCQlpZiAodHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQKSkKIAkJCQlmb3JjZV9zaWcoU0lHVFJBUCwgY3VycmVudCk7CiAJCQllbHNlCiAJCQkJc2lnbmFsID0gU0lHSUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9tbS9pbml0LmMgYi9hcmNoL3Njb3JlL21tL2luaXQuYwppbmRleCA4YzE1YjJjLi5kZmFmNDU4IDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL21tL2luaXQuYworKysgYi9hcmNoL3Njb3JlL21tL2luaXQuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCQlyYW0gPDwgKFBBR0VfU0hJRlQtMTApLCBjb2Rlc2l6ZSA+PiAxMCwKIAkJCXJlc2VydmVkcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLCBkYXRhc2l6ZSA+PiAxMCwKIAkJCWluaXRzaXplID4+IDEwLAotCQkJKHVuc2lnbmVkIGxvbmcpICh0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKSk7CisJCQl0b3RhbGhpZ2hfcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApKTsKIH0KICNlbmRpZiAvKiAhQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDAwMzFhNjkuLjIxMjFmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTU0MCwxNCArNTQwLDE2IEBACiAKIGNvbmZpZyBTSF9QQ0xLX0ZSRVEKIAlpbnQgIlBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikiCi0JZGVmYXVsdCAiMjcwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzM0MworCWRlcGVuZHMgb24gU0hfQ0xLX0NQR19MRUdBQ1kKIAlkZWZhdWx0ICIzMTI1MDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NjE5Ci0JZGVmYXVsdCAiMzIwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzcyMgotCWRlZmF1bHQgIjMzMzMzMzMzIiBpZiBDUFVfU1VCVFlQRV9TSDc3NzAgfHwgQ1BVX1NVQlRZUEVfU0g3NzIzIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc2MCB8fCBDUFVfU1VCVFlQRV9TSDc3MDUgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjAzIHx8IENQVV9TVUJUWVBFX1NINzIwNiB8fCBcCi0JCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgQ1BVX1NVQlRZUEVfTVhHICAgIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc4NiB8fCBDUFVfU1VCVFlQRV9TSDc3MjQKKwlkZWZhdWx0ICIzMzMzMzMzMyIgaWYgQ1BVX1NVQlRZUEVfU0g3NzcwIHx8IFwKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc2MCB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3MDUgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjAzIHx8IFwKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwNiB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyNjMgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfTVhHICAgIHx8IFwKKwkJCSAgICAgIENQVV9TVUJUWVBFX1NINzc4NgogCWRlZmF1bHQgIjYwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWRlZmF1bHQgIjY2MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDRfMjAyCiAJZGVmYXVsdCAiNTAwMDAwMDAiCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggMTk0YWFjYS4uNmE4ODYxYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTI4LDggKzEyOCw2IEBACiAKIC8qIFNIIEV0aCAqLwogI2RlZmluZSBTSF9FVEhfQUREUgkoMHhBNDYwMDAwMCkKLSNkZWZpbmUgU0hfRVRIX01BSFIJKFNIX0VUSF9BRERSICsgMHgxQzApCi0jZGVmaW5lIFNIX0VUSF9NQUxSCShTSF9FVEhfQUREUiArIDB4MUM4KQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9ldGhfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQgPSBTSF9FVEhfQUREUiwKQEAgLTUwOSw2ICs1MDcsNyBAQAogCiAjZWxzZQogCisvKiBNTUMgU1BJICovCiBzdGF0aWMgaW50IG1tY19zcGlfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QVFk2KTsKQEAgLTU0Miw2ICs1NDEsNyBAQAogCX0sCiB9OwogCisvKiBNU0lPRjAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX2luZm8gbXNpb2YwX2RhdGEgPSB7CiAJLm51bV9jaGlwc2VsZWN0ID0gMSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwppbmRleCAyZjc4ZDAxLi44OTMxYTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgRnJpIFNlcCAyNSAxMToyMjo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MTA6NTkgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYyLDYgKzY0LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05OSw2ICsxMDIsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTYsNiArMTIwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDIsMTQgKzE0Nyw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMDUsNiArMjM3LDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyVExCIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0yMjksOCArMjYyLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjYyLDcgKzI5Myw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKICMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKQEAgLTQxOCw5ICs0NDgsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1MCw2ICs1NzcsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9NApAQCAtNTU5LDkgKzU5MCwxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC01NzIsNiArNjA2LDcgQEAKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC02NjQsMTEgKzY5OSwxMSBAQAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjg4LDYgKzcyMyw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTc4Miw3ICs4MTgsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzk2LDcgKzgzMSwxMCBAQAogIwogQ09ORklHX1NQSV9CSVRCQU5HPXkKIENPTkZJR19TUElfR1BJTz15CisjIENPTkZJR19TUElfU0hfTVNJT0YgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtODU0LDExICs4OTIsMTMgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CkBAIC04NjYsNiArOTA2LDggQEAKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQogCkBAIC04ODIsNiArOTI0LDggQEAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCitDT05GSUdfSVJfQ09SRT15CitDT05GSUdfVklERU9fSVI9eQogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUj15CiAjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldApAQCAtOTAxLDYgKzk0NSw3IEBACiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CitDT05GSUdfVklERU9fSVJfSTJDPXkKICMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CkBAIC05MDgsMTAgKzk1MywxMyBAQAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX1JKNTROMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCBpcyBub3Qgc2V0CiBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STT15CiBDT05GSUdfU09DX0NBTUVSQV9PVjc3Mlg9eQorIyBDT05GSUdfU09DX0NBTUVSQV9PVjk2NDAgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVU9eQogIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKQEAgLTk5Niw2ICsxMDQ0LDcgQEAKICMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CisjIENPTkZJR19NTUNfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTEwMjcsNiArMTA3Niw3IEBACiBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPXkKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC0xMDU1LDcgKzExMDUsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xMjQ4LDcgKzEzMDAsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTI2NSw3ICsxMzE3LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3NCw3ICsxMzI1LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2NheW1hbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZwppbmRleCA2Yjg2M2NiLi45MjU4OWE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvY2F5bWFuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjIxOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMToxNDo1MCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKICMgQ09ORklHX1NVUEVSSDMyIGlzIG5vdCBzZXQKQEAgLTE0LDExICsxNCwxMyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMjgsNyArMzAsMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQ0LDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKQEAgLTUwLDExICs2MSwxMyBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NSwyNCArOTgsMzIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTM2LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEyMywxNCArMTQ0LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTc4LDggKzIyNiw3IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI1NSwxMyArMzAyLDEzIEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwNDAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC0zMzAsNiArMzc3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNTksMTQgKzQwNywxMSBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzc5LDYgKzQyNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk1LDYgKzQ0MSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNDA1LDYgKzQ1NSw3IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKQEAgLTQxMiw2ICs0NjMsNyBAQAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNDYyLDggKzUxNCwxMSBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTQ5NSw3ICs1NTAsMTAgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTUwNyw3ICs1NjUsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01NDYsNiArNjA4LDcgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC01NjUsNiArNjI4LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC01OTAsMTIgKzY1NCwxMCBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYwOSw2ICs2NzEsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjE4LDYgKzY4MSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY4Miw2ICs3NDYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzEwLDYgKzc3NSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzIxLDExICs3ODcsNiBAQAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTczNCwyMCArNzk1LDI2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC03NzEsNiArODM4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC03OTcsNiArODY1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODA4LDkgKzg3Nyw4IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODM3LDE3ICs5MDUsMjAgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC05MzksNyArMTAxMCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDAyLDggKzEwNzIsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwNjcsNyArMTEzOSw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTIwLDYgKzExOTEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTU1LDIxICsxMjI3LDI1IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTExODAsMTEgKzEyNTYsOSBAQAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIENPTkZJR19TSDY0X1NSX1dBVENIPXkKIApAQCAtMTE5NCwxMyArMTI2OCwxNiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEyMzIsMTEgKzEzMDksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI5OSw1ICsxMzc4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwppbmRleCBhZWRiZDRmLi41NWY2NTJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE3OjU2OjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMToxNzozNSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMSw2ICsyMSw3IEBACiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Myw2ICs2NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTcsNiArMTAwLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE3LDYgKzEyMSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQzLDE0ICsxNDgsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMyLDggKzI2NCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI5NCw5ICszMjQsOSBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CiBDT05GSUdfU0hfRE1BX0lSUV9NVUxUST15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0w9eQogQ09ORklHX05SX0RNQV9DSEFOTkVMUz05CkBAIC0zMzgsNyArMzY4LDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBwYW5pYz0zIgpAQCAtMzQ4LDcgKzM3Nyw2IEBACiAjCiBDT05GSUdfTUFQTEU9eQogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTQ0Myw5ICs0NzEsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ3OCw2ICs1MDMsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CkBAIC01NzksNiArNjA4LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC01ODYsOCArNjE2LDkgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYwMCw2ICs2MzEsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNjA5LDYgKzY0MSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY1NSw2ICs2ODgsNyBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03MzQsNiArNzY4LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtODgzLDYgKzkxOCw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtOTgxLDEwICsxMDE3LDExIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTk5Nyw3ICsxMDM0LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNiw3ICsxMDQyLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKaW5kZXggNDY4NzQ3MC4uNjYyYzFhZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NTY6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjE4OjE3IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MSw2ICs2Myw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMCw2ICsxMjQsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MiwxNCArMTQ3LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjA1LDYgKzIzNyw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDEwMDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjI5LDggKzI2Miw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI2NCw3ICsyOTUsNiBAQAogIwogIyBDT05GSUdfU0hfVElNRVJfVE1VIGlzIG5vdCBzZXQKIENPTkZJR19TSF9USU1FUl9DTVQ9eQotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKQEAgLTQwNiw3ICs0MzYsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIwogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzIsNiArNDY4LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKQEAgLTUyNiwxMSArNTY2LDEyIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU1OSw2ICs2MDAsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02NTIsNyArNjk0LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcwNywxNiArNzQ4LDE5IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTg2Nyw2ICs5MTEsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05NzksNyArMTAyNCw3IEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtOTk3LDcgKzEwNDIsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMDA2LDcgKzEwNTAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKaW5kZXggY2FkOTE4NC4uMThlMzM1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NDU6MzkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjIwOjM2IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Miw2ICs2NCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTksNiArMTAyLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE2LDYgKzEyMCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQzLDE0ICsxNDgsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjA2LDYgKzIzOCw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDEwMDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjMwLDggKzI2Myw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI2NSw3ICsyOTYsNiBAQAogIwogQ09ORklHX1NIX1RJTUVSX1RNVT15CiAjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKQEAgLTQyMCw5ICs0NTAsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Miw2ICs1NzksMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU2Miw5ICs1OTMsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc1LDYgKzYwOSw3IEBACiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNjY5LDExICs3MDQsMTIgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzAyLDYgKzczOCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTgxMCw3ICs4NDcsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODI0LDcgKzg2MCwxMCBAQAogIwogQ09ORklHX1NQSV9CSVRCQU5HPXkKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC04ODIsMTEgKzkyMSwxMyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKQEAgLTg5NCw2ICs5MzUsOCBAQAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTkxMCw2ICs5NTMsOCBAQAogIwogIyBNdWx0aW1lZGlhIGRyaXZlcnMKICMKK0NPTkZJR19JUl9DT1JFPXkKK0NPTkZJR19WSURFT19JUj15CiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSPXkKICMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CkBAIC05MzAsNiArOTc1LDcgQEAKICMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKK0NPTkZJR19WSURFT19JUl9JMkM9eQogIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKQEAgLTkzOSwxMCArOTg1LDEzIEBACiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQxMTIgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfUko1NE4xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9PVjc3MlggaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9PVjk2NDAgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVU9eQogIyBDT05GSUdfVjRMX1VTQl9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19SQURJT19BREFQVEVSUz15CkBAIC05NTIsNiArMTAwMSw3IEBACiAjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVGNjg2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC0xMTc3LDYgKzEyMjcsNyBAQAogIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKKyMgQ09ORklHX01NQ19UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTIwOCw2ICsxMjU5LDcgQEAKIENPTkZJR19SVENfRFJWX1BDRjg1NjM9eQogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEyMzYsNyArMTI4OCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0MzAsNyArMTQ4NCw3IEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTQ0OCw3ICsxNTAyLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ1Nyw3ICsxNTEwLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwppbmRleCA4NmM5YmMwLi43MmY4NzE4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE3OjU3OjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMToyNDoyNiAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOCw2ICsyOCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01Myw2ICs1NCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtNjYsNyArNjgsNiBAQAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfUFJJTlRLIGlzIG5vdCBzZXQKQEAgLTgxLDYgKzgyLDcgQEAKIENPTkZJR19TSE1FTT15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC05OCw2ICsxMDAsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEwOSw2ICsxMTIsMzUgQEAKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xODYsOCArMjE4LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzU5LDYgKzM4OSw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTQxNiw3ICs0NDcsNiBAQAogIyBDT05GSUdfUFJPQ19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CkBAIC00NDgsNyArNDc4LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNDU2LDcgKzQ4NSwxMSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCmluZGV4IDRjMGY4MmIuLjA5MzJlNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NTc6MzAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjI0OjQ0IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjIsNiArNjQsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjEsNiArMTI1LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDcsMTQgKzE1Miw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIzMCw4ICsyNjIsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNzgsOSArMzA4LDkgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQogQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfU0hfRE1BQlJHIGlzIG5vdCBzZXQKQEAgLTMyMCw3ICszNTAsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMjAwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4zOi9zY3JpcHRzL2ZpbGVzeXMgaXA9MTkyLjE2OC4wLjQiCkBAIC00MTUsOSArNDQ0LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MzQsNiArNTYwLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC01ODEsMTEgKzYxMSwxMSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjA1LDYgKzYzNSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY5OCw3ICs3MjksNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CkBAIC03MjcsMTUgKzc1NywxOCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC0xMDcyLDkgKzExMDUsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTEwODgsNyArMTExOCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwppbmRleCA5Yjc4NTUxLi5mODk5ZTU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NTg6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjI2OjU1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTksNiArNjEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMyw2ICsxMDYsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjQsNiArMTI4LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNTAsMTQgKzE1NSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMTEsNiArMjQzLDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTIzNyw4ICsyNzAsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC00MTksNyArNDUwLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDk4LDcgKzUzNSw2IEBACiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTMxLDYgKzU2NywxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CkBAIC02MjksMTEgKzY2OSwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NjIsNiArNzAzLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzQ1LDYgKzc4Nyw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTExMDIsMTAgKzExNDUsMTEgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpAQCAtMTEyNSw3ICsxMTY5LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEzNCw3ICsxMTc3LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKaW5kZXggZjU5YmU0NC4uMDY2NDQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTc6NTk6NDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjMwOjMxIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTMwLDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTU3LDYgKzU4LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05Miw2ICs5NCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEwOSw2ICsxMTIsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzMCwxNCArMTM0LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMTMsOCArMjQ0LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjYxLDggKzI5MCw4IEBACiAjCiAjIERNQSBzdXBwb3J0CiAjCi1DT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTYKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIApAQCAtMzEzLDcgKzM0Miw2IEBACiAjCiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15CkBAIC0zNjMsNiArMzkxLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNDMyLDYgKzQ2NCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfUE9MTERFVj15CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00NjAsNiArNDkzLDcgQEAKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldApAQCAtNDgzLDYgKzUxNyw3IEBACiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1MCw2ICs1ODUsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC02NTksNyArNjk1LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg0LDYgKzcyMiw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTczMSw3ICs3NzAsNiBAQAogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTgxMywxMCArODUxLDExIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTgyOSw3ICs4NjgsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC04MzgsNyArODc2LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCmluZGV4IDAyNTkwZTEuLjNkODM0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODowMTo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MzE6MDkgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYwLDYgKzYyLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDIsNiArMTA1LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE5LDYgKzEyMyw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTMzLDYgKzEzOCwzNSBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE4OCw2ICsyMjIsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTIxMiw4ICsyNDcsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNDcsNyArMjgwLDYgQEAKICMKICMgQ09ORklHX1NIX1RJTUVSX1RNVSBpcyBub3Qgc2V0CiBDT05GSUdfU0hfVElNRVJfQ01UPXkKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfQ1BHPXkKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CkBAIC00MjksNiArNDYxLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTIwLDcgKzU1Myw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC01NzUsMTYgKzYwNywxOSBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC02NTAsMTAgKzY4NSwxMiBAQAogIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9eQorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtNzI1LDcgKzc2Miw3IEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtNzQzLDcgKzc4MCw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTc1Miw3ICs3ODgsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCmluZGV4IDhhZTY1ZDIuLmYyMmJlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgRnJpIFNlcCAyNSAxMTo1NDoyMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MzI6NTUgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYyLDYgKzY0LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDQsNiArMTA3LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIxLDYgKzEyNSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ4LDE0ICsxNTMsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjExLDYgKzI0Myw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjM1LDggKzI2OCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI3MCw3ICszMDEsNiBAQAogIwogIyBDT05GSUdfU0hfVElNRVJfVE1VIGlzIG5vdCBzZXQKIENPTkZJR19TSF9USU1FUl9DTVQ9eQotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQpAQCAtNTM0LDYgKzU2NCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CkBAIC01NjIsNiArNTk2LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjY4LDcgKzcwMyw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03MjMsMTYgKzc1NywxOSBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04NDcsMTAgKzg4NCwxMiBAQAogIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9eQorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTg3NSw2ICs5MTQsNyBAQAogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTkwNiw2ICs5NDYsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC05MjYsNyArOTY3LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtOTUzLDYgKzk5Niw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtMTAyNyw3ICsxMDcxLDcgQEAKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xMDQ1LDcgKzEwODksNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMDU0LDcgKzEwOTcsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCmluZGV4IGMyYTlhMzkuLjJhNDJkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODowNTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6MzU6MzEgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjAsNiArNjIsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk0LDYgKzk3LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTEzLDYgKzExNyw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTM5LDE0ICsxNDQsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjIyLDggKzI1NCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTMxMSw3ICszNDEsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIApAQCAtMzE5LDE0ICszNDgsMTIgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CiBDT05GSUdfUENNQ0lBX0lPQ1RMPXkKQEAgLTQ2MSw5ICs0ODgsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ5OCw2ICs1MjIsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC02MTgsOCArNjQ2LDExIEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNjUyLDcgKzY4Myw5IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKQEAgLTczMyw2ICs3NjYsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc4MSw4ICs4MTUsMTMgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04MDYsNiArODQ1LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTgxNSw2ICs4NTUsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtOTMzLDYgKzk3NCw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEzNzEsMTAgKzE0MTMsMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtMTM4Nyw4ICsxNDMwLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMzk3LDcgKzE0MzgsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKaW5kZXggZWMwYzBiNC4uZjJmMWY4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjA5OjU5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMTozNzowMSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2Miw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTQsNiArOTcsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTMsNiArMTE3LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzksMTQgKzE0NCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjIsOCArMjU0LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzExLDcgKzM0MSw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCkBAIC0zMjAsMTQgKzM0OSwxMiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci1DT05GSUdfUENNQ0lBX0RFQlVHPXkKIENPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CiBDT05GSUdfUENNQ0lBX0lPQ1RMPXkKQEAgLTQ1OSw5ICs0ODYsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ5Niw2ICs1MjAsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTU1OCw4ICs1ODYsMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC01OTMsNyArNjI0LDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtNjQ4LDE1ICs2ODEsMTYgQEAKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKQEAgLTczMiw2ICs3NjYsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc4MCw4ICs4MTUsMTIgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODA0LDYgKzg0Myw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04MTMsNiArODUzLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtOTMxLDYgKzk3Miw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwMjAsNyArMTA2Miw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTExOTUsMTAgKzEyMzksMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtMTIxMSw4ICsxMjU2LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC0xMjIxLDcgKzEyNjQsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCmluZGV4IDc5MDkxZTMuLmE3YTE2Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MTA6NDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjM3OjQyIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTMwLDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYzLDYgKzY0LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDIsNiArMTA0LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIwLDYgKzEyMyw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ2LDE0ICsxNTAsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI5LDggKzI2MCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI4Myw4ICszMTIsOCBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz02CiAjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKQEAgLTQxNiw5ICs0NDUsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUzNCw2ICs1NjAsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTYwNywxMSArNjM3LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02MzEsNiArNjYxLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjc1LDYgKzcwNiw3IEBACiBDT05GSUdfU0VSSU9fU0VSUE9SVD15CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY2LDYgKzc5OCw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTgyNCw3ICs4NTcsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC04OTgsNyArOTMzLDYgQEAKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtMTA3Miw5ICsxMTA2LDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhhNDQzMDAwMAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC0xMDg4LDcgKzExMTksMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKaW5kZXggNmJiNTk3Ni4uN2Q0M2ZhYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MTQ6MzUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDExOjQwOjQxIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjAsNiArNjIsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk4LDYgKzEwMSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNSw2ICsxMTksNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzNiwxNCArMTQxLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNSw4ICsyNTcsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNzIsOCArMzAyLDggQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0zMTIsNyArMzQyLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvaGRhMSIKQEAgLTQxMiw5ICs0NDEsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0Myw2ICs0NjksMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTUxNywxMSArNTQ3LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYxNiw2ICs2NDYsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC04MzUsMTAgKzg2NiwxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC04NTEsNyArODgzLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtODYwLDcgKzg5MSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCmluZGV4IDY1MDE4MjguLmQyYjE4MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjE3OjQxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMTo0MTo0MSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MSw2ICs2Myw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAwLDYgKzEwMyw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMSw2ICsxMjUsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0NywxNCArMTUyLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yNDAsOCArMjcyLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjc3LDcgKzMwNyw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKICMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldApAQCAtNDMzLDEwICs0NjIsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1NCw2ICs1NzksMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTU2Myw5ICs1OTIsMTEgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY0NiwxMSArNjc3LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NzAsNiArNzAxLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzc2LDcgKzgwOCw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzEsMTYgKzg2MiwxOSBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtODU3LDYgKzg5MSw4IEBACiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworQ09ORklHX0lSX0NPUkU9eQorQ09ORklHX1ZJREVPX0lSPXkKICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVI9eQogIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKQEAgLTg3Niw2ICs5MTIsNyBAQAogIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorQ09ORklHX1ZJREVPX0lSX0kyQz15CiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldApAQCAtODgzLDEwICs5MjAsMTMgQEAKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDExMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9SSjU0TjEgaXMgbm90IHNldAogQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwPXkKICMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYPXkKKyMgQ09ORklHX1NPQ19DQU1FUkFfT1Y5NjQwIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVPXkKICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CkBAIC0xMDA5LDEwICsxMDQ5LDEyIEBACiAjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR19TRVJJQUw9eQorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTEwNTEsNiArMTA5Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEwNzEsNyArMTExNCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwOTgsNiArMTE0Myw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtMTIwNiwxMCArMTI1MiwxMSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CkBAIC0xMjI5LDkgKzEyNzYsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTAwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI0MCw3ICsxMjg0LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCmluZGV4IDdmYzE5NTIuLmQ1MGMwMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODoyMDo1MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTE6NDU6MjUgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjksNiArMjksNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjMsNiArNjQsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDQsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjAsNiArMTIzLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDYsMTQgKzE1MCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjUsMTIgKzI1NiwxMCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjc5LDggKzMwOCw4IEBACiAjCiAjIERNQSBzdXBwb3J0CiAjCi1DT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTYKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIApAQCAtNDA5LDcgKzQzOCwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUyNSw2ICs1NjAsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldApAQCAtNTk1LDExICs2MzQsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYxOSw2ICs2NTgsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02NTcsNyArNjk3LDYgQEAKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0CiAKICMKQEAgLTcwNSw2ICs3NDQsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03NjQsNyArODA0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtNzg3LDYgKzgyOSw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODMzLDcgKzg3Niw2IEBACiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTk3Nyw5ICsxMDE5LDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhhNDAwMDE1MAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC05OTMsNyArMTAzMiwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKaW5kZXggOTAzYjAyMS4uZWZkYTYzZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjI0OjMxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzoxNjoxMyAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Myw2ICs2NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMCw2ICsxMTQsNyBAQAogQ09ORklHX1BFUkZfRVZFTlRTPXkKIENPTkZJR19FVkVOVF9QUk9GSUxFPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDYgKzEzMCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTM1LDYgKzE0MSw3IEBACiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTE1MSwxNCArMTU4LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI0NSw4ICsyNzksNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zNDIsNyArMzc0LDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC00NDksMTAgKzQ4MCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTM1LDcgKzU2Miw2IEBACiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNTczLDYgKzU5OSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01ODMsNiArNjEzLDcgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldApAQCAtNTkwLDYgKzYyMSw3IEBACiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02NDAsOCArNjcyLDExIEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNjc1LDcgKzcxMCw5IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQpAQCAtNzI4LDE1ICs3NjUsMTYgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9QTEFURk9STT15CkBAIC04MTMsNiArODUxLDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX1ZJQV9SSElORT1tCiBDT05GSUdfVklBX1JISU5FX01NSU89eQogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CkBAIC04NjIsOCArOTAxLDkgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTg3Nyw2ICs5MTcsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODg2LDYgKzkyNyw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTkyOCw2ICs5NzAsNyBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMDA4LDExICsxMDUxLDYgQEAKICMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CiAKICMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC0xMDIxLDcgKzEwNTksNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA2NSw2ICsxMTAyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC0xMTAzLDYgKzExNDEsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldApAQCAtMTExOCwxNSArMTE1NywxOCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC0xMjExLDYgKzEyNTMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC0xMjMxLDcgKzEyNzQsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNDM2LDYgKzE0ODEsOCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTE0NjIsNiArMTUwOSw3IEBACiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQEAgLTE0OTgsOSArMTU0Niw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC0xNTE0LDcgKzE1NTksMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKaW5kZXggMjdmZjQ2Yy4uZjRiMDA0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjI5OjIzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzoxOTozNSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKQEAgLTMyLDYgKzMzLDcgQEAKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTY3LDYgKzY5LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfVFJBQ0U9eQogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDYgKzEwNiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMCw2ICsxMTQsNyBAQAogQ09ORklHX1BFUkZfRVZFTlRTPXkKIENPTkZJR19FVkVOVF9QUk9GSUxFPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI2LDYgKzEzMSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTUzLDE0ICsxNTksNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQ4LDEzICsyODEsMTEgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjg5LDcgKzMyMCw2IEBACiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKQEAgLTM2Myw3ICszOTMsNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldApAQCAtNDcxLDEwICs1MDAsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUxMCw2ICs1MzUsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTIwLDYgKzU0OSw3IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKQEAgLTUyNyw2ICs1NTcsNyBAQAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc3LDggKzYwOCwxMSBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTYxMiw3ICs2NDYsOSBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKQEAgLTY2NSwxNSArNzAxLDE2IEBACiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQpAQCAtNzMwLDYgKzc2Nyw3IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzc2LDggKzgxNCw5IEBACiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC03OTEsNiArODMwLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTgwMCw2ICs4NDAsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04NDQsNiArODg1LDcgQEAKICMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTI1LDExICs5NjcsNiBAQAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTkzOCw3ICs5NzUsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTY5LDYgKzEwMDUsNyBAQAogIwogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCkBAIC0xMDExLDYgKzEwNDgsNyBAQAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTEwNTAsNiArMTA4OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKQEAgLTEwNjQsMTYgKzExMDMsMTkgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTIxMSw2ICsxMjUzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTIzMSw3ICsxMjc0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2Myw2ICsxNTA4LDcgQEAKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CkBAIC0xNDk5LDggKzE1NDUsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR180S1NUQUNLUz15CkBAIC0xNTE0LDcgKzE1NTgsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKaW5kZXggYzQwZGIxMi4uMmZjNjM1YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjM0OjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzoyMzoxMiAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01Niw2ICs1Nyw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTcsNiArOTksNyBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTA5LDYgKzExMiw3IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQorIyBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKIENPTkZJR19PUFJPRklMRT15CkBAIC0xMTcsNiArMTIxLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDIsMTQgKzE0Nyw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjQsNyArMjU2LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTEKIAogIwpAQCAtNDMzLDYgKzQ2NCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0OTksNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NDAsNiArNTc2LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNTk0LDcgKzYzMSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOCw2ICs2NTcsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTcxNyw3ICs3NTcsNyBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtNzQxLDcgKzc4MSw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTc1MCw3ICs3ODksMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiBDT05GSUdfQklOQVJZX1BSSU5URj15CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZwppbmRleCA1Y2FiZGIzLi4wMTY5ZTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MzU6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjIzOjU0IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTMwLDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYyLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDQsNiArMTA2LDcgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTEsMTEgKzExNCwxMyBAQAogQ09ORklHX1BFUkZfRVZFTlRTPXkKIENPTkZJR19FVkVOVF9QUk9GSUxFPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKKyMgQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9eQpAQCAtMTI0LDYgKzEyOSw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ5LDE0ICsxNTUsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjMxLDcgKzI2NCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0xCiAKICMKQEAgLTQyNCw5ICs0NTYsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUzOSw2ICs1NjgsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldApAQCAtNjEwLDExICs2NDMsMTIgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjQzLDYgKzY3Nyw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NDMsNiArNzc4LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKQEAgLTkxMCw2ICs5NDYsOCBAQAogIwogQ09ORklHX0xFRFNfR1BJTz15CiBDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTk1NSw3ICs5OTMsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC05NzgsNiArMTAxOCw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtMTEzNyw2ICsxMTc4LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFNfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUU19GUkVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFNfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfT0JKRUNUU19FTkFCTEVfREVGQVVMVD0xCiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xMjAzLDkgKzEyNDUsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZmU4MDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiBDT05GSUdfRFVNUF9DT0RFPXkKQEAgLTEyMTgsNyArMTI1NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKaW5kZXggNmYxMTI2Yi4uZmJhMWY2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6MzY6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjI1OjM2IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYzLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05NSw2ICs5OCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNyw2ICsxMjEsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MywxNCArMTQ4LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNiw4ICsyNTgsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zMjEsNyArMzUxLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCkBAIC0zMzAsNyArMzU5LDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC00MjksMTAgKzQ1Nyw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDY2LDYgKzQ5MCwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNDgyLDYgKzUxMCw3IEBACiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTUzMCw4ICs1NTksMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC01NjUsNyArNTk3LDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CkBAIC02MTgsMTUgKzY1MiwxNiBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKQEAgLTcwNCw2ICs3MzksNyBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03NTIsOCArNzg4LDEwIEBACiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTc3Niw2ICs4MTQsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNzg1LDYgKzgyNCw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04NjIsNyArOTAyLDEwIEBACiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX1NIX01TSU9GIGlzIG5vdCBzZXQKIENPTkZJR19TUElfU0hfU0NJPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC05MTUsMTAgKzk1OCwxMiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogQ09ORklHX01GRF9TTTUwMT15CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTEwNTUsNiArMTEwMCw3IEBACiAjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTM1QVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldApAQCAtMTMwOCw3ICsxMzU0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMzMyw2ICsxMzgxLDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtMTQ3NCwxMCArMTUyMywxMSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CkBAIC0xNDk3LDkgKzE1NDcsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUwOCw3ICsxNTU1LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKaW5kZXggOTIxNWJiYjEuLmE4ZDUzOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjM5OjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzoyNjozOSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MSw2ICs2Myw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTUsNiArOTgsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTcsNiArMTIxLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDMsMTQgKzE0OCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjYsOCArMjU4LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzIxLDcgKzM1MSw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDEwMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKICMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgpAQCAtMzMwLDcgKzM1OSw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQpAQCAtNDI5LDEwICs0NTcsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Miw2ICs1NzYsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTYsNyBAQAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02MTYsOCArNjQ1LDExIEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNjUxLDcgKzY4Myw5IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQpAQCAtNzA0LDE1ICs3MzgsMTYgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9QTEFURk9STT15CkBAIC03OTAsNiArODI1LDcgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtODM4LDggKzg3NCwxMCBAQAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04NjIsNiArOTAwLDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTg3MSw2ICs5MTAsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtOTQ4LDcgKzk4OCwxMCBAQAogIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwogIwogQ09ORklHX1NQSV9CSVRCQU5HPXkKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX1NIX1NDST15CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtMTAwMSwxMCArMTA0NCwxMiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogQ09ORklHX01GRF9TTTUwMT15CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTExNDEsNiArMTE4Niw3IEBACiAjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTM1QVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldApAQCAtMTM5NCw3ICsxNDQwLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQxOSw2ICsxNDY3LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtMTU2MSwxMCArMTYxMCwxMSBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CkBAIC0xNTg0LDkgKzE2MzQsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKLUNPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCi1DT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU5NSw3ICsxNjQyLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCmluZGV4IDA1NTUzNmIuLjE4NTliYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo0MDoyNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6Mjc6MjAgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjMsNiArNjUsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk5LDYgKzEwMiw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExOSw2ICsxMjMsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0NSwxNCArMTUwLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIzOSw4ICsyNzEsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yOTEsOSArMzIxLDkgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQogQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9MTIKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIApAQCAtMzM5LDcgKzM2OSw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CkBAIC0zNDcsNyArMzc2LDYgQEAKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKIENPTkZJR19QQ01DSUFfSU9DVEw9eQpAQCAtNDQ1LDYgKzQ3Myw3IEBACiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPXkKKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CkBAIC01MTUsOSArNTQ0LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01NTgsNiArNTg0LDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNjYzLDggKzY5MywxMSBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzMxLDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtNzUzLDE1ICs3ODgsMTYgQEAKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldApAQCAtODI3LDE0ICs4NjMsMjAgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODYxLDYgKzkwMyw3IEBACiBDT05GSUdfTkVUUE9MTD15CiAjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtODcwLDYgKzkxMyw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05MjIsNiArOTY2LDcgQEAKICMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwOSw2ICsxMDU0LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtMTUzNCw4ICsxNTgwLDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldApAQCAtMTU0OSw3ICsxNTkzLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZwppbmRleCAxY2QxNzc3Li40M2U2NzgwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjQ1OjI4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzozMDowMCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0zMCw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02NCw2ICs2NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMTcsNyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMiwxMSArMTI1LDEzIEBACiBDT05GSUdfUEVSRl9FVkVOVFM9eQogQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CisjIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKQEAgLTEzNSw2ICsxNDAsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE1NiwxOSArMTYyLDQ3IEBACiBDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQzLDcgKzI3Nyw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTUz0xCiAKICMKQEAgLTQzOCw5ICs0NzEsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1MSw2ICs1ODEsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNjA1LDExICs2MzksMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY4NSw2ICs3MTksNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03MzgsNyArNzczLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtNzYyLDYgKzc5OSw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtOTExLDYgKzk0OSw3IEBACiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQEAgLTk0Nyw3ICs5ODYsNiBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQpAQCAtOTYwLDcgKzk5OCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKaW5kZXggNTUzMTQ0NC4uZWM0OTRlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo0Njo1NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6MzA6NDEgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYzLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05OSw2ICsxMDIsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNyw2ICsxMjEsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEyNiw2ICsxMzEsNyBAQAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xNDIsMTQgKzE0OCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9ERUFETElORT15CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMjgsOCArMjYxLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjYzLDcgKzI5NCw2IEBACiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKICMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX0NQRz15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldApAQCAtNDEzLDkgKzQ0Myw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI1LDYgKzU1MiwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CkBAIC01ODUsOCArNjE2LDggQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYyOCw2ICs2NTksNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03MjQsNyArNzU2LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc1MywxNSArNzg0LDE4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTExNzMsMTAgKzEyMDcsMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtMTE4OSw5ICsxMjI0LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDAsNyArMTIzMiwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKaW5kZXggNjkyMWIxOS4uZWU4N2UyYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo1MDowNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6MzQ6MTUgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjksNiArMjksNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTQsNiArNTUsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTg0LDYgKzg2LDcgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC05NSwxMSArOTgsMTMgQEAKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMjAsMTQgKzEyNSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMDEsNyArMjMzLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19OT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTPTEKIAogIwpAQCAtNDAxLDYgKzQzMiwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTQzMiw2ICs0NjcsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01MDgsNiArNTQ0LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNTc1LDYgKzYxMiw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNjYxLDEwICs2OTksMTEgQEAKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtNjc3LDcgKzcxNiw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY4NSw3ICs3MjMsMTEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZwppbmRleCAzYWJiMDY4Li4wM2Y0MjE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE4OjUwOjUyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxMzozNDozNyAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01OSw2ICs2MCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTQsNiArOTYsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTEsNiArMTE0LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzYsMTQgKzE0MCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMTksOCArMjUwLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtNDAzLDkgKzQzMiw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTEwLDYgKzUzNiwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNTY0LDExICs1OTQsMTEgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTk4LDYgKzYyOCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTYyNSw2ICs2NTYsNyBAQAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02OTYsNiArNzI4LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNzY1LDYgKzc5OCw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTgwOSw3ICs4NDMsNiBAQAogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKICMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CkBAIC04NzcsMTAgKzkxMCwxMSBAQAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC04OTMsNyArOTI3LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTAxLDcgKzkzNCwxMSBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcKaW5kZXggMWE0M2NmZS4uY2ZhNTgxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo1MzozMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6NDQ6NTYgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjAsNiArNjEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk1LDYgKzk3LDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTMsNiArMTE2LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzgsMTQgKzE0Miw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjEsOCArMjUyLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtNDUyLDkgKzQ4MSw2IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01NjUsNiArNTkxLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKQEAgLTY3NSwxMSArNzA1LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTc1Nyw2ICs3ODcsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC04ODgsNyArOTE5LDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtMTAyMSw3ICsxMDUxLDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA2NCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKaW5kZXggYjhhM2M4Yy4uMjAxMjgzYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo1NzoxMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6NDY6NTggMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjksNiArMjksNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjEsNiArNjIsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMCw2ICsxMDIsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExOCw2ICsxMjEsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE0MywxNCArMTQ3LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNiw4ICsyNTcsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC00NTcsOSArNDg2LDYgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU3MCw2ICs1OTYsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldApAQCAtNjQyLDggKzY3Miw4IEBACiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY3Miw2ICs3MDIsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzY1LDYgKzc5Niw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwMjksNyArMTA2MSw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTExODYsNyArMTIxNyw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC0xMjAwLDcgKzEyMzAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnCmluZGV4IGQ3MDliN2YuLjRhNGVmZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTg6NTc6NDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjQ5OjE1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYzLDYgKzY1LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDIsNiArMTA1LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIyLDYgKzEyNiw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ5LDE0ICsxNTQsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTI0OCw4ICsyODAsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yODQsNyArMzE0LDYgQEAKICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQogIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKQEAgLTQzNiw5ICs0NjUsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2Nyw2ICs0OTMsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTU2MCwxMSArNTkwLDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTU4NCw2ICs2MTQsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MjIsNiArNjUzLDcgQEAKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY5NCw2ICs3MjYsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03NzQsNyArODA3LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtOTA2LDcgKzk0MSw3IEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTkyNCw4ICs5NTksNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTkzNCw3ICs5NjcsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjRfZGVmY29uZmlnCmluZGV4IDU2YjBiOWYuLmFiMzcxYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIEZyaSBTZXAgMjUgMTE6NTA6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE0OjM2OjU2IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Miw2ICs2NCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTksNiArMTAyLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE2LDYgKzEyMCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQyLDE0ICsxNDcsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjA1LDYgKzIzNyw3IEBACiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCiBDT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfUE1CX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMjI5LDggKzI2Miw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI2NSw3ICsyOTYsNiBAQAogIwogQ09ORklHX1NIX1RJTUVSX1RNVT15CiAjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKQEAgLTI3OSw4ICszMDksOCBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX1NIX0RNQT15CitDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz0xMgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC00MjMsOSArNDUzLDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01NTUsNiArNTgyLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01NjUsOSArNTk2LDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU3OCw2ICs2MTIsNyBAQAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTY3MiwxMSArNzA3LDEyIEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTcwNSw2ICs3NDEsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04MTMsNyArODUwLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTgyNyw3ICs4NjMsMTAgQEAKICMKIENPTkZJR19TUElfQklUQkFORz15CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0hfTVNJT0YgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtODg1LDExICs5MjQsMTMgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CkBAIC04OTcsNiArOTM4LDggQEAKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQogCkBAIC05MTMsNiArOTU2LDggQEAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCitDT05GSUdfSVJfQ09SRT15CitDT05GSUdfVklERU9fSVI9eQogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9UVU5FUj1tCiAjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldApAQCAtOTMyLDYgKzk3Nyw3IEBACiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15CitDT05GSUdfVklERU9fSVJfSTJDPXkKICMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CkBAIC05NDAsMTAgKzk4NiwxMyBAQAogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX1JKNTROMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWD15CisjIENPTkZJR19TT0NfQ0FNRVJBX09WOTY0MCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVT15CiBDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKICMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0CkBAIC05NjEsNiArMTAxMCw3IEBACiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMDIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CkBAIC05NzQsNiArMTAyNCw3IEBACiAjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVFYwNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldApAQCAtMTExMCw5ICsxMTYxLDExIEBACiBDT05GSUdfU05EX1NPQ19BRDE4MzY9bQogQ09ORklHX1NORF9TT0NfQUQxOTM4PW0KIENPTkZJR19TTkRfU09DX0FENzMzMTE9bQorQ09ORklHX1NORF9TT0NfQURTMTE3WD1tCiBDT05GSUdfU05EX1NPQ19BSzQxMDQ9bQogQ09ORklHX1NORF9TT0NfQUs0NTM1PW0KIENPTkZJR19TTkRfU09DX0FLNDY0Mj1tCitDT05GSUdfU05EX1NPQ19BSzQ2NzE9bQogQ09ORklHX1NORF9TT0NfQ1M0MjcwPW0KIENPTkZJR19TTkRfU09DX0wzPW0KIENPTkZJR19TTkRfU09DX1BDTTMwMDg9bQpAQCAtMTEyMSwxMSArMTE3NCwxNCBAQAogQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjM9bQogQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjY9bQogQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9bQorQ09ORklHX1NORF9TT0NfVExWMzIwREFDMzM9bQogQ09ORklHX1NORF9TT0NfVURBMTM0WD1tCiBDT05GSUdfU05EX1NPQ19VREExMzgwPW0KIENPTkZJR19TTkRfU09DX1dNODUxMD1tCiBDT05GSUdfU05EX1NPQ19XTTg1MjM9bQogQ09ORklHX1NORF9TT0NfV004NTgwPW0KK0NPTkZJR19TTkRfU09DX1dNODcxMT1tCitDT05GSUdfU05EX1NPQ19XTTg3Mjc9bQogQ09ORklHX1NORF9TT0NfV004NzI4PW0KIENPTkZJR19TTkRfU09DX1dNODczMT1tCiBDT05GSUdfU05EX1NPQ19XTTg3NTA9bQpAQCAtMTE0Myw2ICsxMTk5LDcgQEAKIENPTkZJR19TTkRfU09DX1dNODk5Mz1tCiBDT05GSUdfU05EX1NPQ19XTTkwODE9bQogQ09ORklHX1NORF9TT0NfTUFYOTg3Nz1tCitDT05GSUdfU05EX1NPQ19UUEE2MTMwQTI9bQogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQpAQCAtMTMxNiwxMCArMTM3MywxMiBAQAogQ09ORklHX1VTQl9HQURHRVRGUz1tCiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dfU0VSSUFMPW0KICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTEzNDUsNiArMTQwNCw3IEBACiAjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQorIyBDT05GSUdfTU1DX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC0xMzc2LDYgKzE0MzYsNyBAQAogQ09ORklHX1JUQ19EUlZfUENGODU2Mz15CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTQwNCw3ICsxNDY1LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU5Nyw3ICsxNjYwLDcgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTE2MTQsNyArMTY3Nyw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2MjMsNyArMTY4NSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKaW5kZXggN2JjOTI2Yy4uYjE1YTQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxODo1ODo1OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTQ6Mzk6MTAgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2Miw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTUsNiArOTgsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTMsNiArMTE3LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzgsMTQgKzE0Myw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMjEsOCArMjUzLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzA3LDcgKzMzNyw2IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAogIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCkBAIC00MDYsOSArNDM1LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MTMsNiArNTM5LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKQEAgLTYxNSwxMSArNjQ1LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTcyNiw2ICs3NTYsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC03ODUsNiArODE2LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05MTQsMTAgKzk0NiwxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC05MzAsNyArOTYzLDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM5LDcgKzk3MSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKaW5kZXggYzIwYWU1ZS4uZDFlZmZkZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOTowMTo0MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTQ6Mzk6NTYgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2Miw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTgsNiArMTAxLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTE2LDYgKzEyMCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQxLDE0ICsxNDYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI0LDggKzI1Niw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTMxMSw3ICszNDEsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAxMDAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMzg0MDAiCkBAIC00MzAsOSArNDU5LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MzcsNiArNTYzLDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC01OTEsMTEgKzYyMSwxMSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02OTMsNiArNzIzLDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNzU0LDYgKzc4NSw3IEBACiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTg2MywxMCArODk1LDExIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTg3OSw3ICs5MTIsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC04ODgsNyArOTIwLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwppbmRleCA4MmJhZWVmLi41ODUzM2Q1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjAzOjU5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNDo0MDozMiAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0zMCw2ICszMSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC01OSw2ICs2MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTIsNiArOTUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTAsNiArMTE0LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzYsMTQgKzE0MSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9ERUFETElORT15CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyMiw4ICsyNTQsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zMTMsNyArMzQzLDYgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19QQ0k9eQotQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVD15CiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CkBAIC00MDEsOSArNDMwLDYgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01MTcsNiArNTQzLDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTc0LDggKzYwNCwxMSBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC02MDgsNyArNjQxLDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CkBAIC02NDIsNiArNjc3LDggQEAKICMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKQEAgLTY1MCwxNCArNjg3LDE1IEBACiAjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKQEAgLTc0OCwxNCArNzg2LDE2IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTc3NCw2ICs4MTQsNyBAQAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03ODMsNiArODI0LDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4Myw2ICs5MjUsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMTQ5LDYgKzExOTIsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC0xMjg1LDcgKzEzMjksNyBAQAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKQEAgLTEzMDMsNyArMTM0Nyw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMTIsNyArMTM1NSwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZwppbmRleCBkZDBlODkwLi42NjZmZGUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MDc6MTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE0OjQxOjI1IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIxLDYgKzIxLDcgQEAKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMxLDYgKzMyLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTY0LDYgKzY2LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDIsNiArMTA1LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTI0LDYgKzEyOCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTUxLDE0ICsxNTYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM0LDggKzI2Niw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTMyMCw3ICszNTAsNiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwNDAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FX09WRVJXUklURT15CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIG1lbT02NE0gcm9vdD0vZGV2L25mcyIKQEAgLTMyOSw3ICszNTgsNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTQzMyw5ICs0NjEsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2OCw2ICs0OTMsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC01ODAsOCArNjA5LDExIEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNjE0LDcgKzY0Niw5IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02ODUsNiArNzE5LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03MzMsOCArNzY4LDkgQEAKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTc0OCw2ICs3ODQsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNzU3LDYgKzc5NCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4Niw2ICs5MjQsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMTQ5LDEwICsxMTg4LDExIEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQEAgLTExNzIsOCArMTIxMiw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4Miw3ICsxMjIwLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwppbmRleCA2NjIxNTZlLi4zNWEzYmVlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjExOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNDo0MzowNCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02MCw2ICs2MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtOTgsNiArMTAwLDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTYsNiArMTE5LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDIsMTQgKzE0Niw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9ERUFETElORT15CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyNSw4ICsyNTYsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC00NjAsOSArNDg5LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01NzEsNiArNTk3LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKQEAgLTYyMywxMSArNjUzLDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY0Nyw2ICs2NzcsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03MjUsNiArNzU2LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNzkyLDYgKzgyNCw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODM2LDcgKzg2OSw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTg5OSwxMCArOTMxLDExIEBACiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC05MTYsNyArOTQ5LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTI1LDcgKzk1NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IGUwNjcxOWEuLmEzMDU2YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjE0OjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNTowMzo0NSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNDksNyArNTEsNiBAQAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogCiAjCkBAIC01Nyw2ICs1OCw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtODAsMTEgKzgyLDkgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMTAwLDYgKzEwMCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTEyMCw2ICsxMjEsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzNiwxOSArMTM4LDQ4IEBACiBDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIwNCw2ICsyMzUsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTIyNSwxNyArMjU3LDEyIEBACiBDT05GSUdfU1BBUlNFTUVNPXkKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLQotIwotIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAotIworIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNjksNyArMjk2LDYgQEAKICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQogQ09ORklHX1NIX1RJTUVSX0NNVD15Ci1DT05GSUdfU0hfUENMS19GUkVRPTQxNjY2NjY2CiBDT05GSUdfU0hfQ0xLX0NQRz15CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CkBAIC0zODgsNiArNDE0LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNDc2LDcgKzUwNiw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC01MDUsMTUgKzUzNCwxOCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC01NjEsNiArNTkzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtNTgxLDcgKzYxNCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTYwOCw2ICs2NDMsNyBAQAogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTY3NSwxMSArNzExLDEwIEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQEAgLTY5OSw3ICs3MzQsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC03MDcsNyArNzQxLDExIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzYzcmRwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCmluZGV4IDE5NGZmNzAuLjA0Yjg0MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MTU6MzcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjA1OjI5IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTksNiArNjEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMyw2ICsxMDYsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjQsNiArMTI4LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNTAsMTQgKzE1NSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMTEsNiArMjQzLDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTIzNyw4ICsyNzAsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC00MjEsMTAgKzQ1Miw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTA5LDcgKzUzNiw2IEBACiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTQyLDYgKzU2OCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CkBAIC02NDAsMTEgKzY3MCwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NzMsNiArNzA0LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzU2LDYgKzc4OCw3IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTk0OSw2ICs5ODIsNyBAQAogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTExMjksMTAgKzExNjMsMTEgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpAQCAtMTE1Miw3ICsxMTg3LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE2MSw3ICsxMTk1LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKaW5kZXggMzRiZWQ1NS4uN2IyNDcwNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MTc6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjA2OjI4IDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjksNiArMzAsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNDgsNyArNTAsNiBAQAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogCiAjCkBAIC01Niw2ICs1Nyw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtNzksMTEgKzgxLDkgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtOTksNiArOTksNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMTksNiArMTIwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMzUsMTkgKzEzNyw0OCBAQAogQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DR1JPVVAgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0NGUV9HUk9VUF9JT1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0yMDEsNiArMjMyLDcgQEAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKIENPTkZJR18yOUJJVD15CisjIENPTkZJR19QTUJfRU5BQkxFIGlzIG5vdCBzZXQKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTIyMSwxNyArMjUzLDEyIEBACiBDT05GSUdfU1BBUlNFTUVNPXkKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLQotIwotIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAotIworIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zNzksNiArNDA2LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNDY3LDcgKzQ5OCw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC00OTYsMTUgKzUyNiwxOCBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC01NTIsNiArNTg1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtNTcyLDcgKzYwNiw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTU5OSw2ICs2MzUsNyBAQAogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTY2NiwxMSArNzAzLDEwIEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQEAgLTY5MCw3ICs3MjYsNiBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCkBAIC02OTgsNyArNzMzLDExIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCmluZGV4IDUxY2JhZWQuLjgzMzA4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIEZyaSBTZXAgMjUgMTE6Mzk6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjA3OjQwIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQpAQCAtMzEsNiArMzIsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjQsNiArNjYsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMyw2ICsxMDYsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjYsNiArMTMwLDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNTMsMTQgKzE1OCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI1Myw4ICsyODUsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yODcsNyArMzE3LDYgQEAKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9USU1FUl9UTVU9eQotQ09ORklHX1NIX1BDTEtfRlJFUT01MDAwMDAwMAogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQpAQCAtMzYwLDcgKzM4OSw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CkBAIC00NzAsMTAgKzQ5OCw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTg4LDYgKzYxMiwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC02ODgsMTUgKzcxNiwxNiBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldApAQCAtNzc3LDYgKzgwNiw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC03ODYsNiArODE2LDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg0MSw2ICs4NzIsNyBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MjQsMTEgKzk1Niw2IEBACiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKIENPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKQEAgLTkzNyw3ICs5NjQsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTg2LDE1ICsxMDEyLDE4IEBACiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC0xMTI5LDYgKzExNTgsNyBAQAogIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzNUFVRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKQEAgLTEzNjMsNiArMTM5Myw3IEBACiAjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTM5Nyw2ICsxNDI4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTQxNyw3ICsxNDQ5LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYyMiwxMyArMTY1NiwxNCBAQAogQ09ORklHX1NDSEVEU1RBVFM9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKIENPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlRSQUNFX05NSV9FTlRFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKQEAgLTE2MzcsNiArMTY3Miw3IEBACiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRlRSQUNFX05NSV9FTlRFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKIENPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKQEAgLTE2NjgsNyArMTcwNCw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFdBUkZfVU5XSU5ERVI9eQogQ09ORklHX01DT1VOVD15CiAKQEAgLTE2NzgsNyArMTcxMywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKaW5kZXggOGMyYzQ3ZS4uZjE5NmU4NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOToyMzoxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MDk6MDkgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0zMSw2ICszMiw3IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQogCkBAIC02Myw2ICs2NSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMTAzLDEyICsxMDYsMTQgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogQ09ORklHX1BFUkZfRVZFTlRTPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTIzLDYgKzEyOCw3IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIApAQCAtMTQ5LDE0ICsxNTUsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMzcsOCArMjcwLDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMjcxLDcgKzMwMiw2IEBACiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVElNRVJfVE1VPXkKLUNPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldApAQCAtMzI5LDcgKzM1OSw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQpAQCAtNDMzLDEwICs0NjIsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Miw2ICs1NzcsMTAgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTY1MiwxNSArNjgxLDE2IEBACiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CkBAIC03MTksOCArNzQ5LDEwIEBACiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTc0Myw2ICs3NzUsNyBAQAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIApAQCAtNzUyLDYgKzc4NSw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04NzQsMTEgKzkwOCw2IEBACiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKIENPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKQEAgLTg4Nyw3ICs5MTYsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTE2LDE1ICs5NDQsMTggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTEyMDUsNiArMTIzNiw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEyMjUsNyArMTI1Nyw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0ODQsNyArMTUxOCw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC0xNDk4LDcgKzE1MzEsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwppbmRleCA5MjExNWU2Li40NTQ0MWMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOToyNzoxNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MTA6MDkgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjgsNiArMjgsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTcsNiArNTgsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTg4LDYgKzkwLDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMDUsNiArMTA4LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xMjQsMTQgKzEyOCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0yMDcsOCArMjM4LDYgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIApAQCAtMzg3LDkgKzQxNiw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNDk1LDYgKzUyMSwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKQEAgLTU0NiwxMSArNTc2LDExIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTYyOSw2ICs2NTksNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC02ODgsNiArNzE5LDcgQEAKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC03MzEsNyArNzYzLDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc5NCw2ICs4MjUsNyBAQAogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtODA2LDggKzgzOCw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTgxNSw3ICs4NDUsMTEgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKaW5kZXggZTM4NThkNy4uZWNmNTBjZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjI5OjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNToxMDo0NSAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMiw2ICsyMiw3IEBACiBDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0zMiw2ICszMyw4IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfQ09IRVJFTlQ9eQorIyBDT05GSUdfRE1BX05PTkNPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjYsNiArNjksNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMjEsNiArMTI1LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTI4LDYgKzEzMyw3IEBACiBDT05GSUdfUEVSRl9FVkVOVFM9eQogQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKQEAgLTE0Myw2ICsxNDksNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQpAQCAtMTY2LDE5ICsxNzMsNDggQEAKIENPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CitDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIzMyw2ICsyNjksNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKIENPTkZJR19OVU1BPXkKQEAgLTI3MSwxMCArMzA4LDkgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCi1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TQ0hFRF9NQz15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgpAQCAtNDQ5LDYgKzQ4NSw3IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD1tCisjIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAogQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldApAQCAtNDk2LDcgKzUzMywxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUyMiw2ICs1NjUsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUzMiw5ICs1NzksMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI0LDExICs2NzQsMTIgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzI2LDcgKzc3Nyw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03NDAsNyArNzkwLDEwIEBACiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0hfTVNJT0YgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtNzgxLDE1ICs4MzQsMTYgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtOTI0LDEwICs5NzgsMTIgQEAKICMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtOTY1LDYgKzEwMjEsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CkBAIC05OTMsNyArMTA1MCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNDQsOCArMTMwMyw2IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15Ci0jIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CkBAIC0xMjU4LDcgKzEzMTUsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwppbmRleCBjYjkxOWEwLi45ODM1MmQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOTozMzowMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MTQ6MTggMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfVE1VPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMzAsNiArMzEsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNTksNiArNjEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTk3LDYgKzEwMCw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExNSw2ICsxMTksNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzNiwxNCArMTQxLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIxOSw4ICsyNTEsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yNzIsOSArMzAyLDkgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQogQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0zMTMsNyArMzQzLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKQEAgLTMyMSw3ICszNTAsNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci1DT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKQEAgLTQwNyw5ICs0MzUsNiBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNCw2ICs1NDksMTAgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNjE2LDYgKzY0NSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldApAQCAtNjIzLDggKzY1Myw5IEBACiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02MzcsNiArNjY4LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTY0Niw2ICs2NzgsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03MjgsNiArNzYxLDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNzg3LDcgKzgyMSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTgxMiw2ICs4NDgsNyBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC05MTUsMTAgKzk1MiwxMSBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CkBAIC05MzEsNyArOTY5LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtOTQwLDcgKzk3NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKaW5kZXggYjlmZTk2MC4uNzI5ODJlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQotIyBUaHUgU2VwIDI0IDE5OjM1OjAzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgTW9uIEphbiAgNCAxNToxNDo1MCAyMDEwCiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0yMCw2ICsyMCw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTU2LDYgKzU4LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC05NCw2ICs5Nyw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKQEAgLTExMiw2ICsxMTYsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTEzOCwxNCArMTQzLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyMSw4ICsyNTMsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0zMTAsNyArMzQwLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKQEAgLTM0OSw2ICszNzgsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEwMjQKQEAgLTM5MCw2ICs0MjMsNyBAQAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC00NTgsNiArNDkyLDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtNTE3LDYgKzU1Miw3IEBACiAjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNjA5LDEwICs2NDUsMTEgQEAKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQpAQCAtNjI1LDcgKzY2Miw2IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTYzNCw3ICs2NzAsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKaW5kZXggMmNhNzllZC4uNzhjMjU3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCi0jIFRodSBTZXAgMjQgMTk6MzY6MzYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDE1OjE3OjIwIDIwMTAKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTIwLDYgKzIwLDcgQEAKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTMwLDYgKzMxLDcgQEAKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKQEAgLTYxLDYgKzYzLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMDEsNiArMTA0LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKIAogIwogIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwpAQCAtMTIwLDEzICsxMjQsMTQgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTE0NiwxNCArMTUxLDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTIyOSw4ICsyNjEsNiBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCkBAIC0yODIsOSArMzEyLDkgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLUNPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQogQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQorQ09ORklHX1NIX0RNQV9BUEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0zMjMsNyArMzUzLDYgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA5ZTAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQogIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwTjgxIHJvb3Q9L2Rldi9uZnMgaXA9Ojo6OjpldGgxOmF1dG9jb25mIHJ3IgpAQCAtMzMyLDcgKzM2MSw2IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfUENJPXkKLUNPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQpAQCAtNDI1LDYgKzQ1Myw3IEBACiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1NJVD1tCisjIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAogQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPXkKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKQEAgLTYxNCwxMCArNjQzLDYgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLSMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKQEAgLTc0Myw2ICs3NjgsMTEgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTgwNyw4ICs4MzcsMTEgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CkBAIC04NDEsNyArODc0LDkgQEAKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NzAsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTk4Myw4ICsxMDE5LDEwIEBACiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTEwMzMsNiArMTA3MSw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC0xMDQyLDYgKzEwODEsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC0xMTcyLDYgKzEyMTIsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TSF9NT0JJTEVfU0RISSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xNDA5LDcgKzE0NTAsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNjY0LDYgKzE3MDcsNyBAQAogIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQpAQCAtMTY5MSw3ICsxNzM1LDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKQEAgLTE3MDUsNyArMTc0OCwxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKaW5kZXggYjAxMmNhNy4uNGZhMDNiZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOTo0MjozMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6MTg6NTMgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQpAQCAtMzEsNiArMzIsNyBAQAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjMsNiArNjUsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEwMiw2ICsxMDUsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQogCiAjCiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCkBAIC0xMjIsNiArMTI2LDcgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCkBAIC0xNDgsMTQgKzE1Myw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMjQ3LDggKzI3OSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTI4MCw3ICszMTAsNiBAQAogIwogQ09ORklHX1NIX1RJTUVSX1RNVT15CiAjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAotQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC00MzUsMTQgKzQ2NCwxNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dFWFRfQ09SRT15CitDT05GSUdfV0VYVF9QUk9DPXkKK0NPTkZJR19XRVhUX1NQWT15CiBDT05GSUdfQ0ZHODAyMTE9eQogIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiBDT05GSUdfTElCODAyMTE9bQogIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldApAQCAtNTU5LDYgKzU5MSwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNTc2LDYgKzYxMiw3IEBACiAjIEVFUFJPTSBzdXBwb3J0CiAjCiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTY1MywzMCArNjkwLDI5IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLUNPTkZJR19MSUJFUlRBUz1tCi0jIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTX1NESU89bQotQ09ORklHX0xJQkVSVEFTX0RFQlVHPXkKICMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBUz1tCisjIENPTkZJR19MSUJFUlRBU19VU0IgaXMgbm90IHNldAorQ09ORklHX0xJQkVSVEFTX1NESU89bQorQ09ORklHX0xJQkVSVEFTX0RFQlVHPXkKKyMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV00gaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTcxOCw2ICs3NTQsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04MTAsNiArODQ3LDcgQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTUxLDYgKzk4OSw3IEBACiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTEzMyw3ICsxMTcyLDcgQEAKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApAQCAtMTE1MCw3ICsxMTg5LDYgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1OSw3ICsxMTk3LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCmluZGV4IDlmOGFlZTUuLjIzYmRhMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKLSMgVGh1IFNlcCAyNCAxOTo0NjoxMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTU6Mjc6NTMgMjAxMAogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjAsNiArMjAsNyBAQAogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CkBAIC0zMiw2ICszMyw4IEBACiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKK0NPTkZJR19ETUFfQ09IRVJFTlQ9eQorIyBDT05GSUdfRE1BX05PTkNPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiBDT05GSUdfQ09OU1RSVUNUT1JTPXkKIApAQCAtNjYsNiArNjksNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTEyMCwxMiArMTI0LDE0IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CiAKICMKICMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKIENPTkZJR19QRVJGX0VWRU5UUz15CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTE0MCw2ICsxNDYsNyBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKQEAgLTE2MiwxOSArMTY5LDQ4IEBACiBDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTIyOSw2ICsyNjUsNyBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAogQ09ORklHXzI5QklUPXkKKyMgQ09ORklHX1BNQl9FTkFCTEUgaXMgbm90IHNldAogIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKICMgQ09ORklHX05VTUEgaXMgbm90IHNldApAQCAtMjYzLDggKzMwMCw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKQEAgLTM1Niw3ICszOTEsNiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX1BDST15Ci0jIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1BDSUVQT1JUQlVTPXkKIENPTkZJR19QQ0lFQUVSPXkKICMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0CkBAIC00NjksMTAgKzUwMyw2IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAotIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwpAQCAtNTg4LDYgKzYxOCwxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNjg4LDE1ICs3MjIsMTYgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTc4Nyw2ICs4MjIsNyBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTgxOCw4ICs4NTQsMTAgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODQyLDYgKzg4MCw3IEBACiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04NTEsNiArODkwLDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTk3NiwxMSArMTAxNiw2IEBACiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKIENPTkZJR19JMkNfUENBX1BMQVRGT1JNPXkKQEAgLTk4OSw3ICsxMDI0LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMjAsNiArMTA1NCw3IEBACiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKQEAgLTEwNjIsNiArMTA5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtMTEwMSw2ICsxMTM3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQpAQCAtMTExNiwxNiArMTE1MywxOSBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogQ09ORklHX01GRF9TTTUwMT15CiAjIENPTkZJR19NRkRfU001MDFfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTExMzksNiArMTE3OSw4IEBACiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworQ09ORklHX0lSX0NPUkU9eQorQ09ORklHX1ZJREVPX0lSPXkKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTE0MTcsNiArMTQ1OSw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTE0MzcsNyArMTQ4MCw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NjYsNyArMTUxMSw2IEBACiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldApAQCAtMTY4Nyw5ICsxNzMxLDYgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmViMDAwMAotQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CkBAIC0xNzAzLDcgKzE3NDQsMTEgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCAwNGFkMGUxLi4wNzM3M2EwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLmgKQEAgLTE5LDkgKzE5LDExIEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLmg+CiAKICNpZmRlZiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTCi0jICBkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUyAgIChDT05GSUdfTlJfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJKENPTkZJR19OUl9ETUFfQ0hBTk5FTFMpCisjZWxpZiBkZWZpbmVkKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQogI2Vsc2UKLSMgIGRlZmluZSBNQVhfRE1BX0NIQU5ORUxTICAgKENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTKQorIyAgZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJMAogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWV4LmgKaW5kZXggYjU1NmQ0OS4uMThiZjA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGltZXguaApAQCAtNiw3ICs2LDE3IEBACiAjaWZuZGVmIF9fQVNNX1NIX1RJTUVYX0gKICNkZWZpbmUgX19BU01fU0hfVElNRVhfSAogCisvKgorICogT25seSBwYXJ0cyB1c2luZyB0aGUgbGVnYWN5IENQRyBjb2RlIGZvciB0aGVpciBjbG9jayBmcmFtZXdvcmsKKyAqIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gZGVmaW5lIHRoZWlyIG93biBQY2xrIHZhbHVlLiBJZiBwcm92aWRlZCwgdGhpcworICogY2FuIGJlIHVzZWQgZm9yIGFjY3VyYXRlbHkgc2V0dGluZyBDTE9DS19USUNLX1JBVEUsIG90aGVyd2lzZSB3ZQorICogc2ltcGx5IGZhbGwgYmFjayBvbiB0aGUgaTgyNTMgUElUIHZhbHVlLgorICovCisjaWZkZWYgQ09ORklHX1NIX1BDTEtfRlJFUQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShDT05GSUdfU0hfUENMS19GUkVRIC8gNCkgLyogVW5kZXJseWluZyBIWiAqLworI2Vsc2UKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMTkzMTgwCisjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RpbWV4Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKaW5kZXggZjA4ODZiYy4uYzRlZDY2MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKQEAgLTE5LDEwICsxOSwxMCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLwotI2RlZmluZSBETVRFNF9JUlEJNDAJLyogRE1BQzBCICovCi0jZGVmaW5lIERNVEU2X0lSUQk0MgotI2RlZmluZSBETVRFOF9JUlEJNzYJLyogRE1BQzFBICovCi0jZGVmaW5lIERNVEU5X0lSUQk3NworI2RlZmluZSBETVRFNF9JUlEJNzYJLyogRE1BQzBCICovCisjZGVmaW5lIERNVEU2X0lSUQk0MAorI2RlZmluZSBETVRFOF9JUlEJNDIJLyogRE1BQzFBICovCisjZGVmaW5lIERNVEU5X0lSUQk0MwogI2RlZmluZSBETVRFMTBfSVJRCTcyCS8qIERNQUMxQiAqLwogI2RlZmluZSBETVRFMTFfSVJRCTczCiAjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKaW5kZXggYTUyZjM1MS4uZDMyZjk2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMKQEAgLTIzLDkgKzIzLDIzIEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyNC5oPgogCisvKiBETUEgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IFNIRE1BX0RNQU9SMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiAvKiBTZXJpYWwgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMDAwMDAsCkBAIC02NDksNiArNjYzLDcgQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKKwkmZG1hX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCBlZjI2ZWJkLi5mNjg1YjliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMjk0LDYgKzI5NSwxOCBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0bXU1X3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgPSAoU0hETUFfTUlYX0lSUSB8IFNIRE1BX0RNQU9SMSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4NV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCkBAIC0zMDcsNiArMzIwLDcgQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKKwkmZG1hX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc4NV9kZXZpY2VzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMgYi9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKaW5kZXggYWFmZjAwMy4uNmIzZDcwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwpAQCAtNjIsNiArNjIsNyBAQAogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCisJCXNldF9ibF9iaXQoKTsKIAkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQkJY3B1X3NsZWVwKCk7CkBAIC02OSw2ICs3MCw3IEBACiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CisJCWNsZWFyX2JsX2JpdCgpOwogCX0gZWxzZQogCQlwb2xsX2lkbGUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCAwZTdiYThlLi45ODZhNzFiIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC04Miw4ICs4Miw3IEBACiAKIGNvbmZpZyBQTUJfRU5BQkxFCiAJYm9vbCAiU3VwcG9ydCAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB0aHJvdWdoIFBNQiIKLQlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEKLQlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEgJiYgIUNQVV9TSDRBTF9EU1AKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCiAJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKQEAgLTk2LDcgKzk1LDcgQEAKIAogY29uZmlnIFBNQgogCWJvb2wgIlBNQiIKLQlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEgJiYgIUNQVV9TSDRBTF9EU1AKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCiAJICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKQEAgLTEwNCw3ICsxMDMsNyBAQAogCiBjb25maWcgUE1CX0ZJWEVECiAJYm9vbCAiZml4ZWQgUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QQorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAogCXNlbGVjdCAzMkJJVAogCWhlbHAKIAkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGZpeGVkIFBNQiBtYXBwaW5ncyBhcmUgaW5oZXJpdGVkCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggZTk0MTVkMy4uYjg2MDdmYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMTMzLDEyICsxMzMsOCBAQAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCWlmIChwZm5fdmFsaWQocGZuKSkgewogCQlpbnQgZGlydHkgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpOwotCQlpZiAoZGlydHkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKLQotCQkJaWYgKHBhZ2VzX2RvX2FsaWFzKGFkZHIsIGFkZHJlc3MgJiBQQUdFX01BU0spKQotCQkJCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKCh2b2lkICopYWRkciwgUEFHRV9TSVpFKTsKLQkJfQorCQlpZiAoZGlydHkpCisJCQlfX2ZsdXNoX3B1cmdlX3JlZ2lvbihwYWdlX2FkZHJlc3MocGFnZSksIFBBR0VfU0laRSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYyBiL2FyY2gvc3BhcmMva2VybmVsL25taS5jCmluZGV4IGYzMGY0YTEuLmQyNDJhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL25taS5jCkBAIC05Niw3ICs5Niw2IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOwotCXBjcl9vcHMtPndyaXRlKFBDUl9QSUNfUFJJVik7CiAKIAlsb2NhbF9jcHVfZGF0YSgpLl9fbm1pX2NvdW50Kys7CiAKQEAgLTEwNSw2ICsxMDQsOCBAQAogCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCAwLAogCQkgICAgICAgcHRfcmVnc190cmFwX3R5cGUocmVncyksIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCiAJCXRvdWNoZWQgPSAxOworCWVsc2UKKwkJcGNyX29wcy0+d3JpdGUoUENSX1BJQ19QUklWKTsKIAogCXN1bSA9IGtzdGF0X2lycXNfY3B1KDAsIGNwdSk7CiAJaWYgKF9fZ2V0X2NwdV92YXIobm1pX3RvdWNoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGZhNTkzNmUuLjE5OGZiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTk4Niw2ICs5ODYsMTcgQEAKIAlkYXRhLmFkZHIgPSAwOwogCiAJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJLyogSWYgdGhlIFBNVSBoYXMgdGhlIFRPRSBJUlEgZW5hYmxlIGJpdHMsIHdlIG5lZWQgdG8gZG8gYQorCSAqIGR1bW15IHdyaXRlIHRvIHRoZSAlcGNyIHRvIGNsZWFyIHRoZSBvdmVyZmxvdyBiaXRzIGFuZCB0aHVzCisJICogdGhlIGludGVycnVwdC4KKwkgKgorCSAqIERvIHRoaXMgYmVmb3JlIHdlIHBlZWsgYXQgdGhlIGNvdW50ZXJzIHRvIGRldGVybWluZQorCSAqIG92ZXJmbG93IHNvIHdlIGRvbid0IGxvc2UgYW55IGV2ZW50cy4KKwkgKi8KKwlpZiAoc3BhcmNfcG11LT5pcnFfYml0KQorCQlwY3Jfb3BzLT53cml0ZShjcHVjLT5wY3IpOworCiAJZm9yIChpZHggPSAwOyBpZHggPCBNQVhfSFdFVkVOVFM7IGlkeCsrKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwogCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggM2IyYTVhYy4uY2JjYmZkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC00OSw3ICs0OSwxMCBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVAorCXNlbGVjdCBQRVJGX0VWRU5UUworCXNlbGVjdCBBTk9OX0lOT0RFUwogCXNlbGVjdCBIQVZFX0FSQ0hfS01FTUNIRUNLCiAJc2VsZWN0IEhBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVIKIApAQCAtMTI0NCw2ICsxMjQ3LDExIEBACiAJZGVmX2Jvb2wgWDg2XzY0CiAJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRwogCitjb25maWcgSUxMRUdBTF9QT0lOVEVSX1ZBTFVFCisgICAgICAgaGV4CisgICAgICAgZGVmYXVsdCAwIGlmIFg4Nl8zMgorICAgICAgIGRlZmF1bHQgMHhkZWFkMDAwMDAwMDAwMDAwIGlmIFg4Nl82NAorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBISUdIUFRFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IDA4ZTQ0MmIuLmYyMGRkZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0zOTYsNyArMzk2LDcgQEAKIAogY29uZmlnIFg4Nl9DTVBYQ0hHNjQKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAhTTM4NiAmJiAhTTQ4NgorCWRlcGVuZHMgb24gWDg2X1BBRSB8fCBYODZfNjQgfHwgTUNPUkUyIHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1BVE9NCiAKICMgdGhpcyBzaG91bGQgYmUgc2V0IGZvciBhbGwgLW1hcmNoPS4uIG9wdGlvbnMgd2hlcmUgdGhlIGNvbXBpbGVyCiAjIGdlbmVyYXRlcyBjbW92LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGY4ZWQwNjUuLmZiYjQ3ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsMTEgKzQsMTIgQEAKICMgY3JlYXRlIGEgY29tcHJlc3NlZCB2bWxpbnV4IGltYWdlIGZyb20gdGhlIG9yaWdpbmFsIHZtbGludXgKICMKIAotdGFyZ2V0cyA6PSB2bWxpbnV4LmxkcyB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCit0YXJnZXRzIDo9IHZtbGludXgubGRzIHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgdm1saW51eC5iaW4ubHpvIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIEtCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgogS0JVSUxEX0NGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZlBJQwogS0JVSUxEX0NGTEFHUyArPSAtRERJU0FCTEVfQlJBTkNIX1BST0ZJTElORworY2ZsYWdzLSQoQ09ORklHX1g4Nl8zMikgOj0gLW1hcmNoPWkzODYKIGNmbGFncy0kKENPTkZJR19YODZfNjQpIDo9IC1tY21vZGVsPXNtYWxsCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLWZmcmVlc3RhbmRpbmcpCkBAIC00OCwxMCArNDksMTMgQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIAogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKQk6PSBnegogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikJOj0gYnoyCiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpCTo9IGx6bWEKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpPKSAJOj0gbHpvCiAKIHF1aWV0X2NtZF9ta3BpZ2d5ID0gTUtQSUdHWSAkQAogICAgICAgY21kX21rcGlnZ3kgPSAkKG9iaikvbWtwaWdneSAkPCA+ICRAIHx8ICggcm0gLWYgJEAgOyBmYWxzZSApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA4NDJiMmEzLi4zYjIyZmU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTE2Miw2ICsxNjIsMTAgQEAKICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk8KKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6by5jIgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHNjcm9sbCh2b2lkKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDYwZDJiMmQuLjU2ZjQ2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTE0Miw2ICsxNDIsMzIgQEAKIAkJcmV0dXJuIG1heF9jc3RhdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19hY3BpX3BkYyh2b2lkKQoreworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKKwlyZXR1cm4gKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAorCQljLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQ0VOVEFVUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2FjcGlfc2V0X3BkY19iaXRzKHUzMiAqYnVmKQoreworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKKworCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19DX0NBUEFCSUxJVFlfU01QOworCisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKKwkJYnVmWzJdIHw9IEFDUElfUERDX0VTVF9DQVBBQklMSVRZX1NXU01QOworCisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQUNQSSkpCisJCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19UX0ZGSDsKKworCS8qCisJICogSWYgbXdhaXQvbW9uaXRvciBpcyB1bnN1cHBvcnRlZCwgQzIvQzNfRkZIIHdpbGwgYmUgZGlzYWJsZWQKKwkgKi8KKwlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTVdBSVQpKQorCQlidWZbMl0gJj0gfihBQ1BJX1BEQ19DX0MyQzNfRkZIKTsKK30KKwogI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCiAKICNkZWZpbmUgYWNwaV9sYXBpYyAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNjEzNzAwZi4uNjM3ZTFlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMTUzLDYgKzE1Myw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NTRTUJKDYqMzIrMTEpIC8qIFNTRS01ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NLSU5JVAkoNiozMisxMikgLyogU0tJTklUL1NUR0kgaW5zdHJ1Y3Rpb25zICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1dEVAkJKDYqMzIrMTMpIC8qIFdhdGNoZG9nIHRpbWVyICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05PREVJRF9NU1IJKDYqMzIrMTkpIC8qIE5vZGVJZCBNU1IgKi8KIAogLyoKICAqIEF1eGlsaWFyeSBmbGFnczogTGludXggZGVmaW5lZCAtIEZvciBmZWF0dXJlcyBzY2F0dGVyZWQgaW4gdmFyaW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCAwOGM0OGE4Li5lZWFjODI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTAzLDcgKzEwMyw4IEBACiBleHRlcm4gdm9pZCBzZW5kX2NsZWFudXBfdmVjdG9yKHN0cnVjdCBpcnFfY2ZnICopOwogCiBzdHJ1Y3QgaXJxX2Rlc2M7Ci1leHRlcm4gdW5zaWduZWQgaW50IHNldF9kZXNjX2FmZmluaXR5KHN0cnVjdCBpcnFfZGVzYyAqLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2V0X2Rlc2NfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICosIGNvbnN0IHN0cnVjdCBjcHVtYXNrICosCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpkZXN0X2lkKTsKIGV4dGVybiBpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IGRldmZuLCBpbnQgcGluLCBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqaXJxX2F0dHIpOwogZXh0ZXJuIHZvaWQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggOTUwZGY0My4uZjQ2Yjc5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTI1NCw2ICsyNTQsMTAgQEAKIAlfX3U4IHJlc2VydmVkWzMxXTsKIH07CiAKKy8qIFdoZW4gc2V0IGluIGZsYWdzLCBpbmNsdWRlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9uIEtWTV9TRVRfVkNQVV9FVkVOVFMgKi8KKyNkZWZpbmUgS1ZNX1ZDUFVFVkVOVF9WQUxJRF9OTUlfUEVORElORwkweDAwMDAwMDAxCisjZGVmaW5lIEtWTV9WQ1BVRVZFTlRfVkFMSURfU0lQSV9WRUNUT1IJMHgwMDAwMDAwMgorCiAvKiBmb3IgS1ZNX0dFVC9TRVRfVkNQVV9FVkVOVFMgKi8KIHN0cnVjdCBrdm1fdmNwdV9ldmVudHMgewogCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDRmZmUwOWIuLjFjZDU4Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIE1TUl9GU19CQVNFCQkweGMwMDAwMTAwIC8qIDY0Yml0IEZTIGJhc2UgKi8KICNkZWZpbmUgTVNSX0dTX0JBU0UJCTB4YzAwMDAxMDEgLyogNjRiaXQgR1MgYmFzZSAqLwogI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JBU0UJMHhjMDAwMDEwMiAvKiBTd2FwR1MgR1Mgc2hhZG93ICovCisjZGVmaW5lIE1TUl9UU0NfQVVYCQkweGMwMDAwMTAzIC8qIEF1eGlsaWFyeSBUU0MgKi8KIAogLyogRUZFUiBiaXRzOiAqLwogI2RlZmluZSBfRUZFUl9TQ0UJCTAgIC8qIFNZU0NBTEwvU1lTUkVUICovCkBAIC0xMjMsNiArMTI0LDcgQEAKICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9TSElGVCAyCiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfQkFTRV9NQVNLCTB4ZmZmZmZmZgogI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JBU0VfU0hJRlQJMjAKKyNkZWZpbmUgTVNSX0ZBTTEwSF9OT0RFX0lECQkweGMwMDExMDBjCiAKIC8qIEs4IE1TUnMgKi8KICNkZWZpbmUgTVNSX0s4X1RPUF9NRU0xCQkJMHhjMDAxMDAxYQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaAppbmRleCAyZDIyOGZjLi5jNWJjNGMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaApAQCAtMjcsNiArMjcsMTggQEAKIAl9OwogfTsKIAorc3RydWN0IG1zcl9pbmZvIHsKKwl1MzIgbXNyX25vOworCXN0cnVjdCBtc3IgcmVnOworCXN0cnVjdCBtc3IgKm1zcnM7CisJaW50IGVycjsKK307CisKK3N0cnVjdCBtc3JfcmVnc19pbmZvIHsKKwl1MzIgKnJlZ3M7CisJaW50IGVycjsKK307CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX3RzY3AodW5zaWduZWQgaW50ICphdXgpCiB7CiAJdW5zaWduZWQgbG9uZyBsb3csIGhpZ2g7CkBAIC0yNDAsOSArMjUyLDkgQEAKICNkZWZpbmUgY2hlY2tpbmdfd3Jtc3JsKG1zciwgdmFsKSB3cm1zcl9zYWZlKChtc3IpLCAodTMyKSh2YWwpLAkJXAogCQkJCQkgICAgICh1MzIpKCh2YWwpID4+IDMyKSkKIAotI2RlZmluZSB3cml0ZV90c2ModmFsMSwgdmFsMikgd3Jtc3IoMHgxMCwgKHZhbDEpLCAodmFsMikpCisjZGVmaW5lIHdyaXRlX3RzYyh2YWwxLCB2YWwyKSB3cm1zcihNU1JfSUEzMl9UU0MsICh2YWwxKSwgKHZhbDIpKQogCi0jZGVmaW5lIHdyaXRlX3JkdHNjcF9hdXgodmFsKSB3cm1zcigweGMwMDAwMTAzLCAodmFsKSwgMCkKKyNkZWZpbmUgd3JpdGVfcmR0c2NwX2F1eCh2YWwpIHdybXNyKE1TUl9UU0NfQVVYLCAodmFsKSwgMCkKIAogc3RydWN0IG1zciAqbXNyc19hbGxvYyh2b2lkKTsKIHZvaWQgbXNyc19mcmVlKHN0cnVjdCBtc3IgKm1zcnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA2ZjhlYzFjLi5mYzgwMWJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTgxLDcgKzE4MSw3IEBACiAJCQkJdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KQogewogCS8qIGVjeCBpcyBvZnRlbiBhbiBpbnB1dCBhcyB3ZWxsIGFzIGFuIG91dHB1dC4gKi8KLQlhc20oImNwdWlkIgorCWFzbSB2b2xhdGlsZSgiY3B1aWQiCiAJICAgIDogIj1hIiAoKmVheCksCiAJICAgICAgIj1iIiAoKmVieCksCiAJICAgICAgIj1jIiAoKmVjeCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKaW5kZXggY2Y4NmE1ZS4uMzVlODkxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtNSw2ICs1LDI5IEBACiAKIGludCB4ODZfaXNfc3RhY2tfaWQoaW50IGlkLCBjaGFyICpuYW1lKTsKIAorc3RydWN0IHRocmVhZF9pbmZvOworc3RydWN0IHN0YWNrdHJhY2Vfb3BzOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKCp3YWxrX3N0YWNrX3QpKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBicCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywKKwkJCQkgICAgICB2b2lkICpkYXRhLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwKKwkJCQkgICAgICBpbnQgKmdyYXBoKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcKK3ByaW50X2NvbnRleHRfc3RhY2soc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJICAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAorCQkgICAgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEsCisJCSAgICB1bnNpZ25lZCBsb25nICplbmQsIGludCAqZ3JhcGgpOworCitleHRlcm4gdW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFja19icChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmVuZCwgaW50ICpncmFwaCk7CisKIC8qIEdlbmVyaWMgc3RhY2sgdHJhY2VyIHdpdGggY2FsbGJhY2tzICovCiAKIHN0cnVjdCBzdGFja3RyYWNlX29wcyB7CkBAIC0xNCw2ICszNyw3IEBACiAJdm9pZCAoKmFkZHJlc3MpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHJlbGlhYmxlKTsKIAkvKiBPbiBuZWdhdGl2ZSByZXR1cm4gc3RvcCBkdW1waW5nICovCiAJaW50ICgqc3RhY2spKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpOworCXdhbGtfc3RhY2tfdAl3YWxrX3N0YWNrOwogfTsKIAogdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaAppbmRleCAwYzk4MjVlLi4wODhkMDlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCkBAIC0yMDUsMTQgKzIwNSwxMyBAQAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKLQlpbnQgcmV0ID0gLUVGQVVMVDsKIAogCWlmIChsaWtlbHkoc3ogPT0gLTEgfHwgc3ogPj0gbikpCi0JCXJldCA9IF9jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisJCW4gPSBfY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pOwogCWVsc2UKIAkJY29weV9mcm9tX3VzZXJfb3ZlcmZsb3coKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIG47CiB9CiAKIGxvbmcgX19tdXN0X2NoZWNrIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCA0NjMyNGM2Li41MzVlNDIxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtMzAsMTYgKzMwLDE1IEBACiAJCQkJCSAgdW5zaWduZWQgbG9uZyBuKQogewogCWludCBzeiA9IF9fY29tcGlsZXRpbWVfb2JqZWN0X3NpemUodG8pOwotCWludCByZXQgPSAtRUZBVUxUOwogCiAJbWlnaHRfZmF1bHQoKTsKIAlpZiAobGlrZWx5KHN6ID09IC0xIHx8IHN6ID49IG4pKQotCQlyZXQgPSBfY29weV9mcm9tX3VzZXIodG8sIGZyb20sIG4pOworCQluID0gX2NvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBuKTsKICNpZmRlZiBDT05GSUdfREVCVUdfVk0KIAllbHNlCiAJCVdBUk4oMSwgIkJ1ZmZlciBvdmVyZmxvdyBkZXRlY3RlZCFcbiIpOwogI2VuZGlmCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbjsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggODExYmZhYi4uYmM1NGZhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTMxLDIwICszMSwyMCBAQAogICoJCSAgY29udGlndW91cyAoYWx0aG91Z2ggdmFyaW91cyBJTyBzcGFjZXMgbWF5IHB1bmNoIGhvbGVzIGluCiAgKgkJICBpdCkuLgogICoKLSAqIAlOCS0gTnVtYmVyIG9mIGJpdHMgaW4gdGhlIG5vZGUgcG9ydGlvbiBvZiBhIHNvY2tldCBwaHlzaWNhbAotICogCQkgIGFkZHJlc3MuCisgKglOCS0gTnVtYmVyIG9mIGJpdHMgaW4gdGhlIG5vZGUgcG9ydGlvbiBvZiBhIHNvY2tldCBwaHlzaWNhbAorICoJCSAgYWRkcmVzcy4KICAqCi0gKiAJTkFTSUQgICAtIG5ldHdvcmsgSUQgb2YgYSByb3V0ZXIsIE1icmljayBvciBDYnJpY2suIE5hc2lkIHZhbHVlcyBvZgotICogCSAJICByb3V0ZXJzIGFsd2F5cyBoYXZlIGxvdyBiaXQgb2YgMSwgQy9NQnJpY2tzIGhhdmUgbG93IGJpdAotICogCQkgIGVxdWFsIHRvIDAuIE1vc3QgYWRkcmVzc2luZyBtYWNyb3MgdGhhdCB0YXJnZXQgVVYgaHViIGNoaXBzCi0gKiAJCSAgcmlnaHQgc2hpZnQgdGhlIE5BU0lEIGJ5IDEgdG8gZXhjbHVkZSB0aGUgYWx3YXlzLXplcm8gYml0LgotICogCQkgIE5BU0lEcyBjb250YWluIHVwIHRvIDE1IGJpdHMuCisgKglOQVNJRCAgIC0gbmV0d29yayBJRCBvZiBhIHJvdXRlciwgTWJyaWNrIG9yIENicmljay4gTmFzaWQgdmFsdWVzIG9mCisgKgkJICByb3V0ZXJzIGFsd2F5cyBoYXZlIGxvdyBiaXQgb2YgMSwgQy9NQnJpY2tzIGhhdmUgbG93IGJpdAorICoJCSAgZXF1YWwgdG8gMC4gTW9zdCBhZGRyZXNzaW5nIG1hY3JvcyB0aGF0IHRhcmdldCBVViBodWIgY2hpcHMKKyAqCQkgIHJpZ2h0IHNoaWZ0IHRoZSBOQVNJRCBieSAxIHRvIGV4Y2x1ZGUgdGhlIGFsd2F5cy16ZXJvIGJpdC4KKyAqCQkgIE5BU0lEcyBjb250YWluIHVwIHRvIDE1IGJpdHMuCiAgKgogICoJR05PREUgICAtIE5BU0lEIHJpZ2h0IHNoaWZ0ZWQgYnkgMSBiaXQuIE1vc3QgbW1ycyBjb250YWluIGdub2RlcyBpbnN0ZWFkCiAgKgkJICBvZiBuYXNpZHMuCiAgKgotICogCVBOT0RFICAgLSB0aGUgbG93IE4gYml0cyBvZiB0aGUgR05PREUuIFRoZSBQTk9ERSBpcyB0aGUgbW9zdCB1c2VmdWwgdmFyaWFudAotICogCQkgIG9mIHRoZSBuYXNpZCBmb3Igc29ja2V0IHVzYWdlLgorICoJUE5PREUgICAtIHRoZSBsb3cgTiBiaXRzIG9mIHRoZSBHTk9ERS4gVGhlIFBOT0RFIGlzIHRoZSBtb3N0IHVzZWZ1bCB2YXJpYW50CisgKgkJICBvZiB0aGUgbmFzaWQgZm9yIHNvY2tldCB1c2FnZS4KICAqCiAgKgogICogIE51bWFMaW5rIEdsb2JhbCBQaHlzaWNhbCBBZGRyZXNzIEZvcm1hdDoKQEAgLTcxLDEyICs3MSwxMiBAQAogICoKICAqCiAgKiBBUElDSUQgZm9ybWF0Ci0gKiAJTk9URSEhISEhISBUaGlzIGlzIHRoZSBjdXJyZW50IGZvcm1hdCBvZiB0aGUgQVBJQ0lELiBIb3dldmVyLCBjb2RlCi0gKiAJc2hvdWxkIGFzc3VtZSB0aGF0IHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gVXNlIGZ1bmN0aW9ucwotICogCWluIHRoaXMgZmlsZSBmb3IgYWxsIEFQSUNJRCBiaXQgbWFuaXB1bGF0aW9ucyBhbmQgY29udmVyc2lvbi4KKyAqCU5PVEUhISEhISEgVGhpcyBpcyB0aGUgY3VycmVudCBmb3JtYXQgb2YgdGhlIEFQSUNJRC4gSG93ZXZlciwgY29kZQorICoJc2hvdWxkIGFzc3VtZSB0aGF0IHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gVXNlIGZ1bmN0aW9ucworICoJaW4gdGhpcyBmaWxlIGZvciBhbGwgQVBJQ0lEIGJpdCBtYW5pcHVsYXRpb25zIGFuZCBjb252ZXJzaW9uLgogICoKLSAqIAkJMTExMTExMDAwMDAwMDAwMAotICogCQk1NDMyMTA5ODc2NTQzMjEwCisgKgkJMTExMTExMDAwMDAwMDAwMAorICoJCTU0MzIxMDk4NzY1NDMyMTAKICAqCQlwcHBwcHBwcHBwbGMwY2NoCiAgKgkJc3Nzc3Nzc3Nzc3MKICAqCkBAIC04OSw5ICs4OSw5IEBACiAgKglOb3RlOiBQcm9jZXNzb3Igb25seSBzdXBwb3J0cyAxMiBiaXRzIGluIHRoZSBBUElDSUQgcmVnaXN0ZXIuIFRoZSBBQ1BJCiAgKgkgICAgICB0YWJsZXMgaG9sZCBhbGwgMTYgYml0cy4gU29mdHdhcmUgbmVlZHMgdG8gYmUgYXdhcmUgb2YgdGhpcy4KICAqCi0gKiAJICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIGFsbCByZWZlcmVuY2VzIHRvIEFQSUNJRCByZWZlciB0bwotICogCSAgICAgIHRoZSBGVUxMIHZhbHVlIGNvbnRhaW5lZCBpbiBBQ1BJIHRhYmxlcywgbm90IHRoZSBzdWJzZXQgaW4gdGhlCi0gKiAJICAgICAgcHJvY2Vzc29yIEFQSUNJRCByZWdpc3Rlci4KKyAqCSAgICAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBhbGwgcmVmZXJlbmNlcyB0byBBUElDSUQgcmVmZXIgdG8KKyAqCSAgICAgIHRoZSBGVUxMIHZhbHVlIGNvbnRhaW5lZCBpbiBBQ1BJIHRhYmxlcywgbm90IHRoZSBzdWJzZXQgaW4gdGhlCisgKgkgICAgICBwcm9jZXNzb3IgQVBJQ0lEIHJlZ2lzdGVyLgogICovCiAKIApAQCAtMTUxLDE2ICsxNTEsMTYgQEAKIH07CiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdXZfaHViX2luZm9fcywgX191dl9odWJfaW5mbyk7Ci0jZGVmaW5lIHV2X2h1Yl9pbmZvIAkJKCZfX2dldF9jcHVfdmFyKF9fdXZfaHViX2luZm8pKQorI2RlZmluZSB1dl9odWJfaW5mbwkJKCZfX2dldF9jcHVfdmFyKF9fdXZfaHViX2luZm8pKQogI2RlZmluZSB1dl9jcHVfaHViX2luZm8oY3B1KQkoJnBlcl9jcHUoX191dl9odWJfaW5mbywgY3B1KSkKIAogLyoKICAqIExvY2FsICYgR2xvYmFsIE1NUiBzcGFjZSBtYWNyb3MuCi0gKiAJTm90ZTogbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIE9OTFkgYnkgaW5saW5lIGZ1bmN0aW9ucwotICogCWluIHRoaXMgZmlsZSAtIG5vdCBieSBvdGhlciBrZXJuZWwgY29kZS4KLSAqIAkJbiAtICBOQVNJRCAoZnVsbCAxNS1iaXQgZ2xvYmFsIG5hc2lkKQotICogCQlnIC0gIEdOT0RFIChmdWxsIDE1LWJpdCBnbG9iYWwgbmFzaWQsIHJpZ2h0IHNoaWZ0ZWQgMSkKLSAqIAkJcCAtICBQTk9ERSAobG9jYWwgcGFydCBvZiBuc2lkcywgcmlnaHQgc2hpZnRlZCAxKQorICoJTm90ZTogbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIE9OTFkgYnkgaW5saW5lIGZ1bmN0aW9ucworICoJaW4gdGhpcyBmaWxlIC0gbm90IGJ5IG90aGVyIGtlcm5lbCBjb2RlLgorICoJCW4gLSAgTkFTSUQgKGZ1bGwgMTUtYml0IGdsb2JhbCBuYXNpZCkKKyAqCQlnIC0gIEdOT0RFIChmdWxsIDE1LWJpdCBnbG9iYWwgbmFzaWQsIHJpZ2h0IHNoaWZ0ZWQgMSkKKyAqCQlwIC0gIFBOT0RFIChsb2NhbCBwYXJ0IG9mIG5zaWRzLCByaWdodCBzaGlmdGVkIDEpCiAgKi8KICNkZWZpbmUgVVZfTkFTSURfVE9fUE5PREUobikJCSgoKG4pID4+IDEpICYgdXZfaHViX2luZm8tPnBub2RlX21hc2spCiAjZGVmaW5lIFVWX1BOT0RFX1RPX0dOT0RFKHApCQkoKHApIHx1dl9odWJfaW5mby0+Z25vZGVfZXh0cmEpCkBAIC0yMTUsOCArMjE1LDggQEAKIC8qCiAgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMsIHNvY2tldCBsb2NhbCBwaHlzaWNhbAogICogYWRkcmVzc2VzLCBhbmQgVVYgZ2xvYmFsIHBoeXNpY2FsIGFkZHJlc3Nlcy4KLSAqIAlOb3RlOiB1c2UgdGhlIHN0YW5kYXJkIF9fcGEoKSAmIF9fdmEoKSBtYWNyb3MgZm9yIGNvbnZlcnRpbmcKLSAqIAkgICAgICBiZXR3ZWVuIHNvY2tldCB2aXJ0dWFsIGFuZCBzb2NrZXQgcGh5c2ljYWwgYWRkcmVzc2VzLgorICoJTm90ZTogdXNlIHRoZSBzdGFuZGFyZCBfX3BhKCkgJiBfX3ZhKCkgbWFjcm9zIGZvciBjb252ZXJ0aW5nCisgKgkgICAgICBiZXR3ZWVuIHNvY2tldCB2aXJ0dWFsIGFuZCBzb2NrZXQgcGh5c2ljYWwgYWRkcmVzc2VzLgogICovCiAKIC8qIHNvY2tldCBwaHlzIFJBTSAtLT4gVVYgZ2xvYmFsIHBoeXNpY2FsIGFkZHJlc3MgKi8KQEAgLTI4NywyMSArMjg3LDE4IEBACiAgKiBBY2Nlc3MgZ2xvYmFsIE1NUnMgdXNpbmcgdGhlIGxvdyBtZW1vcnkgTU1SMzIgc3BhY2UuIFRoaXMgcmVnaW9uIHN1cHBvcnRzCiAgKiBmYXN0ZXIgTU1SIGFjY2VzcyBidXQgbm90IGFsbCBNTVJzIGFyZSBhY2Nlc3NpYmxlIGluIHRoaXMgc3BhY2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqdXZfZ2xvYmFsX21tcjMyX2FkZHJlc3MoaW50IHBub2RlLAotCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICp1dl9nbG9iYWxfbW1yMzJfYWRkcmVzcyhpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXJldHVybiBfX3ZhKFVWX0dMT0JBTF9NTVIzMl9CQVNFIHwKIAkJICAgICAgIFVWX0dMT0JBTF9NTVIzMl9QTk9ERV9CSVRTKHBub2RlKSB8IG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9nbG9iYWxfbW1yMzIoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfd3JpdGVfZ2xvYmFsX21tcjMyKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCXdyaXRlcSh2YWwsIHV2X2dsb2JhbF9tbXIzMl9hZGRyZXNzKHBub2RlLCBvZmZzZXQpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X3JlYWRfZ2xvYmFsX21tcjMyKGludCBwbm9kZSwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9yZWFkX2dsb2JhbF9tbXIzMihpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXJldHVybiByZWFkcSh1dl9nbG9iYWxfbW1yMzJfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSk7CiB9CkBAIC0zMTAsMjEgKzMwNywxOCBAQAogICogQWNjZXNzIEdsb2JhbCBNTVIgc3BhY2UgdXNpbmcgdGhlIE1NUiBzcGFjZSBsb2NhdGVkIGF0IHRoZSB0b3Agb2YgcGh5c2ljYWwKICAqIG1lbW9yeS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICp1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhpbnQgcG5vZGUsCi0JCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJcmV0dXJuIF9fdmEoVVZfR0xPQkFMX01NUjY0X0JBU0UgfAogCQkgICAgVVZfR0xPQkFMX01NUjY0X1BOT0RFX0JJVFMocG5vZGUpIHwgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXI2NChpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXI2NChpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAl3cml0ZXEodmFsLCB1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9yZWFkX2dsb2JhbF9tbXI2NChpbnQgcG5vZGUsCi0JCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfcmVhZF9nbG9iYWxfbW1yNjQoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlyZXR1cm4gcmVhZHEodXZfZ2xvYmFsX21tcjY0X2FkZHJlc3MocG5vZGUsIG9mZnNldCkpOwogfQpAQCAtMzM4LDYgKzMzMiwxNiBAQAogCXJldHVybiBVVl9HTE9CQUxfR1JVX01NUl9CQVNFIHwgb2Zmc2V0IHwgKHBub2RlIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1dl93cml0ZV9nbG9iYWxfbW1yOChpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwl3cml0ZWIodmFsLCB1dl9nbG9iYWxfbW1yNjRfYWRkcmVzcyhwbm9kZSwgb2Zmc2V0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciB1dl9yZWFkX2dsb2JhbF9tbXI4KGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRiKHV2X2dsb2JhbF9tbXI2NF9hZGRyZXNzKHBub2RlLCBvZmZzZXQpKTsKK30KKwogLyoKICAqIEFjY2VzcyBodWIgbG9jYWwgTU1Scy4gRmFzdGVyIHRoYW4gdXNpbmcgZ2xvYmFsIHNwYWNlIGJ1dCBvbmx5IGxvY2FsIE1NUnMKICAqIGFyZSBhY2Nlc3NpYmxlLgpAQCAtNDU3LDExICs0NjEsMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9zY2lyX29mZnNldChpbnQgYXBpY2lkKQoreworCXJldHVybiBTQ0lSX0xPQ0FMX01NUl9CQVNFIHwgKGFwaWNpZCAmIDB4M2YpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfc2V0X2NwdV9zY2lyX2JpdHMoaW50IGNwdSwgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKIAlpZiAodXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIuc3RhdGUgIT0gdmFsdWUpIHsKKwkJdXZfd3JpdGVfZ2xvYmFsX21tcjgodXZfY3B1X3RvX3Bub2RlKGNwdSksCisJCQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIub2Zmc2V0LCB2YWx1ZSk7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLnN0YXRlID0gdmFsdWU7Ci0JCXV2X3dyaXRlX2xvY2FsX21tcjgodXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIub2Zmc2V0LCB2YWx1ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCmluZGV4IGZkNWNhOTcuLjZmMzUyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogb2JqLSQoQ09ORklHX0FDUElfU0xFRVApCSs9IHNsZWVwLm8gd2FrZXVwX3JtLm8gd2FrZXVwXyQoQklUUykubwogCiBpZm5lcSAoJChDT05GSUdfQUNQSV9QUk9DRVNTT1IpLCkKLW9iai15CQkJCSs9IGNzdGF0ZS5vIHByb2Nlc3Nvci5vCitvYmoteQkJCQkrPSBjc3RhdGUubwogZW5kaWYKIAogJChvYmopL3dha2V1cF9ybS5vOiAgICAkKG9iaikvcmVhbG1vZGUvd2FrZXVwLmJpbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcHJvY2Vzc29yLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1ZDFiMi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEludGVsIENvcnBvcmF0aW9uCi0gKiAJVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+Ci0gKiAJLSBBZGRlZCBfUERDIGZvciBwbGF0Zm9ybXMgd2l0aCBJbnRlbCBDUFVzCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0KLSNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0KLXN0YXRpYyB2b2lkIGluaXRfaW50ZWxfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqb2JqX2xpc3Q7Ci0JdW5pb24gYWNwaV9vYmplY3QgKm9iajsKLQl1MzIgKmJ1ZjsKLQotCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHBkYy4gSXQgd2lsbCBiZSB1c2VkIGxhdGVyLiAqLwotCW9ial9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9ial9saXN0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jb2JqID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9iaikgewotCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJa2ZyZWUob2JqX2xpc3QpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVmID0ga21hbGxvYygxMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCWtmcmVlKG9iaik7Ci0JCWtmcmVlKG9ial9saXN0KTsKLQkJcmV0dXJuOwotCX0KLQotCWJ1ZlswXSA9IEFDUElfUERDX1JFVklTSU9OX0lEOwotCWJ1ZlsxXSA9IDE7Ci0JYnVmWzJdID0gQUNQSV9QRENfQ19DQVBBQklMSVRZX1NNUDsKLQotCS8qCi0JICogVGhlIGRlZmF1bHQgb2YgUERDX1NNUF9UX1NXQ09PUkQgYml0IGlzIHNldCBmb3IgaW50ZWwgeDg2IGNwdSBzbwotCSAqIHRoYXQgT1NQTSBpcyBjYXBhYmxlIG9mIG5hdGl2ZSBBQ1BJIHRocm90dGxpbmcgc29mdHdhcmUKLQkgKiBjb29yZGluYXRpb24gdXNpbmcgQklPUyBzdXBwbGllZCBfVFNEIGluZm8uCi0JICovCi0JYnVmWzJdIHw9IEFDUElfUERDX1NNUF9UX1NXQ09PUkQ7Ci0JaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKLQkJYnVmWzJdIHw9IEFDUElfUERDX0VTVF9DQVBBQklMSVRZX1NXU01QOwotCi0JaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQUNQSSkpCi0JCWJ1ZlsyXSB8PSBBQ1BJX1BEQ19UX0ZGSDsKLQotCS8qCi0JICogSWYgbXdhaXQvbW9uaXRvciBpcyB1bnN1cHBvcnRlZCwgQzIvQzNfRkZIIHdpbGwgYmUgZGlzYWJsZWQKLQkgKi8KLQlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTVdBSVQpKQotCQlidWZbMl0gJj0gfihBQ1BJX1BEQ19DX0MyQzNfRkZIKTsKLQotCW9iai0+dHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7Ci0Jb2JqLT5idWZmZXIubGVuZ3RoID0gMTI7Ci0Jb2JqLT5idWZmZXIucG9pbnRlciA9ICh1OCAqKSBidWY7Ci0Jb2JqX2xpc3QtPmNvdW50ID0gMTsKLQlvYmpfbGlzdC0+cG9pbnRlciA9IG9iajsKLQlwci0+cGRjID0gb2JqX2xpc3Q7Ci0KLQlyZXR1cm47Ci19Ci0KLQotLyogSW5pdGlhbGl6ZSBfUERDIGRhdGEgYmFzZWQgb24gdGhlIENQVSB2ZW5kb3IgKi8KLXZvaWQgYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShwci0+aWQpOwotCi0JcHItPnBkYyA9IE5VTEw7Ci0JaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAotCSAgICBjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQ0VOVEFVUikKLQkJaW5pdF9pbnRlbF9wZGMocHIsIGMpOwotCi0JcmV0dXJuOwotfQotCi1FWFBPUlRfU1lNQk9MKGFyY2hfYWNwaV9wcm9jZXNzb3JfaW5pdF9wZGMpOwotCi12b2lkIGFyY2hfYWNwaV9wcm9jZXNzb3JfY2xlYW51cF9wZGMoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKLXsKLQlpZiAocHItPnBkYykgewotCQlrZnJlZShwci0+cGRjLT5wb2ludGVyLT5idWZmZXIucG9pbnRlcik7Ci0JCWtmcmVlKHByLT5wZGMtPnBvaW50ZXIpOwotCQlrZnJlZShwci0+cGRjKTsKLQkJcHItPnBkYyA9IE5VTEw7Ci0JfQotfQotCi1FWFBPUlRfU1lNQk9MKGFyY2hfYWNwaV9wcm9jZXNzb3JfY2xlYW51cF9wZGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKaW5kZXggODJlNTA4Ni4uZjk5NjEwMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCkBAIC0xNjIsNiArMTYyLDggQEAKICNlbmRpZgogCQlpZiAoc3RybmNtcChzdHIsICJvbGRfb3JkZXJpbmciLCAxMikgPT0gMCkKIAkJCWFjcGlfb2xkX3N1c3BlbmRfb3JkZXJpbmcoKTsKKwkJaWYgKHN0cm5jbXAoc3RyLCAic2NpX2ZvcmNlX2VuYWJsZSIsIDE2KSA9PSAwKQorCQkJYWNwaV9zZXRfc2NpX2VuX29uX3Jlc3VtZSgpOwogCQlzdHIgPSBzdHJjaHIoc3RyLCAnLCcpOwogCQlpZiAoc3RyICE9IE5VTEwpCiAJCQlzdHIgKz0gc3Ryc3BuKHN0ciwgIiwgXHQiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKaW5kZXggMWRjYTljMy4uZmI0OTBjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKQEAgLTEzOCw2ICsxMzgsMTEgQEAKIGJvb2wgYW1kX2lvbW11X25wX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCisgKiBTZXQgdG8gdHJ1ZSBpZiBBQ1BJIHRhYmxlIHBhcnNpbmcgYW5kIGhhcmR3YXJlIGludGlhbGl6YXRpb24gd2VudCBwcm9wZXJseQorICovCitzdGF0aWMgYm9vbCBhbWRfaW9tbXVfaW5pdGlhbGl6ZWQ7CisKKy8qCiAgKiBMaXN0IG9mIHByb3RlY3Rpb24gZG9tYWlucyAtIHVzZWQgZHVyaW5nIHJlc3VtZQogICovCiBMSVNUX0hFQUQoYW1kX2lvbW11X3BkX2xpc3QpOwpAQCAtOTI5LDYgKzkzNCw4IEBACiAJfQogCVdBUk5fT04ocCAhPSBlbmQpOwogCisJYW1kX2lvbW11X2luaXRpYWxpemVkID0gdHJ1ZTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMjYzLDYgKzEyNzAsOSBAQAogCWlmIChhY3BpX3RhYmxlX3BhcnNlKCJJVlJTIiwgaW5pdF9pb21tdV9hbGwpICE9IDApCiAJCWdvdG8gZnJlZTsKIAorCWlmICghYW1kX2lvbW11X2luaXRpYWxpemVkKQorCQlnb3RvIGZyZWU7CisKIAlpZiAoYWNwaV90YWJsZV9wYXJzZSgiSVZSUyIsIGluaXRfbWVtb3J5X2RlZmluaXRpb25zKSAhPSAwKQogCQlnb3RvIGZyZWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBhYTU3YzA3Li5lODBmMjkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC02Miw3ICs2Miw3IEBACiAvKgogICogVGhlIGhpZ2hlc3QgQVBJQyBJRCBzZWVuIGR1cmluZyBlbnVtZXJhdGlvbi4KICAqCi0gKiBPbiBBTUQsIHRoaXMgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHdlIGNhbiB1c2U6IGlmIGFsbCBBUElDIElEcworICogVGhpcyBkZXRlcm1pbmVzIHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgd2UgY2FuIHVzZTogaWYgYWxsIEFQSUMgSURzCiAgKiBhcmUgaW4gdGhlIDAgLi4uIDcgcmFuZ2UsIHRoZW4gd2UgY2FuIHVzZSBsb2dpY2FsIGFkZHJlc3Npbmcgd2hpY2gKICAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMgKGJldHRlciBicm9hZGNhc3RpbmcpLgogICoKQEAgLTE4OTgsMTQgKzE4OTgsMjQgQEAKIAkJbWF4X3BoeXNpY2FsX2FwaWNpZCA9IGFwaWNpZDsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJaWYgKG51bV9wcm9jZXNzb3JzID4gOCkKKwkvKgorCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15CisJICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKKwkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgorCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKKwkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KKwkgKi8KKwlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KSB7CisJCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJCWlmICghQVBJQ19YQVBJQyh2ZXJzaW9uKSkgeworCQkJCWRlZl90b19iaWdzbXAgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogSWYgUDQgYW5kIGFib3ZlIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgogCQkJZGVmX3RvX2JpZ3NtcCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCi0JCQlkZWZfdG9fYmlnc21wID0gMTsKKwkJfQogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCmluZGV4IGQwYzk5YWIuLmVhY2JkMmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCkBAIC0zMDYsMTAgKzMwNiw3IEBACiAJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKIH0KIAogc3RydWN0IGFwaWMgYXBpY19waHlzZmxhdCA9ICB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCmluZGV4IDM4ZGNlY2YuLmNiODA0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCkBAIC0xMzEsMTAgKzEzMSw3IEBACiAJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBiaWdzbXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CiB9CiAKIHN0YXRpYyBpbnQgYmlnc21wX3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDExYTU4NTEuLjUzMjQzY2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTIyNzYsMjYgKzIyNzYsMjggQEAKIAogLyoKICAqIEVpdGhlciBzZXRzIGRlc2MtPmFmZmluaXR5IHRvIGEgdmFsaWQgdmFsdWUsIGFuZCByZXR1cm5zCi0gKiAtPmNwdV9tYXNrX3RvX2FwaWNpZCBvZiB0aGF0LCBvciByZXR1cm5zIEJBRF9BUElDSUQgYW5kCisgKiAtPmNwdV9tYXNrX3RvX2FwaWNpZCBvZiB0aGF0IGluIGRlc3RfaWQsIG9yIHJldHVybnMgLTEgYW5kCiAgKiBsZWF2ZXMgZGVzYy0+YWZmaW5pdHkgdW50b3VjaGVkLgogICovCiB1bnNpZ25lZCBpbnQKLXNldF9kZXNjX2FmZmluaXR5KHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCitzZXRfZGVzY19hZmZpbml0eShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAorCQkgIHVuc2lnbmVkIGludCAqZGVzdF9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXVuc2lnbmVkIGludCBpcnE7CiAKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhtYXNrLCBjcHVfb25saW5lX21hc2spKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwkJcmV0dXJuIC0xOwogCiAJaXJxID0gZGVzYy0+aXJxOwogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQotCQlyZXR1cm4gQkFEX0FQSUNJRDsKKwkJcmV0dXJuIC0xOwogCiAJY3B1bWFza19jb3B5KGRlc2MtPmFmZmluaXR5LCBtYXNrKTsKIAotCXJldHVybiBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbik7CisJKmRlc3RfaWQgPSBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIzMTEsMTIgKzIzMTMsMTEgQEAKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgIT0gQkFEX0FQSUNJRCkgeworCXJldCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2ssICZkZXN0KTsKKwlpZiAoIXJldCkgewogCQkvKiBPbmx5IHRoZSBoaWdoIDggYml0cyBhcmUgdmFsaWQuICovCiAJCWRlc3QgPSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGRlc3QpOwogCQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7Ci0JCXJldCA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKQEAgLTI0MzMsNiArMjQzNCwxMyBAQAogCQljZmcgPSBpcnFfY2ZnKGlycSk7CiAJCXJhd19zcGluX2xvY2soJmRlc2MtPmxvY2spOwogCisJCS8qCisJCSAqIENoZWNrIGlmIHRoZSBpcnEgbWlncmF0aW9uIGlzIGluIHByb2dyZXNzLiBJZiBzbywgd2UKKwkJICogaGF2ZW4ndCByZWNlaXZlZCB0aGUgY2xlYW51cCByZXF1ZXN0IHlldCBmb3IgdGhpcyBpcnEuCisJCSAqLworCQlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKQorCQkJZ290byB1bmxvY2s7CisKIAkJaWYgKHZlY3RvciA9PSBjZmctPnZlY3RvciAmJiBjcHVtYXNrX3Rlc3RfY3B1KG1lLCBjZmctPmRvbWFpbikpCiAJCQlnb3RvIHVubG9jazsKIApAQCAtMzM1MSw4ICszMzU5LDcgQEAKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CkBAIC0zMzg0LDggKzMzOTEsNyBAQAogCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKIAkJcmV0dXJuIC0xOwogCi0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCisJaWYgKHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2ssICZkZXN0KSkKIAkJcmV0dXJuIC0xOwogCiAJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKQEAgLTM1NjcsOCArMzU3Myw3IEBACiAJc3RydWN0IG1zaV9tc2cgbXNnOwogCXVuc2lnbmVkIGludCBkZXN0OwogCi0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCisJaWYgKHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2ssICZkZXN0KSkKIAkJcmV0dXJuIC0xOwogCiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwpAQCAtMzYyMyw4ICszNjI4LDcgQEAKIAlzdHJ1Y3QgbXNpX21zZyBtc2c7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CkBAIC0zNzMwLDggKzM3MzQsNyBAQAogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJdW5zaWduZWQgaW50IGRlc3Q7CiAKLQlkZXN0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzayk7Ci0JaWYgKGRlc3QgPT0gQkFEX0FQSUNJRCkKKwlpZiAoc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpKQogCQlyZXR1cm4gLTE7CiAKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYwppbmRleCBjNGNiZDMwLi42NWVkYzE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKQEAgLTY0LDIzICs2NCwxNiBAQAogCQkJYXBpYyA9ICZhcGljX3gyYXBpY19waHlzOwogCQllbHNlCiAJCQlhcGljID0gJmFwaWNfeDJhcGljX2NsdXN0ZXI7CisJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBhcGljLT5uYW1lKTsKIAl9CiAjZW5kaWYKIAogCWlmIChhcGljID09ICZhcGljX2ZsYXQpIHsKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKLQkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgotCQkJaWYgKG51bV9wcm9jZXNzb3JzID4gOCkKLQkJCQlhcGljID0gJmFwaWNfcGh5c2ZsYXQ7Ci0JCQlicmVhazsKLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCi0JCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OwotCQl9CisJCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpCisJCQlhcGljID0gJmFwaWNfcGh5c2ZsYXQ7CisJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBhcGljLT5uYW1lKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgYXBpYy0+bmFtZSk7Ci0KIAlpZiAoaXNfdnNtcF9ib3goKSkgewogCQkvKiBuZWVkIHRvIHVwZGF0ZSBwaHlzX3BrZ19pZCAqLwogCQlhcGljLT5waHlzX3BrZ19pZCA9IGFwaWNpZF9waHlzX3BrZ19pZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCmluZGV4IGE1MzcxZWMuLmNmNjljNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwpAQCAtMTQ4LDEwICsxNDgsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGNwdSA8IG5yX2NwdV9pZHMpCi0JCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBjcHUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19jbHVzdGVyX3BoeXNfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKaW5kZXggYTg5ODlhYS4uODk3MmYzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCkBAIC0xNDYsMTAgKzE0Niw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKLQkJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7Ci0KLQlyZXR1cm4gQkFEX0FQSUNJRDsKKwlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB4MmFwaWNfcGh5c19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBiNjg0YmIzLi41ZjkyNDk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTIyNSwxMCArMjI1LDcgQEAKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKQogCQkJYnJlYWs7CiAJfQotCWlmIChjcHUgPCBucl9jcHVfaWRzKQotCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQotCXJldHVybiBCQURfQVBJQ0lEOworCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCkBAIC02MzIsOCArNjI5LDEwIEBACiAJdXZfcnRjX2luaXQoKTsKIAogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgeworCQlpbnQgYXBpY2lkID0gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKKwogCQluaWQgPSBjcHVfdG9fbm9kZShjcHUpOwotCQlwbm9kZSA9IHV2X2FwaWNpZF90b19wbm9kZShwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpKTsKKwkJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKIAkJYmxhZGUgPSBib290X3Bub2RlX3RvX2JsYWRlKHBub2RlKTsKIAkJbGNwdSA9IHV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX3Bvc3NpYmxlX2NwdXM7CiAJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX3Bvc3NpYmxlX2NwdXMrKzsKQEAgLTY1NCwxNSArNjUzLDEzIEBACiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV9leHRyYSA9IGdub2RlX2V4dHJhOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5jb2hlcmVuY3lfZG9tYWluX251bWJlciA9IHNuX2NvaGVyZW5jeV9pZDsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnNjaXIub2Zmc2V0ID0gU0NJUl9MT0NBTF9NTVJfQkFTRSArIGxjcHU7CisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLm9mZnNldCA9IHV2X3NjaXJfb2Zmc2V0KGFwaWNpZCk7CiAJCXV2X25vZGVfdG9fYmxhZGVbbmlkXSA9IGJsYWRlOwogCQl1dl9jcHVfdG9fYmxhZGVbY3B1XSA9IGJsYWRlOwogCQltYXhfcG5vZGUgPSBtYXgocG5vZGUsIG1heF9wbm9kZSk7CiAKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlVWOiBjcHUgJWQsIGFwaWNpZCAweCV4LCBwbm9kZSAlZCwgbmlkICVkLCAiCi0JCQkibGNwdSAlZCwgYmxhZGUgJWRcbiIsCi0JCQljcHUsIHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSksIHBub2RlLCBuaWQsCi0JCQlsY3B1LCBibGFkZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJVVjogY3B1ICVkLCBhcGljaWQgMHgleCwgcG5vZGUgJWQsIG5pZCAlZCwgbGNwdSAlZCwgYmxhZGUgJWRcbiIsCisJCQljcHUsIGFwaWNpZCwgcG5vZGUsIG5pZCwgbGNwdSwgYmxhZGUpOwogCX0KIAogCS8qIEFkZCBibGFkZS9wbm9kZSBpbmZvIGZvciBub2RlcyB3aXRob3V0IGNwdXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDhkYzNlYTEuLmU0ODU4MjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtMjU0LDU5ICsyNTQsMzYgQEAKIAogLyoKICAqIEZpeHVwIGNvcmUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gZm9yIEFNRCBtdWx0aS1ub2RlIHByb2Nlc3NvcnMuCi0gKiBBc3N1bXB0aW9uIDE6IE51bWJlciBvZiBjb3JlcyBpbiBlYWNoIGludGVybmFsIG5vZGUgaXMgdGhlIHNhbWUuCi0gKiBBc3N1bXB0aW9uIDI6IE1peGVkIHN5c3RlbXMgd2l0aCBib3RoIHNpbmdsZS1ub2RlIGFuZCBkdWFsLW5vZGUKLSAqICAgICAgICAgICAgICAgcHJvY2Vzc29ycyBhcmUgbm90IHN1cHBvcnRlZC4KKyAqIEFzc3VtcHRpb246IE51bWJlciBvZiBjb3JlcyBpbiBlYWNoIGludGVybmFsIG5vZGUgaXMgdGhlIHNhbWUuCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2X0hUCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgYW1kX2ZpeHVwX2RjbShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0jaWZkZWYgQ09ORklHX1BDSQotCXUzMiB0LCBjcG47Ci0JdTggbiwgbl9pZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdTMyIG5vZGVzLCBjb3Jlc19wZXJfbm9kZTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJaWYgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX05PREVJRF9NU1IpKQorCQlyZXR1cm47CisKIAkvKiBmaXh1cCB0b3BvbG9neSBpbmZvcm1hdGlvbiBvbmx5IG9uY2UgZm9yIGEgY29yZSAqLwogCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FNRF9EQ00pKQogCQlyZXR1cm47CiAKLQkvKiBjaGVjayBmb3IgbXVsdGktbm9kZSBwcm9jZXNzb3Igb24gYm9vdCBjcHUgKi8KLQl0ID0gcmVhZF9wY2lfY29uZmlnKDAsIDI0LCAzLCAweGU4KTsKLQlpZiAoISh0ICYgKDEgPDwgMjkpKSkKKwlyZG1zcmwoTVNSX0ZBTTEwSF9OT0RFX0lELCB2YWx1ZSk7CisKKwlub2RlcyA9ICgodmFsdWUgPj4gMykgJiA3KSArIDE7CisJaWYgKG5vZGVzID09IDEpCiAJCXJldHVybjsKIAogCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FNRF9EQ00pOworCWNvcmVzX3Blcl9ub2RlID0gYy0+eDg2X21heF9jb3JlcyAvIG5vZGVzOwogCi0JLyogY29yZXMgcGVyIG5vZGU6IGVhY2ggaW50ZXJuYWwgbm9kZSBoYXMgaGFsZiB0aGUgbnVtYmVyIG9mIGNvcmVzICovCi0JY3BuID0gYy0+eDg2X21heF9jb3JlcyA+PiAxOworCS8qIHN0b3JlIE5vZGVJRCwgdXNlIGxsY19zaGFyZWRfbWFwIHRvIHN0b3JlIHNpYmxpbmcgaW5mbyAqLworCXBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9IHZhbHVlICYgNzsKIAotCS8qIGV2ZW4tbnVtYmVyZWQgTkJfaWQgb2YgdGhpcyBkdWFsLW5vZGUgcHJvY2Vzc29yICovCi0JbiA9IGMtPnBoeXNfcHJvY19pZCA8PCAxOwotCi0JLyoKLQkgKiBkZXRlcm1pbmUgaW50ZXJuYWwgbm9kZSBpZCBhbmQgYXNzaWduIGNvcmVzIGZpZnR5LWZpZnR5IHRvCi0JICogZWFjaCBub2RlIG9mIHRoZSBkdWFsLW5vZGUgcHJvY2Vzc29yCi0JICovCi0JdCA9IHJlYWRfcGNpX2NvbmZpZygwLCAyNCArIG4sIDMsIDB4ZTgpOwotCW4gPSAodD4+MzApICYgMHgzOwotCWlmIChuID09IDApIHsKLQkJaWYgKGMtPmNwdV9jb3JlX2lkIDwgY3BuKQotCQkJbl9pZCA9IDA7Ci0JCWVsc2UKLQkJCW5faWQgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChjLT5jcHVfY29yZV9pZCA8IGNwbikKLQkJCW5faWQgPSAxOwotCQllbHNlCi0JCQluX2lkID0gMDsKLQl9Ci0KLQkvKiBjb21wdXRlIGVudGlyZSBOb2RlSUQsIHVzZSBsbGNfc2hhcmVkX21hcCB0byBzdG9yZSBzaWJsaW5nIGluZm8gKi8KLQlwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPSAoYy0+cGh5c19wcm9jX2lkIDw8IDEpICsgbl9pZDsKLQotCS8qIGZpeHVwIGNvcmUgaWQgdG8gYmUgaW4gcmFuZ2UgZnJvbSAwIHRvIGNwbiAqLwotCWMtPmNwdV9jb3JlX2lkID0gYy0+Y3B1X2NvcmVfaWQgJSBjcG47Ci0jZW5kaWYKKwkvKiBmaXh1cCBjb3JlIGlkIHRvIGJlIGluIHJhbmdlIGZyb20gMCB0byAoY29yZXNfcGVyX25vZGUgLSAxKSAqLworCWMtPmNwdV9jb3JlX2lkID0gYy0+Y3B1X2NvcmVfaWQgJSBjb3Jlc19wZXJfbm9kZTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggZjI4ZGVjZi4uMWIxOTIwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMTkwLDkgKzE5MCwxMSBAQAogCiBzdGF0aWMgdm9pZCBkcnZfcmVhZChzdHJ1Y3QgZHJ2X2NtZCAqY21kKQogeworCWludCBlcnI7CiAJY21kLT52YWwgPSAwOwogCi0Jc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdW1hc2tfYW55KGNtZC0+bWFzayksIGRvX2Rydl9yZWFkLCBjbWQsIDEpOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX2FueShjbWQtPm1hc2ssIGRvX2Rydl9yZWFkLCBjbWQsIDEpOworCVdBUk5fT05fT05DRShlcnIpOwkvKiBzbXBfY2FsbF9mdW5jdGlvbl9hbnkoKSB3YXMgYnVnZ3k/ICovCiB9CiAKIHN0YXRpYyB2b2lkIGRydl93cml0ZShzdHJ1Y3QgZHJ2X2NtZCAqY21kKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCBhOWRmOTQ0Li5mMTI1ZTVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZvbGRtYXNrLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljcHVtYXNrX2NvcHkob2xkbWFzaywgdHNrX2NwdW1hc2soY3VycmVudCkpOworCWNwdW1hc2tfY29weShvbGRtYXNrLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKHBvbC0+Y3B1KSk7CiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggOWMzMWU4Yi4uODc5NjY2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtNzAsNyArNzAsNiBAQAogCWlmIChjLT54ODZfcG93ZXIgJiAoMSA8PCA4KSkgewogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpOwogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9OT05TVE9QX1RTQyk7Ci0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSk7CiAJCXNjaGVkX2Nsb2NrX3N0YWJsZSA9IDE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IDQ1NTA2ZDUuLmQ2MTZjMDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC0yMzM2LDYgKzIzMzYsNyBAQAogCS53YXJuaW5nX3N5bWJvbAkJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQkJPSBiYWNrdHJhY2Vfc3RhY2ssCiAJLmFkZHJlc3MJCT0gYmFja3RyYWNlX2FkZHJlc3MsCisJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFja19icCwKIH07CiAKICNpbmNsdWRlICIuLi9kdW1wc3RhY2suaCIKQEAgLTIzNDYsNyArMjM0Nyw3IEBACiAJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfS0VSTkVMKTsKIAljYWxsY2hhaW5fc3RvcmUoZW50cnksIHJlZ3MtPmlwKTsKIAotCWR1bXBfdHJhY2UoTlVMTCwgcmVncywgTlVMTCwgMCwgJmJhY2t0cmFjZV9vcHMsIGVudHJ5KTsKKwlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsIE5VTEwsIHJlZ3MtPmJwLCAmYmFja3RyYWNlX29wcywgZW50cnkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCA3ZWYyNGE3Li5jYjI3ZmQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTg3LDcgKzE4Nyw4IEBACiAJaW50IGksIGVyciA9IDA7CiAJaSA9IDA7CiAKLQlpZiAocmVnaXN0ZXJfY2hyZGV2KENQVUlEX01BSk9SLCAiY3B1L2NwdWlkIiwgJmNwdWlkX2ZvcHMpKSB7CisJaWYgKF9fcmVnaXN0ZXJfY2hyZGV2KENQVUlEX01BSk9SLCAwLCBOUl9DUFVTLAorCQkJICAgICAgImNwdS9jcHVpZCIsICZjcHVpZF9mb3BzKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNwdWlkOiB1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBjcHVpZFxuIiwKIAkJICAgICAgIENQVUlEX01BSk9SKTsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMjE2LDcgKzIxNyw3IEBACiAJfQogCWNsYXNzX2Rlc3Ryb3koY3B1aWRfY2xhc3MpOwogb3V0X2NocmRldjoKLQl1bnJlZ2lzdGVyX2NocmRldihDUFVJRF9NQUpPUiwgImNwdS9jcHVpZCIpOworCV9fdW5yZWdpc3Rlcl9jaHJkZXYoQ1BVSURfTUFKT1IsIDAsIE5SX0NQVVMsICJjcHUvY3B1aWQiKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCmluZGV4IDBhMGFhMWMuLmM1NmJjMjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKQEAgLTEwOSw2ICsxMDksMzAgQEAKIAl9CiAJcmV0dXJuIGJwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocHJpbnRfY29udGV4dF9zdGFjayk7CisKK3Vuc2lnbmVkIGxvbmcKK3ByaW50X2NvbnRleHRfc3RhY2tfYnAoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICplbmQsIGludCAqZ3JhcGgpCit7CisJc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKilicDsKKwl1bnNpZ25lZCBsb25nICpyZXRfYWRkciA9ICZmcmFtZS0+cmV0dXJuX2FkZHJlc3M7CisKKwl3aGlsZSAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCByZXRfYWRkciwgc2l6ZW9mKCpyZXRfYWRkciksIGVuZCkpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gKnJldF9hZGRyOworCisJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKKwkJCW9wcy0+YWRkcmVzcyhkYXRhLCBhZGRyLCAxKTsKKwkJCWZyYW1lID0gZnJhbWUtPm5leHRfZnJhbWU7CisJCQlyZXRfYWRkciA9ICZmcmFtZS0+cmV0dXJuX2FkZHJlc3M7CisJCQlwcmludF9mdHJhY2VfZ3JhcGhfYWRkcihhZGRyLCBkYXRhLCBvcHMsIHRpbmZvLCBncmFwaCk7CisJCX0KKwl9CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWZyYW1lOworfQorRVhQT1JUX1NZTUJPTF9HUEwocHJpbnRfY29udGV4dF9zdGFja19icCk7CiAKIAogc3RhdGljIHZvaWQKQEAgLTE0MSwxMCArMTY1LDExIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgcHJpbnRfdHJhY2Vfb3BzID0gewotCS53YXJuaW5nID0gcHJpbnRfdHJhY2Vfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wgPSBwcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sgPSBwcmludF90cmFjZV9zdGFjaywKLQkuYWRkcmVzcyA9IHByaW50X3RyYWNlX2FkZHJlc3MsCisJLndhcm5pbmcJCT0gcHJpbnRfdHJhY2Vfd2FybmluZywKKwkud2FybmluZ19zeW1ib2wJCT0gcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wsCisJLnN0YWNrCQkJPSBwcmludF90cmFjZV9zdGFjaywKKwkuYWRkcmVzcwkJPSBwcmludF90cmFjZV9hZGRyZXNzLAorCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmggYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmgKaW5kZXggODEwODZjMi4uNGZkMTQyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaApAQCAtMTQsMTIgKzE0LDYgQEAKICNkZWZpbmUgZ2V0X2JwKGJwKSBhc20oIm1vdnEgJSVyYnAsICUwIiA6ICI9ciIgKGJwKSA6KQogI2VuZGlmCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nCi1wcmludF9jb250ZXh0X3N0YWNrKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCi0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAotCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSwKLQkJdW5zaWduZWQgbG9uZyAqZW5kLCBpbnQgKmdyYXBoKTsKLQogZXh0ZXJuIHZvaWQKIHNob3dfdHJhY2VfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKaW5kZXggZTBlZDRjNy4uYWU3NzVjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJCWNvbnRleHQgPSAoc3RydWN0IHRocmVhZF9pbmZvICopCiAJCQkoKHVuc2lnbmVkIGxvbmcpc3RhY2sgJiAofihUSFJFQURfU0laRSAtIDEpKSk7Ci0JCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayhjb250ZXh0LCBzdGFjaywgYnAsIG9wcywgZGF0YSwgTlVMTCwgJmdyYXBoKTsKKwkJYnAgPSBvcHMtPndhbGtfc3RhY2soY29udGV4dCwgc3RhY2ssIGJwLCBvcHMsIGRhdGEsIE5VTEwsICZncmFwaCk7CiAKIAkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKWNvbnRleHQtPnByZXZpb3VzX2VzcDsKIAkJaWYgKCFzdGFjaykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCBiMTNhZjUzLi4wYWQ5NTk3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xODgsOCArMTg4LDggQEAKIAkJCWlmIChvcHMtPnN0YWNrKGRhdGEsIGlkKSA8IDApCiAJCQkJYnJlYWs7CiAKLQkJCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayh0aW5mbywgc3RhY2ssIGJwLCBvcHMsCi0JCQkJCQkgZGF0YSwgZXN0YWNrX2VuZCwgJmdyYXBoKTsKKwkJCWJwID0gb3BzLT53YWxrX3N0YWNrKHRpbmZvLCBzdGFjaywgYnAsIG9wcywKKwkJCQkJICAgICBkYXRhLCBlc3RhY2tfZW5kLCAmZ3JhcGgpOwogCQkJb3BzLT5zdGFjayhkYXRhLCAiPEVPRT4iKTsKIAkJCS8qCiAJCQkgKiBXZSBsaW5rIHRvIHRoZSBuZXh0IHN0YWNrIHZpYSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGY1MDQ0N2QuLmExYTc4NzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAvKgogICogRWFybHkgcmVzZXJ2ZWQgbWVtb3J5IGFyZWFzLgogICovCi0jZGVmaW5lIE1BWF9FQVJMWV9SRVMgMjAKKyNkZWZpbmUgTUFYX0VBUkxZX1JFUyAzMgogCiBzdHJ1Y3QgZWFybHlfcmVzIHsKIAl1NjQgc3RhcnQsIGVuZDsKQEAgLTczMywxMyArNzMzLDEzIEBACiB9Owogc3RhdGljIHN0cnVjdCBlYXJseV9yZXMgZWFybHlfcmVzW01BWF9FQVJMWV9SRVNdIF9faW5pdGRhdGEgPSB7CiAJeyAwLCBQQUdFX1NJWkUsICJCSU9TIGRhdGEgcGFnZSIsIDEgfSwJLyogQklPUyBkYXRhIHBhZ2UgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiBkZWZpbmVkKENPTkZJR19YODZfVFJBTVBPTElORSkKIAkvKgogCSAqIEJ1dCBmaXJzdCBwaW5jaCBhIGZldyBmb3IgdGhlIHN0YWNrL3RyYW1wb2xpbmUgc3R1ZmYKIAkgKiBGSVhNRTogRG9uJ3QgbmVlZCB0aGUgZXh0cmEgcGFnZSBhdCA0SywgYnV0IG5lZWQgdG8gZml4CiAJICogdHJhbXBvbGluZSBiZWZvcmUgcmVtb3ZpbmcgaXQuIChzZWUgdGhlIEdEVCBzdHVmZikKIAkgKi8KLQl7IFBBR0VfU0laRSwgUEFHRV9TSVpFLCAiRVggVFJBTVBPTElORSIsIDEgfSwKKwl7IFBBR0VfU0laRSwgUEFHRV9TSVpFICsgUEFHRV9TSVpFLCAiRVggVFJBTVBPTElORSIsIDEgfSwKICNlbmRpZgogCiAJe30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKaW5kZXggODQ0YzAyYy4uMGM4NjMyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9jb3JlLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHU7CiAJZW51bSB1Y29kZV9zdGF0ZSB1c3RhdGU7CiAKLQlpZiAodWNpLT52YWxpZCAmJiB1Y2ktPm1jKQorCWlmICh1Y2ktPnZhbGlkKQogCQl1c3RhdGUgPSBtaWNyb2NvZGVfcmVzdW1lX2NwdShjcHUpOwogCWVsc2UKIAkJdXN0YXRlID0gbWljcm9jb2RlX2luaXRfY3B1KGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKaW5kZXggNTcyYjA3ZS4uNGJkOTNjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21zci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJaW50IGksIGVyciA9IDA7CiAJaSA9IDA7CiAKLQlpZiAocmVnaXN0ZXJfY2hyZGV2KE1TUl9NQUpPUiwgImNwdS9tc3IiLCAmbXNyX2ZvcHMpKSB7CisJaWYgKF9fcmVnaXN0ZXJfY2hyZGV2KE1TUl9NQUpPUiwgMCwgTlJfQ1BVUywgImNwdS9tc3IiLCAmbXNyX2ZvcHMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibXNyOiB1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBtc3JcbiIsCiAJCSAgICAgICBNU1JfTUFKT1IpOwogCQllcnIgPSAtRUJVU1k7CkBAIC0yNzQsNyArMjc0LDcgQEAKIAkJbXNyX2RldmljZV9kZXN0cm95KGkpOwogCWNsYXNzX2Rlc3Ryb3kobXNyX2NsYXNzKTsKIG91dF9jaHJkZXY6Ci0JdW5yZWdpc3Rlcl9jaHJkZXYoTVNSX01BSk9SLCAiY3B1L21zciIpOworCV9fdW5yZWdpc3Rlcl9jaHJkZXYoTVNSX01BSk9SLCAwLCBOUl9DUFVTLCAiY3B1L21zciIpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5OGMyY2RlLi5jNmVlMjQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEwMyw4ICsxMDMsOCBAQAogCWlmICghcHJvZHVjdCkKIAkJcHJvZHVjdCA9ICIiOwogCi0JcHJpbnRrKCJcbiIpOwotCXByaW50ayhLRVJOX0lORk8gIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzICUuKnMgJXMvJXNcbiIsCisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwlwcmludGsoS0VSTl9ERUZBVUxUICJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzICVzLyVzXG4iLAogCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDljNTE3YjUuLjM3YWQxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTM5LDE2ICsxMzksMTYgQEAKIAogCXNob3dfcmVnc19jb21tb24oKTsKIAotCXByaW50aygiRUlQOiAlMDR4Ols8JTA4bHg+XSBFRkxBR1M6ICUwOGx4IENQVTogJWRcbiIsCisJcHJpbnRrKEtFUk5fREVGQVVMVCAiRUlQOiAlMDR4Ols8JTA4bHg+XSBFRkxBR1M6ICUwOGx4IENQVTogJWRcbiIsCiAJCQkodTE2KXJlZ3MtPmNzLCByZWdzLT5pcCwgcmVncy0+ZmxhZ3MsCiAJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXByaW50X3N5bWJvbCgiRUlQIGlzIGF0ICVzXG4iLCByZWdzLT5pcCk7CiAKLQlwcmludGsoIkVBWDogJTA4bHggRUJYOiAlMDhseCBFQ1g6ICUwOGx4IEVEWDogJTA4bHhcbiIsCisJcHJpbnRrKEtFUk5fREVGQVVMVCAiRUFYOiAlMDhseCBFQlg6ICUwOGx4IEVDWDogJTA4bHggRURYOiAlMDhseFxuIiwKIAkJcmVncy0+YXgsIHJlZ3MtPmJ4LCByZWdzLT5jeCwgcmVncy0+ZHgpOwotCXByaW50aygiRVNJOiAlMDhseCBFREk6ICUwOGx4IEVCUDogJTA4bHggRVNQOiAlMDhseFxuIiwKKwlwcmludGsoS0VSTl9ERUZBVUxUICJFU0k6ICUwOGx4IEVESTogJTA4bHggRUJQOiAlMDhseCBFU1A6ICUwOGx4XG4iLAogCQlyZWdzLT5zaSwgcmVncy0+ZGksIHJlZ3MtPmJwLCBzcCk7Ci0JcHJpbnRrKCIgRFM6ICUwNHggRVM6ICUwNHggRlM6ICUwNHggR1M6ICUwNHggU1M6ICUwNHhcbiIsCisJcHJpbnRrKEtFUk5fREVGQVVMVCAiIERTOiAlMDR4IEVTOiAlMDR4IEZTOiAlMDR4IEdTOiAlMDR4IFNTOiAlMDR4XG4iLAogCSAgICAgICAodTE2KXJlZ3MtPmRzLCAodTE2KXJlZ3MtPmVzLCAodTE2KXJlZ3MtPmZzLCBncywgc3MpOwogCiAJaWYgKCFhbGwpCkBAIC0xNTgsMTkgKzE1OCwxOSBAQAogCWNyMiA9IHJlYWRfY3IyKCk7CiAJY3IzID0gcmVhZF9jcjMoKTsKIAljcjQgPSByZWFkX2NyNF9zYWZlKCk7Ci0JcHJpbnRrKCJDUjA6ICUwOGx4IENSMjogJTA4bHggQ1IzOiAlMDhseCBDUjQ6ICUwOGx4XG4iLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIkNSMDogJTA4bHggQ1IyOiAlMDhseCBDUjM6ICUwOGx4IENSNDogJTA4bHhcbiIsCiAJCQljcjAsIGNyMiwgY3IzLCBjcjQpOwogCiAJZ2V0X2RlYnVncmVnKGQwLCAwKTsKIAlnZXRfZGVidWdyZWcoZDEsIDEpOwogCWdldF9kZWJ1Z3JlZyhkMiwgMik7CiAJZ2V0X2RlYnVncmVnKGQzLCAzKTsKLQlwcmludGsoIkRSMDogJTA4bHggRFIxOiAlMDhseCBEUjI6ICUwOGx4IERSMzogJTA4bHhcbiIsCisJcHJpbnRrKEtFUk5fREVGQVVMVCAiRFIwOiAlMDhseCBEUjE6ICUwOGx4IERSMjogJTA4bHggRFIzOiAlMDhseFxuIiwKIAkJCWQwLCBkMSwgZDIsIGQzKTsKIAogCWdldF9kZWJ1Z3JlZyhkNiwgNik7CiAJZ2V0X2RlYnVncmVnKGQ3LCA3KTsKLQlwcmludGsoIkRSNjogJTA4bHggRFI3OiAlMDhseFxuIiwKKwlwcmludGsoS0VSTl9ERUZBVUxUICJEUjY6ICUwOGx4IERSNzogJTA4bHhcbiIsCiAJCQlkNiwgZDcpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCA1MmZiZDBjLi5mOWUwMzMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTE2MSwxOSArMTYxLDE5IEBACiAJdW5zaWduZWQgaW50IGRzLCBjcywgZXM7CiAKIAlzaG93X3JlZ3NfY29tbW9uKCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUklQOiAlMDRseDpbPCUwMTZseD5dICIsIHJlZ3MtPmNzICYgMHhmZmZmLCByZWdzLT5pcCk7CisJcHJpbnRrKEtFUk5fREVGQVVMVCAiUklQOiAlMDRseDpbPCUwMTZseD5dICIsIHJlZ3MtPmNzICYgMHhmZmZmLCByZWdzLT5pcCk7CiAJcHJpbnRrX2FkZHJlc3MocmVncy0+aXAsIDEpOwotCXByaW50ayhLRVJOX0lORk8gIlJTUDogJTA0bHg6JTAxNmx4ICBFRkxBR1M6ICUwOGx4XG4iLCByZWdzLT5zcywKKwlwcmludGsoS0VSTl9ERUZBVUxUICJSU1A6ICUwNGx4OiUwMTZseCAgRUZMQUdTOiAlMDhseFxuIiwgcmVncy0+c3MsCiAJCQlyZWdzLT5zcCwgcmVncy0+ZmxhZ3MpOwotCXByaW50ayhLRVJOX0lORk8gIlJBWDogJTAxNmx4IFJCWDogJTAxNmx4IFJDWDogJTAxNmx4XG4iLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIlJBWDogJTAxNmx4IFJCWDogJTAxNmx4IFJDWDogJTAxNmx4XG4iLAogCSAgICAgICByZWdzLT5heCwgcmVncy0+YngsIHJlZ3MtPmN4KTsKLQlwcmludGsoS0VSTl9JTkZPICJSRFg6ICUwMTZseCBSU0k6ICUwMTZseCBSREk6ICUwMTZseFxuIiwKKwlwcmludGsoS0VSTl9ERUZBVUxUICJSRFg6ICUwMTZseCBSU0k6ICUwMTZseCBSREk6ICUwMTZseFxuIiwKIAkgICAgICAgcmVncy0+ZHgsIHJlZ3MtPnNpLCByZWdzLT5kaSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUkJQOiAlMDE2bHggUjA4OiAlMDE2bHggUjA5OiAlMDE2bHhcbiIsCisJcHJpbnRrKEtFUk5fREVGQVVMVCAiUkJQOiAlMDE2bHggUjA4OiAlMDE2bHggUjA5OiAlMDE2bHhcbiIsCiAJICAgICAgIHJlZ3MtPmJwLCByZWdzLT5yOCwgcmVncy0+cjkpOwotCXByaW50ayhLRVJOX0lORk8gIlIxMDogJTAxNmx4IFIxMTogJTAxNmx4IFIxMjogJTAxNmx4XG4iLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIlIxMDogJTAxNmx4IFIxMTogJTAxNmx4IFIxMjogJTAxNmx4XG4iLAogCSAgICAgICByZWdzLT5yMTAsIHJlZ3MtPnIxMSwgcmVncy0+cjEyKTsKLQlwcmludGsoS0VSTl9JTkZPICJSMTM6ICUwMTZseCBSMTQ6ICUwMTZseCBSMTU6ICUwMTZseFxuIiwKKwlwcmludGsoS0VSTl9ERUZBVUxUICJSMTM6ICUwMTZseCBSMTQ6ICUwMTZseCBSMTU6ICUwMTZseFxuIiwKIAkgICAgICAgcmVncy0+cjEzLCByZWdzLT5yMTQsIHJlZ3MtPnIxNSk7CiAKIAlhc20oIm1vdmwgJSVkcywlMCIgOiAiPXIiIChkcykpOwpAQCAtMTk0LDIxICsxOTQsMjEgQEAKIAljcjMgPSByZWFkX2NyMygpOwogCWNyNCA9IHJlYWRfY3I0KCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJGUzogICUwMTZseCglMDR4KSBHUzolMDE2bHgoJTA0eCkga25sR1M6JTAxNmx4XG4iLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIkZTOiAgJTAxNmx4KCUwNHgpIEdTOiUwMTZseCglMDR4KSBrbmxHUzolMDE2bHhcbiIsCiAJICAgICAgIGZzLCBmc2luZGV4LCBncywgZ3NpbmRleCwgc2hhZG93Z3MpOwotCXByaW50ayhLRVJOX0lORk8gIkNTOiAgJTA0eCBEUzogJTA0eCBFUzogJTA0eCBDUjA6ICUwMTZseFxuIiwgY3MsIGRzLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIkNTOiAgJTA0eCBEUzogJTA0eCBFUzogJTA0eCBDUjA6ICUwMTZseFxuIiwgY3MsIGRzLAogCQkJZXMsIGNyMCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQ1IyOiAlMDE2bHggQ1IzOiAlMDE2bHggQ1I0OiAlMDE2bHhcbiIsIGNyMiwgY3IzLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIkNSMjogJTAxNmx4IENSMzogJTAxNmx4IENSNDogJTAxNmx4XG4iLCBjcjIsIGNyMywKIAkJCWNyNCk7CiAKIAlnZXRfZGVidWdyZWcoZDAsIDApOwogCWdldF9kZWJ1Z3JlZyhkMSwgMSk7CiAJZ2V0X2RlYnVncmVnKGQyLCAyKTsKLQlwcmludGsoS0VSTl9JTkZPICJEUjA6ICUwMTZseCBEUjE6ICUwMTZseCBEUjI6ICUwMTZseFxuIiwgZDAsIGQxLCBkMik7CisJcHJpbnRrKEtFUk5fREVGQVVMVCAiRFIwOiAlMDE2bHggRFIxOiAlMDE2bHggRFIyOiAlMDE2bHhcbiIsIGQwLCBkMSwgZDIpOwogCWdldF9kZWJ1Z3JlZyhkMywgMyk7CiAJZ2V0X2RlYnVncmVnKGQ2LCA2KTsKIAlnZXRfZGVidWdyZWcoZDcsIDcpOwotCXByaW50ayhLRVJOX0lORk8gIkRSMzogJTAxNmx4IERSNjogJTAxNmx4IERSNzogJTAxNmx4XG4iLCBkMywgZDYsIGQ3KTsKKwlwcmludGsoS0VSTl9ERUZBVUxUICJEUjM6ICUwMTZseCBEUjY6ICUwMTZseCBEUjc6ICUwMTZseFxuIiwgZDMsIGQ2LCBkNyk7CiB9CiAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggYzNlYjIwNy4uOTIyZWVmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC01MywxNyArNTMsMTkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBzYXZlX3N0YWNrX29wcyA9IHsKLQkud2FybmluZyA9IHNhdmVfc3RhY2tfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wgPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IHNhdmVfc3RhY2tfc3RhY2ssCi0JLmFkZHJlc3MgPSBzYXZlX3N0YWNrX2FkZHJlc3MsCisJLndhcm5pbmcJPSBzYXZlX3N0YWNrX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCT0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCT0gc2F2ZV9zdGFja19zdGFjaywKKwkuYWRkcmVzcwk9IHNhdmVfc3RhY2tfYWRkcmVzcywKKwkud2Fsa19zdGFjawk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHNhdmVfc3RhY2tfb3BzX25vc2NoZWQgPSB7Ci0JLndhcm5pbmcgPSBzYXZlX3N0YWNrX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKLQkuc3RhY2sgPSBzYXZlX3N0YWNrX3N0YWNrLAotCS5hZGRyZXNzID0gc2F2ZV9zdGFja19hZGRyZXNzX25vc2NoZWQsCisJLndhcm5pbmcJPSBzYXZlX3N0YWNrX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCT0gc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sJCT0gc2F2ZV9zdGFja19zdGFjaywKKwkuYWRkcmVzcwk9IHNhdmVfc3RhY2tfYWRkcmVzc19ub3NjaGVkLAorCS53YWxrX3N0YWNrCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggY2Q5ODJmNC4uNTk3NjgzYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzYzLDYgKzc2Myw3IEBACiB7CiAJaWYgKCF0c2NfdW5zdGFibGUpIHsKIAkJdHNjX3Vuc3RhYmxlID0gMTsKKwkJc2NoZWRfY2xvY2tfc3RhYmxlID0gMDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiTWFya2luZyBUU0MgdW5zdGFibGUgZHVlIHRvICVzXG4iLCByZWFzb24pOwogCQkvKiBDaGFuZ2Ugb25seSB0aGUgcmF0aW5nLCB3aGVuIG5vdCByZWdpc3RlcmVkICovCiAJCWlmIChjbG9ja3NvdXJjZV90c2MubXVsdCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwppbmRleCA2MWQ4MDVkLi5lY2U3M2Q4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3V2X2lycS5jCkBAIC0yMTUsOCArMjE1LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQ7CiAJdW5zaWduZWQgbW1yX3Bub2RlOwogCi0JZGVzdCA9IHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2spOwotCWlmIChkZXN0ID09IEJBRF9BUElDSUQpCisJaWYgKHNldF9kZXNjX2FmZmluaXR5KGRlc2MsIG1hc2ssICZkZXN0KSkKIAkJcmV0dXJuIC0xOwogCiAJbW1yX3ZhbHVlID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggY2Q2MGMwYi4uMzA2M2EwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTExNTAsNiArMTE1MCw3IEBACiAJaHJ0aW1lcl9jYW5jZWwoJmFwaWMtPmxhcGljX3RpbWVyLnRpbWVyKTsKIAl1cGRhdGVfZGl2aWRlX2NvdW50KGFwaWMpOwogCXN0YXJ0X2FwaWNfdGltZXIoYXBpYyk7CisJYXBpYy0+aXJyX3BlbmRpbmcgPSB0cnVlOwogfQogCiB2b2lkIF9fa3ZtX21pZ3JhdGVfYXBpY190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IGE2MDE3MTMuLjU4YTBmMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC00NTUsOCArNDU1LDYgQEAKIHN0YXRpYyB2b2lkIEZOQU1FKGludmxwZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCiB7CiAJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKLQlwdF9lbGVtZW50X3QgZ3B0ZTsKLQlncGFfdCBwdGVfZ3BhID0gLTE7CiAJaW50IGxldmVsOwogCXU2NCAqc3B0ZXA7CiAJaW50IG5lZWRfZmx1c2ggPSAwOwpAQCAtNDcwLDEwICs0NjgsNiBAQAogCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCAgfHwKIAkJICAgICgobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkgfHwKIAkJICAgICgobGV2ZWwgPT0gUFRfUERQRV9MRVZFTCAmJiBpc19sYXJnZV9wdGUoKnNwdGVwKSkpKSB7Ci0JCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKTsKLQotCQkJcHRlX2dwYSA9IChzcC0+Z2ZuIDw8IFBBR0VfU0hJRlQpOwotCQkJcHRlX2dwYSArPSAoc3B0ZXAgLSBzcC0+c3B0KSAqIHNpemVvZihwdF9lbGVtZW50X3QpOwogCiAJCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkpIHsKIAkJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKQEAgLTQ5MiwxOCArNDg2LDYgQEAKIAlpZiAobmVlZF9mbHVzaCkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwotCi0JaWYgKHB0ZV9ncGEgPT0gLTEpCi0JCXJldHVybjsKLQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgcHRlX2dwYSwgJmdwdGUsCi0JCQkJICBzaXplb2YocHRfZWxlbWVudF90KSkpCi0JCXJldHVybjsKLQlpZiAoaXNfcHJlc2VudF9ncHRlKGdwdGUpICYmIChncHRlICYgUFRfQUNDRVNTRURfTUFTSykpIHsKLQkJaWYgKG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUpKQotCQkJcmV0dXJuOwotCQlrdm1fbW11X3B0ZV93cml0ZSh2Y3B1LCBwdGVfZ3BhLCAoY29uc3QgdTggKikmZ3B0ZSwKLQkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpLCAwKTsKLQl9CiB9CiAKIHN0YXRpYyBncGFfdCBGTkFNRShndmFfdG9fZ3BhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHZhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDlkMDY4OTYuLjY2NTFkYmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTE5MTMsNyArMTkxMyw4IEBACiAKIAlldmVudHMtPnNpcGlfdmVjdG9yID0gdmNwdS0+YXJjaC5zaXBpX3ZlY3RvcjsKIAotCWV2ZW50cy0+ZmxhZ3MgPSAwOworCWV2ZW50cy0+ZmxhZ3MgPSAoS1ZNX1ZDUFVFVkVOVF9WQUxJRF9OTUlfUEVORElORworCQkJIHwgS1ZNX1ZDUFVFVkVOVF9WQUxJRF9TSVBJX1ZFQ1RPUik7CiAKIAl2Y3B1X3B1dCh2Y3B1KTsKIH0KQEAgLTE5MjEsNyArMTkyMiw4IEBACiBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfdmNwdV9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHVfZXZlbnRzICpldmVudHMpCiB7Ci0JaWYgKGV2ZW50cy0+ZmxhZ3MpCisJaWYgKGV2ZW50cy0+ZmxhZ3MgJiB+KEtWTV9WQ1BVRVZFTlRfVkFMSURfTk1JX1BFTkRJTkcKKwkJCSAgICAgIHwgS1ZNX1ZDUFVFVkVOVF9WQUxJRF9TSVBJX1ZFQ1RPUikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdmNwdV9sb2FkKHZjcHUpOwpAQCAtMTkzOCwxMCArMTk0MCwxMiBAQAogCQlrdm1fcGljX2NsZWFyX2lzcl9hY2sodmNwdS0+a3ZtKTsKIAogCXZjcHUtPmFyY2gubm1pX2luamVjdGVkID0gZXZlbnRzLT5ubWkuaW5qZWN0ZWQ7Ci0JdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IGV2ZW50cy0+bm1pLnBlbmRpbmc7CisJaWYgKGV2ZW50cy0+ZmxhZ3MgJiBLVk1fVkNQVUVWRU5UX1ZBTElEX05NSV9QRU5ESU5HKQorCQl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gZXZlbnRzLT5ubWkucGVuZGluZzsKIAlrdm1feDg2X29wcy0+c2V0X25taV9tYXNrKHZjcHUsIGV2ZW50cy0+bm1pLm1hc2tlZCk7CiAKLQl2Y3B1LT5hcmNoLnNpcGlfdmVjdG9yID0gZXZlbnRzLT5zaXBpX3ZlY3RvcjsKKwlpZiAoZXZlbnRzLT5mbGFncyAmIEtWTV9WQ1BVRVZFTlRfVkFMSURfU0lQSV9WRUNUT1IpCisJCXZjcHUtPmFyY2guc2lwaV92ZWN0b3IgPSBldmVudHMtPnNpcGlfdmVjdG9yOwogCiAJdmNwdV9wdXQodmNwdSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZSBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQppbmRleCA0NWIyMGU0Li5jZmZkNzU0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQAogCiBjbGVhbi1maWxlcyA6PSBpbmF0LXRhYmxlcy5jCiAKLW9iai0kKENPTkZJR19TTVApIDo9IG1zci5vCitvYmotJChDT05GSUdfU01QKSArPSBtc3Itc21wLm8KIAogbGliLXkgOj0gZGVsYXkubwogbGliLXkgKz0gdGh1bmtfJChCSVRTKS5vCkBAIC0yMiw3ICsyMiw3IEBACiBsaWIteSArPSBtZW1jcHlfJChCSVRTKS5vCiBsaWItJChDT05GSUdfS1BST0JFUykgKz0gaW5zbi5vIGluYXQubwogCi1vYmoteSArPSBtc3ItcmVnLm8gbXNyLXJlZy1leHBvcnQubworb2JqLXkgKz0gbXNyLm8gbXNyLXJlZy5vIG1zci1yZWctZXhwb3J0Lm8KIAogaWZlcSAoJChDT05GSUdfWDg2XzMyKSx5KQogICAgICAgICBvYmoteSArPSBhdG9taWM2NF8zMi5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbXNyLXNtcC5jIGIvYXJjaC94ODYvbGliL21zci1zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmIxYjg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL21zci1zbXAuYwpAQCAtMCwwICsxLDIwNCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisKK3N0YXRpYyB2b2lkIF9fcmRtc3Jfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87CisJc3RydWN0IG1zciAqcmVnOworCWludCB0aGlzX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAocnYtPm1zcnMpCisJCXJlZyA9IHBlcl9jcHVfcHRyKHJ2LT5tc3JzLCB0aGlzX2NwdSk7CisJZWxzZQorCQlyZWcgPSAmcnYtPnJlZzsKKworCXJkbXNyKHJ2LT5tc3Jfbm8sIHJlZy0+bCwgcmVnLT5oKTsKK30KKworc3RhdGljIHZvaWQgX193cm1zcl9vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKKwlzdHJ1Y3QgbXNyICpyZWc7CisJaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChydi0+bXNycykKKwkJcmVnID0gcGVyX2NwdV9wdHIocnYtPm1zcnMsIHRoaXNfY3B1KTsKKwllbHNlCisJCXJlZyA9ICZydi0+cmVnOworCisJd3Jtc3IocnYtPm1zcl9ubywgcmVnLT5sLCByZWctPmgpOworfQorCitpbnQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQoreworCWludCBlcnI7CisJc3RydWN0IG1zcl9pbmZvIHJ2OworCisJbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7CisKKwlydi5tc3Jfbm8gPSBtc3Jfbm87CisJZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9vbl9jcHUsICZydiwgMSk7CisJKmwgPSBydi5yZWcubDsKKwkqaCA9IHJ2LnJlZy5oOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1KTsKKworaW50IHdybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX2luZm8gcnY7CisKKwltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKKworCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKKwlydi5yZWcubCA9IGw7CisJcnYucmVnLmggPSBoOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfb25fY3B1LCAmcnYsIDEpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wod3Jtc3Jfb25fY3B1KTsKKworc3RhdGljIHZvaWQgX19yd21zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLAorCQkJICAgIHN0cnVjdCBtc3IgKm1zcnMsCisJCQkgICAgdm9pZCAoKm1zcl9mdW5jKSAodm9pZCAqaW5mbykpCit7CisJc3RydWN0IG1zcl9pbmZvIHJ2OworCWludCB0aGlzX2NwdTsKKworCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOworCisJcnYubXNycwkgID0gbXNyczsKKwlydi5tc3Jfbm8gPSBtc3Jfbm87CisKKwl0aGlzX2NwdSA9IGdldF9jcHUoKTsKKworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCBtYXNrKSkKKwkJbXNyX2Z1bmMoJnJ2KTsKKworCXNtcF9jYWxsX2Z1bmN0aW9uX21hbnkobWFzaywgbXNyX2Z1bmMsICZydiwgMSk7CisJcHV0X2NwdSgpOworfQorCisvKiByZG1zciBvbiBhIGJ1bmNoIG9mIENQVXMKKyAqCisgKiBAbWFzazogICAgICAgd2hpY2ggQ1BVcworICogQG1zcl9ubzogICAgIHdoaWNoIE1TUgorICogQG1zcnM6ICAgICAgIGFycmF5IG9mIE1TUiB2YWx1ZXMKKyAqCisgKi8KK3ZvaWQgcmRtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKK3sKKwlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3JkbXNyX29uX2NwdSk7Cit9CitFWFBPUlRfU1lNQk9MKHJkbXNyX29uX2NwdXMpOworCisvKgorICogd3Jtc3Igb24gYSBidW5jaCBvZiBDUFVzCisgKgorICogQG1hc2s6ICAgICAgIHdoaWNoIENQVXMKKyAqIEBtc3Jfbm86ICAgICB3aGljaCBNU1IKKyAqIEBtc3JzOiAgICAgICBhcnJheSBvZiBNU1IgdmFsdWVzCisgKgorICovCit2b2lkIHdybXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUzMiBtc3Jfbm8sIHN0cnVjdCBtc3IgKm1zcnMpCit7CisJX19yd21zcl9vbl9jcHVzKG1hc2ssIG1zcl9ubywgbXNycywgX193cm1zcl9vbl9jcHUpOworfQorRVhQT1JUX1NZTUJPTCh3cm1zcl9vbl9jcHVzKTsKKworLyogVGhlc2UgInNhZmUiIHZhcmlhbnRzIGFyZSBzbG93ZXIgYW5kIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHRhcmdldCBNU1IKKyAgIG1heSBub3QgYWN0dWFsbHkgZXhpc3QuICovCitzdGF0aWMgdm9pZCBfX3JkbXNyX3NhZmVfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87CisKKwlydi0+ZXJyID0gcmRtc3Jfc2FmZShydi0+bXNyX25vLCAmcnYtPnJlZy5sLCAmcnYtPnJlZy5oKTsKK30KKworc3RhdGljIHZvaWQgX193cm1zcl9zYWZlX29uX2NwdSh2b2lkICppbmZvKQoreworCXN0cnVjdCBtc3JfaW5mbyAqcnYgPSBpbmZvOworCisJcnYtPmVyciA9IHdybXNyX3NhZmUocnYtPm1zcl9ubywgcnYtPnJlZy5sLCBydi0+cmVnLmgpOworfQorCitpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX2luZm8gcnY7CisKKwltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKKworCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3JkbXNyX3NhZmVfb25fY3B1LCAmcnYsIDEpOworCSpsID0gcnYucmVnLmw7CisJKmggPSBydi5yZWcuaDsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfb25fY3B1KTsKKworaW50IHdybXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfaW5mbyBydjsKKworCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOworCisJcnYubXNyX25vID0gbXNyX25vOworCXJ2LnJlZy5sID0gbDsKKwlydi5yZWcuaCA9IGg7CisJZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX193cm1zcl9zYWZlX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfb25fY3B1KTsKKworLyoKKyAqIFRoZXNlIHZhcmlhbnRzIGFyZSBzaWduaWZpY2FudGx5IHNsb3dlciwgYnV0IGFsbG93cyBjb250cm9sIG92ZXIKKyAqIHRoZSBlbnRpcmUgMzItYml0IEdQUiBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSh2b2lkICppbmZvKQoreworCXN0cnVjdCBtc3JfcmVnc19pbmZvICpydiA9IGluZm87CisKKwlydi0+ZXJyID0gcmRtc3Jfc2FmZV9yZWdzKHJ2LT5yZWdzKTsKK30KKworc3RhdGljIHZvaWQgX193cm1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSB3cm1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOworfQorCitpbnQgcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKKworCXJ2LnJlZ3MgICA9IHJlZ3M7CisJcnYuZXJyICAgID0gLUVJTzsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3JkbXNyX3NhZmVfcmVnc19vbl9jcHUsICZydiwgMSk7CisKKwlyZXR1cm4gZXJyID8gZXJyIDogcnYuZXJyOworfQorRVhQT1JUX1NZTUJPTChyZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KTsKKworaW50IHdybXNyX3NhZmVfcmVnc19vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyICpyZWdzKQoreworCWludCBlcnI7CisJc3RydWN0IG1zcl9yZWdzX2luZm8gcnY7CisKKwlydi5yZWdzID0gcmVnczsKKwlydi5lcnIgID0gLUVJTzsKKwllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUsICZydiwgMSk7CisKKwlyZXR1cm4gZXJyID8gZXJyIDogcnYuZXJyOworfQorRVhQT1JUX1NZTUJPTCh3cm1zcl9zYWZlX3JlZ3Nfb25fY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3IuYyBiL2FyY2gveDg2L2xpYi9tc3IuYwppbmRleCA4NzI4MzQxLi44ZjhlZWJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbXNyLmMKKysrIGIvYXJjaC94ODYvbGliL21zci5jCkBAIC0xLDEyMyArMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAotc3RydWN0IG1zcl9pbmZvIHsKLQl1MzIgbXNyX25vOwotCXN0cnVjdCBtc3IgcmVnOwotCXN0cnVjdCBtc3IgKm1zcnM7Ci0JaW50IGVycjsKLX07Ci0KLXN0YXRpYyB2b2lkIF9fcmRtc3Jfb25fY3B1KHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87Ci0Jc3RydWN0IG1zciAqcmVnOwotCWludCB0aGlzX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAocnYtPm1zcnMpCi0JCXJlZyA9IHBlcl9jcHVfcHRyKHJ2LT5tc3JzLCB0aGlzX2NwdSk7Ci0JZWxzZQotCQlyZWcgPSAmcnYtPnJlZzsKLQotCXJkbXNyKHJ2LT5tc3Jfbm8sIHJlZy0+bCwgcmVnLT5oKTsKLX0KLQotc3RhdGljIHZvaWQgX193cm1zcl9vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKLQlzdHJ1Y3QgbXNyICpyZWc7Ci0JaW50IHRoaXNfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChydi0+bXNycykKLQkJcmVnID0gcGVyX2NwdV9wdHIocnYtPm1zcnMsIHRoaXNfY3B1KTsKLQllbHNlCi0JCXJlZyA9ICZydi0+cmVnOwotCi0Jd3Jtc3IocnYtPm1zcl9ubywgcmVnLT5sLCByZWctPmgpOwotfQotCi1pbnQgcmRtc3Jfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiAqbCwgdTMyICpoKQotewotCWludCBlcnI7Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0JZXJyID0gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX19yZG1zcl9vbl9jcHUsICZydiwgMSk7Ci0JKmwgPSBydi5yZWcubDsKLQkqaCA9IHJ2LnJlZy5oOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfb25fY3B1KTsKLQotaW50IHdybXNyX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgbCwgdTMyIGgpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXNyX2luZm8gcnY7Ci0KLQltZW1zZXQoJnJ2LCAwLCBzaXplb2YocnYpKTsKLQotCXJ2Lm1zcl9ubyA9IG1zcl9ubzsKLQlydi5yZWcubCA9IGw7Ci0JcnYucmVnLmggPSBoOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfb25fY3B1LCAmcnYsIDEpOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0wod3Jtc3Jfb25fY3B1KTsKLQotc3RhdGljIHZvaWQgX19yd21zcl9vbl9jcHVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1MzIgbXNyX25vLAotCQkJICAgIHN0cnVjdCBtc3IgKm1zcnMsCi0JCQkgICAgdm9pZCAoKm1zcl9mdW5jKSAodm9pZCAqaW5mbykpCi17Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCWludCB0aGlzX2NwdTsKLQotCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOwotCi0JcnYubXNycwkgID0gbXNyczsKLQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0KLQl0aGlzX2NwdSA9IGdldF9jcHUoKTsKLQotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCBtYXNrKSkKLQkJbXNyX2Z1bmMoJnJ2KTsKLQotCXNtcF9jYWxsX2Z1bmN0aW9uX21hbnkobWFzaywgbXNyX2Z1bmMsICZydiwgMSk7Ci0JcHV0X2NwdSgpOwotfQotCi0vKiByZG1zciBvbiBhIGJ1bmNoIG9mIENQVXMKLSAqCi0gKiBAbWFzazogICAgICAgd2hpY2ggQ1BVcwotICogQG1zcl9ubzogICAgIHdoaWNoIE1TUgotICogQG1zcnM6ICAgICAgIGFycmF5IG9mIE1TUiB2YWx1ZXMKLSAqCi0gKi8KLXZvaWQgcmRtc3Jfb25fY3B1cyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycykKLXsKLQlfX3J3bXNyX29uX2NwdXMobWFzaywgbXNyX25vLCBtc3JzLCBfX3JkbXNyX29uX2NwdSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHJkbXNyX29uX2NwdXMpOwotCi0vKgotICogd3Jtc3Igb24gYSBidW5jaCBvZiBDUFVzCi0gKgotICogQG1hc2s6ICAgICAgIHdoaWNoIENQVXMKLSAqIEBtc3Jfbm86ICAgICB3aGljaCBNU1IKLSAqIEBtc3JzOiAgICAgICBhcnJheSBvZiBNU1IgdmFsdWVzCi0gKgotICovCi12b2lkIHdybXNyX29uX2NwdXMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUzMiBtc3Jfbm8sIHN0cnVjdCBtc3IgKm1zcnMpCi17Ci0JX19yd21zcl9vbl9jcHVzKG1hc2ssIG1zcl9ubywgbXNycywgX193cm1zcl9vbl9jcHUpOwotfQotRVhQT1JUX1NZTUJPTCh3cm1zcl9vbl9jcHVzKTsKLQogc3RydWN0IG1zciAqbXNyc19hbGxvYyh2b2lkKQogewogCXN0cnVjdCBtc3IgKm1zcnMgPSBOVUxMOwpAQCAtMTM3LDEwMCArMjEsMyBAQAogCWZyZWVfcGVyY3B1KG1zcnMpOwogfQogRVhQT1JUX1NZTUJPTChtc3JzX2ZyZWUpOwotCi0vKiBUaGVzZSAic2FmZSIgdmFyaWFudHMgYXJlIHNsb3dlciBhbmQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgdGFyZ2V0IE1TUgotICAgbWF5IG5vdCBhY3R1YWxseSBleGlzdC4gKi8KLXN0YXRpYyB2b2lkIF9fcmRtc3Jfc2FmZV9vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX2luZm8gKnJ2ID0gaW5mbzsKLQotCXJ2LT5lcnIgPSByZG1zcl9zYWZlKHJ2LT5tc3Jfbm8sICZydi0+cmVnLmwsICZydi0+cmVnLmgpOwotfQotCi1zdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfb25fY3B1KHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IG1zcl9pbmZvICpydiA9IGluZm87Ci0KLQlydi0+ZXJyID0gd3Jtc3Jfc2FmZShydi0+bXNyX25vLCBydi0+cmVnLmwsIHJ2LT5yZWcuaCk7Ci19Ci0KLWludCByZG1zcl9zYWZlX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgbXNyX25vLCB1MzIgKmwsIHUzMiAqaCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBtc3JfaW5mbyBydjsKLQotCW1lbXNldCgmcnYsIDAsIHNpemVvZihydikpOwotCi0JcnYubXNyX25vID0gbXNyX25vOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9vbl9jcHUsICZydiwgMSk7Ci0JKmwgPSBydi5yZWcubDsKLQkqaCA9IHJ2LnJlZy5oOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKLX0KLUVYUE9SVF9TWU1CT0wocmRtc3Jfc2FmZV9vbl9jcHUpOwotCi1pbnQgd3Jtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyIGwsIHUzMiBoKQotewotCWludCBlcnI7Ci0Jc3RydWN0IG1zcl9pbmZvIHJ2OwotCi0JbWVtc2V0KCZydiwgMCwgc2l6ZW9mKHJ2KSk7Ci0KLQlydi5tc3Jfbm8gPSBtc3Jfbm87Ci0JcnYucmVnLmwgPSBsOwotCXJ2LnJlZy5oID0gaDsKLQllcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3dybXNyX3NhZmVfb25fY3B1LCAmcnYsIDEpOwotCi0JcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKLX0KLUVYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9vbl9jcHUpOwotCi0vKgotICogVGhlc2UgdmFyaWFudHMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlcgotICogdGhlIGVudGlyZSAzMi1iaXQgR1BSIHNldC4KLSAqLwotc3RydWN0IG1zcl9yZWdzX2luZm8gewotCXUzMiAqcmVnczsKLQlpbnQgZXJyOwotfTsKLQotc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCi17Ci0Jc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKLQotCXJ2LT5lcnIgPSByZG1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKLXsKLQlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOwotCi0JcnYtPmVyciA9IHdybXNyX3NhZmVfcmVncyhydi0+cmVncyk7Ci19Ci0KLWludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OwotCi0JcnYucmVncyAgID0gcmVnczsKLQlydi5lcnIgICAgPSAtRUlPOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKLQotCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfcmVnc19vbl9jcHUpOwotCi1pbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKLQotCXJ2LnJlZ3MgPSByZWdzOwotCXJ2LmVyciAgPSAtRUlPOwotCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKLQotCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfcmVnc19vbl9jcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCmluZGV4IGM5NzNmOGUuLjlhMGMyNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKQEAgLTg5Miw4ICs4OTIsNyBAQAogCQlyZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJZGF0YXNpemUgPj4gMTAsCiAJCWluaXRzaXplID4+IDEwLAotCQkodW5zaWduZWQgbG9uZykgKHRvdGFsaGlnaF9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCkpCi0JICAgICAgICk7CisJCXRvdGFsaGlnaF9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCkpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAidmlydHVhbCBrZXJuZWwgbWVtb3J5IGxheW91dDpcbiIKIAkJIiAgICBmaXhtYXAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9lcnJvci5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmMKaW5kZXggNDkwMWQwZC4uYWYzYjZjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmMKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmMKQEAgLTEwNiwyNiArMTA2LDI1IEBACiAKIAlzd2l0Y2ggKGUtPnR5cGUpIHsKIAljYXNlIEtNRU1DSEVDS19FUlJPUl9JTlZBTElEX0FDQ0VTUzoKLQkJcHJpbnRrKEtFUk5fRVJSICAiV0FSTklORzoga21lbWNoZWNrOiBDYXVnaHQgJWQtYml0IHJlYWQgIgotCQkJImZyb20gJXMgbWVtb3J5ICglcClcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IGttZW1jaGVjazogQ2F1Z2h0ICVkLWJpdCByZWFkIGZyb20gJXMgbWVtb3J5ICglcClcbiIsCiAJCQk4ICogZS0+c2l6ZSwgZS0+c3RhdGUgPCBBUlJBWV9TSVpFKGRlc2MpID8KIAkJCQlkZXNjW2UtPnN0YXRlXSA6ICIoaW52YWxpZCBzaGFkb3cgc3RhdGUpIiwKIAkJCSh2b2lkICopIGUtPmFkZHJlc3MpOwogCi0JCXByaW50ayhLRVJOX0lORk8pOworCQlwcmludGsoS0VSTl9XQVJOSU5HKTsKIAkJZm9yIChpID0gMDsgaSA8IFNIQURPV19DT1BZX1NJWkU7ICsraSkKLQkJCXByaW50aygiJTAyeCIsIGUtPm1lbW9yeV9jb3B5W2ldKTsKLQkJcHJpbnRrKCJcbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiJTAyeCIsIGUtPm1lbW9yeV9jb3B5W2ldKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAotCQlwcmludGsoS0VSTl9JTkZPKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyk7CiAJCWZvciAoaSA9IDA7IGkgPCBTSEFET1dfQ09QWV9TSVpFOyArK2kpIHsKIAkJCWlmIChlLT5zaGFkb3dfY29weVtpXSA8IEFSUkFZX1NJWkUoc2hvcnRfZGVzYykpCi0JCQkJcHJpbnRrKCIgJWMiLCBzaG9ydF9kZXNjW2UtPnNoYWRvd19jb3B5W2ldXSk7CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVjIiwgc2hvcnRfZGVzY1tlLT5zaGFkb3dfY29weVtpXV0pOwogCQkJZWxzZQotCQkJCXByaW50aygiID8iKTsKKwkJCQlwcmludGsoS0VSTl9DT05UICIgPyIpOwogCQl9Ci0JCXByaW50aygiXG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJSpjXG4iLCAyICsgMgorCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlKmNcbiIsIDIgKyAyCiAJCQkqIChpbnQpIChlLT5hZGRyZXNzICYgKFNIQURPV19DT1BZX1NJWkUgLSAxKSksICdeJyk7CiAJCWJyZWFrOwogCWNhc2UgS01FTUNIRUNLX0VSUk9SX0JVRzoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfMzIuYyBiL2FyY2gveDg2L21tL3NyYXRfMzIuYwppbmRleCA2ZjhhYTMzLi45MzI0ZjEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCkBAIC0yNjcsNiArMjY3LDggQEAKIAkJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhjaHVuay0+bmlkLCBjaHVuay0+c3RhcnRfcGZuLAogCQkJCQkgICAgIG1pbihjaHVuay0+ZW5kX3BmbiwgbWF4X3BmbikpOwogCX0KKwkvKiBmb3Igb3V0IG9mIG9yZGVyIGVudHJpZXMgaW4gU1JBVCAqLworCXNvcnRfbm9kZV9tYXAoKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbm9kZV9zdGFydF9wZm5bbmlkXTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCBkODkwNzU0Li5hMjcxMjQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBzID0gbm9kZXNbaV0uc3RhcnQgPj4gUEFHRV9TSElGVDsKIAkJdW5zaWduZWQgbG9uZyBlID0gbm9kZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQ7CiAJCXB4bXJhbSArPSBlIC0gczsKLQkJcHhtcmFtIC09IGFic2VudF9wYWdlc19pbl9yYW5nZShzLCBlKTsKKwkJcHhtcmFtIC09IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKGksIHMsIGUpOwogCQlpZiAoKGxvbmcpcHhtcmFtIDwgMCkKIAkJCXB4bXJhbSA9IDA7CiAJfQpAQCAtMzczLDYgKzM3Myw4IEBACiAJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkKIAkJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpLCBub2Rlc1tpXS5zdGFydCA+PiBQQUdFX1NISUZULAogCQkJCQkJbm9kZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQpOworCS8qIGZvciBvdXQgb2Ygb3JkZXIgZW50cmllcyBpbiBTUkFUICovCisJc29ydF9ub2RlX21hcCgpOwogCWlmICghbm9kZXNfY292ZXJfbWVtb3J5KG5vZGVzKSkgewogCQliYWRfc3JhdCgpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IDA0NDg5N2IuLjM4NTUwOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC00MSwxMCArNDEsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzdGFja3RyYWNlX29wcyBiYWNrdHJhY2Vfb3BzID0gewotCS53YXJuaW5nID0gYmFja3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IGJhY2t0cmFjZV9zdGFjaywKLQkuYWRkcmVzcyA9IGJhY2t0cmFjZV9hZGRyZXNzLAorCS53YXJuaW5nCT0gYmFja3RyYWNlX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjawkJPSBiYWNrdHJhY2Vfc3RhY2ssCisJLmFkZHJlc3MJPSBiYWNrdHJhY2VfYWRkcmVzcywKKwkud2Fsa19zdGFjawk9IHByaW50X2NvbnRleHRfc3RhY2ssCiB9OwogCiBzdHJ1Y3QgZnJhbWVfaGVhZCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYyBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCmluZGV4IDE0NWRmMDAuLmY5MzlkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCisrKyBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCkBAIC01MSw3ICs1MSw3IEBACiAJfQogfQogCi12b2lkIF9faW5pdCB1cGRhdGVfcmVzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCBzaXplX3Qgc3RhcnQsCit2b2lkIF9fZGV2aW5pdCB1cGRhdGVfcmVzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCBzaXplX3Qgc3RhcnQsCiAJCQkgICAgICBzaXplX3QgZW5kLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgbWVyZ2UpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaW50ZWxfYnVzLmMgYi9hcmNoL3g4Ni9wY2kvaW50ZWxfYnVzLmMKaW5kZXggYjdhNTVkYy4uZjgxYTJmYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2ludGVsX2J1cy5jCisrKyBiL2FyY2gveDg2L3BjaS9pbnRlbF9idXMuYwpAQCAtNDksNiArNDksMTAgQEAKIAl1NjQgbW1pb2hfYmFzZSwgbW1pb2hfZW5kOwogCWludCBidXNfYmFzZSwgYnVzX2VuZDsKIAorCS8qIHNvbWUgc3lzIGRvZXNuJ3QgZ2V0IG1tY29uZiBlbmFibGVkICovCisJaWYgKGRldi0+Y2ZnX3NpemUgPCAweDEyMCkKKwkJcmV0dXJuOworCiAJaWYgKHBjaV9yb290X251bSA+PSBQQ0lfUk9PVF9OUikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiaW50ZWxfYnVzLmM6IFBDSV9ST09UX05SIGlzIHRvbyBzbWFsbFxuIik7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Rvb2xzL2Noa29iamR1bXAuYXdrIGIvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sKaW5kZXggMGQxM2NkOS4uZmQxYWI4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sKKysrIGIvYXJjaC94ODYvdG9vbHMvY2hrb2JqZHVtcC5hd2sKQEAgLTgsMTQgKzgsMjQgQEAKIAlvZF9zdmVyID0gMTk7CiB9CiAKLS9eR05VLyB7Ci0Jc3BsaXQoJDQsIHZlciwgIi4iKTsKKy9eR05VIG9iamR1bXAvIHsKKwl2ZXJzdHIgPSAiIgorCWZvciAoaSA9IDM7IGkgPD0gTkY7IGkrKykKKwkJaWYgKG1hdGNoKCQoaSksICJeWzAtOV0iKSkgeworCQkJdmVyc3RyID0gJChpKTsKKwkJCWJyZWFrOworCQl9CisJaWYgKHZlcnN0ciA9PSAiIikgeworCQlwcmludGYoIldhcm5pbmc6IEZhaWxlZCB0byBmaW5kIG9iamR1bXAgdmVyc2lvbiBudW1iZXIuXG4iKTsKKwkJZXhpdCAwOworCX0KKwlzcGxpdCh2ZXJzdHIsIHZlciwgIi4iKTsKIAlpZiAodmVyWzFdID4gb2RfdmVyIHx8CiAJICAgICh2ZXJbMV0gPT0gb2RfdmVyICYmIHZlclsyXSA+PSBvZF9zdmVyKSkgewogCQlleGl0IDE7CiAJfSBlbHNlIHsKIAkJcHJpbnRmKCJXYXJuaW5nOiBvYmpkdW1wIHZlcnNpb24gJXMgaXMgb2xkZXIgdGhhbiAlZC4lZFxuIiwKLQkJICAgICAgICQ0LCBvZF92ZXIsIG9kX3N2ZXIpOworCQkgICAgICAgdmVyc3RyLCBvZF92ZXIsIG9kX3N2ZXIpOwogCQlwcmludCgiV2FybmluZzogU2tpcHBpbmcgcG9zdHRlc3QuIik7CiAJCSMgTG9naWMgaXMgaW52ZXJ0ZWQsIGJlY2F1c2Ugd2UganVzdCBza2lwIHRlc3Qgd2l0aG91dCBlcnJvci4KIAkJZXhpdCAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrIGIvYXJjaC94ODYvdG9vbHMvZ2VuLWluc24tYXR0ci14ODYuYXdrCmluZGV4IDdhNjg1MDYuLmVhZjExZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL2dlbi1pbnNuLWF0dHIteDg2LmF3aworKysgYi9hcmNoL3g4Ni90b29scy9nZW4taW5zbi1hdHRyLXg4Ni5hd2sKQEAgLTYsOCArNiw2IEBACiAKICMgQXdrIGltcGxlbWVudGF0aW9uIHNhbml0eSBjaGVjawogZnVuY3Rpb24gY2hlY2tfYXdrX2ltcGxlbWVudCgpIHsKLQlpZiAoIW1hdGNoKCJhYmMiLCAiW1s6bG93ZXI6XV0rIikpCi0JCXJldHVybiAiWW91ciBhd2sgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3Rvci1jbGFzcy4iCiAJaWYgKHNwcmludGYoIiV4IiwgMCkgIT0gIjAiKQogCQlyZXR1cm4gIllvdXIgYXdrIGhhcyBhIHByaW50Zi1mb3JtYXQgcHJvYmxlbS4iCiAJcmV0dXJuICIiCkBAIC00NCwxMiArNDIsMTIgQEAKIAlkZWxldGUgZ3RhYmxlCiAJZGVsZXRlIGF0YWJsZQogCi0Jb3BuZF9leHByID0gIl5bWzphbHBoYTpdL10iCisJb3BuZF9leHByID0gIl5bQS1aYS16L10iCiAJZXh0X2V4cHIgPSAiXlxcKCIKIAlzZXBfZXhwciA9ICJeXFx8JCIKLQlncm91cF9leHByID0gIl5HcnBbWzphbG51bTpdXSsiCisJZ3JvdXBfZXhwciA9ICJeR3JwWzAtOUEtWmEtel0rIgogCi0JaW1tX2V4cHIgPSAiXltJSkFPXVtbOmxvd2VyOl1dIgorCWltbV9leHByID0gIl5bSUpBT11bYS16XSIKIAlpbW1fZmxhZ1siSWIiXSA9ICJJTkFUX01BS0VfSU1NKElOQVRfSU1NX0JZVEUpIgogCWltbV9mbGFnWyJKYiJdID0gIklOQVRfTUFLRV9JTU0oSU5BVF9JTU1fQllURSkiCiAJaW1tX2ZsYWdbIkl3Il0gPSAiSU5BVF9NQUtFX0lNTShJTkFUX0lNTV9XT1JEKSIKQEAgLTYyLDcgKzYwLDcgQEAKIAlpbW1fZmxhZ1siT2IiXSA9ICJJTkFUX01PRkZTRVQiCiAJaW1tX2ZsYWdbIk92Il0gPSAiSU5BVF9NT0ZGU0VUIgogCi0JbW9kcm1fZXhwciA9ICJeKFtDREVHTU5QUVJTVVZXL11bWzpsb3dlcjpdXSt8TlRBfFRbMDEyXSkiCisJbW9kcm1fZXhwciA9ICJeKFtDREVHTU5QUVJTVVZXL11bYS16XSt8TlRBfFRbMDEyXSkiCiAJZm9yY2U2NF9leHByID0gIlxcKFtkZl02NFxcKSIKIAlyZXhfZXhwciA9ICJeUkVYKFxcLltYUldCXSspKiIKIAlmcHVfZXhwciA9ICJeRVNDIiAjIFRPRE8KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1iYXJyaWVyLmMgYi9ibG9jay9ibGstYmFycmllci5jCmluZGV4IDg4NzNiOWIuLjg2MThkODkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1iYXJyaWVyLmMKKysrIGIvYmxvY2svYmxrLWJhcnJpZXIuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJCSAqIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBuZWVkLiAgSWYgd2UnbGwgZXZlciBuZWVkCiAJCSAqIG1vcmUgdGhlIGludGVyZmFjZSB3aWxsIG5lZWQgcmV2aXNpdGluZy4KIAkJICovCi0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwX21hc2sgfCBfX0dGUF9aRVJPKTsKIAkJaWYgKCFwYWdlKQogCQkJZ290byBvdXRfZnJlZV9iaW87CiAJCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlLCBzZWN0b3Jfc2l6ZSwgMCkgPCBzZWN0b3Jfc2l6ZSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggNmFlMTE4ZC4uZDUyZDRhZCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTUwNSwyMSArNTA1LDMwIEBACiAKIC8qKgogICogYmxrX3N0YWNrX2xpbWl0cyAtIGFkanVzdCBxdWV1ZV9saW1pdHMgZm9yIHN0YWNrZWQgZGV2aWNlcwotICogQHQ6CXRoZSBzdGFja2luZyBkcml2ZXIgbGltaXRzICh0b3ApCi0gKiBAYjogIHRoZSB1bmRlcmx5aW5nIHF1ZXVlIGxpbWl0cyAoYm90dG9tKQorICogQHQ6CXRoZSBzdGFja2luZyBkcml2ZXIgbGltaXRzICh0b3AgZGV2aWNlKQorICogQGI6ICB0aGUgdW5kZXJseWluZyBxdWV1ZSBsaW1pdHMgKGJvdHRvbSwgY29tcG9uZW50IGRldmljZSkKICAqIEBvZmZzZXQ6ICBvZmZzZXQgdG8gYmVnaW5uaW5nIG9mIGRhdGEgd2l0aGluIGNvbXBvbmVudCBkZXZpY2UKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqICAgIE1lcmdlcyB0d28gcXVldWVfbGltaXQgc3RydWN0cy4gIFJldHVybnMgMCBpZiBhbGlnbm1lbnQgZGlkbid0Ci0gKiAgICBjaGFuZ2UuICBSZXR1cm5zIC0xIGlmIGFkZGluZyB0aGUgYm90dG9tIGRldmljZSBjYXVzZWQKLSAqICAgIG1pc2FsaWdubWVudC4KKyAqICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBzdGFja2luZyBkcml2ZXJzIGxpa2UgTUQgYW5kIERNIHRvIGVuc3VyZQorICogICAgdGhhdCBhbGwgY29tcG9uZW50IGRldmljZXMgaGF2ZSBjb21wYXRpYmxlIGJsb2NrIHNpemVzIGFuZAorICogICAgYWxpZ25tZW50cy4gIFRoZSBzdGFja2luZyBkcml2ZXIgbXVzdCBwcm92aWRlIGEgcXVldWVfbGltaXRzCisgKiAgICBzdHJ1Y3QgKHRvcCkgYW5kIHRoZW4gaXRlcmF0aXZlbHkgY2FsbCB0aGUgc3RhY2tpbmcgZnVuY3Rpb24gZm9yCisgKiAgICBhbGwgY29tcG9uZW50IChib3R0b20pIGRldmljZXMuICBUaGUgc3RhY2tpbmcgZnVuY3Rpb24gd2lsbAorICogICAgYXR0ZW1wdCB0byBjb21iaW5lIHRoZSB2YWx1ZXMgYW5kIGVuc3VyZSBwcm9wZXIgYWxpZ25tZW50LgorICoKKyAqICAgIFJldHVybnMgMCBpZiB0aGUgdG9wIGFuZCBib3R0b20gcXVldWVfbGltaXRzIGFyZSBjb21wYXRpYmxlLiAgVGhlCisgKiAgICB0b3AgZGV2aWNlJ3MgYmxvY2sgc2l6ZXMgYW5kIGFsaWdubWVudCBvZmZzZXRzIG1heSBiZSBhZGp1c3RlZCB0bworICogICAgZW5zdXJlIGFsaWdubWVudCB3aXRoIHRoZSBib3R0b20gZGV2aWNlLiBJZiBubyBjb21wYXRpYmxlIHNpemVzCisgKiAgICBhbmQgYWxpZ25tZW50cyBleGlzdCwgLTEgaXMgcmV0dXJuZWQgYW5kIHRoZSByZXN1bHRpbmcgdG9wCisgKiAgICBxdWV1ZV9saW1pdHMgd2lsbCBoYXZlIHRoZSBtaXNhbGlnbmVkIGZsYWcgc2V0IHRvIGluZGljYXRlIHRoYXQKKyAqICAgIHRoZSBhbGlnbm1lbnRfb2Zmc2V0IGlzIHVuZGVmaW5lZC4KICAqLwogaW50IGJsa19zdGFja19saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqdCwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqYiwKIAkJICAgICBzZWN0b3JfdCBvZmZzZXQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IDA7CisJc2VjdG9yX3QgYWxpZ25tZW50OworCXVuc2lnbmVkIGludCB0b3AsIGJvdHRvbTsKIAogCXQtPm1heF9zZWN0b3JzID0gbWluX25vdF96ZXJvKHQtPm1heF9zZWN0b3JzLCBiLT5tYXhfc2VjdG9ycyk7CiAJdC0+bWF4X2h3X3NlY3RvcnMgPSBtaW5fbm90X3plcm8odC0+bWF4X2h3X3NlY3RvcnMsIGItPm1heF9od19zZWN0b3JzKTsKQEAgLTUzNyw2ICs1NDYsMjIgQEAKIAl0LT5tYXhfc2VnbWVudF9zaXplID0gbWluX25vdF96ZXJvKHQtPm1heF9zZWdtZW50X3NpemUsCiAJCQkJCSAgIGItPm1heF9zZWdtZW50X3NpemUpOwogCisJYWxpZ25tZW50ID0gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldChiLCBvZmZzZXQpOworCisJLyogQm90dG9tIGRldmljZSBoYXMgZGlmZmVyZW50IGFsaWdubWVudC4gIENoZWNrIHRoYXQgaXQgaXMKKwkgKiBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdG9wIGFsaWdubWVudC4KKwkgKi8KKwlpZiAodC0+YWxpZ25tZW50X29mZnNldCAhPSBhbGlnbm1lbnQpIHsKKworCQl0b3AgPSBtYXgodC0+cGh5c2ljYWxfYmxvY2tfc2l6ZSwgdC0+aW9fbWluKQorCQkJKyB0LT5hbGlnbm1lbnRfb2Zmc2V0OworCQlib3R0b20gPSBtYXgoYi0+cGh5c2ljYWxfYmxvY2tfc2l6ZSwgYi0+aW9fbWluKSArIGFsaWdubWVudDsKKworCQkvKiBWZXJpZnkgdGhhdCB0b3AgYW5kIGJvdHRvbSBpbnRlcnZhbHMgbGluZSB1cCAqLworCQlpZiAobWF4KHRvcCwgYm90dG9tKSAmIChtaW4odG9wLCBib3R0b20pIC0gMSkpCisJCQl0LT5taXNhbGlnbmVkID0gMTsKKwl9CisKIAl0LT5sb2dpY2FsX2Jsb2NrX3NpemUgPSBtYXgodC0+bG9naWNhbF9ibG9ja19zaXplLAogCQkJCSAgICBiLT5sb2dpY2FsX2Jsb2NrX3NpemUpOwogCkBAIC01NDQsNTQgKzU2OSw2NCBAQAogCQkJCSAgICAgYi0+cGh5c2ljYWxfYmxvY2tfc2l6ZSk7CiAKIAl0LT5pb19taW4gPSBtYXgodC0+aW9fbWluLCBiLT5pb19taW4pOworCXQtPmlvX29wdCA9IGxjbSh0LT5pb19vcHQsIGItPmlvX29wdCk7CisKIAl0LT5ub19jbHVzdGVyIHw9IGItPm5vX2NsdXN0ZXI7CiAJdC0+ZGlzY2FyZF96ZXJvZXNfZGF0YSAmPSBiLT5kaXNjYXJkX3plcm9lc19kYXRhOwogCi0JLyogQm90dG9tIGRldmljZSBvZmZzZXQgYWxpZ25lZD8gKi8KLQlpZiAob2Zmc2V0ICYmCi0JICAgIChvZmZzZXQgJiAoYi0+cGh5c2ljYWxfYmxvY2tfc2l6ZSAtIDEpKSAhPSBiLT5hbGlnbm1lbnRfb2Zmc2V0KSB7CisJLyogUGh5c2ljYWwgYmxvY2sgc2l6ZSBhIG11bHRpcGxlIG9mIHRoZSBsb2dpY2FsIGJsb2NrIHNpemU/ICovCisJaWYgKHQtPnBoeXNpY2FsX2Jsb2NrX3NpemUgJiAodC0+bG9naWNhbF9ibG9ja19zaXplIC0gMSkpIHsKKwkJdC0+cGh5c2ljYWxfYmxvY2tfc2l6ZSA9IHQtPmxvZ2ljYWxfYmxvY2tfc2l6ZTsKIAkJdC0+bWlzYWxpZ25lZCA9IDE7Ci0JCXJldCA9IC0xOwogCX0KIAotCS8qCi0JICogVGVtcG9yYXJpbHkgZGlzYWJsZSBkaXNjYXJkIGdyYW51bGFyaXR5LiBJdCdzIGN1cnJlbnRseSBidWdneQotCSAqIHNpbmNlIHdlIGRlZmF1bHQgdG8gMCBmb3IgZGlzY2FyZF9ncmFudWxhcml0eSwgaGVuY2UgdGhpcwotCSAqICJmYWlsdXJlIiB3aWxsIGFsd2F5cyB0cmlnZ2VyIGZvciBub24temVybyBvZmZzZXRzLgotCSAqLwotI2lmIDAKLQlpZiAob2Zmc2V0ICYmCi0JICAgIChvZmZzZXQgJiAoYi0+ZGlzY2FyZF9ncmFudWxhcml0eSAtIDEpKSAhPSBiLT5kaXNjYXJkX2FsaWdubWVudCkgewotCQl0LT5kaXNjYXJkX21pc2FsaWduZWQgPSAxOwotCQlyZXQgPSAtMTsKLQl9Ci0jZW5kaWYKLQotCS8qIElmIHRvcCBoYXMgbm8gYWxpZ25tZW50IG9mZnNldCwgaW5oZXJpdCBmcm9tIGJvdHRvbSAqLwotCWlmICghdC0+YWxpZ25tZW50X29mZnNldCkKLQkJdC0+YWxpZ25tZW50X29mZnNldCA9Ci0JCQliLT5hbGlnbm1lbnRfb2Zmc2V0ICYgKGItPnBoeXNpY2FsX2Jsb2NrX3NpemUgLSAxKTsKLQotCWlmICghdC0+ZGlzY2FyZF9hbGlnbm1lbnQpCi0JCXQtPmRpc2NhcmRfYWxpZ25tZW50ID0KLQkJCWItPmRpc2NhcmRfYWxpZ25tZW50ICYgKGItPmRpc2NhcmRfZ3JhbnVsYXJpdHkgLSAxKTsKLQotCS8qIFRvcCBkZXZpY2UgYWxpZ25lZCBvbiBsb2dpY2FsIGJsb2NrIGJvdW5kYXJ5PyAqLwotCWlmICh0LT5hbGlnbm1lbnRfb2Zmc2V0ICYgKHQtPmxvZ2ljYWxfYmxvY2tfc2l6ZSAtIDEpKSB7CisJLyogTWluaW11bSBJL08gYSBtdWx0aXBsZSBvZiB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZT8gKi8KKwlpZiAodC0+aW9fbWluICYgKHQtPnBoeXNpY2FsX2Jsb2NrX3NpemUgLSAxKSkgeworCQl0LT5pb19taW4gPSB0LT5waHlzaWNhbF9ibG9ja19zaXplOwogCQl0LT5taXNhbGlnbmVkID0gMTsKLQkJcmV0ID0gLTE7CiAJfQogCi0JLyogRmluZCBsY20oKSBvZiBvcHRpbWFsIEkvTyBzaXplIGFuZCBncmFudWxhcml0eSAqLwotCXQtPmlvX29wdCA9IGxjbSh0LT5pb19vcHQsIGItPmlvX29wdCk7Ci0JdC0+ZGlzY2FyZF9ncmFudWxhcml0eSA9IGxjbSh0LT5kaXNjYXJkX2dyYW51bGFyaXR5LAotCQkJCSAgICAgYi0+ZGlzY2FyZF9ncmFudWxhcml0eSk7CisJLyogT3B0aW1hbCBJL08gYSBtdWx0aXBsZSBvZiB0aGUgcGh5c2ljYWwgYmxvY2sgc2l6ZT8gKi8KKwlpZiAodC0+aW9fb3B0ICYgKHQtPnBoeXNpY2FsX2Jsb2NrX3NpemUgLSAxKSkgeworCQl0LT5pb19vcHQgPSAwOworCQl0LT5taXNhbGlnbmVkID0gMTsKKwl9CiAKLQkvKiBWZXJpZnkgdGhhdCBvcHRpbWFsIEkvTyBzaXplIGlzIGEgbXVsdGlwbGUgb2YgaW9fbWluICovCi0JaWYgKHQtPmlvX21pbiAmJiB0LT5pb19vcHQgJSB0LT5pb19taW4pCi0JCXJldCA9IC0xOworCS8qIEZpbmQgbG93ZXN0IGNvbW1vbiBhbGlnbm1lbnRfb2Zmc2V0ICovCisJdC0+YWxpZ25tZW50X29mZnNldCA9IGxjbSh0LT5hbGlnbm1lbnRfb2Zmc2V0LCBhbGlnbm1lbnQpCisJCSYgKG1heCh0LT5waHlzaWNhbF9ibG9ja19zaXplLCB0LT5pb19taW4pIC0gMSk7CiAKLQlyZXR1cm4gcmV0OworCS8qIFZlcmlmeSB0aGF0IG5ldyBhbGlnbm1lbnRfb2Zmc2V0IGlzIG9uIGEgbG9naWNhbCBibG9jayBib3VuZGFyeSAqLworCWlmICh0LT5hbGlnbm1lbnRfb2Zmc2V0ICYgKHQtPmxvZ2ljYWxfYmxvY2tfc2l6ZSAtIDEpKQorCQl0LT5taXNhbGlnbmVkID0gMTsKKworCS8qIERpc2NhcmQgYWxpZ25tZW50IGFuZCBncmFudWxhcml0eSAqLworCWlmIChiLT5kaXNjYXJkX2dyYW51bGFyaXR5KSB7CisJCXVuc2lnbmVkIGludCBncmFudWxhcml0eSA9IGItPmRpc2NhcmRfZ3JhbnVsYXJpdHk7CisJCW9mZnNldCAmPSBncmFudWxhcml0eSAtIDE7CisKKwkJYWxpZ25tZW50ID0gKGdyYW51bGFyaXR5ICsgYi0+ZGlzY2FyZF9hbGlnbm1lbnQgLSBvZmZzZXQpCisJCQkmIChncmFudWxhcml0eSAtIDEpOworCisJCWlmICh0LT5kaXNjYXJkX2dyYW51bGFyaXR5ICE9IDAgJiYKKwkJICAgIHQtPmRpc2NhcmRfYWxpZ25tZW50ICE9IGFsaWdubWVudCkgeworCQkJdG9wID0gdC0+ZGlzY2FyZF9ncmFudWxhcml0eSArIHQtPmRpc2NhcmRfYWxpZ25tZW50OworCQkJYm90dG9tID0gYi0+ZGlzY2FyZF9ncmFudWxhcml0eSArIGFsaWdubWVudDsKKworCQkJLyogVmVyaWZ5IHRoYXQgdG9wIGFuZCBib3R0b20gaW50ZXJ2YWxzIGxpbmUgdXAgKi8KKwkJCWlmIChtYXgodG9wLCBib3R0b20pICYgKG1pbih0b3AsIGJvdHRvbSkgLSAxKSkKKwkJCQl0LT5kaXNjYXJkX21pc2FsaWduZWQgPSAxOworCQl9CisKKwkJdC0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfZGlzY2FyZF9zZWN0b3JzLAorCQkJCQkJICAgICAgYi0+bWF4X2Rpc2NhcmRfc2VjdG9ycyk7CisJCXQtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSBtYXgodC0+ZGlzY2FyZF9ncmFudWxhcml0eSwKKwkJCQkJICAgICBiLT5kaXNjYXJkX2dyYW51bGFyaXR5KTsKKwkJdC0+ZGlzY2FyZF9hbGlnbm1lbnQgPSBsY20odC0+ZGlzY2FyZF9hbGlnbm1lbnQsIGFsaWdubWVudCkgJgorCQkJKHQtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgLSAxKTsKKwl9CisKKwlyZXR1cm4gdC0+bWlzYWxpZ25lZCA/IC0xIDogMDsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3N0YWNrX2xpbWl0cyk7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IGUyZjgwNDYuLjkxOGM3ZmQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMjA4LDggKzIwOCw2IEBACiAJLyogUm9vdCBzZXJ2aWNlIHRyZWUgZm9yIGNmcV9ncm91cHMgKi8KIAlzdHJ1Y3QgY2ZxX3JiX3Jvb3QgZ3JwX3NlcnZpY2VfdHJlZTsKIAlzdHJ1Y3QgY2ZxX2dyb3VwIHJvb3RfZ3JvdXA7Ci0JLyogTnVtYmVyIG9mIGFjdGl2ZSBjZnEgZ3JvdXBzIG9uIGdyb3VwIHNlcnZpY2UgdHJlZSAqLwotCWludCBucl9ncm91cHM7CiAKIAkvKgogCSAqIFRoZSBwcmlvcml0eSBjdXJyZW50bHkgYmVpbmcgc2VydmVkCkBAIC0yOTQsOCArMjkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjZnFfcmJfcm9vdCAqc2VydmljZV90cmVlX2ZvcihzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFnLAogCQkJCQkgICAgZW51bSB3bF9wcmlvX3QgcHJpbywKLQkJCQkJICAgIGVudW0gd2xfdHlwZV90IHR5cGUsCi0JCQkJCSAgICBzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCisJCQkJCSAgICBlbnVtIHdsX3R5cGVfdCB0eXBlKQogewogCWlmICghY2ZxZykKIAkJcmV0dXJuIE5VTEw7CkBAIC04NDIsNyArODM5LDYgQEAKIAogCV9fY2ZxX2dyb3VwX3NlcnZpY2VfdHJlZV9hZGQoc3QsIGNmcWcpOwogCWNmcWctPm9uX3N0ID0gdHJ1ZTsKLQljZnFkLT5ucl9ncm91cHMrKzsKIAlzdC0+dG90YWxfd2VpZ2h0ICs9IGNmcWctPndlaWdodDsKIH0KIApAQCAtODYzLDcgKzg1OSw2IEBACiAKIAljZnFfbG9nX2NmcWcoY2ZxZCwgY2ZxZywgImRlbF9mcm9tX3JyIGdyb3VwIik7CiAJY2ZxZy0+b25fc3QgPSBmYWxzZTsKLQljZnFkLT5ucl9ncm91cHMtLTsKIAlzdC0+dG90YWxfd2VpZ2h0IC09IGNmcWctPndlaWdodDsKIAlpZiAoIVJCX0VNUFRZX05PREUoJmNmcWctPnJiX25vZGUpKQogCQljZnFfcmJfZXJhc2UoJmNmcWctPnJiX25vZGUsIHN0KTsKQEAgLTExNTAsNyArMTE0NSw3IEBACiAjZW5kaWYKIAogCXNlcnZpY2VfdHJlZSA9IHNlcnZpY2VfdHJlZV9mb3IoY2ZxcS0+Y2ZxZywgY2ZxcV9wcmlvKGNmcXEpLAotCQkJCQkJY2ZxcV90eXBlKGNmcXEpLCBjZnFkKTsKKwkJCQkJCWNmcXFfdHlwZShjZnFxKSk7CiAJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKSB7CiAJCXJiX2tleSA9IENGUV9JRExFX0RFTEFZOwogCQlwYXJlbnQgPSByYl9sYXN0KCZzZXJ2aWNlX3RyZWUtPnJiKTsKQEAgLTE1MTMsOSArMTUwOCw2IEBACiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIAotCS8qIERlbnkgbWVyZ2UgaWYgYmlvIGFuZCBycSBkb24ndCBiZWxvbmcgdG8gc2FtZSBjZnEgZ3JvdXAgKi8KLQlpZiAoKFJRX0NGUVEocnEpKS0+Y2ZxZyAhPSBjZnFfZ2V0X2NmcWcoY2ZxZCwgMCkpCi0JCXJldHVybiBmYWxzZTsKIAkvKgogCSAqIERpc2FsbG93IG1lcmdlIG9mIGEgc3luYyBiaW8gaW50byBhbiBhc3luYyByZXF1ZXN0LgogCSAqLwpAQCAtMTYxNiw3ICsxNjA4LDcgQEAKIHsKIAlzdHJ1Y3QgY2ZxX3JiX3Jvb3QgKnNlcnZpY2VfdHJlZSA9CiAJCXNlcnZpY2VfdHJlZV9mb3IoY2ZxZC0+c2VydmluZ19ncm91cCwgY2ZxZC0+c2VydmluZ19wcmlvLAotCQkJCQljZnFkLT5zZXJ2aW5nX3R5cGUsIGNmcWQpOworCQkJCQljZnFkLT5zZXJ2aW5nX3R5cGUpOwogCiAJaWYgKCFjZnFkLT5ycV9xdWV1ZWQpCiAJCXJldHVybiBOVUxMOwpAQCAtMTY3NSwxMyArMTY2NywxNyBAQAogI2RlZmluZSBDRlFRX1NFRUtZKGNmcXEpCSgoY2ZxcSktPnNlZWtfbWVhbiA+IENGUVFfU0VFS19USFIpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNmcV9ycV9jbG9zZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQorCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwgYm9vbCBmb3JfcHJlZW1wdCkKIHsKIAlzZWN0b3JfdCBzZGlzdCA9IGNmcXEtPnNlZWtfbWVhbjsKIAogCWlmICghc2FtcGxlX3ZhbGlkKGNmcXEtPnNlZWtfc2FtcGxlcykpCiAJCXNkaXN0ID0gQ0ZRUV9TRUVLX1RIUjsKIAorCS8qIGlmIHNlZWtfbWVhbiBpcyBiaWcsIHVzaW5nIGl0IGFzIGNsb3NlIGNyaXRlcmlhIGlzIG1lYW5pbmdsZXNzICovCisJaWYgKHNkaXN0ID4gQ0ZRUV9TRUVLX1RIUiAmJiAhZm9yX3ByZWVtcHQpCisJCXNkaXN0ID0gQ0ZRUV9TRUVLX1RIUjsKKwogCXJldHVybiBjZnFfZGlzdF9mcm9tX2xhc3QoY2ZxZCwgcnEpIDw9IHNkaXN0OwogfQogCkBAIC0xNzA5LDcgKzE3MDUsNyBAQAogCSAqIHdpbGwgY29udGFpbiB0aGUgY2xvc2VzdCBzZWN0b3IuCiAJICovCiAJX19jZnFxID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgY2ZxX3F1ZXVlLCBwX25vZGUpOwotCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgY3VyX2NmcXEsIF9fY2ZxcS0+bmV4dF9ycSkpCisJaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBjdXJfY2ZxcSwgX19jZnFxLT5uZXh0X3JxLCBmYWxzZSkpCiAJCXJldHVybiBfX2NmcXE7CiAKIAlpZiAoYmxrX3JxX3BvcyhfX2NmcXEtPm5leHRfcnEpIDwgc2VjdG9yKQpAQCAtMTcyMCw3ICsxNzE2LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlfX2NmcXEgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgY2ZxX3F1ZXVlLCBwX25vZGUpOwotCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgY3VyX2NmcXEsIF9fY2ZxcS0+bmV4dF9ycSkpCisJaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBjdXJfY2ZxcSwgX19jZnFxLT5uZXh0X3JxLCBmYWxzZSkpCiAJCXJldHVybiBfX2NmcXE7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTE5NjMsOCArMTk1OSw3IEBACiB9CiAKIHN0YXRpYyBlbnVtIHdsX3R5cGVfdCBjZnFfY2hvb3NlX3dsKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKLQkJCQlzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFnLCBlbnVtIHdsX3ByaW9fdCBwcmlvLAotCQkJCWJvb2wgcHJpb19jaGFuZ2VkKQorCQkJCXN0cnVjdCBjZnFfZ3JvdXAgKmNmcWcsIGVudW0gd2xfcHJpb190IHByaW8pCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqcXVldWU7CiAJaW50IGk7CkBAIC0xOTcyLDI0ICsxOTY3LDkgQEAKIAl1bnNpZ25lZCBsb25nIGxvd2VzdF9rZXkgPSAwOwogCWVudW0gd2xfdHlwZV90IGN1cl9iZXN0ID0gU1lOQ19OT0lETEVfV09SS0xPQUQ7CiAKLQlpZiAocHJpb19jaGFuZ2VkKSB7Ci0JCS8qCi0JCSAqIFdoZW4gcHJpb3JpdGllcyBzd2l0Y2hlZCwgd2UgcHJlZmVyIHN0YXJ0aW5nCi0JCSAqIGZyb20gU1lOQ19OT0lETEUgKGZpcnN0IGNob2ljZSksIG9yIGp1c3QgU1lOQwotCQkgKiBvdmVyIEFTWU5DCi0JCSAqLwotCQlpZiAoc2VydmljZV90cmVlX2ZvcihjZnFnLCBwcmlvLCBjdXJfYmVzdCwgY2ZxZCktPmNvdW50KQotCQkJcmV0dXJuIGN1cl9iZXN0OwotCQljdXJfYmVzdCA9IFNZTkNfV09SS0xPQUQ7Ci0JCWlmIChzZXJ2aWNlX3RyZWVfZm9yKGNmcWcsIHByaW8sIGN1cl9iZXN0LCBjZnFkKS0+Y291bnQpCi0JCQlyZXR1cm4gY3VyX2Jlc3Q7Ci0KLQkJcmV0dXJuIEFTWU5DX1dPUktMT0FEOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKLQkJLyogb3RoZXJ3aXNlLCBzZWxlY3QgdGhlIG9uZSB3aXRoIGxvd2VzdCByYl9rZXkgKi8KLQkJcXVldWUgPSBjZnFfcmJfZmlyc3Qoc2VydmljZV90cmVlX2ZvcihjZnFnLCBwcmlvLCBpLCBjZnFkKSk7CisJZm9yIChpID0gMDsgaSA8PSBTWU5DX1dPUktMT0FEOyArK2kpIHsKKwkJLyogc2VsZWN0IHRoZSBvbmUgd2l0aCBsb3dlc3QgcmJfa2V5ICovCisJCXF1ZXVlID0gY2ZxX3JiX2ZpcnN0KHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgcHJpbywgaSkpOwogCQlpZiAocXVldWUgJiYKIAkJICAgICgha2V5X3ZhbGlkIHx8IHRpbWVfYmVmb3JlKHF1ZXVlLT5yYl9rZXksIGxvd2VzdF9rZXkpKSkgewogCQkJbG93ZXN0X2tleSA9IHF1ZXVlLT5yYl9rZXk7CkBAIC0yMDAzLDggKzE5ODMsNiBAQAogCiBzdGF0aWMgdm9pZCBjaG9vc2Vfc2VydmljZV90cmVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9ncm91cCAqY2ZxZykKIHsKLQllbnVtIHdsX3ByaW9fdCBwcmV2aW91c19wcmlvID0gY2ZxZC0+c2VydmluZ19wcmlvOwotCWJvb2wgcHJpb19jaGFuZ2VkOwogCXVuc2lnbmVkIHNsaWNlOwogCXVuc2lnbmVkIGNvdW50OwogCXN0cnVjdCBjZnFfcmJfcm9vdCAqc3Q7CkBAIC0yMDMyLDI0ICsyMDEwLDE5IEBACiAJICogKFNZTkMsIFNZTkNfTk9JRExFLCBBU1lOQyksIGFuZCB0byBjb21wdXRlIGEgd29ya2xvYWQKIAkgKiBleHBpcmF0aW9uIHRpbWUKIAkgKi8KLQlwcmlvX2NoYW5nZWQgPSAoY2ZxZC0+c2VydmluZ19wcmlvICE9IHByZXZpb3VzX3ByaW8pOwotCXN0ID0gc2VydmljZV90cmVlX2ZvcihjZnFnLCBjZnFkLT5zZXJ2aW5nX3ByaW8sIGNmcWQtPnNlcnZpbmdfdHlwZSwKLQkJCQljZnFkKTsKKwlzdCA9IHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgY2ZxZC0+c2VydmluZ19wcmlvLCBjZnFkLT5zZXJ2aW5nX3R5cGUpOwogCWNvdW50ID0gc3QtPmNvdW50OwogCiAJLyoKLQkgKiBJZiBwcmlvcml0eSBkaWRuJ3QgY2hhbmdlLCBjaGVjayB3b3JrbG9hZCBleHBpcmF0aW9uLAotCSAqIGFuZCB0aGF0IHdlIHN0aWxsIGhhdmUgb3RoZXIgcXVldWVzIHJlYWR5CisJICogY2hlY2sgd29ya2xvYWQgZXhwaXJhdGlvbiwgYW5kIHRoYXQgd2Ugc3RpbGwgaGF2ZSBvdGhlciBxdWV1ZXMgcmVhZHkKIAkgKi8KLQlpZiAoIXByaW9fY2hhbmdlZCAmJiBjb3VudCAmJgotCSAgICAhdGltZV9hZnRlcihqaWZmaWVzLCBjZnFkLT53b3JrbG9hZF9leHBpcmVzKSkKKwlpZiAoY291bnQgJiYgIXRpbWVfYWZ0ZXIoamlmZmllcywgY2ZxZC0+d29ya2xvYWRfZXhwaXJlcykpCiAJCXJldHVybjsKIAogCS8qIG90aGVyd2lzZSBzZWxlY3QgbmV3IHdvcmtsb2FkIHR5cGUgKi8KIAljZnFkLT5zZXJ2aW5nX3R5cGUgPQotCQljZnFfY2hvb3NlX3dsKGNmcWQsIGNmcWcsIGNmcWQtPnNlcnZpbmdfcHJpbywgcHJpb19jaGFuZ2VkKTsKLQlzdCA9IHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgY2ZxZC0+c2VydmluZ19wcmlvLCBjZnFkLT5zZXJ2aW5nX3R5cGUsCi0JCQkJY2ZxZCk7CisJCWNmcV9jaG9vc2Vfd2woY2ZxZCwgY2ZxZywgY2ZxZC0+c2VydmluZ19wcmlvKTsKKwlzdCA9IHNlcnZpY2VfdHJlZV9mb3IoY2ZxZywgY2ZxZC0+c2VydmluZ19wcmlvLCBjZnFkLT5zZXJ2aW5nX3R5cGUpOwogCWNvdW50ID0gc3QtPmNvdW50OwogCiAJLyoKQEAgLTMxNDMsNyArMzExNiw3IEBACiAJICogaWYgdGhpcyByZXF1ZXN0IGlzIGFzLWdvb2QgYXMgb25lIHdlIHdvdWxkIGV4cGVjdCBmcm9tIHRoZQogCSAqIGN1cnJlbnQgY2ZxcSwgbGV0IGl0IHByZWVtcHQKIAkgKi8KLQlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIGNmcXEsIHJxKSkKKwlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIGNmcXEsIHJxLCB0cnVlKSkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvcmFpZDZ0ZXN0LmMgYi9jcnlwdG8vYXN5bmNfdHgvcmFpZDZ0ZXN0LmMKaW5kZXggM2VjMjdjNy4uZjg0ZjZiNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L3JhaWQ2dGVzdC5jCisrKyBiL2NyeXB0by9hc3luY190eC9yYWlkNnRlc3QuYwpAQCAtMjE0LDYgKzIxNCwxMyBAQAogCQllcnIgKz0gdGVzdCg0LCAmdGVzdHMpOwogCWlmIChORElTS1MgPiA1KQogCQllcnIgKz0gdGVzdCg1LCAmdGVzdHMpOworCS8qIHRoZSAxMSBhbmQgMTIgZGlzayBjYXNlcyBhcmUgc3BlY2lhbCBmb3IgaW9hdGRtYSAocC1kaXNhYmxlZAorCSAqIHEtY29udGludWF0aW9uIHdpdGhvdXQgZXh0ZW5kZWQgZGVzY3JpcHRvcikKKwkgKi8KKwlpZiAoTkRJU0tTID4gMTIpIHsKKwkJZXJyICs9IHRlc3QoMTEsICZ0ZXN0cyk7CisJCWVyciArPSB0ZXN0KDEyLCAmdGVzdHMpOworCX0KIAllcnIgKz0gdGVzdChORElTS1MsICZ0ZXN0cyk7CiAKIAlwcigiXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCA4YTA3MzYzLi4zNjhhZTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC0yOCw3ICsyOCw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9maXJld2lyZS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbWVzc2FnZS9pMm8vS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IGM3YjEwYjQuLjY2Y2MzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAKICMKIGFjcGkteQkJCQkrPSBidXMubyBnbHVlLm8KIGFjcGkteQkJCQkrPSBzY2FuLm8KK2FjcGkteQkJCQkrPSBwcm9jZXNzb3JfcGRjLm8KIGFjcGkteQkJCQkrPSBlYy5vCiBhY3BpLSQoQ09ORklHX0FDUElfRE9DSykJKz0gZG9jay5vCiBhY3BpLXkJCQkJKz0gcGNpX3Jvb3QubyBwY2lfbGluay5vIHBjaV9pcnEubyBwY2lfYmluZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKaW5kZXggMjNlNWEwNS4uMjgxNWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwpAQCAtMTg1LDYgKzE4NSwxMiBAQAogCWFjcGlfb3NpX3NldHVwKCIhV2luZG93cyAyMDA2Iik7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW50IF9faW5pdCBkbWlfZGlzYWJsZV9vc2lfd2luNyhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICJETUkgZGV0ZWN0ZWQ6ICVzXG4iLCBkLT5pZGVudCk7CisJYWNwaV9vc2lfc2V0dXAoIiFXaW5kb3dzIDIwMDkiKTsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGFjcGlfb3NpX2RtaV90YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewpAQCAtMjExLDYgKzIxNywxNCBAQAogCQkgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU29ueSBWR04tU1IyOTBKIiksCiAJCX0sCiAJfSwKKwl7CisJLmNhbGxiYWNrID0gZG1pX2Rpc2FibGVfb3NpX3dpbjcsCisJLmlkZW50ID0gIkFTVVMgSzUwSUoiLAorCS5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSzUwSUoiKSwKKwkJfSwKKwl9LAogCiAJLyoKIAkgKiBCSU9TIGludm9jYXRpb24gb2YgX09TSShMaW51eCkgaXMgYWxtb3N0IGFsd2F5cyBhIEJJT1MgYnVnLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDY1ZjdlMzMuLmNmNzYxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTM5Nyw2ICszOTcsNyBAQAogCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqOwogCXU4IHV1aWRbMTZdOwogCXUzMiBlcnJvcnM7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CiAKIAlpZiAoIWNvbnRleHQpCiAJCXJldHVybiBBRV9FUlJPUjsKQEAgLTQxOSwxNiArNDIwLDE2IEBACiAJaW5fcGFyYW1zWzNdLmJ1ZmZlci5sZW5ndGggCT0gY29udGV4dC0+Y2FwLmxlbmd0aDsKIAlpbl9wYXJhbXNbM10uYnVmZmVyLnBvaW50ZXIgCT0gY29udGV4dC0+Y2FwLnBvaW50ZXI7CiAKLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmY29udGV4dC0+cmV0KTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiBzdGF0dXM7CiAKLQkvKiByZXR1cm4gYnVmZmVyIHNob3VsZCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBjYXAgYnVmZmVyICovCi0JaWYgKGNvbnRleHQtPnJldC5sZW5ndGggIT0gY29udGV4dC0+Y2FwLmxlbmd0aCkKKwlpZiAoIW91dHB1dC5sZW5ndGgpCiAJCXJldHVybiBBRV9OVUxMX09CSkVDVDsKIAotCW91dF9vYmogPSBjb250ZXh0LT5yZXQucG9pbnRlcjsKLQlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOworCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIKKwkJfHwgb3V0X29iai0+YnVmZmVyLmxlbmd0aCAhPSBjb250ZXh0LT5jYXAubGVuZ3RoKSB7CiAJCWFjcGlfcHJpbnRfb3NjX2Vycm9yKGhhbmRsZSwgY29udGV4dCwKIAkJCSJfT1NDIGV2YWx1YXRpb24gcmV0dXJuZWQgd3JvbmcgdHlwZSIpOwogCQlzdGF0dXMgPSBBRV9UWVBFOwpAQCAtNDU3LDExICs0NTgsMjAgQEAKIAkJZ290byBvdXRfa2ZyZWU7CiAJfQogb3V0X3N1Y2Nlc3M6Ci0JcmV0dXJuIEFFX09LOworCWNvbnRleHQtPnJldC5sZW5ndGggPSBvdXRfb2JqLT5idWZmZXIubGVuZ3RoOworCWNvbnRleHQtPnJldC5wb2ludGVyID0ga21hbGxvYyhjb250ZXh0LT5yZXQubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbnRleHQtPnJldC5wb2ludGVyKSB7CisJCXN0YXR1cyA9ICBBRV9OT19NRU1PUlk7CisJCWdvdG8gb3V0X2tmcmVlOworCX0KKwltZW1jcHkoY29udGV4dC0+cmV0LnBvaW50ZXIsIG91dF9vYmotPmJ1ZmZlci5wb2ludGVyLAorCQljb250ZXh0LT5yZXQubGVuZ3RoKTsKKwlzdGF0dXMgPSAgQUVfT0s7CiAKIG91dF9rZnJlZToKLQlrZnJlZShjb250ZXh0LT5yZXQucG9pbnRlcik7Ci0JY29udGV4dC0+cmV0LnBvaW50ZXIgPSBOVUxMOworCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKQorCQljb250ZXh0LT5yZXQucG9pbnRlciA9IE5VTEw7CiAJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9ydW5fb3NjKTsKQEAgLTg4OCw2ICs4OTgsOCBAQAogCQlnb3RvIGVycm9yMTsKIAl9CiAKKwlhY3BpX2Vhcmx5X3Byb2Nlc3Nvcl9zZXRfcGRjKCk7CisKIAkvKgogCSAqIE1heWJlIEVDIHJlZ2lvbiBpcyByZXF1aXJlZCBhdCBidXNfc2Nhbi9hY3BpX2dldF9kZXZpY2VzLiBTbyBpdAogCSAqIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgaXQgYXMgZWFybHkgYXMgcG9zc2libGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IDc1YjE0N2YuLmZkMTgwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC05MTYsNiArOTE2LDcgQEAKIC8qIE1TSSBFQyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudCwgZW5hYmxlIGl0ICovCiBzdGF0aWMgaW50IGVjX2ZsYWdfbXNpKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKKwlwcmludGsoS0VSTl9ERUJVRyBQUkVGSVggIkRldGVjdGVkIE1TSSBoYXJkd2FyZSwgZW5hYmxpbmcgd29ya2Fyb3VuZHMuXG4iKTsKIAlFQ19GTEFHU19NU0kgPSAxOwogCUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQgPSAxOwogCXJldHVybiAwOwpAQCAtOTI4LDggKzkyOSwxMyBAQAogCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkpGTDkyIikgfSwgTlVMTH0sCiAJewogCWVjX2ZsYWdfbXNpLCAiTVNJIGhhcmR3YXJlIiwgewotCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJNaWNyby1TdGFyIiksCi0JRE1JX01BVENIKERNSV9DSEFTU0lTX1ZFTkRPUiwgIk1JQ1JPLVN0YXIiKSB9LCBOVUxMfSwKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiTWljcm8tU3RhciIpfSwgTlVMTH0sCisJeworCWVjX2ZsYWdfbXNpLCAiTVNJIGhhcmR3YXJlIiwgeworCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIiKX0sIE5VTEx9LAorCXsKKwllY19mbGFnX21zaSwgIk1TSSBoYXJkd2FyZSIsIHsKKwlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVkVORE9SLCAiTUlDUk8tU3RhciIpfSwgTlVMTH0sCiAJewogCWVjX3ZhbGlkYXRlX2VjZHQsICJBU1VTIGhhcmR3YXJlIiwgewogCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJBU1VTIikgfSwgTlVMTH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCmluZGV4IDA3NGNmODYuLmNiMjhlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCkBAIC00Myw2ICs0Myw3IEBACiBleHRlcm4gaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKIAogaW50IGFjcGlfd2FrZXVwX2RldmljZV9pbml0KHZvaWQpOwordm9pZCBhY3BpX2Vhcmx5X3Byb2Nlc3Nvcl9zZXRfcGRjKHZvaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVkZGVkIENvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggNDE3MzEyMy4uOTg2M2M5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTEyNCwyOSArMTI0LDYgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICosIHByb2Nlc3NvcnMpOwogc3RydWN0IGFjcGlfcHJvY2Vzc29yX2VycmF0YSBlcnJhdGEgX19yZWFkX21vc3RseTsKLXN0YXRpYyBpbnQgc2V0X25vX213YWl0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICIlcyBkZXRlY3RlZCAtICIKLQkJImRpc2FibGluZyBtd2FpdCBmb3IgQ1BVIEMtc3RhdGVzXG4iLCBpZC0+aWRlbnQpOwotCWlkbGVfbm9td2FpdCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2NwdWluaXRkYXRhIHByb2Nlc3Nvcl9pZGxlX2RtaV90YWJsZVtdID0gewotCXsKLQlzZXRfbm9fbXdhaXQsICJJRkw5MSBib2FyZCIsIHsKLQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQ09NUEFMIiksCi0JRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiWkVQVE8iKSwKLQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIjMyMTVXIiksCi0JRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiSUZMOTEiKSB9LCBOVUxMfSwKLQl7Ci0Jc2V0X25vX213YWl0LCAiRXh0ZW5zYSA1MjIwIiwgewotCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJQaG9lbml4IFRlY2hub2xvZ2llcyBMVEQiKSwKLQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCi0JRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIwMTAwIiksCi0JRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiQ29sdW1iaWEiKSB9LCBOVUxMfSwKLQl7fSwKLX07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycmF0YSBIYW5kbGluZwpAQCAtMjc3LDQ1ICsyNTQsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9uIEFDUEkgcHJvY2Vzc29yIGZ1bmN0aW9ucwotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIF9QREMgaXMgcmVxdWlyZWQgZm9yIGEgQklPUy1PUyBoYW5kc2hha2UgZm9yIG1vc3Qgb2YgdGhlIG5ld2VyCi0gKiBBQ1BJIHByb2Nlc3NvciBmZWF0dXJlcy4KLSAqLwotc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCi17Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKnBkY19pbiA9IHByLT5wZGM7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0KLQotCWlmICghcGRjX2luKQotCQlyZXR1cm4gc3RhdHVzOwotCWlmIChpZGxlX25vbXdhaXQpIHsKLQkJLyoKLQkJICogSWYgbXdhaXQgaXMgZGlzYWJsZWQgZm9yIENQVSBDLXN0YXRlcywgdGhlIEMyQzNfRkZIIGFjY2VzcwotCQkgKiBtb2RlIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIHBhcmFtZXRlciBvZiBfUERDIG9iamVjdC4KLQkJICogT2YgY291cnNlIEMxX0ZGSCBhY2Nlc3MgbW9kZSB3aWxsIGFsc28gYmUgZGlzYWJsZWQuCi0JCSAqLwotCQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwotCQl1MzIgKmJ1ZmZlciA9IE5VTEw7Ci0KLQkJb2JqID0gcGRjX2luLT5wb2ludGVyOwotCQlidWZmZXIgPSAodTMyICopKG9iai0+YnVmZmVyLnBvaW50ZXIpOwotCQlidWZmZXJbMl0gJj0gfihBQ1BJX1BEQ19DX0MyQzNfRkZIIHwgQUNQSV9QRENfQ19DMV9GRkgpOwotCi0JfQotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHByLT5oYW5kbGUsICJfUERDIiwgcGRjX2luLCBOVUxMKTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkgICAgIkNvdWxkIG5vdCBldmFsdWF0ZSBfUERDLCB1c2luZyBsZWdhY3kgcGVyZi4gY29udHJvbC4uLlxuIikpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTIEludGVyZmFjZSAoL3Byb2MpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC04MjUsOSArNzYzLDcgQEAKIAl9CiAKIAkvKiBfUERDIGNhbGwgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UgKGlmIHJlcWQuKS4gKi8KLQlhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHByKTsKLQlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHByKTsKLQlhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHByKTsKKwlhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKHByLT5oYW5kbGUpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAJYWNwaV9wcm9jZXNzb3JfcHBjX2hhc19jaGFuZ2VkKHByLCAwKTsKQEAgLTExNDUsMTEgKzEwODEsNiBAQAogCWlmICghYWNwaV9wcm9jZXNzb3JfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGUgc3lzdGVtIGlzIERNSSB0YWJsZS4gSWYgeWVzLCBPU1BNCi0JICogc2hvdWxkIG5vdCB1c2UgbXdhaXQgZm9yIENQVS1zdGF0ZXMuCi0JICovCi0JZG1pX2NoZWNrX3N5c3RlbShwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGUpOwogCXJlc3VsdCA9IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2lkbGVfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBvdXRfcHJvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGRjLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTRkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BkYy5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKglBbGV4IENoaWFuZyA8YWNoaWFuZ0BocC5jb20+CisgKgktIFVuaWZpZWQgeDg2L2lhNjQgaW1wbGVtZW50YXRpb25zCisgKglWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KKyAqCS0gQWRkZWQgX1BEQyBmb3IgcGxhdGZvcm1zIHdpdGggSW50ZWwgQ1BVcworICovCisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisKKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjZGVmaW5lIFBSRUZJWAkJCSJBQ1BJOiAiCisjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUFJPQ0VTU09SX0NPTVBPTkVOVAorQUNQSV9NT0RVTEVfTkFNRSgicHJvY2Vzc29yX3BkYyIpOworCitzdGF0aWMgaW50IHNldF9ub19td2FpdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJXMgZGV0ZWN0ZWQgLSAiCisJCSJkaXNhYmxpbmcgbXdhaXQgZm9yIENQVSBDLXN0YXRlc1xuIiwgaWQtPmlkZW50KTsKKwlpZGxlX25vbXdhaXQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0ZGF0YSBwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGVbXSA9IHsKKwl7CisJc2V0X25vX213YWl0LCAiSUZMOTEgYm9hcmQiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkNPTVBBTCIpLAorCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlpFUFRPIiksCisJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIzMjE1VyIpLAorCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIklGTDkxIikgfSwgTlVMTH0sCisJeworCXNldF9ub19td2FpdCwgIkV4dGVuc2EgNTIyMCIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCisJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCURNSV9NQVRDSChETUlfUFJPRFVDVF9WRVJTSU9OLCAiMDEwMCIpLAorCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkNvbHVtYmlhIikgfSwgTlVMTH0sCisJe30sCit9OworCitzdGF0aWMgdm9pZCBhY3BpX3NldF9wZGNfYml0cyh1MzIgKmJ1ZikKK3sKKwlidWZbMF0gPSBBQ1BJX1BEQ19SRVZJU0lPTl9JRDsKKwlidWZbMV0gPSAxOworCisJLyogRW5hYmxlIGNvb3JkaW5hdGlvbiB3aXRoIGZpcm13YXJlJ3MgX1RTRCBpbmZvICovCisJYnVmWzJdID0gQUNQSV9QRENfU01QX1RfU1dDT09SRDsKKworCS8qIFR3aWRkbGUgYXJjaC1zcGVjaWZpYyBiaXRzIG5lZWRlZCBmb3IgX1BEQyAqLworCWFyY2hfYWNwaV9zZXRfcGRjX2JpdHMoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBhY3BpX29iamVjdF9saXN0ICphY3BpX3Byb2Nlc3Nvcl9hbGxvY19wZGModm9pZCkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqb2JqX2xpc3Q7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwl1MzIgKmJ1ZjsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHBkYy4gSXQgd2lsbCBiZSB1c2VkIGxhdGVyLiAqLworCW9ial9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9ial9saXN0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlvYmogPSBrbWFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmICghb2JqKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlrZnJlZShvYmpfbGlzdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWJ1ZiA9IGttYWxsb2MoMTIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlrZnJlZShvYmopOworCQlrZnJlZShvYmpfbGlzdCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWFjcGlfc2V0X3BkY19iaXRzKGJ1Zik7CisKKwlvYmotPnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOworCW9iai0+YnVmZmVyLmxlbmd0aCA9IDEyOworCW9iai0+YnVmZmVyLnBvaW50ZXIgPSAodTggKikgYnVmOworCW9ial9saXN0LT5jb3VudCA9IDE7CisJb2JqX2xpc3QtPnBvaW50ZXIgPSBvYmo7CisKKwlyZXR1cm4gb2JqX2xpc3Q7Cit9CisKKy8qCisgKiBfUERDIGlzIHJlcXVpcmVkIGZvciBhIEJJT1MtT1MgaGFuZHNoYWtlIGZvciBtb3N0IG9mIHRoZSBuZXdlcgorICogQUNQSSBwcm9jZXNzb3IgZmVhdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQKK2FjcGlfcHJvY2Vzc29yX2V2YWxfcGRjKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgKnBkY19pbikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKworCWlmIChpZGxlX25vbXdhaXQpIHsKKwkJLyoKKwkJICogSWYgbXdhaXQgaXMgZGlzYWJsZWQgZm9yIENQVSBDLXN0YXRlcywgdGhlIEMyQzNfRkZIIGFjY2VzcworCQkgKiBtb2RlIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIHBhcmFtZXRlciBvZiBfUERDIG9iamVjdC4KKwkJICogT2YgY291cnNlIEMxX0ZGSCBhY2Nlc3MgbW9kZSB3aWxsIGFsc28gYmUgZGlzYWJsZWQuCisJCSAqLworCQl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCQl1MzIgKmJ1ZmZlciA9IE5VTEw7CisKKwkJb2JqID0gcGRjX2luLT5wb2ludGVyOworCQlidWZmZXIgPSAodTMyICopKG9iai0+YnVmZmVyLnBvaW50ZXIpOworCQlidWZmZXJbMl0gJj0gfihBQ1BJX1BEQ19DX0MyQzNfRkZIIHwgQUNQSV9QRENfQ19DMV9GRkgpOworCisJfQorCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QREMiLCBwZGNfaW4sIE5VTEwpOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCSAgICAiQ291bGQgbm90IGV2YWx1YXRlIF9QREMsIHVzaW5nIGxlZ2FjeSBwZXJmLiBjb250cm9sLlxuIikpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBhY3BpX3Byb2Nlc3Nvcl9zZXRfcGRjKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCAqb2JqX2xpc3Q7CisKKwlpZiAoYXJjaF9oYXNfYWNwaV9wZGMoKSA9PSBmYWxzZSkKKwkJcmV0dXJuOworCisJb2JqX2xpc3QgPSBhY3BpX3Byb2Nlc3Nvcl9hbGxvY19wZGMoKTsKKwlpZiAoIW9ial9saXN0KQorCQlyZXR1cm47CisKKwlhY3BpX3Byb2Nlc3Nvcl9ldmFsX3BkYyhoYW5kbGUsIG9ial9saXN0KTsKKworCWtmcmVlKG9ial9saXN0LT5wb2ludGVyLT5idWZmZXIucG9pbnRlcik7CisJa2ZyZWUob2JqX2xpc3QtPnBvaW50ZXIpOworCWtmcmVlKG9ial9saXN0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfcHJvY2Vzc29yX3NldF9wZGMpOworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2Vhcmx5X2luaXRfcGRjKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQoreworCWFjcGlfcHJvY2Vzc29yX3NldF9wZGMoaGFuZGxlKTsKKwlyZXR1cm4gQUVfT0s7Cit9CisKK3ZvaWQgYWNwaV9lYXJseV9wcm9jZXNzb3Jfc2V0X3BkYyh2b2lkKQoreworCS8qCisJICogQ2hlY2sgd2hldGhlciB0aGUgc3lzdGVtIGlzIERNSSB0YWJsZS4gSWYgeWVzLCBPU1BNCisJICogc2hvdWxkIG5vdCB1c2UgbXdhaXQgZm9yIENQVS1zdGF0ZXMuCisJICovCisJZG1pX2NoZWNrX3N5c3RlbShwcm9jZXNzb3JfaWRsZV9kbWlfdGFibGUpOworCisJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfUFJPQ0VTU09SLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJICAgIEFDUElfVUlOVDMyX01BWCwKKwkJCSAgICBlYXJseV9pbml0X3BkYywgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDVmMmMzNzkuLjc5ZDMzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC04MSw2ICs4MSwyMyBAQAogI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCiBzdGF0aWMgdTMyIGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKIC8qCisgKiBBY2NvcmRpbmcgdG8gdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiB0aGUgQklPUyBzaG91bGQgbWFrZSBzdXJlIHRoYXQgQUNQSSBpcworICogZW5hYmxlZCBhbmQgU0NJX0VOIGJpdCBpcyBzZXQgb24gd2FrZS11cCBmcm9tIFMxIC0gUzMgc2xlZXAgc3RhdGVzLiAgU3RpbGwsCisgKiBzb21lIEJJT1NlcyBkb24ndCBkbyB0aGF0IGFuZCB0aGVyZWZvcmUgd2UgdXNlIGFjcGlfZW5hYmxlKCkgdG8gZW5hYmxlIEFDUEkKKyAqIG9uIHN1Y2ggc3lzdGVtcyBkdXJpbmcgcmVzdW1lLiAgVW5mb3J0dW5hdGVseSB0aGF0IGRvZXNuJ3QgaGVscCBpbgorICogcGFydGljdWxhcmx5IHBhdGhvbG9naWNhbCBjYXNlcyBpbiB3aGljaCBTQ0lfRU4gaGFzIHRvIGJlIHNldCBkaXJlY3RseSBvbgorICogcmVzdW1lLCBhbHRob3VnaCB0aGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdmVyeSBjbGVhcmx5IHRoYXQgdGhpcyBmbGFnIGlzCisgKiBvd25lZCBieSB0aGUgaGFyZHdhcmUuICBUaGUgc2V0X3NjaV9lbl9vbl9yZXN1bWUgdmFyaWFibGUgd2lsbCBiZSBzZXQgaW4gc3VjaAorICogY2FzZXMuCisgKi8KK3N0YXRpYyBib29sIHNldF9zY2lfZW5fb25fcmVzdW1lOworCit2b2lkIF9faW5pdCBhY3BpX3NldF9zY2lfZW5fb25fcmVzdW1lKHZvaWQpCit7CisJc2V0X3NjaV9lbl9vbl9yZXN1bWUgPSB0cnVlOworfQorCisvKgogICogQUNQSSAxLjAgd2FudHMgdXMgdG8gZXhlY3V0ZSBfUFRTIGJlZm9yZSBzdXNwZW5kaW5nIGRldmljZXMsIHNvIHdlIGFsbG93IHRoZQogICogdXNlciB0byByZXF1ZXN0IHRoYXQgYmVoYXZpb3IgYnkgdXNpbmcgdGhlICdhY3BpX29sZF9zdXNwZW5kX29yZGVyaW5nJwogICoga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gdGhhdCBjYXVzZXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSB0byBiZSBzZXQuCkBAIC0xNzAsMTggKzE4Nyw2IEBACiAjZW5kaWYgLyogQ09ORklHX0FDUElfU0xFRVAgKi8KIAogI2lmZGVmIENPTkZJR19TVVNQRU5ECi0vKgotICogQWNjb3JkaW5nIHRvIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24gdGhlIEJJT1Mgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IEFDUEkgaXMKLSAqIGVuYWJsZWQgYW5kIFNDSV9FTiBiaXQgaXMgc2V0IG9uIHdha2UtdXAgZnJvbSBTMSAtIFMzIHNsZWVwIHN0YXRlcy4gIFN0aWxsLAotICogc29tZSBCSU9TZXMgZG9uJ3QgZG8gdGhhdCBhbmQgdGhlcmVmb3JlIHdlIHVzZSBhY3BpX2VuYWJsZSgpIHRvIGVuYWJsZSBBQ1BJCi0gKiBvbiBzdWNoIHN5c3RlbXMgZHVyaW5nIHJlc3VtZS4gIFVuZm9ydHVuYXRlbHkgdGhhdCBkb2Vzbid0IGhlbHAgaW4KLSAqIHBhcnRpY3VsYXJseSBwYXRob2xvZ2ljYWwgY2FzZXMgaW4gd2hpY2ggU0NJX0VOIGhhcyB0byBiZSBzZXQgZGlyZWN0bHkgb24KLSAqIHJlc3VtZSwgYWx0aG91Z2ggdGhlIHNwZWNpZmljYXRpb24gc3RhdGVzIHZlcnkgY2xlYXJseSB0aGF0IHRoaXMgZmxhZyBpcwotICogb3duZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhlIHNldF9zY2lfZW5fb25fcmVzdW1lIHZhcmlhYmxlIHdpbGwgYmUgc2V0IGluIHN1Y2gKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgYm9vbCBzZXRfc2NpX2VuX29uX3Jlc3VtZTsKLQogZXh0ZXJuIHZvaWQgZG9fc3VzcGVuZF9sb3dsZXZlbCh2b2lkKTsKIAogc3RhdGljIHUzMiBhY3BpX3N1c3BlbmRfc3RhdGVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW8uYyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCmluZGV4IDA1ZGZmNjMuLjcyZTc2YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS92aWRlby5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlby5jCkBAIC05OTksOCArOTk5LDEwIEBACiAJCXNwcmludGYobmFtZSwgImFjcGlfdmlkZW8lZCIsIGNvdW50KyspOwogCQlkZXZpY2UtPmJhY2tsaWdodCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwKIAkJCU5VTEwsIGRldmljZSwgJmFjcGlfYmFja2xpZ2h0X29wcyk7Ci0JCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IGRldmljZS0+YnJpZ2h0bmVzcy0+Y291bnQtMzsKIAkJa2ZyZWUobmFtZSk7CisJCWlmIChJU19FUlIoZGV2aWNlLT5iYWNrbGlnaHQpKQorCQkJcmV0dXJuOworCQlkZXZpY2UtPmJhY2tsaWdodC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmNvdW50LTM7CiAKIAkJcmVzdWx0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+YmFja2xpZ2h0LT5kZXYua29iaiwKIAkJCQkJICAgJmRldmljZS0+ZGV2LT5kZXYua29iaiwgImRldmljZSIpOwpAQCAtMTk3OSw2ICsxOTgxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBsb25nIGxldmVsX2N1cnJlbnQsIGxldmVsX25leHQ7CiAJaW50IHJlc3VsdCA9IC1FSU5WQUw7CiAKKwkvKiBubyB3YXJuaW5nIG1lc3NhZ2UgaWYgYWNwaV9iYWNrbGlnaHQ9dmVuZG9yIGlzIHVzZWQgKi8KKwlpZiAoIWFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIWRldmljZS0+YnJpZ2h0bmVzcykKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IDg1ODQ0ZDAuLjU2YzYzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtNDAsNyArNDAsNiBAQAogY29uZmlnIEFUQV9BQ1BJCiAJYm9vbCAiQVRBIEFDUEkgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFDUEkgJiYgUENJCi0Jc2VsZWN0IEFDUElfRE9DSwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgQVRBLXJlbGF0ZWQgQUNQSSBvYmplY3RzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggMTkxMzZhNy4uNmYzZjIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC0zMjksNyArMzI5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3NhdGFfb3BzID0gewotCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hMzJfcG9ydF9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGlpeF9zaWRwcl9zYXRhX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDIyZmY1MWIuLjY3MjgzMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtMzc5MCwyMSArMzc5MCw0NSBAQAogaW50IHNhdGFfbGlua19yZXN1bWUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBjb25zdCB1bnNpZ25lZCBsb25nICpwYXJhbXMsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKKwlpbnQgdHJpZXMgPSBBVEFfTElOS19SRVNVTUVfVFJJRVM7CiAJdTMyIHNjb250cm9sLCBzZXJyb3I7CiAJaW50IHJjOwogCiAJaWYgKChyYyA9IHNhdGFfc2NyX3JlYWQobGluaywgU0NSX0NPTlRST0wsICZzY29udHJvbCkpKQogCQlyZXR1cm4gcmM7CiAKLQlzY29udHJvbCA9IChzY29udHJvbCAmIDB4MGYwKSB8IDB4MzAwOwotCi0JaWYgKChyYyA9IHNhdGFfc2NyX3dyaXRlKGxpbmssIFNDUl9DT05UUk9MLCBzY29udHJvbCkpKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBTb21lIFBIWXMgcmVhY3QgYmFkbHkgaWYgU1N0YXR1cyBpcyBwb3VuZGVkIGltbWVkaWF0ZWx5Ci0JICogYWZ0ZXIgcmVzdW1pbmcuICBEZWxheSAyMDBtcyBiZWZvcmUgZGVib3VuY2luZy4KKwkvKgorCSAqIFdyaXRlcyB0byBTQ29udHJvbCBzb21ldGltZXMgZ2V0IGlnbm9yZWQgdW5kZXIgY2VydGFpbgorCSAqIGNvbnRyb2xsZXJzIChhdGFfcGlpeCBTSURQUikuICBNYWtlIHN1cmUgREVUIGFjdHVhbGx5IGlzCisJICogY2xlYXJlZC4KIAkgKi8KLQltc2xlZXAoMjAwKTsKKwlkbyB7CisJCXNjb250cm9sID0gKHNjb250cm9sICYgMHgwZjApIHwgMHgzMDA7CisJCWlmICgocmMgPSBzYXRhX3Njcl93cml0ZShsaW5rLCBTQ1JfQ09OVFJPTCwgc2NvbnRyb2wpKSkKKwkJCXJldHVybiByYzsKKwkJLyoKKwkJICogU29tZSBQSFlzIHJlYWN0IGJhZGx5IGlmIFNTdGF0dXMgaXMgcG91bmRlZAorCQkgKiBpbW1lZGlhdGVseSBhZnRlciByZXN1bWluZy4gIERlbGF5IDIwMG1zIGJlZm9yZQorCQkgKiBkZWJvdW5jaW5nLgorCQkgKi8KKwkJbXNsZWVwKDIwMCk7CisKKwkJLyogaXMgU0NvbnRyb2wgcmVzdG9yZWQgY29ycmVjdGx5PyAqLworCQlpZiAoKHJjID0gc2F0YV9zY3JfcmVhZChsaW5rLCBTQ1JfQ09OVFJPTCwgJnNjb250cm9sKSkpCisJCQlyZXR1cm4gcmM7CisJfSB3aGlsZSAoKHNjb250cm9sICYgMHhmMGYpICE9IDB4MzAwICYmIC0tdHJpZXMpOworCisJaWYgKChzY29udHJvbCAmIDB4ZjBmKSAhPSAweDMwMCkgeworCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsCisJCQkJImZhaWxlZCB0byByZXN1bWUgbGluayAoU0NvbnRyb2wgJVgpXG4iLAorCQkJCXNjb250cm9sKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRyaWVzIDwgQVRBX0xJTktfUkVTVU1FX1RSSUVTKQorCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLAorCQkJCSJsaW5rIHJlc3VtZSBzdWNjZWVkZWQgYWZ0ZXIgJWQgcmV0cmllc1xuIiwKKwkJCQlBVEFfTElOS19SRVNVTUVfVFJJRVMgLSB0cmllcyk7CiAKIAlpZiAoKHJjID0gc2F0YV9saW5rX2RlYm91bmNlKGxpbmssIHBhcmFtcywgZGVhZGxpbmUpKSkKIAkJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggMTY4M2ViZC4uZjRlYTVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0zMDIyLDcgKzMwMjIsNyBAQAogCWNhc2UgV1JJVEVfMTY6CiAJCXJldHVybiBhdGFfc2NzaV9yd194bGF0OwogCi0JY2FzZSAweDkzIC8qV1JJVEVfU0FNRV8xNiovOgorCWNhc2UgV1JJVEVfU0FNRV8xNjoKIAkJcmV0dXJuIGF0YV9zY3NpX3dyaXRlX3NhbWVfeGxhdDsKIAogCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggZWZhODc3My4uNzQxMDY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMjI3NSw3ICsyMjc1LDcgQEAKIAlhcCA9IHFjLT5hcDsKIAkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLwogCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQotCQkJCQkJJiYgY291bnQgPCAzMjc2ODsgY291bnQrKykKKwkJCQkJCSYmIGNvdW50IDwgNjU1MzY7IGNvdW50ICs9IDIpCiAJCWlvcmVhZDE2KGFwLT5pb2FkZHIuZGF0YV9hZGRyKTsKIAogCS8qIENhbiBiZWNvbWUgREVCVUcgbGF0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwppbmRleCBjNGI0N2EzLi4wMmM4MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCkBAIC0xNTU3LDYgKzE1NTcsMjUgQEAKIAlQX0FUQVBJX0RNQVJRLAogCVBfQVRBUElfSU5UUlEsCiAJUF9BVEFQSV9JT1JEWSwKKwlQX0FUQVBJX0QwQSwKKwlQX0FUQVBJX0QxQSwKKwlQX0FUQVBJX0QyQSwKKwlQX0FUQVBJX0QzQSwKKwlQX0FUQVBJX0Q0QSwKKwlQX0FUQVBJX0Q1QSwKKwlQX0FUQVBJX0Q2QSwKKwlQX0FUQVBJX0Q3QSwKKwlQX0FUQVBJX0Q4QSwKKwlQX0FUQVBJX0Q5QSwKKwlQX0FUQVBJX0QxMEEsCisJUF9BVEFQSV9EMTFBLAorCVBfQVRBUElfRDEyQSwKKwlQX0FUQVBJX0QxM0EsCisJUF9BVEFQSV9EMTRBLAorCVBfQVRBUElfRDE1QSwKKwlQX0FUQVBJX0EwQSwKKwlQX0FUQVBJX0ExQSwKKwlQX0FUQVBJX0EyQSwKIAkwCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCBkYWRmYzM1Li4wZWZiMWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9jbWQ2NHgiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi41IgogCiAvKgogICogQ01ENjR4IHNwZWNpZmljIHJlZ2lzdGVycyBkZWZpbml0aW9uLgpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCXJlZ1UgfD0gdWRtYV9kYXRhW2FkZXYtPmRtYV9tb2RlIC0gWEZFUl9VRE1BXzBdIDw8IHNoaWZ0OwogCQkvKiBNZXJnZSB0aGUgY29udHJvbCBiaXRzICovCiAJCXJlZ1UgfD0gMSA8PCBhZGV2LT5kZXZubzsgLyogVURNQSBvbiAqLwotCQlpZiAoYWRldi0+ZG1hX21vZGUgPiAyKQkvKiAxNW5TIHRpbWluZyAqLworCQlpZiAoYWRldi0+ZG1hX21vZGUgPiBYRkVSX1VETUFfMikgLyogMTVuUyB0aW1pbmcgKi8KIAkJCXJlZ1UgfD0gNCA8PCBhZGV2LT5kZXZubzsKIAl9IGVsc2UgewogCQlyZWdVICY9IH4gKDEgPDwgYWRldi0+ZGV2bm8pOwkvKiBVRE1BIG9mZiAqLwpAQCAtMjU0LDEwOSArMjU0LDE3IEBACiB9CiAKIC8qKgotICoJY21kNjR4X2JtZG1hX3N0b3AJLQlETUEgc3RvcCBjYWxsYmFjaworICoJY21kNjQ2cjFfZG1hX3N0b3AJLQlETUEgc3RvcCBjYWxsYmFjawogICoJQHFjOiBDb21tYW5kIGluIHByb2dyZXNzCiAgKgotICoJVHJhY2sgdGhlIGNvbXBsZXRpb24gb2YgbGl2ZSBETUEgY29tbWFuZHMgYW5kIGNsZWFyIHRoZQotICoJaG9zdC0+cHJpdmF0ZV9kYXRhIERNQSB0cmFja2luZyBmbGFnIGFzIHdlIGRvLgorICoJU3R1YiBmb3Igbm93IHdoaWxlIGludmVzdGlnYXRpbmcgdGhlIHIxIHF1aXJrIGluIHRoZSBvbGQgZHJpdmVyLgogICovCiAKLXN0YXRpYyB2b2lkIGNtZDY0eF9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdm9pZCBjbWQ2NDZyMV9ibWRtYV9zdG9wKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlhdGFfYm1kbWFfc3RvcChxYyk7Ci0JV0FSTl9PTihhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhICE9IGFwKTsKLQlhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIH0KIAotLyoqCi0gKgljbWQ2NHhfcWNfZGVmZXIJCS0JRGVmZXIgbG9naWMgZm9yIGNoaXAgbGltaXRzCi0gKglAcWM6IHF1ZXVlZCBjb21tYW5kCi0gKgotICoJRGVjaWRlIHdoZXRoZXIgd2UgY2FuIGlzc3VlIHRoZSBjb21tYW5kLiBDYWxsZWQgdW5kZXIgdGhlIGhvc3QgbG9jay4KLSAqLwotCi1zdGF0aWMgaW50IGNtZDY0eF9xY19kZWZlcihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IHFjLT5hcC0+aG9zdDsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFsdCA9IGhvc3QtPnBvcnRzWzEgXiBxYy0+YXAtPnBvcnRfbm9dOwotCWludCByYzsKLQlpbnQgZG1hID0gMDsKLQotCS8qIEFwcGx5IHRoZSBBVEEgcnVsZXMgZmlyc3QgKi8KLQlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKHFjLT50Zi5wcm90b2NvbCA9PSBBVEFQSV9QUk9UX0RNQSB8fAotCQkJcWMtPnRmLnByb3RvY29sID09IEFUQV9QUk9UX0RNQSkKLQkJZG1hID0gMTsKLQotCS8qIElmIHRoZSBvdGhlciBwb3J0IGlzIG5vdCBsaXZlIHRoZW4gaXNzdWUgdGhlIGNvbW1hbmQgKi8KLQlpZiAoYWx0ID09IE5VTEwgfHwgIWFsdC0+cWNfYWN0aXZlKSB7Ci0JCWlmIChkbWEpCi0JCQlob3N0LT5wcml2YXRlX2RhdGEgPSBxYy0+YXA7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBJZiB0aGVyZSBpcyBhIGxpdmUgRE1BIGNvbW1hbmQgdGhlbiB3YWl0ICovCi0JaWYgKGhvc3QtPnByaXZhdGVfZGF0YSAhPSBOVUxMKQotCQlyZXR1cm4gCUFUQV9ERUZFUl9QT1JUOwotCWlmIChkbWEpCi0JCS8qIENhbm5vdCBvdmVybGFwIG91ciBETUEgY29tbWFuZCAqLwotCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJY21kNjR4X2ludGVycnVwdCAtIEFUQSBob3N0IGludGVycnVwdCBoYW5kbGVyCi0gKglAaXJxOiBpcnEgbGluZSAodW51c2VkKQotICoJQGRldl9pbnN0YW5jZTogcG9pbnRlciB0byBvdXIgYXRhX2hvc3QgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0gKgotICoJT3VyIGludGVycnVwdCBoYW5kbGVyIGZvciBQQ0kgSURFIGRldmljZXMuICBDYWxscwotICoJYXRhX3NmZl9ob3N0X2ludHIoKSBmb3IgZWFjaCBwb3J0IHRoYXQgaXMgZmxhZ2dpbmcgYW4gSVJRLiBXZSBjYW5ub3QKLSAqCXVzZSB0aGUgZGVmYXVsdHMgYXMgd2UgbmVlZCB0byBhdm9pZCB0b3VjaGluZyBzdGF0dXMvYWx0c3RhdHVzIGR1cmluZwotICoJYSBETUEuCi0gKgotICoJTE9DS0lORzoKLSAqCU9idGFpbnMgaG9zdCBsb2NrIGR1cmluZyBvcGVyYXRpb24uCi0gKgotICoJUkVUVVJOUzoKLSAqCUlSUV9OT05FIG9yIElSUV9IQU5ETEVELgotICovCi1pcnFyZXR1cm5fdCBjbWQ2NHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhvc3QtPmRldik7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RhdGljIGNvbnN0IHU4IGlycV9yZWdbMl0gPSB7IENGUiwgQVJUVElNMjMgfTsKLQlzdGF0aWMgY29uc3QgdTggaXJxX21hc2tbMl0gPSB7IDEgPDwgMiwgMSA8PCA0IH07Ci0KLQkvKiBUT0RPOiBtYWtlIF9pcnFzYXZlIGNvbmRpdGlvbmFsIG9uIHg4NiBQQ0kgSURFIGxlZ2FjeSBtb2RlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKLQkJc3RydWN0IGF0YV9wb3J0ICphcDsKLQkJdTggcmVnOwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGlycV9yZWdbaV0sICZyZWcpOwotCQlhcCA9IGhvc3QtPnBvcnRzW2ldOwotCQlpZiAoYXAgJiYgKHJlZyAmIGlycV9tYXNrW2ldKSAmJgotCQkgICAgIShhcC0+ZmxhZ3MgJiBBVEFfRkxBR19ESVNBQkxFRCkpIHsKLQkJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7Ci0KLQkJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+bGluay5hY3RpdmVfdGFnKTsKLQkJCWlmIChxYyAmJiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykpICYmCi0JCQkgICAgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSkKLQkJCQloYW5kbGVkIHw9IGF0YV9zZmZfaG9zdF9pbnRyKGFwLCBxYyk7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKLX0KIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGNtZDY0eF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwpAQCAtMzY1LDggKzI3Myw2IEBACiAJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAkuc2V0X3Bpb21vZGUJPSBjbWQ2NHhfc2V0X3Bpb21vZGUsCiAJLnNldF9kbWFtb2RlCT0gY21kNjR4X3NldF9kbWFtb2RlLAotCS5ibWRtYV9zdG9wCT0gY21kNjR4X2JtZG1hX3N0b3AsCi0JLnFjX2RlZmVyCT0gY21kNjR4X3FjX2RlZmVyLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGNtZDY0eF9wb3J0X29wcyA9IHsKQEAgLTM3Niw2ICsyODIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgY21kNjQ2cjFfcG9ydF9vcHMgPSB7CiAJLmluaGVyaXRzCT0gJmNtZDY0eF9iYXNlX29wcywKKwkuYm1kbWFfc3RvcAk9IGNtZDY0NnIxX2JtZG1hX3N0b3AsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiB9OwogCkBAIC0zODMsNyArMjkwLDYgQEAKIAkuaW5oZXJpdHMJPSAmY21kNjR4X2Jhc2Vfb3BzLAogCS5ibWRtYV9zdG9wCT0gY21kNjQ4X2JtZG1hX3N0b3AsCiAJLmNhYmxlX2RldGVjdAk9IGNtZDY0OF9jYWJsZV9kZXRlY3QsCi0JLnFjX2RlZmVyCT0gYXRhX3N0ZF9xY19kZWZlcgogfTsKIAogc3RhdGljIGludCBjbWQ2NHhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKQEAgLTQzMiw3ICszMzgsNiBAQAogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmNtZF9pbmZvW2lkLT5kcml2ZXJfZGF0YV0sIE5VTEwgfTsKIAl1OCBtcmRtb2RlOwogCWludCByYzsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CiAKIAlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpCkBAIC00NTAsMjUgKzM1NSwyMCBAQAogCQkJcHBpWzBdID0gJmNtZF9pbmZvWzNdOwogCX0KIAotCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTVJETU9ERSwgJm1yZG1vZGUpOwogCW1yZG1vZGUgJj0gfiAweDMwOwkvKiBJUlEgc2V0IHVwICovCiAJbXJkbW9kZSB8PSAweDAyOwkvKiBNZW1vcnkgcmVhZCBsaW5lIGVuYWJsZSAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBNUkRNT0RFLCBtcmRtb2RlKTsKIAorCS8qIEZvcmNlIFBJTyAwIGhlcmUuLiAqLworCiAJLyogUFBDIHNwZWNpZmljIGZpeHVwIGNvcGllZCBmcm9tIG9sZCBkcml2ZXIgKi8KICNpZmRlZiBDT05GSUdfUFBDCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVESURFVENSMCwgMHhGMCk7CiAjZW5kaWYKLQlyYyA9IGF0YV9wY2lfc2ZmX3ByZXBhcmVfaG9zdChwZGV2LCBwcGksICZob3N0KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQkvKiBXZSB1c2UgdGhpcyBwb2ludGVyIHRvIHRyYWNrIHRoZSBBUCB3aGljaCBoYXMgRE1BIHJ1bm5pbmcgKi8KLQlob3N0LT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JcmV0dXJuIGF0YV9wY2lfc2ZmX2FjdGl2YXRlX2hvc3QoaG9zdCwgY21kNjR4X2ludGVycnVwdCwgJmNtZDY0eF9zaHQpOworCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShwZGV2LCBwcGksICZjbWQ2NHhfc2h0LCBOVUxMKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwppbmRleCA5YTA5YTFiLi5kZDI2YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAxCSAgICAgICAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAzCQlSZWQgSGF0IEluYwotICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqCiAgKiBUT0RPCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0M3gybiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMy43IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjgiCiAKIGVudW0gewogCUhQVF9QQ0lfRkFTVAk9CSgxIDw8IDMxKSwKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiBzdGF0aWMgdm9pZCBocHQzeDJuX3NldF9jbG9jayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgc291cmNlKQogewotCXZvaWQgX19pb21lbSAqYm1kbWEgPSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CisJdm9pZCBfX2lvbWVtICpibWRtYSA9IGFwLT5pb2FkZHIuYm1kbWFfYWRkciAtIGFwLT5wb3J0X25vICogODsKIAogCS8qIFRyaXN0YXRlIHRoZSBidXMgKi8KIAlpb3dyaXRlOCgweDgwLCBibWRtYSsweDczKTsKQEAgLTI3NCw5ICsyNzQsOSBAQAogCWlvd3JpdGU4KHNvdXJjZSwgYm1kbWErMHg3Qik7CiAJaW93cml0ZTgoMHhDMCwgYm1kbWErMHg3OSk7CiAKLQkvKiBSZXNldCBzdGF0ZSBtYWNoaW5lcyAqLwotCWlvd3JpdGU4KDB4MzcsIGJtZG1hKzB4NzApOwotCWlvd3JpdGU4KDB4MzcsIGJtZG1hKzB4NzQpOworCS8qIFJlc2V0IHN0YXRlIG1hY2hpbmVzLCBhdm9pZCBlbmFibGluZyB0aGUgZGlzYWJsZWQgY2hhbm5lbHMgKi8KKwlpb3dyaXRlOChpb3JlYWQ4KGJtZG1hKzB4NzApIHwgMHgzMiwgYm1kbWErMHg3MCk7CisJaW93cml0ZTgoaW9yZWFkOChibWRtYSsweDc0KSB8IDB4MzIsIGJtZG1hKzB4NzQpOwogCiAJLyogQ29tcGxldGUgcmVzZXQgKi8KIAlpb3dyaXRlOCgweDAwLCBibWRtYSsweDc5KTsKQEAgLTI4NiwyMSArMjg2LDEwIEBACiAJaW93cml0ZTgoMHgwMCwgYm1kbWErMHg3Nyk7CiB9CiAKLS8qIENoZWNrIGlmIG91ciBwYXJ0bmVyIGludGVyZmFjZSBpcyBidXN5ICovCi0KLXN0YXRpYyBpbnQgaHB0M3gybl9wYWlyX2lkbGUoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBhcC0+aG9zdDsKLQlzdHJ1Y3QgYXRhX3BvcnQgKnBhaXIgPSBob3N0LT5wb3J0c1thcC0+cG9ydF9ubyBeIDFdOwotCi0JaWYgKHBhaXItPmhzbV90YXNrX3N0YXRlID09IEhTTV9TVF9JRExFKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBocHQzeDJuX3VzZV9kcGxsKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3cml0aW5nKQogewogCWxvbmcgZmxhZ3MgPSAobG9uZylhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCiAJLyogU2VlIGlmIHdlIHNob3VsZCB1c2UgdGhlIERQTEwgKi8KIAlpZiAod3JpdGluZykKIAkJcmV0dXJuIFVTRV9EUExMOwkvKiBOZWVkZWQgZm9yIHdyaXRlICovCkBAIC0zMDksMjAgKzI5OCwzNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGhwdDN4Mm5fcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBhdGFfcG9ydCAqYWx0ID0gYXAtPmhvc3QtPnBvcnRzW2FwLT5wb3J0X25vIF4gMV07CisJaW50IHJjLCBmbGFncyA9IChsb25nKWFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IGRwbGwgPSBocHQzeDJuX3VzZV9kcGxsKGFwLCBxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOworCisJLyogRmlyc3QgYXBwbHkgdGhlIHVzdWFsIHJ1bGVzICovCisJcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKChmbGFncyAmIFVTRV9EUExMKSAhPSBkcGxsICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaHB0M3gybl9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmID0gJnFjLT50ZjsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCWludCBmbGFncyA9IChsb25nKWFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJaW50IGRwbGwgPSBocHQzeDJuX3VzZV9kcGxsKGFwLCBxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOwogCi0JaWYgKGhwdDN4Mm5fcGFpcl9pZGxlKGFwKSkgewotCQlpbnQgZHBsbCA9IGhwdDN4Mm5fdXNlX2RwbGwoYXAsICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpKTsKLQkJaWYgKChmbGFncyAmIFVTRV9EUExMKSAhPSBkcGxsKSB7Ci0JCQlpZiAoZHBsbCA9PSAxKQotCQkJCWhwdDN4Mm5fc2V0X2Nsb2NrKGFwLCAweDIxKTsKLQkJCWVsc2UKLQkJCQlocHQzeDJuX3NldF9jbG9jayhhcCwgMHgyMyk7Ci0JCX0KKwlpZiAoKGZsYWdzICYgVVNFX0RQTEwpICE9IGRwbGwpIHsKKwkJZmxhZ3MgJj0gflVTRV9EUExMOworCQlmbGFncyB8PSBkcGxsOworCQlhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKikobG9uZylmbGFnczsKKworCQlocHQzeDJuX3NldF9jbG9jayhhcCwgZHBsbCA/IDB4MjEgOiAweDIzKTsKIAl9CiAJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQpAQCAtMzM5LDYgKzM0Myw4IEBACiAJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAogCS5ibWRtYV9zdG9wCT0gaHB0M3gybl9ibWRtYV9zdG9wLAorCisJLnFjX2RlZmVyCT0gaHB0M3gybl9xY19kZWZlciwKIAkucWNfaXNzdWUJPSBocHQzeDJuX3FjX2lzc3VlLAogCiAJLmNhYmxlX2RldGVjdAk9IGhwdDN4Mm5fY2FibGVfZGV0ZWN0LApAQCAtNDU0LDcgKzQ2MCw3IEBACiAJdW5zaWduZWQgaW50IGZfbG93LCBmX2hpZ2g7CiAJaW50IGFkanVzdDsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwotCXZvaWQgKmhwcml2ID0gTlVMTDsKKwl2b2lkICpocHJpdiA9ICh2b2lkICopVVNFX0RQTEw7CiAJaW50IHJjOwogCiAJcmMgPSBwY2ltX2VuYWJsZV9kZXZpY2UoZGV2KTsKQEAgLTUzOSw3ICs1NDUsNyBAQAogCS8qIFNldCBvdXIgcHJpdmF0ZSBkYXRhIHVwLiBXZSBvbmx5IG5lZWQgYSBmZXcgZmxhZ3Mgc28gd2UgdXNlCiAJICAgaXQgZGlyZWN0bHkgKi8KIAlpZiAocGNpX21oeiA+IDYwKSB7Ci0JCWhwcml2ID0gKHZvaWQgKilQQ0k2NjsKKwkJaHByaXYgPSAodm9pZCAqKShQQ0k2NiB8IFVTRV9EUExMKTsKIAkJLyoKIAkJICogT24gIEhQVDM3MU4sIGlmIEFUQSBjbG9jayBpcyA2NiBNSHogd2UgbXVzdCBzZXQgYml0IDIgaW4KIAkJICogdGhlIE1JU0MuIHJlZ2lzdGVyIHRvIHN0cmV0Y2ggdGhlIFVsdHJhRE1BIFRzcyB0aW1pbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwppbmRleCBkNmY2OTU2Li4zN2VmNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKQEAgLTg1Myw3ICs4NTMsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY3MxID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzX2NzMS0+c3RhcnQsCi0JCQkJCSAgIHJlc19jczAtPmVuZCAtIHJlc19jczEtPnN0YXJ0ICsgMSk7CisJCQkJCSAgIHJlc291cmNlX3NpemUocmVzX2NzMSkpOwogCiAJCWlmICghY3MxKQogCQkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggYThhN2JlMC4uZGY4ZWUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KQEAgLTUzOCw2ICs1MzksNyBAQAogCiBzdHJ1Y3QgbXZfaG9zdF9wcml2IHsKIAl1MzIJCQlocF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgCQlib2FyZF9pZHg7CiAJdTMyCQkJbWFpbl9pcnFfbWFzazsKIAlzdHJ1Y3QgbXZfcG9ydF9zaWduYWwJc2lnbmFsWzhdOwogCWNvbnN0IHN0cnVjdCBtdl9od19vcHMJKm9wczsKQEAgLTU0OCw2ICs1NTAsMTAgQEAKIAl1MzIJCQlpcnFfY2F1c2Vfb2Zmc2V0OwogCXUzMgkJCWlycV9tYXNrX29mZnNldDsKIAl1MzIJCQl1bm1hc2tfYWxsX2lycXM7CisKKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlzdHJ1Y3QgY2xrCQkqY2xrOworI2VuZGlmCiAJLyoKIAkgKiBUaGVzZSBjb25zaXN0ZW50IERNQSBtZW1vcnkgcG9vbHMgZ2l2ZSB1cyBndWFyYW50ZWVkCiAJICogYWxpZ25tZW50IGZvciBoYXJkd2FyZS1hY2Nlc3NlZCBkYXRhIHN0cnVjdHVyZXMsCkBAIC0yNzc1LDcgKzI3ODEsNyBAQAogCXN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwOwogCWludCBlZG1hX3dhc19lbmFibGVkOwogCi0JaWYgKCFhcCB8fCAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRElTQUJMRUQpKSB7CisJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX0RJU0FCTEVEKSB7CiAJCW12X3VuZXhwZWN0ZWRfaW50cihhcCwgMCk7CiAJCXJldHVybjsKIAl9CkBAIC0zMzkzLDcgKzMzOTksNyBAQAogCVpFUk8oMHgwMjQpOwkJLyogcmVzcHEgb3V0cCAqLwogCVpFUk8oMHgwMjApOwkJLyogcmVzcHEgaW5wICovCiAJWkVSTygweDAyYyk7CQkvKiB0ZXN0IGNvbnRyb2wgKi8KLQl3cml0ZWwoMHhiYywgcG9ydF9tbWlvICsgRURNQV9JT1JEWV9UTU9VVCk7CisJd3JpdGVsKDB4ODAwLCBwb3J0X21taW8gKyBFRE1BX0lPUkRZX1RNT1VUKTsKIH0KIAogI3VuZGVmIFpFUk8KQEAgLTM4NTQsNyArMzg2MCw2IEBACiAvKioKICAqICAgICAgbXZfaW5pdF9ob3N0IC0gUGVyZm9ybSBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBob3N0LgogICoJQGhvc3Q6IEFUQSBob3N0IHRvIGluaXRpYWxpemUKLSAqICAgICAgQGJvYXJkX2lkeDogY29udHJvbGxlciBpbmRleAogICoKICAqICAgICAgSWYgcG9zc2libGUsIGRvIGFuIGVhcmx5IGdsb2JhbCByZXNldCBvZiB0aGUgaG9zdC4gIFRoZW4gZG8KICAqICAgICAgb3VyIHBvcnQgaW5pdCBhbmQgY2xlYXIvdW5tYXNrIGFsbC9yZWxldmFudCBob3N0IGludGVycnVwdHMuCkBAIC0zODYyLDEzICszODY3LDEzIEBACiAgKiAgICAgIExPQ0tJTkc6CiAgKiAgICAgIEluaGVyaXRlZCBmcm9tIGNhbGxlci4KICAqLwotc3RhdGljIGludCBtdl9pbml0X2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgYm9hcmRfaWR4KQorc3RhdGljIGludCBtdl9pbml0X2hvc3Qoc3RydWN0IGF0YV9ob3N0ICpob3N0KQogewogCWludCByYyA9IDAsIG5faGMsIHBvcnQsIGhjOwogCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5iYXNlOwogCi0JcmMgPSBtdl9jaGlwX2lkKGhvc3QsIGJvYXJkX2lkeCk7CisJcmMgPSBtdl9jaGlwX2lkKGhvc3QsIGhwcml2LT5ib2FyZF9pZHgpOwogCWlmIChyYykKIAkJZ290byBkb25lOwogCkBAIC0zOTA1LDE0ICszOTEwLDYgQEAKIAkJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9wb3J0X2Jhc2UobW1pbywgcG9ydCk7CiAKIAkJbXZfcG9ydF9pbml0KCZhcC0+aW9hZGRyLCBwb3J0X21taW8pOwotCi0jaWZkZWYgQ09ORklHX1BDSQotCQlpZiAoIUlTX1NPQyhocHJpdikpIHsKLQkJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwb3J0X21taW8gLSBtbWlvOwotCQkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBNVl9QUklNQVJZX0JBUiwgLTEsICJtbWlvIik7Ci0JCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIE1WX1BSSU1BUllfQkFSLCBvZmZzZXQsICJwb3J0Iik7Ci0JCX0KLSNlbmRpZgogCX0KIAogCWZvciAoaGMgPSAwOyBoYyA8IG5faGM7IGhjKyspIHsKQEAgLTQwMzUsMTIgKzQwMzIsMjEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaHByaXY7CiAJaHByaXYtPm5fcG9ydHMgPSBuX3BvcnRzOworCWhwcml2LT5ib2FyZF9pZHggPSBjaGlwX3NvYzsKIAogCWhvc3QtPmlvbWFwID0gTlVMTDsKIAlocHJpdi0+YmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAogCQkJCSAgIHJlc291cmNlX3NpemUocmVzKSk7CiAJaHByaXYtPmJhc2UgLT0gU0FUQUhDMF9SRUdfQkFTRTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQorCWhwcml2LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoaHByaXYtPmNsaykpCisJCWRldl9ub3RpY2UoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xrZGV2XG4iKTsKKwllbHNlCisJCWNsa19lbmFibGUoaHByaXYtPmNsayk7CisjZW5kaWYKKwogCS8qCiAJICogKFJlLSlwcm9ncmFtIE1CVVMgcmVtYXBwaW5nIHdpbmRvd3MgaWYgd2UgYXJlIGFza2VkIHRvLgogCSAqLwpAQCAtNDA0OSwxMiArNDA1NSwxMiBAQAogCiAJcmMgPSBtdl9jcmVhdGVfZG1hX3Bvb2xzKGhwcml2LCAmcGRldi0+ZGV2KTsKIAlpZiAocmMpCi0JCXJldHVybiByYzsKKwkJZ290byBlcnI7CiAKIAkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KLQlyYyA9IG12X2luaXRfaG9zdChob3N0LCBjaGlwX3NvYyk7CisJcmMgPSBtdl9pbml0X2hvc3QoaG9zdCk7CiAJaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJCWdvdG8gZXJyOwogCiAJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCiAJCSAgICJzbG90cyAldSBwb3J0cyAlZFxuIiwgKHVuc2lnbmVkKU1WX01BWF9RX0RFUFRILApAQCAtNDA2Miw2ICs0MDY4LDE1IEBACiAKIAlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgbXZfaW50ZXJydXB0LAogCQkJCSBJUlFGX1NIQVJFRCwgJm12Nl9zaHQpOworZXJyOgorI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQorCWlmICghSVNfRVJSKGhwcml2LT5jbGspKSB7CisJCWNsa19kaXNhYmxlKGhwcml2LT5jbGspOworCQljbGtfcHV0KGhwcml2LT5jbGspOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtNDA3NiwxNCArNDA5MSw2NiBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKyNlbmRpZgogCWF0YV9ob3N0X2RldGFjaChob3N0KTsKKworI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQorCWlmICghSVNfRVJSKGhwcml2LT5jbGspKSB7CisJCWNsa19kaXNhYmxlKGhwcml2LT5jbGspOworCQljbGtfcHV0KGhwcml2LT5jbGspOworCX0KKyNlbmRpZgogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG12X3BsYXRmb3JtX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpZiAoaG9zdCkKKwkJcmV0dXJuIGF0YV9ob3N0X3N1c3BlbmQoaG9zdCwgc3RhdGUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXZfcGxhdGZvcm1fcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByZXQ7CisKKwlpZiAoaG9zdCkgeworCQlzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwkJY29uc3Qgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSAqbXZfcGxhdGZvcm1fZGF0YSA9IFwKKwkJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCQkvKgorCQkgKiAoUmUtKXByb2dyYW0gTUJVUyByZW1hcHBpbmcgd2luZG93cyBpZiB3ZSBhcmUgYXNrZWQgdG8uCisJCSAqLworCQlpZiAobXZfcGxhdGZvcm1fZGF0YS0+ZHJhbSAhPSBOVUxMKQorCQkJbXZfY29uZl9tYnVzX3dpbmRvd3MoaHByaXYsIG12X3BsYXRmb3JtX2RhdGEtPmRyYW0pOworCisJCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLworCQlyZXQgPSBtdl9pbml0X2hvc3QoaG9zdCk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBFcnJvciBkdXJpbmcgSFcgaW5pdFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG12X3BsYXRmb3JtX3N1c3BlbmQgTlVMTAorI2RlZmluZSBtdl9wbGF0Zm9ybV9yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12X3BsYXRmb3JtX2RyaXZlciA9IHsKIAkucHJvYmUJCQk9IG12X3BsYXRmb3JtX3Byb2JlLAogCS5yZW1vdmUJCQk9IF9fZGV2ZXhpdF9wKG12X3BsYXRmb3JtX3JlbW92ZSksCisJLnN1c3BlbmQJCT0gbXZfcGxhdGZvcm1fc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBtdl9wbGF0Zm9ybV9yZXN1bWUsCiAJLmRyaXZlcgkJCT0gewogCQkJCSAgIC5uYW1lID0gRFJWX05BTUUsCiAJCQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCkBAIC00MDk0LDYgKzQxNjEsOSBAQAogI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbnQgbXZfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG12X3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbmRpZgogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtdl9wY2lfZHJpdmVyID0gewpAQCAtNDEwMSw2ICs0MTcxLDExIEBACiAJLmlkX3RhYmxlCQk9IG12X3BjaV90YmwsCiAJLnByb2JlCQkJPSBtdl9wY2lfaW5pdF9vbmUsCiAJLnJlbW92ZQkJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCQk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gbXZfcGNpX2RldmljZV9yZXN1bWUsCisjZW5kaWYKKwogfTsKIAogLyogbW92ZSB0byBQQ0kgbGF5ZXIgb3IgbGliYXRhIGNvcmU/ICovCkBAIC00MTk0LDcgKzQyNjksNyBAQAogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJm12X3BvcnRfaW5mb1tib2FyZF9pZHhdLCBOVUxMIH07CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXN0cnVjdCBtdl9ob3N0X3ByaXYgKmhwcml2OwotCWludCBuX3BvcnRzLCByYzsKKwlpbnQgbl9wb3J0cywgcG9ydCwgcmM7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwgInZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKQEAgLTQyMDgsNiArNDI4Myw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhwcml2OwogCWhwcml2LT5uX3BvcnRzID0gbl9wb3J0czsKKwlocHJpdi0+Ym9hcmRfaWR4ID0gYm9hcmRfaWR4OwogCiAJLyogYWNxdWlyZSByZXNvdXJjZXMgKi8KIAlyYyA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTQyMzAsOCArNDMwNiwxNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGhvc3QtPm5fcG9ydHM7IHBvcnQrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbcG9ydF07CisJCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfcG9ydF9iYXNlKGhwcml2LT5iYXNlLCBwb3J0KTsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IHBvcnRfbW1pbyAtIGhwcml2LT5iYXNlOworCisJCWF0YV9wb3J0X3BiYXJfZGVzYyhhcCwgTVZfUFJJTUFSWV9CQVIsIC0xLCAibW1pbyIpOworCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIE1WX1BSSU1BUllfQkFSLCBvZmZzZXQsICJwb3J0Iik7CisJfQorCiAJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCi0JcmMgPSBtdl9pbml0X2hvc3QoaG9zdCwgYm9hcmRfaWR4KTsKKwlyYyA9IG12X2luaXRfaG9zdChob3N0KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtNDI0Nyw2ICs0MzMyLDI3IEBACiAJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIHBkZXYtPmlycSwgbXZfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkgSVNfR0VOX0koaHByaXYpID8gJm12NV9zaHQgOiAmbXY2X3NodCk7CiB9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbXZfcGNpX2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCisJcmMgPSBtdl9pbml0X2hvc3QoaG9zdCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlhdGFfaG9zdF9yZXN1bWUoaG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogI2VuZGlmCiAKIHN0YXRpYyBpbnQgbXZfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCmluZGV4IDA3ZDhkMDAuLjYzMzA2MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jCkBAIC04NjIsNyArODYyLDcgQEAKIAlpZiAocG9ydF9zdGF0dXMgJiBQRENfRFJJVkVfRVJSKQogCQlhY19lcnJfbWFzayB8PSBBQ19FUlJfREVWOwogCWlmIChwb3J0X3N0YXR1cyAmIChQRENfT1ZFUlJVTl9FUlIgfCBQRENfVU5ERVJSVU5fRVJSKSkKLQkJYWNfZXJyX21hc2sgfD0gQUNfRVJSX0hTTTsKKwkJYWNfZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOwogCWlmIChwb3J0X3N0YXR1cyAmIChQREMyX0FUQV9IQkFfRVJSIHwgUERDMl9BVEFfRE1BX0NOVF9FUlIpKQogCQlhY19lcnJfbWFzayB8PSBBQ19FUlJfQVRBX0JVUzsKIAlpZiAocG9ydF9zdGF0dXMgJiAoUERDX1BIX0VSUiB8IFBEQ19TSF9FUlIgfCBQRENfREhfRVJSIHwgUERDMl9IVE9fRVJSCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggNjNjMTQzZS4uYzBjNWE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtNzAzLDkgKzcwMyw5IEBACiAJcmV0dXJuIDA7CiAKIG91dF91bnJlZ2lzdGVyOgorCWtvYmplY3RfcHV0KCZwcml2LT5rb2JqKTsKIAlrZnJlZShkcnYtPnApOwogCWRydi0+cCA9IE5VTEw7Ci0Ja29iamVjdF9wdXQoJnByaXYtPmtvYmopOwogb3V0X3B1dF9idXM6CiAJYnVzX3B1dChidXMpOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IGYxMjkwY2IuLjI4MjAyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtNDQ2LDcgKzQ0Niw4IEBACiAgKiBAZGV2OiBkZXZpY2UuCiAgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCi1pbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpCitpbnQgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQogewogCWludCBlcnJvciA9IDA7CiAJaWYgKGRldikKQEAgLTQ1OSw3ICs0NjAsOCBAQAogICogQGRldjogZGV2aWNlLgogICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwotdm9pZCBkZXZpY2VfcmVtb3ZlX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgZGV2aWNlX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCWNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQogewogCWlmIChkZXYpCiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZkZXYtPmtvYmosICZhdHRyLT5hdHRyKTsKQEAgLTQ3MCw3ICs0NzIsOCBAQAogICogQGRldjogZGV2aWNlLgogICogQGF0dHI6IGRldmljZSBiaW5hcnkgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KLWludCBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCitpbnQgZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlpbnQgZXJyb3IgPSAtRUlOVkFMOwogCWlmIChkZXYpCkBAIC00ODQsNyArNDg3LDggQEAKICAqIEBkZXY6IGRldmljZS4KICAqIEBhdHRyOiBkZXZpY2UgYmluYXJ5IGF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCi12b2lkIGRldmljZV9yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKK3ZvaWQgZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaWYgKGRldikKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZkZXYtPmtvYmosIGF0dHIpOwpAQCAtOTA1LDggKzkwOSwxMCBAQAogCQlkZXYtPmluaXRfbmFtZSA9IE5VTEw7CiAJfQogCi0JaWYgKCFkZXZfbmFtZShkZXYpKQorCWlmICghZGV2X25hbWUoZGV2KSkgeworCQllcnJvciA9IC1FSU5WQUw7CiAJCWdvdG8gbmFtZV9lcnJvcjsKKwl9CiAKIAlwcl9kZWJ1ZygiZGV2aWNlOiAnJXMnOiAlc1xuIiwgZGV2X25hbWUoZGV2KSwgX19mdW5jX18pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCmluZGV4IDUwMzc1YmIuLjA5MGRkNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCkBAIC0zMiw3ICszMiw3IEBACiBzdGF0aWMgaW50IGRldl9tb3VudDsKICNlbmRpZgogCi1zdGF0aWMgcndsb2NrX3QgZGlybG9jazsKK3N0YXRpYyBERUZJTkVfTVVURVgoZGlybG9jayk7CiAKIHN0YXRpYyBpbnQgX19pbml0IG1vdW50X3BhcmFtKGNoYXIgKnN0cikKIHsKQEAgLTkzLDcgKzkzLDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JcmVhZF9sb2NrKCZkaXJsb2NrKTsKKwltdXRleF9sb2NrKCZkaXJsb2NrKTsKIAllcnIgPSBkZXZfbWtkaXIobm9kZXBhdGgsIDA3NTUpOwogCWlmIChlcnIgPT0gLUVOT0VOVCkgewogCQljaGFyICpwYXRoOwpAQCAtMTAxLDggKzEwMSwxMCBAQAogCiAJCS8qIHBhcmVudCBkaXJlY3RvcmllcyBkbyBub3QgZXhpc3QsIGNyZWF0ZSB0aGVtICovCiAJCXBhdGggPSBrc3RyZHVwKG5vZGVwYXRoLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwYXRoKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmICghcGF0aCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCXMgPSBwYXRoOwogCQlmb3IgKDs7KSB7CiAJCQlzID0gc3RyY2hyKHMsICcvJyk7CkBAIC0xMTcsNyArMTE5LDggQEAKIAkJfQogCQlrZnJlZShwYXRoKTsKIAl9Ci0JcmVhZF91bmxvY2soJmRpcmxvY2spOworb3V0OgorCW11dGV4X3VubG9jaygmZGlybG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjI5LDcgKzIzMiw3IEBACiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXdyaXRlX2xvY2soJmRpcmxvY2spOworCW11dGV4X2xvY2soJmRpcmxvY2spOwogCWZvciAoOzspIHsKIAkJY2hhciAqYmFzZTsKIApAQCAtMjQxLDcgKzI0NCw3IEBACiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9Ci0Jd3JpdGVfdW5sb2NrKCZkaXJsb2NrKTsKKwltdXRleF91bmxvY2soJmRpcmxvY2spOwogCiAJa2ZyZWUocGF0aCk7CiAJcmV0dXJuIGVycjsKQEAgLTM1Miw4ICszNTUsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHZmc21vdW50ICptbnQ7CiAKLQlyd2xvY2tfaW5pdCgmZGlybG9jayk7Ci0KIAllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZkZXZfZnNfdHlwZSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgImRldnRtcGZzOiB1bmFibGUgdG8gcmVnaXN0ZXIgZGV2dG1wZnMgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RyaXZlci5jIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCmluZGV4IGYzNjc4ODUuLjkwYzlmZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKQEAgLTk4LDcgKzk4LDcgQEAKICAqIEBhdHRyOiBkcml2ZXIgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KIGludCBkcml2ZXJfY3JlYXRlX2ZpbGUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKLQkJICAgICAgIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKQorCQkgICAgICAgY29uc3Qgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJaW50IGVycm9yOwogCWlmIChkcnYpCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqIEBhdHRyOiBkcml2ZXIgYXR0cmlidXRlIGRlc2NyaXB0b3IuCiAgKi8KIHZvaWQgZHJpdmVyX3JlbW92ZV9maWxlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCi0JCQlzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cikKKwkJCWNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKQogewogCWlmIChkcnYpCiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZkcnYtPnAtPmtvYmosICZhdHRyLT5hdHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCBjNGM4ZjJlLi5kN2Q3N2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC02Myw2ICs2MywyMCBAQAogfQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcik7CiAKK3N0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChtZW1vcnlfaXNvbGF0ZV9jaGFpbik7CisKK2ludCByZWdpc3Rlcl9tZW1vcnlfaXNvbGF0ZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm1lbW9yeV9pc29sYXRlX2NoYWluLCBuYik7Cit9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKTsKKwordm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm1lbW9yeV9pc29sYXRlX2NoYWluLCBuYik7Cit9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIpOworCiAvKgogICogcmVnaXN0ZXJfbWVtb3J5IC0gU2V0dXAgYSBzeXNmcyBkZXZpY2UgZm9yIGEgbWVtb3J5IGJsb2NrCiAgKi8KQEAgLTE1Nyw2ICsxNzEsMTEgQEAKIAlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbWVtb3J5X2NoYWluLCB2YWwsIHYpOwogfQogCitpbnQgbWVtb3J5X2lzb2xhdGVfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbWVtb3J5X2lzb2xhdGVfY2hhaW4sIHZhbCwgdik7Cit9CisKIC8qCiAgKiBNRU1PUllfSE9UUExVRyBkZXBlbmRzIG9uIFNQQVJTRU1FTSBpbiBtbS9LY29uZmlnLCBzbyBpdCBpcwogICogT0sgdG8gaGF2ZSBkaXJlY3QgcmVmZXJlbmNlcyB0byBzcGFyc2VtZW0gdmFyaWFibGVzIGluIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDlkMmVlMjUuLjU4ZWZhZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC00NDEsNiArNDQxLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSk7CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAxYTIxNmMxLi5hNTE0MmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTE2MSw2ICsxNjEsMzIgQEAKIAlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9saXN0KTsKIH0KIAorc3RhdGljIGt0aW1lX3QgaW5pdGNhbGxfZGVidWdfc3RhcnQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWt0aW1lX3QgY2FsbHRpbWUgPSBrdGltZV9zZXQoMCwgMCk7CisKKwlpZiAoaW5pdGNhbGxfZGVidWcpIHsKKwkJcHJfaW5mbygiY2FsbGluZyAgJXMrIEAgJWlcbiIsCisJCQkJZGV2X25hbWUoZGV2KSwgdGFza19waWRfbnIoY3VycmVudCkpOworCQljYWxsdGltZSA9IGt0aW1lX2dldCgpOworCX0KKworCXJldHVybiBjYWxsdGltZTsKK30KKworc3RhdGljIHZvaWQgaW5pdGNhbGxfZGVidWdfcmVwb3J0KHN0cnVjdCBkZXZpY2UgKmRldiwga3RpbWVfdCBjYWxsdGltZSwKKwkJCQkgIGludCBlcnJvcikKK3sKKwlrdGltZV90IGRlbHRhLCByZXR0aW1lOworCisJaWYgKGluaXRjYWxsX2RlYnVnKSB7CisJCXJldHRpbWUgPSBrdGltZV9nZXQoKTsKKwkJZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOworCQlwcl9pbmZvKCJjYWxsICVzKyByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsIGRldl9uYW1lKGRldiksCisJCQllcnJvciwgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhkZWx0YSkgPj4gMTApOworCX0KK30KKwogLyoqCiAgKiBwbV9vcCAtIEV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQuCiAgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgpAQCAtMTcyLDEzICsxOTgsOSBAQAogCQkgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBlcnJvciA9IDA7Ci0Ja3RpbWVfdCBjYWxsdGltZSwgZGVsdGEsIHJldHRpbWU7CisJa3RpbWVfdCBjYWxsdGltZTsKIAotCWlmIChpbml0Y2FsbF9kZWJ1ZykgewotCQlwcl9pbmZvKCJjYWxsaW5nICAlcysgQCAlaVxuIiwKLQkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7Ci0JCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7Ci0JfQorCWNhbGx0aW1lID0gaW5pdGNhbGxfZGVidWdfc3RhcnQoZGV2KTsKIAogCXN3aXRjaCAoc3RhdGUuZXZlbnQpIHsKICNpZmRlZiBDT05GSUdfU1VTUEVORApAQCAtMjI3LDEyICsyNDksNyBAQAogCQllcnJvciA9IC1FSU5WQUw7CiAJfQogCi0JaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCXJldHRpbWUgPSBrdGltZV9nZXQoKTsKLQkJZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOwotCQlwcl9pbmZvKCJjYWxsICVzKyByZXR1cm5lZCAlZCBhZnRlciAlTGQgdXNlY3NcbiIsIGRldl9uYW1lKGRldiksCi0JCQllcnJvciwgKHVuc2lnbmVkIGxvbmcgbG9uZylrdGltZV90b19ucyhkZWx0YSkgPj4gMTApOwotCX0KKwlpbml0Y2FsbF9kZWJ1Z19yZXBvcnQoZGV2LCBjYWxsdGltZSwgZXJyb3IpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzA5LDggKzMyNiw5IEBACiAJaWYgKGluaXRjYWxsX2RlYnVnKSB7CiAJCXJldHRpbWUgPSBrdGltZV9nZXQoKTsKIAkJZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOwotCQlwcmludGsoImluaXRjYWxsICVzX2krIHJldHVybmVkICVkIGFmdGVyICVMZCB1c2Vjc1xuIiwgZGV2X25hbWUoZGV2KSwKLQkJCWVycm9yLCAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMCk7CisJCXByaW50aygiaW5pdGNhbGwgJXNfaSsgcmV0dXJuZWQgJWQgYWZ0ZXIgJUxkIHVzZWNzXG4iLAorCQkJZGV2X25hbWUoZGV2KSwgZXJyb3IsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMCk7CiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtMzU0LDYgKzM3MiwyMyBAQAogCQlrb2JqZWN0X25hbWUoJmRldi0+a29iaiksIHBtX3ZlcmIoc3RhdGUuZXZlbnQpLCBpbmZvLCBlcnJvcik7CiB9CiAKK3N0YXRpYyB2b2lkIGRwbV9zaG93X3RpbWUoa3RpbWVfdCBzdGFydHRpbWUsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgY2hhciAqaW5mbykKK3sKKwlrdGltZV90IGNhbGx0aW1lOworCXM2NCB1c2VjczY0OworCWludCB1c2VjczsKKworCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CisJdXNlY3M2NCA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihjYWxsdGltZSwgc3RhcnR0aW1lKSk7CisJZG9fZGl2KHVzZWNzNjQsIE5TRUNfUEVSX1VTRUMpOworCXVzZWNzID0gdXNlY3M2NDsKKwlpZiAodXNlY3MgPT0gMCkKKwkJdXNlY3MgPSAxOworCXByX2luZm8oIlBNOiAlcyVzJXMgb2YgZGV2aWNlcyBjb21wbGV0ZSBhZnRlciAlbGQuJTAzbGQgbXNlY3NcbiIsCisJCWluZm8gPzogIiIsIGluZm8gPyAiICIgOiAiIiwgcG1fdmVyYihzdGF0ZS5ldmVudCksCisJCXVzZWNzIC8gVVNFQ19QRVJfTVNFQywgdXNlY3MgJSBVU0VDX1BFUl9NU0VDKTsKK30KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3VtZSByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCkBAIC0zOTAsNiArNDI1LDcgQEAKIHZvaWQgZHBtX3Jlc3VtZV9ub2lycShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OworCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCXRyYW5zaXRpb25fc3RhcnRlZCA9IGZhbHNlOwpAQCAtNDAzLDExICs0MzksMzIgQEAKIAkJCQlwbV9kZXZfZXJyKGRldiwgc3RhdGUsICIgZWFybHkiLCBlcnJvcik7CiAJCX0KIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CisJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCAiZWFybHkiKTsKIAlyZXN1bWVfZGV2aWNlX2lycXMoKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRwbV9yZXN1bWVfbm9pcnEpOwogCiAvKioKKyAqIGxlZ2FjeV9yZXN1bWUgLSBFeGVjdXRlIGEgbGVnYWN5IChidXMgb3IgY2xhc3MpIHJlc3VtZSBjYWxsYmFjayBmb3IgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqIEBjYjogUmVzdW1lIGNhbGxiYWNrIHRvIGV4ZWN1dGUuCisgKi8KK3N0YXRpYyBpbnQgbGVnYWN5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCAoKmNiKShzdHJ1Y3QgZGV2aWNlICpkZXYpKQoreworCWludCBlcnJvcjsKKwlrdGltZV90IGNhbGx0aW1lOworCisJY2FsbHRpbWUgPSBpbml0Y2FsbF9kZWJ1Z19zdGFydChkZXYpOworCisJZXJyb3IgPSBjYihkZXYpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChjYiwgZXJyb3IpOworCisJaW5pdGNhbGxfZGVidWdfcmVwb3J0KGRldiwgY2FsbHRpbWUsIGVycm9yKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCiAgKiBkZXZpY2VfcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KQEAgLTQyNyw3ICs0ODQsNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+YnVzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+YnVzLT5yZXN1bWUpIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImxlZ2FjeSAiKTsKLQkJCWVycm9yID0gZGV2LT5idXMtPnJlc3VtZShkZXYpOworCQkJZXJyb3IgPSBsZWdhY3lfcmVzdW1lKGRldiwgZGV2LT5idXMtPnJlc3VtZSk7CiAJCX0KIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmQ7CkBAIC00NDgsNyArNTA1LDcgQEAKIAkJCWVycm9yID0gcG1fb3AoZGV2LCBkZXYtPmNsYXNzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+Y2xhc3MtPnJlc3VtZSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5IGNsYXNzICIpOwotCQkJZXJyb3IgPSBkZXYtPmNsYXNzLT5yZXN1bWUoZGV2KTsKKwkJCWVycm9yID0gbGVnYWN5X3Jlc3VtZShkZXYsIGRldi0+Y2xhc3MtPnJlc3VtZSk7CiAJCX0KIAl9CiAgRW5kOgpAQCAtNDY4LDYgKzUyNSw3IEBACiBzdGF0aWMgdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwpAQCAtNDk2LDYgKzU1NCw3IEBACiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCAmZHBtX2xpc3QpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogfQogCiAvKioKQEAgLTU0OCw3ICs2MDcsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCiAJCQlkZXZpY2VfY29tcGxldGUoZGV2LCBzdGF0ZSk7Ci0JCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAogCQkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJfQpAQCAtNjI4LDYgKzY4Nyw3IEBACiBpbnQgZHBtX3N1c3BlbmRfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCWludCBlcnJvciA9IDA7CiAKIAlzdXNwZW5kX2RldmljZV9pcnFzKCk7CkBAIC02NDMsMTEgKzcwMywzNSBAQAogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAlpZiAoZXJyb3IpCiAJCWRwbV9yZXN1bWVfbm9pcnEocmVzdW1lX2V2ZW50KHN0YXRlKSk7CisJZWxzZQorCQlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsICJsYXRlIik7CiAJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHBtX3N1c3BlbmRfbm9pcnEpOwogCiAvKioKKyAqIGxlZ2FjeV9zdXNwZW5kIC0gRXhlY3V0ZSBhIGxlZ2FjeSAoYnVzIG9yIGNsYXNzKSBzdXNwZW5kIGNhbGxiYWNrIGZvciBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogQGNiOiBTdXNwZW5kIGNhbGxiYWNrIHRvIGV4ZWN1dGUuCisgKi8KK3N0YXRpYyBpbnQgbGVnYWN5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsCisJCQkgIGludCAoKmNiKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkpCit7CisJaW50IGVycm9yOworCWt0aW1lX3QgY2FsbHRpbWU7CisKKwljYWxsdGltZSA9IGluaXRjYWxsX2RlYnVnX3N0YXJ0KGRldik7CisKKwllcnJvciA9IGNiKGRldiwgc3RhdGUpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChjYiwgZXJyb3IpOworCisJaW5pdGNhbGxfZGVidWdfcmVwb3J0KGRldiwgY2FsbHRpbWUsIGVycm9yKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCiAgKiBkZXZpY2Vfc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNjY0LDggKzc0OCw3IEBACiAJCQllcnJvciA9IHBtX29wKGRldiwgZGV2LT5jbGFzcy0+cG0sIHN0YXRlKTsKIAkJfSBlbHNlIGlmIChkZXYtPmNsYXNzLT5zdXNwZW5kKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJsZWdhY3kgY2xhc3MgIik7Ci0JCQllcnJvciA9IGRldi0+Y2xhc3MtPnN1c3BlbmQoZGV2LCBzdGF0ZSk7Ci0JCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LT5jbGFzcy0+c3VzcGVuZCwgZXJyb3IpOworCQkJZXJyb3IgPSBsZWdhY3lfc3VzcGVuZChkZXYsIHN0YXRlLCBkZXYtPmNsYXNzLT5zdXNwZW5kKTsKIAkJfQogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIEVuZDsKQEAgLTY4Niw4ICs3NjksNyBAQAogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+YnVzLT5wbSwgc3RhdGUpOwogCQl9IGVsc2UgaWYgKGRldi0+YnVzLT5zdXNwZW5kKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJsZWdhY3kgIik7Ci0JCQllcnJvciA9IGRldi0+YnVzLT5zdXNwZW5kKGRldiwgc3RhdGUpOwotCQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+YnVzLT5zdXNwZW5kLCBlcnJvcik7CisJCQllcnJvciA9IGxlZ2FjeV9zdXNwZW5kKGRldiwgc3RhdGUsIGRldi0+YnVzLT5zdXNwZW5kKTsKIAkJfQogCX0KICBFbmQ6CkBAIC03MDMsNiArNzg1LDcgQEAKIHN0YXRpYyBpbnQgZHBtX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCWludCBlcnJvciA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CkBAIC03MjgsNiArODExLDggQEAKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsIGRwbV9saXN0LnByZXYpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlpZiAoIWVycm9yKQorCQlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNzk2LDcgKzg4MSw3IEBACiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7CiAJCWlmIChwbV9ydW50aW1lX2JhcnJpZXIoZGV2KSAmJiBkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CiAJCQkvKiBXYWtlLXVwIHJlcXVlc3RlZCBkdXJpbmcgc3lzdGVtIHNsZWVwIHRyYW5zaXRpb24uICovCi0JCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAkJCWVycm9yID0gLUVCVVNZOwogCQl9IGVsc2UgewogCQkJZXJyb3IgPSBkZXZpY2VfcHJlcGFyZShkZXYsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDQwZDc3MjAuLmY4YjA0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtODUsNiArODUsMTkgQEAKIAkJZGV2LT5idXMtPnBtLT5ydW50aW1lX2lkbGUoZGV2KTsKIAogCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0gJiYgZGV2LT50eXBlLT5wbS0+cnVudGltZV9pZGxlKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlkZXYtPnR5cGUtPnBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCX0gZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbQorCSAgICAmJiBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9pZGxlKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9pZGxlKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAl9CiAKIAlkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uID0gZmFsc2U7CkBAIC0xOTQsNiArMjA3LDIyIEBACiAKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0KKwkgICAgJiYgZGV2LT50eXBlLT5wbS0+cnVudGltZV9zdXNwZW5kKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlyZXR2YWwgPSBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CisJfSBlbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtCisJICAgICYmIGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3N1c3BlbmQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CiAJfSBlbHNlIHsKIAkJcmV0dmFsID0gLUVOT1NZUzsKIAl9CkBAIC0zNTksNiArMzg4LDIyIEBACiAKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0KKwkgICAgJiYgZGV2LT50eXBlLT5wbS0+cnVudGltZV9yZXN1bWUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbQorCSAgICAmJiBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9yZXN1bWUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKIAl9IGVsc2UgewogCQlyZXR2YWwgPSAtRU5PU1lTOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCmluZGV4IGViNGZhMTkuLmNlMWZhOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwpAQCAtNzEwMSw3ICs3MTAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBEQUM5NjBfcHJpdmRhdGEgREFDOTYwX0xQX3ByaXZkYXRhID0gewogCS5IYXJkd2FyZVR5cGUgPQkJREFDOTYwX0xQX0NvbnRyb2xsZXIsCi0JLkZpcm13YXJlVHlwZSAJPQlEQUM5NjBfTFBfQ29udHJvbGxlciwKKwkuRmlybXdhcmVUeXBlIAk9CURBQzk2MF9WMl9Db250cm9sbGVyLAogCS5JbnRlcnJ1cHRIYW5kbGVyID0JREFDOTYwX0xQX0ludGVycnVwdEhhbmRsZXIsCiAJLk1lbW9yeVdpbmRvd1NpemUgPQlEQUM5NjBfTFBfUmVnaXN0ZXJXaW5kb3dTaXplLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKaW5kZXggMTNiYjY5ZC4uNjRhMjIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKQEAgLTczNSwyMSArNzM1LDYgQEAKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7CiB9CiAKLS8qCi0gKiBFbnN1cmUgd2UgZG9uJ3QgY3JlYXRlIGFsaWFzZXMgaW4gVkkgY2FjaGVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAota2lsbGFsaWFzKHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0JaW50IGk7Ci0KLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkKLQkJX19iaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpLCAwKSB7Ci0JCQlmbHVzaF9kY2FjaGVfcGFnZShidi0+YnZfcGFnZSk7Ci0JCX0KLX0KLQogdm9pZAogYW9lY21kX2F0YV9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTg3MSw3ICs4NTYsNyBAQAogCQlpZiAoYnVmLT5mbGFncyAmIEJVRkZMX0ZBSUwpCiAJCQliaW9fZW5kaW8oYnVmLT5iaW8sIC1FSU8pOwogCQllbHNlIHsKLQkJCWtpbGxhbGlhcyhidWYtPmJpbyk7CisJCQliaW9fZmx1c2hfZGNhY2hlX3BhZ2VzKGJ1Zi0+YmlvKTsKIAkJCWJpb19lbmRpbyhidWYtPmJpbywgMCk7CiAJCX0KIAkJbWVtcG9vbF9mcmVlKGJ1ZiwgZC0+YnVmcG9vbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaCBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCmluZGV4IDIzMTJkNzguLmM5NzU1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCkBAIC0xNDkwLDcgKzE0OTAsNyBAQAogCiAvKiBkcmJkX3Byb2MuYyAqLwogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHJiZF9wcm9jOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJiZF9wcm9jX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmJkX3Byb2NfZm9wczsKIGV4dGVybiBjb25zdCBjaGFyICpkcmJkX2Nvbm5fc3RyKGVudW0gZHJiZF9jb25ucyBzKTsKIGV4dGVybiBjb25zdCBjaGFyICpkcmJkX3JvbGVfc3RyKGVudW0gZHJiZF9yb2xlIHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKaW5kZXggMTU3ZDFlNC4uOTM0OGYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYwpAQCAtMjcsNyArMjcsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZHJiZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CkBAIC0xNTEsNyArMTUwLDcgQEAKIAogREVGSU5FX1JBVEVMSU1JVF9TVEFURShkcmJkX3JhdGVsaW1pdF9zdGF0ZSwgNSAqIEhaLCA1KTsKIAotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBkcmJkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZHJiZF9vcHMgPSB7CiAJLm93bmVyID0gICBUSElTX01PRFVMRSwKIAkub3BlbiA9ICAgIGRyYmRfb3BlbiwKIAkucmVsZWFzZSA9IGRyYmRfcmVsZWFzZSwKQEAgLTM2MjMsNyArMzYyMiw3IEBACiB7CiAJbG9uZyByZWZyZXNoOwogCi0JaWYgKC0tcnNwLT5jb3VudCA8IDApIHsKKwlpZiAoIXJzcC0+Y291bnQtLSkgewogCQlnZXRfcmFuZG9tX2J5dGVzKCZyZWZyZXNoLCBzaXplb2YocmVmcmVzaCkpOwogCQlyc3AtPnN0YXRlICs9IHJlZnJlc2g7CiAJCXJzcC0+Y291bnQgPSBGQVVMVF9SQU5ET01fUkVGUkVTSDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3Byb2MuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3Byb2MuYwppbmRleCBiZGQwYjQ5Li5kZjhhZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm9jLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvYy5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcmJkX3Byb2M7Ci1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRyYmRfcHJvY19mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmJkX3Byb2NfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gZHJiZF9wcm9jX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYwppbmRleCBjNTQ4ZjI0Li4yNTljMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZHJiZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd29ya2VyLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYwppbmRleCBlZDg3OTZmLi5iNDUzYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZHJiZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KQEAgLTM0LDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCmluZGV4IGUwMzM5YWEuLjAyYjI1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCkBAIC04NjAsNyArODYwLDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBwcm9iZV9lcnJfMjsKIAl9Ci0JaG9zdC0+ZGV2X2Jhc2UgPSBpb3JlbWFwKHJzYy0+c3RhcnQgLCByc2MtPmVuZCArIDEpOworCWhvc3QtPmRldl9iYXNlID0gaW9yZW1hcChyc2MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJzYykpOwogCWlmICghaG9zdC0+ZGV2X2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczolZCBpb3JlbWFwIGZhaWxcbiIsCiAJCQkJX19mdW5jX18sIF9fTElORV9fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IDRkMjkwNTkuLmE2OTlmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMzA3LDYgKzMwNyw3IEBACiAJCXJldHVybjsKIAogCXVzYl9hbmNob3JfdXJiKHVyYiwgJmRhdGEtPmJ1bGtfYW5jaG9yKTsKKwl1c2JfbWFya19sYXN0X2J1c3koZGF0YS0+dWRldik7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAyZmIyZTZjLi41YWE3YTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTcyNSw5ICs3MjUsMTQgQEAKIGludCBfX2luaXQgYWdwX2FtZDY0X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gMDsKKwlzdGF0aWMgaW50IGRvbmUgPSAwOwogCiAJaWYgKGFncF9vZmYpCiAJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRvbmUrKykKKwkJcmV0dXJuIGFncF9icmlkZ2VzX2ZvdW5kID8gMCA6IC1FTk9ERVY7CisKIAllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC03NzEsMTIgKzc3Niw4IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiB9CiAKLS8qIE9uIEFNRDY0IHRoZSBQQ0kgZHJpdmVyIG5lZWRzIHRvIGluaXRpYWxpemUgdGhpcyBkcml2ZXIgZWFybHkKLSAgIGZvciB0aGUgSU9NTVUsIHNvIGl0IGhhcyB0byBiZSBjYWxsZWQgdmlhIGEgYmFja2Rvb3IuICovCi0jaWZuZGVmIENPTkZJR19HQVJUX0lPTU1VCiBtb2R1bGVfaW5pdChhZ3BfYW1kNjRfaW5pdCk7CiBtb2R1bGVfZXhpdChhZ3BfYW1kNjRfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIEFuZGkgS2xlZW4iKTsKIG1vZHVsZV9wYXJhbShhZ3BfdHJ5X3Vuc3VwcG9ydGVkLCBib29sLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggYTU2Y2EwOC4uYzNhYjQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTI4NSwxOCArMjg1LDIyIEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGFncF9vZmYpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChhZ3Bfb2ZmKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0X2JyaWRnZTsKKwl9CiAKIAlpZiAoIWJyaWRnZS0+ZGV2KSB7CiAJCXByaW50ayAoS0VSTl9ERUJVRyBQRlggIkVyaywgcmVnaXN0ZXJpbmcgd2l0aCBubyBwY2lfZGV2IVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3B1dF9icmlkZ2U7CiAJfQogCiAJLyogR3JhYiByZWZlcmVuY2Ugb24gdGhlIGNoaXBzZXQgZHJpdmVyLiAqLwogCWlmICghdHJ5X21vZHVsZV9nZXQoYnJpZGdlLT5kcml2ZXItPm93bmVyKSkgewogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYtPmRldiwgImNhbid0IGxvY2sgY2hpcHNldCBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIGVycl9wdXRfYnJpZGdlOwogCX0KIAogCWVycm9yID0gYWdwX2JhY2tlbmRfaW5pdGlhbGl6ZShicmlkZ2UpOwpAQCAtMzI2LDYgKzMzMCw3IEBACiAJYWdwX2JhY2tlbmRfY2xlYW51cChicmlkZ2UpOwogZXJyX291dDoKIAltb2R1bGVfcHV0KGJyaWRnZS0+ZHJpdmVyLT5vd25lcik7CitlcnJfcHV0X2JyaWRnZToKIAlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCmluZGV4IDkwNDdiMjcuLjU4NzUyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYwpAQCAtNDg4LDkgKzQ4OCw4IEBACiAJaGFuZGxlID0gb2JqOwogCWRvIHsKIAkJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbyk7Ci0JCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpKSB7CiAJCQkvKiBUQkQgY2hlY2sgX0NJRCBhbHNvICovCi0JCQlpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmdbc2l6ZW9mKGluZm8tPmhhcmR3YXJlX2lkLmxlbmd0aCktMV0gPSAnXDAnOwogCQkJbWF0Y2ggPSAoc3RyY21wKGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZywgIkhXUDAwMDEiKSA9PSAwKTsKIAkJCWtmcmVlKGluZm8pOwogCQkJaWYgKG1hdGNoKSB7CkBAIC01MDksNiArNTA4LDkgQEAKIAkJaGFuZGxlID0gcGFyZW50OwogCX0gd2hpbGUgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKTsKIAorCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIEFFX09LOwkvKiBmb3VuZCBubyBlbmNsb3NpbmcgSU9DICovCisKIAlpZiAoaHBfengxX3NldHVwKHNiYV9ocGEgKyBIUF9aWDFfSU9DX09GRlNFVCwgbGJhX2hwYSkpCiAJCXJldHVybiBBRV9PSzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwppbmRleCBlOTg5ZjY3Li4zZDljNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwpAQCAtMTU4LDEwICsxNTgsMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnJuZ19tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIHJldCA/IDogZXJyOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnJuZ19tdXRleCk7CisJZ290byBvdXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwppbmRleCA2NzljZDA4Li4xNzZmMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwpAQCAtMzIwNCw3ICszMjA0LDcgQEAKICNpZmRlZiBDT05GSUdfQUNQSQogCXNwbWlfZmluZF9ibWMoKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19QTlAKKyNpZmRlZiBDT05GSUdfQUNQSQogCXBucF9yZWdpc3Rlcl9kcml2ZXIoJmlwbWlfcG5wX2RyaXZlcik7CiAjZW5kaWYKIApAQCAtMzMzMCw3ICszMzMwLDcgQEAKICNpZmRlZiBDT05GSUdfUENJCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpcG1pX3BjaV9kcml2ZXIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BOUAorI2lmZGVmIENPTkZJR19BQ1BJCiAJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZpcG1pX3BucF9kcml2ZXIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBkMzQwMGIyLi43ZDczY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1OCB1cGRhdGVfZmxvd19jb250cm9sOwogCXN0cnVjdCBjdHJsX3VsIGN0cmxfdWw7CiAJc3RydWN0IGN0cmxfZGwgY3RybF9kbDsKLQlzdHJ1Y3Qga2ZpZm8gKmZpZm9fdWw7CisJc3RydWN0IGtmaWZvIGZpZm9fdWw7CiAJdm9pZCBfX2lvbWVtICpkbF9hZGRyWzJdOwogCXUzMiBkbF9zaXplWzJdOwogCXU4IHRvZ2dsZV9kbDsKQEAgLTY4NSw4ICs2ODUsNiBAQAogCQlkdW1wX3RhYmxlKGRjKTsKIAogCQlmb3IgKGkgPSBQT1JUX01ETTsgaSA8IE1BWF9QT1JUOyBpKyspIHsKLQkJCWRjLT5wb3J0W2ldLmZpZm9fdWwgPQotCQkJICAgIGtmaWZvX2FsbG9jKEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMsIE5VTEwpOwogCQkJbWVtc2V0KCZkYy0+cG9ydFtpXS5jdHJsX2RsLCAwLCBzaXplb2Yoc3RydWN0IGN0cmxfZGwpKTsKIAkJCW1lbXNldCgmZGMtPnBvcnRbaV0uY3RybF91bCwgMCwgc2l6ZW9mKHN0cnVjdCBjdHJsX3VsKSk7CiAJCX0KQEAgLTc5OCw3ICs3OTYsNyBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCS8qIEdldCBkYXRhIGZyb20gdHR5IGFuZCBwbGFjZSBpbiBidWYgZm9yIG5vdyAqLwotCXNpemUgPSBfX2tmaWZvX2dldChwb3J0LT5maWZvX3VsLCBkYy0+c2VuZF9idWYsCisJc2l6ZSA9IGtmaWZvX291dCgmcG9ydC0+Zmlmb191bCwgZGMtPnNlbmRfYnVmLAogCQkJICAgdWxfc2l6ZSA8IFNFTkRfQlVGX01BWCA/IHVsX3NpemUgOiBTRU5EX0JVRl9NQVgpOwogCiAJaWYgKHNpemUgPT0gMCkgewpAQCAtOTg4LDExICs5ODYsMTEgQEAKIAogCX0gZWxzZSBpZiAob2xkX2N0cmwuQ1RTID09IDAgJiYgY3RybF9kbC5DVFMgPT0gMSkgewogCi0JCWlmIChfX2tmaWZvX2xlbihkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSkgeworCQlpZiAoa2ZpZm9fbGVuKCZkYy0+cG9ydFtwb3J0XS5maWZvX3VsKSkgewogCQkJREJHMSgiRW5hYmxlIGludGVycnVwdCAoMHglMDRYKSBvbiBwb3J0OiAlZCIsCiAJCQkJZW5hYmxlX2llciwgcG9ydCk7CiAJCQlEQkcxKCJEYXRhIGluIGJ1ZmZlciBbJWRdLCBlbmFibGUgdHJhbnNtaXQhICIsCi0JCQkJX19rZmlmb19sZW4oZGMtPnBvcnRbcG9ydF0uZmlmb191bCkpOworCQkJCWtmaWZvX2xlbigmZGMtPnBvcnRbcG9ydF0uZmlmb191bCkpOwogCQkJZW5hYmxlX3RyYW5zbWl0X3VsKHBvcnQsIGRjKTsKIAkJfSBlbHNlIHsKIAkJCURCRzEoIk5vIGRhdGEgaW4gYnVmZmVyLi4uIik7CkBAIC0xNDMzLDYgKzE0MzEsMTYgQEAKIAkJZ290byBlcnJfZnJlZV9zYnVmOwogCX0KIAorCWZvciAoaSA9IFBPUlRfTURNOyBpIDwgTUFYX1BPUlQ7IGkrKykgeworCQlpZiAoa2ZpZm9fYWxsb2MoJmRjLT5wb3J0W2ldLmZpZm9fdWwsCisJCSAgICAgIEZJRk9fQlVGRkVSX1NJWkVfVUwsIEdGUF9BVE9NSUMpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJDb3VsZCBub3QgYWxsb2NhdGUga2ZpZm8gYnVmZmVyXG4iKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9mcmVlX2tmaWZvOworCQl9CisJfQorCiAJc3Bpbl9sb2NrX2luaXQoJmRjLT5zcGluX211dGV4KTsKIAogCW5vem9taV9zZXR1cF9wcml2YXRlX2RhdGEoZGMpOwpAQCAtMTQ0NSw3ICsxNDUzLDcgQEAKIAkJCU5PWk9NSV9OQU1FLCBkYyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIHBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyX2ZyZWVfc2J1ZjsKKwkJZ290byBlcnJfZnJlZV9rZmlmbzsKIAl9CiAKIAlEQkcxKCJiYXNlX2FkZHI6ICVwIiwgZGMtPmJhc2VfYWRkcik7CkBAIC0xNDY0LDEzICsxNDcyLDI4IEBACiAJZGMtPnN0YXRlID0gTk9aT01JX1NUQVRFX0VOQUJMRUQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BPUlQ7IGkrKykgeworCQlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OworCiAJCW11dGV4X2luaXQoJmRjLT5wb3J0W2ldLnR0eV9zZW0pOwogCQl0dHlfcG9ydF9pbml0KCZkYy0+cG9ydFtpXS5wb3J0KTsKLQkJdHR5X3JlZ2lzdGVyX2RldmljZShudHR5X2RyaXZlciwgZGMtPmluZGV4X3N0YXJ0ICsgaSwKKwkJdHR5X2RldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGRjLT5pbmRleF9zdGFydCArIGksCiAJCQkJCQkJJnBkZXYtPmRldik7CisKKwkJaWYgKElTX0VSUih0dHlfZGV2KSkgeworCQkJcmV0ID0gUFRSX0VSUih0dHlfZGV2KTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB0dHk/XG4iKTsKKwkJCWdvdG8gZXJyX2ZyZWVfdHR5OworCQl9CiAJfQorCiAJcmV0dXJuIDA7CiAKK2Vycl9mcmVlX3R0eToKKwlmb3IgKGkgPSBkYy0+aW5kZXhfc3RhcnQ7IGkgPCBkYy0+aW5kZXhfc3RhcnQgKyBNQVhfUE9SVDsgKytpKQorCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGkpOworZXJyX2ZyZWVfa2ZpZm86CisJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspCisJCWtmaWZvX2ZyZWUoJmRjLT5wb3J0W2ldLmZpZm9fdWwpOwogZXJyX2ZyZWVfc2J1ZjoKIAlrZnJlZShkYy0+c2VuZF9idWYpOwogCWlvdW5tYXAoZGMtPmJhc2VfYWRkcik7CkBAIC0xNTM2LDggKzE1NTksNyBAQAogCWZyZWVfaXJxKHBkZXYtPmlycSwgZGMpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUOyBpKyspCi0JCWlmIChkYy0+cG9ydFtpXS5maWZvX3VsKQotCQkJa2ZpZm9fZnJlZShkYy0+cG9ydFtpXS5maWZvX3VsKTsKKwkJa2ZpZm9fZnJlZSgmZGMtPnBvcnRbaV0uZmlmb191bCk7CiAKIAlrZnJlZShkYy0+c2VuZF9idWYpOwogCkBAIC0xNjczLDcgKzE2OTUsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcnZhbCA9IF9fa2ZpZm9fcHV0KHBvcnQtPmZpZm9fdWwsICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCBjb3VudCk7CisJcnZhbCA9IGtmaWZvX2luKCZwb3J0LT5maWZvX3VsLCAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgY291bnQpOwogCiAJLyogbm90aWZ5IGNhcmQgKi8KIAlpZiAodW5saWtlbHkoZGMgPT0gTlVMTCkpIHsKQEAgLTE3MjEsNyArMTc0Myw3IEBACiAJaWYgKCFwb3J0LT5wb3J0LmNvdW50KQogCQlnb3RvIGV4aXQ7CiAKLQlyb29tID0gcG9ydC0+Zmlmb191bC0+c2l6ZSAtIF9fa2ZpZm9fbGVuKHBvcnQtPmZpZm9fdWwpOworCXJvb20gPSBwb3J0LT5maWZvX3VsLnNpemUgLSBrZmlmb19sZW4oJnBvcnQtPmZpZm9fdWwpOwogCiBleGl0OgogCW11dGV4X3VubG9jaygmcG9ydC0+dHR5X3NlbSk7CkBAIC0xODc4LDcgKzE5MDAsNyBAQAogCQlnb3RvIGV4aXRfaW5fYnVmZmVyOwogCX0KIAotCXJ2YWwgPSBfX2tmaWZvX2xlbihwb3J0LT5maWZvX3VsKTsKKwlydmFsID0ga2ZpZm9fbGVuKCZwb3J0LT5maWZvX3VsKTsKIAogZXhpdF9pbl9idWZmZXI6CiAJcmV0dXJuIHJ2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbndmbGFzaC5jIGIvZHJpdmVycy9jaGFyL253Zmxhc2guYwppbmRleCA4YzdkZjViLi5mODA4MTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbndmbGFzaC5jCisrKyBiL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IDhjMjYyYWEuLmJiYTcyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNDg3LDcgKzQ4Niw3IEBACiAJaW50IGNhbWVyYV9wb3dlcjsKIAlpbnQgYmx1ZXRvb3RoX3Bvd2VyOwogCXN0cnVjdCBtdXRleCBsb2NrOwotCXN0cnVjdCBrZmlmbyAqZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gZmlmbzsKIAlzcGlubG9ja190IGZpZm9fbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmaWZvX3Byb2NfbGlzdDsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmlmb19hc3luYzsKQEAgLTQ5Niw3ICs0OTUsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2pvZ19kZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfa2V5X2RldjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5wdXRfd29yazsKLQlzdHJ1Y3Qga2ZpZm8gKmlucHV0X2ZpZm87CisJc3RydWN0IGtmaWZvIGlucHV0X2ZpZm87CiAJc3BpbmxvY2tfdCBpbnB1dF9maWZvX2xvY2s7CiB9IHNvbnlwaV9kZXZpY2U7CiAKQEAgLTc3Nyw4ICs3NzYsOSBAQAogewogCXN0cnVjdCBzb255cGlfa2V5cHJlc3Mga3A7CiAKLQl3aGlsZSAoa2ZpZm9fZ2V0KHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikma3AsCi0JCQkgc2l6ZW9mKGtwKSkgPT0gc2l6ZW9mKGtwKSkgeworCXdoaWxlIChrZmlmb19vdXRfbG9ja2VkKCZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8sICh1bnNpZ25lZCBjaGFyICopJmtwLAorCQkJIHNpemVvZihrcCksICZzb255cGlfZGV2aWNlLmlucHV0X2ZpZm9fbG9jaykKKwkJCT09IHNpemVvZihrcCkpIHsKIAkJbXNsZWVwKDEwKTsKIAkJaW5wdXRfcmVwb3J0X2tleShrcC5kZXYsIGtwLmtleSwgMCk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKQEAgLTgyNyw4ICs4MjcsOSBAQAogCWlmIChrcC5kZXYpIHsKIAkJaW5wdXRfcmVwb3J0X2tleShrcC5kZXYsIGtwLmtleSwgMSk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKLQkJa2ZpZm9fcHV0KHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywKLQkJCSAgKHVuc2lnbmVkIGNoYXIgKikma3AsIHNpemVvZihrcCkpOworCQlrZmlmb19pbl9sb2NrZWQoJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbywKKwkJCSh1bnNpZ25lZCBjaGFyICopJmtwLCBzaXplb2Yoa3ApLAorCQkJJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmb19sb2NrKTsKIAkJc2NoZWR1bGVfd29yaygmc29ueXBpX2RldmljZS5pbnB1dF93b3JrKTsKIAl9CiB9CkBAIC04ODAsNyArODgxLDggQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChzb255cGlfYWNwaV9kZXZpY2UsIDEsIGV2ZW50KTsKICNlbmRpZgogCi0Ja2ZpZm9fcHV0KHNvbnlwaV9kZXZpY2UuZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmZXZlbnQsIHNpemVvZihldmVudCkpOworCWtmaWZvX2luX2xvY2tlZCgmc29ueXBpX2RldmljZS5maWZvLCAodW5zaWduZWQgY2hhciAqKSZldmVudCwKKwkJCXNpemVvZihldmVudCksICZzb255cGlfZGV2aWNlLmZpZm9fbG9jayk7CiAJa2lsbF9mYXN5bmMoJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYywgU0lHSU8sIFBPTExfSU4pOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc29ueXBpX2RldmljZS5maWZvX3Byb2NfbGlzdCk7CiAKQEAgLTkwMiwxNCArOTA0LDEzIEBACiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJnNvbnlwaV9kZXZpY2UubG9jayk7CiAJLyogRmx1c2ggaW5wdXQgcXVldWUgb24gZmlyc3Qgb3BlbiAqLwogCWlmICghc29ueXBpX2RldmljZS5vcGVuX2NvdW50KQotCQlrZmlmb19yZXNldChzb255cGlfZGV2aWNlLmZpZm8pOworCQlrZmlmb19yZXNldCgmc29ueXBpX2RldmljZS5maWZvKTsKIAlzb255cGlfZGV2aWNlLm9wZW5fY291bnQrKzsKIAltdXRleF91bmxvY2soJnNvbnlwaV9kZXZpY2UubG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxOSwxNyArOTIwLDE4IEBACiAJc3NpemVfdCByZXQ7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JaWYgKChrZmlmb19sZW4oc29ueXBpX2RldmljZS5maWZvKSA9PSAwKSAmJgorCWlmICgoa2ZpZm9fbGVuKCZzb255cGlfZGV2aWNlLmZpZm8pID09IDApICYmCiAJICAgIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvbnlwaV9kZXZpY2UuZmlmb19wcm9jX2xpc3QsCi0JCQkJICAgICAgIGtmaWZvX2xlbihzb255cGlfZGV2aWNlLmZpZm8pICE9IDApOworCQkJCSAgICAgICBrZmlmb19sZW4oJnNvbnlwaV9kZXZpY2UuZmlmbykgIT0gMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXdoaWxlIChyZXQgPCBjb3VudCAmJgotCSAgICAgICAoa2ZpZm9fZ2V0KHNvbnlwaV9kZXZpY2UuZmlmbywgJmMsIHNpemVvZihjKSkgPT0gc2l6ZW9mKGMpKSkgeworCSAgICAgICAoa2ZpZm9fb3V0X2xvY2tlZCgmc29ueXBpX2RldmljZS5maWZvLCAmYywgc2l6ZW9mKGMpLAorCQkJCSAmc29ueXBpX2RldmljZS5maWZvX2xvY2spID09IHNpemVvZihjKSkpIHsKIAkJaWYgKHB1dF91c2VyKGMsIGJ1ZisrKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXQrKzsKQEAgLTk0NiwxNSArOTQ4LDE1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNvbnlwaV9taXNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJcG9sbF93YWl0KGZpbGUsICZzb255cGlfZGV2aWNlLmZpZm9fcHJvY19saXN0LCB3YWl0KTsKLQlpZiAoa2ZpZm9fbGVuKHNvbnlwaV9kZXZpY2UuZmlmbykpCisJaWYgKGtmaWZvX2xlbigmc29ueXBpX2RldmljZS5maWZvKSkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29ueXBpX21pc2NfaW9jdGwoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZwLAorc3RhdGljIGxvbmcgc29ueXBpX21pc2NfaW9jdGwoc3RydWN0IGZpbGUgKmZwLAogCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgcmV0ID0gMDsKKwlsb25nIHJldCA9IDA7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJdTggdmFsODsKIAl1MTYgdmFsMTY7CkBAIC0xMDcwLDcgKzEwNzIsOCBAQAogCS5vcGVuCQk9IHNvbnlwaV9taXNjX29wZW4sCiAJLnJlbGVhc2UJPSBzb255cGlfbWlzY19yZWxlYXNlLAogCS5mYXN5bmMJCT0gc29ueXBpX21pc2NfZmFzeW5jLAotCS5pb2N0bAkJPSBzb255cGlfbWlzY19pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBzb255cGlfbWlzY19pb2N0bCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBzb255cGlfbWlzY19kZXZpY2UgPSB7CkBAIC0xMzEzLDExICsxMzE2LDEwIEBACiAJCQkiaHR0cDovL3d3dy5saW51eC5pdC9+bWFsYXR0aWEvd2lraS9pbmRleC5waHAvU29ueV9kcml2ZXJzXG4iKTsKIAogCXNwaW5fbG9ja19pbml0KCZzb255cGlfZGV2aWNlLmZpZm9fbG9jayk7Ci0Jc29ueXBpX2RldmljZS5maWZvID0ga2ZpZm9fYWxsb2MoU09OWVBJX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJCQkgJnNvbnlwaV9kZXZpY2UuZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHNvbnlwaV9kZXZpY2UuZmlmbykpIHsKKwllcnJvciA9IGtmaWZvX2FsbG9jKCZzb255cGlfZGV2aWNlLmZpZm8sIFNPTllQSV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic29ueXBpOiBrZmlmb19hbGxvYyBmYWlsZWRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihzb255cGlfZGV2aWNlLmZpZm8pOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc29ueXBpX2RldmljZS5maWZvX3Byb2NfbGlzdCk7CkBAIC0xMzkzLDEyICsxMzk1LDEwIEBACiAJCX0KIAogCQlzcGluX2xvY2tfaW5pdCgmc29ueXBpX2RldmljZS5pbnB1dF9maWZvX2xvY2spOwotCQlzb255cGlfZGV2aWNlLmlucHV0X2ZpZm8gPQotCQkJa2ZpZm9fYWxsb2MoU09OWVBJX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAmc29ueXBpX2RldmljZS5pbnB1dF9maWZvX2xvY2spOwotCQlpZiAoSVNfRVJSKHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbykpIHsKKwkJZXJyb3IgPSBrZmlmb19hbGxvYygmc29ueXBpX2RldmljZS5pbnB1dF9maWZvLCBTT05ZUElfQlVGX1NJWkUsCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChlcnJvcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzb255cGk6IGtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCQllcnJvciA9IFBUUl9FUlIoc29ueXBpX2RldmljZS5pbnB1dF9maWZvKTsKIAkJCWdvdG8gZXJyX2lucGRldl91bnJlZ2lzdGVyOwogCQl9CiAKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOwogIGVycl9wdXRfcGNpZGV2OgogCXBjaV9kZXZfcHV0KHBjaWRldik7Ci0Ja2ZpZm9fZnJlZShzb255cGlfZGV2aWNlLmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9kZXZpY2UuZmlmbyk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xNDM4LDcgKzE0MzgsNyBAQAogCWlmICh1c2VpbnB1dCkgewogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzb255cGlfZGV2aWNlLmlucHV0X2tleV9kZXYpOwogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzb255cGlfZGV2aWNlLmlucHV0X2pvZ19kZXYpOwotCQlrZmlmb19mcmVlKHNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbyk7CisJCWtmaWZvX2ZyZWUoJnNvbnlwaV9kZXZpY2UuaW5wdXRfZmlmbyk7CiAJfQogCiAJbWlzY19kZXJlZ2lzdGVyKCZzb255cGlfbWlzY19kZXZpY2UpOwpAQCAtMTQ1MSw3ICsxNDUxLDcgQEAKIAkJcGNpX2Rldl9wdXQoc29ueXBpX2RldmljZS5kZXYpOwogCX0KIAotCWtmaWZvX2ZyZWUoc29ueXBpX2RldmljZS5maWZvKTsKKwlrZmlmb19mcmVlKCZzb255cGlfZGV2aWNlLmZpZm8pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdG9zaGliYS5jIGIvZHJpdmVycy9jaGFyL3Rvc2hpYmEuYwppbmRleCA2NjNjZDE1ZC4uZjhiYzc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Rvc2hpYmEuYworKysgYi9kcml2ZXJzL2NoYXIvdG9zaGliYS5jCkBAIC02OCw3ICs2OCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotCisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC90b3NoaWJhLmg+CiAKICNkZWZpbmUgVE9TSF9NSU5PUl9ERVYgMTgxCkBAIC04OCwxMyArODgsMTMgQEAKIHN0YXRpYyBpbnQgdG9zaF9zY2k7CiBzdGF0aWMgaW50IHRvc2hfZmFuOwogCi1zdGF0aWMgaW50IHRvc2hfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKK3N0YXRpYyBsb25nIHRvc2hfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAogCXVuc2lnbmVkIGxvbmcpOwogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvc2hfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmlvY3RsCQk9IHRvc2hfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gdG9zaF9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB0b3NoX2RldmljZSA9IHsKQEAgLTI1Miw4ICsyNTIsNyBAQAogRVhQT1JUX1NZTUJPTCh0b3NoX3NtbSk7CiAKIAotc3RhdGljIGludCB0b3NoX2lvY3RsKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwKLQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHRvc2hfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlTTU1SZWdpc3RlcnMgcmVnczsKIAlTTU1SZWdpc3RlcnMgX191c2VyICphcmdwID0gKFNNTVJlZ2lzdGVycyBfX3VzZXIgKilhcmc7CkBAIC0yNzUsMTMgKzI3NCwxNiBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQkvKiBkbyB3ZSBuZWVkIHRvIGVtdWxhdGUgdGhlIGZhbiA/ICovCisJCQlsb2NrX2tlcm5lbCgpOwogCQkJaWYgKHRvc2hfZmFuPT0xKSB7CiAJCQkJaWYgKCgoYXg9PTB4ZjMwMCkgfHwgKGF4PT0weGY0MDApKSAmJiAoYng9PTB4MDAwNCkpIHsKIAkJCQkJZXJyID0gdG9zaF9lbXVsYXRlX2ZhbigmcmVncyk7CisJCQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQogCQkJZXJyID0gdG9zaF9zbW0oJnJlZ3MpOworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKaW5kZXggNjgxMDQ0My4uNzM2NTVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAKICNkZWZpbmUgQlVDS0VUUyAxMgogI2RlZmluZSBSRVNPTFVUSU9OIDEwMjQKQEAgLTE2OSw2ICsxNzAsMTIgQEAKIAogc3RhdGljIHZvaWQgbWVudV91cGRhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpOwogCisvKiBUaGlzIGltcGxlbWVudHMgRElWX1JPVU5EX0NMT1NFU1QgYnV0IGF2b2lkcyA2NCBiaXQgZGl2aXNpb24gKi8KK3N0YXRpYyB1NjQgZGl2X3JvdW5kNjQodTY0IGRpdmlkZW5kLCB1MzIgZGl2aXNvcikKK3sKKwlyZXR1cm4gZGl2X3U2NChkaXZpZGVuZCArIChkaXZpc29yIC8gMiksIGRpdmlzb3IpOworfQorCiAvKioKICAqIG1lbnVfc2VsZWN0IC0gc2VsZWN0cyB0aGUgbmV4dCBpZGxlIHN0YXRlIHRvIGVudGVyCiAgKiBAZGV2OiB0aGUgQ1BVCkBAIC0yMDksOSArMjE2LDggQEAKIAkJZGF0YS0+Y29ycmVjdGlvbl9mYWN0b3JbZGF0YS0+YnVja2V0XSA9IFJFU09MVVRJT04gKiBERUNBWTsKIAogCS8qIE1ha2Ugc3VyZSB0byByb3VuZCB1cCBmb3IgaGFsZiBtaWNyb3NlY29uZHMgKi8KLQlkYXRhLT5wcmVkaWN0ZWRfdXMgPSBESVZfUk9VTkRfQ0xPU0VTVCgKLQkJZGF0YS0+ZXhwZWN0ZWRfdXMgKiBkYXRhLT5jb3JyZWN0aW9uX2ZhY3RvcltkYXRhLT5idWNrZXRdLAotCQlSRVNPTFVUSU9OICogREVDQVkpOworCWRhdGEtPnByZWRpY3RlZF91cyA9IGRpdl9yb3VuZDY0KGRhdGEtPmV4cGVjdGVkX3VzICogZGF0YS0+Y29ycmVjdGlvbl9mYWN0b3JbZGF0YS0+YnVja2V0XSwKKwkJCQkJIFJFU09MVVRJT04gKiBERUNBWSk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gZGVmYXVsdCB0byBDMSAoaGx0KSwgbm90IHRvIGJ1c3kgcG9sbGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYXRfaGRtYWMuYyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKaW5kZXggZjE1MTEyNS4uZWZjMWE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYXRfaGRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCkBAIC04MTUsNyArODE1LDcgQEAKIAlkZXZfdmRiZyhjaGFuMmRldihjaGFuKSwgImlzX3R4X2NvbXBsZXRlOiAlZCAoZCVkLCB1JWQpXG4iLAogCQkJY29va2llLCBkb25lID8gKmRvbmUgOiAwLCB1c2VkID8gKnVzZWQgOiAwKTsKIAotCXNwaW5fbG9ja19iaChhdGNoYW4tPmxvY2spOworCXNwaW5fbG9ja19iaCgmYXRjaGFuLT5sb2NrKTsKIAogCWxhc3RfY29tcGxldGUgPSBhdGNoYW4tPmNvbXBsZXRlZF9jb29raWU7CiAJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOwpAQCAtODMwLDcgKzgzMCw3IEBACiAJCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoYXRjaGFuLT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYXRjaGFuLT5sb2NrKTsKIAogCWlmIChkb25lKQogCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCmluZGV4IDRhOTljZDkuLmI1ZjJlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCisrKyBiL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jCkBAIC0xMjk0LDggKzEyOTQsOCBAQAogCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmYmFzZS0+ZG1hX3NsYXZlKTsKIAljb2g5MDEzMThfcG9vbF9kZXN0cm95KCZiYXNlLT5wb29sKTsKIAlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBiYXNlKTsKLQlrZnJlZShiYXNlKTsKIAlpb3VubWFwKGJhc2UtPnZpcnRiYXNlKTsKKwlrZnJlZShiYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2UtPnN0YXJ0LAogCQkJICAgcmVzb3VyY2Vfc2l6ZShwZGV2LT5yZXNvdXJjZSkpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCmluZGV4IDI4NWJlZDAuLmQyODM2OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYworKysgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKQEAgLTEyNzAsOCArMTI3MCw2IEBACiAJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAotCW1lbXNldChkdywgMCwgc2l6ZW9mICpkdyk7Ci0KIAlkdy0+cmVncyA9IGlvcmVtYXAoaW8tPnN0YXJ0LCBEV19SRUdMRU4pOwogCWlmICghZHctPnJlZ3MpIHsKIAkJZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jCmluZGV4IGM1MjRkMzYuLmRjYzRhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWEuYwpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIAlkbWEtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAlpZiAoIWRtYS0+Y2hhbmNudCkgewotCQlkZXZfZXJyKGRldiwgInplcm8gY2hhbm5lbHMgZGV0ZWN0ZWRcbiIpOworCQlkZXZfZXJyKGRldiwgImNoYW5uZWwgZW51bWVyYXRpb24gZXJyb3JcbiIpOwogCQlnb3RvIGVycl9zZXR1cF9pbnRlcnJ1cHRzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuaCBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmgKaW5kZXggNDVlZGRlOS4uYmJjM2U3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuaAorKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5oCkBAIC02MCw2ICs2MCw3IEBACiAgKiBAZGNhOiBkaXJlY3QgY2FjaGUgYWNjZXNzIGNvbnRleHQKICAqIEBpbnRyX3F1aXJrOiBpbnRlcnJ1cHQgc2V0dXAgcXVpcmsgKGZvciBpb2F0X3YxIGRldmljZXMpCiAgKiBAZW51bWVyYXRlX2NoYW5uZWxzOiBodyB2ZXJzaW9uIHNwZWNpZmljIGNoYW5uZWwgZW51bWVyYXRpb24KKyAqIEByZXNldF9odzogaHcgdmVyc2lvbiBzcGVjaWZpYyBjaGFubmVsIChyZSlpbml0aWFsaXphdGlvbgogICogQGNsZWFudXBfdGFza2xldDogc2VsZWN0IGJldHdlZW4gdGhlIHYyIGFuZCB2MyBjbGVhbnVwIHJvdXRpbmVzCiAgKiBAdGltZXJfZm46IHNlbGVjdCBiZXR3ZWVuIHRoZSB2MiBhbmQgdjMgdGltZXIgd2F0Y2hkb2cgcm91dGluZXMKICAqIEBzZWxmX3Rlc3Q6IGhhcmR3YXJlIHZlcnNpb24gc3BlY2lmaWMgc2VsZiB0ZXN0IGZvciBlYWNoIHN1cHBvcnRlZCBvcCB0eXBlCkBAIC03OCw2ICs3OSw3IEBACiAJc3RydWN0IGRjYV9wcm92aWRlciAqZGNhOwogCXZvaWQgKCppbnRyX3F1aXJrKShzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSk7CiAJaW50ICgqZW51bWVyYXRlX2NoYW5uZWxzKShzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSk7CisJaW50ICgqcmVzZXRfaHcpKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuKTsKIAl2b2lkICgqY2xlYW51cF90YXNrbGV0KSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCXZvaWQgKCp0aW1lcl9mbikodW5zaWduZWQgbG9uZyBkYXRhKTsKIAlpbnQgKCpzZWxmX3Rlc3QpKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlKTsKQEAgLTI2NCw2ICsyNjYsMjIgQEAKIAl3cml0ZWIoSU9BVF9DSEFOQ01EX1NVU1BFTkQsIGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFOQ01EX09GRlNFVCh2ZXIpKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlvYXRfcmVzZXQoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4pCit7CisJdTggdmVyID0gY2hhbi0+ZGV2aWNlLT52ZXJzaW9uOworCisJd3JpdGViKElPQVRfQ0hBTkNNRF9SRVNFVCwgY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5DTURfT0ZGU0VUKHZlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaW9hdF9yZXNldF9wZW5kaW5nKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuKQoreworCXU4IHZlciA9IGNoYW4tPmRldmljZS0+dmVyc2lvbjsKKwl1OCBjbWQ7CisKKwljbWQgPSByZWFkYihjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkNNRF9PRkZTRVQodmVyKSk7CisJcmV0dXJuIChjbWQgJiBJT0FUX0NIQU5DTURfUkVTRVQpID09IElPQVRfQ0hBTkNNRF9SRVNFVDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGlvYXRfc2V0X2NoYWluYWRkcihzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdCwgdTY0IGFkZHIpCiB7CiAJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCmluZGV4IDhmMWY3ZjAuLjVmN2E1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwpAQCAtMjM5LDIwICsyMzksNTAgQEAKIAkJX19pb2F0Ml9zdGFydF9udWxsX2Rlc2MoaW9hdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXQyX3Jlc3RhcnRfY2hhbm5lbChzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpCitpbnQgaW9hdDJfcXVpZXNjZShzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgdW5zaWduZWQgbG9uZyB0bW8pCiB7Ci0Jc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKLQl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgdG1vOworCWludCBlcnIgPSAwOwogCXUzMiBzdGF0dXM7CiAKIAlzdGF0dXMgPSBpb2F0X2NoYW5zdHMoY2hhbik7CiAJaWYgKGlzX2lvYXRfYWN0aXZlKHN0YXR1cykgfHwgaXNfaW9hdF9pZGxlKHN0YXR1cykpCiAJCWlvYXRfc3VzcGVuZChjaGFuKTsKIAl3aGlsZSAoaXNfaW9hdF9hY3RpdmUoc3RhdHVzKSB8fCBpc19pb2F0X2lkbGUoc3RhdHVzKSkgeworCQlpZiAoZW5kICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgeworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CiAJCXN0YXR1cyA9IGlvYXRfY2hhbnN0cyhjaGFuKTsKIAkJY3B1X3JlbGF4KCk7CiAJfQogCisJcmV0dXJuIGVycjsKK30KKworaW50IGlvYXQyX3Jlc2V0X3N5bmMoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4sIHVuc2lnbmVkIGxvbmcgdG1vKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIHRtbzsKKwlpbnQgZXJyID0gMDsKKworCWlvYXRfcmVzZXQoY2hhbik7CisJd2hpbGUgKGlvYXRfcmVzZXRfcGVuZGluZyhjaGFuKSkgeworCQlpZiAoZW5kICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgeworCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9yZWxheCgpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGlvYXQyX3Jlc3RhcnRfY2hhbm5lbChzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpCit7CisJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CisKKwlpb2F0Ml9xdWllc2NlKGNoYW4sIDApOwogCWlmIChpb2F0X2NsZWFudXBfcHJlYW1ibGUoY2hhbiwgJnBoeXNfY29tcGxldGUpKQogCQlfX2NsZWFudXAoaW9hdCwgcGh5c19jb21wbGV0ZSk7CiAKQEAgLTMxOCw2ICszNDgsMTkgQEAKIAlzcGluX3VubG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKIH0KIAorc3RhdGljIGludCBpb2F0Ml9yZXNldF9odyhzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbikKK3sKKwkvKiB0aHJvdyBhd2F5IHdoYXRldmVyIHRoZSBjaGFubmVsIHdhcyBkb2luZyBhbmQgZ2V0IGl0IGluaXRpYWxpemVkICovCisJdTMyIGNoYW5lcnI7CisKKwlpb2F0Ml9xdWllc2NlKGNoYW4sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisKKwljaGFuZXJyID0gcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKwl3cml0ZWwoY2hhbmVyciwgY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKworCXJldHVybiBpb2F0Ml9yZXNldF9zeW5jKGNoYW4sIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSk7Cit9CisKIC8qKgogICogaW9hdDJfZW51bWVyYXRlX2NoYW5uZWxzIC0gZmluZCBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlJ3MgY2hhbm5lbHMKICAqIEBkZXZpY2U6IHRoZSBkZXZpY2UgdG8gYmUgZW51bWVyYXRlZApAQCAtMzYwLDYgKzQwMywxMCBAQAogCQkJCSAgKHVuc2lnbmVkIGxvbmcpIGlvYXQpOwogCQlpb2F0LT54ZmVyY2FwX2xvZyA9IHhmZXJjYXBfbG9nOwogCQlzcGluX2xvY2tfaW5pdCgmaW9hdC0+cmluZ19sb2NrKTsKKwkJaWYgKGRldmljZS0+cmVzZXRfaHcoJmlvYXQtPmJhc2UpKSB7CisJCQlpID0gMDsKKwkJCWJyZWFrOworCQl9CiAJfQogCWRtYS0+Y2hhbmNudCA9IGk7CiAJcmV0dXJuIGk7CkBAIC00NjcsNyArNTE0LDYgQEAKIAlzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQgPSB0b19pb2F0Ml9jaGFuKGMpOwogCXN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuID0gJmlvYXQtPmJhc2U7CiAJc3RydWN0IGlvYXRfcmluZ19lbnQgKipyaW5nOwotCXUzMiBjaGFuZXJyOwogCWludCBvcmRlcjsKIAogCS8qIGhhdmUgd2UgYWxyZWFkeSBiZWVuIHNldCB1cD8gKi8KQEAgLTQ3NywxMiArNTIzLDYgQEAKIAkvKiBTZXR1cCByZWdpc3RlciB0byBpbnRlcnJ1cHQgYW5kIHdyaXRlIGNvbXBsZXRpb24gc3RhdHVzIG9uIGVycm9yICovCiAJd3JpdGV3KElPQVRfQ0hBTkNUUkxfUlVOLCBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkNUUkxfT0ZGU0VUKTsKIAotCWNoYW5lcnIgPSByZWFkbChjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOwotCWlmIChjaGFuZXJyKSB7Ci0JCWRldl9lcnIodG9fZGV2KGNoYW4pLCAiQ0hBTkVSUiA9ICV4LCBjbGVhcmluZ1xuIiwgY2hhbmVycik7Ci0JCXdyaXRlbChjaGFuZXJyLCBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOwotCX0KLQogCS8qIGFsbG9jYXRlIGEgY29tcGxldGlvbiB3cml0ZWJhY2sgYXJlYSAqLwogCS8qIGRvaW5nIDIgMzJiaXQgd3JpdGVzIHRvIG1taW8gc2luY2UgMSA2NGIgd3JpdGUgZG9lc24ndCB3b3JrICovCiAJY2hhbi0+Y29tcGxldGlvbiA9IHBjaV9wb29sX2FsbG9jKGNoYW4tPmRldmljZS0+Y29tcGxldGlvbl9wb29sLApAQCAtNzQ2LDEzICs3ODYsNyBAQAogCXRhc2tsZXRfZGlzYWJsZSgmY2hhbi0+Y2xlYW51cF90YXNrKTsKIAlkZWxfdGltZXJfc3luYygmY2hhbi0+dGltZXIpOwogCWRldmljZS0+Y2xlYW51cF90YXNrbGV0KCh1bnNpZ25lZCBsb25nKSBpb2F0KTsKLQotCS8qIERlbGF5IDEwMG1zIGFmdGVyIHJlc2V0IHRvIGFsbG93IGludGVybmFsIERNQSBsb2dpYyB0byBxdWllc2NlCi0JICogYmVmb3JlIHJlbW92aW5nIERNQSBkZXNjcmlwdG9yIHJlc291cmNlcy4KLQkgKi8KLQl3cml0ZWIoSU9BVF9DSEFOQ01EX1JFU0VULAotCSAgICAgICBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkNNRF9PRkZTRVQoY2hhbi0+ZGV2aWNlLT52ZXJzaW9uKSk7Ci0JbWRlbGF5KDEwMCk7CisJZGV2aWNlLT5yZXNldF9odyhjaGFuKTsKIAogCXNwaW5fbG9ja19iaCgmaW9hdC0+cmluZ19sb2NrKTsKIAlkZXNjcyA9IGlvYXQyX3Jpbmdfc3BhY2UoaW9hdCk7CkBAIC04MzksNiArODczLDcgQEAKIAlpbnQgZXJyOwogCiAJZGV2aWNlLT5lbnVtZXJhdGVfY2hhbm5lbHMgPSBpb2F0Ml9lbnVtZXJhdGVfY2hhbm5lbHM7CisJZGV2aWNlLT5yZXNldF9odyA9IGlvYXQyX3Jlc2V0X2h3OwogCWRldmljZS0+Y2xlYW51cF90YXNrbGV0ID0gaW9hdDJfY2xlYW51cF90YXNrbGV0OwogCWRldmljZS0+dGltZXJfZm4gPSBpb2F0Ml90aW1lcl9ldmVudDsKIAlkZXZpY2UtPnNlbGZfdGVzdCA9IGlvYXRfZG1hX3NlbGZfdGVzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmggYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5oCmluZGV4IDFkODQ5ZWYuLjNhZmFkOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuaApAQCAtMTg1LDYgKzE4NSw4IEBACiB2b2lkIF9faW9hdDJfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpOwogdm9pZCBpb2F0Ml9jbGVhbnVwX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgaW9hdDJfdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKTsKK2ludCBpb2F0Ml9xdWllc2NlKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuLCB1bnNpZ25lZCBsb25nIHRtbyk7CitpbnQgaW9hdDJfcmVzZXRfc3luYyhzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgdW5zaWduZWQgbG9uZyB0bW8pOwogZXh0ZXJuIHN0cnVjdCBrb2JqX3R5cGUgaW9hdDJfa3R5cGU7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmlvYXQyX2NhY2hlOwogI2VuZGlmIC8qIElPQVRETUFfVjJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKaW5kZXggNDJmNmYxMC4uOTkwOGM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCkBAIC02NTAsOSArNjUwLDExIEBACiAKIAludW1fZGVzY3MgPSBpb2F0Ml94ZmVybGVuX3RvX2Rlc2NzKGlvYXQsIGxlbik7CiAJLyogd2UgbmVlZCAyeCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGNvdmVyIGdyZWF0ZXIgdGhhbiAzCi0JICogc291cmNlcworCSAqIHNvdXJjZXMgKHdlIG5lZWQgMSBleHRyYSBzb3VyY2UgaW4gdGhlIHEtb25seSBjb250aW51YXRpb24KKwkgKiBjYXNlIGFuZCAzIGV4dHJhIHNvdXJjZXMgaW4gdGhlIHArcSBjb250aW51YXRpb24gY2FzZS4KIAkgKi8KLQlpZiAoc3JjX2NudCA+IDMgfHwgZmxhZ3MgJiBETUFfUFJFUF9DT05USU5VRSkgeworCWlmIChzcmNfY250ICsgZG1hZl9wX2Rpc2FibGVkX2NvbnRpbnVlKGZsYWdzKSA+IDMgfHwKKwkgICAgKGRtYWZfY29udGludWUoZmxhZ3MpICYmICFkbWFmX3BfZGlzYWJsZWRfY29udGludWUoZmxhZ3MpKSkgewogCQl3aXRoX2V4dCA9IDE7CiAJCW51bV9kZXNjcyAqPSAyOwogCX0gZWxzZQpAQCAtMTEyOCw2ICsxMTMwLDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaW9hdDNfcmVzZXRfaHcoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4pCit7CisJLyogdGhyb3cgYXdheSB3aGF0ZXZlciB0aGUgY2hhbm5lbCB3YXMgZG9pbmcgYW5kIGdldCBpdAorCSAqIGluaXRpYWxpemVkLCB3aXRoIGlvYXQzIHNwZWNpZmljIHdvcmthcm91bmRzCisJICovCisJc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UgPSBjaGFuLT5kZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZpY2UtPnBkZXY7CisJdTMyIGNoYW5lcnI7CisJdTE2IGRldl9pZDsKKwlpbnQgZXJyOworCisJaW9hdDJfcXVpZXNjZShjaGFuLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCisJY2hhbmVyciA9IHJlYWRsKGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFORVJSX09GRlNFVCk7CisJd3JpdGVsKGNoYW5lcnIsIGNoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFORVJSX09GRlNFVCk7CisKKwkvKiAtPSBJT0FUIHZlci4zIHdvcmthcm91bmRzID0tICovCisJLyogV3JpdGUgQ0hBTkVSUk1TS19JTlQgd2l0aCAzRTA3aCB0byBtYXNrIG91dCB0aGUgZXJyb3JzCisJICogdGhhdCBjYW4gY2F1c2Ugc3RhYmlsaXR5IGlzc3VlcyBmb3IgSU9BVCB2ZXIuMywgYW5kIGNsZWFyIGFueQorCSAqIHBlbmRpbmcgZXJyb3JzCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBJT0FUX1BDSV9DSEFORVJSTUFTS19JTlRfT0ZGU0VULCAweDNlMDcpOworCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBJT0FUX1BDSV9DSEFORVJSX0lOVF9PRkZTRVQsICZjaGFuZXJyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNoYW5uZWwgZXJyb3IgcmVnaXN0ZXIgdW5yZWFjaGFibGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIElPQVRfUENJX0NIQU5FUlJfSU5UX09GRlNFVCwgY2hhbmVycik7CisKKwkvKiBDbGVhciBETUFVTkNFUlJTVFMgQ2ZnLVJlZyBQYXJpdHkgRXJyb3Igc3RhdHVzIGJpdAorCSAqICh3b3JrYXJvdW5kIGZvciBzcHVyaW91cyBjb25maWcgcGFyaXR5IGVycm9yIGFmdGVyIHJlc3RhcnQpCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgSU9BVF9QQ0lfREVWSUNFX0lEX09GRlNFVCwgJmRldl9pZCk7CisJaWYgKGRldl9pZCA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfVEJHMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBJT0FUX1BDSV9ETUFVTkNFUlJTVFNfT0ZGU0VULCAweDEwKTsKKworCXJldHVybiBpb2F0Ml9yZXNldF9zeW5jKGNoYW4sIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSk7Cit9CisKIGludCBfX2RldmluaXQgaW9hdDNfZG1hX3Byb2JlKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlLCBpbnQgZGNhKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2aWNlLT5wZGV2OwpAQCAtMTEzNywxMCArMTE3OCwxMCBAQAogCXN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuOwogCWJvb2wgaXNfcmFpZF9kZXZpY2UgPSBmYWxzZTsKIAlpbnQgZXJyOwotCXUxNiBkZXZfaWQ7CiAJdTMyIGNhcDsKIAogCWRldmljZS0+ZW51bWVyYXRlX2NoYW5uZWxzID0gaW9hdDJfZW51bWVyYXRlX2NoYW5uZWxzOworCWRldmljZS0+cmVzZXRfaHcgPSBpb2F0M19yZXNldF9odzsKIAlkZXZpY2UtPnNlbGZfdGVzdCA9IGlvYXQzX2RtYV9zZWxmX3Rlc3Q7CiAJZG1hID0gJmRldmljZS0+Y29tbW9uOwogCWRtYS0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IGlvYXQyX2RtYV9wcmVwX21lbWNweV9sb2NrOwpAQCAtMTIxNiwxOSArMTI1Nyw2IEBACiAJZG1hLT5kZXZpY2VfcHJlcF9kbWFfeG9yX3ZhbCA9IE5VTEw7CiAJI2VuZGlmCiAKLQkvKiAtPSBJT0FUIHZlci4zIHdvcmthcm91bmRzID0tICovCi0JLyogV3JpdGUgQ0hBTkVSUk1TS19JTlQgd2l0aCAzRTA3aCB0byBtYXNrIG91dCB0aGUgZXJyb3JzCi0JICogdGhhdCBjYW4gY2F1c2Ugc3RhYmlsaXR5IGlzc3VlcyBmb3IgSU9BVCB2ZXIuMwotCSAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgSU9BVF9QQ0lfQ0hBTkVSUk1BU0tfSU5UX09GRlNFVCwgMHgzZTA3KTsKLQotCS8qIENsZWFyIERNQVVOQ0VSUlNUUyBDZmctUmVnIFBhcml0eSBFcnJvciBzdGF0dXMgYml0Ci0JICogKHdvcmthcm91bmQgZm9yIHNwdXJpb3VzIGNvbmZpZyBwYXJpdHkgZXJyb3IgYWZ0ZXIgcmVzdGFydCkKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJT0FUX1BDSV9ERVZJQ0VfSURfT0ZGU0VULCAmZGV2X2lkKTsKLQlpZiAoZGV2X2lkID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9UQkcwKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIElPQVRfUENJX0RNQVVOQ0VSUlNUU19PRkZTRVQsIDB4MTApOwotCiAJZXJyID0gaW9hdF9wcm9iZShkZXZpY2UpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdC9yZWdpc3RlcnMuaAppbmRleCBmMDE1ZWMxLi5lOGFlNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvcmVnaXN0ZXJzLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2RlZmluZSBJT0FUX1BDSV9ERVZJQ0VfSURfT0ZGU0VUCQkweDAyCiAjZGVmaW5lIElPQVRfUENJX0RNQVVOQ0VSUlNUU19PRkZTRVQJCTB4MTQ4CisjZGVmaW5lIElPQVRfUENJX0NIQU5FUlJfSU5UX09GRlNFVAkJMHgxODAKICNkZWZpbmUgSU9BVF9QQ0lfQ0hBTkVSUk1BU0tfSU5UX09GRlNFVAkJMHgxODQKIAogLyogTU1JTyBEZXZpY2UgUmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCAyZTRhNTRjLi5kMTBjYzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTIzLDE2ICsyMywxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8Y3B1L2RtYS5oPgogI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlICJzaGRtYS5oIgogCiAvKiBETUEgZGVzY3JpcHRvciBjb250cm9sICovCi0jZGVmaW5lIERFU0NfTEFTVAkoLTEpCi0jZGVmaW5lIERFU0NfQ09NUAkoMSkKLSNkZWZpbmUgREVTQ19OQ09NUAkoMCkKK2VudW0gc2hfZG1hZV9kZXNjX3N0YXR1cyB7CisJREVTQ19JRExFLAorCURFU0NfUFJFUEFSRUQsCisJREVTQ19TVUJNSVRURUQsCisJREVTQ19DT01QTEVURUQsCS8qIGNvbXBsZXRlZCwgaGF2ZSB0byBjYWxsIGNhbGxiYWNrICovCisJREVTQ19XQUlUSU5HLAkvKiBjYWxsYmFjayBjYWxsZWQsIHdhaXRpbmcgZm9yIGFjayAvIHJlLXN1Ym1pdCAqLworfTsKIAogI2RlZmluZSBOUl9ERVNDU19QRVJfQ0hBTk5FTCAzMgogLyoKQEAgLTQ1LDYgKzQ4LDggQEAKICAqLwogI2RlZmluZSBSU19ERUZBVUxUICAoUlNfRFVBTCkKIAorc3RhdGljIHZvaWQgc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpOworCiAjZGVmaW5lIFNIX0RNQUNfQ0hBTl9CQVNFKGlkKSAoZG1hX2Jhc2VfYWRkcltpZF0pCiBzdGF0aWMgdm9pZCBzaF9kbWFlX3dyaXRlbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIGRhdGEsIHUzMiByZWcpCiB7CkBAIC0xMDYsMTEgKzExMSwxMSBAQAogCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSykgPj4gQ0hDUl9UU19TSElGVF07CiB9CiAKLXN0YXRpYyB2b2lkIGRtYWVfc2V0X3JlZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3KQorc3RhdGljIHZvaWQgZG1hZV9zZXRfcmVnKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHN0cnVjdCBzaF9kbWFlX3JlZ3MgKmh3KQogewotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LnNhciwgU0FSKTsKLQlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHcudGNyID4+IGNhbGNfeG1pdF9zaGlmdChzaF9jaGFuKSwgVENSKTsKKwlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+c2FyLCBTQVIpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5kYXIsIERBUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc3RhcnQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKQEAgLTE4NCw4ICsxODksOSBAQAogCiBzdGF0aWMgZG1hX2Nvb2tpZV90IHNoX2RtYWVfdHhfc3VibWl0KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7Ci0Jc3RydWN0IHNoX2Rlc2MgKmRlc2MgPSB0eF90b19zaF9kZXNjKHR4KTsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYyA9IHR4X3RvX3NoX2Rlc2ModHgpLCAqY2h1bmssICpsYXN0ID0gZGVzYywgKmM7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4odHgtPmNoYW4pOworCWRtYV9hc3luY190eF9jYWxsYmFjayBjYWxsYmFjayA9IHR4LT5jYWxsYmFjazsKIAlkbWFfY29va2llX3QgY29va2llOwogCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwpAQCAtMTk1LDQ1ICsyMDEsNTMgQEAKIAlpZiAoY29va2llIDwgMCkKIAkJY29va2llID0gMTsKIAotCS8qIElmIGRlc2Mgb25seSBpbiB0aGUgY2FzZSBvZiAxICovCi0JaWYgKGRlc2MtPmFzeW5jX3R4LmNvb2tpZSAhPSAtRUJVU1kpCi0JCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IGNvb2tpZTsKLQlzaF9jaGFuLT5jb21tb24uY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llOworCXNoX2NoYW4tPmNvbW1vbi5jb29raWUgPSBjb29raWU7CisJdHgtPmNvb2tpZSA9IGNvb2tpZTsKIAotCWxpc3Rfc3BsaWNlX2luaXQoJmRlc2MtPnR4X2xpc3QsIHNoX2NoYW4tPmxkX3F1ZXVlLnByZXYpOworCS8qIE1hcmsgYWxsIGNodW5rcyBvZiB0aGlzIGRlc2NyaXB0b3IgYXMgc3VibWl0dGVkLCBtb3ZlIHRvIHRoZSBxdWV1ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgYywgZGVzYy0+bm9kZS5wcmV2LCBub2RlKSB7CisJCS8qCisJCSAqIEFsbCBjaHVua3MgYXJlIG9uIHRoZSBnbG9iYWwgbGRfZnJlZSwgc28sIHdlIGhhdmUgdG8gZmluZAorCQkgKiB0aGUgZW5kIG9mIHRoZSBjaGFpbiBvdXJzZWx2ZXMKKwkJICovCisJCWlmIChjaHVuayAhPSBkZXNjICYmIChjaHVuay0+bWFyayA9PSBERVNDX0lETEUgfHwKKwkJCQkgICAgICBjaHVuay0+YXN5bmNfdHguY29va2llID4gMCB8fAorCQkJCSAgICAgIGNodW5rLT5hc3luY190eC5jb29raWUgPT0gLUVCVVNZIHx8CisJCQkJICAgICAgJmNodW5rLT5ub2RlID09ICZzaF9jaGFuLT5sZF9mcmVlKSkKKwkJCWJyZWFrOworCQljaHVuay0+bWFyayA9IERFU0NfU1VCTUlUVEVEOworCQkvKiBDYWxsYmFjayBnb2VzIHRvIHRoZSBsYXN0IGNodW5rICovCisJCWNodW5rLT5hc3luY190eC5jYWxsYmFjayA9IE5VTEw7CisJCWNodW5rLT5jb29raWUgPSBjb29raWU7CisJCWxpc3RfbW92ZV90YWlsKCZjaHVuay0+bm9kZSwgJnNoX2NoYW4tPmxkX3F1ZXVlKTsKKwkJbGFzdCA9IGNodW5rOworCX0KKworCWxhc3QtPmFzeW5jX3R4LmNhbGxiYWNrID0gY2FsbGJhY2s7CisJbGFzdC0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW0gPSB0eC0+Y2FsbGJhY2tfcGFyYW07CisKKwlkZXZfZGJnKHNoX2NoYW4tPmRldiwgInN1Ym1pdCAjJWRAJXAgb24gJWQ6ICV4WyVkXSAtPiAleFxuIiwKKwkJdHgtPmNvb2tpZSwgJmxhc3QtPmFzeW5jX3R4LCBzaF9jaGFuLT5pZCwKKwkJZGVzYy0+aHcuc2FyLCBkZXNjLT5ody50Y3IsIGRlc2MtPmh3LmRhcik7CiAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiBjb29raWU7CiB9CiAKKy8qIENhbGxlZCB3aXRoIGRlc2NfbG9jayBoZWxkICovCiBzdGF0aWMgc3RydWN0IHNoX2Rlc2MgKnNoX2RtYWVfZ2V0X2Rlc2Moc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKIHsKLQlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYywgKl9kZXNjLCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKIAotCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZzaF9jaGFuLT5sZF9mcmVlLCBub2RlKSB7Ci0JCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmc2hfY2hhbi0+bGRfZnJlZSwgbm9kZSkKKwkJaWYgKGRlc2MtPm1hcmsgIT0gREVTQ19QUkVQQVJFRCkgeworCQkJQlVHX09OKGRlc2MtPm1hcmsgIT0gREVTQ19JRExFKTsKIAkJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKLQkJCXJldCA9IGRlc2M7Ci0JCQlicmVhazsKKwkJCXJldHVybiBkZXNjOwogCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgc2hfZG1hZV9wdXRfZGVzYyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZGVzYyAqZGVzYykKLXsKLQlpZiAoZGVzYykgewotCQlzcGluX2xvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7Ci0KLQkJbGlzdF9zcGxpY2VfaW5pdCgmZGVzYy0+dHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOwotCQlsaXN0X2FkZCgmZGVzYy0+bm9kZSwgJnNoX2NoYW4tPmxkX2ZyZWUpOwotCi0JCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwotCX0KKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKQEAgLTI1MiwxMSArMjY2LDEwIEBACiAJCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmRlc2MtPmFzeW5jX3R4LAogCQkJCQkmc2hfY2hhbi0+Y29tbW9uKTsKIAkJZGVzYy0+YXN5bmNfdHgudHhfc3VibWl0ID0gc2hfZG1hZV90eF9zdWJtaXQ7Ci0JCWRlc2MtPmFzeW5jX3R4LmZsYWdzID0gRE1BX0NUUkxfQUNLOwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+dHhfbGlzdCk7Ci0JCXNoX2RtYWVfcHV0X2Rlc2Moc2hfY2hhbiwgZGVzYyk7CisJCWRlc2MtPm1hcmsgPSBERVNDX0lETEU7CiAKIAkJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCQlsaXN0X2FkZCgmZGVzYy0+bm9kZSwgJnNoX2NoYW4tPmxkX2ZyZWUpOwogCQlzaF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQrKzsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CkBAIC0yNzMsNyArMjg2LDEwIEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnNoX2NoYW4tPmxkX3F1ZXVlKSk7CisJLyogUHJlcGFyZWQgYW5kIG5vdCBzdWJtaXR0ZWQgZGVzY3JpcHRvcnMgY2FuIHN0aWxsIGJlIG9uIHRoZSBxdWV1ZSAqLworCWlmICghbGlzdF9lbXB0eSgmc2hfY2hhbi0+bGRfcXVldWUpKQorCQlzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzaF9jaGFuLCB0cnVlKTsKKwogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCWxpc3Rfc3BsaWNlX2luaXQoJnNoX2NoYW4tPmxkX2ZyZWUsICZsaXN0KTsKQEAgLTI5Miw2ICszMDgsOCBAQAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW47CiAJc3RydWN0IHNoX2Rlc2MgKmZpcnN0ID0gTlVMTCwgKnByZXYgPSBOVUxMLCAqbmV3OwogCXNpemVfdCBjb3B5X3NpemU7CisJTElTVF9IRUFEKHR4X2xpc3QpOworCWludCBjaHVua3MgPSAobGVuICsgU0hfRE1BX1RDUl9NQVgpIC8gKFNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAlpZiAoIWNoYW4pCiAJCXJldHVybiBOVUxMOwpAQCAtMzAxLDEwOCArMzE5LDE4OSBAQAogCiAJc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAKKwkvKiBIYXZlIHRvIGxvY2sgdGhlIHdob2xlIGxvb3AgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgcmVsZWFzZSAqLworCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKworCS8qCisJICogQ2hhaW5pbmc6CisJICogZmlyc3QgZGVzY3JpcHRvciBpcyB3aGF0IHVzZXIgaXMgZGVhbGluZyB3aXRoIGluIGFsbCBBUEkgY2FsbHMsIGl0cworCSAqCWNvb2tpZSBpcyBhdCBmaXJzdCBzZXQgdG8gLUVCVVNZLCBhdCB0eC1zdWJtaXQgdG8gYSBwb3NpdGl2ZQorCSAqCW51bWJlcgorCSAqIGlmIG1vcmUgdGhhbiBvbmUgY2h1bmsgaXMgbmVlZGVkIGZ1cnRoZXIgY2h1bmtzIGhhdmUgY29va2llID0gLUVJTlZBTAorCSAqIHRoZSBsYXN0IGNodW5rLCBpZiBub3QgZXF1YWwgdG8gdGhlIGZpcnN0LCBoYXMgY29va2llID0gLUVOT1NQQworCSAqIGFsbCBjaHVua3MgYXJlIGxpbmtlZCBvbnRvIHRoZSB0eF9saXN0IGhlYWQgd2l0aCB0aGVpciAubm9kZSBoZWFkcworCSAqCW9ubHkgZHVyaW5nIHRoaXMgZnVuY3Rpb24sIHRoZW4gdGhleSBhcmUgaW1tZWRpYXRlbHkgc3BsaWNlZAorCSAqCWJhY2sgb250byB0aGUgZnJlZSBsaXN0IGluIGZvcm0gb2YgYSBjaGFpbgorCSAqLwogCWRvIHsKLQkJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIERNQSBwb29sICovCisJCS8qIEFsbG9jYXRlIHRoZSBsaW5rIGRlc2NyaXB0b3IgZnJvbSB0aGUgZnJlZSBsaXN0ICovCiAJCW5ldyA9IHNoX2RtYWVfZ2V0X2Rlc2Moc2hfY2hhbik7CiAJCWlmICghbmV3KSB7CiAJCQlkZXZfZXJyKHNoX2NoYW4tPmRldiwKIAkJCQkiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7Ci0JCQlnb3RvIGVycl9nZXRfZGVzYzsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV3LCAmdHhfbGlzdCwgbm9kZSkKKwkJCQluZXctPm1hcmsgPSBERVNDX0lETEU7CisJCQlsaXN0X3NwbGljZSgmdHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOworCQkJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCWNvcHlfc2l6ZSA9IG1pbihsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVgpOworCQljb3B5X3NpemUgPSBtaW4obGVuLCAoc2l6ZV90KVNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAkJbmV3LT5ody5zYXIgPSBkbWFfc3JjOwogCQluZXctPmh3LmRhciA9IGRtYV9kZXN0OwogCQluZXctPmh3LnRjciA9IGNvcHlfc2l6ZTsKLQkJaWYgKCFmaXJzdCkKKwkJaWYgKCFmaXJzdCkgeworCQkJLyogRmlyc3QgZGVzYyAqLworCQkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUJVU1k7CiAJCQlmaXJzdCA9IG5ldzsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyIGRlc2MgLSBpbnZpc2libGUgdG8gdGhlIHVzZXIgKi8KKwkJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVJTlZBTDsKKwkJfQogCi0JCW5ldy0+bWFyayA9IERFU0NfTkNPTVA7Ci0JCWFzeW5jX3R4X2FjaygmbmV3LT5hc3luY190eCk7CisJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkJImNoYWluaW5nICV1IG9mICV1IHdpdGggJXAsIGRzdCAleCwgY29va2llICVkXG4iLAorCQkJY29weV9zaXplLCBsZW4sICZuZXctPmFzeW5jX3R4LCBkbWFfZGVzdCwKKwkJCW5ldy0+YXN5bmNfdHguY29va2llKTsKKworCQluZXctPm1hcmsgPSBERVNDX1BSRVBBUkVEOworCQluZXctPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJCW5ldy0+Y2h1bmtzID0gY2h1bmtzLS07CiAKIAkJcHJldiA9IG5ldzsKIAkJbGVuIC09IGNvcHlfc2l6ZTsKIAkJZG1hX3NyYyArPSBjb3B5X3NpemU7CiAJCWRtYV9kZXN0ICs9IGNvcHlfc2l6ZTsKIAkJLyogSW5zZXJ0IHRoZSBsaW5rIGRlc2NyaXB0b3IgdG8gdGhlIExEIHJpbmcgKi8KLQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5ub2RlLCAmZmlyc3QtPnR4X2xpc3QpOworCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZ0eF9saXN0KTsKIAl9IHdoaWxlIChsZW4pOwogCi0JbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLwotCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOyAvKiBMYXN0IGRlc2MgKi8KKwlpZiAobmV3ICE9IGZpcnN0KQorCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FTk9TUEM7CisKKwkvKiBQdXQgdGhlbSBiYWNrIG9uIHRoZSBmcmVlIGxpc3QsIHNvLCB0aGV5IGRvbid0IGdldCBsb3N0ICovCisJbGlzdF9zcGxpY2VfdGFpbCgmdHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOworCisJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKIAlyZXR1cm4gJmZpcnN0LT5hc3luY190eDsKK30KIAotZXJyX2dldF9kZXNjOgotCXNoX2RtYWVfcHV0X2Rlc2Moc2hfY2hhbiwgZmlyc3QpOwotCXJldHVybiBOVUxMOworc3RhdGljIGRtYV9hc3luY190eF9jYWxsYmFjayBfX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpCit7CisJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKKwkvKiBJcyB0aGUgImV4cG9zZWQiIGhlYWQgb2YgYSBjaGFpbiBhY2tlZD8gKi8KKwlib29sIGhlYWRfYWNrZWQgPSBmYWxzZTsKKwlkbWFfY29va2llX3QgY29va2llID0gMDsKKwlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2sgPSBOVUxMOworCXZvaWQgKnBhcmFtID0gTlVMTDsKIAorCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgeworCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gJmRlc2MtPmFzeW5jX3R4OworCisJCUJVR19PTih0eC0+Y29va2llID4gMCAmJiB0eC0+Y29va2llICE9IGRlc2MtPmNvb2tpZSk7CisJCUJVR19PTihkZXNjLT5tYXJrICE9IERFU0NfU1VCTUlUVEVEICYmCisJCSAgICAgICBkZXNjLT5tYXJrICE9IERFU0NfQ09NUExFVEVEICYmCisJCSAgICAgICBkZXNjLT5tYXJrICE9IERFU0NfV0FJVElORyk7CisKKwkJLyoKKwkJICogcXVldWUgaXMgb3JkZXJlZCwgYW5kIHdlIHVzZSB0aGlzIGxvb3AgdG8gKDEpIGNsZWFuIHVwIGFsbAorCQkgKiBjb21wbGV0ZWQgZGVzY3JpcHRvcnMsIGFuZCB0byAoMikgdXBkYXRlIGRlc2NyaXB0b3IgZmxhZ3Mgb2YKKwkJICogYW55IGNodW5rcyBpbiBhIChwYXJ0aWFsbHkpIGNvbXBsZXRlZCBjaGFpbgorCQkgKi8KKwkJaWYgKCFhbGwgJiYgZGVzYy0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCAmJgorCQkgICAgZGVzYy0+Y29va2llICE9IGNvb2tpZSkKKwkJCWJyZWFrOworCisJCWlmICh0eC0+Y29va2llID4gMCkKKwkJCWNvb2tpZSA9IHR4LT5jb29raWU7CisKKwkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgZGVzYy0+Y2h1bmtzID09IDEpIHsKKwkJCUJVR19PTihzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICE9IGRlc2MtPmNvb2tpZSAtIDEpOworCQkJc2hfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9IGRlc2MtPmNvb2tpZTsKKwkJfQorCisJCS8qIENhbGwgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2h1bmsgKi8KKwkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgdHgtPmNhbGxiYWNrKSB7CisJCQlkZXNjLT5tYXJrID0gREVTQ19XQUlUSU5HOworCQkJY2FsbGJhY2sgPSB0eC0+Y2FsbGJhY2s7CisJCQlwYXJhbSA9IHR4LT5jYWxsYmFja19wYXJhbTsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiZGVzY3JpcHRvciAjJWRAJXAgb24gJWQgY2FsbGJhY2tcbiIsCisJCQkJdHgtPmNvb2tpZSwgdHgsIHNoX2NoYW4tPmlkKTsKKwkJCUJVR19PTihkZXNjLT5jaHVua3MgIT0gMSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0eC0+Y29va2llID4gMCB8fCB0eC0+Y29va2llID09IC1FQlVTWSkgeworCQkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQpIHsKKwkJCQlCVUdfT04odHgtPmNvb2tpZSA8IDApOworCQkJCWRlc2MtPm1hcmsgPSBERVNDX1dBSVRJTkc7CisJCQl9CisJCQloZWFkX2Fja2VkID0gYXN5bmNfdHhfdGVzdF9hY2sodHgpOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChkZXNjLT5tYXJrKSB7CisJCQljYXNlIERFU0NfQ09NUExFVEVEOgorCQkJCWRlc2MtPm1hcmsgPSBERVNDX1dBSVRJTkc7CisJCQkJLyogRmFsbCB0aHJvdWdoICovCisJCQljYXNlIERFU0NfV0FJVElORzoKKwkJCQlpZiAoaGVhZF9hY2tlZCkKKwkJCQkJYXN5bmNfdHhfYWNrKCZkZXNjLT5hc3luY190eCk7CisJCQl9CisJCX0KKworCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwgImRlc2NyaXB0b3IgJXAgIyVkIGNvbXBsZXRlZC5cbiIsCisJCQl0eCwgdHgtPmNvb2tpZSk7CisKKwkJaWYgKCgoZGVzYy0+bWFyayA9PSBERVNDX0NPTVBMRVRFRCB8fAorCQkgICAgICBkZXNjLT5tYXJrID09IERFU0NfV0FJVElORykgJiYKKwkJICAgICBhc3luY190eF90ZXN0X2FjaygmZGVzYy0+YXN5bmNfdHgpKSB8fCBhbGwpIHsKKwkJCS8qIFJlbW92ZSBmcm9tIGxkX3F1ZXVlIGxpc3QgKi8KKwkJCWRlc2MtPm1hcmsgPSBERVNDX0lETEU7CisJCQlsaXN0X21vdmUoJmRlc2MtPm5vZGUsICZzaF9jaGFuLT5sZF9mcmVlKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKworCWlmIChjYWxsYmFjaykKKwkJY2FsbGJhY2socGFyYW0pOworCisJcmV0dXJuIGNhbGxiYWNrOwogfQogCiAvKgogICogc2hfY2hhbl9sZF9jbGVhbnVwIC0gQ2xlYW4gdXAgbGluayBkZXNjcmlwdG9ycwogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2xlYW4gdXAgdGhlIGxkX3F1ZXVlIG9mIERNQSBjaGFubmVsLgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGxkX3F1ZXVlIG9mIERNQSBjaGFubmVsLgogICovCi1zdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIHZvaWQgc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpCiB7Ci0Jc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKLQotCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgewotCQlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2s7Ci0JCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwotCi0JCS8qIG5vbiBzZW5kIGRhdGEgKi8KLQkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19OQ09NUCkKLQkJCWJyZWFrOwotCi0JCS8qIHNlbmQgZGF0YSBzZXNjICovCi0JCWNhbGxiYWNrID0gZGVzYy0+YXN5bmNfdHguY2FsbGJhY2s7Ci0JCWNhbGxiYWNrX3BhcmFtID0gZGVzYy0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW07Ci0KLQkJLyogUmVtb3ZlIGZyb20gbGRfcXVldWUgbGlzdCAqLwotCQlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT50eF9saXN0LCAmc2hfY2hhbi0+bGRfZnJlZSk7Ci0KLQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJsaW5rIGRlc2NyaXB0b3IgJXAgd2lsbCBiZSByZWN5Y2xlLlxuIiwKLQkJCQlkZXNjKTsKLQotCQlsaXN0X21vdmUoJmRlc2MtPm5vZGUsICZzaF9jaGFuLT5sZF9mcmVlKTsKLQkJLyogUnVuIHRoZSBsaW5rIGRlc2NyaXB0b3IgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLQkJaWYgKGNhbGxiYWNrKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAibGluayBkZXNjcmlwdG9yICVwIGNhbGxiYWNrXG4iLAotCQkJCQlkZXNjKTsKLQkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKLQkJCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKwl3aGlsZSAoX19sZF9jbGVhbnVwKHNoX2NoYW4sIGFsbCkpCisJCTsKIH0KIAogc3RhdGljIHZvaWQgc2hfY2hhbl94ZmVyX2xkX3F1ZXVlKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGRfbm9kZTsKLQlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OworCXN0cnVjdCBzaF9kZXNjICpzZDsKIAorCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAkvKiBETUEgd29yayBjaGVjayAqLwotCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkgeworCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAkJcmV0dXJuOworCX0KIAogCS8qIEZpbmQgdGhlIGZpcnN0IHVuLXRyYW5zZmVyIGRlc2NpcHRvciAqLwotCWZvciAobGRfbm9kZSA9IHNoX2NoYW4tPmxkX3F1ZXVlLm5leHQ7Ci0JCShsZF9ub2RlICE9ICZzaF9jaGFuLT5sZF9xdWV1ZSkKLQkJCSYmICh0b19zaF9kZXNjKGxkX25vZGUpLT5tYXJrID09IERFU0NfQ09NUCk7Ci0JCWxkX25vZGUgPSBsZF9ub2RlLT5uZXh0KQotCQljcHVfcmVsYXgoKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmc2hfY2hhbi0+bGRfcXVldWUsIG5vZGUpCisJCWlmIChzZC0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCkgeworCQkJLyogR2V0IHRoZSBsZCBzdGFydCBhZGRyZXNzIGZyb20gbGRfcXVldWUgKi8KKwkJCWRtYWVfc2V0X3JlZyhzaF9jaGFuLCAmc2QtPmh3KTsKKwkJCWRtYWVfc3RhcnQoc2hfY2hhbik7CisJCQlicmVhazsKKwkJfQogCi0JaWYgKGxkX25vZGUgIT0gJnNoX2NoYW4tPmxkX3F1ZXVlKSB7Ci0JCS8qIEdldCB0aGUgbGQgc3RhcnQgYWRkcmVzcyBmcm9tIGxkX3F1ZXVlICovCi0JCWh3ID0gdG9fc2hfZGVzYyhsZF9ub2RlKS0+aHc7Ci0JCWRtYWVfc2V0X3JlZyhzaF9jaGFuLCBodyk7Ci0JCWRtYWVfc3RhcnQoc2hfY2hhbik7Ci0JfQorCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzaF9kbWFlX21lbWNweV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKQEAgLTQyMCwxMiArNTE5LDExIEBACiAJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKIAlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKIAotCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4pOworCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIGZhbHNlKTsKIAogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIAlsYXN0X2NvbXBsZXRlID0gc2hfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZTsKLQlpZiAobGFzdF9jb21wbGV0ZSA9PSAtRUJVU1kpCi0JCWxhc3RfY29tcGxldGUgPSBsYXN0X3VzZWQ7CisJQlVHX09OKGxhc3RfY29tcGxldGUgPCAwKTsKIAogCWlmIChkb25lKQogCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CkBAIC00ODAsMTEgKzU3OCwxMyBAQAogCQllcnIgPSBzaF9kbWFlX3JzdCgwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisjaWZkZWYgU0hfRE1BQ19CQVNFMQogCQlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9ETUFPUjEpIHsKIAkJCWVyciA9IHNoX2RtYWVfcnN0KDEpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CisjZW5kaWYKIAkJZGlzYWJsZV9pcnEoaXJxKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KQEAgLTQ5NCwzNSArNTk0LDI1IEBACiBzdGF0aWMgdm9pZCBkbWFlX2RvX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSAoc3RydWN0IHNoX2RtYWVfY2hhbiAqKWRhdGE7Ci0Jc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYywgKmN1cl9kZXNjID0gTlVMTDsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKIAl1MzIgc2FyX2J1ZiA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgU0FSKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywKLQkJCQkgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmKSB7Ci0JCQljdXJfZGVzYyA9IGRlc2M7CisJc3Bpbl9sb2NrKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7CisJCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmICYmCisJCSAgICBkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CisJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwgImRvbmUgIyVkQCVwIGRzdCAldVxuIiwKKwkJCQlkZXNjLT5hc3luY190eC5jb29raWUsICZkZXNjLT5hc3luY190eCwKKwkJCQlkZXNjLT5ody5kYXIpOworCQkJZGVzYy0+bWFyayA9IERFU0NfQ09NUExFVEVEOwogCQkJYnJlYWs7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2soJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKLQlpZiAoY3VyX2Rlc2MpIHsKLQkJc3dpdGNoIChjdXJfZGVzYy0+YXN5bmNfdHguY29va2llKSB7Ci0JCWNhc2UgMDogLyogb3RoZXIgZGVzYyBkYXRhICovCi0JCQlicmVhazsKLQkJY2FzZSAtRUJVU1k6IC8qIGxhc3QgZGVzYyAqLwotCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0KLQkJCQljdXJfZGVzYy0+YXN5bmNfdHguY29va2llOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIGZpcnN0IGRlc2MgKCAwIDwgKSovCi0JCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0KLQkJCQljdXJfZGVzYy0+YXN5bmNfdHguY29va2llIC0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWN1cl9kZXNjLT5tYXJrID0gREVTQ19DT01QOwotCX0KIAkvKiBOZXh0IGRlc2MgKi8KIAlzaF9jaGFuX3hmZXJfbGRfcXVldWUoc2hfY2hhbik7Ci0Jc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc2hfY2hhbik7CisJc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc2hfY2hhbiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kbWFlX2lycSh1bnNpZ25lZCBpbnQgaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCA2MGI4MWU1Li4xMDhmMWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTEzLDkgKzEzLDkgQEAKICNpZm5kZWYgX19ETUFfU0hETUFfSAogI2RlZmluZSBfX0RNQV9TSERNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjZGVmaW5lIFNIX0RNQV9UQ1JfTUFYIDB4MDBGRkZGRkYJLyogMTZNQiAqLwogCkBAIC0yNiwxMyArMjYsMTYgQEAKIH07CiAKIHN0cnVjdCBzaF9kZXNjIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7CiAJc3RydWN0IHNoX2RtYWVfcmVncyBodzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yIGFzeW5jX3R4OworCWRtYV9jb29raWVfdCBjb29raWU7CisJaW50IGNodW5rczsKIAlpbnQgbWFyazsKIH07CiAKK3N0cnVjdCBkZXZpY2U7CisKIHN0cnVjdCBzaF9kbWFlX2NoYW4gewogCWRtYV9jb29raWVfdCBjb21wbGV0ZWRfY29va2llOwkvKiBUaGUgbWF4aW11bSBjb29raWUgY29tcGxldGVkICovCiAJc3BpbmxvY2tfdCBkZXNjX2xvY2s7CQkvKiBEZXNjcmlwdG9yIG9wZXJhdGlvbiBsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCBkZjViNjg0Li5jNWZhY2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTE3MDAsMTEgKzE3MDAsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKGludCBjdHJsLCBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaW50IGRpbW0sIHNpemUwLCBzaXplMTsKKwlpbnQgZGltbSwgc2l6ZTAsIHNpemUxLCBmYWN0b3IgPSAwOwogCXUzMiBkYmFtOwogCXUzMiAqZGNzYjsKIAogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYpIHsKKwkJaWYgKHB2dC0+ZGNscjAgJiBGMTBfV0lEVEhfMTI4KQorCQkJZmFjdG9yID0gMTsKKwogCQkvKiBLOCBmYW1pbGllcyA8IHJldkYgbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAkgICAgICAgaWYgKHB2dC0+ZXh0X21vZGVsIDwgSzhfUkVWX0YpCiAJCQlyZXR1cm47CkBAIC0xNzMyLDcgKzE3MzUsOCBAQAogCQkJc2l6ZTEgPSBwdnQtPm9wcy0+ZGJhbV90b19jcyhwdnQsIERCQU1fRElNTShkaW1tLCBkYmFtKSk7CiAKIAkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIiAlZDogJTVkTUIgJWQ6ICU1ZE1CXG4iLAotCQkJICAgIGRpbW0gKiAyLCBzaXplMCwgZGltbSAqIDIgKyAxLCBzaXplMSk7CisJCQkgICAgZGltbSAqIDIsICAgICBzaXplMCA8PCBmYWN0b3IsCisJCQkgICAgZGltbSAqIDIgKyAxLCBzaXplMSA8PCBmYWN0b3IpOwogCX0KIH0KIApAQCAtMjM0NSw3ICsyMzQ5LDcgQEAKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMCwgJnB2dC0+ZGNscjApOwogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENIUl8wLCAmcHZ0LT5kY2hyMCk7CiAKLQlpZiAoIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgeworCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpICYmIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTApIHsKIAkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0xSXzEsICZwdnQtPmRjbHIxKTsKIAkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0hSXzEsICZwdnQtPmRjaHIxKTsKIAl9CkBAIC0yNjg2LDkgKzI2OTAsOCBAQAogCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIiVzIiwgZWNjX3dhcm5pbmcpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQl9IGVsc2UKLQkJLyogQ0xFQVIgdGhlIG92ZXJyaWRlLCBzaW5jZSBCSU9TIGNvbnRyb2xsZWQgaXQgKi8KIAkJZWNjX2VuYWJsZV9vdmVycmlkZSA9IDA7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTI1LDE2ICsyOTI4LDE1IEBACiAKIAlhbWQ2NF9mcmVlX21jX3NpYmxpbmdfZGV2aWNlcyhwdnQpOwogCi0Ja2ZyZWUocHZ0KTsKLQltY2ktPnB2dF9pbmZvID0gTlVMTDsKLQotCW1jaV9sb29rdXBbcHZ0LT5tY19ub2RlX2lkXSA9IE5VTEw7Ci0KIAkvKiB1bnJlZ2lzdGVyIGZyb20gRURBQyBNQ0UgKi8KIAlhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGZhbHNlKTsKIAlhbWRfdW5yZWdpc3Rlcl9lY2NfZGVjb2RlcihhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKTsKIAogCS8qIEZyZWUgdGhlIEVEQUMgQ09SRSByZXNvdXJjZXMgKi8KKwltY2ktPnB2dF9pbmZvID0gTlVMTDsKKwltY2lfbG9va3VwW3B2dC0+bWNfbm9kZV9pZF0gPSBOVUxMOworCisJa2ZyZWUocHZ0KTsKIAllZGFjX21jX2ZyZWUobWNpKTsKIH0KIApAQCAtMzAxMSwyNSArMzAxMywyOSBAQAogc3RhdGljIGludCBfX2luaXQgYW1kNjRfZWRhY19pbml0KHZvaWQpCiB7CiAJaW50IG5iLCBlcnIgPSAtRU5PREVWOworCWJvb2wgbG9hZF9vayA9IGZhbHNlOwogCiAJZWRhY19wcmludGsoS0VSTl9JTkZPLCBFREFDX01PRF9TVFIsIEVEQUNfQU1ENjRfVkVSU0lPTiAiXG4iKTsKIAogCW9wc3RhdGVfaW5pdCgpOwogCiAJaWYgKGNhY2hlX2s4X25vcnRoYnJpZGdlcygpIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfcmV0OwogCiAJbXNycyA9IG1zcnNfYWxsb2MoKTsKKwlpZiAoIW1zcnMpCisJCWdvdG8gZXJyX3JldDsKIAogCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX3BjaTsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgdGhlIGFycmF5ICdwdnRfbG9va3VwW10nIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGFsbG9jJ2QKIAkgKiBhbWQ2NF9wdnQgc3RydWN0cy4gVGhlc2Ugd2lsbCBiZSB1c2VkIGluIHRoZSAybmQgc3RhZ2UgaW5pdCBmdW5jdGlvbgogCSAqIHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbiBvZiB0aGUgTUMgaW5zdGFuY2VzLgogCSAqLworCWVyciA9IC1FTk9ERVY7CiAJZm9yIChuYiA9IDA7IG5iIDwgbnVtX2s4X25vcnRoYnJpZGdlczsgbmIrKykgewogCQlpZiAoIXB2dF9sb29rdXBbbmJdKQogCQkJY29udGludWU7CkBAIC0zMDM3LDE2ICszMDQzLDIxIEBACiAJCWVyciA9IGFtZDY0X2luaXRfMm5kX3N0YWdlKHB2dF9sb29rdXBbbmJdKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyXzJuZF9zdGFnZTsKKworCQlsb2FkX29rID0gdHJ1ZTsKIAl9CiAKLQlhbWQ2NF9zZXR1cF9wY2lfZGV2aWNlKCk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAobG9hZF9vaykgeworCQlhbWQ2NF9zZXR1cF9wY2lfZGV2aWNlKCk7CisJCXJldHVybiAwOworCX0KIAogZXJyXzJuZF9zdGFnZToKLQlkZWJ1Z2YwKCIybmQgc3RhZ2UgZmFpbGVkXG4iKTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwotCitlcnJfcGNpOgorCW1zcnNfZnJlZShtc3JzKTsKKwltc3JzID0gTlVMTDsKK2Vycl9yZXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYwppbmRleCA0MjI3MjhjLi5mYjYwYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19wY2lfc3lzZnMuYwpAQCAtNTM0LDggKzUzNCw2IEBACiB7CiAJdTggaGVhZGVyX3R5cGU7CiAKLQlkZWJ1Z2YwKCIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0KIAlnZXRfcGNpX3Bhcml0eV9zdGF0dXMoZGV2LCAwKTsKIAogCS8qIHJlYWQgdGhlIGRldmljZSBUWVBFLCBsb29raW5nIGZvciBicmlkZ2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKaW5kZXggMTNlZmNkMy4uYTkzNzFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZwpAQCAtMSw1ICsxLDEwIEBACittZW51ICJJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJIHx8IEJST0tFTgorCSMgZmlyZXdpcmUtY29yZSBkb2VzIG5vdCBkZXBlbmQgb24gUENJIGJ1dCBpcworCSMgbm90IHVzZWZ1bCB3aXRob3V0IFBDSSBjb250cm9sbGVyIGRyaXZlcgorCiBjb21tZW50ICJZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLiIKLWNvbW1lbnQgIlNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCitjb21tZW50ICJUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuIgogCiBjb25maWcgRklSRVdJUkUKIAl0cmlzdGF0ZSAiRmlyZVdpcmUgZHJpdmVyIHN0YWNrIgpAQCAtMTUsMTYgKzIwLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGZpcmV3aXJlLWNvcmUuCiAKLQkgIFRoaXMgbW9kdWxlIGZ1bmN0aW9uYWxseSByZXBsYWNlcyBpZWVlMTM5NCwgcmF3MTM5NCwgYW5kIHZpZGVvMTM5NC4KLQkgIFRvIGFjY2VzcyBpdCBmcm9tIGFwcGxpY2F0aW9uIHByb2dyYW1zLCB5b3UgZ2VuZXJhbGx5IG5lZWQgYXQgbGVhc3QKLQkgIGxpYnJhdzEzOTQgdjIuICBJSURDL0RDQU0gYXBwbGljYXRpb25zIG5lZWQgbGliZGMxMzk0IHYyLgotCSAgTm8gbGlicmFyaWVzIGFyZSByZXF1aXJlZCB0byBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzIHRocm91Z2ggdGhlCi0JICBmaXJld2lyZS1zYnAyIGRyaXZlci4KLQotCSAgTk9URToKLQkgIEZpcmVXaXJlIGF1ZGlvIGRldmljZXMgY3VycmVudGx5IHJlcXVpcmUgdGhlIG9sZCBkcml2ZXJzIChpZWVlMTM5NCwKLQkgIG9oY2kxMzk0LCByYXcxMzk0KS4KLQogY29uZmlnIEZJUkVXSVJFX09IQ0kKIAl0cmlzdGF0ZSAiT0hDSS0xMzk0IGNvbnRyb2xsZXJzIgogCWRlcGVuZHMgb24gUENJICYmIEZJUkVXSVJFCkBAIC0zNCwyMiArMjksNyBAQAogCSAgaXMgdGhlIG9ubHkgY2hpcHNldCBpbiB1c2UsIHNvIHNheSBZIGhlcmUuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6ICBUaGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCBmaXJld2lyZS1vaGNpLiAgSXQgcmVwbGFjZXMgb2hjaTEzOTQgb2YgdGhlIGNsYXNzaWMgSUVFRSAxMzk0Ci0JICBzdGFjay4KLQotCSAgTk9URToKLQkgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgZmlyZXdpcmUtb2hjaSBhbmQgb2hjaTEzOTQgdG9nZXRoZXIsIHlvdQotCSAgc2hvdWxkIGNvbmZpZ3VyZSB0aGVtIG9ubHkgYXMgbW9kdWxlcyBhbmQgYmxhY2tsaXN0IHRoZSBkcml2ZXIocykKLQkgIHdoaWNoIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgYXV0by1sb2FkZWQuICBBZGQgZWl0aGVyCi0KLQkgICAgICBibGFja2xpc3QgZmlyZXdpcmUtb2hjaQotCSAgb3IKLQkgICAgICBibGFja2xpc3Qgb2hjaTEzOTQKLQkgICAgICBibGFja2xpc3QgdmlkZW8xMzk0Ci0JICAgICAgYmxhY2tsaXN0IGR2MTM5NAotCi0JICB0byAvZXRjL21vZHByb2JlLmNvbmYgb3IgL2V0Yy9tb2Rwcm9iZS5kLyogYW5kIHVwZGF0ZSBtb2Rwcm9iZS5jb25mCi0JICBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24uCisJICBjYWxsZWQgZmlyZXdpcmUtb2hjaS4KIAogY29uZmlnIEZJUkVXSVJFX09IQ0lfREVCVUcKIAlib29sCkBAIC02Niw4ICs0Niw3IEBACiAJICBsaWtlIHNjYW5uZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiAgVGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgZmlyZXdpcmUtc2JwMi4gIEl0IHJlcGxhY2VzIHNicDIgb2YgdGhlIGNsYXNzaWMgSUVFRSAxMzk0Ci0JICBzdGFjay4KKwkgIGNhbGxlZCBmaXJld2lyZS1zYnAyLgogCiAJICBZb3Ugc2hvdWxkIGFsc28gZW5hYmxlIHN1cHBvcnQgZm9yIGRpc2tzLCBDRC1ST01zLCBldGMuIGluIHRoZSBTQ1NJCiAJICBjb25maWd1cmF0aW9uIHNlY3Rpb24uCkBAIC04Myw1ICs2Miw4IEBACiAJICBOT1RFLCB0aGlzIGRyaXZlciBpcyBub3Qgc3RhYmxlIHlldCEKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogIFRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIGZpcmV3aXJlLW5ldC4gIEl0IHJlcGxhY2VzIGV0aDEzOTQgb2YgdGhlIGNsYXNzaWMgSUVFRSAxMzk0Ci0JICBzdGFjay4KKwkgIGNhbGxlZCBmaXJld2lyZS1uZXQuCisKK3NvdXJjZSAiZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCAyMzFlNmVlLi5lNmQ2Mzg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCkBAIC02MDEsOCArNjAxLDkgQEAKIAlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwKIAkJCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19zZW5kX3Jlc3BvbnNlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCByLT5yZXF1ZXN0LAotCQkJIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKKwlpZiAoci0+cmVxdWVzdCkKKwkJZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwKKwkJCQkgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwogCWtmcmVlKHIpOwogfQogCkBAIC02NDUsNyArNjQ2LDggQEAKICBmYWlsZWQ6CiAJa2ZyZWUocik7CiAJa2ZyZWUoZSk7Ci0JZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT05GTElDVF9FUlJPUik7CisJaWYgKHJlcXVlc3QpCisJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCkBAIC03MTUsMTUgKzcxNywxOCBAQAogCiAJciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UsCiAJCQkgcmVzb3VyY2UpOwotCWlmIChyZXF1ZXN0LT5sZW5ndGggPCByLT5sZW5ndGgpCi0JCXItPmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihyLT5kYXRhLCB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgci0+bGVuZ3RoKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKKwlpZiAoci0+cmVxdWVzdCkgeworCQlpZiAocmVxdWVzdC0+bGVuZ3RoIDwgci0+bGVuZ3RoKQorCQkJci0+bGVuZ3RoID0gcmVxdWVzdC0+bGVuZ3RoOworCQlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwgdTY0X3RvX3VwdHIocmVxdWVzdC0+ZGF0YSksCisJCQkJICAgci0+bGVuZ3RoKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWtmcmVlKHItPnJlcXVlc3QpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwKKwkJCQkgcmVxdWVzdC0+cmNvZGUpOwogCX0KLQotCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsIHJlcXVlc3QtPnJjb2RlKTsKICBvdXQ6CiAJa2ZyZWUocik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKaW5kZXggODQyNzM5ZC4uNDk1ODQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKQEAgLTQzMiwxNCArNDMyLDIwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBib29sIGlzX2VuY2xvc2luZ19oYW5kbGVyKHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXIsCisJCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCit7CisJcmV0dXJuIGhhbmRsZXItPm9mZnNldCA8PSBvZmZzZXQgJiYKKwkJb2Zmc2V0ICsgbGVuZ3RoIDw9IGhhbmRsZXItPm9mZnNldCArIGhhbmRsZXItPmxlbmd0aDsKK30KKwogc3RhdGljIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmxvb2t1cF9lbmNsb3NpbmdfYWRkcmVzc19oYW5kbGVyKAogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlcjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlciwgbGlzdCwgbGluaykgewotCQlpZiAoaGFuZGxlci0+b2Zmc2V0IDw9IG9mZnNldCAmJgotCQkgICAgb2Zmc2V0ICsgbGVuZ3RoIDw9IGhhbmRsZXItPm9mZnNldCArIGhhbmRsZXItPmxlbmd0aCkKKwkJaWYgKGlzX2VuY2xvc2luZ19oYW5kbGVyKGhhbmRsZXIsIG9mZnNldCwgbGVuZ3RoKSkKIAkJCXJldHVybiBoYW5kbGVyOwogCX0KIApAQCAtNDY1LDYgKzQ3MSwxMiBAQAogCXsgLnN0YXJ0ID0gMHhmZmZmZjAwMDA5MDBVTEwsIC5lbmQgPSAweDEwMDAwMDAwMDAwMDBVTEwsIH07CiAjZW5kaWYgIC8qICAwICAqLwogCitzdGF0aWMgYm9vbCBpc19pbl9mY3BfcmVnaW9uKHU2NCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCit7CisJcmV0dXJuIG9mZnNldCA+PSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfRkNQX0NPTU1BTkQpICYmCisJCW9mZnNldCArIGxlbmd0aCA8PSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfRkNQX0VORCk7Cit9CisKIC8qKgogICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyIC0gcmVnaXN0ZXIgZm9yIGluY29taW5nIHJlcXVlc3RzCiAgKiBAaGFuZGxlcjogY2FsbGJhY2sKQEAgLTQ3Nyw4ICs0ODksMTEgQEAKICAqIGdpdmUgdGhlIGRldGFpbHMgb2YgdGhlIHBhcnRpY3VsYXIgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm4gdmFsdWU6ICAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqCiAgKiBUaGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBoYW5kbGVyJ3MgYWRkcmVzcyByZWdpb24gaXMgZGV0ZXJtaW5lZCBieQogICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCkgYW5kIGlzIHJldHVybmVkIGluIGhhbmRsZXItPm9mZnNldC4KKyAqCisgKiBBZGRyZXNzIGFsbG9jYXRpb25zIGFyZSBleGNsdXNpdmUsIGV4Y2VwdCBmb3IgdGhlIEZDUCByZWdpc3RlcnMuCiAgKi8KIGludCBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlciwKIAkJCQljb25zdCBzdHJ1Y3QgZndfYWRkcmVzc19yZWdpb24gKnJlZ2lvbikKQEAgLTQ5OCwxMCArNTEzLDEyIEBACiAKIAloYW5kbGVyLT5vZmZzZXQgPSByZWdpb24tPnN0YXJ0OwogCXdoaWxlIChoYW5kbGVyLT5vZmZzZXQgKyBoYW5kbGVyLT5sZW5ndGggPD0gcmVnaW9uLT5lbmQpIHsKLQkJb3RoZXIgPQotCQkgICAgbG9va3VwX292ZXJsYXBwaW5nX2FkZHJlc3NfaGFuZGxlcigmYWRkcmVzc19oYW5kbGVyX2xpc3QsCi0JCQkJCQkgICAgICAgaGFuZGxlci0+b2Zmc2V0LAotCQkJCQkJICAgICAgIGhhbmRsZXItPmxlbmd0aCk7CisJCWlmIChpc19pbl9mY3BfcmVnaW9uKGhhbmRsZXItPm9mZnNldCwgaGFuZGxlci0+bGVuZ3RoKSkKKwkJCW90aGVyID0gTlVMTDsKKwkJZWxzZQorCQkJb3RoZXIgPSBsb29rdXBfb3ZlcmxhcHBpbmdfYWRkcmVzc19oYW5kbGVyCisJCQkJCSgmYWRkcmVzc19oYW5kbGVyX2xpc3QsCisJCQkJCSBoYW5kbGVyLT5vZmZzZXQsIGhhbmRsZXItPmxlbmd0aCk7CiAJCWlmIChvdGhlciAhPSBOVUxMKSB7CiAJCQloYW5kbGVyLT5vZmZzZXQgKz0gb3RoZXItPmxlbmd0aDsKIAkJfSBlbHNlIHsKQEAgLTY2OCw2ICs2ODUsOSBAQAogdm9pZCBmd19zZW5kX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLAogCQkgICAgICBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHJjb2RlKQogeworCWlmIChXQVJOX09OQ0UoIXJlcXVlc3QsICJpbnZhbGlkIGZvciBGQ1AgYWRkcmVzcyBoYW5kbGVycyIpKQorCQlyZXR1cm47CisKIAkvKiB1bmlmaWVkIHRyYW5zYWN0aW9uIG9yIGJyb2FkY2FzdCB0cmFuc2FjdGlvbjogZG9uJ3QgcmVzcG9uZCAqLwogCWlmIChyZXF1ZXN0LT5hY2sgIT0gQUNLX1BFTkRJTkcgfHwKIAkgICAgSEVBREVSX0RFU1RJTkFUSU9OX0lTX0JST0FEQ0FTVChyZXF1ZXN0LT5yZXF1ZXN0X2hlYWRlclswXSkpIHsKQEAgLTY4NiwyNiArNzA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X3NlbmRfcmVzcG9uc2UpOwogCi12b2lkIGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnApCitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjbHVzaXZlX3JlZ2lvbl9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCQkgICAgc3RydWN0IGZ3X3BhY2tldCAqcCwKKwkJCQkJICAgIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGNvZGUsIGRlc3RpbmF0aW9uLCBzb3VyY2U7CiAKLQlpZiAocC0+YWNrICE9IEFDS19QRU5ESU5HICYmIHAtPmFjayAhPSBBQ0tfQ09NUExFVEUpCi0JCXJldHVybjsKLQotCXJlcXVlc3QgPSBhbGxvY2F0ZV9yZXF1ZXN0KHApOwotCWlmIChyZXF1ZXN0ID09IE5VTEwpIHsKLQkJLyogRklYTUU6IHNlbmQgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVzeSBwYWNrZXQuICovCi0JCXJldHVybjsKLQl9Ci0KLQlvZmZzZXQgICAgICA9Ci0JCSgodW5zaWduZWQgbG9uZyBsb25nKQotCQkgSEVBREVSX0dFVF9PRkZTRVRfSElHSChwLT5oZWFkZXJbMV0pIDw8IDMyKSB8IHAtPmhlYWRlclsyXTsKIAl0Y29kZSAgICAgICA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKIAlkZXN0aW5hdGlvbiA9IEhFQURFUl9HRVRfREVTVElOQVRJT04ocC0+aGVhZGVyWzBdKTsKIAlzb3VyY2UgICAgICA9IEhFQURFUl9HRVRfU09VUkNFKHAtPmhlYWRlclsxXSk7CkBAIC03MzIsNiArNzQxLDczIEBACiAJCQkJCSAgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+bGVuZ3RoLAogCQkJCQkgIGhhbmRsZXItPmNhbGxiYWNrX2RhdGEpOwogfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmNwX3JlZ2lvbl9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCSAgICAgIHN0cnVjdCBmd19wYWNrZXQgKnAsCisJCQkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRjb2RlLCBkZXN0aW5hdGlvbiwgc291cmNlOworCisJaWYgKChvZmZzZXQgIT0gKENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0ZDUF9DT01NQU5EKSAmJgorCSAgICAgb2Zmc2V0ICE9IChDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9GQ1BfUkVTUE9OU0UpKSB8fAorCSAgICByZXF1ZXN0LT5sZW5ndGggPiAweDIwMCkgeworCQlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0FERFJFU1NfRVJST1IpOworCisJCXJldHVybjsKKwl9CisKKwl0Y29kZSAgICAgICA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKKwlkZXN0aW5hdGlvbiA9IEhFQURFUl9HRVRfREVTVElOQVRJT04ocC0+aGVhZGVyWzBdKTsKKwlzb3VyY2UgICAgICA9IEhFQURFUl9HRVRfU09VUkNFKHAtPmhlYWRlclsxXSk7CisKKwlpZiAodGNvZGUgIT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUICYmCisJICAgIHRjb2RlICE9IFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1QpIHsKKwkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9UWVBFX0VSUk9SKTsKKworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkZHJlc3NfaGFuZGxlcl9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGVyLCAmYWRkcmVzc19oYW5kbGVyX2xpc3QsIGxpbmspIHsKKwkJaWYgKGlzX2VuY2xvc2luZ19oYW5kbGVyKGhhbmRsZXIsIG9mZnNldCwgcmVxdWVzdC0+bGVuZ3RoKSkKKwkJCWhhbmRsZXItPmFkZHJlc3NfY2FsbGJhY2soY2FyZCwgTlVMTCwgdGNvZGUsCisJCQkJCQkgIGRlc3RpbmF0aW9uLCBzb3VyY2UsCisJCQkJCQkgIHAtPmdlbmVyYXRpb24sIHAtPnNwZWVkLAorCQkJCQkJICBvZmZzZXQsIHJlcXVlc3QtPmRhdGEsCisJCQkJCQkgIHJlcXVlc3QtPmxlbmd0aCwKKwkJCQkJCSAgaGFuZGxlci0+Y2FsbGJhY2tfZGF0YSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZHJlc3NfaGFuZGxlcl9sb2NrLCBmbGFncyk7CisKKwlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKK30KKwordm9pZCBmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQoreworCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CisKKwlpZiAocC0+YWNrICE9IEFDS19QRU5ESU5HICYmIHAtPmFjayAhPSBBQ0tfQ09NUExFVEUpCisJCXJldHVybjsKKworCXJlcXVlc3QgPSBhbGxvY2F0ZV9yZXF1ZXN0KHApOworCWlmIChyZXF1ZXN0ID09IE5VTEwpIHsKKwkJLyogRklYTUU6IHNlbmQgc3RhdGljYWxseSBhbGxvY2F0ZWQgYnVzeSBwYWNrZXQuICovCisJCXJldHVybjsKKwl9CisKKwlvZmZzZXQgPSAoKHU2NClIRUFERVJfR0VUX09GRlNFVF9ISUdIKHAtPmhlYWRlclsxXSkgPDwgMzIpIHwKKwkJcC0+aGVhZGVyWzJdOworCisJaWYgKCFpc19pbl9mY3BfcmVnaW9uKG9mZnNldCwgcmVxdWVzdC0+bGVuZ3RoKSkKKwkJaGFuZGxlX2V4Y2x1c2l2ZV9yZWdpb25fcmVxdWVzdChjYXJkLCBwLCByZXF1ZXN0LCBvZmZzZXQpOworCWVsc2UKKwkJaGFuZGxlX2ZjcF9yZWdpb25fcmVxdWVzdChjYXJkLCBwLCByZXF1ZXN0LCBvZmZzZXQpOworCit9CiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3QpOwogCiB2b2lkIGZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwppbmRleCA5Njc2OGUxLi5hNjE1NzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMjIyNiw3ICsyMjI2LDYgQEAKIAlpZiAocmVzdCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEZJWE1FOiBtYWtlIHBhY2tldC1wZXItYnVmZmVyL2R1YWwtYnVmZmVyIGEgY29udGV4dCBvcHRpb24gKi8KIAl3aGlsZSAocmVzdCA+IDApIHsKIAkJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKCZjdHgtPmNvbnRleHQsCiAJCQkJCSAgICB6ICsgaGVhZGVyX3osICZkX2J1cyk7CkBAIC0yNDcwLDcgKzI0NjksMTAgQEAKIAl9CiAKIAl2ZXJzaW9uID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbikgJiAweDAwZmYwMGZmOworI2lmIDAKKwkvKiBGSVhNRTogbWFrZSBpdCBhIGNvbnRleHQgb3B0aW9uIG9yIHJlbW92ZSBkdWFsLWJ1ZmZlciBtb2RlICovCiAJb2hjaS0+dXNlX2R1YWxidWZmZXIgPSB2ZXJzaW9uID49IE9IQ0lfVkVSU0lPTl8xXzE7CisjZW5kaWYKIAogCS8qIGR1YWwtYnVmZmVyIG1vZGUgaXMgYnJva2VuIGlmIG1vcmUgdGhhbiBvbmUgSVIgY29udGV4dCBpcyBhY3RpdmUgKi8KIAlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BR0VSRSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwppbmRleCBhMDE5YjQ5Li4xZjFkODhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwpAQCAtMTcyLDYgKzE3MiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgYWRwNTUyMC1ncGlvLgogCitjb25maWcgR1BJT19BRFA1NTg4CisJdHJpc3RhdGUgIkFEUDU1ODggSTJDIEdQSU8gZXhwYW5kZXIiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIDE4IEdQSU9zIGZvdW5kCisJICBvbiBBbmFsb2cgRGV2aWNlcyBBRFA1NTg4IEdQSU8gRXhwYW5kZXJzLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgYWRwNTU4OC1ncGlvLgorCiBjb21tZW50ICJQQ0kgR1BJTyBleHBhbmRlcnM6IgogCiBjb25maWcgR1BJT19DUzU1MzUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZSBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQppbmRleCA1MmZlNGNmLi40ODY4NzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLSQoQ09ORklHX0dQSU9MSUIpCQkrPSBncGlvbGliLm8KIAogb2JqLSQoQ09ORklHX0dQSU9fQURQNTUyMCkJKz0gYWRwNTUyMC1ncGlvLm8KK29iai0kKENPTkZJR19HUElPX0FEUDU1ODgpCSs9IGFkcDU1ODgtZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19MQU5HV0VMTCkJKz0gbGFuZ3dlbGxfZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19NQVg3MzAxKQkrPSBtYXg3MzAxLm8KIG9iai0kKENPTkZJR19HUElPX01BWDczMlgpCSs9IG1heDczMngubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2FkcDU1ODgtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2FkcDU1ODgtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzA5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vYWRwNTU4OC1ncGlvLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBHUElPIENoaXAgZHJpdmVyIGZvciBBbmFsb2cgRGV2aWNlcworICogQURQNTU4OCBJL08gRXhwYW5kZXIgYW5kIFFXRVJUWSBLZXlwYWQgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMvYWRwNTU4OC5oPgorCisjZGVmaW5lIERSVl9OQU1FCQkiYWRwNTU4OC1ncGlvIgorI2RlZmluZSBNQVhHUElPCQkJMTgKKyNkZWZpbmUgQURQX0JBTksob2ZmcykJCSgob2ZmcykgPj4gMykKKyNkZWZpbmUgQURQX0JJVChvZmZzKQkJKDF1IDw8ICgob2ZmcykgJiAweDcpKQorCitzdHJ1Y3QgYWRwNTU4OF9ncGlvIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBncGlvX2NoaXAgZ3Bpb19jaGlwOworCXN0cnVjdCBtdXRleCBsb2NrOwkvKiBwcm90ZWN0IGNhY2hlZCBkaXIsIGRhdF9vdXQgKi8KKwl1bnNpZ25lZCBncGlvX3N0YXJ0OworCXVpbnQ4X3QgZGF0X291dFszXTsKKwl1aW50OF90IGRpclszXTsKK307CisKK3N0YXRpYyBpbnQgYWRwNTU4OF9ncGlvX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQoreworCWludCByZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUmVhZCBFcnJvclxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDU1ODhfZ3Bpb193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKKworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIldyaXRlIEVycm9yXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTU4OF9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmYpCit7CisJc3RydWN0IGFkcDU1ODhfZ3BpbyAqZGV2ID0KKwkgICAgY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhZHA1NTg4X2dwaW8sIGdwaW9fY2hpcCk7CisKKwlyZXR1cm4gISEoYWRwNTU4OF9ncGlvX3JlYWQoZGV2LT5jbGllbnQsIEdQSU9fREFUX1NUQVQxICsgQURQX0JBTksob2ZmKSkKKwkJICAmIEFEUF9CSVQob2ZmKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkcDU1ODhfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBvZmYsIGludCB2YWwpCit7CisJdW5zaWduZWQgYmFuaywgYml0OworCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldiA9CisJICAgIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYWRwNTU4OF9ncGlvLCBncGlvX2NoaXApOworCisJYmFuayA9IEFEUF9CQU5LKG9mZik7CisJYml0ID0gQURQX0JJVChvZmYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAodmFsKQorCQlkZXYtPmRhdF9vdXRbYmFua10gfD0gYml0OworCWVsc2UKKwkJZGV2LT5kYXRfb3V0W2JhbmtdICY9IH5iaXQ7CisKKwlhZHA1NTg4X2dwaW9fd3JpdGUoZGV2LT5jbGllbnQsIEdQSU9fREFUX09VVDEgKyBiYW5rLAorCQkJICAgZGV2LT5kYXRfb3V0W2JhbmtdKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTU4OF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmYpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBiYW5rOworCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldiA9CisJICAgIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYWRwNTU4OF9ncGlvLCBncGlvX2NoaXApOworCisJYmFuayA9IEFEUF9CQU5LKG9mZik7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWRldi0+ZGlyW2JhbmtdICY9IH5BRFBfQklUKG9mZik7CisJcmV0ID0gYWRwNTU4OF9ncGlvX3dyaXRlKGRldi0+Y2xpZW50LCBHUElPX0RJUjEgKyBiYW5rLCBkZXYtPmRpcltiYW5rXSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZHA1NTg4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkgdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQoreworCWludCByZXQ7CisJdW5zaWduZWQgYmFuaywgYml0OworCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldiA9CisJICAgIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYWRwNTU4OF9ncGlvLCBncGlvX2NoaXApOworCisJYmFuayA9IEFEUF9CQU5LKG9mZik7CisJYml0ID0gQURQX0JJVChvZmYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPmRpcltiYW5rXSB8PSBiaXQ7CisKKwlpZiAodmFsKQorCQlkZXYtPmRhdF9vdXRbYmFua10gfD0gYml0OworCWVsc2UKKwkJZGV2LT5kYXRfb3V0W2JhbmtdICY9IH5iaXQ7CisKKwlyZXQgPSBhZHA1NTg4X2dwaW9fd3JpdGUoZGV2LT5jbGllbnQsIEdQSU9fREFUX09VVDEgKyBiYW5rLAorCQkJCSBkZXYtPmRhdF9vdXRbYmFua10pOworCXJldCB8PSBhZHA1NTg4X2dwaW9fd3JpdGUoZGV2LT5jbGllbnQsIEdQSU9fRElSMSArIGJhbmssCisJCQkJIGRldi0+ZGlyW2JhbmtdKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTg4X2dwaW9fcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhZHA1NTg4X2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldjsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKKwlpbnQgcmV0LCBpLCByZXZpZDsKKworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJTTUJVUyBCeXRlIERhdGEgbm90IFN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5jbGllbnQgPSBjbGllbnQ7CisKKwlnYyA9ICZkZXYtPmdwaW9fY2hpcDsKKwlnYy0+ZGlyZWN0aW9uX2lucHV0ID0gYWRwNTU4OF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IGFkcDU1ODhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWdjLT5nZXQgPSBhZHA1NTg4X2dwaW9fZ2V0X3ZhbHVlOworCWdjLT5zZXQgPSBhZHA1NTg4X2dwaW9fc2V0X3ZhbHVlOworCWdjLT5jYW5fc2xlZXAgPSAxOworCisJZ2MtPmJhc2UgPSBwZGF0YS0+Z3Bpb19zdGFydDsKKwlnYy0+bmdwaW8gPSBNQVhHUElPOworCWdjLT5sYWJlbCA9IGNsaWVudC0+bmFtZTsKKwlnYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisKKworCXJldCA9IGFkcDU1ODhfZ3Bpb19yZWFkKGRldi0+Y2xpZW50LCBERVZfSUQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCXJldmlkID0gcmV0ICYgQURQNTU4OF9ERVZJQ0VfSURfTUFTSzsKKworCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPD0gQURQX0JBTksoTUFYR1BJTyk7IGkrKykgeworCQlkZXYtPmRhdF9vdXRbaV0gPSBhZHA1NTg4X2dwaW9fcmVhZChjbGllbnQsIEdQSU9fREFUX09VVDEgKyBpKTsKKwkJZGV2LT5kaXJbaV0gPSBhZHA1NTg4X2dwaW9fcmVhZChjbGllbnQsIEdQSU9fRElSMSArIGkpOworCQlyZXQgfD0gYWRwNTU4OF9ncGlvX3dyaXRlKGNsaWVudCwgS1BfR1BJTzEgKyBpLCAwKTsKKwkJcmV0IHw9IGFkcDU1ODhfZ3Bpb193cml0ZShjbGllbnQsIEdQSU9fUFVMTDEgKyBpLAorCQkJCShwZGF0YS0+cHVsbHVwX2Rpc19tYXNrID4+ICg4ICogaSkpICYgMHhGRik7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmZGV2LT5ncGlvX2NoaXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZ3Bpb3MgJWQuLiVkIG9uIGEgJXMgUmV2LiAlZFxuIiwKKwkJCWdjLT5iYXNlLCBnYy0+YmFzZSArIGdjLT5uZ3BpbyAtIDEsCisJCQljbGllbnQtPm5hbWUsIHJldmlkKTsKKworCWlmIChwZGF0YS0+c2V0dXApIHsKKwkJcmV0ID0gcGRhdGEtPnNldHVwKGNsaWVudCwgZ2MtPmJhc2UsIGdjLT5uZ3BpbywgcGRhdGEtPmNvbnRleHQpOworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwgInNldHVwIGZhaWxlZCwgJWRcbiIsIHJldCk7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGV2KTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTU4OF9ncGlvX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZHA1NTg4X2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhZHA1NTg4X2dwaW8gKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByZXQ7CisKKwlpZiAocGRhdGEtPnRlYXJkb3duKSB7CisJCXJldCA9IHBkYXRhLT50ZWFyZG93bihjbGllbnQsCisJCQkJICAgICAgZGV2LT5ncGlvX2NoaXAuYmFzZSwgZGV2LT5ncGlvX2NoaXAubmdwaW8sCisJCQkJICAgICAgcGRhdGEtPmNvbnRleHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ0ZWFyZG93biBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZkZXYtPmdwaW9fY2hpcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImdwaW9jaGlwX3JlbW92ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkcDU1ODhfZ3Bpb19pZFtdID0geworCXtEUlZfTkFNRSwgMH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHA1NTg4X2dwaW9faWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWRwNTU4OF9ncGlvX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSVl9OQU1FLAorCQkgICB9LAorCS5wcm9iZSA9IGFkcDU1ODhfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWRwNTU4OF9ncGlvX3JlbW92ZSksCisJLmlkX3RhYmxlID0gYWRwNTU4OF9ncGlvX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWRwNTU4OF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFkcDU1ODhfZ3Bpb19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhZHA1NTg4X2dwaW9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA1NTg4X2dwaW9fZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHA1NTg4X2dwaW9fZHJpdmVyKTsKK30KKworbW9kdWxlX2V4aXQoYWRwNTU4OF9ncGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIEFEUDU1ODggRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwppbmRleCBhMjVhZDI4Li4zNTA4NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKQEAgLTg1OCw4ICs4NTgsNiBAQAogCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOwogCiAJaWYgKHRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBkZXZpY2UgKmRldjsKLQogCQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmZ3Bpb19jbGFzcywgTlVMTCwgZGVzYywgbWF0Y2hfZXhwb3J0KTsKIAkJaWYgKGRldiA9PSBOVUxMKSB7CiAJCQlzdGF0dXMgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYwppbmRleCA2MjhlYWUzLi5hMWZjZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYXRpX3BjaWdhcnQuYwpAQCAtMzksOCArMzksNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKIHsKIAlnYXJ0X2luZm8tPnRhYmxlX2hhbmRsZSA9IGRybV9wY2lfYWxsb2MoZGV2LCBnYXJ0X2luZm8tPnRhYmxlX3NpemUsCi0JCQkJCQlQQUdFX1NJWkUsCi0JCQkJCQlnYXJ0X2luZm8tPnRhYmxlX21hc2spOworCQkJCQkJUEFHRV9TSVpFKTsKIAlpZiAoZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTExMiw2ICsxMTEsMTMgQEAKIAlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKSB7CiAJCURSTV9ERUJVRygiUENJOiBubyB0YWJsZSBpbiBWUkFNOiB1c2luZyBub3JtYWwgUkFNXG4iKTsKIAorCQlpZiAocGNpX3NldF9kbWFfbWFzayhkZXYtPnBkZXYsIGdhcnRfaW5mby0+dGFibGVfbWFzaykpIHsKKwkJCURSTV9FUlJPUigiZmFpbCB0byBzZXQgZG1hIG1hc2sgdG8gMHglTHhcbiIsCisJCQkJICBnYXJ0X2luZm8tPnRhYmxlX21hc2spOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCiAJCXJldCA9IGRybV9hdGlfYWxsb2NfcGNpZ2FydF90YWJsZShkZXYsIGdhcnRfaW5mbyk7CiAJCWlmIChyZXQpIHsKIAkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIFBDSSBHQVJUIHBhZ2UhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggM2QwOWUzMC4uODQxN2NjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCQkgKiBBcyB3ZSdyZSBsaW1pdGluZyB0aGUgYWRkcmVzcyB0byAyXjMyLTEgKG9yIGxlc3MpLAogCQkgKiBjYXN0aW5nIGl0IGRvd24gdG8gMzIgYml0cyBpcyBubyBwcm9ibGVtLCBidXQgd2UKIAkJICogbmVlZCB0byBwb2ludCB0byBhIDY0Yml0IHZhcmlhYmxlIGZpcnN0LiAqLwotCQlkbWFoID0gZHJtX3BjaV9hbGxvYyhkZXYsIG1hcC0+c2l6ZSwgbWFwLT5zaXplLCAweGZmZmZmZmZmVUwpOworCQlkbWFoID0gZHJtX3BjaV9hbGxvYyhkZXYsIG1hcC0+c2l6ZSwgbWFwLT5zaXplKTsKIAkJaWYgKCFkbWFoKSB7CiAJCQlrZnJlZShtYXApOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC04ODUsNyArODg1LDcgQEAKIAogCXdoaWxlIChlbnRyeS0+YnVmX2NvdW50IDwgY291bnQpIHsKIAotCQlkbWFoID0gZHJtX3BjaV9hbGxvYyhkZXYsIFBBR0VfU0laRSA8PCBwYWdlX29yZGVyLCAweDEwMDAsIDB4ZmZmZmZmZmZ1bCk7CisJCWRtYWggPSBkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXIsIDB4MTAwMCk7CiAKIAkJaWYgKCFkbWFoKSB7CiAJCQkvKiBTZXQgY291bnQgY29ycmVjdGx5IHNvIHdlIGZyZWUgdGhlIHByb3BlciBhbW91bnQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IDUxMjQ0MDEuLmQ5MWZiOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIAl7IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSwgIkhETUkgVHlwZSBBIiwgMCB9LAogCXsgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCLCAiSERNSSBUeXBlIEIiLCAwIH0sCiAJeyBEUk1fTU9ERV9DT05ORUNUT1JfVFYsICJUViIsIDAgfSwKKwl7IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAsICJFbWJlZGRlZCBEaXNwbGF5UG9ydCIsIDAgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9lbmNvZGVyX2VudW1fbGlzdFtdID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwppbmRleCA0MjMxZDZkLi4wNzczMTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIEVYUE9SVF9TWU1CT0woZHJtX2hlbHBlcl9jcnRjX2luX3VzZSk7CiAKIC8qKgotICogZHJtX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyAtIGRpc2FibGUgdW51c2VkIG9iamVjdHMKKyAqIGRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zIC0gZGlzYWJsZSB1bnVzZWQgb2JqZWN0cwogICogQGRldjogRFJNIGRldmljZQogICoKICAqIExPQ0tJTkc6CkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogCS8qCiAJICogd2Ugc2hvdWxkbid0IGVuZCB1cCB3aXRoIG5vIG1vZGVzIGhlcmUuCiAJICovCi0JV0FSTighY291bnQsICJObyBjb25uZWN0b3JzIHJlcG9ydGVkIGNvbm5lY3RlZCB3aXRoIG1vZGVzXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJObyBjb25uZWN0b3JzIHJlcG9ydGVkIGNvbm5jdGVkIHdpdGggbW9kZXNcbiIpOwogCiAJZHJtX3NldHVwX2NydGNzKGRldik7CiAKQEAgLTExNjIsNiArMTE2Miw5IEBACiBpbnQgZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzOwogCWludCByZXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewpAQCAtMTE3NCw2ICsxMTc3LDI1IEBACiAKIAkJaWYgKHJldCA9PSBmYWxzZSkKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCBtb2RlIG9uIGNydGMgJXBcbiIsIGNydGMpOworCisJCS8qIFR1cm4gb2ZmIG91dHB1dHMgdGhhdCB3ZXJlIGFscmVhZHkgcG93ZXJlZCBvZmYgKi8KKwkJaWYgKGRybV9oZWxwZXJfY2hvb3NlX2NydGNfZHBtcyhjcnRjKSkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKworCQkJCWlmKGVuY29kZXItPmNydGMgIT0gY3J0YykKKwkJCQkJY29udGludWU7CisKKwkJCQllbmNvZGVyX2Z1bmNzID0gZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJCQkJaWYgKGVuY29kZXJfZnVuY3MtPmRwbXMpCisJCQkJCSgqZW5jb2Rlcl9mdW5jcy0+ZHBtcykgKGVuY29kZXIsCisJCQkJCQkJCWRybV9oZWxwZXJfY2hvb3NlX2VuY29kZXJfZHBtcyhlbmNvZGVyKSk7CisKKwkJCQljcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCQkJaWYgKGNydGNfZnVuY3MtPmRwbXMpCisJCQkJCSgqY3J0Y19mdW5jcy0+ZHBtcykgKGNydGMsCisJCQkJCQkJICAgICBkcm1faGVscGVyX2Nob29zZV9jcnRjX2RwbXMoY3J0YykpOworCQkJfQorCQl9CiAJfQogCS8qIGRpc2FibGUgdGhlIHVudXNlZCBjb25uZWN0b3JzIHdoaWxlIHJlc3RvcmluZyB0aGUgbW9kZXNldHRpbmcgKi8KIAlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggZmYyZjEwNC4uNzY2YzQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC00MzQsMTEgKzQzNCwxMSBAQAogICogTG9va3MgdXAgdGhlIGlvY3RsIGZ1bmN0aW9uIGluIHRoZSA6OmlvY3RscyB0YWJsZSwgY2hlY2tpbmcgZm9yIHJvb3QKICAqIHByZXZpbGVnZXMgaWYgc28gcmVxdWlyZWQsIGFuZCBkaXNwYXRjaGVzIHRvIHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9uLgogICovCi1pbnQgZHJtX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorbG9uZyBkcm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBkcm1faW9jdGxfZGVzYyAqaW9jdGw7CiAJZHJtX2lvY3RsX3QgKmZ1bmM7CiAJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7CkBAIC00NDYsNiArNDQ2LDcgQEAKIAljaGFyIHN0YWNrX2tkYXRhWzEyOF07CiAJY2hhciAqa2RhdGEgPSBOVUxMOwogCisJZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2OwogCWF0b21pY19pbmMoJmRldi0+aW9jdGxfY291bnQpOwogCWF0b21pY19pbmMoJmRldi0+Y291bnRzW19EUk1fU1RBVF9JT0NUTFNdKTsKIAkrK2ZpbGVfcHJpdi0+aW9jdGxfY291bnQ7CkBAIC01MDEsNyArNTAyLDEzIEBACiAJCQkJZ290byBlcnJfaTE7CiAJCQl9CiAJCX0KLQkJcmV0Y29kZSA9IGZ1bmMoZGV2LCBrZGF0YSwgZmlsZV9wcml2KTsKKwkJaWYgKGlvY3RsLT5mbGFncyAmIERSTV9VTkxPQ0tFRCkKKwkJCXJldGNvZGUgPSBmdW5jKGRldiwga2RhdGEsIGZpbGVfcHJpdik7CisJCWVsc2UgeworCQkJbG9ja19rZXJuZWwoKTsKKwkJCXJldGNvZGUgPSBmdW5jKGRldiwga2RhdGEsIGZpbGVfcHJpdik7CisJCQl1bmxvY2tfa2VybmVsKCk7CisJCX0KIAogCQlpZiAoY21kICYgSU9DX09VVCkgewogCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIGtkYXRhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCBjMzliMjZmLi5kZWZjYWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtOTExLDIzICs5MTEsMjcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGN2dF90aW1pbmcgKmN2dDsKIAljb25zdCBpbnQgcmF0ZXNbXSA9IHsgNjAsIDg1LCA3NSwgNjAsIDUwIH07CisJY29uc3QgdTggZW1wdHlbM10gPSB7IDAsIDAsIDAgfTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaW50IHdpZHRoLCBoZWlnaHQ7CisJCWludCB1bmluaXRpYWxpemVkX3Zhcih3aWR0aCksIGhlaWdodDsKIAkJY3Z0ID0gJih0aW1pbmctPmRhdGEub3RoZXJfZGF0YS5kYXRhLmN2dFtpXSk7CiAKLQkJaGVpZ2h0ID0gKGN2dC0+Y29kZVswXSArICgoY3Z0LT5jb2RlWzFdICYgMHhmMCkgPDwgOCkgKyAxKSAqIDI7Ci0JCXN3aXRjaCAoY3Z0LT5jb2RlWzFdICYgMHhjMCkgeworCQlpZiAoIW1lbWNtcChjdnQtPmNvZGUsIGVtcHR5LCAzKSkKKwkJCWNvbnRpbnVlOworCisJCWhlaWdodCA9IChjdnQtPmNvZGVbMF0gKyAoKGN2dC0+Y29kZVsxXSAmIDB4ZjApIDw8IDQpICsgMSkgKiAyOworCQlzd2l0Y2ggKGN2dC0+Y29kZVsxXSAmIDB4MGMpIHsKIAkJY2FzZSAweDAwOgogCQkJd2lkdGggPSBoZWlnaHQgKiA0IC8gMzsKIAkJCWJyZWFrOwotCQljYXNlIDB4NDA6CisJCWNhc2UgMHgwNDoKIAkJCXdpZHRoID0gaGVpZ2h0ICogMTYgLyA5OwogCQkJYnJlYWs7Ci0JCWNhc2UgMHg4MDoKKwkJY2FzZSAweDA4OgogCQkJd2lkdGggPSBoZWlnaHQgKiAxNiAvIDEwOwogCQkJYnJlYWs7Ci0JCWNhc2UgMHhjMDoKKwkJY2FzZSAweDBjOgogCQkJd2lkdGggPSBoZWlnaHQgKiAxNSAvIDk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggMWI0OWZhMC4uMWMyYjdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJCWZvcmNlID0gRFJNX0ZPUkNFX09OOwogCQkJYnJlYWs7CiAJCWNhc2UgJ0QnOgotCQkJaWYgKChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB8fAorCQkJaWYgKChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSAmJgogCQkJICAgIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQikpCiAJCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT047CiAJCQllbHNlCkBAIC02MDYsMTEgKzYwNiwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIE5lZWQgdG8gcmVzaXplIHRoZSBmYiBvYmplY3QgISEhICovCi0JaWYgKHZhci0+eHJlcyA+IGZiLT53aWR0aCB8fCB2YXItPnlyZXMgPiBmYi0+aGVpZ2h0KSB7Ci0JCURSTV9FUlJPUigiUmVxdWVzdGVkIHdpZHRoL2hlaWdodCBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBmYiAiCi0JCQkgICAib2JqZWN0ICVkeCVkID4gJWR4JWRcbiIsIHZhci0+eHJlcywgdmFyLT55cmVzLAotCQkJICAgZmItPndpZHRoLCBmYi0+aGVpZ2h0KTsKLQkJRFJNX0VSUk9SKCJOZWVkIHJlc2l6aW5nIGNvZGUuXG4iKTsKKwlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA+IGZiLT5iaXRzX3Blcl9waXhlbCB8fCB2YXItPnhyZXMgPiBmYi0+d2lkdGggfHwgdmFyLT55cmVzID4gZmItPmhlaWdodCkgeworCQlEUk1fREVCVUcoImZiIHVzZXJzcGFjZSByZXF1ZXN0ZWQgd2lkdGgvaGVpZ2h0L2JwcCBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBmYiAiCisJCQkgICJvYmplY3QgJWR4JWQtJWQgPiAlZHglZC0lZFxuIiwgdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwsCisJCQkgIGZiLT53aWR0aCwgZmItPmhlaWdodCwgZmItPmJpdHNfcGVyX3BpeGVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKaW5kZXggMjgyZDlmZC4uZDYxZDE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCQkgICZ2ZXJzaW9uLT5kZXNjKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwKIAkJCURSTV9JT0NUTF9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyl2ZXJzaW9uKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTQ1LDggKzE0NSw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9VTklRVUUsICh1bnNpZ25lZCBsb25nKXUpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfR0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTc0LDggKzE3Myw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0VUX1VOSVFVRSwgKHVuc2lnbmVkIGxvbmcpdSk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tYXAzMiB7CkBAIC0yMDUsOCArMjAzLDcgQEAKIAlpZiAoX19wdXRfdXNlcihpZHgsICZtYXAtPm9mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjQ2LDggKzI0Myw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobTMyLmZsYWdzLCAmbWFwLT5mbGFncykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUREX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FERF9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjg0LDggKzI4MCw3IEBACiAJaWYgKF9fcHV0X3VzZXIoKHZvaWQgKikodW5zaWduZWQgbG9uZyloYW5kbGUsICZtYXAtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9STV9NQVAsICh1bnNpZ25lZCBsb25nKW1hcCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUk1fTUFQLCAodW5zaWduZWQgbG9uZyltYXApOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fY2xpZW50MzIgewpAQCAtMzE0LDggKzMwOSw3IEBACiAJaWYgKF9fcHV0X3VzZXIoaWR4LCAmY2xpZW50LT5pZHgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX0dFVF9DTElFTlQsICh1bnNpZ25lZCBsb25nKWNsaWVudCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfQ0xJRU5ULCAodW5zaWduZWQgbG9uZyljbGllbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM1MSw4ICszNDUsNyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgc3RhdHMsIHNpemVvZigqc3RhdHMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9HRVRfU1RBVFMsICh1bnNpZ25lZCBsb25nKXN0YXRzKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0dFVF9TVEFUUywgKHVuc2lnbmVkIGxvbmcpc3RhdHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM5NSw4ICszODgsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGFncF9zdGFydCwgJmJ1Zi0+YWdwX3N0YXJ0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BRERfQlVGUywgKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FERF9CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQyNyw4ICs0MTksNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGIzMi5oaWdoX21hcmssICZidWYtPmhpZ2hfbWFyaykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NQVJLX0JVRlMsICh1bnNpZ25lZCBsb25nKWJ1Zik7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUFSS19CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8zMiB7CkBAIC00NjksOCArNDYwLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihsaXN0LCAmcmVxdWVzdC0+bGlzdCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfSU5GT19CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0lORk9fQlVGUywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTMxLDggKzUyMSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobGlzdCwgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX01BUF9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NzgsOCArNTY3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfRlJFRV9CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9GUkVFX0JVRlMsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwMzIgewpAQCAtNjA1LDggKzU5Myw3IEBACiAJCQkgICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2RybV9nZXRzYXJlYWN0eChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTYyOCw4ICs2MTUsNyBAQAogCWlmIChfX3B1dF91c2VyKGN0eF9pZCwgJnJlcXVlc3QtPmN0eF9pZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfR0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9HRVRfU0FSRUFfQ1RYLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC02NjQsOCArNjUwLDcgQEAKIAkJCSAgJnJlcy0+Y29udGV4dHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1JFU19DVFgsICh1bnNpZ25lZCBsb25nKXJlcyk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SRVNfQ1RYLCAodW5zaWduZWQgbG9uZylyZXMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTcxOCw4ICs3MDMsNyBAQAogCQkJICAmZC0+cmVxdWVzdF9zaXplcykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfRE1BLCAodW5zaWduZWQgbG9uZylkKTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0RNQSwgKHVuc2lnbmVkIGxvbmcpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNzUxLDggKzczNSw3IEBACiAJaWYgKHB1dF91c2VyKG0zMi5tb2RlLCAmbW9kZS0+bW9kZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfRU5BQkxFLCAodW5zaWduZWQgbG9uZyltb2RlKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRU5BQkxFLCAodW5zaWduZWQgbG9uZyltb2RlKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9pbmZvMzIgewpAQCAtNzgxLDggKzc2NCw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbmZvLCBzaXplb2YoKmluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfSU5GTywgKHVuc2lnbmVkIGxvbmcpaW5mbyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtODI3LDE2ICs4MDksMTQgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi50eXBlLCAmcmVxdWVzdC0+dHlwZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfQUdQX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0FHUF9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChfX2dldF91c2VyKHJlcTMyLmhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkKIAkgICAgfHwgX19nZXRfdXNlcihyZXEzMi5waHlzaWNhbCwgJnJlcXVlc3QtPnBoeXNpY2FsKQogCSAgICB8fCBjb3B5X3RvX3VzZXIoYXJncCwgJnJlcTMyLCBzaXplb2YocmVxMzIpKSkgewotCQlkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSAgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwkJZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtODU2LDggKzgzNiw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZzMyIHsKQEAgLTg4MSw4ICs4NjAsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLm9mZnNldCwgJnJlcXVlc3QtPm9mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfQklORCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfQUdQX0JJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiBzdGF0aWMgaW50IGNvbXBhdF9kcm1fYWdwX3VuYmluZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKQEAgLTg5OCw4ICs4NzYsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9BR1BfVU5CSU5ELCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KICNlbmRpZgkJCQkvKiBfX09TX0hBU19BR1AgKi8KIApAQCAtOTIzLDggKzkwMCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoeCwgJnJlcXVlc3QtPnNpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX1NHX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwllcnIgPSBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1NHX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC05NTAsOCArOTI2LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcih4IDw8IFBBR0VfU0hJRlQsICZyZXF1ZXN0LT5oYW5kbGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCkBAIC05ODEsOCArOTU2LDcgQEAKIAkgICAgX19wdXRfdXNlcih1cGRhdGUzMi5kYXRhLCAmcmVxdWVzdC0+ZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQlEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCXJldHVybiBlcnI7CiB9CiAjZW5kaWYKQEAgLTEwMjMsOCArOTk3LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5yZXF1ZXN0LnNpZ25hbCwgJnJlcXVlc3QtPnJlcXVlc3Quc2lnbmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCURSTV9JT0NUTF9XQUlUX1ZCTEFOSywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTA5NCwxNiArMTA2NywxNCBAQAogCSAqIHRoYW4gYWx3YXlzIGZhaWxpbmcuCiAJICovCiAJaWYgKG5yID49IEFSUkFZX1NJWkUoZHJtX2NvbXBhdF9pb2N0bHMpKQotCQlyZXR1cm4gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJCXJldHVybiBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJZm4gPSBkcm1fY29tcGF0X2lvY3Rsc1tucl07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IDc5OThlZTYuLmI5ODM4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAKIAlkZXYtPm51bV9jcnRjcyA9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfY2xlYW51cCk7CiAKIGludCBkcm1fdmJsYW5rX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9jcnRjcykKIHsKQEAgLTE2Myw3ICsxNjQsNiBAQAogCX0KIAogCWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCA9IDA7Ci0KIAlyZXR1cm4gMDsKIAogZXJyOgpAQCAtNDkzLDYgKzQ5Myw5IEBACiAgKi8KIHZvaWQgZHJtX3ZibGFua19wcmVfbW9kZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKKwkvKiB2YmxhbmsgaXMgbm90IGluaXRpYWxpemVkIChJUlEgbm90IGluc3RhbGxlZCA/KSAqLworCWlmICghZGV2LT5udW1fY3J0Y3MpCisJCXJldHVybjsKIAkvKgogCSAqIFRvIGF2b2lkIGFsbCB0aGUgcHJvYmxlbXMgdGhhdCBtaWdodCBoYXBwZW4gaWYgaW50ZXJydXB0cwogCSAqIHdlcmUgZW5hYmxlZC9kaXNhYmxlZCBhcm91bmQgb3IgYmV0d2VlbiB0aGVzZSBjYWxscywgd2UganVzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGQ3ZDdlYWMuLmNkZWMzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCQlpZiAoZW50cnktPnNpemUgPj0gc2l6ZSArIHdhc3RlZCkgewogCQkJaWYgKCFiZXN0X21hdGNoKQogCQkJCXJldHVybiBlbnRyeTsKLQkJCWlmIChzaXplIDwgYmVzdF9zaXplKSB7CisJCQlpZiAoZW50cnktPnNpemUgPCBiZXN0X3NpemUpIHsKIAkJCQliZXN0ID0gZW50cnk7CiAJCQkJYmVzdF9zaXplID0gZW50cnktPnNpemU7CiAJCQl9CkBAIC00MDgsNyArNDA4LDcgQEAKIAkJaWYgKGVudHJ5LT5zaXplID49IHNpemUgKyB3YXN0ZWQpIHsKIAkJCWlmICghYmVzdF9tYXRjaCkKIAkJCQlyZXR1cm4gZW50cnk7Ci0JCQlpZiAoc2l6ZSA8IGJlc3Rfc2l6ZSkgeworCQkJaWYgKGVudHJ5LT5zaXplIDwgYmVzdF9zaXplKSB7CiAJCQkJYmVzdCA9IGVudHJ5OwogCQkJCWJlc3Rfc2l6ZSA9IGVudHJ5LT5zaXplOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCmluZGV4IDZkODFhMDIuLjc2ZDYzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKQEAgLTEsOSArMSw0IEBACiAvKgotICogVGhlIGxpc3Rfc29ydCBmdW5jdGlvbiBpcyAocHJlc3VtYWJseSkgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCAoc2VlIHRoZQotICogdG9wIGxldmVsICJDT1BZSU5HIiBmaWxlIGZvciBkZXRhaWxzKS4KLSAqCi0gKiBUaGUgcmVtYWluZGVyIG9mIHRoaXMgZmlsZSBpczoKLSAqCiAgKiBDb3B5cmlnaHQgwqkgMTk5Ny0yMDAzIGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KICAqIENvcHlyaWdodCDCqSAyMDA3IERhdmUgQWlybGllCiAgKiBDb3B5cmlnaHQgwqkgMjAwNy0yMDA4IEludGVsIENvcnBvcmF0aW9uCkBAIC0zNiw2ICszMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0X3NvcnQuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKQEAgLTg1NSw2ICs4NTEsNyBAQAogCiAvKioKICAqIGRybV9tb2RlX2NvbXBhcmUgLSBjb21wYXJlIG1vZGVzIGZvciBmYXZvcmFiaWxpdHkKKyAqIEBwcml2OiB1bnVzZWQKICAqIEBsaF9hOiBsaXN0X2hlYWQgZm9yIGZpcnN0IG1vZGUKICAqIEBsaF9iOiBsaXN0X2hlYWQgZm9yIHNlY29uZCBtb2RlCiAgKgpAQCAtODY4LDcgKzg2NSw3IEBACiAgKiBOZWdhdGl2ZSBpZiBAbGhfYSBpcyBiZXR0ZXIgdGhhbiBAbGhfYiwgemVybyBpZiB0aGV5J3JlIGVxdWl2YWxlbnQsIG9yCiAgKiBwb3NpdGl2ZSBpZiBAbGhfYiBpcyBiZXR0ZXIgdGhhbiBAbGhfYS4KICAqLwotc3RhdGljIGludCBkcm1fbW9kZV9jb21wYXJlKHN0cnVjdCBsaXN0X2hlYWQgKmxoX2EsIHN0cnVjdCBsaXN0X2hlYWQgKmxoX2IpCitzdGF0aWMgaW50IGRybV9tb2RlX2NvbXBhcmUodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqbGhfYSwgc3RydWN0IGxpc3RfaGVhZCAqbGhfYikKIHsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYSA9IGxpc3RfZW50cnkobGhfYSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUsIGhlYWQpOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpiID0gbGlzdF9lbnRyeShsaF9iLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgaGVhZCk7CkBAIC04ODUsODUgKzg4Miw2IEBACiAJcmV0dXJuIGRpZmY7CiB9CiAKLS8qIEZJWE1FOiB3aGF0IHdlIGRvbid0IGhhdmUgYSBsaXN0IHNvcnQgZnVuY3Rpb24/ICovCi0vKiBsaXN0IHNvcnQgZnJvbSBNYXJrIEogUm9iZXJ0cyAobWpyQHpuZXgub3JnKSAqLwotdm9pZCBsaXN0X3NvcnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKLQkgICAgICAgaW50ICgqY21wKShzdHJ1Y3QgbGlzdF9oZWFkICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpiKSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSwgKmUsICpsaXN0LCAqdGFpbCwgKm9sZGhlYWQ7Ci0JaW50IGluc2l6ZSwgbm1lcmdlcywgcHNpemUsIHFzaXplLCBpOwotCi0JbGlzdCA9IGhlYWQtPm5leHQ7Ci0JbGlzdF9kZWwoaGVhZCk7Ci0JaW5zaXplID0gMTsKLQlmb3IgKDs7KSB7Ci0JCXAgPSBvbGRoZWFkID0gbGlzdDsKLQkJbGlzdCA9IHRhaWwgPSBOVUxMOwotCQlubWVyZ2VzID0gMDsKLQotCQl3aGlsZSAocCkgewotCQkJbm1lcmdlcysrOwotCQkJcSA9IHA7Ci0JCQlwc2l6ZSA9IDA7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgaW5zaXplOyBpKyspIHsKLQkJCQlwc2l6ZSsrOwotCQkJCXEgPSBxLT5uZXh0ID09IG9sZGhlYWQgPyBOVUxMIDogcS0+bmV4dDsKLQkJCQlpZiAoIXEpCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQlxc2l6ZSA9IGluc2l6ZTsKLQkJCXdoaWxlIChwc2l6ZSA+IDAgfHwgKHFzaXplID4gMCAmJiBxKSkgewotCQkJCWlmICghcHNpemUpIHsKLQkJCQkJZSA9IHE7Ci0JCQkJCXEgPSBxLT5uZXh0OwotCQkJCQlxc2l6ZS0tOwotCQkJCQlpZiAocSA9PSBvbGRoZWFkKQotCQkJCQkJcSA9IE5VTEw7Ci0JCQkJfSBlbHNlIGlmICghcXNpemUgfHwgIXEpIHsKLQkJCQkJZSA9IHA7Ci0JCQkJCXAgPSBwLT5uZXh0OwotCQkJCQlwc2l6ZS0tOwotCQkJCQlpZiAocCA9PSBvbGRoZWFkKQotCQkJCQkJcCA9IE5VTEw7Ci0JCQkJfSBlbHNlIGlmIChjbXAocCwgcSkgPD0gMCkgewotCQkJCQllID0gcDsKLQkJCQkJcCA9IHAtPm5leHQ7Ci0JCQkJCXBzaXplLS07Ci0JCQkJCWlmIChwID09IG9sZGhlYWQpCi0JCQkJCQlwID0gTlVMTDsKLQkJCQl9IGVsc2UgewotCQkJCQllID0gcTsKLQkJCQkJcSA9IHEtPm5leHQ7Ci0JCQkJCXFzaXplLS07Ci0JCQkJCWlmIChxID09IG9sZGhlYWQpCi0JCQkJCQlxID0gTlVMTDsKLQkJCQl9Ci0JCQkJaWYgKHRhaWwpCi0JCQkJCXRhaWwtPm5leHQgPSBlOwotCQkJCWVsc2UKLQkJCQkJbGlzdCA9IGU7Ci0JCQkJZS0+cHJldiA9IHRhaWw7Ci0JCQkJdGFpbCA9IGU7Ci0JCQl9Ci0JCQlwID0gcTsKLQkJfQotCi0JCXRhaWwtPm5leHQgPSBsaXN0OwotCQlsaXN0LT5wcmV2ID0gdGFpbDsKLQotCQlpZiAobm1lcmdlcyA8PSAxKQotCQkJYnJlYWs7Ci0KLQkJaW5zaXplICo9IDI7Ci0JfQotCi0JaGVhZC0+bmV4dCA9IGxpc3Q7Ci0JaGVhZC0+cHJldiA9IGxpc3QtPnByZXY7Ci0JbGlzdC0+cHJldi0+bmV4dCA9IGhlYWQ7Ci0JbGlzdC0+cHJldiA9IGhlYWQ7Ci19Ci0KIC8qKgogICogZHJtX21vZGVfc29ydCAtIHNvcnQgbW9kZSBsaXN0CiAgKiBAbW9kZV9saXN0OiBsaXN0IHRvIHNvcnQKQEAgLTk3NSw3ICs4OTMsNyBAQAogICovCiB2b2lkIGRybV9tb2RlX3NvcnQoc3RydWN0IGxpc3RfaGVhZCAqbW9kZV9saXN0KQogewotCWxpc3Rfc29ydChtb2RlX2xpc3QsIGRybV9tb2RlX2NvbXBhcmUpOworCWxpc3Rfc29ydChOVUxMLCBtb2RlX2xpc3QsIGRybV9tb2RlX2NvbXBhcmUpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9zb3J0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGNpLmMKaW5kZXggNTc3MDk0Zi4uZTY4ZWJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BjaS5jCkBAIC00Nyw4ICs0Nyw3IEBACiAvKioKICAqIFxicmllZiBBbGxvY2F0ZSBhIFBDSSBjb25zaXN0ZW50IG1lbW9yeSBibG9jaywgZm9yIERNQS4KICAqLwotZHJtX2RtYV9oYW5kbGVfdCAqZHJtX3BjaV9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwKLQkJCQlkbWFfYWRkcl90IG1heGFkZHIpCitkcm1fZG1hX2hhbmRsZV90ICpkcm1fcGNpX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQogewogCWRybV9kbWFfaGFuZGxlX3QgKmRtYWg7CiAjaWYgMQpAQCAtNjMsMTEgKzYyLDYgQEAKIAlpZiAoYWxpZ24gPiBzaXplKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldi0+cGRldiwgbWF4YWRkcikgIT0gMCkgewotCQlEUk1fRVJST1IoIlNldHRpbmcgcGNpIGRtYSBtYXNrIGZhaWxlZFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQogCWRtYWggPSBrbWFsbG9jKHNpemVvZihkcm1fZG1hX2hhbmRsZV90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWFoKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKaW5kZXggOTQyMmE3NC4uODE2ODFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfZHJ2LmMKQEAgLTQwOCw2ICs0MDgsMTEgQEAKIAogCWNoNzAwNl9pbmZvKGNsaWVudCwgIkRldGVjdGVkIHZlcnNpb24gSUQ6ICV4XG4iLCB2YWwpOwogCisJLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBmb3IsIGJ1dCBvdGhlcndpc2UgSSBnZXQgbm8KKwkgKiBzaWduYWwuCisJICovCisJY2g3MDA2X3dyaXRlKGNsaWVudCwgMHgzZCwgMHgwKTsKKwogCXJldHVybiAwOwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9jaDcwMDZfbW9kZS5jCmluZGV4IDg3ZjU0NDUuLmU0NDdkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvY2g3MDA2X21vZGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL2NoNzAwNl9tb2RlLmMKQEAgLTQyNywxMSArNDI3LDYgQEAKIAljaDcwMDZfbG9hZF9yZWcoY2xpZW50LCBzdGF0ZSwgQ0g3MDA2X1NVQkNfSU5DNyk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9QTExfQ09OVFJPTCk7CiAJY2g3MDA2X2xvYWRfcmVnKGNsaWVudCwgc3RhdGUsIENINzAwNl9DQUxDX1NVQkNfSU5DMCk7Ci0KLQkvKiBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGZvciwgYnV0IG90aGVyd2lzZSBJIGdldCBubwotCSAqIHNpZ25hbC4KLQkgKi8KLQljaDcwMDZfd3JpdGUoY2xpZW50LCAweDNkLCAweDApOwogfQogCiB2b2lkIGNoNzAwNl9zdGF0ZV9zYXZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kbWEuYwppbmRleCA3ZDFkODhjLi5kZTMyZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZG1hLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgxMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MTBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5jCmluZGV4IGZhYmI5YTguLmMxZTAyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuYwpAQCAtNTksNyArNTksNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kbWEuYwppbmRleCA4NzdiZjZjLi4wNmJkNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZG1hLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTgzMF9idWZmZXJfZm9wcyA9IHsKIAkub3BlbiA9IGRybV9vcGVuLAogCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JLmlvY3RsID0gZHJtX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkubW1hcCA9IGk4MzBfbW1hcF9idWZmZXJzLAogCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5jCmluZGV4IDM4OTU5N2UuLjQ0Zjk5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuYwpAQCAtNzAsNyArNzAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDE4NDc2YmYuLjljOTk5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAkJbWVtID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV0sIEtNX1VTRVIwKTsKIAkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRTsgaSArPSA0KQogCQkJc2VxX3ByaW50ZihtLCAiJTA4eCA6ICAlMDh4XG4iLCBpLCBtZW1baSAvIDRdKTsKLQkJa3VubWFwX2F0b21pYyhwYWdlc1twYWdlXSwgS01fVVNFUjApOworCQlrdW5tYXBfYXRvbWljKG1lbSwgS01fVVNFUjApOwogCX0KIH0KIApAQCAtMzg2LDM0ICszODYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGk5MTVfcmVnaXN0ZXJzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKSB7Ci0Jc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCByZWc7Ci0KLSNkZWZpbmUgRFVNUF9SQU5HRShzdGFydCwgZW5kKSBcCi0JZm9yIChyZWc9c3RhcnQ7IHJlZyA8IGVuZDsgcmVnICs9IDQpIFwKLQlzZXFfcHJpbnRmKG0sICIlMDh4XHQlMDh4XG4iLCByZWcsIEk5MTVfUkVBRChyZWcpKTsKLQotCURVTVBfUkFOR0UoMHgwMDAwMCwgMHgwMGZmZik7ICAgLyogVkdBIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwMjAwMCwgMHgwMmZmZik7ICAgLyogaW5zdHJ1Y3Rpb24sIG1lbW9yeSwgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JRFVNUF9SQU5HRSgweDAzMDAwLCAweDAzMWZmKTsgICAvKiBGRU5DRSBhbmQgUFBHVFQgY29udHJvbCByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4MDMyMDAsIDB4MDNmZmYpOyAgIC8qIGZyYW1lIGJ1ZmZlciBjb21wcmVzc2lvbiByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4MDUwMDAsIDB4MDVmZmYpOyAgIC8qIEkvTyBjb250cm9sIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwNjAwMCwgMHgwNmZmZik7ICAgLyogY2xvY2sgY29udHJvbCByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4MDcwMDAsIDB4MDdmZmYpOyAgIC8qIDNEIGludGVybmFsIGRlYnVnIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwNzQwMCwgMHgwODhmZik7ICAgLyogR1BFIGRlYnVnIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgwYTAwMCwgMHgwYWZmZik7ICAgLyogZGlzcGxheSBwYWxldHRlIHJlZ2lzdGVycyAqLwotCURVTVBfUkFOR0UoMHgxMDAwMCwgMHgxM2ZmZik7ICAgLyogTU1JTyBNQ0hCQVIgKi8KLQlEVU1QX1JBTkdFKDB4MzAwMDAsIDB4M2ZmZmYpOyAgIC8qIG92ZXJsYXkgcmVnaXN0ZXJzICovCi0JRFVNUF9SQU5HRSgweDYwMDAwLCAweDZmZmZmKTsgICAvKiBkaXNwbGF5IGVuZ2luZSBwaXBlbGluZSByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4NzAwMDAsIDB4NzJmZmYpOyAgIC8qIGRpc3BsYXkgYW5kIGN1cnNvciByZWdpc3RlcnMgKi8KLQlEVU1QX1JBTkdFKDB4NzMwMDAsIDB4NzNmZmYpOyAgIC8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCi0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogaTkxNV93ZWRnZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgc3RydWN0IGZpbGUgKmZpbHApCkBAIC01MTksNyArNDkxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGk5MTVfZGVidWdmc19saXN0W10gPSB7Ci0JeyJpOTE1X3JlZ3MiLCBpOTE1X3JlZ2lzdGVyc19pbmZvLCAwfSwKIAl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEFDVElWRV9MSVNUfSwKIAl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbywgMCwgKHZvaWQgKikgRkxVU0hJTkdfTElTVH0sCiAJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIElOQUNUSVZFX0xJU1R9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggNzAxYmZlYS4uYmJlNDc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCiAJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQotCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsIDB4ZmZmZmZmZmYpOworCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwogCiAJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewogCQlEUk1fRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOwpAQCAtODEzLDkgKzgxMywxMyBAQAogCWNhc2UgSTkxNV9QQVJBTV9IQVNfUEFHRUZMSVBQSU5HOgogCQl2YWx1ZSA9IDE7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ0JVRjI6CisJCS8qIGRlcGVuZHMgb24gR0VNICovCisJCXZhbHVlID0gZGV2X3ByaXYtPmhhc19nZW07CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9ERUJVR19EUklWRVIoIlVua25vd24gcGFyYW1ldGVyICVkXG4iLAotCQkJCQlwYXJhbS0+cGFyYW0pOworCQkJCSBwYXJhbS0+cGFyYW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExMTcsNyArMTEyMSw4IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgKmNvbXByZXNzZWRfZmIsICpjb21wcmVzc2VkX2xsYjsKLQl1bnNpZ25lZCBsb25nIGNmYl9iYXNlLCBsbF9iYXNlOworCXVuc2lnbmVkIGxvbmcgY2ZiX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBsbF9iYXNlID0gMDsKIAogCS8qIExlYXZlIDFNIGZvciBsaW5lIGxlbmd0aCBidWZmZXIgJiBtaXNjLiAqLwogCWNvbXByZXNzZWRfZmIgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT52cmFtLCBzaXplLCA0MDk2LCAwKTsKQEAgLTEyMDAsMTQgKzEyMDUsNiBAQAogCWRldi0+bW9kZV9jb25maWcuZmJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoZGV2LCBmYl9iYXIpICYKIAkJMHhmZjAwMDAwMDsKIAotCWlmIChJU19NT0JJTEUoZGV2KSB8fCBJU19JOVhYKGRldikpCi0JCWRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSB0cnVlOwotCWVsc2UKLQkJZGV2X3ByaXYtPmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IGZhbHNlOwotCi0JaWYgKElTX0k5NjVHKGRldikgfHwgSVNfRzMzKGRldikpCi0JCWRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSBmYWxzZTsKLQogCS8qIEJhc2ljIG1lbXJhbmdlIGFsbG9jYXRvciBmb3Igc3RvbGVuIHNwYWNlIChha2EgdnJhbSkgKi8KIAlkcm1fbW1faW5pdCgmZGV2X3ByaXYtPnZyYW0sIDAsIHByZWFsbG9jX3NpemUpOwogCURSTV9JTkZPKCJzZXQgdXAgJWxkTSBvZiBzdG9sZW4gc3BhY2VcbiIsIHByZWFsbG9jX3NpemUgLyAoMTAyNCoxMDI0KSk7CkBAIC0xMjU3LDYgKzEyNTQsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZGVzdHJveV9yaW5nYnVmZmVyOwogCisJaW50ZWxfbW9kZXNldF9pbml0KGRldik7CisKIAlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKQEAgLTEyNzEsOCArMTI3MCw2IEBACiAKIAlJOTE1X1dSSVRFKElOU1RQTSwgKDEgPDwgNSkgfCAoMSA8PCAyMSkpOwogCi0JaW50ZWxfbW9kZXNldF9pbml0KGRldik7Ci0KIAlkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNjAsNyArMTM1Nyw3IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlyZXNvdXJjZV9zaXplX3QgYmFzZSwgc2l6ZTsKLQlpbnQgcmV0ID0gMCwgbW1pb19iYXIgPSBJU19JOVhYKGRldikgPyAwIDogMTsKKwlpbnQgcmV0ID0gMCwgbW1pb19iYXI7CiAJdWludDMyX3QgYWdwX3NpemUsIHByZWFsbG9jX3NpemUsIHByZWFsbG9jX3N0YXJ0OwogCiAJLyogaTkxNSBoYXMgNCBtb3JlIGNvdW50ZXJzICovCkBAIC0xMzc2LDggKzEzNzMsMTAgQEAKIAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCWRldl9wcml2LT5kZXYgPSBkZXY7CisJZGV2X3ByaXYtPmluZm8gPSAoc3RydWN0IGludGVsX2RldmljZV9pbmZvICopIGZsYWdzOwogCiAJLyogQWRkIHJlZ2lzdGVyIG1hcCAobmVlZGVkIGZvciBzdXNwZW5kL3Jlc3VtZSkgKi8KKwltbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIApAQCAtMTY1Miw2ICsxNjUxLDcgQEAKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0hXU19BRERSLCBpOTE1X3NldF9zdGF0dXNfcGFnZSwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9JTklULCBpOTE1X2dlbV9pbml0X2lvY3RsLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIsIGk5MTVfZ2VtX2V4ZWNidWZmZXIsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgaTkxNV9nZW1fZXhlY2J1ZmZlcjIsIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QSU4sIGk5MTVfZ2VtX3Bpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fVU5QSU4sIGk5MTVfZ2VtX3VucGluX2lvY3RsLCBEUk1fQVVUSHxEUk1fUk9PVF9PTkxZKSwKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9CVVNZLCBpOTE1X2dlbV9idXN5X2lvY3RsLCBEUk1fQVVUSCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyZmEyMTc4Li5iZTYzMWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAKLSNpbmNsdWRlICJkcm1fcGNpaWRzLmgiCiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgogCkBAIC00OCw4ICs0NywxMjQgQEAKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewotCWk5MTVfUENJX0lEUworI2RlZmluZSBJTlRFTF9WR0FfREVWSUNFKGlkLCBpbmZvKSB7CQlcCisJLmNsYXNzID0gUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsCVwKKwkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwLAkJCVwKKwkudmVuZG9yID0gMHg4MDg2LAkJCVwKKwkuZGV2aWNlID0gaWQsCQkJCVwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwJCVwKKwkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwJCVwKKwkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgaW5mbyB9CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTgzMF9pbmZvID0geworCS5pc19pOHh4ID0gMSwgLmlzX21vYmlsZSA9IDEsIC5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF84NDVnX2luZm8gPSB7CisJLmlzX2k4eHggPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pODV4X2luZm8gPSB7CisJLmlzX2k4eHggPSAxLCAuaXNfbW9iaWxlID0gMSwgLmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2k4NjVnX2luZm8gPSB7CisJLmlzX2k4eHggPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pOTE1Z19pbmZvID0geworCS5pc19pOTE1ZyA9IDEsIC5pc19pOXh4ID0gMSwgLmN1cnNvcl9uZWVkc19waHlzaWNhbCA9IDEsCit9OworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pOTE1Z21faW5mbyA9IHsKKwkuaXNfaTl4eCA9IDEsICAuaXNfbW9iaWxlID0gMSwgLmhhc19mYmMgPSAxLAorCS5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLAorfTsKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk0NWdfaW5mbyA9IHsKKwkuaXNfaTl4eCA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsIC5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLAorfTsKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk0NWdtX2luZm8gPSB7CisJLmlzX2k5NDVnbSA9IDEsIC5pc19pOXh4ID0gMSwgLmlzX21vYmlsZSA9IDEsIC5oYXNfZmJjID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLCAuY3Vyc29yX25lZWRzX3BoeXNpY2FsID0gMSwKK307CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfaTk2NWdfaW5mbyA9IHsKKwkuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsIC5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2k5NjVnbV9pbmZvID0geworCS5pc19pOTY1ZyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTk2NWdtID0gMSwgLmlzX2k5eHggPSAxLAorCS5pc19tb2JpbGUgPSAxLCAuaGFzX2ZiYyA9IDEsIC5oYXNfcmM2ID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9nMzNfaW5mbyA9IHsKKwkuaXNfZzMzID0gMSwgLmlzX2k5eHggPSAxLCAubmVlZF9nZnhfaHdzID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9nNDVfaW5mbyA9IHsKKwkuaXNfaTk2NWcgPSAxLCAuaXNfZzR4ID0gMSwgLmlzX2k5eHggPSAxLCAubmVlZF9nZnhfaHdzID0gMSwKKwkuaGFzX3BpcGVfY3hzciA9IDEsCisJLmhhc19ob3RwbHVnID0gMSwKK307CisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfZ200NV9pbmZvID0geworCS5pc19pOTY1ZyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfZzR4ID0gMSwgLmlzX2k5eHggPSAxLAorCS5pc19tb2JpbGUgPSAxLCAubmVlZF9nZnhfaHdzID0gMSwgLmhhc19mYmMgPSAxLCAuaGFzX3JjNiA9IDEsCisJLmhhc19waXBlX2N4c3IgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3BpbmV2aWV3X2luZm8gPSB7CisJLmlzX2czMyA9IDEsIC5pc19waW5ldmlldyA9IDEsIC5pc19tb2JpbGUgPSAxLCAuaXNfaTl4eCA9IDEsCisJLmhhc19waXBlX2N4c3IgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2lyb25sYWtlX2RfaW5mbyA9IHsKKwkuaXNfaXJvbmxha2UgPSAxLCAuaXNfaTk2NWcgPSAxLCAuaXNfaTl4eCA9IDEsIC5uZWVkX2dmeF9od3MgPSAxLAorCS5oYXNfcGlwZV9jeHNyID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pcm9ubGFrZV9tX2luZm8gPSB7CisJLmlzX2lyb25sYWtlID0gMSwgLmlzX21vYmlsZSA9IDEsIC5pc19pOTY1ZyA9IDEsIC5pc19pOXh4ID0gMSwKKwkubmVlZF9nZnhfaHdzID0gMSwgLmhhc19yYzYgPSAxLAorCS5oYXNfaG90cGx1ZyA9IDEsCit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpaWRsaXN0W10gPSB7CisJSU5URUxfVkdBX0RFVklDRSgweDM1NzcsICZpbnRlbF9pODMwX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTYyLCAmaW50ZWxfODQ1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MzU4MiwgJmludGVsX2k4NXhfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDM1ZTgsICZpbnRlbF9pODV4X2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTcyLCAmaW50ZWxfaTg2NWdfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI1ODIsICZpbnRlbF9pOTE1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjU4YSwgJmludGVsX2k5MTVnX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNTkyLCAmaW50ZWxfaTkxNWdtX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyNzcyLCAmaW50ZWxfaTk0NWdfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI3YTIsICZpbnRlbF9pOTQ1Z21faW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI3YWUsICZpbnRlbF9pOTQ1Z21faW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI5NzIsICZpbnRlbF9pOTY1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4Mjk4MiwgJmludGVsX2k5NjVnX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgyOTkyLCAmaW50ZWxfaTk2NWdfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDI5YTIsICZpbnRlbF9pOTY1Z19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjliMiwgJmludGVsX2czM19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjljMiwgJmludGVsX2czM19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MjlkMiwgJmludGVsX2czM19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MmEwMiwgJmludGVsX2k5NjVnbV9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MmExMiwgJmludGVsX2k5NjVnbV9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MmE0MiwgJmludGVsX2dtNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMDIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMTIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMjIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlMzIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweDJlNDIsICZpbnRlbF9nNDVfaW5mbyksCisJSU5URUxfVkdBX0RFVklDRSgweGEwMDEsICZpbnRlbF9waW5ldmlld19pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4YTAxMSwgJmludGVsX3BpbmV2aWV3X2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgwMDQyLCAmaW50ZWxfaXJvbmxha2VfZF9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MDA0NiwgJmludGVsX2lyb25sYWtlX21faW5mbyksCisJezAsIDAsIDB9CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFJNX0k5MTVfS01TKQpAQCAtMjg0LDYgKzM5OSw1MiBAQAogCXJldHVybiBpOTE1X3Jlc3VtZShkZXYpOwogfQogCitzdGF0aWMgaW50CitpOTE1X3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19TVVNQRU5EKTsKK30KKworc3RhdGljIGludAoraTkxNV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBpOTE1X3BjaV9yZXN1bWUodG9fcGNpX2RldihkZXYpKTsKK30KKworc3RhdGljIGludAoraTkxNV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBpOTE1X3BjaV9zdXNwZW5kKHRvX3BjaV9kZXYoZGV2KSwgUE1TR19GUkVFWkUpOworfQorCitzdGF0aWMgaW50CitpOTE1X3BtX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIHRoYXcgZHVyaW5nIGhpYmVybmF0ZSwgZG8gbm90aGluZyEgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGk5MTVfcGNpX3N1c3BlbmQodG9fcGNpX2RldihkZXYpLCBQTVNHX0hJQkVSTkFURSk7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGk5MTVfcGNpX3Jlc3VtZSh0b19wY2lfZGV2KGRldikpOworfQorCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpOTE1X3BtX29wcyA9IHsKKyAgICAgLnN1c3BlbmQgPSBpOTE1X3BtX3N1c3BlbmQsCisgICAgIC5yZXN1bWUgPSBpOTE1X3BtX3Jlc3VtZSwKKyAgICAgLmZyZWV6ZSA9IGk5MTVfcG1fZnJlZXplLAorICAgICAudGhhdyA9IGk5MTVfcG1fdGhhdywKKyAgICAgLnBvd2Vyb2ZmID0gaTkxNV9wbV9wb3dlcm9mZiwKKyAgICAgLnJlc3RvcmUgPSBpOTE1X3BtX3Jlc3RvcmUsCit9OworCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGk5MTVfZ2VtX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpOTE1X2dlbV9mYXVsdCwKIAkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKQEAgLTMyOSw3ICs0OTAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX2dlbV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApAQCAtMzQ0LDEwICs1MDUsNyBAQAogCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAogCQkgLnByb2JlID0gaTkxNV9wY2lfcHJvYmUsCiAJCSAucmVtb3ZlID0gaTkxNV9wY2lfcmVtb3ZlLAotI2lmZGVmIENPTkZJR19QTQotCQkgLnJlc3VtZSA9IGk5MTVfcGNpX3Jlc3VtZSwKLQkJIC5zdXNwZW5kID0gaTkxNV9wY2lfc3VzcGVuZCwKLSNlbmRpZgorCQkgLmRyaXZlci5wbSA9ICZpOTE1X3BtX29wcywKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGZiZWNhYzcuLjI5ZGQ2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTcyLDkgKzE3MiwzMSBAQAogCiBzdHJ1Y3QgaW50ZWxfb3ZlcmxheTsKIAorc3RydWN0IGludGVsX2RldmljZV9pbmZvIHsKKwl1OCBpc19tb2JpbGUgOiAxOworCXU4IGlzX2k4eHggOiAxOworCXU4IGlzX2k5MTVnIDogMTsKKwl1OCBpc19pOXh4IDogMTsKKwl1OCBpc19pOTQ1Z20gOiAxOworCXU4IGlzX2k5NjVnIDogMTsKKwl1OCBpc19pOTY1Z20gOiAxOworCXU4IGlzX2czMyA6IDE7CisJdTggbmVlZF9nZnhfaHdzIDogMTsKKwl1OCBpc19nNHggOiAxOworCXU4IGlzX3BpbmV2aWV3IDogMTsKKwl1OCBpc19pcm9ubGFrZSA6IDE7CisJdTggaGFzX2ZiYyA6IDE7CisJdTggaGFzX3JjNiA6IDE7CisJdTggaGFzX3BpcGVfY3hzciA6IDE7CisJdTggaGFzX2hvdHBsdWcgOiAxOworCXU4IGN1cnNvcl9uZWVkc19waHlzaWNhbCA6IDE7Cit9OworCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCisJY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvICppbmZvOworCiAJaW50IGhhc19nZW07CiAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CkBAIC0yMzIsOCArMjU0LDYgQEAKIAlpbnQgaGFuZ2NoZWNrX2NvdW50OwogCXVpbnQzMl90IGxhc3RfYWN0aGQ7CiAKLQlib29sIGN1cnNvcl9uZWVkc19waHlzaWNhbDsKLQogCXN0cnVjdCBkcm1fbW0gdnJhbTsKIAogCXVuc2lnbmVkIGxvbmcgY2ZiX3NpemU7CkBAIC0yODcsOCArMzA3LDYgQEAKIAl1MzIgc2F2ZURTUEFDTlRSOwogCXUzMiBzYXZlRFNQQkNOVFI7CiAJdTMyIHNhdmVEU1BBUkI7Ci0JdTMyIHNhdmVSRU5ERVJTVEFOREJZOwotCXUzMiBzYXZlUFdSQ1RYQTsKIAl1MzIgc2F2ZUhXUzsKIAl1MzIgc2F2ZVBJUEVBQ09ORjsKIAl1MzIgc2F2ZVBJUEVCQ09ORjsKQEAgLTU2MSw2ICs1NzksNyBAQAogCXUxNiBvcmlnX2Nsb2NrOwogCWludCBjaGlsZF9kZXZfbnVtOwogCXN0cnVjdCBjaGlsZF9kZXZpY2VfY29uZmlnICpjaGlsZF9kZXY7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmludF9sdmRzX2Nvbm5lY3RvcjsKIH0gZHJtX2k5MTVfcHJpdmF0ZV90OwogCiAvKiogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlIGF0dGFjaGVkIHRvIGVhY2ggZHJtX2dlbV9vYmplY3QgKi8KQEAgLTc5NCw2ICs4MTMsOCBAQAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBpbnQgaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2V4ZWNidWZmZXIyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IGk5MTVfZ2VtX3Bpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IGk5MTVfZ2VtX3VucGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC04NjAsNiArODgxLDkgQEAKIHZvaWQgaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiB2b2lkIGk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK2Jvb2wgaTkxNV90aWxpbmdfb2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0cmlkZSwgaW50IHNpemUsCisJCSAgICBpbnQgdGlsaW5nX21vZGUpOworYm9vbCBpOTE1X29ial9mZW5jZWFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCiAvKiBpOTE1X2dlbV9kZWJ1Zy5jICovCiB2b2lkIGk5MTVfZ2VtX2R1bXBfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLApAQCAtOTgyLDY3ICsxMDA2LDMzIEBACiBleHRlcm4gaW50IGk5MTVfd3JhcF9yaW5nKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiBpbnQgaTkxNV93YWl0X3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwogCi0jZGVmaW5lIElTX0k4MzAoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQotI2RlZmluZSBJU184NDVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKLSNkZWZpbmUgSVNfSTg1WChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDM1ODIpCi0jZGVmaW5lIElTX0k4NjVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU3MikKLSNkZWZpbmUgSVNfSThYWChkZXYpIChJU19JODMwKGRldikgfHwgSVNfODQ1RyhkZXYpIHx8IElTX0k4NVgoZGV2KSB8fCBJU19JODY1RyhkZXYpKQorI2RlZmluZSBJTlRFTF9JTkZPKGRldikJKCgoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKikgKGRldiktPmRldl9wcml2YXRlKS0+aW5mbykKIAotI2RlZmluZSBJU19JOTE1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI1ODIgfHwgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNThhKQotI2RlZmluZSBJU19JOTE1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTkyKQotI2RlZmluZSBJU19JOTQ1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI3NzIpCi0jZGVmaW5lIElTX0k5NDVHTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI3QTIgfHxcCi0JCSAgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyN0FFKQotI2RlZmluZSBJU19JOTY1RyhkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5NzIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOTgyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4Mjk5MiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5QTIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTAyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkExMiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTAyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUxMiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMjIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTMyIHx8IFwKLQkJICAgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkU0MiB8fCBcCi0JCSAgICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDAwNDIgfHwgXAotCQkgICAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgwMDQ2KQotCi0jZGVmaW5lIElTX0k5NjVHTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBMDIgfHwgXAotCQkJKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTEyKQotCi0jZGVmaW5lIElTX0dNNDUoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyKQotCi0jZGVmaW5lIElTX0c0WChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMDIgfHwgXAotCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUxMiB8fCBcCi0JCSAgICAgKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyRTIyIHx8IFwKLQkJICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMzIgfHwgXAotCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkU0MiB8fCBcCi0JCSAgICAgSVNfR000NShkZXYpKQotCi0jZGVmaW5lIElTX1BJTkVWSUVXX0coZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDAxKQotI2RlZmluZSBJU19QSU5FVklFV19NKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4YTAxMSkKLSNkZWZpbmUgSVNfUElORVZJRVcoZGV2KSAoSVNfUElORVZJRVdfRyhkZXYpIHx8IElTX1BJTkVWSUVXX00oZGV2KSkKLQotI2RlZmluZSBJU19HMzMoZGV2KSAgICAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUMyIHx8CVwKLQkJCShkZXYpLT5wY2lfZGV2aWNlID09IDB4MjlCMiB8fAlcCi0JCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5RDIgfHwgIFwKLQkJCShJU19QSU5FVklFVyhkZXYpKSkKLQorI2RlZmluZSBJU19JODMwKGRldikJCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDM1NzcpCisjZGVmaW5lIElTXzg0NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKKyNkZWZpbmUgSVNfSTg1WChkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTgyKQorI2RlZmluZSBJU19JODY1RyhkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTcyKQorI2RlZmluZSBJU19JOFhYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k4eHgpCisjZGVmaW5lIElTX0k5MTVHKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5MTVnKQorI2RlZmluZSBJU19JOTE1R00oZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU5MikKKyNkZWZpbmUgSVNfSTk0NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4Mjc3MikKKyNkZWZpbmUgSVNfSTk0NUdNKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k5NDVnbSkKKyNkZWZpbmUgSVNfSTk2NUcoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTk2NWcpCisjZGVmaW5lIElTX0k5NjVHTShkZXYpCQkoSU5URUxfSU5GTyhkZXYpLT5pc19pOTY1Z20pCisjZGVmaW5lIElTX0dNNDUoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkE0MikKKyNkZWZpbmUgSVNfRzRYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2c0eCkKKyNkZWZpbmUgSVNfUElORVZJRVdfRyhkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweGEwMDEpCisjZGVmaW5lIElTX1BJTkVWSUVXX00oZGV2KQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDExKQorI2RlZmluZSBJU19QSU5FVklFVyhkZXYpCShJTlRFTF9JTkZPKGRldiktPmlzX3BpbmV2aWV3KQorI2RlZmluZSBJU19HMzMoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfZzMzKQogI2RlZmluZSBJU19JUk9OTEFLRV9EKGRldikJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MDA0MikKICNkZWZpbmUgSVNfSVJPTkxBS0VfTShkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDAwNDYpCi0jZGVmaW5lIElTX0lST05MQUtFKGRldikJKElTX0lST05MQUtFX0QoZGV2KSB8fCBJU19JUk9OTEFLRV9NKGRldikpCisjZGVmaW5lIElTX0lST05MQUtFKGRldikJKElOVEVMX0lORk8oZGV2KS0+aXNfaXJvbmxha2UpCisjZGVmaW5lIElTX0k5WFgoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTl4eCkKKyNkZWZpbmUgSVNfTU9CSUxFKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX21vYmlsZSkKIAotI2RlZmluZSBJU19JOVhYKGRldikgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwgSVNfSTk0NUcoZGV2KSB8fCBcCi0JCSAgICAgIElTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHKGRldikgfHwgSVNfRzMzKGRldikgfHwgXAotCQkgICAgICBJU19JUk9OTEFLRShkZXYpKQorI2RlZmluZSBJOTE1X05FRURfR0ZYX0hXUyhkZXYpCShJTlRFTF9JTkZPKGRldiktPm5lZWRfZ2Z4X2h3cykKIAotI2RlZmluZSBJU19NT0JJTEUoZGV2KSAoSVNfSTgzMChkZXYpIHx8IElTX0k4NVgoZGV2KSB8fCBJU19JOTE1R00oZGV2KSB8fCBcCi0JCQlJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgXAotCQkJSVNfUElORVZJRVcoZGV2KSB8fCBJU19JUk9OTEFLRV9NKGRldikpCi0KLSNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSAoSVNfRzMzKGRldikgfHwgSVNfR000NShkZXYpIHx8IElTX0c0WChkZXYpIHx8IFwKLQkJCQlJU19JUk9OTEFLRShkZXYpKQogLyogV2l0aCB0aGUgOTQ1IGFuZCBsYXRlciwgWSB0aWxpbmcgZ290IGFkanVzdGVkIHNvIHRoYXQgaXQgd2FzIDMyIDEyOC1ieXRlCiAgKiByb3dzLCB3aGljaCBjaGFuZ2VkIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZCBmZW5jZSBwcm9ncmFtbWluZy4KICAqLwpAQCAtMTA1NCwxNyArMTA0NCwxNCBAQAogI2RlZmluZSBTVVBQT1JUU19FRFAoZGV2KQkJKElTX0lST05MQUtFX00oZGV2KSkKICNkZWZpbmUgU1VQUE9SVFNfVFYoZGV2KQkJKElTX0k5WFgoZGV2KSAmJiBJU19NT0JJTEUoZGV2KSAmJiBcCiAJCQkJCSFJU19JUk9OTEFLRShkZXYpICYmICFJU19QSU5FVklFVyhkZXYpKQotI2RlZmluZSBJOTE1X0hBU19IT1RQTFVHKGRldikgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfRzMzKGRldikgfHwgSVNfSTk2NUcoZGV2KSkKKyNkZWZpbmUgSTkxNV9IQVNfSE9UUExVRyhkZXYpCQkgKElOVEVMX0lORk8oZGV2KS0+aGFzX2hvdHBsdWcpCiAvKiBkc3BhcmIgY29udHJvbGxlZCBieSBodyBvbmx5ICovCiAjZGVmaW5lIERTUEFSQl9IV0NPTlRST0woZGV2KSAoSVNfRzRYKGRldikgfHwgSVNfSVJPTkxBS0UoZGV2KSkKIAogI2RlZmluZSBIQVNfRldfQkxDKGRldikgKElTX0k5WFgoZGV2KSB8fCBJU19HNFgoZGV2KSB8fCBJU19JUk9OTEFLRShkZXYpKQotI2RlZmluZSBIQVNfUElQRV9DWFNSKGRldikgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikpCi0jZGVmaW5lIEk5MTVfSEFTX0ZCQyhkZXYpIChJU19NT0JJTEUoZGV2KSAmJiBcCi0JCQkgICAoSVNfSTlYWChkZXYpIHx8IElTX0dNNDUoZGV2KSkgJiYgXAotCQkJICAgIUlTX1BJTkVWSUVXKGRldikgJiYgXAotCQkJICAgIUlTX0lST05MQUtFKGRldikpCi0jZGVmaW5lIEk5MTVfSEFTX1JDNihkZXYpIChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgSVNfSVJPTkxBS0VfTShkZXYpKQorI2RlZmluZSBIQVNfUElQRV9DWFNSKGRldikgKElOVEVMX0lORk8oZGV2KS0+aGFzX3BpcGVfY3hzcikKKyNkZWZpbmUgSTkxNV9IQVNfRkJDKGRldikgKElOVEVMX0lORk8oZGV2KS0+aGFzX2ZiYykKKyNkZWZpbmUgSTkxNV9IQVNfUkM2KGRldikgKElOVEVMX0lORk8oZGV2KS0+aGFzX3JjNikKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggOGM0NjNjZi4uMjc0ODYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0yMDIxLDkgKzIwMjEsNiBAQAogCS8qIGJsb3cgYXdheSBtYXBwaW5ncyBpZiBtYXBwZWQgdGhyb3VnaCBHVFQgKi8KIAlpOTE1X2dlbV9yZWxlYXNlX21tYXAob2JqKTsKIAotCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCi0JCWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhvYmopOwotCiAJLyogTW92ZSB0aGUgb2JqZWN0IHRvIHRoZSBDUFUgZG9tYWluIHRvIGVuc3VyZSB0aGF0CiAJICogYW55IHBvc3NpYmxlIENQVSB3cml0ZXMgd2hpbGUgaXQncyBub3QgaW4gdGhlIEdUVAogCSAqIGFyZSBmbHVzaGVkIHdoZW4gd2UgZ28gdG8gcmVtYXAgaXQuIFRoaXMgd2lsbApAQCAtMjAzOSw2ICsyMDM2LDEwIEBACiAKIAlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CiAKKwkvKiByZWxlYXNlIHRoZSBmZW5jZSByZWcgX2FmdGVyXyBmbHVzaGluZyAqLworCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpCisJCWk5MTVfZ2VtX2NsZWFyX2ZlbmNlX3JlZyhvYmopOworCiAJaWYgKG9ial9wcml2LT5hZ3BfbWVtICE9IE5VTEwpIHsKIAkJZHJtX3VuYmluZF9hZ3Aob2JqX3ByaXYtPmFncF9tZW0pOwogCQlkcm1fZnJlZV9hZ3Aob2JqX3ByaXYtPmFncF9tZW0sIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CkBAIC0yNTgxLDkgKzI1ODIsNiBAQAogCWJvb2wgcmV0cnlfYWxsb2MgPSBmYWxzZTsKIAlpbnQgcmV0OwogCi0JaWYgKGRldl9wcml2LT5tbS5zdXNwZW5kZWQpCi0JCXJldHVybiAtRUJVU1k7Ci0KIAlpZiAob2JqX3ByaXYtPm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEKSB7CiAJCURSTV9FUlJPUigiQXR0ZW1wdGluZyB0byBiaW5kIGEgcHVyZ2VhYmxlIG9iamVjdFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzE5OCw3ICszMTk2LDcgQEAKIHN0YXRpYyBpbnQKIGk5MTVfZ2VtX29iamVjdF9waW5fYW5kX3JlbG9jYXRlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZW50cnksCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICplbnRyeSwKIAkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwpAQCAtMzIwNiwxMiArMzIwNCwzNSBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJaW50IGksIHJldDsKIAl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2U7CisJYm9vbCBuZWVkX2ZlbmNlOworCisJbmVlZF9mZW5jZSA9IGVudHJ5LT5mbGFncyAmIEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFICYmCisJICAgICAgICAgICAgIG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FOworCisJLyogQ2hlY2sgZmVuY2UgcmVnIGNvbnN0cmFpbnRzIGFuZCByZWJpbmQgaWYgbmVjZXNzYXJ5ICovCisJaWYgKG5lZWRfZmVuY2UgJiYgIWk5MTVfb2JqX2ZlbmNlYWJsZShkZXYsIG9iaikpCisJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKIAogCS8qIENob29zZSB0aGUgR1RUIG9mZnNldCBmb3Igb3VyIGJ1ZmZlciBhbmQgcHV0IGl0IHRoZXJlLiAqLwogCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW4ob2JqLCAodWludDMyX3QpIGVudHJ5LT5hbGlnbm1lbnQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIFByZS05NjUgY2hpcHMgbmVlZCBhIGZlbmNlIHJlZ2lzdGVyIHNldCB1cCBpbiBvcmRlciB0bworCSAqIHByb3Blcmx5IGhhbmRsZSBibGl0cyB0by9mcm9tIHRpbGVkIHN1cmZhY2VzLgorCSAqLworCWlmIChuZWVkX2ZlbmNlKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnKG9iaik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJaWYgKHJldCAhPSAtRUJVU1kgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUykKKwkJCQlEUk1fRVJST1IoIkZhaWx1cmUgdG8gaW5zdGFsbCBmZW5jZTogJWRcbiIsCisJCQkJCSAgcmV0KTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwogCWVudHJ5LT5vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKIAogCS8qIEFwcGx5IHRoZSByZWxvY2F0aW9ucywgdXNpbmcgdGhlIEdUVCBhcGVydHVyZSB0byBhdm9pZCBjYWNoZQpAQCAtMzM3Myw3ICszMzk0LDcgQEAKICAqLwogc3RhdGljIGludAogaTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICpleGVjLAorCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlYywKIAkJCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMsCiAJCQkgICAgICB1aW50NjRfdCBleGVjX29mZnNldCkKIHsKQEAgLTM0NjMsNyArMzQ4NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2dldF9yZWxvY3NfZnJvbV91c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCwKK2k5MTVfZ2VtX2dldF9yZWxvY3NfZnJvbV91c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX2xpc3QsCiAJCQkgICAgICB1aW50MzJfdCBidWZmZXJfY291bnQsCiAJCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKipyZWxvY3MpCiB7CkBAIC0zNDc4LDggKzM0OTksMTAgQEAKIAl9CiAKIAkqcmVsb2NzID0gZHJtX2NhbGxvY19sYXJnZShyZWxvY19jb3VudCwgc2l6ZW9mKCoqcmVsb2NzKSk7Ci0JaWYgKCpyZWxvY3MgPT0gTlVMTCkKKwlpZiAoKnJlbG9jcyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jIHJlbG9jcywgY291bnQgJWRcbiIsIHJlbG9jX2NvdW50KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnVzZXJfcmVsb2NzOwpAQCAtMzUwMyw3ICszNTI2LDcgQEAKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fcHV0X3JlbG9jc190b191c2VyKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCwKK2k5MTVfZ2VtX3B1dF9yZWxvY3NfdG9fdXNlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19saXN0LAogCQkJICAgIHVpbnQzMl90IGJ1ZmZlcl9jb3VudCwKIAkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcykKIHsKQEAgLTM1MzYsNyArMzU1OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2NoZWNrX2V4ZWNidWZmZXIgKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqZXhlYywKK2k5MTVfZ2VtX2NoZWNrX2V4ZWNidWZmZXIgKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWMsCiAJCQkgICB1aW50NjRfdCBleGVjX29mZnNldCkKIHsKIAl1aW50MzJfdCBleGVjX3N0YXJ0LCBleGVjX2xlbjsKQEAgLTM1ODksMTggKzM2MTIsMTggQEAKIH0KIAogaW50Ci1pOTE1X2dlbV9leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK2k5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncywKKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVjX2xpc3QpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICphcmdzID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QgPSBOVUxMOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9iamVjdF9saXN0ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmJhdGNoX29iajsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyA9IE5VTEw7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3M7Ci0JaW50IHJldCwgcmV0MiwgaSwgcGlubmVkID0gMDsKKwlpbnQgcmV0ID0gMCwgcmV0MiwgaSwgcGlubmVkID0gMDsKIAl1aW50NjRfdCBleGVjX29mZnNldDsKIAl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWlucywgcmVsb2NfaW5kZXg7CiAJaW50IHBpbl90cmllcywgZmxpcHM7CkBAIC0zNjE0LDI1ICszNjM3LDEzIEBACiAJCURSTV9FUlJPUigiZXhlY2J1ZiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQkvKiBDb3B5IGluIHRoZSBleGVjIGxpc3QgZnJvbSB1c2VybGFuZCAqLwotCWV4ZWNfbGlzdCA9IGRybV9tYWxsb2NfYWIoc2l6ZW9mKCpleGVjX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQpOwogCW9iamVjdF9saXN0ID0gZHJtX21hbGxvY19hYihzaXplb2YoKm9iamVjdF9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKLQlpZiAoZXhlY19saXN0ID09IE5VTEwgfHwgb2JqZWN0X2xpc3QgPT0gTlVMTCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBleGVjIG9yIG9iamVjdCBsaXN0ICIKLQkJCSAgImZvciAlZCBidWZmZXJzXG4iLAorCWlmIChvYmplY3RfbGlzdCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIG9iamVjdCBsaXN0IGZvciAlZCBidWZmZXJzXG4iLAogCQkJICBhcmdzLT5idWZmZXJfY291bnQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIHByZV9tdXRleF9lcnI7CiAJfQotCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWNfbGlzdCwKLQkJCSAgICAgKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQotCQkJICAgICAodWludHB0cl90KSBhcmdzLT5idWZmZXJzX3B0ciwKLQkJCSAgICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFJNX0VSUk9SKCJjb3B5ICVkIGV4ZWMgZW50cmllcyBmYWlsZWQgJWRcbiIsCi0JCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKLQkJZ290byBwcmVfbXV0ZXhfZXJyOwotCX0KIAogCWlmIChhcmdzLT5udW1fY2xpcHJlY3RzICE9IDApIHsKIAkJY2xpcHJlY3RzID0ga2NhbGxvYyhhcmdzLT5udW1fY2xpcHJlY3RzLCBzaXplb2YoKmNsaXByZWN0cyksCkBAIC0zODg0LDIwICszODk1LDYgQEAKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JaWYgKCFyZXQpIHsKLQkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCi0JCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IGRybV9pOTE1X3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCi0JCQkJICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCi0JCQkJICAgZXhlY19saXN0LAotCQkJCSAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7Ci0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCi0JCQkJICAiYmFjayB0byB1c2VyICglZClcbiIsCi0JCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7Ci0JCX0KLQl9Ci0KIAkvKiBDb3B5IHRoZSB1cGRhdGVkIHJlbG9jYXRpb25zIG91dCByZWdhcmRsZXNzIG9mIGN1cnJlbnQgZXJyb3IKIAkgKiBzdGF0ZS4gIEZhaWx1cmUgdG8gdXBkYXRlIHRoZSByZWxvY3Mgd291bGQgbWVhbiB0aGF0IHRoZSBuZXh0CiAJICogdGltZSB1c2VybGFuZCBjYWxscyBleGVjYnVmLCBpdCB3b3VsZCBkbyBzbyB3aXRoIHByZXN1bWVkIG9mZnNldApAQCAtMzkxNCwxMiArMzkxMSwxNTggQEAKIAogcHJlX211dGV4X2VycjoKIAlkcm1fZnJlZV9sYXJnZShvYmplY3RfbGlzdCk7Ci0JZHJtX2ZyZWVfbGFyZ2UoZXhlY19saXN0KTsKIAlrZnJlZShjbGlwcmVjdHMpOwogCiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIExlZ2FjeSBleGVjYnVmZmVyIGp1c3QgY3JlYXRlcyBhbiBleGVjMiBsaXN0IGZyb20gdGhlIG9yaWdpbmFsIGV4ZWMgb2JqZWN0CisgKiBsaXN0IGFycmF5IGFuZCBwYXNzZXMgaXQgdG8gdGhlIHJlYWwgZnVuY3Rpb24uCisgKi8KK2ludAoraTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWMyOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmV4ZWNfbGlzdCA9IE5VTEw7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMyX2xpc3QgPSBOVUxMOworCWludCByZXQsIGk7CisKKyNpZiBXQVRDSF9FWEVDCisJRFJNX0lORk8oImJ1ZmZlcnNfcHRyICVkIGJ1ZmZlcl9jb3VudCAlZCBsZW4gJTA4eFxuIiwKKwkJICAoaW50KSBhcmdzLT5idWZmZXJzX3B0ciwgYXJncy0+YnVmZmVyX2NvdW50LCBhcmdzLT5iYXRjaF9sZW4pOworI2VuZGlmCisKKwlpZiAoYXJncy0+YnVmZmVyX2NvdW50IDwgMSkgeworCQlEUk1fRVJST1IoImV4ZWNidWYgd2l0aCAlZCBidWZmZXJzXG4iLCBhcmdzLT5idWZmZXJfY291bnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDb3B5IGluIHRoZSBleGVjIGxpc3QgZnJvbSB1c2VybGFuZCAqLworCWV4ZWNfbGlzdCA9IGRybV9tYWxsb2NfYWIoc2l6ZW9mKCpleGVjX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQpOworCWV4ZWMyX2xpc3QgPSBkcm1fbWFsbG9jX2FiKHNpemVvZigqZXhlYzJfbGlzdCksIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKGV4ZWNfbGlzdCA9PSBOVUxMIHx8IGV4ZWMyX2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBleGVjIGxpc3QgZm9yICVkIGJ1ZmZlcnNcbiIsCisJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCWRybV9mcmVlX2xhcmdlKGV4ZWNfbGlzdCk7CisJCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gY29weV9mcm9tX3VzZXIoZXhlY19saXN0LAorCQkJICAgICAoc3RydWN0IGRybV9pOTE1X3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCQkgICAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJICAgICBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOworCWlmIChyZXQgIT0gMCkgeworCQlEUk1fRVJST1IoImNvcHkgJWQgZXhlYyBlbnRyaWVzIGZhaWxlZCAlZFxuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOworCQlkcm1fZnJlZV9sYXJnZShleGVjX2xpc3QpOworCQlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCWV4ZWMyX2xpc3RbaV0uaGFuZGxlID0gZXhlY19saXN0W2ldLmhhbmRsZTsKKwkJZXhlYzJfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50ID0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CisJCWV4ZWMyX2xpc3RbaV0ucmVsb2NzX3B0ciA9IGV4ZWNfbGlzdFtpXS5yZWxvY3NfcHRyOworCQlleGVjMl9saXN0W2ldLmFsaWdubWVudCA9IGV4ZWNfbGlzdFtpXS5hbGlnbm1lbnQ7CisJCWV4ZWMyX2xpc3RbaV0ub2Zmc2V0ID0gZXhlY19saXN0W2ldLm9mZnNldDsKKwkJaWYgKCFJU19JOTY1RyhkZXYpKQorCQkJZXhlYzJfbGlzdFtpXS5mbGFncyA9IEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFOworCQllbHNlCisJCQlleGVjMl9saXN0W2ldLmZsYWdzID0gMDsKKwl9CisKKwlleGVjMi5idWZmZXJzX3B0ciA9IGFyZ3MtPmJ1ZmZlcnNfcHRyOworCWV4ZWMyLmJ1ZmZlcl9jb3VudCA9IGFyZ3MtPmJ1ZmZlcl9jb3VudDsKKwlleGVjMi5iYXRjaF9zdGFydF9vZmZzZXQgPSBhcmdzLT5iYXRjaF9zdGFydF9vZmZzZXQ7CisJZXhlYzIuYmF0Y2hfbGVuID0gYXJncy0+YmF0Y2hfbGVuOworCWV4ZWMyLkRSMSA9IGFyZ3MtPkRSMTsKKwlleGVjMi5EUjQgPSBhcmdzLT5EUjQ7CisJZXhlYzIubnVtX2NsaXByZWN0cyA9IGFyZ3MtPm51bV9jbGlwcmVjdHM7CisJZXhlYzIuY2xpcHJlY3RzX3B0ciA9IGFyZ3MtPmNsaXByZWN0c19wdHI7CisJZXhlYzIuZmxhZ3MgPSAwOworCisJcmV0ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihkZXYsIGRhdGEsIGZpbGVfcHJpdiwgJmV4ZWMyLCBleGVjMl9saXN0KTsKKwlpZiAoIXJldCkgeworCQkvKiBDb3B5IHRoZSBuZXcgYnVmZmVyIG9mZnNldHMgYmFjayB0byB0aGUgdXNlcidzIGV4ZWMgbGlzdC4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKQorCQkJZXhlY19saXN0W2ldLm9mZnNldCA9IGV4ZWMyX2xpc3RbaV0ub2Zmc2V0OworCQkvKiAuLi4gYW5kIGJhY2sgb3V0IHRvIHVzZXJzcGFjZSAqLworCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBkcm1faTkxNV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqKQorCQkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJCSAgIGV4ZWNfbGlzdCwKKwkJCQkgICBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY29weSAlZCBleGVjIGVudHJpZXMgIgorCQkJCSAgImJhY2sgdG8gdXNlciAoJWQpXG4iLAorCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOworCQl9CisJfSBlbHNlIHsKKwkJRFJNX0VSUk9SKCJpOTE1X2dlbV9kb19leGVjYnVmZmVyIHJldHVybnMgJWRcbiIsIHJldCk7CisJfQorCisJZHJtX2ZyZWVfbGFyZ2UoZXhlY19saXN0KTsKKwlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2k5MTVfZ2VtX2V4ZWNidWZmZXIyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWMyX2xpc3QgPSBOVUxMOworCWludCByZXQ7CisKKyNpZiBXQVRDSF9FWEVDCisJRFJNX0lORk8oImJ1ZmZlcnNfcHRyICVkIGJ1ZmZlcl9jb3VudCAlZCBsZW4gJTA4eFxuIiwKKwkJICAoaW50KSBhcmdzLT5idWZmZXJzX3B0ciwgYXJncy0+YnVmZmVyX2NvdW50LCBhcmdzLT5iYXRjaF9sZW4pOworI2VuZGlmCisKKwlpZiAoYXJncy0+YnVmZmVyX2NvdW50IDwgMSkgeworCQlEUk1fRVJST1IoImV4ZWNidWYyIHdpdGggJWQgYnVmZmVyc1xuIiwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXhlYzJfbGlzdCA9IGRybV9tYWxsb2NfYWIoc2l6ZW9mKCpleGVjMl9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAoZXhlYzJfbGlzdCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGV4ZWMgbGlzdCBmb3IgJWQgYnVmZmVyc1xuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4ZWMyX2xpc3QsCisJCQkgICAgIChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICAgIHNpemVvZigqZXhlYzJfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQpOworCWlmIChyZXQgIT0gMCkgeworCQlEUk1fRVJST1IoImNvcHkgJWQgZXhlYyBlbnRyaWVzIGZhaWxlZCAlZFxuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOworCQlkcm1fZnJlZV9sYXJnZShleGVjMl9saXN0KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0ID0gaTkxNV9nZW1fZG9fZXhlY2J1ZmZlcihkZXYsIGRhdGEsIGZpbGVfcHJpdiwgYXJncywgZXhlYzJfbGlzdCk7CisJaWYgKCFyZXQpIHsKKwkJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IGRybV9pOTE1X3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCQkJICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkJICAgZXhlYzJfbGlzdCwKKwkJCQkgICBzaXplb2YoKmV4ZWMyX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJaWYgKHJldCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNvcHkgJWQgZXhlYyBlbnRyaWVzICIKKwkJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCQkgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKKwkJfQorCX0KKworCWRybV9mcmVlX2xhcmdlKGV4ZWMyX2xpc3QpOworCXJldHVybiByZXQ7Cit9CisKIGludAogaTkxNV9nZW1fb2JqZWN0X3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdWludDMyX3QgYWxpZ25tZW50KQogewpAQCAtMzkzMywxOSArNDA3Niw3IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KLQkvKgotCSAqIFByZS05NjUgY2hpcHMgbmVlZCBhIGZlbmNlIHJlZ2lzdGVyIHNldCB1cCBpbiBvcmRlciB0bwotCSAqIHByb3Blcmx5IGhhbmRsZSB0aWxlZCBzdXJmYWNlcy4KLQkgKi8KLQlpZiAoIUlTX0k5NjVHKGRldikgJiYgb2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlpZiAocmV0ICE9IC1FQlVTWSAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQotCQkJCURSTV9FUlJPUigiRmFpbHVyZSB0byBpbnN0YWxsIGZlbmNlOiAlZFxuIiwKLQkJCQkJICByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KKwogCW9ial9wcml2LT5waW5fY291bnQrKzsKIAogCS8qIElmIHRoZSBvYmplY3QgaXMgbm90IGFjdGl2ZSBhbmQgbm90IHBlbmRpbmcgYSBmbHVzaCwKQEAgLTQ3MDgsNyArNDgzOSw3IEBACiAKIAlwaHlzX29iai0+aWQgPSBpZDsKIAotCXBoeXNfb2JqLT5oYW5kbGUgPSBkcm1fcGNpX2FsbG9jKGRldiwgc2l6ZSwgMCwgMHhmZmZmZmZmZik7CisJcGh5c19vYmotPmhhbmRsZSA9IGRybV9wY2lfYWxsb2MoZGV2LCBzaXplLCAwKTsKIAlpZiAoIXBoeXNfb2JqLT5oYW5kbGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBrZnJlZV9vYmo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDMwZDZhZjYuLmRmMjc4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0zMDQsMzUgKzMwNCwzOSBAQAogCiAKIC8qKgotICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmVuY2UgZm9yIGEgdGlsZWQgb2JqZWN0IG9mIHRoZSBnaXZlbiBzaXplLgorICogUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBpcyBjdXJyZW50bHkgZmVuY2VhYmxlLiAgSWYgbm90LCBpdCBtYXkgbmVlZAorICogdG8gYmUgdW5ib3VuZCBhbmQgaGF2ZSBpdHMgcGl0Y2ggYWRqdXN0ZWQuCiAgKi8KLXN0YXRpYyBpbnQKLWk5MTVfZ2V0X2ZlbmNlX3NpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHNpemUpCitib29sCitpOTE1X29ial9mZW5jZWFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaW50IGk7Ci0JaW50IHN0YXJ0OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAKIAlpZiAoSVNfSTk2NUcoZGV2KSkgewogCQkvKiBUaGUgOTY1IGNhbiBoYXZlIGZlbmNlcyBhdCBhbnkgcGFnZSBib3VuZGFyeS4gKi8KLQkJcmV0dXJuIEFMSUdOKHNpemUsIDQwOTYpOworCQlpZiAob2JqLT5zaXplICYgNDA5NSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmIChJU19JOVhYKGRldikpIHsKKwkJaWYgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykKKwkJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewotCQkvKiBBbGlnbiB0aGUgc2l6ZSB0byBhIHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4gdGhlIHNtYWxsZXN0Ci0JCSAqIGZlbmNlIHNpemUuCi0JCSAqLwotCQlpZiAoSVNfSTlYWChkZXYpKQotCQkJc3RhcnQgPSAxMDI0ICogMTAyNDsKLQkJZWxzZQotCQkJc3RhcnQgPSA1MTIgKiAxMDI0OwotCi0JCWZvciAoaSA9IHN0YXJ0OyBpIDwgc2l6ZTsgaSA8PD0gMSkKLQkJCTsKLQotCQlyZXR1cm4gaTsKKwkJaWYgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk4MzBfRkVOQ0VfU1RBUlRfTUFTSykKKwkJCXJldHVybiBmYWxzZTsKIAl9CisKKwkvKiBQb3dlciBvZiB0d28gc2l6ZWQuLi4gKi8KKwlpZiAob2JqLT5zaXplICYgKG9iai0+c2l6ZSAtIDEpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPYmplY3RzIG11c3QgYmUgc2l6ZSBhbGlnbmVkIGFzIHdlbGwgKi8KKwlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAob2JqLT5zaXplIC0gMSkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogQ2hlY2sgcGl0Y2ggY29uc3RyaWFudHMgZm9yIGFsbCBjaGlwcyAmIHRpbGluZyBmb3JtYXRzICovCi1zdGF0aWMgYm9vbAorYm9vbAogaTkxNV90aWxpbmdfb2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0cmlkZSwgaW50IHNpemUsIGludCB0aWxpbmdfbW9kZSkKIHsKIAlpbnQgdGlsZV93aWR0aDsKQEAgLTM4NCwxMiArMzg4LDYgQEAKIAlpZiAoc3RyaWRlICYgKHN0cmlkZSAtIDEpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBXZSBkb24ndCAwaGFuZGxlIHRoZSBhcGVydHVyZSBhcmVhIGNvdmVyZWQgYnkgdGhlIGZlbmNlIGJlaW5nIGJpZ2dlcgotCSAqIHRoYW4gdGhlIG9iamVjdCBzaXplLgotCSAqLwotCWlmIChpOTE1X2dldF9mZW5jZV9zaXplKGRldiwgc2l6ZSkgIT0gc2l6ZSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaW9jMzIuYwppbmRleCAxZmU2OGEyLi4xM2IwMjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pb2MzMi5jCkBAIC02Niw4ICs2Niw3IEBACiAJCQkgICZiYXRjaGJ1ZmZlci0+Y2xpcHJlY3RzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0k5MTVfQkFUQ0hCVUZGRVIsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9CQVRDSEJVRkZFUiwKIAkJCSAodW5zaWduZWQgbG9uZyliYXRjaGJ1ZmZlcik7CiB9CiAKQEAgLTEwMiw4ICsxMDEsOCBAQAogCQkJICAmY21kYnVmZmVyLT5jbGlwcmVjdHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9DTURCVUZGRVIsICh1bnNpZ25lZCBsb25nKWNtZGJ1ZmZlcik7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9DTURCVUZGRVIsCisJCQkgKHVuc2lnbmVkIGxvbmcpY21kYnVmZmVyKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfaXJxX2VtaXQzMiB7CkBAIC0xMjUsOCArMTI0LDggQEAKIAkJCSAgJnJlcXVlc3QtPmlycV9zZXEpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9JUlFfRU1JVCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9JUlFfRU1JVCwKKwkJCSAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtMzIgewogCWludCBwYXJhbTsKQEAgLTE0OSw4ICsxNDgsOCBAQAogCQkJICAmcmVxdWVzdC0+dmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwKKwkJCSAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2FsbG9jMzIgewpAQCAtMTc4LDggKzE3Nyw4IEBACiAJCQkgICZyZXF1ZXN0LT5yZWdpb25fb2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX0k5MTVfQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX0k5MTVfQUxMT0MsCisJCQkgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIGRybV9pb2N0bF9jb21wYXRfdCAqaTkxNV9jb21wYXRfaW9jdGxzW10gPSB7CkBAIC0yMTEsMTIgKzIxMCwxMCBAQAogCWlmIChuciA8IERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJSQVlfU0laRShpOTE1X2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IGk5MTVfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCi0JbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCiAJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA4NWY0YzVkLi43Y2Q4MTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTMxMyw2ICszMTMsOCBAQAogCQkJZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8gPSBzZXFubzsKIAkJCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGUoZGV2LCBzZXFubyk7CiAJCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+aXJxX3F1ZXVlKTsKKwkJCWRldl9wcml2LT5oYW5nY2hlY2tfY291bnQgPSAwOworCQkJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aGFuZ2NoZWNrX3RpbWVyLCBqaWZmaWVzICsgRFJNX0k5MTVfSEFOR0NIRUNLX1BFUklPRCk7CiAJCX0KIAogCQlpZiAoZGVfaWlyICYgREVfR1NFKQpAQCAtMTA4NCw2ICsxMDg2LDEwIEBACiAJKHZvaWQpIEk5MTVfUkVBRChJRVIpOwogfQogCisvKgorICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgaW50ZWxfbW9kZXNldF9pbml0IG9yIGhvdHBsdWcgaW50ZXJydXB0cyB3b24ndCBiZQorICogZW5hYmxlZCBjb3JyZWN0bHkuCisgKi8KIGludCBpOTE1X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTEwNiwxOSArMTExMiwyMyBAQAogCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKIAkJdTMyIGhvdHBsdWdfZW4gPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKIAotCQkvKiBMZWF2ZSBvdGhlciBiaXRzIGFsb25lICovCi0JCWhvdHBsdWdfZW4gfD0gSE9UUExVR19FTl9NQVNLOworCQkvKiBOb3RlIEhETUkgYW5kIERQIHNoYXJlIGJpdHMgKi8KKwkJaWYgKGRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrICYgSERNSUJfSE9UUExVR19JTlRfU1RBVFVTKQorCQkJaG90cGx1Z19lbiB8PSBIRE1JQl9IT1RQTFVHX0lOVF9FTjsKKwkJaWYgKGRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrICYgSERNSUNfSE9UUExVR19JTlRfU1RBVFVTKQorCQkJaG90cGx1Z19lbiB8PSBIRE1JQ19IT1RQTFVHX0lOVF9FTjsKKwkJaWYgKGRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrICYgSERNSURfSE9UUExVR19JTlRfU1RBVFVTKQorCQkJaG90cGx1Z19lbiB8PSBIRE1JRF9IT1RQTFVHX0lOVF9FTjsKKwkJaWYgKGRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrICYgU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTKQorCQkJaG90cGx1Z19lbiB8PSBTRFZPQ19IT1RQTFVHX0lOVF9FTjsKKwkJaWYgKGRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrICYgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTKQorCQkJaG90cGx1Z19lbiB8PSBTRFZPQl9IT1RQTFVHX0lOVF9FTjsKKwkJaWYgKGRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrICYgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUykKKwkJCWhvdHBsdWdfZW4gfD0gQ1JUX0hPVFBMVUdfSU5UX0VOOworCQkvKiBJZ25vcmUgVFYgc2luY2UgaXQncyBidWdneSAqLworCiAJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLCBob3RwbHVnX2VuKTsKIAotCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayA9IENSVF9IT1RQTFVHX0lOVF9TVEFUVVMgfAotCQkJVFZfSE9UUExVR19JTlRfU1RBVFVTIHwgU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTIHwKLQkJCVNEVk9CX0hPVFBMVUdfSU5UX1NUQVRVUzsKLQkJaWYgKElTX0c0WChkZXYpKSB7Ci0JCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PQotCQkJCUhETUlCX0hPVFBMVUdfSU5UX1NUQVRVUyB8Ci0JCQkJSERNSUNfSE9UUExVR19JTlRfU1RBVFVTIHwKLQkJCQlIRE1JRF9IT1RQTFVHX0lOVF9TVEFUVVM7Ci0JCX0KIAkJLyogRW5hYmxlIGluIElFUi4uLiAqLwogCQllbmFibGVfbWFzayB8PSBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQ7CiAJCS8qIGFuZCB1bm1hc2sgaW4gSU1SICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA5NzRiM2NmLi4xNDlkMzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTg3OSwxMyArODc5LDYgQEAKICNkZWZpbmUgQ1JUX0hPVFBMVUdfREVURUNUX1ZPTFRBR0VfNDc1TVYJKDEgPDwgMikKICNkZWZpbmUgQ1JUX0hPVFBMVUdfTUFTSwkJCSgweDNmYykgLyogQml0cyA5LTIgKi8KICNkZWZpbmUgQ1JUX0ZPUkNFX0hPVFBMVUdfTUFTSwkJCTB4ZmZmZmZlMWYKLSNkZWZpbmUgSE9UUExVR19FTl9NQVNLIChIRE1JQl9IT1RQTFVHX0lOVF9FTiB8IFwKLQkJCSBIRE1JQ19IT1RQTFVHX0lOVF9FTiB8CSAgXAotCQkJIEhETUlEX0hPVFBMVUdfSU5UX0VOIHwJICBcCi0JCQkgU0RWT0JfSE9UUExVR19JTlRfRU4gfAkgIFwKLQkJCSBTRFZPQ19IT1RQTFVHX0lOVF9FTiB8CSAgXAotCQkJIENSVF9IT1RQTFVHX0lOVF9FTikKLQogCiAjZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKICNkZWZpbmUgICBIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDI5KQpAQCAtOTgyLDYgKzk3NSw4IEBACiAjZGVmaW5lICAgTFZEU19QT1JUX0VOCQkJKDEgPDwgMzEpCiAvKiBTZWxlY3RzIHBpcGUgQiBmb3IgTFZEUyBkYXRhLiAgTXVzdCBiZSBzZXQgb24gcHJlLTk2NS4gKi8KICNkZWZpbmUgICBMVkRTX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCisvKiBMVkRTIGRpdGhlcmluZyBmbGFnIG9uIDk2NS9nNHggcGxhdGZvcm0gKi8KKyNkZWZpbmUgICBMVkRTX0VOQUJMRV9ESVRIRVIJCSgxIDw8IDI1KQogLyogRW5hYmxlIGJvcmRlciBmb3IgdW5zY2FsZWQgKG9yIGFzcGVjdC1zY2FsZWQpIGRpc3BsYXkgKi8KICNkZWZpbmUgICBMVkRTX0JPUkRFUl9FTkFCTEUJCSgxIDw8IDE1KQogLyoKQEAgLTE3NTEsNiArMTc0Niw4IEBACiAKIC8qIERpc3BsYXkgJiBjdXJzb3IgY29udHJvbCAqLwogCisvKiBkaXRoZXJpbmcgZmxhZyBvbiBJcm9ubGFrZSAqLworI2RlZmluZSBQSVBFX0VOQUJMRV9ESVRIRVIJKDEgPDwgNCkKIC8qIFBpcGUgQSAqLwogI2RlZmluZSBQSVBFQURTTAkJMHg3MDAwMAogI2RlZmluZSBQSVBFQUNPTkYJCTB4NzAwMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggZDVlYmIwMC4uYTNiOTBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTczMiwxMiArNzMyLDYgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldi0+cGRldiwgTEJCLCAmZGV2X3ByaXYtPnNhdmVMQkIpOwogCi0JLyogUmVuZGVyIFN0YW5kYnkgKi8KLQlpZiAoSTkxNV9IQVNfUkM2KGRldikpIHsKLQkJZGV2X3ByaXYtPnNhdmVSRU5ERVJTVEFOREJZID0gSTkxNV9SRUFEKE1DSEJBUl9SRU5ERVJfU1RBTkRCWSk7Ci0JCWRldl9wcml2LT5zYXZlUFdSQ1RYQSA9IEk5MTVfUkVBRChQV1JDVFhBKTsKLQl9Ci0KIAkvKiBIYXJkd2FyZSBzdGF0dXMgcGFnZSAqLwogCWRldl9wcml2LT5zYXZlSFdTID0gSTkxNV9SRUFEKEhXU19QR0EpOwogCkBAIC03OTMsMTIgKzc4Nyw2IEBACiAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsIGRldl9wcml2LT5zYXZlTEJCKTsKIAotCS8qIFJlbmRlciBTdGFuZGJ5ICovCi0JaWYgKEk5MTVfSEFTX1JDNihkZXYpKSB7Ci0JCUk5MTVfV1JJVEUoTUNIQkFSX1JFTkRFUl9TVEFOREJZLCBkZXZfcHJpdi0+c2F2ZVJFTkRFUlNUQU5EQlkpOwotCQlJOTE1X1dSSVRFKFBXUkNUWEEsIGRldl9wcml2LT5zYXZlUFdSQ1RYQSk7Ci0JfQotCiAJLyogSGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KIAlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zYXZlSFdTKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCA5ZjNkM2U1Li5kZGVmYzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtNTQ4LDQgKzU0OCw2IEBACiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2NydF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKIAogCWRybV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisKKwlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBDUlRfSE9UUExVR19JTlRfU1RBVFVTOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDUyY2Q5YjAuLjAwMjYxMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTI2Miw2ICsyNjIsMTQgQEAKICNkZWZpbmUgSVJPTkxBS0VfUDJfTFZEU19GQVNUICAgIDcgIC8qIGRvdWJsZSBjaGFubmVsICovCiAjZGVmaW5lIElST05MQUtFX1AyX0RPVF9MSU1JVCAgICAyMjUwMDAgLyogMjI1TWh6ICovCiAKKyNkZWZpbmUgSVJPTkxBS0VfUF9ESVNQTEFZX1BPUlRfTUlOCTEwCisjZGVmaW5lIElST05MQUtFX1BfRElTUExBWV9QT1JUX01BWAkyMAorI2RlZmluZSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfRkFTVAkxMAorI2RlZmluZSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfU0xPVwkxMAorI2RlZmluZSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfTElNSVQJMAorI2RlZmluZSBJUk9OTEFLRV9QMV9ESVNQTEFZX1BPUlRfTUlOCTEKKyNkZWZpbmUgSVJPTkxBS0VfUDFfRElTUExBWV9QT1JUX01BWAkyCisKIHN0YXRpYyBib29sCiBpbnRlbF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCSAgICBpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKQEAgLTI3MSw5ICsyNzksNiBAQAogc3RhdGljIGJvb2wKIGludGVsX2c0eF9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQlpbnQgdGFyZ2V0LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpiZXN0X2Nsb2NrKTsKLXN0YXRpYyBib29sCi1pbnRlbF9pcm9ubGFrZV9maW5kX2Jlc3RfUExMKGNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgICAgIGludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spOwogCiBzdGF0aWMgYm9vbAogaW50ZWxfZmluZF9wbGxfZzR4X2RwKGNvbnN0IGludGVsX2xpbWl0X3QgKiwgc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtNDk2LDcgKzUwMSw3IEBACiAJLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX1AyX0RPVF9MSU1JVCwKIAkJIC5wMl9zbG93ID0gSVJPTkxBS0VfUDJfU0RWT19EQUNfU0xPVywKIAkJIC5wMl9mYXN0ID0gSVJPTkxBS0VfUDJfU0RWT19EQUNfRkFTVCB9LAotCS5maW5kX3BsbCA9IGludGVsX2lyb25sYWtlX2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2VfbHZkcyA9IHsKQEAgLTUxMSw3ICs1MTYsMzAgQEAKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSVJPTkxBS0VfUDJfRE9UX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJUk9OTEFLRV9QMl9MVkRTX1NMT1csCiAJCSAucDJfZmFzdCA9IElST05MQUtFX1AyX0xWRFNfRkFTVCB9LAotCS5maW5kX3BsbCA9IGludGVsX2lyb25sYWtlX2ZpbmRfYmVzdF9QTEwsCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCit9OworCitzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNfaXJvbmxha2VfZGlzcGxheV9wb3J0ID0geworICAgICAgICAuZG90ID0geyAubWluID0gSVJPTkxBS0VfRE9UX01JTiwKKyAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX0RPVF9NQVggfSwKKyAgICAgICAgLnZjbyA9IHsgLm1pbiA9IElST05MQUtFX1ZDT19NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9WQ09fTUFYfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IElST05MQUtFX05fTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IElST05MQUtFX01fTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTV9NQVggfSwKKyAgICAgICAgLm0xICA9IHsgLm1pbiA9IElST05MQUtFX00xX01JTiwKKyAgICAgICAgICAgICAgICAgLm1heCA9IElST05MQUtFX00xX01BWCB9LAorICAgICAgICAubTIgID0geyAubWluID0gSVJPTkxBS0VfTTJfTUlOLAorICAgICAgICAgICAgICAgICAubWF4ID0gSVJPTkxBS0VfTTJfTUFYIH0sCisgICAgICAgIC5wICAgPSB7IC5taW4gPSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QX0RJU1BMQVlfUE9SVF9NQVggfSwKKyAgICAgICAgLnAxICA9IHsgLm1pbiA9IElST05MQUtFX1AxX0RJU1BMQVlfUE9SVF9NSU4sCisgICAgICAgICAgICAgICAgIC5tYXggPSBJUk9OTEFLRV9QMV9ESVNQTEFZX1BPUlRfTUFYfSwKKyAgICAgICAgLnAyICA9IHsgLmRvdF9saW1pdCA9IElST05MQUtFX1AyX0RJU1BMQVlfUE9SVF9MSU1JVCwKKyAgICAgICAgICAgICAgICAgLnAyX3Nsb3cgPSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfU0xPVywKKyAgICAgICAgICAgICAgICAgLnAyX2Zhc3QgPSBJUk9OTEFLRV9QMl9ESVNQTEFZX1BPUlRfRkFTVCB9LAorICAgICAgICAuZmluZF9wbGwgPSBpbnRlbF9maW5kX3BsbF9pcm9ubGFrZV9kcCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90ICppbnRlbF9pcm9ubGFrZV9saW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCkBAIC01MTksNiArNTQ3LDkgQEAKIAljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdDsKIAlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpCiAJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9sdmRzOworCWVsc2UgaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUKSB8fAorCQkJSEFTX2VEUCkKKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzX2lyb25sYWtlX2Rpc3BsYXlfcG9ydDsKIAllbHNlCiAJCWxpbWl0ID0gJmludGVsX2xpbWl0c19pcm9ubGFrZV9zZHZvOwogCkBAIC03OTEsNyArODIyLDEzIEBACiAJZm91bmQgPSBmYWxzZTsKIAogCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgewotCQlpZiAoKEk5MTVfUkVBRChMVkRTKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQorCQlpbnQgbHZkc19yZWc7CisKKwkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQlsdmRzX3JlZyA9IFBDSF9MVkRTOworCQllbHNlCisJCQlsdmRzX3JlZyA9IExWRFM7CisJCWlmICgoSTkxNV9SRUFEKGx2ZHNfcmVnKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQogCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKQogCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKIAkJZWxzZQpAQCAtODM5LDYgKzg3NiwxMSBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJaW50ZWxfY2xvY2tfdCBjbG9jazsKKworCS8qIHJldHVybiBkaXJlY3RseSB3aGVuIGl0IGlzIGVEUCAqLworCWlmIChIQVNfZURQKQorCQlyZXR1cm4gdHJ1ZTsKKwogCWlmICh0YXJnZXQgPCAyMDAwMDApIHsKIAkJY2xvY2subiA9IDE7CiAJCWNsb2NrLnAxID0gMjsKQEAgLTg1Nyw2OCArODk5LDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wKLWludGVsX2lyb25sYWtlX2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50ZWxfY2xvY2tfdCBjbG9jazsKLQlpbnQgZXJyX21vc3QgPSA0NzsKLQlpbnQgZXJyX21pbiA9IDEwMDAwOwotCi0JLyogZURQIGhhcyBvbmx5IDIgY2xvY2sgY2hvaWNlLCBubyBuL20vcCBzZXR0aW5nICovCi0JaWYgKEhBU19lRFApCi0JCXJldHVybiB0cnVlOwotCi0JaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUKSkKLQkJcmV0dXJuIGludGVsX2ZpbmRfcGxsX2lyb25sYWtlX2RwKGxpbWl0LCBjcnRjLCB0YXJnZXQsCi0JCQkJCSAgICAgICByZWZjbGssIGJlc3RfY2xvY2spOwotCi0JaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKSB7Ci0JCWlmICgoSTkxNV9SRUFEKFBDSF9MVkRTKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQotCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKQotCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKLQkJZWxzZQotCQkJY2xvY2sucDIgPSBsaW1pdC0+cDIucDJfc2xvdzsKLQl9IGVsc2UgewotCQlpZiAodGFyZ2V0IDwgbGltaXQtPnAyLmRvdF9saW1pdCkKLQkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7Ci0JCWVsc2UKLQkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7Ci0JfQotCi0JbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNpemVvZigqYmVzdF9jbG9jaykpOwotCWZvciAoY2xvY2sucDEgPSBsaW1pdC0+cDEubWF4OyBjbG9jay5wMSA+PSBsaW1pdC0+cDEubWluOyBjbG9jay5wMS0tKSB7Ci0JCS8qIGJhc2VkIG9uIGhhcmR3YXJlIHJlcXVyaW1lbnQgcHJlZmVyIHNtYWxsZXIgbiB0byBwcmVjaXNpb24gKi8KLQkJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IGxpbWl0LT5uLm1heDsgY2xvY2subisrKSB7Ci0JCQkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1aXJtZW50IHByZWZlcmUgbGFyZ2VyIG0xLG0yICovCi0JCQlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1heDsKLQkJCSAgICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgewotCQkJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWF4OwotCQkJCSAgICAgY2xvY2subTIgPj0gbGltaXQtPm0yLm1pbjsgY2xvY2subTItLSkgewotCQkJCQlpbnQgdGhpc19lcnI7Ci0KLQkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7Ci0JCQkJCWlmICghaW50ZWxfUExMX2lzX3ZhbGlkKGNydGMsICZjbG9jaykpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJdGhpc19lcnIgPSBhYnMoKDEwMDAwIC0gKHRhcmdldCoxMDAwMC9jbG9jay5kb3QpKSk7Ci0JCQkJCWlmICh0aGlzX2VyciA8IGVycl9tb3N0KSB7Ci0JCQkJCQkqYmVzdF9jbG9jayA9IGNsb2NrOwotCQkJCQkJLyogZm91bmQgb24gZmlyc3QgbWF0Y2hpbmcgKi8KLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9IGVsc2UgaWYgKHRoaXNfZXJyIDwgZXJyX21pbikgewotCQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKLQkJCQkJCWVycl9taW4gPSB0aGlzX2VycjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLW91dDoKLQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyogRGlzcGxheVBvcnQgaGFzIG9ubHkgdHdvIGZyZXF1ZW5jaWVzLCAxNjJNSHogYW5kIDI3ME1IeiAqLwogc3RhdGljIGJvb2wKIGludGVsX2ZpbmRfcGxsX2c0eF9kcChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtMTQ5Myw2ICsxNDczLDEwIEBACiAJaW50IHRyYW5zX3ZzeW5jX3JlZyA9IChwaXBlID09IDApID8gVFJBTlNfVlNZTkNfQSA6IFRSQU5TX1ZTWU5DX0I7CiAJdTMyIHRlbXA7CiAJaW50IHRyaWVzID0gNSwgaiwgbjsKKwl1MzIgcGlwZV9icGM7CisKKwl0ZW1wID0gSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CisJcGlwZV9icGMgPSB0ZW1wICYgUElQRV9CUENfTUFTSzsKIAogCS8qIFhYWDogV2hlbiBvdXIgb3V0cHV0cyBhcmUgYWxsIHVuYXdhcmUgb2YgRFBNUyBtb2RlcyBvdGhlciB0aGFuIG9mZgogCSAqIGFuZCBvbiwgd2Ugc2hvdWxkIG1hcCB0aG9zZSBtb2RlcyB0byBEUk1fTU9ERV9EUE1TX09GRiBpbiB0aGUgQ1JUQy4KQEAgLTE1MjQsNiArMTUwOCwxMiBAQAogCiAJCQkvKiBlbmFibGUgUENIIEZESSBSWCBQTEwsIHdhaXQgd2FybXVwIHBsdXMgRE1JIGxhdGVuY3kgKi8KIAkJCXRlbXAgPSBJOTE1X1JFQUQoZmRpX3J4X3JlZyk7CisJCQkvKgorCQkJICogbWFrZSB0aGUgQlBDIGluIEZESSBSeCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBpbgorCQkJICogcGlwZWNvbmYgcmVnLgorCQkJICovCisJCQl0ZW1wICY9IH4oMHg3IDw8IDE2KTsKKwkJCXRlbXAgfD0gKHBpcGVfYnBjIDw8IDExKTsKIAkJCUk5MTVfV1JJVEUoZmRpX3J4X3JlZywgdGVtcCB8IEZESV9SWF9QTExfRU5BQkxFIHwKIAkJCQkJRkRJX1NFTF9QQ0RDTEsgfAogCQkJCQlGRElfRFBfUE9SVF9XSURUSF9YNCk7IC8qIGRlZmF1bHQgNCBsYW5lcyAqLwpAQCAtMTY2Niw2ICsxNjU2LDEyIEBACiAKIAkJCS8qIGVuYWJsZSBQQ0ggdHJhbnNjb2RlciAqLwogCQkJdGVtcCA9IEk5MTVfUkVBRCh0cmFuc2NvbmZfcmVnKTsKKwkJCS8qCisJCQkgKiBtYWtlIHRoZSBCUEMgaW4gdHJhbnNjb2RlciBiZSBjb25zaXN0ZW50IHdpdGgKKwkJCSAqIHRoYXQgaW4gcGlwZWNvbmYgcmVnLgorCQkJICovCisJCQl0ZW1wICY9IH5QSVBFX0JQQ19NQVNLOworCQkJdGVtcCB8PSBwaXBlX2JwYzsKIAkJCUk5MTVfV1JJVEUodHJhbnNjb25mX3JlZywgdGVtcCB8IFRSQU5TX0VOQUJMRSk7CiAJCQlJOTE1X1JFQUQodHJhbnNjb25mX3JlZyk7CiAKQEAgLTE3NDUsNiArMTc0MSw5IEBACiAJCUk5MTVfUkVBRChmZGlfdHhfcmVnKTsKIAogCQl0ZW1wID0gSTkxNV9SRUFEKGZkaV9yeF9yZWcpOworCQkvKiBCUEMgaW4gRkRJIHJ4IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0IGluIHBpcGVjb25mICovCisJCXRlbXAgJj0gfigweDA3IDw8IDE2KTsKKwkJdGVtcCB8PSAocGlwZV9icGMgPDwgMTEpOwogCQlJOTE1X1dSSVRFKGZkaV9yeF9yZWcsIHRlbXAgJiB+RkRJX1JYX0VOQUJMRSk7CiAJCUk5MTVfUkVBRChmZGlfcnhfcmVnKTsKIApAQCAtMTc4OSw3ICsxNzg4LDEyIEBACiAJCQkJfQogCQkJfQogCQl9Ci0KKwkJdGVtcCA9IEk5MTVfUkVBRCh0cmFuc2NvbmZfcmVnKTsKKwkJLyogQlBDIGluIHRyYW5zY29kZXIgaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgaW4gcGlwZWNvbmYgKi8KKwkJdGVtcCAmPSB+UElQRV9CUENfTUFTSzsKKwkJdGVtcCB8PSBwaXBlX2JwYzsKKwkJSTkxNV9XUklURSh0cmFuc2NvbmZfcmVnLCB0ZW1wKTsKKwkJSTkxNV9SRUFEKHRyYW5zY29uZl9yZWcpOwogCQl1ZGVsYXkoMTAwKTsKIAogCQkvKiBkaXNhYmxlIFBDSCBEUExMICovCkBAIC0yNDQ4LDcgKzI0NTIsNyBAQAogICogQSB2YWx1ZSBvZiA1dXMgc2VlbXMgdG8gYmUgYSBnb29kIGJhbGFuY2U7IHNhZmUgZm9yIHZlcnkgbG93IGVuZAogICogcGxhdGZvcm1zIGJ1dCBub3Qgb3Zlcmx5IGFnZ3Jlc3NpdmUgb24gbG93ZXIgbGF0ZW5jeSBjb25maWdzLgogICovCi1jb25zdCBzdGF0aWMgaW50IGxhdGVuY3lfbnMgPSA1MDAwOworc3RhdGljIGNvbnN0IGludCBsYXRlbmN5X25zID0gNTAwMDsKIAogc3RhdGljIGludCBpOXh4X2dldF9maWZvX3NpemUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBsYW5lKQogewpAQCAtMjU1OSw3ICsyNTYzLDcgQEAKIAkvKiBDYWxjIHNyIGVudHJpZXMgZm9yIG9uZSBwbGFuZSBjb25maWdzICovCiAJaWYgKHNyX2hkaXNwbGF5ICYmICghcGxhbmVhX2Nsb2NrIHx8ICFwbGFuZWJfY2xvY2spKSB7CiAJCS8qIHNlbGYtcmVmcmVzaCBoYXMgbXVjaCBoaWdoZXIgbGF0ZW5jeSAqLwotCQljb25zdCBzdGF0aWMgaW50IHNyX2xhdGVuY3lfbnMgPSAxMjAwMDsKKwkJc3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CiAKIAkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CiAJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKQEAgLTI1OTgsNyArMjYwMiw3IEBACiAJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmlncyAqLwogCWlmIChzcl9oZGlzcGxheSAmJiAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgewogCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kgKi8KLQkJY29uc3Qgc3RhdGljIGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CisJCXN0YXRpYyBjb25zdCBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEyMDAwOwogCiAJCXNyX2Nsb2NrID0gcGxhbmVhX2Nsb2NrID8gcGxhbmVhX2Nsb2NrIDogcGxhbmViX2Nsb2NrOwogCQlsaW5lX3RpbWVfdXMgPSAoKHNyX2hkaXNwbGF5ICogMTAwMCkgLyBzcl9jbG9jayk7CkBAIC0yNjY3LDcgKzI2NzEsNyBAQAogCWlmIChIQVNfRldfQkxDKGRldikgJiYgc3JfaGRpc3BsYXkgJiYKIAkgICAgKCFwbGFuZWFfY2xvY2sgfHwgIXBsYW5lYl9jbG9jaykpIHsKIAkJLyogc2VsZi1yZWZyZXNoIGhhcyBtdWNoIGhpZ2hlciBsYXRlbmN5ICovCi0JCWNvbnN0IHN0YXRpYyBpbnQgc3JfbGF0ZW5jeV9ucyA9IDYwMDA7CisJCXN0YXRpYyBjb25zdCBpbnQgc3JfbGF0ZW5jeV9ucyA9IDYwMDA7CiAKIAkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CiAJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKQEAgLTI5NjksNiArMjk3MywxOCBAQAogCiAJCS8qIGRldGVybWluZSBwYW5lbCBjb2xvciBkZXB0aCAqLwogCQl0ZW1wID0gSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CisJCXRlbXAgJj0gflBJUEVfQlBDX01BU0s7CisJCWlmIChpc19sdmRzKSB7CisJCQlpbnQgbHZkc19yZWcgPSBJOTE1X1JFQUQoUENIX0xWRFMpOworCQkJLyogdGhlIEJQQyB3aWxsIGJlIDYgaWYgaXQgaXMgMTgtYml0IExWRFMgcGFuZWwgKi8KKwkJCWlmICgobHZkc19yZWcgJiBMVkRTX0EzX1BPV0VSX01BU0spID09IExWRFNfQTNfUE9XRVJfVVApCisJCQkJdGVtcCB8PSBQSVBFXzhCUEM7CisJCQllbHNlCisJCQkJdGVtcCB8PSBQSVBFXzZCUEM7CisJCX0gZWxzZQorCQkJdGVtcCB8PSBQSVBFXzhCUEM7CisJCUk5MTVfV1JJVEUocGlwZWNvbmZfcmVnLCB0ZW1wKTsKKwkJSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CiAKIAkJc3dpdGNoICh0ZW1wICYgUElQRV9CUENfTUFTSykgewogCQljYXNlIFBJUEVfOEJQQzoKQEAgLTMxOTUsNyArMzIxMSwyMCBAQAogCQkgKiBhcHByb3ByaWF0ZWx5IGhlcmUsIGJ1dCB3ZSBuZWVkIHRvIGxvb2sgbW9yZSB0aG9yb3VnaGx5IGludG8gaG93CiAJCSAqIHBhbmVscyBiZWhhdmUgaW4gdGhlIHR3byBtb2Rlcy4KIAkJICovCi0KKwkJLyogc2V0IHRoZSBkaXRoZXJpbmcgZmxhZyAqLworCQlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQkJaWYgKGRldl9wcml2LT5sdmRzX2RpdGhlcikgeworCQkJCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQkJCQlwaXBlY29uZiB8PSBQSVBFX0VOQUJMRV9ESVRIRVI7CisJCQkJZWxzZQorCQkJCQlsdmRzIHw9IExWRFNfRU5BQkxFX0RJVEhFUjsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQkJCXBpcGVjb25mICY9IH5QSVBFX0VOQUJMRV9ESVRIRVI7CisJCQkJZWxzZQorCQkJCQlsdmRzICY9IH5MVkRTX0VOQUJMRV9ESVRIRVI7CisJCQl9CisJCX0KIAkJSTkxNV9XUklURShsdmRzX3JlZywgbHZkcyk7CiAJCUk5MTVfUkVBRChsdmRzX3JlZyk7CiAJfQpAQCAtMzM4NSw3ICszNDE0LDcgQEAKIAogCS8qIHdlIG9ubHkgbmVlZCB0byBwaW4gaW5zaWRlIEdUVCBpZiBjdXJzb3IgaXMgbm9uLXBoeSAqLwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpZiAoIWRldl9wcml2LT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpIHsKKwlpZiAoIWRldl9wcml2LT5pbmZvLT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihibywgUEFHRV9TSVpFKTsKIAkJaWYgKHJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGN1cnNvciBib1xuIik7CkBAIC0zNDIwLDcgKzM0NDksNyBAQAogCUk5MTVfV1JJVEUoYmFzZSwgYWRkcik7CiAKIAlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKSB7Ci0JCWlmIChkZXZfcHJpdi0+Y3Vyc29yX25lZWRzX3BoeXNpY2FsKSB7CisJCWlmIChkZXZfcHJpdi0+aW5mby0+Y3Vyc29yX25lZWRzX3BoeXNpY2FsKSB7CiAJCQlpZiAoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvICE9IGJvKQogCQkJCWk5MTVfZ2VtX2RldGFjaF9waHlzX29iamVjdChkZXYsIGludGVsX2NydGMtPmN1cnNvcl9ibyk7CiAJCX0gZWxzZQpAQCAtMzc3OSwxMjUgKzM4MDgsNiBAQAogCXF1ZXVlX3dvcmsoZGV2X3ByaXYtPndxLCAmZGV2X3ByaXYtPmlkbGVfd29yayk7CiB9CiAKLXZvaWQgaW50ZWxfaW5jcmVhc2VfcmVuZGVyY2xvY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBzY2hlZHVsZSkKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQotCWlmIChJU19JUk9OTEFLRShkZXYpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWRldl9wcml2LT5yZW5kZXJfcmVjbG9ja19hdmFpbCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJub3QgcmVjbG9ja2luZyByZW5kZXIgY2xvY2tcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogUmVzdG9yZSByZW5kZXIgY2xvY2sgZnJlcXVlbmN5IHRvIG9yaWdpbmFsIHZhbHVlICovCi0JaWYgKElTX0c0WChkZXYpIHx8IElTX0k5WFgoZGV2KSkKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGRldl9wcml2LT5vcmlnX2Nsb2NrKTsKLQllbHNlIGlmIChJU19JODVYKGRldikpCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgZGV2X3ByaXYtPm9yaWdfY2xvY2spOwotCURSTV9ERUJVR19EUklWRVIoImluY3JlYXNpbmcgcmVuZGVyIGNsb2NrIGZyZXF1ZW5jeVxuIik7Ci0KLQkvKiBTY2hlZHVsZSBkb3duY2xvY2sgKi8KLQlpZiAoc2NoZWR1bGUpCi0JCW1vZF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGppZmZpZXMgKwotCQkJICBtc2Vjc190b19qaWZmaWVzKEdQVV9JRExFX1RJTUVPVVQpKTsKLX0KLQotdm9pZCBpbnRlbF9kZWNyZWFzZV9yZW5kZXJjbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybjsKLQotCWlmICghZGV2X3ByaXYtPnJlbmRlcl9yZWNsb2NrX2F2YWlsKSB7Ci0JCURSTV9ERUJVR19EUklWRVIoIm5vdCByZWNsb2NraW5nIHJlbmRlciBjbG9ja1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoSVNfRzRYKGRldikpIHsKLQkJdTE2IGdjZmdjOwotCi0JCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgJmdjZmdjKTsKLQotCQkvKiBEb3duIHRvIG1pbmltdW0uLi4gKi8KLQkJZ2NmZ2MgJj0gfkdNNDVfR0NfUkVOREVSX0NMT0NLX01BU0s7Ci0JCWdjZmdjIHw9IEdNNDVfR0NfUkVOREVSX0NMT0NLXzI2Nl9NSFo7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGdjZmdjKTsKLQl9IGVsc2UgaWYgKElTX0k5NjVHKGRldikpIHsKLQkJdTE2IGdjZmdjOwotCi0JCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgJmdjZmdjKTsKLQotCQkvKiBEb3duIHRvIG1pbmltdW0uLi4gKi8KLQkJZ2NmZ2MgJj0gfkk5NjVfR0NfUkVOREVSX0NMT0NLX01BU0s7Ci0JCWdjZmdjIHw9IEk5NjVfR0NfUkVOREVSX0NMT0NLXzI2N19NSFo7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGdjZmdjKTsKLQl9IGVsc2UgaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKLQkJdTE2IGdjZmdjOwotCi0JCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgJmdjZmdjKTsKLQotCQkvKiBEb3duIHRvIG1pbmltdW0uLi4gKi8KLQkJZ2NmZ2MgJj0gfkk5NDVfR0NfUkVOREVSX0NMT0NLX01BU0s7Ci0JCWdjZmdjIHw9IEk5NDVfR0NfUkVOREVSX0NMT0NLXzE2Nl9NSFo7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGdjZmdjKTsKLQl9IGVsc2UgaWYgKElTX0k5MTVHKGRldikpIHsKLQkJdTE2IGdjZmdjOwotCi0JCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgJmdjZmdjKTsKLQotCQkvKiBEb3duIHRvIG1pbmltdW0uLi4gKi8KLQkJZ2NmZ2MgJj0gfkk5MTVfR0NfUkVOREVSX0NMT0NLX01BU0s7Ci0JCWdjZmdjIHw9IEk5MTVfR0NfUkVOREVSX0NMT0NLXzE2Nl9NSFo7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGdjZmdjKTsKLQl9IGVsc2UgaWYgKElTX0k4NVgoZGV2KSkgewotCQl1MTYgaHBsbGNjOwotCi0JCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBIUExMQ0MsICZocGxsY2MpOwotCi0JCS8qIFVwIHRvIG1heGltdW0uLi4gKi8KLQkJaHBsbGNjICY9IH5HQ19DTE9DS19DT05UUk9MX01BU0s7Ci0JCWhwbGxjYyB8PSBHQ19DTE9DS18xMzNfMjAwOwotCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgaHBsbGNjKTsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiZGVjcmVhc2luZyByZW5kZXIgY2xvY2sgZnJlcXVlbmN5XG4iKTsKLX0KLQotLyogTm90ZSB0aGF0IG5vIGluY3JlYXNlIGZ1bmN0aW9uIGlzIG5lZWRlZCBmb3IgdGhpcyAtIGluY3JlYXNlX3JlbmRlcmNsb2NrKCkKLSAqICB3aWxsIGFsc28gcmV3cml0ZSB0aGVzZSBiaXRzCi0gKi8KLXZvaWQgaW50ZWxfZGVjcmVhc2VfZGlzcGxheWNsb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JaWYgKElTX0lST05MQUtFKGRldikpCi0JCXJldHVybjsKLQotCWlmIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpIHx8IElTX0k5MTVHKGRldikgfHwKLQkgICAgSVNfSTkxNUdNKGRldikpIHsKLQkJdTE2IGdjZmdjOwotCi0JCS8qIEFkanVzdCByZW5kZXIgY2xvY2suLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBHQ0ZHQywgJmdjZmdjKTsKLQotCQkvKiBEb3duIHRvIG1pbmltdW0uLi4gKi8KLQkJZ2NmZ2MgJj0gfjB4ZjA7Ci0JCWdjZmdjIHw9IDB4ODA7Ci0KLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsIGdjZmdjKTsKLQl9Ci19Ci0KICNkZWZpbmUgQ1JUQ19JRExFX1RJTUVPVVQgMTAwMCAvKiBtcyAqLwogCiBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2lkbGVfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCkBAIC00MDExLDEyICszOTIxLDYgQEAKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCS8qIEdQVSBpc24ndCBwcm9jZXNzaW5nLCBkb3duY2xvY2sgaXQuICovCi0JaWYgKCFkZXZfcHJpdi0+YnVzeSkgewotCQlpbnRlbF9kZWNyZWFzZV9yZW5kZXJjbG9jayhkZXYpOwotCQlpbnRlbF9kZWNyZWFzZV9kaXNwbGF5Y2xvY2soZGV2KTsKLQl9Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQkvKiBTa2lwIGluYWN0aXZlIENSVENzICovCiAJCWlmICghY3J0Yy0+ZmIpCkBAIC00MDUwLDEzICszOTU0LDExIEBACiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQlyZXR1cm47CiAKLQlpZiAoIWRldl9wcml2LT5idXN5KSB7CisJaWYgKCFkZXZfcHJpdi0+YnVzeSkKIAkJZGV2X3ByaXYtPmJ1c3kgPSB0cnVlOwotCQlpbnRlbF9pbmNyZWFzZV9yZW5kZXJjbG9jayhkZXYsIHRydWUpOwotCX0gZWxzZSB7CisJZWxzZQogCQltb2RfdGltZXIoJmRldl9wcml2LT5pZGxlX3RpbWVyLCBqaWZmaWVzICsKIAkJCSAgbXNlY3NfdG9famlmZmllcyhHUFVfSURMRV9USU1FT1VUKSk7Ci0JfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaWYgKCFjcnRjLT5mYikKQEAgLTQ0MDAsMjkgKzQzMDIsNDMgQEAKIAkJYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAJCWlmIChJOTE1X1JFQUQoU0RWT0IpICYgU0RWT19ERVRFQ1RFRCkgeworCQkJRFJNX0RFQlVHX0tNUygicHJvYmluZyBTRFZPQlxuIik7CiAJCQlmb3VuZCA9IGludGVsX3Nkdm9faW5pdChkZXYsIFNEVk9CKTsKLQkJCWlmICghZm91bmQgJiYgU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikpCisJCQlpZiAoIWZvdW5kICYmIFNVUFBPUlRTX0lOVEVHUkFURURfSERNSShkZXYpKSB7CisJCQkJRFJNX0RFQlVHX0tNUygicHJvYmluZyBIRE1JIG9uIFNEVk9CXG4iKTsKIAkJCQlpbnRlbF9oZG1pX2luaXQoZGV2LCBTRFZPQik7CisJCQl9CiAKLQkJCWlmICghZm91bmQgJiYgU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKQorCQkJaWYgKCFmb3VuZCAmJiBTVVBQT1JUU19JTlRFR1JBVEVEX0RQKGRldikpIHsKKwkJCQlEUk1fREVCVUdfS01TKCJwcm9iaW5nIERQX0JcbiIpOwogCQkJCWludGVsX2RwX2luaXQoZGV2LCBEUF9CKTsKKwkJCX0KIAkJfQogCiAJCS8qIEJlZm9yZSBHNFggU0RWT0MgZG9lc24ndCBoYXZlIGl0cyBvd24gZGV0ZWN0IHJlZ2lzdGVyICovCiAKLQkJaWYgKEk5MTVfUkVBRChTRFZPQikgJiBTRFZPX0RFVEVDVEVEKQorCQlpZiAoSTkxNV9SRUFEKFNEVk9CKSAmIFNEVk9fREVURUNURUQpIHsKKwkJCURSTV9ERUJVR19LTVMoInByb2JpbmcgU0RWT0NcbiIpOwogCQkJZm91bmQgPSBpbnRlbF9zZHZvX2luaXQoZGV2LCBTRFZPQyk7CisJCX0KIAogCQlpZiAoIWZvdW5kICYmIChJOTE1X1JFQUQoU0RWT0MpICYgU0RWT19ERVRFQ1RFRCkpIHsKIAotCQkJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfSERNSShkZXYpKQorCQkJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfSERNSShkZXYpKSB7CisJCQkJRFJNX0RFQlVHX0tNUygicHJvYmluZyBIRE1JIG9uIFNEVk9DXG4iKTsKIAkJCQlpbnRlbF9oZG1pX2luaXQoZGV2LCBTRFZPQyk7Ci0JCQlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKQorCQkJfQorCQkJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSkgeworCQkJCURSTV9ERUJVR19LTVMoInByb2JpbmcgRFBfQ1xuIik7CiAJCQkJaW50ZWxfZHBfaW5pdChkZXYsIERQX0MpOworCQkJfQogCQl9CiAKLQkJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSAmJiAoSTkxNV9SRUFEKERQX0QpICYgRFBfREVURUNURUQpKQorCQlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpICYmCisJCSAgICAoSTkxNV9SRUFEKERQX0QpICYgRFBfREVURUNURUQpKSB7CisJCQlEUk1fREVCVUdfS01TKCJwcm9iaW5nIERQX0RcbiIpOwogCQkJaW50ZWxfZHBfaW5pdChkZXYsIERQX0QpOworCQl9CiAJfSBlbHNlIGlmIChJU19JOFhYKGRldikpCiAJCWludGVsX2R2b19pbml0KGRldik7CiAKQEAgLTQ1MjcsNiArNDQ0Myw0MiBAQAogCS5mYl9jaGFuZ2VkID0gaW50ZWxmYl9wcm9iZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgoraW50ZWxfYWxsb2NfcG93ZXJfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcHdyY3R4OworCWludCByZXQ7CisKKwlwd3JjdHggPSBkcm1fZ2VtX29iamVjdF9hbGxvYyhkZXYsIDQwOTYpOworCWlmICghcHdyY3R4KSB7CisJCURSTV9ERUJVRygiZmFpbGVkIHRvIGFsbG9jIHBvd2VyIGNvbnRleHQsIFJDNiBkaXNhYmxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKHB3cmN0eCwgNDA5Nik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gcG93ZXIgY29udGV4dDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3VucmVmOworCX0KKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihwd3JjdHgsIDEpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0LWRvbWFpbiBvbiBwb3dlciBjb250ZXh0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfdW5waW47CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIHB3cmN0eDsKKworZXJyX3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbihwd3JjdHgpOworZXJyX3VucmVmOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHB3cmN0eCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIE5VTEw7Cit9CisKIHZvaWQgaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNDU3OSw0MiArNDUzMSwyNyBAQAogCSAqIEdQVSBjYW4gYXV0b21hdGljYWxseSBwb3dlciBkb3duIHRoZSByZW5kZXIgdW5pdCBpZiBnaXZlbiBhIHBhZ2UKIAkgKiB0byBzYXZlIHN0YXRlLgogCSAqLwotCWlmIChJOTE1X0hBU19SQzYoZGV2KSkgewotCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnB3cmN0eDsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCQlpbnQgcmV0OworCWlmIChJOTE1X0hBU19SQzYoZGV2KSAmJiBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IE5VTEw7CiAKIAkJaWYgKGRldl9wcml2LT5wd3JjdHgpIHsKIAkJCW9ial9wcml2ID0gZGV2X3ByaXYtPnB3cmN0eC0+ZHJpdmVyX3ByaXZhdGU7CiAJCX0gZWxzZSB7Ci0JCQlwd3JjdHggPSBkcm1fZ2VtX29iamVjdF9hbGxvYyhkZXYsIDQwOTYpOwotCQkJaWYgKCFwd3JjdHgpIHsKLQkJCQlEUk1fREVCVUcoImZhaWxlZCB0byBhbGxvYyBwb3dlciBjb250ZXh0LCAiCi0JCQkJCSAgIlJDNiBkaXNhYmxlZFxuIik7Ci0JCQkJZ290byBvdXQ7CisJCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnB3cmN0eDsKKworCQkJcHdyY3R4ID0gaW50ZWxfYWxsb2NfcG93ZXJfY29udGV4dChkZXYpOworCQkJaWYgKHB3cmN0eCkgeworCQkJCWRldl9wcml2LT5wd3JjdHggPSBwd3JjdHg7CisJCQkJb2JqX3ByaXYgPSBwd3JjdHgtPmRyaXZlcl9wcml2YXRlOwogCQkJfQotCi0JCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKHB3cmN0eCwgNDA5Nik7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIHBvd2VyIGNvbnRleHQ6ICVkXG4iLAotCQkJCQkgIHJldCk7Ci0JCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocHdyY3R4KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQotCQkJaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHB3cmN0eCwgMSk7Ci0KLQkJCWRldl9wcml2LT5wd3JjdHggPSBwd3JjdHg7Ci0JCQlvYmpfcHJpdiA9IHB3cmN0eC0+ZHJpdmVyX3ByaXZhdGU7CiAJCX0KIAotCQlJOTE1X1dSSVRFKFBXUkNUWEEsIG9ial9wcml2LT5ndHRfb2Zmc2V0IHwgUFdSQ1RYX0VOKTsKLQkJSTkxNV9XUklURShNQ0hCQVJfUkVOREVSX1NUQU5EQlksCi0JCQkgICBJOTE1X1JFQUQoTUNIQkFSX1JFTkRFUl9TVEFOREJZKSAmIH5SQ1hfU1dfRVhJVCk7CisJCWlmIChvYmpfcHJpdikgeworCQkJSTkxNV9XUklURShQV1JDVFhBLCBvYmpfcHJpdi0+Z3R0X29mZnNldCB8IFBXUkNUWF9FTik7CisJCQlJOTE1X1dSSVRFKE1DSEJBUl9SRU5ERVJfU1RBTkRCWSwKKwkJCQkgICBJOTE1X1JFQUQoTUNIQkFSX1JFTkRFUl9TVEFOREJZKSAmIH5SQ1hfU1dfRVhJVCk7CisJCX0KIAl9Ci0KLW91dDoKLQlyZXR1cm47CiB9CiAKIC8qIFNldCB1cCBjaGlwIHNwZWNpZmljIGRpc3BsYXkgZnVuY3Rpb25zICovCkBAIC00NzcwLDcgKzQ3MDcsNiBAQAogCQlkZWxfdGltZXJfc3luYygmaW50ZWxfY3J0Yy0+aWRsZV90aW1lcik7CiAJfQogCi0JaW50ZWxfaW5jcmVhc2VfcmVuZGVyY2xvY2soZGV2LCBmYWxzZSk7CiAJZGVsX3RpbWVyX3N5bmMoJmRldl9wcml2LT5pZGxlX3RpbWVyKTsKIAogCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5kaXNhYmxlX2ZiYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDRlN2FhOGIuLjEzNDlkOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMTQwMiwxNCArMTQwMiwyMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRFBfQjoKIAkJY2FzZSBQQ0hfRFBfQjoKKwkJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9CisJCQkJSERNSUJfSE9UUExVR19JTlRfU1RBVFVTOwogCQkJbmFtZSA9ICJEUEREQy1CIjsKIAkJCWJyZWFrOwogCQljYXNlIERQX0M6CiAJCWNhc2UgUENIX0RQX0M6CisJCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PQorCQkJCUhETUlDX0hPVFBMVUdfSU5UX1NUQVRVUzsKIAkJCW5hbWUgPSAiRFBEREMtQyI7CiAJCQlicmVhazsKIAkJY2FzZSBEUF9EOgogCQljYXNlIFBDSF9EUF9EOgorCQkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0KKwkJCQlIRE1JRF9IT1RQTFVHX0lOVF9TVEFUVVM7CiAJCQluYW1lID0gIkRQRERDLUQiOwogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGYwNGRiYmUuLjA2NDMxOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTMwMywyMSArMzAzLDI2IEBACiAJaWYgKHNkdm94X3JlZyA9PSBTRFZPQikgewogCQlpbnRlbF9vdXRwdXQtPmNsb25lX21hc2sgPSAoMSA8PCBJTlRFTF9IRE1JQl9DTE9ORV9CSVQpOwogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0UsICJIRE1JQiIpOworCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVM7CiAJfSBlbHNlIGlmIChzZHZveF9yZWcgPT0gU0RWT0MpIHsKIAkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfSERNSUNfQ0xPTkVfQklUKTsKIAkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIEdQSU9ELCAiSERNSUMiKTsKKwkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0gSERNSUNfSE9UUExVR19JTlRfU1RBVFVTOwogCX0gZWxzZSBpZiAoc2R2b3hfcmVnID09IEhETUlCKSB7CiAJCWludGVsX291dHB1dC0+Y2xvbmVfbWFzayA9ICgxIDw8IElOVEVMX0hETUlEX0NMT05FX0JJVCk7CiAJCWludGVsX291dHB1dC0+ZGRjX2J1cyA9IGludGVsX2kyY19jcmVhdGUoZGV2LCBQQ0hfR1BJT0UsCiAJCQkJCQkJCSJIRE1JQiIpOworCQlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBIRE1JQl9IT1RQTFVHX0lOVF9TVEFUVVM7CiAJfSBlbHNlIGlmIChzZHZveF9yZWcgPT0gSERNSUMpIHsKIAkJaW50ZWxfb3V0cHV0LT5jbG9uZV9tYXNrID0gKDEgPDwgSU5URUxfSERNSUVfQ0xPTkVfQklUKTsKIAkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIFBDSF9HUElPRCwKIAkJCQkJCQkJIkhETUlDIik7CisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9IEhETUlDX0hPVFBMVUdfSU5UX1NUQVRVUzsKIAl9IGVsc2UgaWYgKHNkdm94X3JlZyA9PSBIRE1JRCkgewogCQlpbnRlbF9vdXRwdXQtPmNsb25lX21hc2sgPSAoMSA8PCBJTlRFTF9IRE1JRl9DTE9ORV9CSVQpOwogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgUENIX0dQSU9GLAogCQkJCQkJCQkiSERNSUQiKTsKKwkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0gSERNSURfSE9UUExVR19JTlRfU1RBVFVTOwogCX0KIAlpZiAoIWludGVsX291dHB1dC0+ZGRjX2J1cykKIAkJZ290byBlcnJfY29ubmVjdG9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDMxMThjZTIuLmY0YjRhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTYwOCw2ICs2MDgsMTMgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIG9uZSIpLAogCQl9LAogCX0sCisJeworCQkuaWRlbnQgPSAiUEMtODEwMDUiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1BTEFUQSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQQy04MTAwNSIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCkBAIC02NzksNyArNjg2LDE0IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KIAkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbGlkX25vdGlmaWVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gZGV2X3ByaXYtPmludF9sdmRzX2Nvbm5lY3RvcjsKIAorCS8qCisJICogY2hlY2sgYW5kIHVwZGF0ZSB0aGUgc3RhdHVzIG9mIExWRFMgY29ubmVjdG9yIGFmdGVyIHJlY2VpdmluZworCSAqIHRoZSBMSUQgbm9maWNhdGlvbiBldmVudC4KKwkgKi8KKwlpZiAoY29ubmVjdG9yKQorCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCWlmICghYWNwaV9saWRfb3BlbigpKSB7CiAJCWRldl9wcml2LT5tb2Rlc2V0X29uX2xpZCA9IDE7CiAJCXJldHVybiBOT1RJRllfT0s7CkBAIC04NTQsNjUgKzg2OCw2IEBACiAJeyB9CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi0jaWZkZWYgQ09ORklHX0FDUEkKLS8qCi0gKiBjaGVja19saWRfZGV2aWNlIC0tIGNoZWNrIHdoZXRoZXIgQGhhbmRsZSBpcyBhbiBBQ1BJIExJRCBkZXZpY2UuCi0gKiBAaGFuZGxlOiBBQ1BJIGRldmljZSBoYW5kbGUKLSAqIEBsZXZlbCA6IGRlcHRoIGluIHRoZSBBQ1BJIG5hbWVzcGFjZSB0cmVlCi0gKiBAY29udGV4dDogdGhlIG51bWJlciBvZiBMSUQgZGV2aWNlIHdoZW4gd2UgZmluZCB0aGUgZGV2aWNlCi0gKiBAcnY6IGEgcmV0dXJuIHZhbHVlIHRvIGZpbGwgaWYgZGVzaXJlZCAoTm90IHVzZSkKLSAqLwotc3RhdGljIGFjcGlfc3RhdHVzCi1jaGVja19saWRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGxldmVsLCB2b2lkICpjb250ZXh0LAotCQkJdm9pZCAqKnJldHVybl92YWx1ZSkKLXsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2OwotCWludCAqbGlkX3ByZXNlbnQgPSBjb250ZXh0OwotCi0JYWNwaV9kZXYgPSBOVUxMOwotCS8qIEdldCB0aGUgYWNwaSBkZXZpY2UgZm9yIGRldmljZSBoYW5kbGUgKi8KLQlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZhY3BpX2RldikgfHwgIWFjcGlfZGV2KSB7Ci0JCS8qIElmIHRoZXJlIGlzIG5vIEFDUEkgZGV2aWNlIGZvciBoYW5kbGUsIHJldHVybiAqLwotCQlyZXR1cm4gQUVfT0s7Ci0JfQotCi0JaWYgKCFzdHJuY21wKGFjcGlfZGV2aWNlX2hpZChhY3BpX2RldiksICJQTlAwQzBEIiwgNykpCi0JCSpsaWRfcHJlc2VudCA9IDE7Ci0KLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLS8qKgotICogY2hlY2sgd2hldGhlciB0aGVyZSBleGlzdHMgdGhlIEFDUEkgTElEIGRldmljZSBieSBlbnVtZXJhdGluZyB0aGUgQUNQSQotICogZGV2aWNlIHRyZWUuCi0gKi8KLXN0YXRpYyBpbnQgaW50ZWxfbGlkX3ByZXNlbnQodm9pZCkKLXsKLQlpbnQgbGlkX3ByZXNlbnQgPSAwOwotCi0JaWYgKGFjcGlfZGlzYWJsZWQpIHsKLQkJLyogSWYgQUNQSSBpcyBkaXNhYmxlZCwgdGhlcmUgaXMgbm8gQUNQSSBkZXZpY2UgdHJlZSB0bwotCQkgKiBjaGVjaywgc28gYXNzdW1lIHRoZSBMSUQgZGV2aWNlIHdvdWxkIGhhdmUgYmVlbiBwcmVzZW50LgotCQkgKi8KLQkJcmV0dXJuIDE7Ci0JfQotCi0JYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAotCQkJCUFDUElfVUlOVDMyX01BWCwKLQkJCQljaGVja19saWRfZGV2aWNlLCBOVUxMLCAmbGlkX3ByZXNlbnQsIE5VTEwpOwotCi0JcmV0dXJuIGxpZF9wcmVzZW50OwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgaW50ZWxfbGlkX3ByZXNlbnQodm9pZCkKLXsKLQkvKiBJbiB0aGUgYWJzZW5jZSBvZiBBQ1BJIGJ1aWx0IGluLCBhc3N1bWUgdGhhdCB0aGUgTElEIGRldmljZSB3b3VsZAotCSAqIGhhdmUgYmVlbiBwcmVzZW50LgotCSAqLwotCXJldHVybiAxOwotfQotI2VuZGlmCi0KIC8qKgogICogaW50ZWxfZmluZF9sdmRzX2Rvd25jbG9jayAtIGZpbmQgdGhlIHJlZHVjZWQgZG93bmNsb2NrIGZvciBMVkRTIGluIEVESUQKICAqIEBkZXY6IGRybSBkZXZpY2UKQEAgLTEwMzEsMTIgKzk4Niw4IEBACiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaW50ZWxfbm9fbHZkcykpCiAJCXJldHVybjsKIAotCS8qCi0JICogQXNzdW1lIExWRFMgaXMgcHJlc2VudCBpZiB0aGVyZSdzIGFuIEFDUEkgbGlkIGRldmljZSBvciBpZiB0aGUKLQkgKiBkZXZpY2UgaXMgcHJlc2VudCBpbiB0aGUgVkJULgotCSAqLwotCWlmICghbHZkc19pc19wcmVzZW50X2luX3ZidChkZXYpICYmICFpbnRlbF9saWRfcHJlc2VudCgpKSB7Ci0JCURSTV9ERUJVR19LTVMoIkxWRFMgaXMgbm90IHByZXNlbnQgaW4gVkJUIGFuZCBubyBsaWQgZGV0ZWN0ZWRcbiIpOworCWlmICghbHZkc19pc19wcmVzZW50X2luX3ZidChkZXYpKSB7CisJCURSTV9ERUJVR19LTVMoIkxWRFMgaXMgbm90IHByZXNlbnQgaW4gVkJUXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE4MCw2ICsxMTMxLDggQEAKIAkJRFJNX0RFQlVHX0tNUygibGlkIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlkZXZfcHJpdi0+bGlkX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBOVUxMOwogCX0KKwkvKiBrZWVwIHRoZSBMVkRTIGNvbm5lY3RvciAqLworCWRldl9wcml2LT5pbnRfbHZkc19jb25uZWN0b3IgPSBjb25uZWN0b3I7CiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKIAlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCAyNGEzZGM5Li5kZTUxNDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0yNjYyLDYgKzI2NjIsNyBAQAogCiBib29sIGludGVsX3Nkdm9faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb3V0cHV0X2RldmljZSkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0OwogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdjsKQEAgLTI3MDgsMTAgKzI3MDksMTIgQEAKIAkJaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIEdQSU9FLCAiU0RWT0IgRERDIEJVUyIpOwogCQlzZHZvX3ByaXYtPmFuYWxvZ19kZGNfYnVzID0gaW50ZWxfaTJjX2NyZWF0ZShkZXYsIEdQSU9BLAogCQkJCQkJIlNEVk9CL1ZHQSBEREMgQlVTIik7CisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9IFNEVk9CX0hPVFBMVUdfSU5UX1NUQVRVUzsKIAl9IGVsc2UgewogCQlpbnRlbF9vdXRwdXQtPmRkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0UsICJTRFZPQyBEREMgQlVTIik7CiAJCXNkdm9fcHJpdi0+YW5hbG9nX2RkY19idXMgPSBpbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0EsCiAJCQkJCQkiU0RWT0MvVkdBIEREQyBCVVMiKTsKKwkJZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2sgfD0gU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTOwogCX0KIAogCWlmIChpbnRlbF9vdXRwdXQtPmRkY19idXMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDU1MmVjMTEuLjFkNWI5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTg0MCw2ICsxODQwLDggQEAKIAlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCiAJCQkJICAgZGV2LT5tb2RlX2NvbmZpZy50dl9ib3R0b21fbWFyZ2luX3Byb3BlcnR5LAogCQkJCSAgIHR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fQk9UVE9NXSk7CisKKwlkZXZfcHJpdi0+aG90cGx1Z19zdXBwb3J0ZWRfbWFzayB8PSBUVl9IT1RQTFVHX0lOVF9TVEFUVVM7CiBvdXQ6CiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKaW5kZXggOTdlZTU2Ni4uZGRmZTE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5vcGVuID0gZHJtX29wZW4sCiAJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkubW1hcCA9IGRybV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pb2MzMi5jCmluZGV4IDMwZDAwNDcuLmMxZjg3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaW9jMzIuYwpAQCAtMTAwLDggKzEwMCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX01HQV9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9tZ2FfZ2V0cGFyYW0zMiB7CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCSAgJmdldHBhcmFtLT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21nYV9kcm1fYm9vdHN0cmFwMzIgewpAQCAtMTY2LDggKzE2NCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLmFncF9zaXplLCAmZG1hX2Jvb3RzdHJhcC0+YWdwX3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJRFJNX0lPQ1RMX01HQV9ETUFfQk9PVFNUUkFQLAorCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTUdBX0RNQV9CT09UU1RSQVAsCiAJCQkodW5zaWduZWQgbG9uZylkbWFfYm9vdHN0cmFwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjIwLDEyICsyMTcsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG1nYV9jb21wYXRfaW9jdGxzW25yIC0gRFJNX0NPTU1BTkRfQkFTRV07CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnCmluZGV4IGIxYmMxZWEuLjExNzU0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZwpAQCAtMzAsMTIgKzMwLDExIEBACiAJICB2aWEgZGVidWdmcy4KIAogbWVudSAiSTJDIGVuY29kZXIgb3IgaGVscGVyIGNoaXBzIgotICAgICBkZXBlbmRzIG9uIERSTSAmJiBJMkMKKyAgICAgZGVwZW5kcyBvbiBEUk0gJiYgRFJNX0tNU19IRUxQRVIgJiYgSTJDCiAKIGNvbmZpZyBEUk1fSTJDX0NINzAwNgogCXRyaXN0YXRlICJDaHJvbnRlbCBjaDcwMDYgVFYgZW5jb2RlciIKLQlkZXBlbmRzIG9uIERSTV9OT1VWRUFVCi0JZGVmYXVsdCBtCisJZGVmYXVsdCBtIGlmIERSTV9OT1VWRUFVCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgQ2hyb250ZWwgY2g3MDA2IGFuZCBzaW1pbGFyIFRWIGVuY29kZXJzLCBmb3VuZAogCSAgb24gc29tZSBuVmlkaWEgdmlkZW8gY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlCmluZGV4IDFkOTBkNGQuLjQ4YzI5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlCkBAIC04LDE0ICs4LDE1IEBACiAgICAgICAgICAgICAgbm91dmVhdV9zZ2RtYS5vIG5vdXZlYXVfZG1hLm8gXAogICAgICAgICAgICAgIG5vdXZlYXVfYm8ubyBub3V2ZWF1X2ZlbmNlLm8gbm91dmVhdV9nZW0ubyBub3V2ZWF1X3R0bS5vIFwKICAgICAgICAgICAgICBub3V2ZWF1X2h3Lm8gbm91dmVhdV9jYWxjLm8gbm91dmVhdV9iaW9zLm8gbm91dmVhdV9pMmMubyBcCi0JICAgICBub3V2ZWF1X2Rpc3BsYXkubyBub3V2ZWF1X2Nvbm5lY3Rvci5vIG5vdXZlYXVfZmJjb24ubyBcCi0JICAgICBub3V2ZWF1X2RwLm8gXAorICAgICAgICAgICAgIG5vdXZlYXVfZGlzcGxheS5vIG5vdXZlYXVfY29ubmVjdG9yLm8gbm91dmVhdV9mYmNvbi5vIFwKKyAgICAgICAgICAgICBub3V2ZWF1X2RwLm8gbm91dmVhdV9ncmN0eC5vIFwKICAgICAgICAgICAgICBudjA0X3RpbWVyLm8gXAogICAgICAgICAgICAgIG52MDRfbWMubyBudjQwX21jLm8gbnY1MF9tYy5vIFwKICAgICAgICAgICAgICBudjA0X2ZiLm8gbnYxMF9mYi5vIG52NDBfZmIubyBcCiAgICAgICAgICAgICAgbnYwNF9maWZvLm8gbnYxMF9maWZvLm8gbnY0MF9maWZvLm8gbnY1MF9maWZvLm8gXAogICAgICAgICAgICAgIG52MDRfZ3JhcGgubyBudjEwX2dyYXBoLm8gbnYyMF9ncmFwaC5vIFwKICAgICAgICAgICAgICBudjQwX2dyYXBoLm8gbnY1MF9ncmFwaC5vIFwKKyAgICAgICAgICAgICBudjQwX2dyY3R4Lm8gXAogICAgICAgICAgICAgIG52MDRfaW5zdG1lbS5vIG52NTBfaW5zdG1lbS5vIFwKICAgICAgICAgICAgICBudjUwX2NydGMubyBudjUwX2RhYy5vIG52NTBfc29yLm8gXAogICAgICAgICAgICAgIG52NTBfY3Vyc29yLm8gbnY1MF9kaXNwbGF5Lm8gbnY1MF9mYmNvbi5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggNWVlYzVlZC4uYmExNDM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKQEAgLTE4MSw0MyArMTgxLDQyIEBACiAJY29uc3QgY2hhciBkZXNjWzhdOwogCXZvaWQgKCpsb2FkYmlvcykoc3RydWN0IGRybV9kZXZpY2UgKiwgdWludDhfdCAqKTsKIAljb25zdCBib29sIHJ3OwotCWludCBzY29yZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWV0aG9kcyBudjA0X21ldGhvZHNbXSA9IHsKIAl7ICJQUk9NIiwgbG9hZF92Ymlvc19wcm9tLCBmYWxzZSB9LAogCXsgIlBSQU1JTiIsIGxvYWRfdmJpb3NfcHJhbWluLCB0cnVlIH0sCiAJeyAiUENJUk9NIiwgbG9hZF92Ymlvc19wY2ksIHRydWUgfSwKLQl7IH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWV0aG9kcyBudjUwX21ldGhvZHNbXSA9IHsKIAl7ICJQUkFNSU4iLCBsb2FkX3ZiaW9zX3ByYW1pbiwgdHJ1ZSB9LAogCXsgIlBST00iLCBsb2FkX3ZiaW9zX3Byb20sIGZhbHNlIH0sCiAJeyAiUENJUk9NIiwgbG9hZF92Ymlvc19wY2ksIHRydWUgfSwKLQl7IH0KIH07CiAKKyNkZWZpbmUgTUVUSE9EQ05UIDMKKwogc3RhdGljIGJvb2wgTlZTaGFkb3dWQklPUyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50OF90ICpkYXRhKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG1ldGhvZHMgKm1ldGhvZHMsICptZXRob2Q7CisJc3RydWN0IG1ldGhvZHMgKm1ldGhvZHM7CisJaW50IGk7CiAJaW50IHRlc3RzY29yZSA9IDM7CisJaW50IHNjb3Jlc1tNRVRIT0RDTlRdOwogCiAJaWYgKG5vdXZlYXVfdmJpb3MpIHsKLQkJbWV0aG9kID0gbnYwNF9tZXRob2RzOwotCQl3aGlsZSAobWV0aG9kLT5sb2FkYmlvcykgewotCQkJaWYgKCFzdHJjYXNlY21wKG5vdXZlYXVfdmJpb3MsIG1ldGhvZC0+ZGVzYykpCisJCW1ldGhvZHMgPSBudjA0X21ldGhvZHM7CisJCWZvciAoaSA9IDA7IGkgPCBNRVRIT0RDTlQ7IGkrKykKKwkJCWlmICghc3RyY2FzZWNtcChub3V2ZWF1X3ZiaW9zLCBtZXRob2RzW2ldLmRlc2MpKQogCQkJCWJyZWFrOwotCQkJbWV0aG9kKys7Ci0JCX0KIAotCQlpZiAobWV0aG9kLT5sb2FkYmlvcykgeworCQlpZiAoaSA8IE1FVEhPRENOVCkgewogCQkJTlZfSU5GTyhkZXYsICJBdHRlbXB0aW5nIHRvIHVzZSBCSU9TIGltYWdlIGZyb20gJXNcbiIsCi0JCQkJbWV0aG9kLT5kZXNjKTsKKwkJCQltZXRob2RzW2ldLmRlc2MpOwogCi0JCQltZXRob2QtPmxvYWRiaW9zKGRldiwgZGF0YSk7Ci0JCQlpZiAoc2NvcmVfdmJpb3MoZGV2LCBkYXRhLCBtZXRob2QtPnJ3KSkKKwkJCW1ldGhvZHNbaV0ubG9hZGJpb3MoZGV2LCBkYXRhKTsKKwkJCWlmIChzY29yZV92YmlvcyhkZXYsIGRhdGEsIG1ldGhvZHNbaV0ucncpKQogCQkJCXJldHVybiB0cnVlOwogCQl9CiAKQEAgLTIyOSwyOCArMjI4LDI0IEBACiAJZWxzZQogCQltZXRob2RzID0gbnY1MF9tZXRob2RzOwogCi0JbWV0aG9kID0gbWV0aG9kczsKLQl3aGlsZSAobWV0aG9kLT5sb2FkYmlvcykgeworCWZvciAoaSA9IDA7IGkgPCBNRVRIT0RDTlQ7IGkrKykgewogCQlOVl9UUkFDRShkZXYsICJBdHRlbXB0aW5nIHRvIGxvYWQgQklPUyBpbWFnZSBmcm9tICVzXG4iLAotCQkJIG1ldGhvZC0+ZGVzYyk7CisJCQkgbWV0aG9kc1tpXS5kZXNjKTsKIAkJZGF0YVswXSA9IGRhdGFbMV0gPSAwOwkvKiBhdm9pZCByZXVzZSBvZiBwcmV2aW91cyBpbWFnZSAqLwotCQltZXRob2QtPmxvYWRiaW9zKGRldiwgZGF0YSk7Ci0JCW1ldGhvZC0+c2NvcmUgPSBzY29yZV92YmlvcyhkZXYsIGRhdGEsIG1ldGhvZC0+cncpOwotCQlpZiAobWV0aG9kLT5zY29yZSA9PSB0ZXN0c2NvcmUpCisJCW1ldGhvZHNbaV0ubG9hZGJpb3MoZGV2LCBkYXRhKTsKKwkJc2NvcmVzW2ldID0gc2NvcmVfdmJpb3MoZGV2LCBkYXRhLCBtZXRob2RzW2ldLnJ3KTsKKwkJaWYgKHNjb3Jlc1tpXSA9PSB0ZXN0c2NvcmUpCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJbWV0aG9kKys7CiAJfQogCiAJd2hpbGUgKC0tdGVzdHNjb3JlID4gMCkgewotCQltZXRob2QgPSBtZXRob2RzOwotCQl3aGlsZSAobWV0aG9kLT5sb2FkYmlvcykgewotCQkJaWYgKG1ldGhvZC0+c2NvcmUgPT0gdGVzdHNjb3JlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNRVRIT0RDTlQ7IGkrKykgeworCQkJaWYgKHNjb3Jlc1tpXSA9PSB0ZXN0c2NvcmUpIHsKIAkJCQlOVl9UUkFDRShkZXYsICJVc2luZyBCSU9TIGltYWdlIGZyb20gJXNcbiIsCi0JCQkJCSBtZXRob2QtPmRlc2MpOwotCQkJCW1ldGhvZC0+bG9hZGJpb3MoZGV2LCBkYXRhKTsKKwkJCQkJIG1ldGhvZHNbaV0uZGVzYyk7CisJCQkJbWV0aG9kc1tpXS5sb2FkYmlvcyhkZXYsIGRhdGEpOwogCQkJCXJldHVybiB0cnVlOwogCQkJfQotCQkJbWV0aG9kKys7CiAJCX0KIAl9CiAKQEAgLTI2MSwxMCArMjU2LDcgQEAKIHN0cnVjdCBpbml0X3RibF9lbnRyeSB7CiAJY2hhciAqbmFtZTsKIAl1aW50OF90IGlkOwotCWludCBsZW5ndGg7Ci0JaW50IGxlbmd0aF9vZmZzZXQ7Ci0JaW50IGxlbmd0aF9tdWx0aXBsaWVyOwotCWJvb2wgKCpoYW5kbGVyKShzdHJ1Y3QgbnZiaW9zICosIHVpbnQxNl90LCBzdHJ1Y3QgaW5pdF9leGVjICopOworCWludCAoKmhhbmRsZXIpKHN0cnVjdCBudmJpb3MgKiwgdWludDE2X3QsIHN0cnVjdCBpbml0X2V4ZWMgKik7CiB9OwogCiBzdHJ1Y3QgYml0X2VudHJ5IHsKQEAgLTgyMCw3ICs4MTIsNyBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW9fcmVzdHJpY3RfcHJvZyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtODUyLDkgKzg0NCwxMCBAQAogCXVpbnQzMl90IHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgN10pOwogCXVpbnQ4X3QgY29uZmlnOwogCXVpbnQzMl90IGNvbmZpZ3ZhbDsKKwlpbnQgbGVuID0gMTEgKyBjb3VudCAqIDQ7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUG9ydDogMHglMDRYLCBJbmRleDogMHglMDJYLCBNYXNrOiAweCUwMlgsICIKIAkJICAgICAgIlNoaWZ0OiAweCUwMlgsIENvdW50OiAweCUwMlgsIFJlZzogMHglMDhYXG4iLApAQCAtODY1LDcgKzg1OCw3IEBACiAJCU5WX0VSUk9SKGJpb3MtPmRldiwKIAkJCSAiMHglMDRYOiBDb25maWcgMHglMDJYIGV4Y2VlZHMgbWF4aW1hbCBib3VuZCAweCUwMlhcbiIsCiAJCQkgb2Zmc2V0LCBjb25maWcsIGNvdW50KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAljb25maWd2YWwgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDExICsgY29uZmlnICogNF0pOwpAQCAtODc0LDEwICs4NjcsMTAgQEAKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsIGNvbmZpZ3ZhbCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yZXBlYXQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtOTEyLDEwICs5MDUsMTAgQEAKIAogCWlleGVjLT5yZXBlYXQgPSBmYWxzZTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAyOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19yZXN0cmljdF9wbGwoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtOTUxLDkgKzk0NCwxMCBAQAogCXVpbnQzMl90IHJlZyA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgOF0pOwogCXVpbnQ4X3QgY29uZmlnOwogCXVpbnQxNl90IGZyZXE7CisJaW50IGxlbiA9IDEyICsgY291bnQgKiAyOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCAiCiAJCSAgICAgICJTaGlmdDogMHglMDJYLCBJTyBGbGFnIENvbmRpdGlvbjogMHglMDJYLCAiCkBAIC05NjYsNyArOTYwLDcgQEAKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LAogCQkJICIweCUwNFg6IENvbmZpZyAweCUwMlggZXhjZWVkcyBtYXhpbWFsIGJvdW5kIDB4JTAyWFxuIiwKIAkJCSBvZmZzZXQsIGNvbmZpZywgY291bnQpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWZyZXEgPSBST00xNihiaW9zLT5kYXRhW29mZnNldCArIDEyICsgY29uZmlnICogMl0pOwpAQCAtOTg2LDEwICs5ODAsMTAgQEAKIAogCXNldFBMTChiaW9zLCByZWcsIGZyZXEgKiAxMCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9lbmRfcmVwZWF0KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEwMDcsMTIgKzEwMDEsMTIgQEAKIAkgKiB3ZSdyZSBub3QgaW4gcmVwZWF0IG1vZGUKIAkgKi8KIAlpZiAoaWV4ZWMtPnJlcGVhdCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb3B5KHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTEwNDEsNyArMTAzNSw3IEBACiAJdWludDhfdCBjcnRjZGF0YTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTE7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IFJlZzogMHglMDhYLCBTaGlmdDogMHglMDJYLCBTcmNNYXNrOiAweCUwMlgsICIKIAkJICAgICAgIlBvcnQ6IDB4JTA0WCwgSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYXG4iLApAQCAtMTA2MCwxMCArMTA1NCwxMCBAQAogCWNydGNkYXRhIHw9ICh1aW50OF90KWRhdGE7CiAJYmlvc19pZHhwcnRfd3IoYmlvcywgY3J0Y3BvcnQsIGNydGNpbmRleCwgY3J0Y2RhdGEpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDExOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9ub3Qoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTA3OSwxMCArMTA3MywxMCBAQAogCQlCSU9TTE9HKGJpb3MsICIweCUwNFg6IC0tLS0tLSBFeGVjdXRpbmcgZm9sbG93aW5nIGNvbW1hbmRzIC0tLS0tLVxuIiwgb2Zmc2V0KTsKIAogCWlleGVjLT5leGVjdXRlID0gIWlleGVjLT5leGVjdXRlOwotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pb19mbGFnX2NvbmRpdGlvbihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTExMDAsNyArMTA5NCw3IEBACiAJdWludDhfdCBjb25kID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCWlmIChpb19mbGFnX2NvbmRpdGlvbl9tZXQoYmlvcywgb2Zmc2V0LCBjb25kKSkKIAkJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBDb25kaXRpb24gZnVsZmlsbGVkIC0tIGNvbnRpbnVpbmcgdG8gZXhlY3V0ZVxuIiwgb2Zmc2V0KTsKQEAgLTExMDksMTAgKzExMDMsMTAgQEAKIAkJaWV4ZWMtPmV4ZWN1dGUgPSBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaWR4X2FkZHJfbGF0Y2hlZChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTE0MCwxMSArMTEzNCwxMiBAQAogCXVpbnQzMl90IG1hc2sgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDldKTsKIAl1aW50MzJfdCBkYXRhID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxM10pOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDE3XTsKKwlpbnQgbGVuID0gMTggKyBjb3VudCAqIDI7CiAJdWludDMyX3QgdmFsdWU7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQ29udHJvbFJlZzogMHglMDhYLCBEYXRhUmVnOiAweCUwOFgsICIKIAkJICAgICAgIk1hc2s6IDB4JTA4WCwgRGF0YTogMHglMDhYLCBDb3VudDogMHglMDJYXG4iLApAQCAtMTE2NCwxMCArMTE1OSwxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgY29udHJvbHJlZywgdmFsdWUpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvX3Jlc3RyaWN0X3BsbDIoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTExOTYsMjUgKzExOTEsMjYgQEAKIAl1aW50OF90IHNoaWZ0ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA2XTsKIAl1aW50MzJfdCByZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDddKTsKKwlpbnQgbGVuID0gMTEgKyBjb3VudCAqIDQ7CiAJdWludDhfdCBjb25maWc7CiAJdWludDMyX3QgZnJlcTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiU2hpZnQ6IDB4JTAyWCwgQ291bnQ6IDB4JTAyWCwgUmVnOiAweCUwOFhcbiIsCiAJCW9mZnNldCwgY3J0Y3BvcnQsIGNydGNpbmRleCwgbWFzaywgc2hpZnQsIGNvdW50LCByZWcpOwogCiAJaWYgKCFyZWcpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJY29uZmlnID0gKGJpb3NfaWR4cHJ0X3JkKGJpb3MsIGNydGNwb3J0LCBjcnRjaW5kZXgpICYgbWFzaykgPj4gc2hpZnQ7CiAJaWYgKGNvbmZpZyA+IGNvdW50KSB7CiAJCU5WX0VSUk9SKGJpb3MtPmRldiwKIAkJCSAiMHglMDRYOiBDb25maWcgMHglMDJYIGV4Y2VlZHMgbWF4aW1hbCBib3VuZCAweCUwMlhcbiIsCiAJCQkgb2Zmc2V0LCBjb25maWcsIGNvdW50KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlmcmVxID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxMSArIGNvbmZpZyAqIDRdKTsKQEAgLTEyMjQsMTAgKzEyMjAsMTAgQEAKIAogCXNldFBMTChiaW9zLCByZWcsIGZyZXEpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcGxsMihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMjQ0LDE2ICsxMjQwLDE2IEBACiAJdWludDMyX3QgZnJlcSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV0pOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA5OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBSZWc6IDB4JTA0WCwgRnJlcTogJWRrSHpcbiIsCiAJCW9mZnNldCwgcmVnLCBmcmVxKTsKIAogCXNldFBMTChiaW9zLCByZWcsIGZyZXEpOwotCXJldHVybiB0cnVlOworCXJldHVybiA5OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9pMmNfYnl0ZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xMjc3LDEyICsxMjczLDEzIEBACiAJdWludDhfdCBpMmNfaW5kZXggPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgaTJjX2FkZHJlc3MgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOworCWludCBsZW4gPSA0ICsgY291bnQgKiAzOwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBEQ0JJMkNJbmRleDogMHglMDJYLCBJMkNBZGRyZXNzOiAweCUwMlgsICIKIAkJICAgICAgIkNvdW50OiAweCUwMlhcbiIsCkBAIC0xMjkwLDcgKzEyODcsNyBAQAogCiAJY2hhbiA9IGluaXRfaTJjX2RldmljZV9maW5kKGJpb3MtPmRldiwgaTJjX2luZGV4KTsKIAlpZiAoIWNoYW4pCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1aW50OF90IGkyY19yZWcgPSBiaW9zLT5kYXRhW29mZnNldCArIDQgKyBpICogM107CkBAIC0xMzAzLDcgKzEzMDAsNyBAQAogCQltc2cubGVuID0gMTsKIAkJbXNnLmJ1ZiA9ICZ2YWx1ZTsKIAkJaWYgKGkyY190cmFuc2ZlcigmY2hhbi0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiAwOwogCiAJCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSTJDUmVnOiAweCUwMlgsIFZhbHVlOiAweCUwMlgsICIKIAkJCSAgICAgICJNYXNrOiAweCUwMlgsIERhdGE6IDB4JTAyWFxuIiwKQEAgLTEzMTcsMTQgKzEzMTQsMTQgQEAKIAkJCW1zZy5sZW4gPSAxOwogCQkJbXNnLmJ1ZiA9ICZ2YWx1ZTsKIAkJCWlmIChpMmNfdHJhbnNmZXIoJmNoYW4tPmFkYXB0ZXIsICZtc2csIDEpICE9IDEpCi0JCQkJcmV0dXJuIGZhbHNlOworCQkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1faTJjX2J5dGUoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTM0NiwxMiArMTM0MywxMyBAQAogCXVpbnQ4X3QgaTJjX2luZGV4ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAl1aW50OF90IGkyY19hZGRyZXNzID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzXTsKKwlpbnQgbGVuID0gNCArIGNvdW50ICogMjsKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqY2hhbjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRENCSTJDSW5kZXg6IDB4JTAyWCwgSTJDQWRkcmVzczogMHglMDJYLCAiCiAJCSAgICAgICJDb3VudDogMHglMDJYXG4iLApAQCAtMTM1OSw3ICsxMzU3LDcgQEAKIAogCWNoYW4gPSBpbml0X2kyY19kZXZpY2VfZmluZChiaW9zLT5kZXYsIGkyY19pbmRleCk7CiAJaWYgKCFjaGFuKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJdWludDhfdCBpMmNfcmVnID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0ICsgaSAqIDJdOwpAQCAtMTM3NCwxNCArMTM3MiwxNCBAQAogCQkJbXNnLmxlbiA9IDE7CiAJCQltc2cuYnVmID0gJmRhdGE7CiAJCQlpZiAoaTJjX3RyYW5zZmVyKCZjaGFuLT5hZGFwdGVyLCAmbXNnLCAxKSAhPSAxKQotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2kyYyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNDAxLDEzICsxMzk5LDE0IEBACiAJdWludDhfdCBpMmNfaW5kZXggPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgaTJjX2FkZHJlc3MgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOworCWludCBsZW4gPSA0ICsgY291bnQ7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmNoYW47CiAJc3RydWN0IGkyY19tc2cgbXNnOwogCXVpbnQ4X3QgZGF0YVsyNTZdOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IERDQkkyQ0luZGV4OiAweCUwMlgsIEkyQ0FkZHJlc3M6IDB4JTAyWCwgIgogCQkgICAgICAiQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTE0MTUsNyArMTQxNCw3IEBACiAKIAljaGFuID0gaW5pdF9pMmNfZGV2aWNlX2ZpbmQoYmlvcy0+ZGV2LCBpMmNfaW5kZXgpOwogCWlmICghY2hhbikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWRhdGFbaV0gPSBiaW9zLT5kYXRhW29mZnNldCArIDQgKyBpXTsKQEAgLTE0MjksMTMgKzE0MjgsMTMgQEAKIAkJbXNnLmxlbiA9IGNvdW50OwogCQltc2cuYnVmID0gZGF0YTsKIAkJaWYgKGkyY190cmFuc2ZlcigmY2hhbi0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiAwOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3RtZHMoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTQ2MCw3ICsxNDU5LDcgQEAKIAl1aW50MzJfdCByZWcsIHZhbHVlOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA1OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBNYWdpY0xvb2t1cFZhbHVlOiAweCUwMlgsIFRNRFNBZGRyOiAweCUwMlgsICIKIAkJICAgICAgIk1hc2s6IDB4JTAyWCwgRGF0YTogMHglMDJYXG4iLApAQCAtMTQ2OCw3ICsxNDY3LDcgQEAKIAogCXJlZyA9IGdldF90bWRzX2luZGV4X3JlZyhiaW9zLT5kZXYsIG1sdik7CiAJaWYgKCFyZWcpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLAogCQkgIHRtZHNhZGRyIHwgTlZfUFJBTURBQ19GUF9UTURTX0NPTlRST0xfV1JJVEVfRElTQUJMRSk7CkBAIC0xNDc2LDEwICsxNDc1LDEwIEBACiAJYmlvc193cjMyKGJpb3MsIHJlZyArIDQsIHZhbHVlKTsKIAliaW9zX3dyMzIoYmlvcywgcmVnLCB0bWRzYWRkcik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gNTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fdG1kc19ncm91cChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewpAQCAtMTUwMCwxOCArMTQ5OSwxOSBAQAogCiAJdWludDhfdCBtbHYgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOworCWludCBsZW4gPSAzICsgY291bnQgKiAyOwogCXVpbnQzMl90IHJlZzsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBNYWdpY0xvb2t1cFZhbHVlOiAweCUwMlgsIENvdW50OiAweCUwMlhcbiIsCiAJCW9mZnNldCwgbWx2LCBjb3VudCk7CiAKIAlyZWcgPSBnZXRfdG1kc19pbmRleF9yZWcoYmlvcy0+ZGV2LCBtbHYpOwogCWlmICghcmVnKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJdWludDhfdCB0bWRzYWRkciA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMyArIGkgKiAyXTsKQEAgLTE1MjEsMTAgKzE1MjEsMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgdG1kc2FkZHIpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NyX2lkeF9hZHJfbGF0Y2goc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTE1NDcsMTEgKzE1NDcsMTIgQEAKIAl1aW50OF90IGNydGNpbmRleDIgPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCXVpbnQ4X3QgYmFzZWFkZHIgPSBiaW9zLT5kYXRhW29mZnNldCArIDNdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDRdOworCWludCBsZW4gPSA1ICsgY291bnQ7CiAJdWludDhfdCBvbGRhZGRyLCBkYXRhOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEluZGV4MTogMHglMDJYLCBJbmRleDI6IDB4JTAyWCwgIgogCQkgICAgICAiQmFzZUFkZHI6IDB4JTAyWCwgQ291bnQ6IDB4JTAyWFxuIiwKQEAgLTE1NjgsMTAgKzE1NjksMTAgQEAKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIE5WX0NJT19DUlhfX0NPTE9SLCBjcnRjaW5kZXgxLCBvbGRhZGRyKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NyKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE1OTIsNyArMTU5Myw3IEBACiAJdWludDhfdCB2YWx1ZTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNDsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSW5kZXg6IDB4JTAyWCwgTWFzazogMHglMDJYLCBEYXRhOiAweCUwMlhcbiIsCiAJCW9mZnNldCwgY3J0Y2luZGV4LCBtYXNrLCBkYXRhKTsKQEAgLTE2MDEsMTAgKzE2MDIsMTAgQEAKIAl2YWx1ZSB8PSBkYXRhOwogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIE5WX0NJT19DUlhfX0NPTE9SLCBjcnRjaW5kZXgsIHZhbHVlKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA0OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9jcihzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xNjIxLDE0ICsxNjIyLDE0IEBACiAJdWludDhfdCBkYXRhID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMzsKIAogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIE5WX0NJT19DUlhfX0NPTE9SLCBjcnRjaW5kZXgsIGRhdGEpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX2NyX2dyb3VwKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE2NDUsMTggKzE2NDYsMTkgQEAKIAkgKi8KIAogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOworCWludCBsZW4gPSAyICsgY291bnQgKiAyOwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKIAkJaW5pdF96bV9jcihiaW9zLCBvZmZzZXQgKyAyICsgMiAqIGkgLSAxLCBpZXhlYyk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb25kaXRpb25fdGltZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTE2ODAsNyArMTY4Miw3IEBACiAJdW5zaWduZWQgY250OwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJaWYgKHJldHJpZXMgPiAxMDApCiAJCXJldHJpZXMgPSAxMDA7CkBAIC0xNzExLDEwICsxNzEzLDEwIEBACiAJCWlleGVjLT5leGVjdXRlID0gZmFsc2U7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3ptX3JlZ19zZXF1ZW5jZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCSAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0xNzM0LDEwICsxNzM2LDExIEBACiAKIAl1aW50MzJfdCBiYXNlcmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CiAJdWludDMyX3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCWludCBsZW4gPSA2ICsgY291bnQgKiA0OwogCWludCBpOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEJhc2VSZWc6IDB4JTA4WCwgQ291bnQ6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBiYXNlcmVnLCBjb3VudCk7CkBAIC0xNzQ5LDEwICsxNzUyLDEwIEBACiAJCWJpb3Nfd3IzMihiaW9zLCByZWcsIGRhdGEpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3N1Yl9kaXJlY3Qoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTc2OCw3ICsxNzcxLDcgQEAKIAl1aW50MTZfdCBzdWJfb2Zmc2V0ID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDM7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IEV4ZWN1dGluZyBzdWJyb3V0aW5lIGF0IDB4JTA0WFxuIiwKIAkJb2Zmc2V0LCBzdWJfb2Zmc2V0KTsKQEAgLTE3NzcsMTAgKzE3ODAsMTAgQEAKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRW5kIG9mIDB4JTA0WCBzdWJyb3V0aW5lXG4iLCBvZmZzZXQsIHN1Yl9vZmZzZXQpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvcHlfbnZfcmVnKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTE4MDgsNyArMTgxMSw3IEBACiAJdWludDMyX3Qgc3JjdmFsdWUsIGRzdHZhbHVlOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAyMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogU3JjUmVnOiAweCUwOFgsIFNoaWZ0OiAweCUwMlgsIFNyY01hc2s6IDB4JTA4WCwgIgogCQkgICAgICAiWG9yOiAweCUwOFgsIERzdFJlZzogMHglMDhYLCBEc3RNYXNrOiAweCUwOFhcbiIsCkBAIC0xODI3LDEwICsxODMwLDEwIEBACiAKIAliaW9zX3dyMzIoYmlvcywgZHN0cmVnLCBkc3R2YWx1ZSB8IHNyY3ZhbHVlKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAyMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1faW5kZXhfaW8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMTg0OCwxNCArMTg1MSwxNCBAQAogCXVpbnQ4X3QgZGF0YSA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNF07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDU7CiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBjcnRjcG9ydCwgY3J0Y2luZGV4LCBkYXRhKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA1OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb21wdXRlX21lbShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xOTA0LDcgKzE5MDcsNyBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGJpb3MtPmRldi0+ZGV2X3ByaXZhdGU7CiAKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxOwogCiAJLyoKIAkgKiBPbiBldmVyeSBjYXJkIEkndmUgc2VlbiwgdGhpcyBzdGVwIGdldHMgZG9uZSBmb3IgdXMgZWFybGllciBpbgpAQCAtMTkyMiwxMCArMTkyNSwxMCBAQAogCS8qIHdyaXRlIGJhY2sgdGhlIHNhdmVkIGNvbmZpZ3VyYXRpb24gdmFsdWUgKi8KIAliaW9zX3dyMzIoYmlvcywgTlZfUEZCX0NGRzAsIGJpb3MtPnN0YXRlLnNhdmVkX252X3BmYl9jZmcwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9yZXNldChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0xOTU5LDEwICsxOTYyLDEwIEBACiAJcGNpX252XzIwICY9IH5OVl9QQlVTX1BDSV9OVl8yMF9ST01fU0hBRE9XX0VOQUJMRUQ7CS8qIDB4ZmZmZmZmZmUgKi8KIAliaW9zX3dyMzIoYmlvcywgTlZfUEJVU19QQ0lfTlZfMjAsIHBjaV9udl8yMCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbmZpZ3VyZV9tZW0oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTE5ODMsNyArMTk4Niw3IEBACiAJdWludDMyX3QgcmVnLCBkYXRhOwogCiAJaWYgKGJpb3MtPm1ham9yX3ZlcnNpb24gPiAyKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJYmlvc19pZHhwcnRfd3IoYmlvcywgTlZfVklPX1NSWCwgTlZfVklPX1NSX0NMT0NLX0lOREVYLCBiaW9zX2lkeHBydF9yZCgKIAkJICAgICAgIGJpb3MsIE5WX1ZJT19TUlgsIE5WX1ZJT19TUl9DTE9DS19JTkRFWCkgfCAweDIwKTsKQEAgLTIwMTUsMTAgKzIwMTgsMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIHJlZywgZGF0YSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2NvbmZpZ3VyZV9jbGsoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTIwMzgsNyArMjA0MSw3IEBACiAJaW50IGNsb2NrOwogCiAJaWYgKGJpb3MtPm1ham9yX3ZlcnNpb24gPiAyKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCiAJY2xvY2sgPSBST00xNihiaW9zLT5kYXRhW21lbWluaXRvZmZzICsgNF0pICogMTA7CiAJc2V0UExMKGJpb3MsIE5WX1BSQU1EQUNfTlZQTExfQ09FRkYsIGNsb2NrKTsKQEAgLTIwNDgsMTAgKzIwNTEsMTAgQEAKIAkJY2xvY2sgKj0gMjsKIAlzZXRQTEwoYmlvcywgTlZfUFJBTURBQ19NUExMX0NPRUZGLCBjbG9jayk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZmlndXJlX3ByZWluaXQoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0yMDcxLDE1ICsyMDc0LDE1IEBACiAJdWludDhfdCBjcjNjID0gKChzdHJhcHMgPDwgMikgJiAweGYwKSB8IChzdHJhcHMgJiAoMSA8PCA2KSk7CiAKIAlpZiAoYmlvcy0+bWFqb3JfdmVyc2lvbiA+IDIpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAKIAliaW9zX2lkeHBydF93cihiaW9zLCBOVl9DSU9fQ1JYX19DT0xPUiwKIAkJCSAgICAgTlZfQ0lPX0NSRV9TQ1JBVENINF9fSU5ERVgsIGNyM2MpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X2lvKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIwOTksNyArMjEwMiw3IEBACiAJdWludDhfdCBkYXRhID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA0XTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNTsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUG9ydDogMHglMDRYLCBNYXNrOiAweCUwMlgsIERhdGE6IDB4JTAyWFxuIiwKIAkJb2Zmc2V0LCBjcnRjcG9ydCwgbWFzaywgZGF0YSk7CkBAIC0yMTU4LDE1ICsyMTYxLDE1IEBACiAJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAJCQliaW9zX3dyMzIoYmlvcywgMHg2MTQxMDggKyAoaSoweDgwMCksIGJpb3NfcmQzMigKIAkJCQkgIGJpb3MsIDB4NjE0MTA4ICsgKGkqMHg4MDApKSAmIDB4MGZmZmZmZmYpOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDU7CiAJfQogCiAJYmlvc19wb3J0X3dyKGJpb3MsIGNydGNwb3J0LCAoYmlvc19wb3J0X3JkKGJpb3MsIGNydGNwb3J0KSAmIG1hc2spIHwKIAkJCQkJCQkJCWRhdGEpOwotCXJldHVybiB0cnVlOworCXJldHVybiA1OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9zdWIoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjE4MSw3ICsyMTg0LDcgQEAKIAl1aW50OF90IHN1YiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDI7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IENhbGxpbmcgc2NyaXB0ICVkXG4iLCBvZmZzZXQsIHN1Yik7CiAKQEAgLTIxOTEsMTAgKzIxOTQsMTAgQEAKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogRW5kIG9mIHNjcmlwdCAlZFxuIiwgb2Zmc2V0LCBzdWIpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3JhbV9jb25kaXRpb24oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTIyMTUsNyArMjIxOCw3IEBACiAJdWludDhfdCBkYXRhOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAzOwogCiAJZGF0YSA9IGJpb3NfcmQzMihiaW9zLCBOVl9QRkJfQk9PVF8wKSAmIG1hc2s7CiAKQEAgLTIyMjksMTAgKzIyMzIsMTAgQEAKIAkJaWV4ZWMtPmV4ZWN1dGUgPSBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfbnZfcmVnKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIyNTEsMTcgKzIyNTQsMTcgQEAKIAl1aW50MzJfdCBkYXRhID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA5XSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDEzOwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBSZWc6IDB4JTA4WCwgTWFzazogMHglMDhYLCBEYXRhOiAweCUwOFhcbiIsCiAJCW9mZnNldCwgcmVnLCBtYXNrLCBkYXRhKTsKIAogCWJpb3Nfd3IzMihiaW9zLCByZWcsIChiaW9zX3JkMzIoYmlvcywgcmVnKSAmIG1hc2spIHwgZGF0YSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTM7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X21hY3JvKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIyODUsNyArMjI4OCw3IEBACiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDI7CiAKIAlCSU9TTE9HKGJpb3MsICIweCUwNFg6IE1hY3JvOiAweCUwMlgsIE1hY3JvVGFibGVJbmRleDogMHglMDJYLCAiCiAJCSAgICAgICJDb3VudDogMHglMDJYXG4iLApAQCAtMjMwMCwxMCArMjMwMywxMCBAQAogCQliaW9zX3dyMzIoYmlvcywgcmVnLCBkYXRhKTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfZG9uZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMzE1LDEwICsyMzE4LDEwIEBACiAJICovCiAKIAkvKiBtaWxkIHJldHZhbCBhYnVzZSB0byBzdG9wIHBhcnNpbmcgdGhpcyB0YWJsZSAqLwotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmVzdW1lKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIzMzAsMTUgKzIzMzMsMTUgQEAKIAkgKi8KIAogCWlmIChpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiAxOwogCiAJaWV4ZWMtPmV4ZWN1dGUgPSB0cnVlOwogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogLS0tLSBFeGVjdXRpbmcgZm9sbG93aW5nIGNvbW1hbmRzIC0tLS1cbiIsIG9mZnNldCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfdGltZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yMzUzLDcgKzIzNTYsNyBAQAogCXVuc2lnbmVkIHRpbWUgPSBST00xNihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMzsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogU2xlZXBpbmcgZm9yIDB4JTA0WCBtaWNyb3NlY29uZHNcbiIsCiAJCW9mZnNldCwgdGltZSk7CkBAIC0yMzYzLDEwICsyMzY2LDEwIEBACiAJZWxzZQogCQltc2xlZXAoKHRpbWUgKyA5MDApIC8gMTAwMCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfY29uZGl0aW9uKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTIzODMsNyArMjM4Niw3IEBACiAJdWludDhfdCBjb25kID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogQ29uZGl0aW9uOiAweCUwMlhcbiIsIG9mZnNldCwgY29uZCk7CiAKQEAgLTIzOTQsMTAgKzIzOTcsMTAgQEAKIAkJaWV4ZWMtPmV4ZWN1dGUgPSBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW9fY29uZGl0aW9uKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI0MTQsNyArMjQxNyw3IEBACiAJdWludDhfdCBjb25kID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMjsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSU8gY29uZGl0aW9uOiAweCUwMlhcbiIsIG9mZnNldCwgY29uZCk7CiAKQEAgLTI0MjUsMTAgKzI0MjgsMTAgQEAKIAkJaWV4ZWMtPmV4ZWN1dGUgPSBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfaW5kZXhfaW8oc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjQ1MSw3ICsyNDU0LDcgQEAKIAl1aW50OF90IHZhbHVlOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiA2OwogCiAJQklPU0xPRyhiaW9zLCAiMHglMDRYOiBQb3J0OiAweCUwNFgsIEluZGV4OiAweCUwMlgsIE1hc2s6IDB4JTAyWCwgIgogCQkgICAgICAiRGF0YTogMHglMDJYXG4iLApAQCAtMjQ2MCwxMCArMjQ2MywxMCBAQAogCXZhbHVlID0gKGJpb3NfaWR4cHJ0X3JkKGJpb3MsIGNydGNwb3J0LCBjcnRjaW5kZXgpICYgbWFzaykgfCBkYXRhOwogCWJpb3NfaWR4cHJ0X3dyKGJpb3MsIGNydGNwb3J0LCBjcnRjaW5kZXgsIHZhbHVlKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA2OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9wbGwoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjQ4MSwxNiArMjQ4NCwxNiBAQAogCXVpbnQxNl90IGZyZXEgPSBST00xNihiaW9zLT5kYXRhW29mZnNldCArIDVdKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gNzsKIAogCUJJT1NMT0coYmlvcywgIjB4JTA0WDogUmVnOiAweCUwOFgsIEZyZXE6ICVkMGtIelxuIiwgb2Zmc2V0LCByZWcsIGZyZXEpOwogCiAJc2V0UExMKGJpb3MsIHJlZywgZnJlcSAqIDEwKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiA3OwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF96bV9yZWcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjUwNywxNyArMjUxMCwxNyBAQAogCXVpbnQzMl90IHZhbHVlID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDk7CiAKIAlpZiAocmVnID09IDB4MDAwMjAwKQogCQl2YWx1ZSB8PSAxOwogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgdmFsdWUpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIDk7CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3JhbV9yZXN0cmljdF9wbGwoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LAogCQkgICAgICBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKQEAgLTI1NDMsMTQgKzI1NDYsMTUgQEAKIAl1aW50OF90IHR5cGUgPSBiaW9zLT5kYXRhW29mZnNldCArIDFdOwogCXVpbnQzMl90IGZyZXEgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDIgKyAoaW5kZXggKiA0KV0pOwogCXVpbnQ4X3QgKnBsbF9saW1pdHMgPSAmYmlvcy0+ZGF0YVtiaW9zLT5wbGxfbGltaXRfdGJsX3B0cl0sICplbnRyeTsKKwlpbnQgbGVuID0gMiArIGJpb3MtPnJhbV9yZXN0cmljdF9ncm91cF9jb3VudCAqIDQ7CiAJaW50IGk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGxlbjsKIAogCWlmICghYmlvcy0+cGxsX2xpbWl0X3RibF9wdHIgfHwgKHBsbF9saW1pdHNbMF0gJiAweGYwKSAhPSAweDMwKSB7CiAJCU5WX0VSUk9SKGRldiwgIlBMTCBsaW1pdHMgdGFibGUgbm90IHZlcnNpb24gMy54XG4iKTsKLQkJcmV0dXJuIHRydWU7IC8qIGRlbGliZXJhdGUsIGFsbG93IGRlZmF1bHQgY2xvY2tzIHRvIHJlbWFpbiAqLworCQlyZXR1cm4gbGVuOyAvKiBkZWxpYmVyYXRlLCBhbGxvdyBkZWZhdWx0IGNsb2NrcyB0byByZW1haW4gKi8KIAl9CiAKIAllbnRyeSA9IHBsbF9saW1pdHMgKyBwbGxfbGltaXRzWzFdOwpAQCAtMjU2MywxNSArMjU2NywxNSBAQAogCQkJCW9mZnNldCwgdHlwZSwgcmVnLCBmcmVxKTsKIAogCQkJc2V0UExMKGJpb3MsIHJlZywgZnJlcSk7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkJCXJldHVybiBsZW47CiAJCX0KIAl9CiAKIAlOVl9FUlJPUihkZXYsICJQTEwgdHlwZSAweCUwMnggbm90IGZvdW5kIGluIFBMTCBsaW1pdHMgdGFibGUiLCB0eXBlKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF84YyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNTgxLDEwICsyNTg1LDEwIEBACiAJICoKIAkgKi8KIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF84ZChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNTk0LDEwICsyNTk4LDEwIEBACiAJICoKIAkgKi8KIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9ncGlvKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI2MTUsMTQgKzI2MTksMTcgQEAKIAljb25zdCB1aW50OF90ICpncGlvX2VudHJ5OwogCWludCBpOwogCisJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKKwkJcmV0dXJuIDE7CisKIAlpZiAoYmlvcy0+YmRjYi52ZXJzaW9uICE9IDB4NDApIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LCAiRENCIHRhYmxlIG5vdCB2ZXJzaW9uIDQuMFxuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFiaW9zLT5iZGNiLmdwaW9fdGFibGVfcHRyKSB7CiAJCU5WX1dBUk4oYmlvcy0+ZGV2LCAiSW52YWxpZCBwb2ludGVyIHRvIElOSVRfOEUgdGFibGVcbiIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWdwaW9fZW50cnkgPSBncGlvX3RhYmxlICsgZ3Bpb190YWJsZVsxXTsKQEAgLTI2NjAsMTMgKzI2NjcsMTAgQEAKIAkJYmlvc193cjMyKGJpb3MsIHIsIHYpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiAxOwogfQogCi0vKiBoYWNrIHRvIGF2b2lkIG1vdmluZyB0aGUgaXRibF9lbnRyeSBhcnJheSBiZWZvcmUgdGhpcyBmdW5jdGlvbiAqLwotaW50IGluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cF9ibG9ja2xlbjsKLQotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCQkgICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0yNjkyLDIxICsyNjk2LDIxIEBACiAJdWludDhfdCByZWdpbmNyZW1lbnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOwogCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDZdOwogCXVpbnQzMl90IHN0cmFwX3JhbWNmZywgZGF0YTsKLQl1aW50MTZfdCBibG9ja2xlbjsKKwkvKiBwcmV2aW91c2x5IHNldCBieSAnTScgQklUIHRhYmxlICovCisJdWludDE2X3QgYmxvY2tsZW4gPSBiaW9zLT5yYW1fcmVzdHJpY3RfZ3JvdXBfY291bnQgKiA0OworCWludCBsZW4gPSA3ICsgY291bnQgKiBibG9ja2xlbjsKIAl1aW50OF90IGluZGV4OwogCWludCBpOwogCi0JLyogcHJldmlvdXNseSBzZXQgYnkgJ00nIEJJVCB0YWJsZSAqLwotCWJsb2NrbGVuID0gaW5pdF9yYW1fcmVzdHJpY3Rfem1fcmVnX2dyb3VwX2Jsb2NrbGVuOwogCiAJaWYgKCFpZXhlYy0+ZXhlY3V0ZSkKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBsZW47CiAKIAlpZiAoIWJsb2NrbGVuKSB7CiAJCU5WX0VSUk9SKGJpb3MtPmRldiwKIAkJCSAiMHglMDRYOiBaZXJvIGJsb2NrIGxlbmd0aCAtIGhhcyB0aGUgTSB0YWJsZSAiCiAJCQkgImJlZW4gcGFyc2VkP1xuIiwgb2Zmc2V0KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAl9CiAKIAlzdHJhcF9yYW1jZmcgPSAoYmlvc19yZDMyKGJpb3MsIE5WX1BFWFRERVZfQk9PVF8wKSA+PiAyKSAmIDB4ZjsKQEAgLTI3MjQsMTAgKzI3MjgsMTAgQEAKIAkJcmVnICs9IHJlZ2luY3JlbWVudDsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgYm9vbAorc3RhdGljIGludAogaW5pdF9jb3B5X3ptX3JlZyhzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsIHN0cnVjdCBpbml0X2V4ZWMgKmlleGVjKQogewogCS8qCkBAIC0yNzQ0LDE0ICsyNzQ4LDE0IEBACiAJdWludDMyX3QgZHN0cmVnID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XSk7CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDk7CiAKIAliaW9zX3dyMzIoYmlvcywgZHN0cmVnLCBiaW9zX3JkMzIoYmlvcywgc3JjcmVnKSk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gOTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fcmVnX2dyb3VwX2FkZHJfbGF0Y2hlZChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1aW50MTZfdCBvZmZzZXQsCiAJCQkgICAgICAgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CkBAIC0yNzY5LDIwICsyNzczLDIxIEBACiAKIAl1aW50MzJfdCByZWcgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKIAl1aW50OF90IGNvdW50ID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyA1XTsKKwlpbnQgbGVuID0gNiArIGNvdW50ICogNDsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJdWludDMyX3QgZGF0YSA9IFJPTTMyKGJpb3MtPmRhdGFbb2Zmc2V0ICsgNiArIDQgKiBpXSk7CiAJCWJpb3Nfd3IzMihiaW9zLCByZWcsIGRhdGEpOwogCX0KIAotCXJldHVybiB0cnVlOworCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBib29sCitzdGF0aWMgaW50CiBpbml0X3Jlc2VydmVkKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTI3OTMsMTAgKzI3OTgsMTAgQEAKIAkgKiBTZWVtaW5nbHkgZG9lcyBub3RoaW5nCiAJICovCiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfOTYoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjgyOSwxMyArMjgzNCwxMyBAQAogCXZhbCA8PD0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAxNl07CiAKIAlpZiAoIWlleGVjLT5leGVjdXRlKQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIDE3OwogCiAJYmlvc193cjMyKGJpb3MsIHJlZywgKGJpb3NfcmQzMihiaW9zLCByZWcpICYgbWFzaykgfCB2YWwpOwotCXJldHVybiB0cnVlOworCXJldHVybiAxNzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfOTcoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjg1OSwxMyArMjg2NCwxMyBAQAogCXZhbCA9ICh2YWwgJiBtYXNrKSB8ICgodmFsICsgYWRkKSAmIH5tYXNrKTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gMTM7CiAKIAliaW9zX3dyMzIoYmlvcywgcmVnLCB2YWwpOwotCXJldHVybiB0cnVlOworCXJldHVybiAxMzsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfYXV4Y2goc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjg4MywzMiArMjg4OCwzMyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfaTJjX2NoYW4gKmF1eGNoOwogCXVpbnQzMl90IGFkZHIgPSBST00zMihiaW9zLT5kYXRhW29mZnNldCArIDFdKTsKLQl1aW50OF90IGxlbiA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJdWludDhfdCBjb3VudCA9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgNV07CisJaW50IGxlbiA9IDYgKyBjb3VudCAqIDI7CiAJaW50IHJldCwgaTsKIAogCWlmICghYmlvcy0+ZGlzcGxheS5vdXRwdXQpIHsKIAkJTlZfRVJST1IoZGV2LCAiSU5JVF9BVVhDSDogbm8gYWN0aXZlIG91dHB1dFxuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJYXV4Y2ggPSBpbml0X2kyY19kZXZpY2VfZmluZChkZXYsIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwogCWlmICghYXV4Y2gpIHsKIAkJTlZfRVJST1IoZGV2LCAiSU5JVF9BVVhDSDogY291bGRuJ3QgZ2V0IGF1eGNoICVkXG4iLAogCQkJIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJb2Zmc2V0ICs9IDY7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBvZmZzZXQgKz0gMikgeworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBvZmZzZXQgKz0gMikgewogCQl1aW50OF90IGRhdGE7CiAKIAkJcmV0ID0gbm91dmVhdV9kcF9hdXhjaChhdXhjaCwgOSwgYWRkciwgJmRhdGEsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlOVl9FUlJPUihkZXYsICJJTklUX0FVWENIOiByZCBhdXhjaCBmYWlsICVkXG4iLCByZXQpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAogCQlkYXRhICY9IGJpb3MtPmRhdGFbb2Zmc2V0ICsgMF07CkBAIC0yOTE3LDE0ICsyOTIzLDE0IEBACiAJCXJldCA9IG5vdXZlYXVfZHBfYXV4Y2goYXV4Y2gsIDgsIGFkZHIsICZkYXRhLCAxKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAiSU5JVF9BVVhDSDogd3IgYXV4Y2ggZmFpbCAlZFxuIiwgcmV0KTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGJvb2wKK3N0YXRpYyBpbnQKIGluaXRfem1fYXV4Y2goc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKIHsKIAkvKgpAQCAtMjk0MSwxMDYgKzI5NDcsOTkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OwogCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICphdXhjaDsKIAl1aW50MzJfdCBhZGRyID0gUk9NMzIoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7Ci0JdWludDhfdCBsZW4gPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCXVpbnQ4X3QgY291bnQgPSBiaW9zLT5kYXRhW29mZnNldCArIDVdOworCWludCBsZW4gPSA2ICsgY291bnQ7CiAJaW50IHJldCwgaTsKIAogCWlmICghYmlvcy0+ZGlzcGxheS5vdXRwdXQpIHsKIAkJTlZfRVJST1IoZGV2LCAiSU5JVF9aTV9BVVhDSDogbm8gYWN0aXZlIG91dHB1dFxuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJYXV4Y2ggPSBpbml0X2kyY19kZXZpY2VfZmluZChkZXYsIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwogCWlmICghYXV4Y2gpIHsKIAkJTlZfRVJST1IoZGV2LCAiSU5JVF9aTV9BVVhDSDogY291bGRuJ3QgZ2V0IGF1eGNoICVkXG4iLAogCQkJIGJpb3MtPmRpc3BsYXkub3V0cHV0LT5pMmNfaW5kZXgpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCi0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gbGVuOwogCiAJb2Zmc2V0ICs9IDY7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBvZmZzZXQrKykgeworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBvZmZzZXQrKykgewogCQlyZXQgPSBub3V2ZWF1X2RwX2F1eGNoKGF1eGNoLCA4LCBhZGRyLCAmYmlvcy0+ZGF0YVtvZmZzZXRdLCAxKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAiSU5JVF9aTV9BVVhDSDogd3IgYXV4Y2ggZmFpbCAlZFxuIiwgcmV0KTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIHN0cnVjdCBpbml0X3RibF9lbnRyeSBpdGJsX2VudHJ5W10gPSB7CiAJLyogY29tbWFuZCBuYW1lICAgICAgICAgICAgICAgICAgICAgICAsIGlkICAsIGxlbmd0aCAgLCBvZmZzZXQgICwgbXVsdCAgICAsIGNvbW1hbmQgaGFuZGxlciAgICAgICAgICAgICAgICAgKi8KIAkvKiBJTklUX1BST0cgKDB4MzEsIDE1LCAxMCwgNCkgcmVtb3ZlZCBkdWUgdG8gbm8gZXhhbXBsZSBvZiB1c2UgKi8KLQl7ICJJTklUX0lPX1JFU1RSSUNUX1BST0ciICAgICAgICAgICAgICwgMHgzMiwgMTEgICAgICAsIDYgICAgICAgLCA0ICAgICAgICwgaW5pdF9pb19yZXN0cmljdF9wcm9nICAgICAgICAgICB9LAotCXsgIklOSVRfUkVQRUFUIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDMzLCAyICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3JlcGVhdCAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JT19SRVNUUklDVF9QTEwiICAgICAgICAgICAgICAsIDB4MzQsIDEyICAgICAgLCA3ICAgICAgICwgMiAgICAgICAsIGluaXRfaW9fcmVzdHJpY3RfcGxsICAgICAgICAgICAgfSwKLQl7ICJJTklUX0VORF9SRVBFQVQiICAgICAgICAgICAgICAgICAgICwgMHgzNiwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9lbmRfcmVwZWF0ICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09QWSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDM3LCAxMSAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvcHkgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9OT1QiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzgsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfbm90ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0lPX0ZMQUdfQ09ORElUSU9OIiAgICAgICAgICAgICwgMHgzOSwgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9pb19mbGFnX2NvbmRpdGlvbiAgICAgICAgICB9LAotCXsgIklOSVRfSU5ERVhfQUREUkVTU19MQVRDSEVEIiAgICAgICAgLCAweDQ5LCAxOCAgICAgICwgMTcgICAgICAsIDIgICAgICAgLCBpbml0X2lkeF9hZGRyX2xhdGNoZWQgICAgICAgICAgIH0sCi0JeyAiSU5JVF9JT19SRVNUUklDVF9QTEwyIiAgICAgICAgICAgICAsIDB4NEEsIDExICAgICAgLCA2ICAgICAgICwgNCAgICAgICAsIGluaXRfaW9fcmVzdHJpY3RfcGxsMiAgICAgICAgICAgfSwKLQl7ICJJTklUX1BMTDIiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg0QiwgOSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9wbGwyICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSTJDX0JZVEUiICAgICAgICAgICAgICAgICAgICAgLCAweDRDLCA0ICAgICAgICwgMyAgICAgICAsIDMgICAgICAgLCBpbml0X2kyY19ieXRlICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9JMkNfQllURSIgICAgICAgICAgICAgICAgICAsIDB4NEQsIDQgICAgICAgLCAzICAgICAgICwgMiAgICAgICAsIGluaXRfem1faTJjX2J5dGUgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0kyQyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg0RSwgNCAgICAgICAsIDMgICAgICAgLCAxICAgICAgICwgaW5pdF96bV9pMmMgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfVE1EUyIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDRGLCA1ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3RtZHMgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9UTURTX0dST1VQIiAgICAgICAgICAgICAgICAsIDB4NTAsIDMgICAgICAgLCAyICAgICAgICwgMiAgICAgICAsIGluaXRfem1fdG1kc19ncm91cCAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NSX0lOREVYX0FERFJFU1NfTEFUQ0hFRCIgICAgICwgMHg1MSwgNSAgICAgICAsIDQgICAgICAgLCAxICAgICAgICwgaW5pdF9jcl9pZHhfYWRyX2xhdGNoICAgICAgICAgICB9LAotCXsgIklOSVRfQ1IiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDUyLCA0ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NyICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9DUiIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NTMsIDMgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfem1fY3IgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0NSX0dST1VQIiAgICAgICAgICAgICAgICAgICwgMHg1NCwgMiAgICAgICAsIDEgICAgICAgLCAyICAgICAgICwgaW5pdF96bV9jcl9ncm91cCAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09ORElUSU9OX1RJTUUiICAgICAgICAgICAgICAgLCAweDU2LCAzICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbmRpdGlvbl90aW1lICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9SRUdfU0VRVUVOQ0UiICAgICAgICAgICAgICAsIDB4NTgsIDYgICAgICAgLCA1ICAgICAgICwgNCAgICAgICAsIGluaXRfem1fcmVnX3NlcXVlbmNlICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX1JFU1RSSUNUX1BST0ciICAgICAgICAgICAgICwgMHgzMiwgaW5pdF9pb19yZXN0cmljdF9wcm9nICAgICAgICAgICB9LAorCXsgIklOSVRfUkVQRUFUIiAgICAgICAgICAgICAgICAgICAgICAgLCAweDMzLCBpbml0X3JlcGVhdCAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JT19SRVNUUklDVF9QTEwiICAgICAgICAgICAgICAsIDB4MzQsIGluaXRfaW9fcmVzdHJpY3RfcGxsICAgICAgICAgICAgfSwKKwl7ICJJTklUX0VORF9SRVBFQVQiICAgICAgICAgICAgICAgICAgICwgMHgzNiwgaW5pdF9lbmRfcmVwZWF0ICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09QWSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDM3LCBpbml0X2NvcHkgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9OT1QiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4MzgsIGluaXRfbm90ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lPX0ZMQUdfQ09ORElUSU9OIiAgICAgICAgICAgICwgMHgzOSwgaW5pdF9pb19mbGFnX2NvbmRpdGlvbiAgICAgICAgICB9LAorCXsgIklOSVRfSU5ERVhfQUREUkVTU19MQVRDSEVEIiAgICAgICAgLCAweDQ5LCBpbml0X2lkeF9hZGRyX2xhdGNoZWQgICAgICAgICAgIH0sCisJeyAiSU5JVF9JT19SRVNUUklDVF9QTEwyIiAgICAgICAgICAgICAsIDB4NEEsIGluaXRfaW9fcmVzdHJpY3RfcGxsMiAgICAgICAgICAgfSwKKwl7ICJJTklUX1BMTDIiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg0QiwgaW5pdF9wbGwyICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSTJDX0JZVEUiICAgICAgICAgICAgICAgICAgICAgLCAweDRDLCBpbml0X2kyY19ieXRlICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9JMkNfQllURSIgICAgICAgICAgICAgICAgICAsIDB4NEQsIGluaXRfem1faTJjX2J5dGUgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0kyQyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg0RSwgaW5pdF96bV9pMmMgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfVE1EUyIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDRGLCBpbml0X3RtZHMgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9UTURTX0dST1VQIiAgICAgICAgICAgICAgICAsIDB4NTAsIGluaXRfem1fdG1kc19ncm91cCAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NSX0lOREVYX0FERFJFU1NfTEFUQ0hFRCIgICAgICwgMHg1MSwgaW5pdF9jcl9pZHhfYWRyX2xhdGNoICAgICAgICAgICB9LAorCXsgIklOSVRfQ1IiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDUyLCBpbml0X2NyICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9DUiIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NTMsIGluaXRfem1fY3IgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX0NSX0dST1VQIiAgICAgICAgICAgICAgICAgICwgMHg1NCwgaW5pdF96bV9jcl9ncm91cCAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09ORElUSU9OX1RJTUUiICAgICAgICAgICAgICAgLCAweDU2LCBpbml0X2NvbmRpdGlvbl90aW1lICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9SRUdfU0VRVUVOQ0UiICAgICAgICAgICAgICAsIDB4NTgsIGluaXRfem1fcmVnX3NlcXVlbmNlICAgICAgICAgICAgfSwKIAkvKiBJTklUX0lORElSRUNUX1JFRyAoMHg1QSwgNywgMCwgMCkgcmVtb3ZlZCBkdWUgdG8gbm8gZXhhbXBsZSBvZiB1c2UgKi8KLQl7ICJJTklUX1NVQl9ESVJFQ1QiICAgICAgICAgICAgICAgICAgICwgMHg1QiwgMyAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9zdWJfZGlyZWN0ICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09QWV9OVl9SRUciICAgICAgICAgICAgICAgICAgLCAweDVGLCAyMiAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvcHlfbnZfcmVnICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9aTV9JTkRFWF9JTyIgICAgICAgICAgICAgICAgICAsIDB4NjIsIDUgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfem1faW5kZXhfaW8gICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTVBVVEVfTUVNIiAgICAgICAgICAgICAgICAgICwgMHg2MywgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb21wdXRlX21lbSAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfUkVTRVQiICAgICAgICAgICAgICAgICAgICAgICAgLCAweDY1LCAxMyAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3Jlc2V0ICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05GSUdVUkVfTUVNIiAgICAgICAgICAgICAgICAsIDB4NjYsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZmlndXJlX21lbSAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0NPTkZJR1VSRV9DTEsiICAgICAgICAgICAgICAgICwgMHg2NywgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb25maWd1cmVfY2xrICAgICAgICAgICAgICB9LAotCXsgIklOSVRfQ09ORklHVVJFX1BSRUlOSVQiICAgICAgICAgICAgLCAweDY4LCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2NvbmZpZ3VyZV9wcmVpbml0ICAgICAgICAgIH0sCi0JeyAiSU5JVF9JTyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NjksIDUgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfaW8gICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1NVQiIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2QiwgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9zdWIgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfUkFNX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgLCAweDZELCAzICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3JhbV9jb25kaXRpb24gICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9OVl9SRUciICAgICAgICAgICAgICAgICAgICAgICAsIDB4NkUsIDEzICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfbnZfcmVnICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX01BQ1JPIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2RiwgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9tYWNybyAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfRE9ORSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDcxLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2RvbmUgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9SRVNVTUUiICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzIsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmVzdW1lICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1NVQl9ESVJFQ1QiICAgICAgICAgICAgICAgICAgICwgMHg1QiwgaW5pdF9zdWJfZGlyZWN0ICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09QWV9OVl9SRUciICAgICAgICAgICAgICAgICAgLCAweDVGLCBpbml0X2NvcHlfbnZfcmVnICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9JTkRFWF9JTyIgICAgICAgICAgICAgICAgICAsIDB4NjIsIGluaXRfem1faW5kZXhfaW8gICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTVBVVEVfTUVNIiAgICAgICAgICAgICAgICAgICwgMHg2MywgaW5pdF9jb21wdXRlX21lbSAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUkVTRVQiICAgICAgICAgICAgICAgICAgICAgICAgLCAweDY1LCBpbml0X3Jlc2V0ICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9DT05GSUdVUkVfTUVNIiAgICAgICAgICAgICAgICAsIDB4NjYsIGluaXRfY29uZmlndXJlX21lbSAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0NPTkZJR1VSRV9DTEsiICAgICAgICAgICAgICAgICwgMHg2NywgaW5pdF9jb25maWd1cmVfY2xrICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09ORklHVVJFX1BSRUlOSVQiICAgICAgICAgICAgLCAweDY4LCBpbml0X2NvbmZpZ3VyZV9wcmVpbml0ICAgICAgICAgIH0sCisJeyAiSU5JVF9JTyIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NjksIGluaXRfaW8gICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1NVQiIgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2QiwgaW5pdF9zdWIgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUkFNX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgLCAweDZELCBpbml0X3JhbV9jb25kaXRpb24gICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9OVl9SRUciICAgICAgICAgICAgICAgICAgICAgICAsIDB4NkUsIGluaXRfbnZfcmVnICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX01BQ1JPIiAgICAgICAgICAgICAgICAgICAgICAgICwgMHg2RiwgaW5pdF9tYWNybyAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfRE9ORSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDcxLCBpbml0X2RvbmUgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9SRVNVTUUiICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzIsIGluaXRfcmVzdW1lICAgICAgICAgICAgICAgICAgICAgfSwKIAkvKiBJTklUX1JBTV9DT05ESVRJT04yICgweDczLCA5LCAwLCAwKSByZW1vdmVkIGR1ZSB0byBubyBleGFtcGxlIG9mIHVzZSAqLwotCXsgIklOSVRfVElNRSIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDc0LCAzICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X3RpbWUgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9DT05ESVRJT04iICAgICAgICAgICAgICAgICAgICAsIDB4NzUsIDIgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfY29uZGl0aW9uICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0lPX0NPTkRJVElPTiIgICAgICAgICAgICAgICAgICwgMHg3NiwgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9pb19jb25kaXRpb24gICAgICAgICAgICAgICB9LAotCXsgIklOSVRfSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgICAgLCAweDc4LCA2ICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0X2luZGV4X2lvICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9QTEwiICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4NzksIDcgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcGxsICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX1JFRyIgICAgICAgICAgICAgICAgICAgICAgICwgMHg3QSwgOSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF96bV9yZWcgICAgICAgICAgICAgICAgICAgICB9LAotCS8qIElOSVRfUkFNX1JFU1RSSUNUX1BMTCdzIGxlbmd0aCBpcyBhZGp1c3RlZCBieSB0aGUgQklUIE0gdGFibGUgKi8KLQl7ICJJTklUX1JBTV9SRVNUUklDVF9QTEwiICAgICAgICAgICAgICwgMHg4NywgMiAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9yYW1fcmVzdHJpY3RfcGxsICAgICAgICAgICB9LAotCXsgIklOSVRfOEMiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhDLCAxICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0XzhjICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF84RCIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEQsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfOGQgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX0dQSU8iICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4RSwgMSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9ncGlvICAgICAgICAgICAgICAgICAgICAgICB9LAotCS8qIElOSVRfUkFNX1JFU1RSSUNUX1pNX1JFR19HUk9VUCdzIG11bHQgaXMgbG9hZGVkIGJ5IE0gdGFibGUgaW4gQklUICovCi0JeyAiSU5JVF9SQU1fUkVTVFJJQ1RfWk1fUkVHX0dST1VQIiAgICAsIDB4OEYsIDcgICAgICAgLCA2ICAgICAgICwgMCAgICAgICAsIGluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cCAgfSwKLQl7ICJJTklUX0NPUFlfWk1fUkVHIiAgICAgICAgICAgICAgICAgICwgMHg5MCwgOSAgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF9jb3B5X3ptX3JlZyAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfWk1fUkVHX0dST1VQX0FERFJFU1NfTEFUQ0hFRCIgLCAweDkxLCA2ICAgICAgICwgNSAgICAgICAsIDQgICAgICAgLCBpbml0X3ptX3JlZ19ncm91cF9hZGRyX2xhdGNoZWQgIH0sCi0JeyAiSU5JVF9SRVNFUlZFRCIgICAgICAgICAgICAgICAgICAgICAsIDB4OTIsIDEgICAgICAgLCAwICAgICAgICwgMCAgICAgICAsIGluaXRfcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUXzk2IiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5NiwgMTcgICAgICAsIDAgICAgICAgLCAwICAgICAgICwgaW5pdF85NiAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCXsgIklOSVRfOTciICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk3LCAxMyAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBpbml0Xzk3ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0JeyAiSU5JVF9BVVhDSCIgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTgsIDYgICAgICAgLCA1ICAgICAgICwgMiAgICAgICAsIGluaXRfYXV4Y2ggICAgICAgICAgICAgICAgICAgICAgfSwKLQl7ICJJTklUX1pNX0FVWENIIiAgICAgICAgICAgICAgICAgICAgICwgMHg5OSwgNiAgICAgICAsIDUgICAgICAgLCAxICAgICAgICwgaW5pdF96bV9hdXhjaCAgICAgICAgICAgICAgICAgICB9LAotCXsgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgLCAwICAgICAgICwgMCAgICAgICAsIDAgICAgICAgLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwl7ICJJTklUX1RJTUUiICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg3NCwgaW5pdF90aW1lICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQ09ORElUSU9OIiAgICAgICAgICAgICAgICAgICAgLCAweDc1LCBpbml0X2NvbmRpdGlvbiAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9JT19DT05ESVRJT04iICAgICAgICAgICAgICAgICAsIDB4NzYsIGluaXRfaW9fY29uZGl0aW9uICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0lOREVYX0lPIiAgICAgICAgICAgICAgICAgICAgICwgMHg3OCwgaW5pdF9pbmRleF9pbyAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUExMIiAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDc5LCBpbml0X3BsbCAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9SRUciICAgICAgICAgICAgICAgICAgICAgICAsIDB4N0EsIGluaXRfem1fcmVnICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1JBTV9SRVNUUklDVF9QTEwiICAgICAgICAgICAgICwgMHg4NywgaW5pdF9yYW1fcmVzdHJpY3RfcGxsICAgICAgICAgICB9LAorCXsgIklOSVRfOEMiICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDhDLCBpbml0XzhjICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF84RCIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OEQsIGluaXRfOGQgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX0dQSU8iICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg4RSwgaW5pdF9ncGlvICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfUkFNX1JFU1RSSUNUX1pNX1JFR19HUk9VUCIgICAgLCAweDhGLCBpbml0X3JhbV9yZXN0cmljdF96bV9yZWdfZ3JvdXAgIH0sCisJeyAiSU5JVF9DT1BZX1pNX1JFRyIgICAgICAgICAgICAgICAgICAsIDB4OTAsIGluaXRfY29weV96bV9yZWcgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUX1pNX1JFR19HUk9VUF9BRERSRVNTX0xBVENIRUQiICwgMHg5MSwgaW5pdF96bV9yZWdfZ3JvdXBfYWRkcl9sYXRjaGVkICB9LAorCXsgIklOSVRfUkVTRVJWRUQiICAgICAgICAgICAgICAgICAgICAgLCAweDkyLCBpbml0X3Jlc2VydmVkICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF85NiIgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDB4OTYsIGluaXRfOTYgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwl7ICJJTklUXzk3IiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMHg5NywgaW5pdF85NyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfQVVYQ0giICAgICAgICAgICAgICAgICAgICAgICAgLCAweDk4LCBpbml0X2F1eGNoICAgICAgICAgICAgICAgICAgICAgIH0sCisJeyAiSU5JVF9aTV9BVVhDSCIgICAgICAgICAgICAgICAgICAgICAsIDB4OTksIGluaXRfem1fYXV4Y2ggICAgICAgICAgICAgICAgICAgfSwKKwl7IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9pbml0X3RhYmxlX2VudHJ5X2xlbmd0aChzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgaSkKLXsKLQkvKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBnaXZlbiBpbml0IHRhYmxlIGVudHJ5LiAqLwotCXJldHVybiBpdGJsX2VudHJ5W2ldLmxlbmd0aCArIGJpb3MtPmRhdGFbb2Zmc2V0ICsgaXRibF9lbnRyeVtpXS5sZW5ndGhfb2Zmc2V0XSppdGJsX2VudHJ5W2ldLmxlbmd0aF9tdWx0aXBsaWVyOwotfQotCiAjZGVmaW5lIE1BWF9UQUJMRV9PUFMgMTAwMAogCiBzdGF0aWMgaW50CkBAIC0zMDU2LDcgKzMwNTUsNyBAQAogCSAqIGlzIGNoYW5nZWQgYmFjayB0byBFWEVDVVRFLgogCSAqLwogCi0JaW50IGNvdW50ID0gMCwgaTsKKwlpbnQgY291bnQgPSAwLCBpLCByZXM7CiAJdWludDhfdCBpZDsKIAogCS8qCkBAIC0zMDc2LDIyICszMDc1LDIxIEBACiAJCQkJb2Zmc2V0LCBpdGJsX2VudHJ5W2ldLmlkLCBpdGJsX2VudHJ5W2ldLm5hbWUpOwogCiAJCQkvKiBleGVjdXRlIGV2ZW50dWFsIGNvbW1hbmQgaGFuZGxlciAqLwotCQkJaWYgKGl0YmxfZW50cnlbaV0uaGFuZGxlcikKLQkJCQlpZiAoISgqaXRibF9lbnRyeVtpXS5oYW5kbGVyKShiaW9zLCBvZmZzZXQsIGlleGVjKSkKLQkJCQkJYnJlYWs7CisJCQlyZXMgPSAoKml0YmxfZW50cnlbaV0uaGFuZGxlcikoYmlvcywgb2Zmc2V0LCBpZXhlYyk7CisJCQlpZiAoIXJlcykKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBBZGQgdGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBjb21tYW5kIGluY2x1ZGluZyBhbGwgZGF0YQorCQkJICogb2YgdGhhdCBjb21tYW5kLiBUaGUgb2Zmc2V0IHdpbGwgdGhlbiBiZSBwb2ludGluZyBvbiB0aGUKKwkJCSAqIG5leHQgb3AgY29kZS4KKwkJCSAqLworCQkJb2Zmc2V0ICs9IHJlczsKIAkJfSBlbHNlIHsKIAkJCU5WX0VSUk9SKGJpb3MtPmRldiwKIAkJCQkgIjB4JTA0WDogSW5pdCB0YWJsZSBjb21tYW5kIG5vdCBmb3VuZDogIgogCQkJCSAiMHglMDJYXG4iLCBvZmZzZXQsIGlkKTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9Ci0KLQkJLyoKLQkJICogQWRkIHRoZSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBpbmNsdWRpbmcgYWxsIGRhdGEKLQkJICogb2YgdGhhdCBjb21tYW5kLiBUaGUgb2Zmc2V0IHdpbGwgdGhlbiBiZSBwb2ludGluZyBvbiB0aGUKLQkJICogbmV4dCBvcCBjb2RlLgotCQkgKi8KLQkJb2Zmc2V0ICs9IGdldF9pbml0X3RhYmxlX2VudHJ5X2xlbmd0aChiaW9zLCBvZmZzZXQsIGkpOwogCX0KIAogCWlmIChvZmZzZXQgPj0gYmlvcy0+bGVuZ3RoKQpAQCAtMzg1NCw3ICszODUyLDcgQEAKIAkgKiBzY3JpcHQgdGFibGVzIGlzIGEgcG9pbnRlciB0byB0aGUgc2NyaXB0IHRvIGV4ZWN1dGUuCiAJICovCiAKLQlOVl9ERUJVRyhkZXYsICJTZWFyY2hpbmcgZm9yIG91dHB1dCBlbnRyeSBmb3IgJWQgJWQgJWRcbiIsCisJTlZfREVCVUdfS01TKGRldiwgIlNlYXJjaGluZyBmb3Igb3V0cHV0IGVudHJ5IGZvciAlZCAlZCAlZFxuIiwKIAkJCWRjYmVudC0+dHlwZSwgZGNiZW50LT5sb2NhdGlvbiwgZGNiZW50LT5vcik7CiAJb3RhYmxlID0gYmlvc19vdXRwdXRfY29uZmlnX21hdGNoKGRldiwgZGNiZW50LCB0YWJsZVsxXSArCiAJCQkJCSAgYmlvcy0+ZGlzcGxheS5zY3JpcHRfdGFibGVfcHRyLApAQCAtMzg4NCw3ICszODgyLDcgQEAKIAlpZiAocHhjbGsgPT0gMCkgewogCQlzY3JpcHQgPSBST00xNihvdGFibGVbNl0pOwogCQlpZiAoIXNjcmlwdCkgewotCQkJTlZfREVCVUcoZGV2LCAib3V0cHV0IHNjcmlwdCAwIG5vdCBmb3VuZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAib3V0cHV0IHNjcmlwdCAwIG5vdCBmb3VuZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC0zODk0LDcgKzM4OTIsNyBAQAogCWlmIChweGNsayA9PSAtMSkgewogCQlzY3JpcHQgPSBST00xNihvdGFibGVbOF0pOwogCQlpZiAoIXNjcmlwdCkgewotCQkJTlZfREVCVUcoZGV2LCAib3V0cHV0IHNjcmlwdCAxIG5vdCBmb3VuZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAib3V0cHV0IHNjcmlwdCAxIG5vdCBmb3VuZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC0zOTA3LDcgKzM5MDUsNyBAQAogCQllbHNlCiAJCQlzY3JpcHQgPSAwOwogCQlpZiAoIXNjcmlwdCkgewotCQkJTlZfREVCVUcoZGV2LCAib3V0cHV0IHNjcmlwdCAyIG5vdCBmb3VuZFxuIik7CisJCQlOVl9ERUJVR19LTVMoZGV2LCAib3V0cHV0IHNjcmlwdCAyIG5vdCBmb3VuZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCkBAIC0zOTMxLDcgKzM5MjksNyBAQAogCQlpZiAoc2NyaXB0KQogCQkJc2NyaXB0ID0gY2xrY21wdGFibGUoYmlvcywgc2NyaXB0LCAtcHhjbGspOwogCQlpZiAoIXNjcmlwdCkgewotCQkJTlZfREVCVUcoZGV2LCAiY2xvY2sgc2NyaXB0IDEgbm90IGZvdW5kXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJjbG9jayBzY3JpcHQgMSBub3QgZm91bmRcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDYwNiwxMCArNDYwNCw2IEBACiAJICogc3R1ZmYgdGhhdCB3ZSBkb24ndCB1c2UgLSB0aGVpciB1c2UgY3VycmVudGx5IHVua25vd24KIAkgKi8KIAotCXVpbnQxNl90IHJyX3N0cmFwX3hsYXQ7Ci0JdWludDhfdCBycl9ncm91cF9jb3VudDsKLQlpbnQgaTsKLQogCS8qCiAJICogT2xkZXIgYmlvcyB2ZXJzaW9ucyBkb24ndCBoYXZlIGEgc3VmZmljaWVudGx5IGxvbmcgdGFibGUgZm9yCiAJICogd2hhdCB3ZSB3YW50CkBAIC00NjE4LDI0ICs0NjEyLDEzIEBACiAJCXJldHVybiAwOwogCiAJaWYgKGJpdGVudHJ5LT5pZFsxXSA8IDIpIHsKLQkJcnJfZ3JvdXBfY291bnQgPSBiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAyXTsKLQkJcnJfc3RyYXBfeGxhdCA9IFJPTTE2KGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDNdKTsKKwkJYmlvcy0+cmFtX3Jlc3RyaWN0X2dyb3VwX2NvdW50ID0gYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMl07CisJCWJpb3MtPnJhbV9yZXN0cmljdF90YmxfcHRyID0gUk9NMTYoYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgM10pOwogCX0gZWxzZSB7Ci0JCXJyX2dyb3VwX2NvdW50ID0gYmlvcy0+ZGF0YVtiaXRlbnRyeS0+b2Zmc2V0ICsgMF07Ci0JCXJyX3N0cmFwX3hsYXQgPSBST00xNihiaW9zLT5kYXRhW2JpdGVudHJ5LT5vZmZzZXQgKyAxXSk7CisJCWJpb3MtPnJhbV9yZXN0cmljdF9ncm91cF9jb3VudCA9IGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDBdOworCQliaW9zLT5yYW1fcmVzdHJpY3RfdGJsX3B0ciA9IFJPTTE2KGJpb3MtPmRhdGFbYml0ZW50cnktPm9mZnNldCArIDFdKTsKIAl9CiAKLQkvKiBhZGp1c3QgbGVuZ3RoIG9mIElOSVRfODcgKi8KLQlmb3IgKGkgPSAwOyBpdGJsX2VudHJ5W2ldLm5hbWUgJiYgKGl0YmxfZW50cnlbaV0uaWQgIT0gMHg4Nyk7IGkrKyk7Ci0JaXRibF9lbnRyeVtpXS5sZW5ndGggKz0gcnJfZ3JvdXBfY291bnQgKiA0OwotCi0JLyogc2V0IHVwIG11bHRpcGxpZXIgZm9yIElOSVRfUkFNX1JFU1RSSUNUX1pNX1JFR19HUk9VUCAqLwotCWZvciAoOyBpdGJsX2VudHJ5W2ldLm5hbWUgJiYgKGl0YmxfZW50cnlbaV0uaWQgIT0gMHg4Zik7IGkrKyk7Ci0JaXRibF9lbnRyeVtpXS5sZW5ndGhfbXVsdGlwbGllciA9IHJyX2dyb3VwX2NvdW50ICogNDsKLQotCWluaXRfcmFtX3Jlc3RyaWN0X3ptX3JlZ19ncm91cF9ibG9ja2xlbiA9IGl0YmxfZW50cnlbaV0ubGVuZ3RoX211bHRpcGxpZXI7Ci0JYmlvcy0+cmFtX3Jlc3RyaWN0X3RibF9wdHIgPSBycl9zdHJhcF94bGF0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyMzQsNyArNTIxNyw3IEBACiAJaW50IGk7CiAKIAlpZiAoIWJpb3MtPmJkY2IuY29ubmVjdG9yX3RhYmxlX3B0cikgewotCQlOVl9ERUJVRyhkZXYsICJObyBEQ0IgY29ubmVjdG9yIHRhYmxlIHByZXNlbnRcbiIpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTm8gRENCIGNvbm5lY3RvciB0YWJsZSBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaAppbmRleCAxZDVmMTBiLi4wNThlOThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaApAQCAtMjI3LDYgKzIyNyw3IEBACiAKIAl1aW50MTZfdCBwbGxfbGltaXRfdGJsX3B0cjsKIAl1aW50MTZfdCByYW1fcmVzdHJpY3RfdGJsX3B0cjsKKwl1aW50OF90IHJhbV9yZXN0cmljdF9ncm91cF9jb3VudDsKIAogCXVpbnQxNl90IHNvbWVfc2NyaXB0X3B0cjsgLyogQklUIEkgKyAxNCAqLwogCXVpbnQxNl90IGluaXQ5Nl90YmxfcHRyOyAvKiBCSVQgSSArIDE2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKaW5kZXggYWEyZGZiYy4uZTM0MmE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwpAQCAtMzMsMTAgKzMzLDEzIEBACiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKICNpbmNsdWRlICJub3V2ZWF1X2RtYS5oIgogCisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorCiBzdGF0aWMgdm9pZAogbm91dmVhdV9ib19kZWxfdHRtKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KGJvLT5iZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibyA9IG5vdXZlYXVfYm8oYm8pOwogCiAJdHRtX2JvX2t1bm1hcCgmbnZiby0+a21hcCk7CkBAIC00NCwxMiArNDcsODcgQEAKIAlpZiAodW5saWtlbHkobnZiby0+Z2VtKSkKIAkJRFJNX0VSUk9SKCJibyAlcCBzdGlsbCBhdHRhY2hlZCB0byBHRU0gb2JqZWN0XG4iLCBibyk7CiAKKwlpZiAobnZiby0+dGlsZSkKKwkJbnYxMF9tZW1fZXhwaXJlX3RpbGluZyhkZXYsIG52Ym8tPnRpbGUsIE5VTEwpOworCiAJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+dHRtLmJvX2xpc3RfbG9jayk7CiAJbGlzdF9kZWwoJm52Ym8tPmhlYWQpOwogCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+dHRtLmJvX2xpc3RfbG9jayk7CiAJa2ZyZWUobnZibyk7CiB9CiAKK3N0YXRpYyB2b2lkCitub3V2ZWF1X2JvX2ZpeHVwX2FsaWduKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgICB1aW50MzJfdCB0aWxlX21vZGUsIHVpbnQzMl90IHRpbGVfZmxhZ3MsCisJCSAgICAgICBpbnQgKmFsaWduLCBpbnQgKnNpemUpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qCisJICogU29tZSBvZiB0aGUgdGlsZV9mbGFncyBoYXZlIGEgcGVyaW9kaWMgc3RydWN0dXJlIG9mIE4qNDA5NiBieXRlcywKKwkgKiBhbGlnbiB0byB0byB0aGF0IGFzIHdlbGwgYXMgdGhlIHBhZ2Ugc2l6ZS4gT3ZlcmFsbG9jYXRlIG1lbW9yeSB0bworCSAqIGF2b2lkIGNvcnJ1cHRpb24gb2Ygb3RoZXIgYnVmZmVyIG9iamVjdHMuCisJICovCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTApIHsKKwkJdWludDMyX3QgYmxvY2tfc2l6ZSA9IG5vdXZlYXVfbWVtX2ZiX2Ftb3VudChkZXYpID4+IDE1OworCQlpbnQgaTsKKworCQlzd2l0Y2ggKHRpbGVfZmxhZ3MpIHsKKwkJY2FzZSAweDE4MDA6CisJCWNhc2UgMHgyODAwOgorCQljYXNlIDB4NDgwMDoKKwkJY2FzZSAweDdhMDA6CisJCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIGJsb2NrX3NpemUpOworCQkJaWYgKGlzX3Bvd2VyX29mXzIoYmxvY2tfc2l6ZSkpIHsKKwkJCQkqc2l6ZSArPSAzICogYmxvY2tfc2l6ZTsKKwkJCQlmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykgeworCQkJCQkqYWxpZ24gPSAxMiAqIGkgKiBibG9ja19zaXplOworCQkJCQlpZiAoISgqYWxpZ24gJSA2NTUzNikpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCSpzaXplICs9IDYgKiBibG9ja19zaXplOworCQkJCWZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7CisJCQkJCSphbGlnbiA9IDggKiBpICogYmxvY2tfc2l6ZTsKKwkJCQkJaWYgKCEoKmFsaWduICUgNjU1MzYpKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKHRpbGVfbW9kZSkgeworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4NDApIHsKKwkJCQkqYWxpZ24gPSA2NTUzNjsKKwkJCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIDY0ICogdGlsZV9tb2RlKTsKKworCQkJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDMwKSB7CisJCQkJKmFsaWduID0gMzI3Njg7CisJCQkJKnNpemUgPSByb3VuZHVwKCpzaXplLCA2NCAqIHRpbGVfbW9kZSk7CisKKwkJCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHgyMCkgeworCQkJCSphbGlnbiA9IDE2Mzg0OworCQkJCSpzaXplID0gcm91bmR1cCgqc2l6ZSwgNjQgKiB0aWxlX21vZGUpOworCisJCQl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4MTApIHsKKwkJCQkqYWxpZ24gPSAxNjM4NDsKKwkJCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIDMyICogdGlsZV9tb2RlKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEFMSUdOIHdvcmtzIG9ubHkgb24gcG93ZXJzIG9mIHR3by4gKi8KKwkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIFBBR0VfU0laRSk7CisKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgeworCQkqc2l6ZSA9IHJvdW5kdXAoKnNpemUsIDY1NTM2KTsKKwkJKmFsaWduID0gbWF4KDY1NTM2LCAqYWxpZ24pOworCX0KK30KKwogaW50CiBub3V2ZWF1X2JvX25ldyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAogCSAgICAgICBpbnQgc2l6ZSwgaW50IGFsaWduLCB1aW50MzJfdCBmbGFncywgdWludDMyX3QgdGlsZV9tb2RlLApAQCAtNTgsNyArMTM2LDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvOwotCWludCByZXQsIG4gPSAwOworCWludCByZXQgPSAwOwogCiAJbnZibyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub3V2ZWF1X2JvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudmJvKQpAQCAtNzAsNTkgKzE0OCwxNCBAQAogCW52Ym8tPnRpbGVfbW9kZSA9IHRpbGVfbW9kZTsKIAludmJvLT50aWxlX2ZsYWdzID0gdGlsZV9mbGFnczsKIAotCS8qCi0JICogU29tZSBvZiB0aGUgdGlsZV9mbGFncyBoYXZlIGEgcGVyaW9kaWMgc3RydWN0dXJlIG9mIE4qNDA5NiBieXRlcywKLQkgKiBhbGlnbiB0byB0byB0aGF0IGFzIHdlbGwgYXMgdGhlIHBhZ2Ugc2l6ZS4gT3ZlcmFsbG9jYXRlIG1lbW9yeSB0bwotCSAqIGF2b2lkIGNvcnJ1cHRpb24gb2Ygb3RoZXIgYnVmZmVyIG9iamVjdHMuCi0JICovCi0Jc3dpdGNoICh0aWxlX2ZsYWdzKSB7Ci0JY2FzZSAweDE4MDA6Ci0JY2FzZSAweDI4MDA6Ci0JY2FzZSAweDQ4MDA6Ci0JY2FzZSAweDdhMDA6Ci0JCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweEEwKSB7Ci0JCQkvKiBUaGlzIGlzIGJhc2VkIG9uIGhpZ2ggZW5kIGNhcmRzIHdpdGggNDQ4IGJpdHMKLQkJCSAqIG1lbW9yeSBidXMsIGNvdWxkIGJlIGRpZmZlcmVudCBlbHNld2hlcmUuKi8KLQkJCXNpemUgKz0gNiAqIDI4NjcyOwotCQkJLyogOCAqIDI4NjcyIGlzIHRoZSBhY3R1YWwgYWxpZ25tZW50IHJlcXVpcmVtZW50LAotCQkJICogYnV0IHdlIG11c3QgYWxzbyBhbGlnbiB0byBwYWdlIHNpemUuICovCi0JCQlhbGlnbiA9IDIgKiA4ICogMjg2NzI7Ci0JCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHg5MCkgewotCQkJc2l6ZSArPSAzICogMTYzODQ7Ci0JCQlhbGlnbiA9IDEyICogMTY4MzQ7Ci0JCX0gZWxzZSB7Ci0JCQlzaXplICs9IDMgKiA4MTkyOwotCQkJLyogMTIgKiA4MTkyIGlzIHRoZSBhY3R1YWwgYWxpZ25tZW50IHJlcXVpcmVtZW50LAotCQkJICogYnV0IHdlIG11c3QgYWxzbyBhbGlnbiB0byBwYWdlIHNpemUuICovCi0JCQlhbGlnbiA9IDIgKiAxMiAqIDgxOTI7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCisJbm91dmVhdV9ib19maXh1cF9hbGlnbihkZXYsIHRpbGVfbW9kZSwgdGlsZV9mbGFncywgJmFsaWduLCAmc2l6ZSk7CiAJYWxpZ24gPj49IFBBR0VfU0hJRlQ7CiAKLQlzaXplID0gKHNpemUgKyAoUEFHRV9TSVpFIC0gMSkpICYgfihQQUdFX1NJWkUgLSAxKTsKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgewotCQlzaXplID0gKHNpemUgKyA2NTUzNSkgJiB+NjU1MzU7Ci0JCWlmIChhbGlnbiA8ICg2NTUzNiAvIFBBR0VfU0laRSkpCi0JCQlhbGlnbiA9ICg2NTUzNiAvIFBBR0VfU0laRSk7Ci0JfQotCi0JaWYgKGZsYWdzICYgVFRNX1BMX0ZMQUdfVlJBTSkKLQkJbnZiby0+cGxhY2VtZW50c1tuKytdID0gVFRNX1BMX0ZMQUdfVlJBTSB8IFRUTV9QTF9NQVNLX0NBQ0hJTkc7Ci0JaWYgKGZsYWdzICYgVFRNX1BMX0ZMQUdfVFQpCi0JCW52Ym8tPnBsYWNlbWVudHNbbisrXSA9IFRUTV9QTF9GTEFHX1RUIHwgVFRNX1BMX01BU0tfQ0FDSElORzsKIAludmJvLT5wbGFjZW1lbnQuZnBmbiA9IDA7CiAJbnZiby0+cGxhY2VtZW50LmxwZm4gPSBtYXBwYWJsZSA/IGRldl9wcml2LT5mYl9tYXBwYWJsZV9wYWdlcyA6IDA7Ci0JbnZiby0+cGxhY2VtZW50LnBsYWNlbWVudCA9IG52Ym8tPnBsYWNlbWVudHM7Ci0JbnZiby0+cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50ID0gbnZiby0+cGxhY2VtZW50czsKLQludmJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IG47Ci0JbnZiby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IG47CisJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIGZsYWdzKTsKIAogCW52Ym8tPmNoYW5uZWwgPSBjaGFuOwotCW5vdXZlYXVfYm9fcGxhY2VtZW50X3NldChudmJvLCBmbGFncyk7CiAJcmV0ID0gdHRtX2JvX2luaXQoJmRldl9wcml2LT50dG0uYmRldiwgJm52Ym8tPmJvLCBzaXplLAogCQkJICB0dG1fYm9fdHlwZV9kZXZpY2UsICZudmJvLT5wbGFjZW1lbnQsIGFsaWduLCAwLAogCQkJICBmYWxzZSwgTlVMTCwgc2l6ZSwgbm91dmVhdV9ib19kZWxfdHRtKTsKQEAgLTE1NCw2ICsxODcsMTEgQEAKIAludmJvLT5wbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSBudmJvLT5wbGFjZW1lbnRzOwogCW52Ym8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gbjsKIAludmJvLT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gbjsKKworCWlmIChudmJvLT5waW5fcmVmY250KSB7CisJCXdoaWxlIChuLS0pCisJCQludmJvLT5wbGFjZW1lbnRzW25dIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOworCX0KIH0KIAogaW50CkBAIC00MDAsMTYgKzQzOCwyMyBAQAogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9ibyhibyk7CiAKIAlzd2l0Y2ggKGJvLT5tZW0ubWVtX3R5cGUpIHsKKwljYXNlIFRUTV9QTF9WUkFNOgorCQlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgVFRNX1BMX0ZMQUdfVFQgfAorCQkJCQkgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbm91dmVhdV9ib19wbGFjZW1lbnRfc2V0KG52Ym8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CiAJCWJyZWFrOwogCX0KKworCSpwbCA9IG52Ym8tPnBsYWNlbWVudDsKIH0KIAogCiAvKiBHUFUtYXNzaXN0ZWQgY29weSB1c2luZyBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVCwgY2FuIGFjY2VzcwogICogVFRNX1BMX3tWUkFNLFRUfSBkaXJlY3RseS4KICAqLworCiBzdGF0aWMgaW50CiBub3V2ZWF1X2JvX21vdmVfYWNjZWxfY2xlYW51cChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8sIGJvb2wgZXZpY3QsIGJvb2wgbm9fd2FpdCwKQEAgLTQ0NCwyMiArNDg5LDIwIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5vdXZlYXVfYm9fbW92ZV9tMm1mKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGludCBldmljdCwgaW50IG5vX3dhaXQsCi0JCSAgICAgc3RydWN0IHR0bV9tZW1fcmVnICpvbGRfbWVtLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0pCitub3V2ZWF1X2JvX21vdmVfbTJtZihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBpbnQgZXZpY3QsIGJvb2wgaW50ciwKKwkJICAgICBpbnQgbm9fd2FpdCwgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQogewogCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9ibyhibyk7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KGJvLT5iZGV2KTsKKwlzdHJ1Y3QgdHRtX21lbV9yZWcgKm9sZF9tZW0gPSAmYm8tPm1lbTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCXVpbnQ2NF90IHNyY19vZmZzZXQsIGRzdF9vZmZzZXQ7CiAJdWludDMyX3QgcGFnZV9jb3VudDsKIAlpbnQgcmV0OwogCiAJY2hhbiA9IG52Ym8tPmNoYW5uZWw7Ci0JaWYgKCFjaGFuIHx8IG52Ym8tPnRpbGVfZmxhZ3MgfHwgbnZiby0+bm9fdm0pIHsKKwlpZiAoIWNoYW4gfHwgbnZiby0+dGlsZV9mbGFncyB8fCBudmJvLT5ub192bSkKIAkJY2hhbiA9IGRldl9wcml2LT5jaGFubmVsOwotCQlpZiAoIWNoYW4pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlzcmNfb2Zmc2V0ID0gb2xkX21lbS0+bW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKIAlkc3Rfb2Zmc2V0ID0gbmV3X21lbS0+bW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKQEAgLTUzOSw3ICs1ODIsNyBAQAogCiAJcGxhY2VtZW50LmZwZm4gPSBwbGFjZW1lbnQubHBmbiA9IDA7CiAJcGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgPSBwbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKLQlwbGFjZW1lbnQucGxhY2VtZW50ID0gJnBsYWNlbWVudF9tZW10eXBlOworCXBsYWNlbWVudC5wbGFjZW1lbnQgPSBwbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQgPSAmcGxhY2VtZW50X21lbXR5cGU7CiAKIAl0bXBfbWVtID0gKm5ld19tZW07CiAJdG1wX21lbS5tbV9ub2RlID0gTlVMTDsKQEAgLTU1MSw3ICs1OTQsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gbm91dmVhdV9ib19tb3ZlX20ybWYoYm8sIHRydWUsIG5vX3dhaXQsICZiby0+bWVtLCAmdG1wX21lbSk7CisJcmV0ID0gbm91dmVhdV9ib19tb3ZlX20ybWYoYm8sIHRydWUsIGludHIsIG5vX3dhaXQsICZ0bXBfbWVtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtNTc3LDcgKzYyMCw3IEBACiAKIAlwbGFjZW1lbnQuZnBmbiA9IHBsYWNlbWVudC5scGZuID0gMDsKIAlwbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IHBsYWNlbWVudC5udW1fYnVzeV9wbGFjZW1lbnQgPSAxOwotCXBsYWNlbWVudC5wbGFjZW1lbnQgPSAmcGxhY2VtZW50X21lbXR5cGU7CisJcGxhY2VtZW50LnBsYWNlbWVudCA9IHBsYWNlbWVudC5idXN5X3BsYWNlbWVudCA9ICZwbGFjZW1lbnRfbWVtdHlwZTsKIAogCXRtcF9tZW0gPSAqbmV3X21lbTsKIAl0bXBfbWVtLm1tX25vZGUgPSBOVUxMOwpAQCAtNTg5LDcgKzYzMiw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2JvX21vdmVfbTJtZihibywgdHJ1ZSwgbm9fd2FpdCwgJmJvLT5tZW0sIG5ld19tZW0pOworCXJldCA9IG5vdXZlYXVfYm9fbW92ZV9tMm1mKGJvLCBldmljdCwgaW50ciwgbm9fd2FpdCwgbmV3X21lbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTYwNCw1MSArNjQ3LDEwNiBAQAogfQogCiBzdGF0aWMgaW50Ci1ub3V2ZWF1X2JvX21vdmUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgYm9vbCBldmljdCwgYm9vbCBpbnRyLAotCQlib29sIG5vX3dhaXQsIHN0cnVjdCB0dG1fbWVtX3JlZyAqbmV3X21lbSkKK25vdXZlYXVfYm9fdm1fYmluZChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0sCisJCSAgIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICoqbmV3X3RpbGUpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KGJvLT5iZGV2KTsKLQlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibyA9IG5vdXZlYXVfYm8oYm8pOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwotCXN0cnVjdCB0dG1fbWVtX3JlZyAqb2xkX21lbSA9ICZiby0+bWVtOworCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gbm91dmVhdV9ibyhibyk7CisJdWludDY0X3Qgb2Zmc2V0OwogCWludCByZXQ7CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCAmJiBuZXdfbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSAmJgotCSAgICAhbnZiby0+bm9fdm0pIHsKLQkJdWludDY0X3Qgb2Zmc2V0ID0gbmV3X21lbS0+bW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKKwlpZiAobnZiby0+bm9fdm0gfHwgbmV3X21lbS0+bWVtX3R5cGUgIT0gVFRNX1BMX1ZSQU0pIHsKKwkJLyogTm90aGluZyB0byBkby4gKi8KKwkJKm5ld190aWxlID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQogCisJb2Zmc2V0ID0gbmV3X21lbS0+bW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwKSB7CiAJCXJldCA9IG52NTBfbWVtX3ZtX2JpbmRfbGluZWFyKGRldiwKIAkJCQkJICAgICAgb2Zmc2V0ICsgZGV2X3ByaXYtPnZtX3ZyYW1fYmFzZSwKIAkJCQkJICAgICAgbmV3X21lbS0+c2l6ZSwgbnZiby0+dGlsZV9mbGFncywKIAkJCQkJICAgICAgb2Zmc2V0KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CisKKwl9IGVsc2UgaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfMTApIHsKKwkJKm5ld190aWxlID0gbnYxMF9tZW1fc2V0X3RpbGluZyhkZXYsIG9mZnNldCwgbmV3X21lbS0+c2l6ZSwKKwkJCQkJCW52Ym8tPnRpbGVfbW9kZSk7CiAJfQogCi0JaWYgKGRldl9wcml2LT5pbml0X3N0YXRlICE9IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUpCi0JCXJldHVybiB0dG1fYm9fbW92ZV9tZW1jcHkoYm8sIGV2aWN0LCBub193YWl0LCBuZXdfbWVtKTsKKwlyZXR1cm4gMDsKK30KIAorc3RhdGljIHZvaWQKK25vdXZlYXVfYm9fdm1fY2xlYW51cChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkgICAgICBzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqbmV3X3RpbGUsCisJCSAgICAgIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICoqb2xkX3RpbGUpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm91dmVhdV9iZGV2KGJvLT5iZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzEwICYmCisJICAgIGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkgeworCQlpZiAoKm9sZF90aWxlKQorCQkJbnYxMF9tZW1fZXhwaXJlX3RpbGluZyhkZXYsICpvbGRfdGlsZSwgYm8tPnN5bmNfb2JqKTsKKworCQkqb2xkX3RpbGUgPSBuZXdfdGlsZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK25vdXZlYXVfYm9fbW92ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBib29sIGV2aWN0LCBib29sIGludHIsCisJCWJvb2wgbm9fd2FpdCwgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG5vdXZlYXVfYmRldihiby0+YmRldik7CisJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym8gPSBub3V2ZWF1X2JvKGJvKTsKKwlzdHJ1Y3QgdHRtX21lbV9yZWcgKm9sZF9tZW0gPSAmYm8tPm1lbTsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqbmV3X3RpbGUgPSBOVUxMOworCWludCByZXQgPSAwOworCisJcmV0ID0gbm91dmVhdV9ib192bV9iaW5kKGJvLCBuZXdfbWVtLCAmbmV3X3RpbGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTb2Z0d2FyZSBjb3B5IGlmIHRoZSBjYXJkIGlzbid0IHVwIGFuZCBydW5uaW5nIHlldC4gKi8KKwlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgIT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSB8fAorCSAgICAhZGV2X3ByaXYtPmNoYW5uZWwpIHsKKwkJcmV0ID0gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgbm9fd2FpdCwgbmV3X21lbSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEZha2UgYm8gY29weS4gKi8KIAlpZiAob2xkX21lbS0+bWVtX3R5cGUgPT0gVFRNX1BMX1NZU1RFTSAmJiAhYm8tPnR0bSkgewogCQlCVUdfT04oYm8tPm1lbS5tbV9ub2RlICE9IE5VTEwpOwogCQliby0+bWVtID0gKm5ld19tZW07CiAJCW5ld19tZW0tPm1tX25vZGUgPSBOVUxMOwotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG5ld19tZW0tPm1lbV90eXBlID09IFRUTV9QTF9TWVNURU0pIHsKLQkJaWYgKG9sZF9tZW0tPm1lbV90eXBlID09IFRUTV9QTF9TWVNURU0pCi0JCQlyZXR1cm4gdHRtX2JvX21vdmVfbWVtY3B5KGJvLCBldmljdCwgbm9fd2FpdCwgbmV3X21lbSk7Ci0JCWlmIChub3V2ZWF1X2JvX21vdmVfZmxpcGQoYm8sIGV2aWN0LCBpbnRyLCBub193YWl0LCBuZXdfbWVtKSkKLQkJCXJldHVybiB0dG1fYm9fbW92ZV9tZW1jcHkoYm8sIGV2aWN0LCBub193YWl0LCBuZXdfbWVtKTsKLQl9IGVsc2UgaWYgKG9sZF9tZW0tPm1lbV90eXBlID09IFRUTV9QTF9TWVNURU0pIHsKLQkJaWYgKG5vdXZlYXVfYm9fbW92ZV9mbGlwcyhibywgZXZpY3QsIGludHIsIG5vX3dhaXQsIG5ld19tZW0pKQotCQkJcmV0dXJuIHR0bV9ib19tb3ZlX21lbWNweShibywgZXZpY3QsIG5vX3dhaXQsIG5ld19tZW0pOwotCX0gZWxzZSB7Ci0JCWlmIChub3V2ZWF1X2JvX21vdmVfbTJtZihibywgZXZpY3QsIG5vX3dhaXQsIG9sZF9tZW0sIG5ld19tZW0pKQotCQkJcmV0dXJuIHR0bV9ib19tb3ZlX21lbWNweShibywgZXZpY3QsIG5vX3dhaXQsIG5ld19tZW0pOwotCX0KKwkvKiBIYXJkd2FyZSBhc3Npc3RlZCBjb3B5LiAqLworCWlmIChuZXdfbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfU1lTVEVNKQorCQlyZXQgPSBub3V2ZWF1X2JvX21vdmVfZmxpcGQoYm8sIGV2aWN0LCBpbnRyLCBub193YWl0LCBuZXdfbWVtKTsKKwllbHNlIGlmIChvbGRfbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfU1lTVEVNKQorCQlyZXQgPSBub3V2ZWF1X2JvX21vdmVfZmxpcHMoYm8sIGV2aWN0LCBpbnRyLCBub193YWl0LCBuZXdfbWVtKTsKKwllbHNlCisJCXJldCA9IG5vdXZlYXVfYm9fbW92ZV9tMm1mKGJvLCBldmljdCwgaW50ciwgbm9fd2FpdCwgbmV3X21lbSk7CiAKLQlyZXR1cm4gMDsKKwlpZiAoIXJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBGYWxsYmFjayB0byBzb2Z0d2FyZSBjb3B5LiAqLworCXJldCA9IHR0bV9ib19tb3ZlX21lbWNweShibywgZXZpY3QsIG5vX3dhaXQsIG5ld19tZW0pOworCitvdXQ6CisJaWYgKHJldCkKKwkJbm91dmVhdV9ib192bV9jbGVhbnVwKGJvLCBOVUxMLCAmbmV3X3RpbGUpOworCWVsc2UKKwkJbm91dmVhdV9ib192bV9jbGVhbnVwKGJvLCBuZXdfdGlsZSwgJm52Ym8tPnRpbGUpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwppbmRleCA5YWFhOTcyLi4zNDNkNzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYwpAQCAtMTU4LDYgKzE1OCw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbm91dmVhdV9kbWFfcHJlX2luaXQoY2hhbik7CisKIAkvKiBMb2NhdGUgY2hhbm5lbCdzIHVzZXIgY29udHJvbCByZWdzICovCiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl80MCkKIAkJdXNlciA9IE5WMDNfVVNFUihjaGFubmVsKTsKQEAgLTIzNSw0NyArMjM3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50Ci1ub3V2ZWF1X2NoYW5uZWxfaWRsZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwotCXVpbnQzMl90IGNhY2hlczsKLQlpbnQgaWRsZTsKLQotCWlmICghY2hhbikgewotCQlOVl9FUlJPUihkZXYsICJubyBjaGFubmVsLi4uXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JY2FjaGVzID0gbnZfcmQzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEVTKTsKLQludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRVMsIGNhY2hlcyAmIH4xKTsKLQotCWlmIChlbmdpbmUtPmZpZm8uY2hhbm5lbF9pZChkZXYpICE9IGNoYW4tPmlkKSB7Ci0JCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtZmMgPQotCQkJY2hhbi0+cmFtZmMgPyBjaGFuLT5yYW1mYy0+Z3B1b2JqIDogTlVMTDsKLQotCQlpZiAoIXJhbWZjKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJObyBSQU1GQyBmb3IgY2hhbm5lbCAlZFxuIiwgY2hhbi0+aWQpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQotCQllbmdpbmUtPmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCBmYWxzZSk7Ci0JCWlmIChudl9ybzMyKGRldiwgcmFtZmMsIDApICE9IG52X3JvMzIoZGV2LCByYW1mYywgMSkpCi0JCQlpZGxlID0gMDsKLQkJZWxzZQotCQkJaWRsZSA9IDE7Ci0JCWVuZ2luZS0+aW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7Ci0JfSBlbHNlIHsKLQkJaWRsZSA9IChudl9yZDMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfRE1BX0dFVCkgPT0KLQkJCW52X3JkMzIoZGV2LCBOVjA0X1BGSUZPX0NBQ0hFMV9ETUFfUFVUKSk7Ci0JfQotCi0JbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEVTLCBjYWNoZXMpOwotCXJldHVybiBpZGxlOwotfQotCiAvKiBzdG9wcyBhIGZpZm8gKi8KIHZvaWQKIG5vdXZlYXVfY2hhbm5lbF9mcmVlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4pCkBAIC00MTQsNyArMzc1LDkgQEAKIAkJaW5pdC0+c3ViY2hhblswXS5ncmNsYXNzID0gMHgwMDM5OwogCWVsc2UKIAkJaW5pdC0+c3ViY2hhblswXS5ncmNsYXNzID0gMHg1MDM5OwotCWluaXQtPm5yX3N1YmNoYW4gPSAxOworCWluaXQtPnN1YmNoYW5bMV0uaGFuZGxlID0gTnZTdzsKKwlpbml0LT5zdWJjaGFuWzFdLmdyY2xhc3MgPSBOVl9TVzsKKwlpbml0LT5ucl9zdWJjaGFuID0gMjsKIAogCS8qIE5hbWVkIG1lbW9yeSBvYmplY3QgYXJlYSAqLwogCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsIGNoYW4tPm5vdGlmaWVyX2JvLT5nZW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwppbmRleCAwMzJjZjA5Li41YTEwZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG5vdXZlYXVfY29ubmVjdG9yKGRybV9jb25uZWN0b3IpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmJhc2UuZGV2OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWlmICghY29ubmVjdG9yKQogCQlyZXR1cm47CkBAIC00MjAsNyArNDIwLDcgQEAKIAkvKiBVc2UgcHJlZmVycmVkIG1vZGUgaWYgdGhlcmUgaXMgb25lLi4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPmJhc2UucHJvYmVkX21vZGVzLCBoZWFkKSB7CiAJCWlmIChtb2RlLT50eXBlICYgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQpIHsKLQkJCU5WX0RFQlVHKGRldiwgIm5hdGl2ZSBtb2RlIGZyb20gcHJlZmVycmVkXG4iKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJuYXRpdmUgbW9kZSBmcm9tIHByZWZlcnJlZFxuIik7CiAJCQlyZXR1cm4gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbW9kZSk7CiAJCX0KIAl9CkBAIC00NDUsNyArNDQ1LDcgQEAKIAkJbGFyZ2VzdCA9IG1vZGU7CiAJfQogCi0JTlZfREVCVUcoZGV2LCAibmF0aXZlIG1vZGUgZnJvbSBsYXJnZXN0OiAlZHglZEAlZFxuIiwKKwlOVl9ERUJVR19LTVMoZGV2LCAibmF0aXZlIG1vZGUgZnJvbSBsYXJnZXN0OiAlZHglZEAlZFxuIiwKIAkJICAgICAgaGlnaF93LCBoaWdoX2gsIGhpZ2hfdik7CiAJcmV0dXJuIGxhcmdlc3QgPyBkcm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBsYXJnZXN0KSA6IE5VTEw7CiB9CkBAIC03MjUsNyArNzI1LDcgQEAKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZigqbnZfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudl9jb25uZWN0b3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwppbmRleCA3MDM1NTM2Li43YWZiZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKQEAgLTI5LDEyICsyOSwyMiBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAjaW5jbHVkZSAibm91dmVhdV9kbWEuaCIKIAordm9pZAorbm91dmVhdV9kbWFfcHJlX2luaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKK3sKKwljaGFuLT5kbWEubWF4ICA9IChjaGFuLT5wdXNoYnVmX2JvLT5iby5tZW0uc2l6ZSA+PiAyKSAtIDI7CisJY2hhbi0+ZG1hLnB1dCAgPSAwOworCWNoYW4tPmRtYS5jdXIgID0gY2hhbi0+ZG1hLnB1dDsKKwljaGFuLT5kbWEuZnJlZSA9IGNoYW4tPmRtYS5tYXggLSBjaGFuLT5kbWEuY3VyOworfQorCiBpbnQKIG5vdXZlYXVfZG1hX2luaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICptMm1mID0gTlVMTDsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm52c3cgPSBOVUxMOwogCWludCByZXQsIGk7CiAKIAkvKiBDcmVhdGUgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVQgZm9yIGJ1ZmZlciBtb3ZlcyAqLwpAQCAtNDcsNiArNTcsMTUgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyogQ3JlYXRlIGFuIE5WX1NXIG9iamVjdCBmb3IgdmFyaW91cyBzeW5jIHB1cnBvc2VzICovCisJcmV0ID0gbm91dmVhdV9ncHVvYmpfc3dfbmV3KGNoYW4sIE5WX1NXLCAmbnZzdyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBjaGFuLCBOdlN3LCBudnN3LCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJLyogTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVQgcmVxdWlyZXMgYSBub3RpZmllciBvYmplY3QgKi8KIAlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIE52Tm90aWZ5MCwgMzIsICZjaGFuLT5tMm1mX250ZnkpOwogCWlmIChyZXQpCkBAIC02NCwxMiArODMsNiBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBJbml0aWFsaXNlIERNQSB2YXJzICovCi0JY2hhbi0+ZG1hLm1heCAgPSAoY2hhbi0+cHVzaGJ1Zl9iby0+Ym8ubWVtLnNpemUgPj4gMikgLSAyOwotCWNoYW4tPmRtYS5wdXQgID0gMDsKLQljaGFuLT5kbWEuY3VyICA9IGNoYW4tPmRtYS5wdXQ7Ci0JY2hhbi0+ZG1hLmZyZWUgPSBjaGFuLT5kbWEubWF4IC0gY2hhbi0+ZG1hLmN1cjsKLQogCS8qIEluc2VydCBOT1BTIGZvciBOT1VWRUFVX0RNQV9TS0lQUyAqLwogCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgTk9VVkVBVV9ETUFfU0tJUFMpOwogCWlmIChyZXQpCkBAIC04Nyw2ICsxMDAsMTMgQEAKIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViTTJNRiwgTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVRfRE1BX05PVElGWSwgMSk7CiAJT1VUX1JJTkcoY2hhbiwgTnZOb3RpZnkwKTsKIAorCS8qIEluaXRpYWxpc2UgTlZfU1cgKi8KKwlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJQkVHSU5fUklORyhjaGFuLCBOdlN1YlN3LCAwLCAxKTsKKwlPVVRfUklORyhjaGFuLCBOdlN3KTsKKwogCS8qIFNpdCBiYWNrIGFuZCBwcmF5IHRoZSBjaGFubmVsIHdvcmtzLi4gKi8KIAlGSVJFX1JJTkcoY2hhbik7CiAKQEAgLTExMyw3ICsxMzMsNyBAQAogCiAJdmFsID0gbnZjaGFuX3JkMzIoY2hhbiwgY2hhbi0+dXNlcl9nZXQpOwogCWlmICh2YWwgPCBjaGFuLT5wdXNoYnVmX2Jhc2UgfHwKLQkgICAgdmFsID49IGNoYW4tPnB1c2hidWZfYmFzZSArIGNoYW4tPnB1c2hidWZfYm8tPmJvLm1lbS5zaXplKSB7CisJICAgIHZhbCA+IGNoYW4tPnB1c2hidWZfYmFzZSArIChjaGFuLT5kbWEubWF4IDw8IDIpKSB7CiAJCS8qIG1lYW5pbmdsZXNzIHRvIGRtYV93YWl0KCkgZXhjZXB0IHRvIGtub3cgd2hldGhlciB0aGUKIAkJICogR1BVIGhhcyBzdGFsbGVkIG9yIG5vdAogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5oCmluZGV4IDA0ZTg1ZDguLmRhYmZkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuaApAQCAtNDYsMTAgKzQ2LDExIEBACiAvKiBIYXJkY29kZWQgb2JqZWN0IGFzc2lnbm1lbnRzIHRvIHN1YmNoYW5uZWxzIChzdWJjaGFubmVsIGlkKS4gKi8KIGVudW0gewogCU52U3ViTTJNRgk9IDAsCi0JTnZTdWIyRAkJPSAxLAotCU52U3ViQ3R4U3VyZjJEICA9IDEsCi0JTnZTdWJHZGlSZWN0ICAgID0gMiwKLQlOdlN1YkltYWdlQmxpdCAgPSAzCisJTnZTdWJTdwkJPSAxLAorCU52U3ViMkQJCT0gMiwKKwlOdlN1YkN0eFN1cmYyRCAgPSAyLAorCU52U3ViR2RpUmVjdCAgICA9IDMsCisJTnZTdWJJbWFnZUJsaXQgID0gNAogfTsKIAogLyogT2JqZWN0IGhhbmRsZXMuICovCkBAIC02Nyw2ICs2OCw3IEBACiAJTnZDbGlwUmVjdAk9IDB4ODAwMDAwMGIsCiAJTnZHZGlSZWN0CT0gMHg4MDAwMDAwYywKIAlOdkltYWdlQmxpdAk9IDB4ODAwMDAwMGQsCisJTnZTdwkJPSAweDgwMDAwMDBlLAogCiAJLyogRzgwKyBkaXNwbGF5IG9iamVjdHMgKi8KIAlOdkV2b1ZSQU0JPSAweDAxMDAwMDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcC5jCmluZGV4IGRlNjFmNDYuLjllMjkyNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RwLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CisJTlZfREVCVUdfS01TKGRldiwgIlx0XHRhZGp1c3QgMHglMDJ4IDB4JTAyeFxuIiwgcmVxdWVzdFswXSwgcmVxdWVzdFsxXSk7CiAKIAkvKiBLZWVwIGFsbCBsYW5lcyBhdCB0aGUgc2FtZSBsZXZlbC4uICovCiAJZm9yIChpID0gMDsgaSA8IG52X2VuY29kZXItPmRwLmxpbmtfbnI7IGkrKykgewpAQCAtMjI4LDcgKzIyOCw3IEBACiAJaW50IG9yID0gbnZfZW5jb2Rlci0+b3IsIGxpbmsgPSAhKG52X2VuY29kZXItPmRjYi0+c29yY29uZi5saW5rICYgMSk7CiAJaW50IGRwZV9oZWFkZXJsZW4sIHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlx0XHRjb25maWcgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdFx0Y29uZmlnIDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkJIGNvbmZpZ1swXSwgY29uZmlnWzFdLCBjb25maWdbMl0sIGNvbmZpZ1szXSk7CiAKIAlkcGUgPSBub3V2ZWF1X2Jpb3NfZHBfdGFibGUoZGV2LCBudl9lbmNvZGVyLT5kY2IsICZkcGVfaGVhZGVybGVuKTsKQEAgLTI3NiwxMiArMjc2LDEyIEBACiAJYm9vbCBjcl9kb25lLCBjcl9tYXhfdnMsIGVxX2RvbmU7CiAJaW50IHJldCA9IDAsIGksIHRyaWVzLCB2b2x0YWdlOwogCi0JTlZfREVCVUcoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAibGluayB0cmFpbmluZyEhXG4iKTsKIHRyYWluOgogCWNyX2RvbmUgPSBlcV9kb25lID0gZmFsc2U7CiAKIAkvKiBzZXQgbGluayBjb25maWd1cmF0aW9uICovCi0JTlZfREVCVUcoZGV2LCAiXHRiZWdpbiB0cmFpbjogYncgJWQsIGxhbmVzICVkXG4iLAorCU5WX0RFQlVHX0tNUyhkZXYsICJcdGJlZ2luIHRyYWluOiBidyAlZCwgbGFuZXMgJWRcbiIsCiAJCSBudl9lbmNvZGVyLT5kcC5saW5rX2J3LCBudl9lbmNvZGVyLT5kcC5saW5rX25yKTsKIAogCXJldCA9IG5vdXZlYXVfZHBfbGlua19id19zZXQoZW5jb2RlciwgbnZfZW5jb2Rlci0+ZHAubGlua19idyk7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogY2xvY2sgcmVjb3ZlcnkgKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGNyXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBjclxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzEpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJY3JfZG9uZSA9IHRydWU7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAkJZ290byBzdG9wOwogCiAJLyogY2hhbm5lbCBlcXVhbGlzYXRpb24gKi8KLQlOVl9ERUJVRyhkZXYsICJcdGJlZ2luIGVxXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXHRiZWdpbiBlcVxuIik7CiAJcmV0ID0gbm91dmVhdV9kcF9saW5rX3RyYWluX3NldChlbmNvZGVyLCBEUF9UUkFJTklOR19QQVRURVJOXzIpOwogCWlmIChyZXQpCiAJCWdvdG8gc3RvcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXQgPSBhdXhjaF9yZChlbmNvZGVyLCBEUF9MQU5FMF8xX1NUQVRVUywgc3RhdHVzLCAzKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlOVl9ERUJVRyhkZXYsICJcdFx0c3RhdHVzOiAweCUwMnggMHglMDJ4XG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiXHRcdHN0YXR1czogMHglMDJ4IDB4JTAyeFxuIiwKIAkJCSBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJZXFfZG9uZSA9IHRydWU7CkBAIC0zOTUsOSArMzk1LDkgQEAKIAogCS8qIHJldHJ5IGF0IGEgbG93ZXIgc2V0dGluZywgaWYgcG9zc2libGUgKi8KIAlpZiAoIXJldCAmJiAhKGVxX2RvbmUgJiYgY3JfZG9uZSkpIHsKLQkJTlZfREVCVUcoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiXHR3ZSBmYWlsZWRcbiIpOwogCQlpZiAobnZfZW5jb2Rlci0+ZHAubGlua19idyAhPSBEUF9MSU5LX0JXXzFfNjIpIHsKLQkJCU5WX0RFQlVHKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOworCQkJTlZfREVCVUdfS01TKGRldiwgInJldHJ5IGxpbmsgdHJhaW5pbmcgYXQgbG93IHJhdGVcbiIpOwogCQkJbnZfZW5jb2Rlci0+ZHAubGlua19idyA9IERQX0xJTktfQldfMV82MjsKIAkJCWdvdG8gdHJhaW47CiAJCX0KQEAgLTQxOCw3ICs0MTgsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiBmYWxzZTsKIAotCU5WX0RFQlVHKGRldiwgImVuY29kZXI6IGxpbmtfYncgJWQsIGxpbmtfbnIgJWRcbiIKKwlOVl9ERUJVR19LTVMoZGV2LCAiZW5jb2RlcjogbGlua19idyAlZCwgbGlua19uciAlZFxuIgogCQkgICAgICAiZGlzcGxheTogbGlua19idyAlZCwgbGlua19uciAlZCB2ZXJzaW9uIDB4JTAyeFxuIiwKIAkJIG52X2VuY29kZXItPmRjYi0+ZHBjb25mLmxpbmtfYncsCiAJCSBudl9lbmNvZGVyLT5kY2ItPmRwY29uZi5saW5rX25yLApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJdWludDMyX3QgdG1wLCBjdHJsLCBzdGF0ID0gMCwgZGF0YTMyWzRdID0ge307CiAJaW50IHJldCA9IDAsIGksIGluZGV4ID0gYXV4Y2gtPnJkOwogCi0JTlZfREVCVUcoZGV2LCAiY2ggJWQgY21kICVkIGFkZHIgMHgleCBsZW4gJWRcbiIsIGluZGV4LCBjbWQsIGFkZHIsIGRhdGFfbnIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJjaCAlZCBjbWQgJWQgYWRkciAweCV4IGxlbiAlZFxuIiwgaW5kZXgsIGNtZCwgYWRkciwgZGF0YV9ucik7CiAKIAl0bXAgPSBudl9yZDMyKGRldiwgTlY1MF9BVVhDSF9DVFJMKGF1eGNoLT5yZCkpOwogCW52X3dyMzIoZGV2LCBOVjUwX0FVWENIX0NUUkwoYXV4Y2gtPnJkKSwgdG1wIHwgMHgwMDEwMDAwMCk7CkBAIC00NzIsNyArNDcyLDcgQEAKIAlpZiAoIShjbWQgJiAxKSkgewogCQltZW1jcHkoZGF0YTMyLCBkYXRhLCBkYXRhX25yKTsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJTlZfREVCVUcoZGV2LCAid3IgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJ3ciAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQkJbnZfd3IzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9PVVQoaW5kZXgsIGkpLCBkYXRhMzJbaV0pOwogCQl9CiAJfQpAQCAtNTA0LDcgKzUwNCw3IEBACiAJaWYgKGNtZCAmIDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJZGF0YTMyW2ldID0gbnZfcmQzMihkZXYsIE5WNTBfQVVYQ0hfREFUQV9JTihpbmRleCwgaSkpOwotCQkJTlZfREVCVUcoZGV2LCAicmQgJWQ6IDB4JTA4eFxuIiwgaSwgZGF0YTMyW2ldKTsKKwkJCU5WX0RFQlVHX0tNUyhkZXYsICJyZCAlZDogMHglMDh4XG4iLCBpLCBkYXRhMzJbaV0pOwogCQl9CiAJCW1lbWNweShkYXRhLCBkYXRhMzIsIGRhdGFfbnIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCmluZGV4IDM1MjQ5YzMuLjA2ZWI5OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwpAQCAtMzUsNiArMzUsMTAgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAorTU9EVUxFX1BBUk1fREVTQyhjdHhmdywgIlVzZSBleHRlcm5hbCBmaXJtd2FyZSBibG9iIGZvciBncmN0eCBpbml0IChOVjQwKSIpOworaW50IG5vdXZlYXVfY3R4ZncgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGN0eGZ3LCBub3V2ZWF1X2N0eGZ3LCBpbnQsIDA0MDApOworCiBNT0RVTEVfUEFSTV9ERVNDKG5vYWdwLCAiRGlzYWJsZSBBR1AiKTsKIGludCBub3V2ZWF1X25vYWdwOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vYWdwLCBub3V2ZWF1X25vYWdwLCBpbnQsIDA0MDApOwpAQCAtMjczLDcgKzI3Nyw3IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVsczsgaSsrKSB7CiAJCQljaGFuID0gZGV2X3ByaXYtPmZpZm9zW2ldOwotCQkJaWYgKCFjaGFuKQorCQkJaWYgKCFjaGFuIHx8ICFjaGFuLT5wdXNoYnVmX2JvKQogCQkJCWNvbnRpbnVlOwogCiAJCQlmb3IgKGogPSAwOyBqIDwgTk9VVkVBVV9ETUFfU0tJUFM7IGorKykKQEAgLTM0MSw3ICszNDUsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gbm91dmVhdV90dG1fbW1hcCwKIAkJLnBvbGwgPSBkcm1fcG9sbCwKIAkJLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCA4OGI0YzdiLi4wMjY0MTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTU0LDE1ICs1NCwyNCBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJtLmgiCiAjaW5jbHVkZSAibm91dmVhdV9yZWcuaCIKICNpbmNsdWRlICJub3V2ZWF1X2Jpb3MuaCIKK3N0cnVjdCBub3V2ZWF1X2dyY3R4OwogCiAjZGVmaW5lIE1BWF9OVU1fRENCX0VOVFJJRVMgMTYKIAogI2RlZmluZSBOT1VWRUFVX01BWF9DSEFOTkVMX05SIDEyOAorI2RlZmluZSBOT1VWRUFVX01BWF9USUxFX05SIDE1CiAKICNkZWZpbmUgTlY1MF9WTV9NQVhfVlJBTSAoMioxMDI0KjEwMjQqMTAyNFVMTCkKICNkZWZpbmUgTlY1MF9WTV9CTE9DSyAgICAoNTEyKjEwMjQqMTAyNFVMTCkKICNkZWZpbmUgTlY1MF9WTV9WUkFNX05SICAoTlY1MF9WTV9NQVhfVlJBTSAvIE5WNTBfVk1fQkxPQ0spCiAKK3N0cnVjdCBub3V2ZWF1X3RpbGVfcmVnIHsKKwlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2U7CisJdWludDMyX3QgYWRkcjsKKwl1aW50MzJfdCBzaXplOworCWJvb2wgdXNlZDsKK307CisKIHN0cnVjdCBub3V2ZWF1X2JvIHsKIAlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgYm87CiAJc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50OwpAQCAtODIsNiArOTEsNyBAQAogCiAJdWludDMyX3QgdGlsZV9tb2RlOwogCXVpbnQzMl90IHRpbGVfZmxhZ3M7CisJc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGU7CiAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmNwdV9maWxwOwpAQCAtMjc2LDggKzI4NiwxMyBAQAogfTsKIAogc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lIHsKKwlpbnQgbnVtX3RpbGVzOworCiAJaW50ICAoKmluaXQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCXZvaWQgKCp0YWtlZG93bikoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKwl2b2lkICgqc2V0X3JlZ2lvbl90aWxpbmcpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJCSB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCk7CiB9OwogCiBzdHJ1Y3Qgbm91dmVhdV9maWZvX2VuZ2luZSB7CkBAIC0yOTEsNiArMzA2LDggQEAKIAl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJdm9pZCAoKmVuYWJsZSkoc3RydWN0IGRybV9kZXZpY2UgKik7CiAJYm9vbCAoKnJlYXNzaWduKShzdHJ1Y3QgZHJtX2RldmljZSAqLCBib29sIGVuYWJsZSk7CisJYm9vbCAoKmNhY2hlX2ZsdXNoKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwlib29sICgqY2FjaGVfcHVsbCkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOwogCiAJaW50ICAoKmNoYW5uZWxfaWQpKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCkBAIC0zMTcsNiArMzM0LDcgQEAKIAlib29sIGFjY2VsX2Jsb2NrZWQ7CiAJdm9pZCAqY3R4cHJvZzsKIAl2b2lkICpjdHh2YWxzOworCWludCBncmN0eF9zaXplOwogCiAJaW50ICAoKmluaXQpKHN0cnVjdCBkcm1fZGV2aWNlICopOwogCXZvaWQgKCp0YWtlZG93bikoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC0zMjgsNiArMzQ2LDkgQEAKIAl2b2lkICgqZGVzdHJveV9jb250ZXh0KShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogCWludCAgKCpsb2FkX2NvbnRleHQpKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiAJaW50ICAoKnVubG9hZF9jb250ZXh0KShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKKworCXZvaWQgKCpzZXRfcmVnaW9uX3RpbGluZykoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGksIHVpbnQzMl90IGFkZHIsCisJCQkJICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCk7CiB9OwogCiBzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgewpAQCAtNTQ2LDYgKzU2NywxMiBAQAogCQl1bnNpZ25lZCBsb25nIHNnX2hhbmRsZTsKIAl9IGdhcnRfaW5mbzsKIAorCS8qIG52MTAtbnY0MCB0aWxpbmcgcmVnaW9ucyAqLworCXN0cnVjdCB7CisJCXN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnIHJlZ1tOT1VWRUFVX01BWF9USUxFX05SXTsKKwkJc3BpbmxvY2tfdCBsb2NrOworCX0gdGlsZTsKKwogCS8qIEc4eC9HOXggdmlydHVhbCBhZGRyZXNzIHNwYWNlICovCiAJdWludDY0X3Qgdm1fZ2FydF9iYXNlOwogCXVpbnQ2NF90IHZtX2dhcnRfc2l6ZTsKQEAgLTY0Nyw2ICs2NzQsNyBAQAogZXh0ZXJuIGNoYXIgKm5vdXZlYXVfdHZfbm9ybTsKIGV4dGVybiBpbnQgbm91dmVhdV9yZWdfZGVidWc7CiBleHRlcm4gY2hhciAqbm91dmVhdV92YmlvczsKK2V4dGVybiBpbnQgbm91dmVhdV9jdHhmdzsKIAogLyogbm91dmVhdV9zdGF0ZS5jICovCiBleHRlcm4gdm9pZCBub3V2ZWF1X3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqKTsKQEAgLTY4Miw2ICs3MTAsMTMgQEAKIGV4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X21lbV9pbml0X2FncChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG5vdXZlYXVfbWVtX2Nsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICpudjEwX21lbV9zZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQkgICAgdWludDMyX3QgYWRkciwKKwkJCQkJCSAgICB1aW50MzJfdCBzaXplLAorCQkJCQkJICAgIHVpbnQzMl90IHBpdGNoKTsKK2V4dGVybiB2b2lkIG52MTBfbWVtX2V4cGlyZV90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSwKKwkJCQkgICBzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UpOwogZXh0ZXJuIGludCAgbnY1MF9tZW1fdm1fYmluZF9saW5lYXIoc3RydWN0IGRybV9kZXZpY2UgKiwgdWludDY0X3QgdmlydCwKIAkJCQkgICAgdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgZmxhZ3MsCiAJCQkJICAgIHVpbnQ2NF90IHBoeXMpOwpAQCAtNzEwLDcgKzc0NSw2IEBACiAJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkgIHVpbnQzMl90IGZiX2N0eGRtYSwgdWludDMyX3QgdHRfY3R4ZG1hKTsKIGV4dGVybiB2b2lkIG5vdXZlYXVfY2hhbm5lbF9mcmVlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7Ci1leHRlcm4gaW50ICBub3V2ZWF1X2NoYW5uZWxfaWRsZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKTsKIAogLyogbm91dmVhdV9vYmplY3QuYyAqLwogZXh0ZXJuIGludCAgbm91dmVhdV9ncHVvYmpfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTc1Myw2ICs3ODcsOCBAQAogCQkJCSAgICAgICB1aW50MzJfdCAqb19yZXQpOwogZXh0ZXJuIGludCBub3V2ZWF1X2dwdW9ial9ncl9uZXcoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLCBpbnQgY2xhc3MsCiAJCQkJIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKik7CitleHRlcm4gaW50IG5vdXZlYXVfZ3B1b2JqX3N3X25ldyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBjbGFzcywKKwkJCQkgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqKTsKIGV4dGVybiBpbnQgbm91dmVhdV9pb2N0bF9ncm9ial9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICpkYXRhLAogCQkJCSAgICAgc3RydWN0IGRybV9maWxlICopOwogZXh0ZXJuIGludCBub3V2ZWF1X2lvY3RsX2dwdW9ial9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKmRhdGEsCkBAIC04MDEsNiArODM3LDcgQEAKICNlbmRpZgogCiAvKiBub3V2ZWF1X2RtYS5jICovCitleHRlcm4gdm9pZCBub3V2ZWF1X2RtYV9wcmVfaW5pdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9kbWFfaW5pdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9kbWFfd2FpdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBzaXplKTsKIApAQCAtODc2LDE2ICs5MTMsMjIgQEAKIC8qIG52MTBfZmIuYyAqLwogZXh0ZXJuIGludCAgbnYxMF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnYxMF9mYl90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIG52MTBfZmJfc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKiwgaW50LCB1aW50MzJfdCwKKwkJCQkgICAgICB1aW50MzJfdCwgdWludDMyX3QpOwogCiAvKiBudjQwX2ZiLmMgKi8KIGV4dGVybiBpbnQgIG52NDBfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NDBfZmJfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBudjQwX2ZiX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICosIGludCwgdWludDMyX3QsCisJCQkJICAgICAgdWludDMyX3QsIHVpbnQzMl90KTsKIAogLyogbnYwNF9maWZvLmMgKi8KIGV4dGVybiBpbnQgIG52MDRfZmlmb19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgbnYwNF9maWZvX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjA0X2ZpZm9fZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGJvb2wgbnYwNF9maWZvX3JlYXNzaWduKHN0cnVjdCBkcm1fZGV2aWNlICosIGJvb2wpOworZXh0ZXJuIGJvb2wgbnYwNF9maWZvX2NhY2hlX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGJvb2wgbnYwNF9maWZvX2NhY2hlX3B1bGwoc3RydWN0IGRybV9kZXZpY2UgKiwgYm9vbCk7CiBleHRlcm4gaW50ICBudjA0X2ZpZm9fY2hhbm5lbF9pZChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG52MDRfZmlmb19jcmVhdGVfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIHZvaWQgbnYwNF9maWZvX2Rlc3Ryb3lfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwpAQCAtOTM4LDYgKzk4MSw4IEBACiBleHRlcm4gaW50ICBudjEwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnYxMF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBudjEwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICosIGludCwgdWludDMyX3QsCisJCQkJCSB1aW50MzJfdCwgdWludDMyX3QpOwogCiAvKiBudjIwX2dyYXBoLmMgKi8KIGV4dGVybiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52MjBfZ3JhcGhfZ3JjbGFzc1tdOwpAQCAtOTQ5LDYgKzk5NCw4IEBACiBleHRlcm4gaW50ICBudjIwX2dyYXBoX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjIwX2dyYXBoX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbnYzMF9ncmFwaF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIHZvaWQgbnYyMF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqLCBpbnQsIHVpbnQzMl90LAorCQkJCQkgdWludDMyX3QsIHVpbnQzMl90KTsKIAogLyogbnY0MF9ncmFwaC5jICovCiBleHRlcm4gc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXTsKQEAgLTk1OSw5ICsxMDA2LDkgQEAKIGV4dGVybiB2b2lkIG52NDBfZ3JhcGhfZGVzdHJveV9jb250ZXh0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBudjQwX2dyYXBoX2xvYWRfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbnY0MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiBpbnQgIG52NDBfZ3JjdHhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIG52NDBfZ3JjdHhfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIG52NDBfZ3JjdHhfdmFsc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICosIHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqKTsKK2V4dGVybiB2b2lkIG52NDBfZ3JjdHhfaW5pdChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqKTsKK2V4dGVybiB2b2lkIG52NDBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKiwgaW50LCB1aW50MzJfdCwKKwkJCQkJIHVpbnQzMl90LCB1aW50MzJfdCk7CiAKIC8qIG52NTBfZ3JhcGguYyAqLwogZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X3BncmFwaF9vYmplY3RfY2xhc3MgbnY1MF9ncmFwaF9ncmNsYXNzW107CkBAIC05NzUsNiArMTAyMiwxMiBAQAogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52NTBfZ3JhcGhfY29udGV4dF9zd2l0Y2goc3RydWN0IGRybV9kZXZpY2UgKik7CiAKKy8qIG5vdXZlYXVfZ3JjdHguYyAqLworZXh0ZXJuIGludCAgbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqLAorCQkJCSAgICBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKik7CitleHRlcm4gdm9pZCBub3V2ZWF1X2dyY3R4X2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKik7CisKIC8qIG52MDRfaW5zdG1lbS5jICovCiBleHRlcm4gaW50ICBudjA0X2luc3RtZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIG52MDRfaW5zdG1lbV90YWtlZG93bihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKQEAgLTEwMjMsOCArMTA3Niw3IEBACiAKIC8qIG52MDRfZGFjLmMgKi8KIGV4dGVybiBpbnQgbnYwNF9kYWNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfZW50cnkgKmVudHJ5KTsKLWV4dGVybiBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG52MTdfZGFjX2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CitleHRlcm4gdWludDMyX3QgbnYxN19kYWNfc2FtcGxlX2xvYWQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIGV4dGVybiBpbnQgbnYwNF9kYWNfb3V0cHV0X29mZnNldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogZXh0ZXJuIHZvaWQgbnYwNF9kYWNfdXBkYXRlX2RhY2NsayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wgZW5hYmxlKTsKIApAQCAtMTA0Miw5ICsxMDk0LDYgQEAKIAogLyogbnYxN190di5jICovCiBleHRlcm4gaW50IG52MTdfdHZfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfZW50cnkgKmVudHJ5KTsKLWV4dGVybiBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG52MTdfdHZfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJCQl1aW50MzJfdCBwaW5fbWFzayk7CiAKIC8qIG52MDRfZGlzcGxheS5jICovCiBleHRlcm4gaW50IG52MDRfZGlzcGxheV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKik7CkBAIC0xMjA3LDE0ICsxMjU2LDI0IEBACiAJCQkJCXBjaV9uYW1lKGQtPnBkZXYpLCAjI2FyZykKICNpZm5kZWYgTlZfREVCVUdfTk9UUkFDRQogI2RlZmluZSBOVl9ERUJVRyhkLCBmbXQsIGFyZy4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoZHJtX2RlYnVnKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoZHJtX2RlYnVnICYgRFJNX1VUX0RSSVZFUikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJTlZfUFJJTlRLKEtFUk5fREVCVUcsIGQsICIlczolZCAtICIgZm10LCBfX2Z1bmNfXywgICAgICAgICAgICAgXAorCQkJICBfX0xJTkVfXywgIyNhcmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjZGVmaW5lIE5WX0RFQlVHX0tNUyhkLCBmbXQsIGFyZy4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfS01TKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgIiVzOiVkIC0gIiBmbXQsIF9fZnVuY19fLCAgICAgICAgICAgICBcCiAJCQkgIF9fTElORV9fLCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIE5WX0RFQlVHKGQsIGZtdCwgYXJnLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChkcm1fZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkcm1fZGVidWcgJiBEUk1fVVRfRFJJVkVSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlOVl9QUklOVEsoS0VSTl9ERUJVRywgZCwgZm10LCAjI2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2RlZmluZSBOVl9ERUJVR19LTVMoZCwgZm10LCBhcmcuLi4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoZHJtX2RlYnVnICYgRFJNX1VUX0tNUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJTlZfUFJJTlRLKEtFUk5fREVCVUcsIGQsIGZtdCwgIyNhcmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMTI3MywxNCArMTMzMiwxNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotI2RlZmluZSBOVjUwX05WU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNTA2ZQotI2RlZmluZSBOVjUwX05WU1dfRE1BX1NFTUFQSE9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAotI2RlZmluZSBOVjUwX05WU1dfU0VNQVBIT1JFX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAotI2RlZmluZSBOVjUwX05WU1dfU0VNQVBIT1JFX0FDUVVJUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAotI2RlZmluZSBOVjUwX05WU1dfU0VNQVBIT1JFX1JFTEVBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2YwotI2RlZmluZSBOVjUwX05WU1dfRE1BX1ZCTFNFTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4YwotI2RlZmluZSBOVjUwX05WU1dfVkJMU0VNX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBOVjUwX05WU1dfVkJMU0VNX1JFTEVBU0VfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAotI2RlZmluZSBOVjUwX05WU1dfVkJMU0VNX1JFTEVBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwOAorI2RlZmluZSBOVl9TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNTA2ZQorI2RlZmluZSBOVl9TV19ETUFfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBOVl9TV19TRU1BUEhPUkVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2NAorI2RlZmluZSBOVl9TV19TRU1BUEhPUkVfQUNRVUlSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2OAorI2RlZmluZSBOVl9TV19TRU1BUEhPUkVfUkVMRUFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2YworI2RlZmluZSBOVl9TV19ETUFfVkJMU0VNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDE4YworI2RlZmluZSBOVl9TV19WQkxTRU1fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBOVl9TV19WQkxTRU1fUkVMRUFTRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwNAorI2RlZmluZSBOVl9TV19WQkxTRU1fUkVMRUFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwOAogCiAjZW5kaWYgLyogX19OT1VWRUFVX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwppbmRleCAzNmU4YzVlLi4wYjA1Yzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCkBAIC01OCwxNCArNTgsMTMgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuID0gZGV2X3ByaXYtPmNoYW5uZWw7CiAJaW50IHJldCwgaTsKIAotCWlmICghY2hhbi0+YWNjZWxfZG9uZSB8fAorCWlmICghY2hhbiB8fCAhY2hhbi0+YWNjZWxfZG9uZSB8fAogCSAgICBpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fAogCSAgICBpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKQogCQlyZXR1cm4gMDsKIAogCWlmIChSSU5HX1NQQUNFKGNoYW4sIDQpKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkdQVSBsb2NrdXAgLSBzd2l0Y2hpbmcgdG8gc29mdHdhcmUgZmJjb25cbiIpOwotCQlpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKwkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg2LDggKzg1LDcgQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgIkdQVSBsb2NrdXAgLSBzd2l0Y2hpbmcgdG8gc29mdHdhcmUgZmJjb25cbiIpOwotCQlpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKwkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIxMiwxMSArMjEwLDExIEBACiAKIAltb2RlX2NtZC5icHAgPSBzdXJmYWNlX2JwcDsKIAltb2RlX2NtZC5waXRjaCA9IG1vZGVfY21kLndpZHRoICogKG1vZGVfY21kLmJwcCA+PiAzKTsKLQltb2RlX2NtZC5waXRjaCA9IEFMSUdOKG1vZGVfY21kLnBpdGNoLCAyNTYpOworCW1vZGVfY21kLnBpdGNoID0gcm91bmR1cChtb2RlX2NtZC5waXRjaCwgMjU2KTsKIAltb2RlX2NtZC5kZXB0aCA9IHN1cmZhY2VfZGVwdGg7CiAKIAlzaXplID0gbW9kZV9jbWQucGl0Y2ggKiBtb2RlX2NtZC5oZWlnaHQ7Ci0Jc2l6ZSA9IEFMSUdOKHNpemUsIFBBR0VfU0laRSk7CisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9TSVpFKTsKIAogCXJldCA9IG5vdXZlYXVfZ2VtX25ldyhkZXYsIGRldl9wcml2LT5jaGFubmVsLCBzaXplLCAwLCBUVE1fUExfRkxBR19WUkFNLAogCQkJICAgICAgMCwgMHgwMDAwLCBmYWxzZSwgdHJ1ZSwgJm52Ym8pOwpAQCAtMzE4LDE0ICszMTYsMTYgQEAKIAlwYXItPm5vdXZlYXVfZmIgPSBub3V2ZWF1X2ZiOwogCXBhci0+ZGV2ID0gZGV2OwogCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7Ci0JCWJyZWFrOwotCX07CisJaWYgKGRldl9wcml2LT5jaGFubmVsKSB7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgeworCQljYXNlIE5WXzUwOgorCQkJbnY1MF9mYmNvbl9hY2NlbF9pbml0KGluZm8pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludjA0X2ZiY29uX2FjY2VsX2luaXQoaW5mbyk7CisJCQlicmVhazsKKwkJfTsKKwl9CiAKIAlub3V2ZWF1X2ZiY29uX3pmaWxsKGRldik7CiAKQEAgLTM0Nyw3ICszNDcsNyBAQAogaW50CiBub3V2ZWF1X2ZiY29uX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldHVybiBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsIDMyLCBub3V2ZWF1X2ZiY29uX2NyZWF0ZSk7CiB9CkBAIC0zNzgsMyArMzc4LDEyIEBACiAKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IG5vdXZlYXVfZmJjb25fcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBhci0+ZGV2OworCisJTlZfRVJST1IoZGV2LCAiR1BVIGxvY2t1cCAtIHN3aXRjaGluZyB0byBzb2Z0d2FyZSBmYmNvblxuIik7CisJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmgKaW5kZXggODUzMTE0MC4uNDYyZTBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uaApAQCAtNDMsNSArNDMsNiBAQAogaW50IG52MDRfZmJjb25fYWNjZWxfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBpbnQgbnY1MF9mYmNvbl9hY2NlbF9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAordm9pZCBub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoc3RydWN0IGZiX2luZm8gKmluZm8pOwogI2VuZGlmIC8qIF9fTlY1MF9GQkNPTl9IX18gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCmluZGV4IGRhY2FjOWEuLmZhZGRmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCWxpc3RfYWRkX3RhaWwoJmZlbmNlLT5lbnRyeSwgJmNoYW4tPmZlbmNlLnBlbmRpbmcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmZlbmNlLmxvY2ssIGZsYWdzKTsKIAotCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJNMk1GLCBVU0VfUkVGQ05UID8gMHgwMDUwIDogMHgwMTUwLCAxKTsKKwlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIFVTRV9SRUZDTlQgPyAweDAwNTAgOiAweDAxNTAsIDEpOwogCU9VVF9SSU5HKGNoYW4sIGZlbmNlLT5zZXF1ZW5jZSk7CiAJRklSRV9SSU5HKGNoYW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwppbmRleCAxOGZkOGFjLi4yMDA5ZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTIyMCw3ICsyMjAsNiBAQAogfQogCiBzdHJ1Y3QgdmFsaWRhdGVfb3AgewotCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZyYW1fbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGdhcnRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJvdGhfbGlzdDsKQEAgLTI1MiwxNyArMjUxLDExIEBACiB9CiAKIHN0YXRpYyB2b2lkCi12YWxpZGF0ZV9maW5pKHN0cnVjdCB2YWxpZGF0ZV9vcCAqb3AsIGJvb2wgc3VjY2VzcykKK3ZhbGlkYXRlX2Zpbmkoc3RydWN0IHZhbGlkYXRlX29wICpvcCwgc3RydWN0IG5vdXZlYXVfZmVuY2UqIGZlbmNlKQogewotCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IG9wLT5mZW5jZTsKLQotCWlmICh1bmxpa2VseSghc3VjY2VzcykpCi0JCW9wLT5mZW5jZSA9IE5VTEw7Ci0KLQl2YWxpZGF0ZV9maW5pX2xpc3QoJm9wLT52cmFtX2xpc3QsIG9wLT5mZW5jZSk7Ci0JdmFsaWRhdGVfZmluaV9saXN0KCZvcC0+Z2FydF9saXN0LCBvcC0+ZmVuY2UpOwotCXZhbGlkYXRlX2ZpbmlfbGlzdCgmb3AtPmJvdGhfbGlzdCwgb3AtPmZlbmNlKTsKLQlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkICopJmZlbmNlKTsKKwl2YWxpZGF0ZV9maW5pX2xpc3QoJm9wLT52cmFtX2xpc3QsIGZlbmNlKTsKKwl2YWxpZGF0ZV9maW5pX2xpc3QoJm9wLT5nYXJ0X2xpc3QsIGZlbmNlKTsKKwl2YWxpZGF0ZV9maW5pX2xpc3QoJm9wLT5ib3RoX2xpc3QsIGZlbmNlKTsKIH0KIAogc3RhdGljIGludApAQCAtNDIwLDEwICs0MTMsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZvcC0+Z2FydF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmb3AtPmJvdGhfbGlzdCk7CiAKLQlyZXQgPSBub3V2ZWF1X2ZlbmNlX25ldyhjaGFuLCAmb3AtPmZlbmNlLCBmYWxzZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCWlmIChucl9idWZmZXJzID09IDApCiAJCXJldHVybiAwOwogCkBAIC01NDEsNiArNTMwLDcgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gKmJvID0gTlVMTDsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCXN0cnVjdCB2YWxpZGF0ZV9vcCBvcDsKKwlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSogZmVuY2UgPSAwOwogCXVpbnQzMl90ICpwdXNoYnVmID0gTlVMTDsKIAlpbnQgcmV0ID0gMCwgZG9fcmVsb2MgPSAwLCBpOwogCkBAIC01OTcsNyArNTg3LDcgQEAKIAogCU9VVF9SSU5HcChjaGFuLCBwdXNoYnVmLCByZXEtPm5yX2R3b3Jkcyk7CiAKLQlyZXQgPSBub3V2ZWF1X2ZlbmNlX2VtaXQob3AuZmVuY2UpOworCXJldCA9IG5vdXZlYXVfZmVuY2VfbmV3KGNoYW4sICZmZW5jZSwgdHJ1ZSk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJlcnJvciBmZW5jaW5nIHB1c2hidWY6ICVkXG4iLCByZXQpOwogCQlXSU5EX1JJTkcoY2hhbik7CkBAIC02MDUsNyArNTk1LDcgQEAKIAl9CiAKIAlpZiAobm91dmVhdV9nZW1fcHVzaGJ1Zl9zeW5jKGNoYW4pKSB7Ci0JCXJldCA9IG5vdXZlYXVfZmVuY2Vfd2FpdChvcC5mZW5jZSwgTlVMTCwgZmFsc2UsIGZhbHNlKTsKKwkJcmV0ID0gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCBOVUxMLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAocmV0KSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5ucl9kd29yZHM7IGkrKykKIAkJCQlOVl9FUlJPUihkZXYsICIweCUwOHhcbiIsIHB1c2hidWZbaV0pOwpAQCAtNjE0LDcgKzYwNCw4IEBACiAJfQogCiBvdXQ6Ci0JdmFsaWRhdGVfZmluaSgmb3AsIHJldCA9PSAwKTsKKwl2YWxpZGF0ZV9maW5pKCZvcCwgZmVuY2UpOworCW5vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQqKikmZmVuY2UpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWtmcmVlKHB1c2hidWYpOwogCWtmcmVlKGJvKTsKQEAgLTYzNCw2ICs2MjUsNyBAQAogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwogCXN0cnVjdCBub3V2ZWF1X2JvICpwYmJvOwogCXN0cnVjdCB2YWxpZGF0ZV9vcCBvcDsKKwlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSogZmVuY2UgPSAwOwogCWludCBpLCByZXQgPSAwLCBkb19yZWxvYyA9IDA7CiAKIAlOT1VWRUFVX0NIRUNLX0lOSVRJQUxJU0VEX1dJVEhfUkVUVVJOOwpAQCAtNzcyLDcgKzc2NCw3IEBACiAJCQlPVVRfUklORyhjaGFuLCAwKTsKIAl9CiAKLQlyZXQgPSBub3V2ZWF1X2ZlbmNlX2VtaXQob3AuZmVuY2UpOworCXJldCA9IG5vdXZlYXVfZmVuY2VfbmV3KGNoYW4sICZmZW5jZSwgdHJ1ZSk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJlcnJvciBmZW5jaW5nIHB1c2hidWY6ICVkXG4iLCByZXQpOwogCQlXSU5EX1JJTkcoY2hhbik7CkBAIC03ODAsNyArNzcyLDggQEAKIAl9CiAKIG91dDoKLQl2YWxpZGF0ZV9maW5pKCZvcCwgcmV0ID09IDApOworCXZhbGlkYXRlX2ZpbmkoJm9wLCBmZW5jZSk7CisJbm91dmVhdV9mZW5jZV91bnJlZigodm9pZCoqKSZmZW5jZSk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJa2ZyZWUoYm8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5ZjRjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ3JjdHguYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEJlbiBTa2VnZ3MKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2Rydi5oIgorCitzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nIHsKKwl1aW50MzJfdCBzaWduYXR1cmU7CisJdWludDhfdCAgdmVyc2lvbjsKKwl1aW50MTZfdCBsZW5ndGg7CisJdWludDMyX3QgZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBub3V2ZWF1X2N0eHZhbHMgeworCXVpbnQzMl90IHNpZ25hdHVyZTsKKwl1aW50OF90ICB2ZXJzaW9uOworCXVpbnQzMl90IGxlbmd0aDsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCBvZmZzZXQ7CisJCXVpbnQzMl90IHZhbHVlOworCX0gZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludAorbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCWNvbnN0IGludCBjaGlwc2V0ID0gZGV2X3ByaXYtPmNoaXBzZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nICpjcDsKKwljb25zdCBzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdjsKKwljaGFyIG5hbWVbMzJdOworCWludCByZXQsIGk7CisKKwlpZiAocGdyYXBoLT5hY2NlbF9ibG9ja2VkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHByb2ciLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHByb2cgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcGdyYXBoLT5jdHhwcm9nID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHhwcm9nXG4iKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtY3B5KHBncmFwaC0+Y3R4cHJvZywgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCQljcCA9IHBncmFwaC0+Y3R4cHJvZzsKKwkJaWYgKGxlMzJfdG9fY3B1KGNwLT5zaWduYXR1cmUpICE9IDB4NTA0MzU2NGUgfHwKKwkJICAgIGNwLT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA3KSAvIDQpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHhwcm9nIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7CisJCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHZhbHMiLCBjaGlwc2V0KTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7CisJCWlmIChyZXQpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHZhbHMgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwZ3JhcGgtPmN0eHZhbHMgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKKwkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbWNweShwZ3JhcGgtPmN0eHZhbHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKKwkJaWYgKGxlMzJfdG9fY3B1KGN2LT5zaWduYXR1cmUpICE9IDB4NTY0MzU2NGUgfHwKKwkJICAgIGN2LT52ZXJzaW9uICE9IDAgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7CisJCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOworCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCQlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCX0KKworCWNwID0gcGdyYXBoLT5jdHhwcm9nOworCisJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwKKwkJCWxlMzJfdG9fY3B1KGNwLT5kYXRhW2ldKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorbm91dmVhdV9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKworCWlmIChwZ3JhcGgtPmN0eHByb2cpIHsKKwkJa2ZyZWUocGdyYXBoLT5jdHhwcm9nKTsKKwkJcGdyYXBoLT5jdHhwcm9nID0gTlVMTDsKKwl9CisKKwlpZiAocGdyYXBoLT5jdHh2YWxzKSB7CisJCWtmcmVlKHBncmFwaC0+Y3R4cHJvZyk7CisJCXBncmFwaC0+Y3R4dmFscyA9IE5VTEw7CisJfQorfQorCit2b2lkCitub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgKmN2ID0gcGdyYXBoLT5jdHh2YWxzOworCWludCBpOworCisJaWYgKCFjdikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpOyBpKyspCisJCW52X3dvMzIoZGV2LCBjdHgsIGxlMzJfdG9fY3B1KGN2LT5kYXRhW2ldLm9mZnNldCksCisJCQlsZTMyX3RvX2NwdShjdi0+ZGF0YVtpXS52YWx1ZSkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ncmN0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzljNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dyY3R4LmgKQEAgLTAsMCArMSwxMzMgQEAKKyNpZm5kZWYgX19OT1VWRUFVX0dSQ1RYX0hfXworI2RlZmluZSBfX05PVVZFQVVfR1JDVFhfSF9fCisKK3N0cnVjdCBub3V2ZWF1X2dyY3R4IHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJZW51bSB7CisJCU5PVVZFQVVfR1JDVFhfUFJPRywKKwkJTk9VVkVBVV9HUkNUWF9WQUxTCisJfSBtb2RlOworCXZvaWQgKmRhdGE7CisKKwl1aW50MzJfdCBjdHhwcm9nX21heDsKKwl1aW50MzJfdCBjdHhwcm9nX2xlbjsKKwl1aW50MzJfdCBjdHhwcm9nX3JlZzsKKwlpbnQgICAgICBjdHhwcm9nX2xhYmVsWzMyXTsKKwl1aW50MzJfdCBjdHh2YWxzX3BvczsKKwl1aW50MzJfdCBjdHh2YWxzX2Jhc2U7Cit9OworCisjaWZkZWYgQ1BfQ1RYCitzdGF0aWMgaW5saW5lIHZvaWQKK2NwX291dChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1aW50MzJfdCBpbnN0KQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCUJVR19PTihjdHgtPmN0eHByb2dfbGVuID09IGN0eC0+Y3R4cHJvZ19tYXgpOworCWN0eHByb2dbY3R4LT5jdHhwcm9nX2xlbisrXSA9IGluc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfbHNyKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIHVpbnQzMl90IHZhbCkKK3sKKwljcF9vdXQoY3R4LCBDUF9MT0FEX1NSIHwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9jdHgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBsZW5ndGgpCit7CisJY3R4LT5jdHhwcm9nX3JlZyA9IChyZWcgLSAweDAwNDAwMDAwKSA+PiAyOworCisJY3R4LT5jdHh2YWxzX2Jhc2UgPSBjdHgtPmN0eHZhbHNfcG9zOworCWN0eC0+Y3R4dmFsc19wb3MgPSBjdHgtPmN0eHZhbHNfYmFzZSArIGxlbmd0aDsKKworCWlmIChsZW5ndGggPiAoQ1BfQ1RYX0NPVU5UID4+IENQX0NUWF9DT1VOVF9TSElGVCkpIHsKKwkJY3BfbHNyKGN0eCwgbGVuZ3RoKTsKKwkJbGVuZ3RoID0gMDsKKwl9CisKKwljcF9vdXQoY3R4LCBDUF9DVFggfCAobGVuZ3RoIDw8IENQX0NUWF9DT1VOVF9TSElGVCkgfCBjdHgtPmN0eHByb2dfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitjcF9uYW1lKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBuYW1lKQoreworCXVpbnQzMl90ICpjdHhwcm9nID0gY3R4LT5kYXRhOworCWludCBpOworCisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1BST0cpCisJCXJldHVybjsKKworCWN0eC0+Y3R4cHJvZ19sYWJlbFtuYW1lXSA9IGN0eC0+Y3R4cHJvZ19sZW47CisJZm9yIChpID0gMDsgaSA8IGN0eC0+Y3R4cHJvZ19sZW47IGkrKykgeworCQlpZiAoKGN0eHByb2dbaV0gJiAweGZmZjAwMDAwKSAhPSAweGZmNDAwMDAwKQorCQkJY29udGludWU7CisJCWlmICgoY3R4cHJvZ1tpXSAmIENQX0JSQV9JUCkgIT0gKChuYW1lKSA8PCBDUF9CUkFfSVBfU0hJRlQpKQorCQkJY29udGludWU7CisJCWN0eHByb2dbaV0gPSAoY3R4cHJvZ1tpXSAmIDB4MDBmZjAwZmYpIHwKKwkJCSAgICAgKGN0eC0+Y3R4cHJvZ19sZW4gPDwgQ1BfQlJBX0lQX1NISUZUKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX2JyYShzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4LCB1MzIgbW9kLCBpbnQgZmxhZywgaW50IHN0YXRlLCBpbnQgbmFtZSkKK3sKKwlpbnQgaXAgPSAwOworCisJaWYgKG1vZCAhPSAyKSB7CisJCWlwID0gY3R4LT5jdHhwcm9nX2xhYmVsW25hbWVdIDw8IENQX0JSQV9JUF9TSElGVDsKKwkJaWYgKGlwID09IDApCisJCQlpcCA9IDB4ZmYwMDAwMDAgfCAobmFtZSA8PCBDUF9CUkFfSVBfU0hJRlQpOworCX0KKworCWNwX291dChjdHgsIENQX0JSQSB8IChtb2QgPDwgMTgpIHwgaXAgfCBmbGFnIHwKKwkJICAgIChzdGF0ZSA/IDAgOiBDUF9CUkFfSUZfQ0xFQVIpKTsKK30KKyNkZWZpbmUgY3BfYnJhKGMsZixzLG4pIF9jcF9icmEoKGMpLCAwLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MsIG4pCisjaWZkZWYgQ1BfQlJBX01PRAorI2RlZmluZSBjcF9jYWwoYyxmLHMsbikgX2NwX2JyYSgoYyksIDEsIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcywgbikKKyNkZWZpbmUgY3BfcmV0KGMsZixzKSBfY3BfYnJhKChjKSwgMiwgQ1BfRkxBR18jI2YsIENQX0ZMQUdfIyNmIyNfIyNzLCAwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX2NwX3dhaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgaW50IGZsYWcsIGludCBzdGF0ZSkKK3sKKwljcF9vdXQoY3R4LCBDUF9XQUlUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1dBSVRfU0VUIDogMCkpOworfQorI2RlZmluZSBjcF93YWl0KGMsZixzKSBfY3Bfd2FpdCgoYyksIENQX0ZMQUdfIyNmLCBDUF9GTEFHXyMjZiMjXyMjcykKKworc3RhdGljIGlubGluZSB2b2lkCitfY3Bfc2V0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBmbGFnLCBpbnQgc3RhdGUpCit7CisJY3Bfb3V0KGN0eCwgQ1BfU0VUIHwgZmxhZyB8IChzdGF0ZSA/IENQX1NFVF8xIDogMCkpOworfQorI2RlZmluZSBjcF9zZXQoYyxmLHMpIF9jcF9zZXQoKGMpLCBDUF9GTEFHXyMjZiwgQ1BfRkxBR18jI2YjI18jI3MpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY3BfcG9zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgsIGludCBvZmZzZXQpCit7CisJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwljdHgtPmN0eHZhbHNfYmFzZSA9IGN0eC0+Y3R4dmFsc19wb3M7CisKKwljcF9sc3IoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwljcF9vdXQoY3R4LCBDUF9TRVRfQ09OVEVYVF9QT0lOVEVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitncl9kZWYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpCit7CisJaWYgKGN0eC0+bW9kZSAhPSBOT1VWRUFVX0dSQ1RYX1ZBTFMpCisJCXJldHVybjsKKworCXJlZyA9IChyZWcgLSAweDAwNDAwMDAwKSAvIDQ7CisJcmVnID0gKHJlZyAtIGN0eC0+Y3R4cHJvZ19yZWcpICsgY3R4LT5jdHh2YWxzX2Jhc2U7CisKKwludl93bzMyKGN0eC0+ZGV2LCBjdHgtPmRhdGEsIHJlZywgdmFsKTsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaW9jMzIuYwppbmRleCBhMmMzMGY0Li40NzViYTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pb2MzMi5jCkBAIC02MSwxMiArNjEsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUobWdhX2NvbXBhdF9pb2N0bHMpKQogCQlmbiA9IG5vdXZlYXVfY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogI2VuZGlmCi0JbG9ja19rZXJuZWwoKTsJICAvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKShmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMKaW5kZXggMzcwYzcyYy4uOTE5YTYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jCkBAIC02MzUsNiArNjM1LDcgQEAKIAogCQlpZiAoKG52X3JkMzIoZGV2LCAweDQwMDUwMCkgJiBpc2IpICE9IGlzYikKIAkJCW52X3dyMzIoZGV2LCAweDQwMDUwMCwgbnZfcmQzMihkZXYsIDB4NDAwNTAwKSB8IGlzYik7CisJCW52X3dyMzIoZGV2LCAweDQwMDgyNCwgbnZfcmQzMihkZXYsIDB4NDAwODI0KSAmIH4oMSA8PCAzMSkpOwogCX0KIAogCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19JTlRSXzAsIE5WX1BNQ19JTlRSXzBfUEdSQVBIX1BFTkRJTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggNTE1OGExMi4uZmI5YmRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0xOTIsNiArMTkyLDkyIEBACiB9CiAKIC8qCisgKiBOVjEwLU5WNDAgdGlsaW5nIGhlbHBlcnMKKyAqLworCitzdGF0aWMgdm9pZAorbnYxMF9tZW1fc2V0X3JlZ2lvbl90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGksIHVpbnQzMl90IGFkZHIsCisJCQkgICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CisJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKKwlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CisKKwl0aWxlLT5hZGRyID0gYWRkcjsKKwl0aWxlLT5zaXplID0gc2l6ZTsKKwl0aWxlLT51c2VkID0gISFwaXRjaDsKKwlub3V2ZWF1X2ZlbmNlX3VucmVmKCh2b2lkICoqKSZ0aWxlLT5mZW5jZSk7CisKKwlpZiAoIXBmaWZvLT5jYWNoZV9mbHVzaChkZXYpKQorCQlyZXR1cm47CisKKwlwZmlmby0+cmVhc3NpZ24oZGV2LCBmYWxzZSk7CisJcGZpZm8tPmNhY2hlX2ZsdXNoKGRldik7CisJcGZpZm8tPmNhY2hlX3B1bGwoZGV2LCBmYWxzZSk7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCXBncmFwaC0+c2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCBhZGRyLCBzaXplLCBwaXRjaCk7CisJcGZiLT5zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIGFkZHIsIHNpemUsIHBpdGNoKTsKKworCXBmaWZvLT5jYWNoZV9wdWxsKGRldiwgdHJ1ZSk7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7Cit9CisKK3N0cnVjdCBub3V2ZWF1X3RpbGVfcmVnICoKK252MTBfbWVtX3NldF90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QgYWRkciwgdWludDMyX3Qgc2l6ZSwKKwkJICAgIHVpbnQzMl90IHBpdGNoKQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKKwlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9IGRldl9wcml2LT50aWxlLnJlZywgKmZvdW5kID0gTlVMTDsKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPnRpbGUubG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGZiLT5udW1fdGlsZXM7IGkrKykgeworCQlpZiAodGlsZVtpXS51c2VkKQorCQkJLyogVGlsZSByZWdpb24gaW4gdXNlLiAqLworCQkJY29udGludWU7CisKKwkJaWYgKHRpbGVbaV0uZmVuY2UgJiYKKwkJICAgICFub3V2ZWF1X2ZlbmNlX3NpZ25hbGxlZCh0aWxlW2ldLmZlbmNlLCBOVUxMKSkKKwkJCS8qIFBlbmRpbmcgdGlsZSByZWdpb24uICovCisJCQljb250aW51ZTsKKworCQlpZiAobWF4KHRpbGVbaV0uYWRkciwgYWRkcikgPAorCQkgICAgbWluKHRpbGVbaV0uYWRkciArIHRpbGVbaV0uc2l6ZSwgYWRkciArIHNpemUpKQorCQkJLyogS2lsbCBhbiBpbnRlcnNlY3RpbmcgdGlsZSByZWdpb24uICovCisJCQludjEwX21lbV9zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIDAsIDAsIDApOworCisJCWlmIChwaXRjaCAmJiAhZm91bmQpIHsKKwkJCS8qIEZyZWUgdGlsZSByZWdpb24uICovCisJCQludjEwX21lbV9zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIGFkZHIsIHNpemUsIHBpdGNoKTsKKwkJCWZvdW5kID0gJnRpbGVbaV07CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnRpbGUubG9jayk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3ZvaWQKK252MTBfbWVtX2V4cGlyZV90aWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG5vdXZlYXVfdGlsZV9yZWcgKnRpbGUsCisJCSAgICAgICBzdHJ1Y3Qgbm91dmVhdV9mZW5jZSAqZmVuY2UpCit7CisJaWYgKGZlbmNlKSB7CisJCS8qIE1hcmsgaXQgYXMgcGVuZGluZy4gKi8KKwkJdGlsZS0+ZmVuY2UgPSBmZW5jZTsKKwkJbm91dmVhdV9mZW5jZV9yZWYoZmVuY2UpOworCX0KKworCXRpbGUtPnVzZWQgPSBmYWxzZTsKK30KKworLyoKICAqIE5WNTAgVk0gaGVscGVycwogICovCiBpbnQKQEAgLTUxMyw2ICs1OTksNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT50dG0uYm9fbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT50dG0uYm9fbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnRpbGUubG9jayk7CiAKIAlkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemUgPSBub3V2ZWF1X21lbV9mYl9hbW91bnQoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKaW5kZXggOTMzNzliYi4uNmMyY2Y4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKK2ludAogbm91dmVhdV9ncHVvYmpfc3dfbmV3KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBjbGFzcywKIAkJICAgICAgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICoqZ3B1b2JqX3JldCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3JlZy5oCmluZGV4IGZhMWIwZTcuLjI1MWYxYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9yZWcuaApAQCAtMzQ5LDE5ICszNDksMTkgQEAKICNkZWZpbmUgTlYwNF9QR1JBUEhfQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMDgyNAogI2RlZmluZSBOVjA0X1BHUkFQSF9TVE9SRURfRk1UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwODMwCiAjZGVmaW5lIE5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDA5MDAKLSNkZWZpbmUgTlY0MF9QR1JBUEhfVElMRTAoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA5MDAgKyAoaSoxNikpCi0jZGVmaW5lIE5WNDBfUEdSQVBIX1RMSU1JVDAoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwOTA0ICsgKGkqMTYpKQotI2RlZmluZSBOVjQwX1BHUkFQSF9UU0laRTAoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMDkwOCArIChpKjE2KSkKLSNkZWZpbmUgTlY0MF9QR1JBUEhfVFNUQVRVUzAoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA5MEMgKyAoaSoxNikpCisjZGVmaW5lIE5WMjBfUEdSQVBIX1RJTEUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwOTAwICsgKGkqMTYpKQorI2RlZmluZSBOVjIwX1BHUkFQSF9UTElNSVQoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMDkwNCArIChpKjE2KSkKKyNkZWZpbmUgTlYyMF9QR1JBUEhfVFNJWkUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDA5MDggKyAoaSoxNikpCisjZGVmaW5lIE5WMjBfUEdSQVBIX1RTVEFUVVMoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwOTBDICsgKGkqMTYpKQogI2RlZmluZSBOVjEwX1BHUkFQSF9USUxFKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMEIwMCArIChpKjE2KSkKICNkZWZpbmUgTlYxMF9QR1JBUEhfVExJTUlUKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDBCMDQgKyAoaSoxNikpCiAjZGVmaW5lIE5WMTBfUEdSQVBIX1RTSVpFKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwQjA4ICsgKGkqMTYpKQogI2RlZmluZSBOVjEwX1BHUkFQSF9UU1RBVFVTKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMEIwQyArIChpKjE2KSkKICNkZWZpbmUgTlYwNF9QR1JBUEhfVV9SQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMEQwMAotI2RlZmluZSBOVjQ3X1BHUkFQSF9USUxFMChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMEQwMCArIChpKjE2KSkKLSNkZWZpbmUgTlY0N19QR1JBUEhfVExJTUlUMChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDBEMDQgKyAoaSoxNikpCi0jZGVmaW5lIE5WNDdfUEdSQVBIX1RTSVpFMChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwRDA4ICsgKGkqMTYpKQotI2RlZmluZSBOVjQ3X1BHUkFQSF9UU1RBVFVTMChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMEQwQyArIChpKjE2KSkKKyNkZWZpbmUgTlY0N19QR1JBUEhfVElMRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDBEMDAgKyAoaSoxNikpCisjZGVmaW5lIE5WNDdfUEdSQVBIX1RMSU1JVChpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDAwRDA0ICsgKGkqMTYpKQorI2RlZmluZSBOVjQ3X1BHUkFQSF9UU0laRShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDQwMEQwOCArIChpKjE2KSkKKyNkZWZpbmUgTlY0N19QR1JBUEhfVFNUQVRVUyhpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0MDBEMEMgKyAoaSoxNikpCiAjZGVmaW5lIE5WMDRfUEdSQVBIX1ZfUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDBENDAKICNkZWZpbmUgTlYwNF9QR1JBUEhfV19SQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwMEQ4MAogI2RlZmluZSBOVjEwX1BHUkFQSF9DT01CSU5FUjBfSU5fQUxQSEEgICAgICAgICAgICAgICAgICAgICAweDAwNDAwRTQwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKaW5kZXggMmVkNDFkMy4uMDliOWE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwpAQCAtNzYsNiArNzYsOCBAQAogCQllbmdpbmUtPmZpZm8uZGlzYWJsZQkJPSBudjA0X2ZpZm9fZGlzYWJsZTsKIAkJZW5naW5lLT5maWZvLmVuYWJsZQkJPSBudjA0X2ZpZm9fZW5hYmxlOwogCQllbmdpbmUtPmZpZm8ucmVhc3NpZ24JCT0gbnYwNF9maWZvX3JlYXNzaWduOworCQllbmdpbmUtPmZpZm8uY2FjaGVfZmx1c2gJPSBudjA0X2ZpZm9fY2FjaGVfZmx1c2g7CisJCWVuZ2luZS0+Zmlmby5jYWNoZV9wdWxsCQk9IG52MDRfZmlmb19jYWNoZV9wdWxsOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbF9pZAkJPSBudjA0X2ZpZm9fY2hhbm5lbF9pZDsKIAkJZW5naW5lLT5maWZvLmNyZWF0ZV9jb250ZXh0CT0gbnYwNF9maWZvX2NyZWF0ZV9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYwNF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKQEAgLTEwMCw2ICsxMDIsNyBAQAogCQllbmdpbmUtPnRpbWVyLnRha2Vkb3duCQk9IG52MDRfdGltZXJfdGFrZWRvd247CiAJCWVuZ2luZS0+ZmIuaW5pdAkJCT0gbnYxMF9mYl9pbml0OwogCQllbmdpbmUtPmZiLnRha2Vkb3duCQk9IG52MTBfZmJfdGFrZWRvd247CisJCWVuZ2luZS0+ZmIuc2V0X3JlZ2lvbl90aWxpbmcJPSBudjEwX2ZiX3NldF9yZWdpb25fdGlsaW5nOwogCQllbmdpbmUtPmdyYXBoLmdyY2xhc3MJCT0gbnYxMF9ncmFwaF9ncmNsYXNzOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnYxMF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52MTBfZ3JhcGhfdGFrZWRvd247CkBAIC0xMDksMTIgKzExMiwxNSBAQAogCQllbmdpbmUtPmdyYXBoLmZpZm9fYWNjZXNzCT0gbnYwNF9ncmFwaF9maWZvX2FjY2VzczsKIAkJZW5naW5lLT5ncmFwaC5sb2FkX2NvbnRleHQJPSBudjEwX2dyYXBoX2xvYWRfY29udGV4dDsKIAkJZW5naW5lLT5ncmFwaC51bmxvYWRfY29udGV4dAk9IG52MTBfZ3JhcGhfdW5sb2FkX2NvbnRleHQ7CisJCWVuZ2luZS0+Z3JhcGguc2V0X3JlZ2lvbl90aWxpbmcJPSBudjEwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbHMJCT0gMzI7CiAJCWVuZ2luZS0+Zmlmby5pbml0CQk9IG52MTBfZmlmb19pbml0OwogCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOwogCQllbmdpbmUtPmZpZm8uZGlzYWJsZQkJPSBudjA0X2ZpZm9fZGlzYWJsZTsKIAkJZW5naW5lLT5maWZvLmVuYWJsZQkJPSBudjA0X2ZpZm9fZW5hYmxlOwogCQllbmdpbmUtPmZpZm8ucmVhc3NpZ24JCT0gbnYwNF9maWZvX3JlYXNzaWduOworCQllbmdpbmUtPmZpZm8uY2FjaGVfZmx1c2gJPSBudjA0X2ZpZm9fY2FjaGVfZmx1c2g7CisJCWVuZ2luZS0+Zmlmby5jYWNoZV9wdWxsCQk9IG52MDRfZmlmb19jYWNoZV9wdWxsOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbF9pZAkJPSBudjEwX2ZpZm9fY2hhbm5lbF9pZDsKIAkJZW5naW5lLT5maWZvLmNyZWF0ZV9jb250ZXh0CT0gbnYxMF9maWZvX2NyZWF0ZV9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYxMF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKQEAgLTEzOSw2ICsxNDUsNyBAQAogCQllbmdpbmUtPnRpbWVyLnRha2Vkb3duCQk9IG52MDRfdGltZXJfdGFrZWRvd247CiAJCWVuZ2luZS0+ZmIuaW5pdAkJCT0gbnYxMF9mYl9pbml0OwogCQllbmdpbmUtPmZiLnRha2Vkb3duCQk9IG52MTBfZmJfdGFrZWRvd247CisJCWVuZ2luZS0+ZmIuc2V0X3JlZ2lvbl90aWxpbmcJPSBudjEwX2ZiX3NldF9yZWdpb25fdGlsaW5nOwogCQllbmdpbmUtPmdyYXBoLmdyY2xhc3MJCT0gbnYyMF9ncmFwaF9ncmNsYXNzOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnYyMF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52MjBfZ3JhcGhfdGFrZWRvd247CkBAIC0xNDgsMTIgKzE1NSwxNSBAQAogCQllbmdpbmUtPmdyYXBoLmZpZm9fYWNjZXNzCT0gbnYwNF9ncmFwaF9maWZvX2FjY2VzczsKIAkJZW5naW5lLT5ncmFwaC5sb2FkX2NvbnRleHQJPSBudjIwX2dyYXBoX2xvYWRfY29udGV4dDsKIAkJZW5naW5lLT5ncmFwaC51bmxvYWRfY29udGV4dAk9IG52MjBfZ3JhcGhfdW5sb2FkX2NvbnRleHQ7CisJCWVuZ2luZS0+Z3JhcGguc2V0X3JlZ2lvbl90aWxpbmcJPSBudjIwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbHMJCT0gMzI7CiAJCWVuZ2luZS0+Zmlmby5pbml0CQk9IG52MTBfZmlmb19pbml0OwogCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbm91dmVhdV9zdHViX3Rha2Vkb3duOwogCQllbmdpbmUtPmZpZm8uZGlzYWJsZQkJPSBudjA0X2ZpZm9fZGlzYWJsZTsKIAkJZW5naW5lLT5maWZvLmVuYWJsZQkJPSBudjA0X2ZpZm9fZW5hYmxlOwogCQllbmdpbmUtPmZpZm8ucmVhc3NpZ24JCT0gbnYwNF9maWZvX3JlYXNzaWduOworCQllbmdpbmUtPmZpZm8uY2FjaGVfZmx1c2gJPSBudjA0X2ZpZm9fY2FjaGVfZmx1c2g7CisJCWVuZ2luZS0+Zmlmby5jYWNoZV9wdWxsCQk9IG52MDRfZmlmb19jYWNoZV9wdWxsOwogCQllbmdpbmUtPmZpZm8uY2hhbm5lbF9pZAkJPSBudjEwX2ZpZm9fY2hhbm5lbF9pZDsKIAkJZW5naW5lLT5maWZvLmNyZWF0ZV9jb250ZXh0CT0gbnYxMF9maWZvX2NyZWF0ZV9jb250ZXh0OwogCQllbmdpbmUtPmZpZm8uZGVzdHJveV9jb250ZXh0CT0gbnYxMF9maWZvX2Rlc3Ryb3lfY29udGV4dDsKQEAgLTE3OCw2ICsxODgsNyBAQAogCQllbmdpbmUtPnRpbWVyLnRha2Vkb3duCQk9IG52MDRfdGltZXJfdGFrZWRvd247CiAJCWVuZ2luZS0+ZmIuaW5pdAkJCT0gbnYxMF9mYl9pbml0OwogCQllbmdpbmUtPmZiLnRha2Vkb3duCQk9IG52MTBfZmJfdGFrZWRvd247CisJCWVuZ2luZS0+ZmIuc2V0X3JlZ2lvbl90aWxpbmcJPSBudjEwX2ZiX3NldF9yZWdpb25fdGlsaW5nOwogCQllbmdpbmUtPmdyYXBoLmdyY2xhc3MJCT0gbnYzMF9ncmFwaF9ncmNsYXNzOwogCQllbmdpbmUtPmdyYXBoLmluaXQJCT0gbnYzMF9ncmFwaF9pbml0OwogCQllbmdpbmUtPmdyYXBoLnRha2Vkb3duCQk9IG52MjBfZ3JhcGhfdGFrZWRvd247CkBAIC0xODcsMTIgKzE5OCwxNSBAQAogCQllbmdpbmUtPmdyYXBoLmRlc3Ryb3lfY29udGV4dAk9IG52MjBfZ3JhcGhfZGVzdHJveV9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLmxvYWRfY29udGV4dAk9IG52MjBfZ3JhcGhfbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLnVubG9hZF9jb250ZXh0CT0gbnYyMF9ncmFwaF91bmxvYWRfY29udGV4dDsKKwkJZW5naW5lLT5ncmFwaC5zZXRfcmVnaW9uX3RpbGluZwk9IG52MjBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmc7CiAJCWVuZ2luZS0+Zmlmby5jaGFubmVscwkJPSAzMjsKIAkJZW5naW5lLT5maWZvLmluaXQJCT0gbnYxMF9maWZvX2luaXQ7CiAJCWVuZ2luZS0+Zmlmby50YWtlZG93bgkJPSBub3V2ZWF1X3N0dWJfdGFrZWRvd247CiAJCWVuZ2luZS0+Zmlmby5kaXNhYmxlCQk9IG52MDRfZmlmb19kaXNhYmxlOwogCQllbmdpbmUtPmZpZm8uZW5hYmxlCQk9IG52MDRfZmlmb19lbmFibGU7CiAJCWVuZ2luZS0+Zmlmby5yZWFzc2lnbgkJPSBudjA0X2ZpZm9fcmVhc3NpZ247CisJCWVuZ2luZS0+Zmlmby5jYWNoZV9mbHVzaAk9IG52MDRfZmlmb19jYWNoZV9mbHVzaDsKKwkJZW5naW5lLT5maWZvLmNhY2hlX3B1bGwJCT0gbnYwNF9maWZvX2NhY2hlX3B1bGw7CiAJCWVuZ2luZS0+Zmlmby5jaGFubmVsX2lkCQk9IG52MTBfZmlmb19jaGFubmVsX2lkOwogCQllbmdpbmUtPmZpZm8uY3JlYXRlX2NvbnRleHQJPSBudjEwX2ZpZm9fY3JlYXRlX2NvbnRleHQ7CiAJCWVuZ2luZS0+Zmlmby5kZXN0cm95X2NvbnRleHQJPSBudjEwX2ZpZm9fZGVzdHJveV9jb250ZXh0OwpAQCAtMjE4LDYgKzIzMiw3IEBACiAJCWVuZ2luZS0+dGltZXIudGFrZWRvd24JCT0gbnYwNF90aW1lcl90YWtlZG93bjsKIAkJZW5naW5lLT5mYi5pbml0CQkJPSBudjQwX2ZiX2luaXQ7CiAJCWVuZ2luZS0+ZmIudGFrZWRvd24JCT0gbnY0MF9mYl90YWtlZG93bjsKKwkJZW5naW5lLT5mYi5zZXRfcmVnaW9uX3RpbGluZwk9IG52NDBfZmJfc2V0X3JlZ2lvbl90aWxpbmc7CiAJCWVuZ2luZS0+Z3JhcGguZ3JjbGFzcwkJPSBudjQwX2dyYXBoX2dyY2xhc3M7CiAJCWVuZ2luZS0+Z3JhcGguaW5pdAkJPSBudjQwX2dyYXBoX2luaXQ7CiAJCWVuZ2luZS0+Z3JhcGgudGFrZWRvd24JCT0gbnY0MF9ncmFwaF90YWtlZG93bjsKQEAgLTIyNywxMiArMjQyLDE1IEBACiAJCWVuZ2luZS0+Z3JhcGguZGVzdHJveV9jb250ZXh0CT0gbnY0MF9ncmFwaF9kZXN0cm95X2NvbnRleHQ7CiAJCWVuZ2luZS0+Z3JhcGgubG9hZF9jb250ZXh0CT0gbnY0MF9ncmFwaF9sb2FkX2NvbnRleHQ7CiAJCWVuZ2luZS0+Z3JhcGgudW5sb2FkX2NvbnRleHQJPSBudjQwX2dyYXBoX3VubG9hZF9jb250ZXh0OworCQllbmdpbmUtPmdyYXBoLnNldF9yZWdpb25fdGlsaW5nCT0gbnY0MF9ncmFwaF9zZXRfcmVnaW9uX3RpbGluZzsKIAkJZW5naW5lLT5maWZvLmNoYW5uZWxzCQk9IDMyOwogCQllbmdpbmUtPmZpZm8uaW5pdAkJPSBudjQwX2ZpZm9faW5pdDsKIAkJZW5naW5lLT5maWZvLnRha2Vkb3duCQk9IG5vdXZlYXVfc3R1Yl90YWtlZG93bjsKIAkJZW5naW5lLT5maWZvLmRpc2FibGUJCT0gbnYwNF9maWZvX2Rpc2FibGU7CiAJCWVuZ2luZS0+Zmlmby5lbmFibGUJCT0gbnYwNF9maWZvX2VuYWJsZTsKIAkJZW5naW5lLT5maWZvLnJlYXNzaWduCQk9IG52MDRfZmlmb19yZWFzc2lnbjsKKwkJZW5naW5lLT5maWZvLmNhY2hlX2ZsdXNoCT0gbnYwNF9maWZvX2NhY2hlX2ZsdXNoOworCQllbmdpbmUtPmZpZm8uY2FjaGVfcHVsbAkJPSBudjA0X2ZpZm9fY2FjaGVfcHVsbDsKIAkJZW5naW5lLT5maWZvLmNoYW5uZWxfaWQJCT0gbnYxMF9maWZvX2NoYW5uZWxfaWQ7CiAJCWVuZ2luZS0+Zmlmby5jcmVhdGVfY29udGV4dAk9IG52NDBfZmlmb19jcmVhdGVfY29udGV4dDsKIAkJZW5naW5lLT5maWZvLmRlc3Ryb3lfY29udGV4dAk9IG52NDBfZmlmb19kZXN0cm95X2NvbnRleHQ7CkBAIC0yOTksOTQgKzMxNywxMyBAQAogCQlyZXR1cm4gVkdBX1JTUkNfTk9STUFMX0lPIHwgVkdBX1JTUkNfTk9STUFMX01FTTsKIH0KIAotaW50Ci1ub3V2ZWF1X2NhcmRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludAorbm91dmVhdV9jYXJkX2luaXRfY2hhbm5lbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZW5naW5lICplbmdpbmU7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpncHVvYmo7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgInByZXYgc3RhdGUgPSAlZFxuIiwgZGV2X3ByaXYtPmluaXRfc3RhdGUpOwotCi0JaWYgKGRldl9wcml2LT5pbml0X3N0YXRlID09IE5PVVZFQVVfQ0FSRF9JTklUX0RPTkUpCi0JCXJldHVybiAwOwotCi0JdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIGRldiwgTlVMTCwgbm91dmVhdV92Z2Ffc2V0X2RlY29kZSk7Ci0KLQkvKiBJbml0aWFsaXNlIGludGVybmFsIGRyaXZlciBBUEkgaG9va3MgKi8KLQlyZXQgPSBub3V2ZWF1X2luaXRfZW5naW5lX3B0cnMoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOwotCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRkFJTEVEOwotCi0JLyogUGFyc2UgQklPUyB0YWJsZXMgLyBSdW4gaW5pdCB0YWJsZXMgaWYgY2FyZCBub3QgUE9TVGVkICovCi0JaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJcmV0ID0gbm91dmVhdV9iaW9zX2luaXQoZGV2KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gbm91dmVhdV9ncHVvYmpfZWFybHlfaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBJbml0aWFsaXNlIGluc3RhbmNlIG1lbW9yeSwgbXVzdCBoYXBwZW4gYmVmb3JlIG1lbV9pbml0IHNvIHdlCi0JICoga25vdyBleGFjdGx5IGhvdyBtdWNoIFZSQU0gd2UncmUgYWJsZSB0byB1c2UgZm9yICJub3JtYWwiCi0JICogcHVycG9zZXMuCi0JICovCi0JcmV0ID0gZW5naW5lLT5pbnN0bWVtLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogU2V0dXAgdGhlIG1lbW9yeSBtYW5hZ2VyICovCi0JcmV0ID0gbm91dmVhdV9tZW1faW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBNQyAqLwotCXJldCA9IGVuZ2luZS0+bWMuaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBQVElNRVIgKi8KLQlyZXQgPSBlbmdpbmUtPnRpbWVyLmluaXQoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogUEZCICovCi0JcmV0ID0gZW5naW5lLT5mYi5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBHUkFQSCAqLwotCXJldCA9IGVuZ2luZS0+Z3JhcGguaW5pdChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBQRklGTyAqLwotCXJldCA9IGVuZ2luZS0+Zmlmby5pbml0KGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHRoaXMgY2FsbCBpcnFfcHJlaW5zdGFsbCwgcmVnaXN0ZXIgaXJxIGhhbmRsZXIgYW5kCi0JICogY2FsbCBpcnFfcG9zdGluc3RhbGwKLQkgKi8KLQlyZXQgPSBkcm1faXJxX2luc3RhbGwoZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgMCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHdoYXQgYWJvdXQgUFZJREVPL1BDUlRDL1BSQU1EQUMgZXRjPyAqLwotCiAJcmV0ID0gbm91dmVhdV9jaGFubmVsX2FsbG9jKGRldiwgJmRldl9wcml2LT5jaGFubmVsLAogCQkJCSAgICAoc3RydWN0IGRybV9maWxlICopLTIsCiAJCQkJICAgIE52RG1hRkIsIE52RG1hVFQpOwpAQCAtMzk5LDM5ICszMzYsMTMzIEBACiAJCQkJICAgICBOVl9ETUFfQUNDRVNTX1JXLCBOVl9ETUFfVEFSR0VUX1ZJRE1FTSwKIAkJCQkgICAgICZncHVvYmopOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2VycjsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBkZXZfcHJpdi0+Y2hhbm5lbCwgTnZEbWFWUkFNLAogCQkJCSAgICAgZ3B1b2JqLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCW5vdXZlYXVfZ3B1b2JqX2RlbChkZXYsICZncHVvYmopOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnI7CiAKIAlncHVvYmogPSBOVUxMOwogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2dhcnRfZG1hX25ldyhkZXZfcHJpdi0+Y2hhbm5lbCwgMCwKIAkJCQkJICBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfc2l6ZSwKIAkJCQkJICBOVl9ETUFfQUNDRVNTX1JXLCAmZ3B1b2JqLCBOVUxMKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dF9lcnI7CiAKIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9yZWZfYWRkKGRldiwgZGV2X3ByaXYtPmNoYW5uZWwsIE52RG1hR0FSVCwKIAkJCQkgICAgIGdwdW9iaiwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlub3V2ZWF1X2dwdW9ial9kZWwoZGV2LCAmZ3B1b2JqKTsKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJbm91dmVhdV9ncHVvYmpfZGVsKGRldiwgJmdwdW9iaik7CisJbm91dmVhdV9jaGFubmVsX2ZyZWUoZGV2X3ByaXYtPmNoYW5uZWwpOworCWRldl9wcml2LT5jaGFubmVsID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK25vdXZlYXVfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgKmVuZ2luZTsKKwlpbnQgcmV0OworCisJTlZfREVCVUcoZGV2LCAicHJldiBzdGF0ZSA9ICVkXG4iLCBkZXZfcHJpdi0+aW5pdF9zdGF0ZSk7CisKKwlpZiAoZGV2X3ByaXYtPmluaXRfc3RhdGUgPT0gTk9VVkVBVV9DQVJEX0lOSVRfRE9ORSkKKwkJcmV0dXJuIDA7CisKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKKworCS8qIEluaXRpYWxpc2UgaW50ZXJuYWwgZHJpdmVyIEFQSSBob29rcyAqLworCXJldCA9IG5vdXZlYXVfaW5pdF9lbmdpbmVfcHRycyhkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWVuZ2luZSA9ICZkZXZfcHJpdi0+ZW5naW5lOworCWRldl9wcml2LT5pbml0X3N0YXRlID0gTk9VVkVBVV9DQVJEX0lOSVRfRkFJTEVEOworCisJLyogUGFyc2UgQklPUyB0YWJsZXMgLyBSdW4gaW5pdCB0YWJsZXMgaWYgY2FyZCBub3QgUE9TVGVkICovCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJcmV0ID0gbm91dmVhdV9iaW9zX2luaXQoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2Vhcmx5X2luaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9iaW9zOworCisJLyogSW5pdGlhbGlzZSBpbnN0YW5jZSBtZW1vcnksIG11c3QgaGFwcGVuIGJlZm9yZSBtZW1faW5pdCBzbyB3ZQorCSAqIGtub3cgZXhhY3RseSBob3cgbXVjaCBWUkFNIHdlJ3JlIGFibGUgdG8gdXNlIGZvciAibm9ybWFsIgorCSAqIHB1cnBvc2VzLgorCSAqLworCXJldCA9IGVuZ2luZS0+aW5zdG1lbS5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3B1b2JqX2Vhcmx5OworCisJLyogU2V0dXAgdGhlIG1lbW9yeSBtYW5hZ2VyICovCisJcmV0ID0gbm91dmVhdV9tZW1faW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2luc3RtZW07CisKKwlyZXQgPSBub3V2ZWF1X2dwdW9ial9pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbWVtOworCisJLyogUE1DICovCisJcmV0ID0gZW5naW5lLT5tYy5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3B1b2JqOworCisJLyogUFRJTUVSICovCisJcmV0ID0gZW5naW5lLT50aW1lci5pbml0KGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfbWM7CisKKwkvKiBQRkIgKi8KKwlyZXQgPSBlbmdpbmUtPmZiLmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF90aW1lcjsKKworCS8qIFBHUkFQSCAqLworCXJldCA9IGVuZ2luZS0+Z3JhcGguaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZiOworCisJLyogUEZJRk8gKi8KKwlyZXQgPSBlbmdpbmUtPmZpZm8uaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2dyYXBoOworCisJLyogdGhpcyBjYWxsIGlycV9wcmVpbnN0YWxsLCByZWdpc3RlciBpcnEgaGFuZGxlciBhbmQKKwkgKiBjYWxsIGlycV9wb3N0aW5zdGFsbAorCSAqLworCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZpZm87CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pcnE7CisKKwkvKiB3aGF0IGFib3V0IFBWSURFTy9QQ1JUQy9QUkFNREFDIGV0Yz8gKi8KKworCWlmICghZW5naW5lLT5ncmFwaC5hY2NlbF9ibG9ja2VkKSB7CisJCXJldCA9IG5vdXZlYXVfY2FyZF9pbml0X2NoYW5uZWwoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2lycTsKIAl9CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkKIAkJCXJldCA9IG52NTBfZGlzcGxheV9jcmVhdGUoZGV2KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcmV0ID0gbnYwNF9kaXNwbGF5X2NyZWF0ZShkZXYpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9pcnE7CiAJfQogCiAJcmV0ID0gbm91dmVhdV9iYWNrbGlnaHRfaW5pdChkZXYpOwpAQCAtNDQ0LDYgKzQ3NSwzMiBAQAogCQlkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKGRldik7CiAKIAlyZXR1cm4gMDsKKworb3V0X2lycToKKwlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworb3V0X2ZpZm86CisJZW5naW5lLT5maWZvLnRha2Vkb3duKGRldik7CitvdXRfZ3JhcGg6CisJZW5naW5lLT5ncmFwaC50YWtlZG93bihkZXYpOworb3V0X2ZiOgorCWVuZ2luZS0+ZmIudGFrZWRvd24oZGV2KTsKK291dF90aW1lcjoKKwllbmdpbmUtPnRpbWVyLnRha2Vkb3duKGRldik7CitvdXRfbWM6CisJZW5naW5lLT5tYy50YWtlZG93bihkZXYpOworb3V0X2dwdW9iajoKKwlub3V2ZWF1X2dwdW9ial90YWtlZG93bihkZXYpOworb3V0X21lbToKKwlub3V2ZWF1X21lbV9jbG9zZShkZXYpOworb3V0X2luc3RtZW06CisJZW5naW5lLT5pbnN0bWVtLnRha2Vkb3duKGRldik7CitvdXRfZ3B1b2JqX2Vhcmx5OgorCW5vdXZlYXVfZ3B1b2JqX2xhdGVfdGFrZWRvd24oZGV2KTsKK291dF9iaW9zOgorCW5vdXZlYXVfYmlvc190YWtlZG93bihkZXYpOworb3V0OgorCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBub3V2ZWF1X2NhcmRfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTU4NSw3ICs2NDIsMTAgQEAKIAkJZGV2X3ByaXYtPmNoaXBzZXQgPSAocmVnMCAmIDB4ZmYwMDAwMCkgPj4gMjA7CiAJLyogTlYwNCBvciBOVjA1ICovCiAJfSBlbHNlIGlmICgocmVnMCAmIDB4ZmYwMGZmZjApID09IDB4MjAwMDQwMDApIHsKLQkJZGV2X3ByaXYtPmNoaXBzZXQgPSAweDA0OworCQlpZiAocmVnMCAmIDB4MDBmMDAwMDApCisJCQlkZXZfcHJpdi0+Y2hpcHNldCA9IDB4MDU7CisJCWVsc2UKKwkJCWRldl9wcml2LT5jaGlwc2V0ID0gMHgwNDsKIAl9IGVsc2UKIAkJZGV2X3ByaXYtPmNoaXBzZXQgPSAweGZmOwogCkBAIC02NjUsOCArNzI1LDggQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IgZGV2X3ByaXYgbWF5IG5vdCBiZSBiZSBhbGxvY2F0ZWQgeWV0ICovCi0JaWYgKGRldl9wcml2ICYmIGRldl9wcml2LT5jYXJkX3R5cGUpCisJLyogSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IgZGV2X3ByaXYgbWF5IG5vdCBiZSBhbGxvY2F0ZWQgeWV0ICovCisJaWYgKGRldl9wcml2KQogCQlub3V2ZWF1X2NhcmRfdGFrZWRvd24oZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdHRtLmMKaW5kZXggMTg3ZWI4NC4uYzM4NWQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3R0bS5jCkBAIC0yOCw0NSArMjgsMTcgQEAKIAogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgbm91dmVhdV90dG1fdm1fb3BzOwotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wczsKLQotc3RhdGljIGludAotbm91dmVhdV90dG1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQotewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGJvID09IE5VTEwpKQotCQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwotCi0JcmV0ID0gdHRtX3ZtX29wcy0+ZmF1bHQodm1hLCB2bWYpOwotCXJldHVybiByZXQ7Ci19Ci0KIGludAogbm91dmVhdV90dG1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0KIAkJZmlsZV9wcml2LT5taW5vci0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KHZtYS0+dm1fcGdvZmYgPCBEUk1fRklMRV9QQUdFX09GRlNFVCkpCiAJCXJldHVybiBkcm1fbW1hcChmaWxwLCB2bWEpOwogCi0JcmV0ID0gdHRtX2JvX21tYXAoZmlscCwgdm1hLCAmZGV2X3ByaXYtPnR0bS5iZGV2KTsKLQlpZiAodW5saWtlbHkocmV0ICE9IDApKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHVubGlrZWx5KHR0bV92bV9vcHMgPT0gTlVMTCkpIHsKLQkJdHRtX3ZtX29wcyA9IHZtYS0+dm1fb3BzOwotCQlub3V2ZWF1X3R0bV92bV9vcHMgPSAqdHRtX3ZtX29wczsKLQkJbm91dmVhdV90dG1fdm1fb3BzLmZhdWx0ID0gJm5vdXZlYXVfdHRtX2ZhdWx0OwotCX0KLQotCXZtYS0+dm1fb3BzID0gJm5vdXZlYXVfdHRtX3ZtX29wczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdHRtX2JvX21tYXAoZmlscCwgdm1hLCAmZGV2X3ByaXYtPnR0bS5iZGV2KTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwppbmRleCBiOTEzNjM2Li5kMmYxNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwpAQCAtMTQzLDEwICsxNDMsMTAgQEAKIAlzdGF0ZS0+cGxsc2VsIHw9IG52X2NydGMtPmluZGV4ID8gUExMU0VMX1ZQTEwyX01BU0sgOiBQTExTRUxfVlBMTDFfTUFTSzsKIAogCWlmIChwdi0+Tk0yKQotCQlOVl9UUkFDRShkZXYsICJ2cGxsOiBuMSAlZCBuMiAlZCBtMSAlZCBtMiAlZCBsb2cycCAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgInZwbGw6IG4xICVkIG4yICVkIG0xICVkIG0yICVkIGxvZzJwICVkXG4iLAogCQkJIHB2LT5OMSwgcHYtPk4yLCBwdi0+TTEsIHB2LT5NMiwgcHYtPmxvZzJQKTsKIAllbHNlCi0JCU5WX1RSQUNFKGRldiwgInZwbGw6IG4gJWQgbSAlZCBsb2cycCAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgInZwbGw6IG4gJWQgbSAlZCBsb2cycCAlZFxuIiwKIAkJCSBwdi0+TjEsIHB2LT5NMSwgcHYtPmxvZzJQKTsKIAogCW52X2NydGMtPmN1cnNvci5zZXRfb2Zmc2V0KG52X2NydGMsIG52X2NydGMtPmN1cnNvci5vZmZzZXQpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJdW5zaWduZWQgY2hhciBzZXExID0gMCwgY3J0YzE3ID0gMDsKIAl1bnNpZ25lZCBjaGFyIGNydGMxQTsKIAotCU5WX1RSQUNFKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIENSVEMgJWRcbiIsIG1vZGUsCisJTlZfREVCVUdfS01TKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIENSVEMgJWRcbiIsIG1vZGUsCiAJCQkJCQkJbnZfY3J0Yy0+aW5kZXgpOwogCiAJaWYgKG52X2NydGMtPmxhc3RfZHBtcyA9PSBtb2RlKSAvKiBEb24ndCBkbyB1bm5lY2VzYXJ5IG1vZGUgY2hhbmdlcy4gKi8KQEAgLTYwMyw3ICs2MDMsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBub3V2ZWF1X2NydGMoY3J0Yyk7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCU5WX0RFQlVHKGRldiwgIkNUUkMgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJDVFJDIG1vZGUgb24gQ1JUQyAlZDpcbiIsIG52X2NydGMtPmluZGV4KTsKIAlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkanVzdGVkX21vZGUpOwogCiAJLyogdW5sb2NrIG11c3QgY29tZSBhZnRlciB0dXJuaW5nIG9mZiBGUF9UR19DT05UUk9MIGluIG91dHB1dF9wcmVwYXJlICovCkBAIC03MDMsNyArNzAzLDcgQEAKIHsKIAlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpudl9jcnRjID0gbm91dmVhdV9jcnRjKGNydGMpOwogCi0JTlZfREVCVUcoY3J0Yy0+ZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoY3J0Yy0+ZGV2LCAiXG4iKTsKIAogCWlmICghbnZfY3J0YykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKaW5kZXggYTVmYTUxNy4uZDBlMDM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCkBAIC0yMDUsMjMgKzIwNSwyMiBAQAogCU5WV3JpdGVWZ2FTZXEoZGV2LCAwLCBOVl9WSU9fU1JfQ0xPQ0tfSU5ERVgsIHNhdmVkX3NlcTEpOwogCiAJaWYgKGJsdWUgPT0gMHgxOCkgewotCQlOVl9UUkFDRShkZXYsICJMb2FkIGRldGVjdGVkIG9uIGhlYWQgQVxuIik7CisJCU5WX0lORk8oZGV2LCAiTG9hZCBkZXRlY3RlZCBvbiBoZWFkIEFcbiIpOwogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJfQogCiAJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogfQogCi1lbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIG52MTdfZGFjX2RldGVjdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3VpbnQzMl90IG52MTdfZGFjX3NhbXBsZV9sb2FkKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRjYl9lbnRyeSAqZGNiID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5kY2I7Ci0JdWludDMyX3QgdGVzdHZhbCwgcmVnb2Zmc2V0ID0gbnYwNF9kYWNfb3V0cHV0X29mZnNldChlbmNvZGVyKTsKKwl1aW50MzJfdCBzYW1wbGUsIHRlc3R2YWwsIHJlZ29mZnNldCA9IG52MDRfZGFjX291dHB1dF9vZmZzZXQoZW5jb2Rlcik7CiAJdWludDMyX3Qgc2F2ZWRfcG93ZXJjdHJsXzIgPSAwLCBzYXZlZF9wb3dlcmN0cmxfNCA9IDAsIHNhdmVkX3JvdXRwdXQsCiAJCXNhdmVkX3J0ZXN0X2N0cmwsIHNhdmVkX2dwaW8wLCBzYXZlZF9ncGlvMSwgdGVtcCwgcm91dHB1dDsKLQlpbnQgaGVhZCwgcHJlc2VudCA9IDA7CisJaW50IGhlYWQ7CiAKICNkZWZpbmUgUkdCX1RFU1RfREFUQShyLCBnLCBiKSAociA8PCAwIHwgZyA8PCAxMCB8IGIgPDwgMjApCiAJaWYgKGRjYi0+dHlwZSA9PSBPVVRQVVRfVFYpIHsKQEAgLTI4NywxMyArMjg2LDcgQEAKIAkJICAgICAgdGVtcCB8IE5WX1BSQU1EQUNfVEVTVF9DT05UUk9MX1RQX0lOU19FTl9BU1NFUlRFRCk7CiAJbXNsZWVwKDUpOwogCi0JdGVtcCA9IE5WUmVhZFJBTURBQyhkZXYsIDAsIE5WX1BSQU1EQUNfVEVTVF9DT05UUk9MICsgcmVnb2Zmc2V0KTsKLQotCWlmIChkY2ItPnR5cGUgPT0gT1VUUFVUX1RWKQotCQlwcmVzZW50ID0gKG52MTdfdHZfZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3RvciwgdGVtcCkKLQkJCSAgID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKTsKLQllbHNlCi0JCXByZXNlbnQgPSB0ZW1wICYgTlZfUFJBTURBQ19URVNUX0NPTlRST0xfU0VOU0VCX0FMTEhJOworCXNhbXBsZSA9IE5WUmVhZFJBTURBQyhkZXYsIDAsIE5WX1BSQU1EQUNfVEVTVF9DT05UUk9MICsgcmVnb2Zmc2V0KTsKIAogCXRlbXAgPSBOVlJlYWRSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX1RFU1RfQ09OVFJPTCk7CiAJTlZXcml0ZVJBTURBQyhkZXYsIGhlYWQsIE5WX1BSQU1EQUNfVEVTVF9DT05UUk9MLApAQCAtMzEwLDE0ICszMDMsMjQgQEAKIAludjE3X2dwaW9fc2V0KGRldiwgRENCX0dQSU9fVFZEQUMxLCBzYXZlZF9ncGlvMSk7CiAJbnYxN19ncGlvX3NldChkZXYsIERDQl9HUElPX1RWREFDMCwgc2F2ZWRfZ3BpbzApOwogCi0JaWYgKHByZXNlbnQpIHsKLQkJTlZfSU5GTyhkZXYsICJMb2FkIGRldGVjdGVkIG9uIG91dHB1dCAlY1xuIiwgJ0AnICsgZmZzKGRjYi0+b3IpKTsKLQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCX0KLQotCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwlyZXR1cm4gc2FtcGxlOwogfQogCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cworbnYxN19kYWNfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkY2JfZW50cnkgKmRjYiA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKS0+ZGNiOworCXVpbnQzMl90IHNhbXBsZSA9IG52MTdfZGFjX3NhbXBsZV9sb2FkKGVuY29kZXIpOworCisJaWYgKHNhbXBsZSAmIE5WX1BSQU1EQUNfVEVTVF9DT05UUk9MX1NFTlNFQl9BTExISSkgeworCQlOVl9JTkZPKGRldiwgIkxvYWQgZGV0ZWN0ZWQgb24gb3V0cHV0ICVjXG4iLAorCQkJJ0AnICsgZmZzKGRjYi0+b3IpKTsKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCX0gZWxzZSB7CisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwl9Cit9CiAKIHN0YXRpYyBib29sIG52MDRfZGFjX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLApAQCAtMzUwLDE0ICszNTMsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0Jc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfVFJBQ0UoZGV2LCAiJXMgY2FsbGVkIGZvciBlbmNvZGVyICVkXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgbnZfZW5jb2Rlci0+ZGNiLT5pbmRleCk7Ci0KIAlpZiAobnZfZ2Y0X2Rpc3BfYXJjaChkZXYpKSB7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqcmViaW5kOwogCQl1aW50MzJfdCBkYWNfb2Zmc2V0ID0gbnYwNF9kYWNfb3V0cHV0X29mZnNldChlbmNvZGVyKTsKQEAgLTQ2Niw3ICs0NjUsNyBAQAogewogCXN0cnVjdCBub3V2ZWF1X2VuY29kZXIgKm52X2VuY29kZXIgPSBub3V2ZWF1X2VuY29kZXIoZW5jb2Rlcik7CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlrZnJlZShudl9lbmNvZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCmluZGV4IGU1YjMzMzMuLjQ4M2Y4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm91dHB1dF9tb2RlID0gJm52X2VuY29kZXItPm1vZGU7CiAJdWludDMyX3QgbW9kZV9yYXRpbywgcGFuZWxfcmF0aW87CiAKLQlOVl9ERUJVRyhkZXYsICJPdXRwdXQgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJPdXRwdXQgbW9kZSBvbiBDUlRDICVkOlxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUob3V0cHV0X21vZGUpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgRlAgcmVnaXN0ZXJzIGluIHRoaXMgQ1JUQy4gKi8KQEAgLTQxMyw3ICs0MTMsOSBAQAogCXN0cnVjdCBkY2JfZW50cnkgKmRjYmUgPSBudl9lbmNvZGVyLT5kY2I7CiAJaW50IGhlYWQgPSBub3V2ZWF1X2NydGMoZW5jb2Rlci0+Y3J0YyktPmluZGV4OwogCi0JTlZfVFJBQ0UoZGV2LCAiJXMgY2FsbGVkIGZvciBlbmNvZGVyICVkXG4iLCBfX2Z1bmNfXywgbnZfZW5jb2Rlci0+ZGNiLT5pbmRleCk7CisJTlZfSU5GTyhkZXYsICJPdXRwdXQgJXMgaXMgcnVubmluZyBvbiBDUlRDICVkIHVzaW5nIG91dHB1dCAlY1xuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZSgmbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2RlciktPmJhc2UpLAorCQludl9jcnRjLT5pbmRleCwgJ0AnICsgZmZzKG52X2VuY29kZXItPmRjYi0+b3IpKTsKIAogCWlmIChkY2JlLT50eXBlID09IE9VVFBVVF9UTURTKQogCQlydW5fdG1kc190YWJsZShkZXYsIGRjYmUsIGhlYWQsIG52X2VuY29kZXItPm1vZGUuY2xvY2spOwpAQCAtNTUwLDcgKzU1Miw3IEBACiB7CiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwppbmRleCBiNDdjNzU3Li5lZjc3MjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwpAQCAtOTksMTAgKzk5LDExIEBACiAJdWludDE2X3QgY29ubmVjdG9yWzE2XSA9IHsgMCB9OwogCWludCBpLCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKG52X3R3b19oZWFkcyhkZXYpKQogCQludjA0X2Rpc3BsYXlfc3RvcmVfaW5pdGlhbF9oZWFkX293bmVyKGRldik7CisJbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDEpOwogCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKIAlkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3Byb3BlcnR5KGRldik7CkBAIC0yMDMsOCArMjA0LDYgQEAKIAkvKiBTYXZlIHByZXZpb3VzIHN0YXRlICovCiAJTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7CiAKLQlub3V2ZWF1X2h3X3NhdmVfdmdhX2ZvbnRzKGRldiwgMSk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKIAkJY3J0Yy0+ZnVuY3MtPnNhdmUoY3J0Yyk7CiAKQEAgLTIyMyw3ICsyMjIsNyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJLyogVHVybiBldmVyeSBDUlRDIG9mZi4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewpAQCAtMjQ2LDkgKzI0NSw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCiAJCWNydGMtPmZ1bmNzLT5yZXN0b3JlKGNydGMpOwogCi0Jbm91dmVhdV9od19zYXZlX3ZnYV9mb250cyhkZXYsIDApOwotCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKKworCW5vdXZlYXVfaHdfc2F2ZV92Z2FfZm9udHMoZGV2LCAwKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jCmluZGV4IDA5YTMxMDcuLmQ5MTA4NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZiY29uLmMKQEAgLTM5LDggKzM5LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgJiYgUklOR19TUEFDRShjaGFuLCA0KSkgewotCQlOVl9FUlJPUihkZXYsICJHUFUgbG9ja3VwIC0gc3dpdGNoaW5nIHRvIHNvZnR3YXJlIGZiY29uXG4iKTsKLQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CisJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKIAl9CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgewpAQCAtNjIsMTQgKzYxLDEyIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBhci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGRldl9wcml2LT5jaGFubmVsOwotCXVpbnQzMl90IGNvbG9yID0gKCh1aW50MzJfdCAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdOwogCiAJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQogCQlyZXR1cm47CiAKIAlpZiAoIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSAmJiBSSU5HX1NQQUNFKGNoYW4sIDcpKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkdQVSBsb2NrdXAgLSBzd2l0Y2hpbmcgdG8gc29mdHdhcmUgZmJjb25cbiIpOwotCQlpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKwkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwogCX0KIAogCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7CkBAIC04MCw3ICs3NywxMSBAQAogCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJHZGlSZWN0LCAweDAyZmMsIDEpOwogCU9VVF9SSU5HKGNoYW4sIChyZWN0LT5yb3AgIT0gUk9QX0NPUFkpID8gMSA6IDMpOwogCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJHZGlSZWN0LCAweDAzZmMsIDEpOwotCU9VVF9SSU5HKGNoYW4sIGNvbG9yKTsKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SIHx8CisJICAgIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SKQorCQlPVVRfUklORyhjaGFuLCAoKHVpbnQzMl90ICopaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlY3QtPmNvbG9yXSk7CisJZWxzZQorCQlPVVRfUklORyhjaGFuLCByZWN0LT5jb2xvcik7CiAJQkVHSU5fUklORyhjaGFuLCBOdlN1YkdkaVJlY3QsIDB4MDQwMCwgMik7CiAJT1VUX1JJTkcoY2hhbiwgKHJlY3QtPmR4IDw8IDE2KSB8IHJlY3QtPmR5KTsKIAlPVVRfUklORyhjaGFuLCAocmVjdC0+d2lkdGggPDwgMTYpIHwgcmVjdC0+aGVpZ2h0KTsKQEAgLTEwOSw4ICsxMTAsNyBAQAogCX0KIAogCWlmICghKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpICYmIFJJTkdfU1BBQ0UoY2hhbiwgOCkpIHsKLQkJTlZfRVJST1IoZGV2LCAiR1BVIGxvY2t1cCAtIHN3aXRjaGluZyB0byBzb2Z0d2FyZSBmYmNvblxuIik7Ci0JCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7CiAJfQogCiAJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKQEAgLTE0NCw4ICsxNDQsNyBAQAogCQlpbnQgaXRlcl9sZW4gPSBkc2l6ZSA+IDEyOCA/IDEyOCA6IGRzaXplOwogCiAJCWlmIChSSU5HX1NQQUNFKGNoYW4sIGl0ZXJfbGVuICsgMSkpIHsKLQkJCU5WX0VSUk9SKGRldiwgIkdQVSBsb2NrdXAgLSBzd2l0Y2hpbmcgdG8gc29mdHdhcmUgZmJjb25cbiIpOwotCQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CisJCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7CiAJCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTg0LDYgKzE4Myw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBhci0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiA9IGRldl9wcml2LT5jaGFubmVsOworCWNvbnN0IGludCBzdWIgPSBOdlN1YkN0eFN1cmYyRDsKIAlpbnQgc3VyZmFjZV9mbXQsIHBhdHRlcm5fZm10LCByZWN0X2ZtdDsKIAlpbnQgcmV0OwogCkBAIC0yNDIsMzAgKzI0MiwyOSBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKFJJTkdfU1BBQ0UoY2hhbiwgNDkpKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkdQVSBsb2NrdXAgLSBzd2l0Y2hpbmcgdG8gc29mdHdhcmUgZmJjb25cbiIpOwotCQlpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKwkJbm91dmVhdV9mYmNvbl9ncHVfbG9ja3VwKGluZm8pOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlCRUdJTl9SSU5HKGNoYW4sIDEsIDB4MDAwMCwgMSk7CisJQkVHSU5fUklORyhjaGFuLCBzdWIsIDB4MDAwMCwgMSk7CiAJT1VUX1JJTkcoY2hhbiwgTnZDdHhTdXJmMkQpOwotCUJFR0lOX1JJTkcoY2hhbiwgMSwgMHgwMTg0LCAyKTsKKwlCRUdJTl9SSU5HKGNoYW4sIHN1YiwgMHgwMTg0LCAyKTsKIAlPVVRfUklORyhjaGFuLCBOdkRtYUZCKTsKIAlPVVRfUklORyhjaGFuLCBOdkRtYUZCKTsKLQlCRUdJTl9SSU5HKGNoYW4sIDEsIDB4MDMwMCwgNCk7CisJQkVHSU5fUklORyhjaGFuLCBzdWIsIDB4MDMwMCwgNCk7CiAJT1VUX1JJTkcoY2hhbiwgc3VyZmFjZV9mbXQpOwogCU9VVF9SSU5HKGNoYW4sIGluZm8tPmZpeC5saW5lX2xlbmd0aCB8IChpbmZvLT5maXgubGluZV9sZW5ndGggPDwgMTYpKTsKIAlPVVRfUklORyhjaGFuLCBpbmZvLT5maXguc21lbV9zdGFydCAtIGRldi0+bW9kZV9jb25maWcuZmJfYmFzZSk7CiAJT1VUX1JJTkcoY2hhbiwgaW5mby0+Zml4LnNtZW1fc3RhcnQgLSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2UpOwogCi0JQkVHSU5fUklORyhjaGFuLCAxLCAweDAwMDAsIDEpOworCUJFR0lOX1JJTkcoY2hhbiwgc3ViLCAweDAwMDAsIDEpOwogCU9VVF9SSU5HKGNoYW4sIE52Um9wKTsKLQlCRUdJTl9SSU5HKGNoYW4sIDEsIDB4MDMwMCwgMSk7CisJQkVHSU5fUklORyhjaGFuLCBzdWIsIDB4MDMwMCwgMSk7CiAJT1VUX1JJTkcoY2hhbiwgMHg1NSk7CiAKLQlCRUdJTl9SSU5HKGNoYW4sIDEsIDB4MDAwMCwgMSk7CisJQkVHSU5fUklORyhjaGFuLCBzdWIsIDB4MDAwMCwgMSk7CiAJT1VUX1JJTkcoY2hhbiwgTnZJbWFnZVBhdHQpOwotCUJFR0lOX1JJTkcoY2hhbiwgMSwgMHgwMzAwLCA4KTsKKwlCRUdJTl9SSU5HKGNoYW4sIHN1YiwgMHgwMzAwLCA4KTsKIAlPVVRfUklORyhjaGFuLCBwYXR0ZXJuX2ZtdCk7CiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJT1VUX1JJTkcoY2hhbiwgMik7CkBAIC0yNzksOSArMjc4LDkgQEAKIAlPVVRfUklORyhjaGFuLCB+MCk7CiAJT1VUX1JJTkcoY2hhbiwgfjApOwogCi0JQkVHSU5fUklORyhjaGFuLCAxLCAweDAwMDAsIDEpOworCUJFR0lOX1JJTkcoY2hhbiwgc3ViLCAweDAwMDAsIDEpOwogCU9VVF9SSU5HKGNoYW4sIE52Q2xpcFJlY3QpOwotCUJFR0lOX1JJTkcoY2hhbiwgMSwgMHgwMzAwLCAyKTsKKwlCRUdJTl9SSU5HKGNoYW4sIHN1YiwgMHgwMzAwLCAyKTsKIAlPVVRfUklORyhjaGFuLCAwKTsKIAlPVVRfUklORyhjaGFuLCAoaW5mby0+dmFyLnlyZXNfdmlydHVhbCA8PCAxNikgfCBpbmZvLT52YXIueHJlc192aXJ0dWFsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZpZm8uYwppbmRleCAwYzNjZDUzLi5mMzEzNDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZpZm8uYwpAQCAtNzEsNiArNzEsNDAgQEAKIAlyZXR1cm4gKHJlYXNzaWduID09IDEpOwogfQogCitib29sCitudjA0X2ZpZm9fY2FjaGVfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3RpbWVyX2VuZ2luZSAqcHRpbWVyID0gJmRldl9wcml2LT5lbmdpbmUudGltZXI7CisJdWludDY0X3Qgc3RhcnQgPSBwdGltZXItPnJlYWQoZGV2KTsKKworCWRvIHsKKwkJaWYgKG52X3JkMzIoZGV2LCBOVjAzX1BGSUZPX0NBQ0hFMV9HRVQpID09CisJCSAgICBudl9yZDMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVUKSkKKwkJCXJldHVybiB0cnVlOworCisJfSB3aGlsZSAocHRpbWVyLT5yZWFkKGRldikgLSBzdGFydCA8IDEwMDAwMDAwMCk7CisKKwlOVl9FUlJPUihkZXYsICJUaW1lb3V0IGZsdXNoaW5nIHRoZSBQRklGTyBjYWNoZS5cbiIpOworCisJcmV0dXJuIGZhbHNlOworfQorCitib29sCitudjA0X2ZpZm9fY2FjaGVfcHVsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwl1aW50MzJfdCBwdWxsID0gbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX1BVTEwwKTsKKworCWlmIChlbmFibGUpIHsKKwkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX1BVTEwwLCBwdWxsIHwgMSk7CisJfSBlbHNlIHsKKwkJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fQ0FDSEUxX1BVTEwwLCBwdWxsICYgfjEpOworCQludl93cjMyKGRldiwgTlYwNF9QRklGT19DQUNIRTFfSEFTSCwgMCk7CisJfQorCisJcmV0dXJuICEhKHB1bGwgJiAxKTsKK30KKwogaW50CiBudjA0X2ZpZm9fY2hhbm5lbF9pZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9ncmFwaC5jCmluZGV4IDM5NmVlOTIuLmUyNjA5ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2dyYXBoLmMKQEAgLTI4LDYgKzI4LDEwIEBACiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKIAogc3RhdGljIHVpbnQzMl90IG52MDRfZ3JhcGhfY3R4X3JlZ3NbXSA9IHsKKwkweDAwNDAwNTNjLAorCTB4MDA0MDA1NDQsCisJMHgwMDQwMDU0MCwKKwkweDAwNDAwNTQ4LAogCU5WMDRfUEdSQVBIX0NUWF9TV0lUQ0gxLAogCU5WMDRfUEdSQVBIX0NUWF9TV0lUQ0gyLAogCU5WMDRfUEdSQVBIX0NUWF9TV0lUQ0gzLApAQCAtMTAyLDY5ICsxMDYsNjkgQEAKIAlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SMCwKIAlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SMSwKIAlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MDAsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDAxLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgwMiwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MDMsCiAJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDA0LAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgwNSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MDYsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDA3LAogCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgwOCwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MDksCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDBBLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgwQiwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MEMsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDBELAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgwRSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MEYsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDBjLAogCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgxMCwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MTEsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDEyLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgxMywKIAlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MTQsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDE1LAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgxNiwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MTcsCiAJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDE4LAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgxOSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MUEsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDFCLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgxQywKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MUQsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDFFLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgxRiwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MWMsCiAJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDIwLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgyMSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MjIsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDIzLAogCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgyNCwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MjUsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDI2LAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgyNywKIAlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MjgsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDI5LAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgyQSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MkIsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDJDLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgyRCwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MkUsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDJGLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgyYywKIAlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MzAsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDMxLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgzMiwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MzMsCiAJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDM0LAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgzNSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MzYsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDM3LAogCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgzOCwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4MzksCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDNBLAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgzQiwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4M0MsCi0JTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDNELAotCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHgzRSwKLQlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4M0YsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDNjLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg0MCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4NDQsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDQ4LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg0YywKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4NTAsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDU0LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg1OCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4NWMsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDYwLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg2NCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4NjgsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDZjLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg3MCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4NzQsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDc4LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg3YywKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4ODAsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDg0LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg4OCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4OGMsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDkwLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHg5NCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4OTgsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweDljLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhhMCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4YTQsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGE4LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhhYywKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4YjAsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGI0LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhiOCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4YmMsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGMwLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhjNCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4YzgsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGNjLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhkMCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4ZDQsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGQ4LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhkYywKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4ZTAsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGU0LAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhlOCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4ZWMsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGYwLAorCU5WMDRfUEdSQVBIX1BBVFRfQ09MT1JSQU0rMHhmNCwKKwlOVjA0X1BHUkFQSF9QQVRUX0NPTE9SUkFNKzB4ZjgsCisJTlYwNF9QR1JBUEhfUEFUVF9DT0xPUlJBTSsweGZjLAogCU5WMDRfUEdSQVBIX1BBVFRFUk4sCiAJMHgwMDQwMDgwYywKIAlOVjA0X1BHUkFQSF9QQVRURVJOX1NIQVBFLApAQCAtMjQ3LDE0ICsyNTEsNiBAQAogCTB4MDA0MDA0ZjgsCiAJMHgwMDQwMDQ3YywKIAkweDAwNDAwNGZjLAotCTB4MDA0MDA1M2MsCi0JMHgwMDQwMDU0NCwKLQkweDAwNDAwNTQwLAotCTB4MDA0MDA1NDgsCi0JMHgwMDQwMDU2MCwKLQkweDAwNDAwNTY4LAotCTB4MDA0MDA1NjQsCi0JMHgwMDQwMDU2YywKIAkweDAwNDAwNTM0LAogCTB4MDA0MDA1MzgsCiAJMHgwMDQwMDUxNCwKQEAgLTM0MSw5ICszMzcsOCBAQAogCTB4MDA0MDA1MDAsCiAJMHgwMDQwMDUwNCwKIAlOVjA0X1BHUkFQSF9WQUxJRDEsCi0JTlYwNF9QR1JBUEhfVkFMSUQyCi0KLQorCU5WMDRfUEdSQVBIX1ZBTElEMiwKKwlOVjA0X1BHUkFQSF9ERUJVR18zCiB9OwogCiBzdHJ1Y3QgZ3JhcGhfc3RhdGUgewpAQCAtMzg4LDYgKzM4MywxOCBAQAogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCB0cnVlKTsKIH0KIAorc3RhdGljIHVpbnQzMl90ICpjdHhfcmVnKHN0cnVjdCBncmFwaF9zdGF0ZSAqY3R4LCB1aW50MzJfdCByZWcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShudjA0X2dyYXBoX2N0eF9yZWdzKTsgaSsrKSB7CisJCWlmIChudjA0X2dyYXBoX2N0eF9yZWdzW2ldID09IHJlZykKKwkJCXJldHVybiAmY3R4LT5udjA0W2ldOworCX0KKworCXJldHVybiBOVUxMOworfQorCiBpbnQgbnYwNF9ncmFwaF9jcmVhdGVfY29udGV4dChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBncmFwaF9zdGF0ZSAqcGdyYXBoX2N0eDsKQEAgLTM5OCwxNSArNDA1LDggQEAKIAlpZiAocGdyYXBoX2N0eCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIGRldl9wcml2LT5maWZvc1tjaGFubmVsXS5wZ3JhcGhfY3R4X3VzZXIgPSBjaGFubmVsIDw8IDI0OyAqLwotCXBncmFwaF9jdHgtPm52MDRbMF0gPSAweDAwMDFmZmZmOwotCS8qIGlzIGl0IHJlYWxseSBuZWVkZWQgPz8/ICovCi0jaWYgMAotCWRldl9wcml2LT5maWZvc1tjaGFubmVsXS5wZ3JhcGhfY3R4WzFdID0KLQkJCQkJbnZfcmQzMihkZXYsIE5WX1BHUkFQSF9ERUJVR180KTsKLQlkZXZfcHJpdi0+Zmlmb3NbY2hhbm5lbF0ucGdyYXBoX2N0eFsyXSA9Ci0JCQkJCW52X3JkMzIoZGV2LCAweDAwNDAwNmIwKTsKLSNlbmRpZgorCSpjdHhfcmVnKHBncmFwaF9jdHgsIE5WMDRfUEdSQVBIX0RFQlVHXzMpID0gMHhmYWQ0ZmYzMTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MjksOSArNDI5LDEzIEBACiAJCW52X3dyMzIoZGV2LCBudjA0X2dyYXBoX2N0eF9yZWdzW2ldLCBwZ3JhcGhfY3R4LT5udjA0W2ldKTsKIAogCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfQ09OVFJPTCwgMHgxMDAxMDEwMCk7Ci0JbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9VU0VSLCBjaGFuLT5pZCA8PCAyNCk7CisKKwl0bXAgID0gbnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9VU0VSKSAmIDB4MDBmZmZmZmY7CisJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9VU0VSLCB0bXAgfCBjaGFuLT5pZCA8PCAyNCk7CisKIAl0bXAgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfRkZJTlRGQ19TVDIpOwogCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9GRklOVEZDX1NUMiwgdG1wICYgMHgwMDBmZmZmZik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk0LDcgKzQ5OCw3IEBACiAJbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX1NUQVRFICAgICAgICAsIDB4RkZGRkZGRkYpOwogCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfQ09OVFJPTCAgLCAweDEwMDAwMTAwKTsKIAl0bXAgID0gbnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9VU0VSKSAmIDB4MDBmZmZmZmY7Ci0JdG1wIHw9IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscyA8PCAyNDsKKwl0bXAgfD0gKGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscyAtIDEpIDw8IDI0OwogCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfVVNFUiwgdG1wKTsKIAogCS8qIFRoZXNlIGRvbid0IGJlbG9uZyBoZXJlLCB0aGV5J3JlIHBhcnQgb2YgYSBwZXItY2hhbm5lbCBjb250ZXh0ICovCkBAIC01MzMsNyArNTM3LDcgQEAKIAkJCSAgICAgIGludCBtdGhkLCB1aW50MzJfdCBkYXRhKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7Ci0JdWludDMyX3QgaW5zdGFuY2UgPSBudl9yZDMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX1NXSVRDSDQpICYgMHhmZmZmOworCXVpbnQzMl90IGluc3RhbmNlID0gKG52X3JkMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfU1dJVENINCkgJiAweGZmZmYpIDw8IDQ7CiAJaW50IHN1YmMgPSAobnZfcmQzMihkZXYsIE5WMDRfUEdSQVBIX1RSQVBQRURfQUREUikgPj4gMTMpICYgMHg3OwogCXVpbnQzMl90IHRtcDsKIApAQCAtNTQzLDExICs1NDcsMTEgQEAKIAogCW52X3dpMzIoZGV2LCBpbnN0YW5jZSwgdG1wKTsKIAludl93cjMyKGRldiwgTlYwNF9QR1JBUEhfQ1RYX1NXSVRDSDEsIHRtcCk7Ci0JbnZfd3IzMihkZXYsIE5WMDRfUEdSQVBIX0NUWF9DQUNIRTEgKyBzdWJjLCB0bXApOworCW52X3dyMzIoZGV2LCBOVjA0X1BHUkFQSF9DVFhfQ0FDSEUxICsgKHN1YmM8PDIpLCB0bXApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9tZXRob2QgbnYwNF9ncmFwaF9tdGhkc19tMm1mW10gPSB7CitzdGF0aWMgc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9tZXRob2QgbnYwNF9ncmFwaF9tdGhkc19zd1tdID0gewogCXsgMHgwMTUwLCBudjA0X2dyYXBoX210aGRfc2V0X3JlZiB9LAogCXt9CiB9OwpAQCAtNTU4LDcgKzU2Miw3IEBACiB9OwogCiBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X2NsYXNzIG52MDRfZ3JhcGhfZ3JjbGFzc1tdID0gewotCXsgMHgwMDM5LCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19tMm1mIH0sCisJeyAweDAwMzksIGZhbHNlLCBOVUxMIH0sCiAJeyAweDAwNGEsIGZhbHNlLCBudjA0X2dyYXBoX210aGRzX3NldF9vcGVyYXRpb24gfSwgLyogZ2RpcmVjdCAqLwogCXsgMHgwMDVmLCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19zZXRfb3BlcmF0aW9uIH0sIC8qIGltYWdlYmxpdCAqLwogCXsgMHgwMDYxLCBmYWxzZSwgbnYwNF9ncmFwaF9tdGhkc19zZXRfb3BlcmF0aW9uIH0sIC8qIGlmYyAqLwpAQCAtNTc0LDYgKzU3OCw3IEBACiAJeyAweDAwNTMsIGZhbHNlLCBOVUxMIH0sIC8qIHN1cmYzZCAqLwogCXsgMHgwMDU0LCBmYWxzZSwgTlVMTCB9LCAvKiB0ZXhfdHJpICovCiAJeyAweDAwNTUsIGZhbHNlLCBOVUxMIH0sIC8qIG11bHRpdGV4X3RyaSAqLworCXsgMHg1MDZlLCB0cnVlLCBudjA0X2dyYXBoX210aGRzX3N3IH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZmIuYwppbmRleCA3OWUyZDEwLi5jYzVjZGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9mYi5jCkBAIC0zLDE3ICszLDM3IEBACiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogCit2b2lkCitudjEwX2ZiX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGxpbWl0ID0gbWF4KDF1LCBhZGRyICsgc2l6ZSkgLSAxOworCisJaWYgKHBpdGNoKSB7CisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzIwKQorCQkJYWRkciB8PSAxOworCQllbHNlCisJCQlhZGRyIHw9IDEgPDwgMzE7CisJfQorCisJbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RMSU1JVChpKSwgbGltaXQpOworCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9UU0laRShpKSwgcGl0Y2gpOworCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9USUxFKGkpLCBhZGRyKTsKK30KKwogaW50CiBudjEwX2ZiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQl1aW50MzJfdCBmYl9iYXJfc2l6ZTsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X2ZiX2VuZ2luZSAqcGZiID0gJmRldl9wcml2LT5lbmdpbmUuZmI7CiAJaW50IGk7CiAKLQlmYl9iYXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMCkgLSAxOwotCWZvciAoaSA9IDA7IGkgPCBOVjEwX1BGQl9USUxFX19TSVpFOyBpKyspIHsKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEZCX1RJTEUoaSksIDApOwotCQludl93cjMyKGRldiwgTlYxMF9QRkJfVExJTUlUKGkpLCBmYl9iYXJfc2l6ZSk7Ci0JfQorCXBmYi0+bnVtX3RpbGVzID0gTlYxMF9QRkJfVElMRV9fU0laRTsKKworCS8qIFR1cm4gYWxsIHRoZSB0aWxpbmcgcmVnaW9ucyBvZmYuICovCisJZm9yIChpID0gMDsgaSA8IHBmYi0+bnVtX3RpbGVzOyBpKyspCisJCXBmYi0+c2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxMF9ncmFwaC5jCmluZGV4IDZiZjY4MDQuLmZjZjJjZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTBfZ3JhcGguYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjEwX2dyYXBoLmMKQEAgLTM4OSw0OSArMzg5LDUwIEBACiAJaW50IG52MTBbQVJSQVlfU0laRShudjEwX2dyYXBoX2N0eF9yZWdzKV07CiAJaW50IG52MTdbQVJSQVlfU0laRShudjE3X2dyYXBoX2N0eF9yZWdzKV07CiAJc3RydWN0IHBpcGVfc3RhdGUgcGlwZV9zdGF0ZTsKKwl1aW50MzJfdCBsbWFfd2luZG93WzRdOwogfTsKIAorI2RlZmluZSBQSVBFX1NBVkUoZGV2LCBzdGF0ZSwgYWRkcikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBfX2k7CQkJCQkJXAorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCBhZGRyKTsJCVwKKwkJZm9yIChfX2kgPSAwOyBfX2kgPCBBUlJBWV9TSVpFKHN0YXRlKTsgX19pKyspCQlcCisJCQlzdGF0ZVtfX2ldID0gbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFBJUEVfUkVTVE9SRShkZXYsIHN0YXRlLCBhZGRyKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaW50IF9faTsJCQkJCQlcCisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIGFkZHIpOwkJXAorCQlmb3IgKF9faSA9IDA7IF9faSA8IEFSUkFZX1NJWkUoc3RhdGUpOyBfX2krKykJCVwKKwkJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIHN0YXRlW19faV0pOyBcCisJfSB3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgbnYxMF9ncmFwaF9zYXZlX3BpcGUoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBncmFwaF9zdGF0ZSAqcGdyYXBoX2N0eCA9IGNoYW4tPnBncmFwaF9jdHg7Ci0Jc3RydWN0IHBpcGVfc3RhdGUgKmZpZm9fcGlwZV9zdGF0ZSA9ICZwZ3JhcGhfY3R4LT5waXBlX3N0YXRlOwotCWludCBpOwotI2RlZmluZSBQSVBFX1NBVkUoYWRkcikgXAotCWRvIHsgXAotCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCBhZGRyKTsgXAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWZvX3BpcGVfc3RhdGUtPnBpcGVfIyNhZGRyKTsgaSsrKSBcCi0JCQlmaWZvX3BpcGVfc3RhdGUtPnBpcGVfIyNhZGRyW2ldID0gbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSk7IFwKLQl9IHdoaWxlICgwKQorCXN0cnVjdCBwaXBlX3N0YXRlICpwaXBlID0gJnBncmFwaF9jdHgtPnBpcGVfc3RhdGU7CiAKLQlQSVBFX1NBVkUoMHg0NDAwKTsKLQlQSVBFX1NBVkUoMHgwMjAwKTsKLQlQSVBFX1NBVkUoMHg2NDAwKTsKLQlQSVBFX1NBVkUoMHg2ODAwKTsKLQlQSVBFX1NBVkUoMHg2YzAwKTsKLQlQSVBFX1NBVkUoMHg3MDAwKTsKLQlQSVBFX1NBVkUoMHg3NDAwKTsKLQlQSVBFX1NBVkUoMHg3ODAwKTsKLQlQSVBFX1NBVkUoMHgwMDQwKTsKLQlQSVBFX1NBVkUoMHgwMDAwKTsKLQotI3VuZGVmIFBJUEVfU0FWRQorCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg0NDAwLCAweDQ0MDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHgwMjAwLCAweDAyMDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg2NDAwLCAweDY0MDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg2ODAwLCAweDY4MDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg2YzAwLCAweDZjMDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg3MDAwLCAweDcwMDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg3NDAwLCAweDc0MDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHg3ODAwLCAweDc4MDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHgwMDQwLCAweDAwNDApOworCVBJUEVfU0FWRShkZXYsIHBpcGUtPnBpcGVfMHgwMDAwLCAweDAwMDApOwogfQogCiBzdGF0aWMgdm9pZCBudjEwX2dyYXBoX2xvYWRfcGlwZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGdyYXBoX3N0YXRlICpwZ3JhcGhfY3R4ID0gY2hhbi0+cGdyYXBoX2N0eDsKLQlzdHJ1Y3QgcGlwZV9zdGF0ZSAqZmlmb19waXBlX3N0YXRlID0gJnBncmFwaF9jdHgtPnBpcGVfc3RhdGU7Ci0JaW50IGk7CisJc3RydWN0IHBpcGVfc3RhdGUgKnBpcGUgPSAmcGdyYXBoX2N0eC0+cGlwZV9zdGF0ZTsKIAl1aW50MzJfdCB4Zm1vZGUwLCB4Zm1vZGUxOwotI2RlZmluZSBQSVBFX1JFU1RPUkUoYWRkcikgXAotCWRvIHsgXAotCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCBhZGRyKTsgXAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWZvX3BpcGVfc3RhdGUtPnBpcGVfIyNhZGRyKTsgaSsrKSBcCi0JCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCBmaWZvX3BpcGVfc3RhdGUtPnBpcGVfIyNhZGRyW2ldKTsgXAotCX0gd2hpbGUgKDApCi0KKwlpbnQgaTsKIAogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogCS8qIFhYWCBjaGVjayBoYWlrdSBjb21tZW50cyAqLwpAQCAtNDU3LDI0ICs0NTgsMjIgQEAKIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDA4KTsKIAogCi0JUElQRV9SRVNUT1JFKDB4MDIwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDAyMDAsIDB4MDIwMCk7CiAJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CiAKIAkvKiByZXN0b3JlIFhGTU9ERSAqLwogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwLCB4Zm1vZGUwKTsKIAludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSwgeGZtb2RlMSk7Ci0JUElQRV9SRVNUT1JFKDB4NjQwMCk7Ci0JUElQRV9SRVNUT1JFKDB4NjgwMCk7Ci0JUElQRV9SRVNUT1JFKDB4NmMwMCk7Ci0JUElQRV9SRVNUT1JFKDB4NzAwMCk7Ci0JUElQRV9SRVNUT1JFKDB4NzQwMCk7Ci0JUElQRV9SRVNUT1JFKDB4NzgwMCk7Ci0JUElQRV9SRVNUT1JFKDB4NDQwMCk7Ci0JUElQRV9SRVNUT1JFKDB4MDAwMCk7Ci0JUElQRV9SRVNUT1JFKDB4MDA0MCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDY0MDAsIDB4NjQwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDY4MDAsIDB4NjgwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDZjMDAsIDB4NmMwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDcwMDAsIDB4NzAwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDc0MDAsIDB4NzQwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDc4MDAsIDB4NzgwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDQ0MDAsIDB4NDQwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDAwMDAsIDB4MDAwMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDAwNDAsIDB4MDA0MCk7CiAJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7Ci0KLSN1bmRlZiBQSVBFX1JFU1RPUkUKIH0KIAogc3RhdGljIHZvaWQgbnYxMF9ncmFwaF9jcmVhdGVfcGlwZShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuKQpAQCAtODA4LDYgKzgwNywyMCBAQAogCWNoYW4tPnBncmFwaF9jdHggPSBOVUxMOwogfQogCit2b2lkCitudjEwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJICAgICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKK3sKKwl1aW50MzJfdCBsaW1pdCA9IG1heCgxdSwgYWRkciArIHNpemUpIC0gMTsKKworCWlmIChwaXRjaCkKKwkJYWRkciB8PSAxIDw8IDMxOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9UU0laRShpKSwgcGl0Y2gpOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9USUxFKGkpLCBhZGRyKTsKK30KKwogaW50IG52MTBfZ3JhcGhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04MzIsMjEgKzg0NSwxNiBAQAogCQkJCSAgICAgICgxPDwzMSkpOwogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDE3KSB7CiAJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9ERUJVR180LCAweDFmMDAwMDAwKTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwYTEwLCAweDNmZjNmYjYpOworCQludl93cjMyKGRldiwgMHg0MDA4MzgsIDB4MmY4Njg0KTsKKwkJbnZfd3IzMihkZXYsIDB4NDAwODNjLCAweDExNWYzZik7CiAJCW52X3dyMzIoZGV2LCAweDAwNDAwNmIwLCAweDQwMDAwMDIwKTsKIAl9IGVsc2UKIAkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX0RFQlVHXzQsIDB4MDAwMDAwMDApOwogCi0JLyogY29weSB0aWxlIGluZm8gZnJvbSBQRkIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlYxMF9QRkJfVElMRV9fU0laRTsgaSsrKSB7Ci0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9USUxFKGkpLAotCQkJCQludl9yZDMyKGRldiwgTlYxMF9QRkJfVElMRShpKSkpOwotCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfVExJTUlUKGkpLAotCQkJCQludl9yZDMyKGRldiwgTlYxMF9QRkJfVExJTUlUKGkpKSk7Ci0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9UU0laRShpKSwKLQkJCQkJbnZfcmQzMihkZXYsIE5WMTBfUEZCX1RTSVpFKGkpKSk7Ci0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9UU1RBVFVTKGkpLAotCQkJCQludl9yZDMyKGRldiwgTlYxMF9QRkJfVFNUQVRVUyhpKSkpOwotCX0KKwkvKiBUdXJuIGFsbCB0aGUgdGlsaW5nIHJlZ2lvbnMgb2ZmLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVjEwX1BGQl9USUxFX19TSVpFOyBpKyspCisJCW52MTBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKIAogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9DVFhfU1dJVENIMSwgMHgwMDAwMDAwMCk7CiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX0NUWF9TV0lUQ0gyLCAweDAwMDAwMDAwKTsKQEAgLTg2Nyw2ICs4NzUsMTE1IEBACiB7CiB9CiAKK3N0YXRpYyBpbnQKK252MTdfZ3JhcGhfbXRoZF9sbWFfd2luZG93KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAorCQkJICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZ3JhcGhfc3RhdGUgKmN0eCA9IGNoYW4tPnBncmFwaF9jdHg7CisJc3RydWN0IHBpcGVfc3RhdGUgKnBpcGUgPSAmY3R4LT5waXBlX3N0YXRlOworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CisJdWludDMyX3QgcGlwZV8weDAwNDBbMV0sIHBpcGVfMHg2NGMwWzhdLCBwaXBlXzB4NmE4MFszXSwgcGlwZV8weDZhYjBbM107CisJdWludDMyX3QgeGZtb2RlMCwgeGZtb2RlMTsKKwlpbnQgaTsKKworCWN0eC0+bG1hX3dpbmRvd1sobXRoZCAtIDB4MTYzOCkgLyA0XSA9IGRhdGE7CisKKwlpZiAobXRoZCAhPSAweDE2NDQpCisJCXJldHVybiAwOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlQSVBFX1NBVkUoZGV2LCBwaXBlXzB4MDA0MCwgMHgwMDQwKTsKKwlQSVBFX1NBVkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKKworCVBJUEVfUkVTVE9SRShkZXYsIGN0eC0+bG1hX3dpbmRvdywgMHg2NzkwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJeGZtb2RlMCA9IG52X3JkMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwKTsKKwl4Zm1vZGUxID0gbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTEpOworCisJUElQRV9TQVZFKGRldiwgcGlwZS0+cGlwZV8weDQ0MDAsIDB4NDQwMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZV8weDY0YzAsIDB4NjRjMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZV8weDZhYjAsIDB4NmFiMCk7CisJUElQRV9TQVZFKGRldiwgcGlwZV8weDZhODAsIDB4NmE4MCk7CisKKwlub3V2ZWF1X3dhaXRfZm9yX2lkbGUoZGV2KTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9YRk1PREUwLCAweDEwMDAwMDAwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMSwgMHgwMDAwMDAwMCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgMHgwMDAwNjRjMCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgzZjgwMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwMCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDA2YWIwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDNmODAwMDAwKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0FERFJFU1MsIDB4MDAwMDZhODApOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9QSVBFX0RBVEEsIDB4MDAwMDAwMDApOworCisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfQUREUkVTUywgMHgwMDAwMDA0MCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1BJUEVfREFUQSwgMHgwMDAwMDAwOCk7CisKKwlQSVBFX1JFU1RPUkUoZGV2LCBwaXBlLT5waXBlXzB4MDIwMCwgMHgwMjAwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDAwNDAsIDB4MDA0MCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfWEZNT0RFMCwgeGZtb2RlMCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1hGTU9ERTEsIHhmbW9kZTEpOworCisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDY0YzAsIDB4NjRjMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDZhYjAsIDB4NmFiMCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZV8weDZhODAsIDB4NmE4MCk7CisJUElQRV9SRVNUT1JFKGRldiwgcGlwZS0+cGlwZV8weDQ0MDAsIDB4NDQwMCk7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9BRERSRVNTLCAweDAwMDAwMGMwKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUElQRV9EQVRBLCAweDAwMDAwMDAwKTsKKworCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOworCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK252MTdfZ3JhcGhfbXRoZF9sbWFfZW5hYmxlKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBncmNsYXNzLAorCQkJICAgaW50IG10aGQsIHVpbnQzMl90IGRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCisJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfREVCVUdfNCwKKwkJbnZfcmQzMihkZXYsIE5WMTBfUEdSQVBIX0RFQlVHXzQpIHwgMHgxIDw8IDgpOworCW52X3dyMzIoZGV2LCAweDAwNDAwNmIwLAorCQludl9yZDMyKGRldiwgMHgwMDQwMDZiMCkgfCAweDggPDwgMjQpOworCisJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfb2JqZWN0X21ldGhvZCBudjE3X2dyYXBoX2NlbHNpdXNfbXRoZHNbXSA9IHsKKwl7IDB4MTYzOCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTYzYywgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTY0MCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTY0NCwgbnYxN19ncmFwaF9tdGhkX2xtYV93aW5kb3cgfSwKKwl7IDB4MTY1OCwgbnYxN19ncmFwaF9tdGhkX2xtYV9lbmFibGUgfSwKKwl7fQorfTsKKwogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjEwX2dyYXBoX2dyY2xhc3NbXSA9IHsKIAl7IDB4MDAzMCwgZmFsc2UsIE5VTEwgfSwgLyogbnVsbCAqLwogCXsgMHgwMDM5LCBmYWxzZSwgTlVMTCB9LCAvKiBtMm1mICovCkBAIC04ODcsNiArMTAwNCw2IEBACiAJeyAweDAwOTUsIGZhbHNlLCBOVUxMIH0sIC8qIG11bHRpdGV4X3RyaSAqLwogCXsgMHgwMDU2LCBmYWxzZSwgTlVMTCB9LCAvKiBjZWxjaXVzIChudjEwKSAqLwogCXsgMHgwMDk2LCBmYWxzZSwgTlVMTCB9LCAvKiBjZWxjaXVzIChudjExKSAqLwotCXsgMHgwMDk5LCBmYWxzZSwgTlVMTCB9LCAvKiBjZWxjaXVzIChudjE3KSAqLworCXsgMHgwMDk5LCBmYWxzZSwgbnYxN19ncmFwaF9jZWxzaXVzX210aGRzIH0sIC8qIGNlbGNpdXMgKG52MTcpICovCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKaW5kZXggNDZjZmQ5Yy4uNThiOTE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYwpAQCAtMzMsMTMgKzMzLDEwMyBAQAogI2luY2x1ZGUgIm5vdXZlYXVfaHcuaCIKICNpbmNsdWRlICJudjE3X3R2LmgiCiAKLWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgbnYxN190dl9kZXRlY3Qoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJCQkJIHVpbnQzMl90IHBpbl9tYXNrKQorc3RhdGljIHVpbnQzMl90IG52NDJfdHZfc2FtcGxlX2xvYWQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewotCXN0cnVjdCBudjE3X3R2X2VuY29kZXIgKnR2X2VuYyA9IHRvX3R2X2VuYyhlbmNvZGVyKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgdGVzdHZhbCwgcmVnb2Zmc2V0ID0gbnYwNF9kYWNfb3V0cHV0X29mZnNldChlbmNvZGVyKTsKKwl1aW50MzJfdCBncGlvMCwgZ3BpbzEsIGZwX2h0b3RhbCwgZnBfaHN5bmNfc3RhcnQsIGZwX2hzeW5jX2VuZCwKKwkJZnBfY29udHJvbCwgdGVzdF9jdHJsLCBkYWNjbGssIGN0dl8xNCwgY3R2XzFjLCBjdHZfNmM7CisJdWludDMyX3Qgc2FtcGxlID0gMDsKKwlpbnQgaGVhZDsKIAotCXR2X2VuYy0+cGluX21hc2sgPSBwaW5fbWFzayA+PiAyOCAmIDB4ZTsKKyNkZWZpbmUgUkdCX1RFU1RfREFUQShyLCBnLCBiKSAociA8PCAwIHwgZyA8PCAxMCB8IGIgPDwgMjApCisJdGVzdHZhbCA9IFJHQl9URVNUX0RBVEEoMHg4MiwgMHhlYiwgMHg4Mik7CisJaWYgKGRldl9wcml2LT52Ymlvcy0+dHZkYWN0ZXN0dmFsKQorCQl0ZXN0dmFsID0gZGV2X3ByaXYtPnZiaW9zLT50dmRhY3Rlc3R2YWw7CisKKwlkYWNjbGsgPSBOVlJlYWRSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX0RBQ0NMSyArIHJlZ29mZnNldCk7CisJaGVhZCA9IChkYWNjbGsgJiAweDEwMCkgPj4gODsKKworCS8qIFNhdmUgdGhlIHByZXZpb3VzIHN0YXRlLiAqLworCWdwaW8xID0gbnYxN19ncGlvX2dldChkZXYsIERDQl9HUElPX1RWREFDMSk7CisJZ3BpbzAgPSBudjE3X2dwaW9fZ2V0KGRldiwgRENCX0dQSU9fVFZEQUMwKTsKKwlmcF9odG90YWwgPSBOVlJlYWRSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hUT1RBTCk7CisJZnBfaHN5bmNfc3RhcnQgPSBOVlJlYWRSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hTWU5DX1NUQVJUKTsKKwlmcF9oc3luY19lbmQgPSBOVlJlYWRSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hTWU5DX0VORCk7CisJZnBfY29udHJvbCA9IE5WUmVhZFJBTURBQyhkZXYsIGhlYWQsIE5WX1BSQU1EQUNfRlBfVEdfQ09OVFJPTCk7CisJdGVzdF9jdHJsID0gTlZSZWFkUkFNREFDKGRldiwgMCwgTlZfUFJBTURBQ19URVNUX0NPTlRST0wgKyByZWdvZmZzZXQpOworCWN0dl8xYyA9IE5WUmVhZFJBTURBQyhkZXYsIGhlYWQsIDB4NjgwYzFjKTsKKwljdHZfMTQgPSBOVlJlYWRSQU1EQUMoZGV2LCBoZWFkLCAweDY4MGMxNCk7CisJY3R2XzZjID0gTlZSZWFkUkFNREFDKGRldiwgaGVhZCwgMHg2ODBjNmMpOworCisJLyogUHJlcGFyZSB0aGUgREFDIGZvciBsb2FkIGRldGVjdGlvbi4gICovCisJbnYxN19ncGlvX3NldChkZXYsIERDQl9HUElPX1RWREFDMSwgdHJ1ZSk7CisJbnYxN19ncGlvX3NldChkZXYsIERDQl9HUElPX1RWREFDMCwgdHJ1ZSk7CisKKwlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IVE9UQUwsIDEzNDMpOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hTWU5DX1NUQVJULCAxMDQ3KTsKKwlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IU1lOQ19FTkQsIDExODMpOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX1RHX0NPTlRST0wsCisJCSAgICAgIE5WX1BSQU1EQUNfRlBfVEdfQ09OVFJPTF9ESVNQRU5fUE9TIHwKKwkJICAgICAgTlZfUFJBTURBQ19GUF9UR19DT05UUk9MX1dJRFRIXzEyIHwKKwkJICAgICAgTlZfUFJBTURBQ19GUF9UR19DT05UUk9MX1JFQURfUFJPRyB8CisJCSAgICAgIE5WX1BSQU1EQUNfRlBfVEdfQ09OVFJPTF9IU1lOQ19QT1MgfAorCQkgICAgICBOVl9QUkFNREFDX0ZQX1RHX0NPTlRST0xfVlNZTkNfUE9TKTsKKworCU5WV3JpdGVSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX1RFU1RfQ09OVFJPTCArIHJlZ29mZnNldCwgMCk7CisKKwlOVldyaXRlUkFNREFDKGRldiwgMCwgTlZfUFJBTURBQ19EQUNDTEsgKyByZWdvZmZzZXQsCisJCSAgICAgIChkYWNjbGsgJiB+MHhmZikgfCAweDIyKTsKKwltc2xlZXAoMSk7CisJTlZXcml0ZVJBTURBQyhkZXYsIDAsIE5WX1BSQU1EQUNfREFDQ0xLICsgcmVnb2Zmc2V0LAorCQkgICAgICAoZGFjY2xrICYgfjB4ZmYpIHwgMHgyMSk7CisKKwlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgMHg2ODBjMWMsIDEgPDwgMjApOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCAweDY4MGMxNCwgNCA8PCAxNik7CisKKwkvKiBTYW1wbGUgcGluIDB4NCAodXN1YWxseSBTLXZpZGVvIGx1bWEpLiAqLworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCAweDY4MGM2YywgdGVzdHZhbCA+PiAxMCAmIDB4M2ZmKTsKKwltc2xlZXAoMjApOworCXNhbXBsZSB8PSBOVlJlYWRSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX1RFU1RfQ09OVFJPTCArIHJlZ29mZnNldCkKKwkJJiAweDQgPDwgMjg7CisKKwkvKiBTYW1wbGUgdGhlIHJlbWFpbmluZyBwaW5zLiAqLworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCAweDY4MGM2YywgdGVzdHZhbCAmIDB4M2ZmKTsKKwltc2xlZXAoMjApOworCXNhbXBsZSB8PSBOVlJlYWRSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX1RFU1RfQ09OVFJPTCArIHJlZ29mZnNldCkKKwkJJiAweGEgPDwgMjg7CisKKwkvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZS4gKi8KKwlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgMHg2ODBjMWMsIGN0dl8xYyk7CisJTlZXcml0ZVJBTURBQyhkZXYsIGhlYWQsIDB4NjgwYzE0LCBjdHZfMTQpOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCAweDY4MGM2YywgY3R2XzZjKTsKKwlOVldyaXRlUkFNREFDKGRldiwgMCwgTlZfUFJBTURBQ19EQUNDTEsgKyByZWdvZmZzZXQsIGRhY2Nsayk7CisJTlZXcml0ZVJBTURBQyhkZXYsIDAsIE5WX1BSQU1EQUNfVEVTVF9DT05UUk9MICsgcmVnb2Zmc2V0LCB0ZXN0X2N0cmwpOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX1RHX0NPTlRST0wsIGZwX2NvbnRyb2wpOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hTWU5DX0VORCwgZnBfaHN5bmNfZW5kKTsKKwlOVldyaXRlUkFNREFDKGRldiwgaGVhZCwgTlZfUFJBTURBQ19GUF9IU1lOQ19TVEFSVCwgZnBfaHN5bmNfc3RhcnQpOworCU5WV3JpdGVSQU1EQUMoZGV2LCBoZWFkLCBOVl9QUkFNREFDX0ZQX0hUT1RBTCwgZnBfaHRvdGFsKTsKKwludjE3X2dwaW9fc2V0KGRldiwgRENCX0dQSU9fVFZEQUMxLCBncGlvMSk7CisJbnYxN19ncGlvX3NldChkZXYsIERDQl9HUElPX1RWREFDMCwgZ3BpbzApOworCisJcmV0dXJuIHNhbXBsZTsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK252MTdfdHZfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZiA9ICZkZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBudjE3X3R2X2VuY29kZXIgKnR2X2VuYyA9IHRvX3R2X2VuYyhlbmNvZGVyKTsKKwlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2IgPSB0dl9lbmMtPmJhc2UuZGNiOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDIgfHwKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MykKKwkJdHZfZW5jLT5waW5fbWFzayA9IG52NDJfdHZfc2FtcGxlX2xvYWQoZW5jb2RlcikgPj4gMjggJiAweGU7CisJZWxzZQorCQl0dl9lbmMtPnBpbl9tYXNrID0gbnYxN19kYWNfc2FtcGxlX2xvYWQoZW5jb2RlcikgPj4gMjggJiAweGU7CiAKIAlzd2l0Y2ggKHR2X2VuYy0+cGluX21hc2spIHsKIAljYXNlIDB4MjoKQEAgLTUwLDcgKzE0MCw3IEBACiAJCXR2X2VuYy0+c3ViY29ubmVjdG9yID0gRFJNX01PREVfU1VCQ09OTkVDVE9SX1NWSURFTzsKIAkJYnJlYWs7CiAJY2FzZSAweGU6Ci0JCWlmIChub3V2ZWF1X2VuY29kZXIoZW5jb2RlciktPmRjYi0+dHZjb25mLmhhc19jb21wb25lbnRfb3V0cHV0KQorCQlpZiAoZGNiLT50dmNvbmYuaGFzX2NvbXBvbmVudF9vdXRwdXQpCiAJCQl0dl9lbmMtPnN1YmNvbm5lY3RvciA9IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb25lbnQ7CiAJCWVsc2UKIAkJCXR2X2VuYy0+c3ViY29ubmVjdG9yID0gRFJNX01PREVfU1VCQ09OTkVDVE9SX1NDQVJUOwpAQCAtNjEsMTEgKzE1MSwxNiBAQAogCX0KIAogCWRybV9jb25uZWN0b3JfcHJvcGVydHlfc2V0X3ZhbHVlKGNvbm5lY3RvciwKLQkJCWVuY29kZXItPmRldi0+bW9kZV9jb25maWcudHZfc3ViY29ubmVjdG9yX3Byb3BlcnR5LAotCQkJCQkJCXR2X2VuYy0+c3ViY29ubmVjdG9yKTsKKwkJCQkJIGNvbmYtPnR2X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSwKKwkJCQkJIHR2X2VuYy0+c3ViY29ubmVjdG9yKTsKIAotCXJldHVybiB0dl9lbmMtPnN1YmNvbm5lY3RvciA/IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoKLQkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJaWYgKHR2X2VuYy0+c3ViY29ubmVjdG9yKSB7CisJCU5WX0lORk8oZGV2LCAiTG9hZCBkZXRlY3RlZCBvbiBvdXRwdXQgJWNcbiIsCisJCQknQCcgKyBmZnMoZGNiLT5vcikpOworCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCX0KIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CkBAIC0yMTksNyArMzE0LDcgQEAKIAkJcmV0dXJuOwogCW5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKS0+bGFzdF9kcG1zID0gbW9kZTsKIAotCU5WX1RSQUNFKGRldiwgIlNldHRpbmcgZHBtcyBtb2RlICVkIG9uIFRWIGVuY29kZXIgKG91dHB1dCAlZClcbiIsCisJTlZfSU5GTyhkZXYsICJTZXR0aW5nIGRwbXMgbW9kZSAlZCBvbiBUViBlbmNvZGVyIChvdXRwdXQgJWQpXG4iLAogCQkgbW9kZSwgbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpLT5kY2ItPmluZGV4KTsKIAogCXJlZ3MtPnB0dl8yMDAgJj0gfjE7CkBAIC02MTksNyArNzE0LDcgQEAKIHsKIAlzdHJ1Y3QgbnYxN190dl9lbmNvZGVyICp0dl9lbmMgPSB0b190dl9lbmMoZW5jb2Rlcik7CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIAlrZnJlZSh0dl9lbmMpOwpAQCAtNjMzLDcgKzcyOCw3IEBACiAJLnByZXBhcmUgPSBudjE3X3R2X3ByZXBhcmUsCiAJLmNvbW1pdCA9IG52MTdfdHZfY29tbWl0LAogCS5tb2RlX3NldCA9IG52MTdfdHZfbW9kZV9zZXQsCi0JLmRldGVjdCA9IG52MTdfZGFjX2RldGVjdCwKKwkuZGV0ZWN0ID0gbnYxN190dl9kZXRlY3QsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlX2Z1bmNzIG52MTdfdHZfc2xhdmVfZnVuY3MgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjIwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjIwX2dyYXBoLmMKaW5kZXggMThiYTc0Zi4uZDZmYzBhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYyMF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MjBfZ3JhcGguYwpAQCAtNTE0LDYgKzUxNCwyNyBAQAogCW5vdXZlYXVfd2FpdF9mb3JfaWRsZShkZXYpOwogfQogCit2b2lkCitudjIwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJICAgICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKK3sKKwl1aW50MzJfdCBsaW1pdCA9IG1heCgxdSwgYWRkciArIHNpemUpIC0gMTsKKworCWlmIChwaXRjaCkKKwkJYWRkciB8PSAxOworCisJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOworCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UU0laRShpKSwgcGl0Y2gpOworCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9USUxFKGkpLCBhZGRyKTsKKworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfSU5ERVgsIDB4MDBFQTAwMzAgKyA0ICogaSk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9EQVRBLCBsaW1pdCk7CisJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9JTkRFWCwgMHgwMEVBMDA1MCArIDQgKiBpKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0RBVEEsIHBpdGNoKTsKKwludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0lOREVYLCAweDAwRUEwMDEwICsgNCAqIGkpOworCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfREFUQSwgYWRkcik7Cit9CisKIGludAogbnYyMF9ncmFwaF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC01NzIsMjcgKzU5MywxMCBAQAogCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0RBVEEgLCAweDAwMDAwMDMwKTsKIAl9CiAKLQkvKiBjb3B5IHRpbGUgaW5mbyBmcm9tIFBGQiAqLwotCWZvciAoaSA9IDA7IGkgPCBOVjEwX1BGQl9USUxFX19TSVpFOyBpKyspIHsKLQkJbnZfd3IzMihkZXYsIDB4MDA0MDA5MDQgKyBpICogMHgxMCwKLQkJCQkJbnZfcmQzMihkZXYsIE5WMTBfUEZCX1RMSU1JVChpKSkpOwotCQkJLyogd2hpY2ggaXMgTlY0MF9QR1JBUEhfVExJTUlUMChpKSA/PyAqLwotCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0lOREVYLCAweDAwRUEwMDMwICsgaSAqIDQpOwotCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0RBVEEsCi0JCQkJCW52X3JkMzIoZGV2LCBOVjEwX1BGQl9UTElNSVQoaSkpKTsKLQkJbnZfd3IzMihkZXYsIDB4MDA0MDA5MDggKyBpICogMHgxMCwKLQkJCQkJbnZfcmQzMihkZXYsIE5WMTBfUEZCX1RTSVpFKGkpKSk7Ci0JCQkvKiB3aGljaCBpcyBOVjQwX1BHUkFQSF9UU0laRTAoaSkgPz8gKi8KLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9JTkRFWCwgMHgwMEVBMDA1MCArIGkgKiA0KTsKLQkJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1JESV9EQVRBLAotCQkJCQludl9yZDMyKGRldiwgTlYxMF9QRkJfVFNJWkUoaSkpKTsKLQkJbnZfd3IzMihkZXYsIDB4MDA0MDA5MDAgKyBpICogMHgxMCwKLQkJCQkJbnZfcmQzMihkZXYsIE5WMTBfUEZCX1RJTEUoaSkpKTsKLQkJCS8qIHdoaWNoIGlzIE5WNDBfUEdSQVBIX1RJTEUwKGkpID8/ICovCi0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfSU5ERVgsIDB4MDBFQTAwMTAgKyBpICogNCk7Ci0JCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9SRElfREFUQSwKLQkJCQkJbnZfcmQzMihkZXYsIE5WMTBfUEZCX1RJTEUoaSkpKTsKLQl9CisJLyogVHVybiBhbGwgdGhlIHRpbGluZyByZWdpb25zIG9mZi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlYxMF9QRkJfVElMRV9fU0laRTsgaSsrKQorCQludjIwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKGRldiwgaSwgMCwgMCwgMCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCW52X3dyMzIoZGV2LCAweDQwMDk4MCArIGkgKiA0LCBudl9yZDMyKGRldiwgMHgxMDAzMDAgKyBpICogNCkpOwogCQludl93cjMyKGRldiwgTlYxMF9QR1JBUEhfUkRJX0lOREVYLCAweDAwRUEwMDkwICsgaSAqIDQpOwpAQCAtNzA0LDE4ICs3MDgsOSBAQAogCiAJbnZfd3IzMihkZXYsIDB4NDAwMGMwLCAweDAwMDAwMDE2KTsKIAotCS8qIGNvcHkgdGlsZSBpbmZvIGZyb20gUEZCICovCi0JZm9yIChpID0gMDsgaSA8IE5WMTBfUEZCX1RJTEVfX1NJWkU7IGkrKykgewotCQludl93cjMyKGRldiwgMHgwMDQwMDkwNCArIGkgKiAweDEwLAotCQkJCQludl9yZDMyKGRldiwgTlYxMF9QRkJfVExJTUlUKGkpKSk7Ci0JCQkvKiB3aGljaCBpcyBOVjQwX1BHUkFQSF9UTElNSVQwKGkpID8/ICovCi0JCW52X3dyMzIoZGV2LCAweDAwNDAwOTA4ICsgaSAqIDB4MTAsCi0JCQkJCW52X3JkMzIoZGV2LCBOVjEwX1BGQl9UU0laRShpKSkpOwotCQkJLyogd2hpY2ggaXMgTlY0MF9QR1JBUEhfVFNJWkUwKGkpID8/ICovCi0JCW52X3dyMzIoZGV2LCAweDAwNDAwOTAwICsgaSAqIDB4MTAsCi0JCQkJCW52X3JkMzIoZGV2LCBOVjEwX1BGQl9USUxFKGkpKSk7Ci0JCQkvKiB3aGljaCBpcyBOVjQwX1BHUkFQSF9USUxFMChpKSA/PyAqLwotCX0KKwkvKiBUdXJuIGFsbCB0aGUgdGlsaW5nIHJlZ2lvbnMgb2ZmLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVjEwX1BGQl9USUxFX19TSVpFOyBpKyspCisJCW52MjBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKIAogCW52X3dyMzIoZGV2LCBOVjEwX1BHUkFQSF9DVFhfQ09OVFJPTCwgMHgxMDAwMDEwMCk7CiAJbnZfd3IzMihkZXYsIE5WMTBfUEdSQVBIX1NUQVRFICAgICAgLCAweEZGRkZGRkZGKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZmIuYwppbmRleCBjYTFkMjcxLi4zY2QwN2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9mYi5jCkBAIC0zLDEyICszLDM3IEBACiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgogCit2b2lkCitudjQwX2ZiX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGxpbWl0ID0gbWF4KDF1LCBhZGRyICsgc2l6ZSkgLSAxOworCisJaWYgKHBpdGNoKQorCQlhZGRyIHw9IDE7CisKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDQwOgorCQludl93cjMyKGRldiwgTlYxMF9QRkJfVExJTUlUKGkpLCBsaW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9UU0laRShpKSwgcGl0Y2gpOworCQludl93cjMyKGRldiwgTlYxMF9QRkJfVElMRShpKSwgYWRkcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEZCX1RMSU1JVChpKSwgbGltaXQpOworCQludl93cjMyKGRldiwgTlY0MF9QRkJfVFNJWkUoaSksIHBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEZCX1RJTEUoaSksIGFkZHIpOworCQlicmVhazsKKwl9Cit9CisKIGludAogbnY0MF9mYl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCBmYl9iYXJfc2l6ZSwgdG1wOwotCWludCBudW1fdGlsZXM7CisJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKKwl1aW50MzJfdCB0bXA7CiAJaW50IGk7CiAKIAkvKiBUaGlzIGlzIHN0cmljdGx5IGEgTlY0eCByZWdpc3RlciAoZG9uJ3Qga25vdyBhYm91dCBOVjV4KS4gKi8KQEAgLTIzLDM1ICs0OCwyMyBAQAogCWNhc2UgMHg0NToKIAkJdG1wID0gbnZfcmQzMihkZXYsIE5WMTBfUEZCX0NMT1NFX1BBR0UyKTsKIAkJbnZfd3IzMihkZXYsIE5WMTBfUEZCX0NMT1NFX1BBR0UyLCB0bXAgJiB+KDEgPDwgMTUpKTsKLQkJbnVtX3RpbGVzID0gTlYxMF9QRkJfVElMRV9fU0laRTsKKwkJcGZiLT5udW1fdGlsZXMgPSBOVjEwX1BGQl9USUxFX19TSVpFOwogCQlicmVhazsKIAljYXNlIDB4NDY6IC8qIEc3MiAqLwogCWNhc2UgMHg0NzogLyogRzcwICovCiAJY2FzZSAweDQ5OiAvKiBHNzEgKi8KIAljYXNlIDB4NGI6IC8qIEc3MyAqLwogCWNhc2UgMHg0YzogLyogQzUxIChHN1ggdmVyc2lvbikgKi8KLQkJbnVtX3RpbGVzID0gTlY0MF9QRkJfVElMRV9fU0laRV8xOworCQlwZmItPm51bV90aWxlcyA9IE5WNDBfUEZCX1RJTEVfX1NJWkVfMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbnVtX3RpbGVzID0gTlY0MF9QRkJfVElMRV9fU0laRV8wOworCQlwZmItPm51bV90aWxlcyA9IE5WNDBfUEZCX1RJTEVfX1NJWkVfMDsKIAkJYnJlYWs7CiAJfQogCi0JZmJfYmFyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApIC0gMTsKLQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSAweDQwOgotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3RpbGVzOyBpKyspIHsKLQkJCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9USUxFKGkpLCAwKTsKLQkJCW52X3dyMzIoZGV2LCBOVjEwX1BGQl9UTElNSVQoaSksIGZiX2Jhcl9zaXplKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3RpbGVzOyBpKyspIHsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BGQl9USUxFKGkpLCAwKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BGQl9UTElNSVQoaSksIGZiX2Jhcl9zaXplKTsKLQkJfQotCQlicmVhazsKLQl9CisJLyogVHVybiBhbGwgdGhlIHRpbGluZyByZWdpb25zIG9mZi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGZiLT5udW1fdGlsZXM7IGkrKykKKwkJcGZiLT5zZXRfcmVnaW9uX3RpbGluZyhkZXYsIGksIDAsIDAsIDApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggN2U4NTQ3Yy4uNTNlOGFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjQsMzYgKzI0LDEwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCi0KLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQxLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQxLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQyLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQyLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQzLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQzLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ3LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ3LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ5LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjQ5LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRhLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRhLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRiLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRiLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRjLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRjLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRlLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjRlLmN0eHZhbHMiKTsKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCiAKIHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKgogbnY0MF9ncmFwaF9jaGFubmVsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC04MywyNyArNTcsMzAgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpjdHg7CisJc3RydWN0IG5vdXZlYXVfcGdyYXBoX2VuZ2luZSAqcGdyYXBoID0gJmRldl9wcml2LT5lbmdpbmUuZ3JhcGg7CiAJaW50IHJldDsKIAotCS8qIEFsbG9jYXRlIGEgMTc1S2lCIGJsb2NrIG9mIFBSQU1JTiB0byBzdG9yZSB0aGUgY29udGV4dC4gIFRoaXMKLQkgKiBpcyBtYXNzaXZlIG92ZXJraWxsIGZvciBhIGxvdCBvZiBjaGlwc2V0cywgYnV0IGl0IHNob3VsZCBiZSBzYWZlCi0JICogdW50aWwgd2UncmUgYWJsZSB0byBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseSAod2lsbCBoYXBwZW4gYXQgbW9yZQotCSAqIG9yIGxlc3MgdGhlIHNhbWUgdGltZSB3ZSdyZSBhYmxlIHRvIHdyaXRlIG91ciBvd24gY29udGV4dCBwcm9ncmFtcy4KLQkgKi8KLQlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfcmVmKGRldiwgY2hhbiwgTlVMTCwgMCwgMTc1KjEwMjQsIDE2LAotCQkJCQkgIE5WT0JKX0ZMQUdfWkVST19BTExPQywKLQkJCQkJICAmY2hhbi0+cmFtaW5fZ3JjdHgpOworCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwZ3JhcGgtPmdyY3R4X3NpemUsCisJCQkJICAgICAxNiwgTlZPQkpfRkxBR19aRVJPX0FMTE9DLAorCQkJCSAgICAgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCWN0eCA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CiAKIAkvKiBJbml0aWFsaXNlIGRlZmF1bHQgY29udGV4dCB2YWx1ZXMgKi8KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQludjQwX2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7Ci0JbnZfd28zMihkZXYsIGN0eCwgMCwgY3R4LT5pbV9wcmFtaW4tPnN0YXJ0KTsKLQlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOworCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OwogCisJCWN0eC5kZXYgPSBjaGFuLT5kZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9WQUxTOworCQljdHguZGF0YSA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CisJCW52NDBfZ3JjdHhfaW5pdCgmY3R4KTsKKwl9IGVsc2UgeworCQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmopOworCX0KKwludl93bzMyKGRldiwgY2hhbi0+cmFtaW5fZ3JjdHgtPmdwdW9iaiwgMCwKKwkJICAgICBjaGFuLT5yYW1pbl9ncmN0eC0+Z3B1b2JqLT5pbV9wcmFtaW4tPnN0YXJ0KTsKKwlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQsMTM3ICsxODEsNDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3Qgbm91dmVhdV9jdHhwcm9nIHsKLQl1aW50MzJfdCBzaWduYXR1cmU7Ci0JdWludDhfdCAgdmVyc2lvbjsKLQl1aW50MTZfdCBsZW5ndGg7Ci0JdWludDMyX3QgZGF0YVtdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBub3V2ZWF1X2N0eHZhbHMgewotCXVpbnQzMl90IHNpZ25hdHVyZTsKLQl1aW50OF90ICB2ZXJzaW9uOwotCXVpbnQzMl90IGxlbmd0aDsKLQlzdHJ1Y3QgewotCQl1aW50MzJfdCBvZmZzZXQ7Ci0JCXVpbnQzMl90IHZhbHVlOwotCX0gZGF0YVtdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWludAotbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQljb25zdCBpbnQgY2hpcHNldCA9IGRldl9wcml2LT5jaGlwc2V0OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY29uc3Qgc3RydWN0IG5vdXZlYXVfY3R4cHJvZyAqY3A7Ci0JY29uc3Qgc3RydWN0IG5vdXZlYXVfY3R4dmFscyAqY3Y7Ci0JY2hhciBuYW1lWzMyXTsKLQlpbnQgcmV0LCBpOwotCi0JcGdyYXBoLT5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKLQotCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7Ci0JCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHByb2ciLCBjaGlwc2V0KTsKLQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7Ci0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHByb2cgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcGdyYXBoLT5jdHhwcm9nID0ga21hbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGdyYXBoLT5jdHhwcm9nKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJPT00gY29weWluZyBjdHhwcm9nXG4iKTsKLQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJbWVtY3B5KHBncmFwaC0+Y3R4cHJvZywgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQotCQljcCA9IHBncmFwaC0+Y3R4cHJvZzsKLQkJaWYgKGxlMzJfdG9fY3B1KGNwLT5zaWduYXR1cmUpICE9IDB4NTA0MzU2NGUgfHwKLQkJICAgIGNwLT52ZXJzaW9uICE9IDAgfHwKLQkJICAgIGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA3KSAvIDQpKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJjdHhwcm9nIGludmFsaWRcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCX0KLQotCWlmICghcGdyYXBoLT5jdHh2YWxzKSB7Ci0JCXNwcmludGYobmFtZSwgIm5vdXZlYXUvbnYlMDJ4LmN0eHZhbHMiLCBjaGlwc2V0KTsKLQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG5hbWUsICZkZXYtPnBkZXYtPmRldik7Ci0JCWlmIChyZXQpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk5vIGN0eHZhbHMgZm9yIE5WJTAyeFxuIiwgY2hpcHNldCk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlwZ3JhcGgtPmN0eHZhbHMgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKLQkJCU5WX0VSUk9SKGRldiwgIk9PTSBjb3B5aW5nIGN0eHByb2dcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCW1lbWNweShwZ3JhcGgtPmN0eHZhbHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7Ci0KLQkJY3YgPSAodm9pZCAqKXBncmFwaC0+Y3R4dmFsczsKLQkJaWYgKGxlMzJfdG9fY3B1KGN2LT5zaWduYXR1cmUpICE9IDB4NTY0MzU2NGUgfHwKLQkJICAgIGN2LT52ZXJzaW9uICE9IDAgfHwKLQkJICAgIGxlMzJfdG9fY3B1KGN2LT5sZW5ndGgpICE9ICgoZnctPnNpemUgLSA5KSAvIDgpKSB7Ci0JCQlOVl9FUlJPUihkZXYsICJjdHh2YWxzIGludmFsaWRcbiIpOwotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JCQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCX0KLQotCWNwID0gcGdyYXBoLT5jdHhwcm9nOwotCi0JbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9VQ09ERV9JTkRFWCwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGNwLT5sZW5ndGgpOyBpKyspCi0JCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfREFUQSwKLQkJCWxlMzJfdG9fY3B1KGNwLT5kYXRhW2ldKSk7Ci0KLQlwZ3JhcGgtPmFjY2VsX2Jsb2NrZWQgPSBmYWxzZTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZAotbnY0MF9ncmN0eF9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitudjQwX2dyYXBoX3NldF9yZWdpb25fdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpLCB1aW50MzJfdCBhZGRyLAorCQkJICAgICB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBwaXRjaCkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXVpbnQzMl90IGxpbWl0ID0gbWF4KDF1LCBhZGRyICsgc2l6ZSkgLSAxOwogCi0JaWYgKHBncmFwaC0+Y3R4cHJvZykgewotCQlrZnJlZShwZ3JhcGgtPmN0eHByb2cpOwotCQlwZ3JhcGgtPmN0eHByb2cgPSBOVUxMOworCWlmIChwaXRjaCkKKwkJYWRkciB8PSAxOworCisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NDoKKwljYXNlIDB4NGE6CisJY2FzZSAweDRlOgorCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOworCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgYWRkcik7CisJCWJyZWFrOworCisJY2FzZSAweDQ2OgorCWNhc2UgMHg0NzoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVFNJWkUoaSksIHBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVElMRShpKSwgYWRkcik7CisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU0laRTEoaSksIHBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDEoaSksIGxpbWl0KTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RJTEUxKGkpLCBhZGRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgbGltaXQpOworCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgYWRkcik7CisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU0laRTEoaSksIHBpdGNoKTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDEoaSksIGxpbWl0KTsKKwkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RJTEUxKGkpLCBhZGRyKTsKKwkJYnJlYWs7CiAJfQotCi0JaWYgKHBncmFwaC0+Y3R4dmFscykgewotCQlrZnJlZShwZ3JhcGgtPmN0eHByb2cpOwotCQlwZ3JhcGgtPmN0eHZhbHMgPSBOVUxMOwotCX0KLX0KLQotdm9pZAotbnY0MF9ncmN0eF92YWxzX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpjdHgpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9wZ3JhcGhfZW5naW5lICpwZ3JhcGggPSAmZGV2X3ByaXYtPmVuZ2luZS5ncmFwaDsKLQlzdHJ1Y3Qgbm91dmVhdV9jdHh2YWxzICpjdiA9IHBncmFwaC0+Y3R4dmFsczsKLQlpbnQgaTsKLQotCWlmICghY3YpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdShjdi0+bGVuZ3RoKTsgaSsrKQotCQludl93bzMyKGRldiwgY3R4LCBsZTMyX3RvX2NwdShjdi0+ZGF0YVtpXS5vZmZzZXQpLAotCQkJbGUzMl90b19jcHUoY3YtPmRhdGFbaV0udmFsdWUpKTsKIH0KIAogLyoKQEAgLTM1MSw3ICsyMzcsOCBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9CiAJCShzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0JdWludDMyX3QgdnJhbXN6LCB0bXA7CisJc3RydWN0IG5vdXZlYXVfZmJfZW5naW5lICpwZmIgPSAmZGV2X3ByaXYtPmVuZ2luZS5mYjsKKwl1aW50MzJfdCB2cmFtc3o7CiAJaW50IGksIGo7CiAKIAludl93cjMyKGRldiwgTlYwM19QTUNfRU5BQkxFLCBudl9yZDMyKGRldiwgTlYwM19QTUNfRU5BQkxFKSAmCkBAIC0zNTksNyArMjQ2LDI2IEBACiAJbnZfd3IzMihkZXYsIE5WMDNfUE1DX0VOQUJMRSwgbnZfcmQzMihkZXYsIE5WMDNfUE1DX0VOQUJMRSkgfAogCQkJIE5WX1BNQ19FTkFCTEVfUEdSQVBIKTsKIAotCW52NDBfZ3JjdHhfaW5pdChkZXYpOworCWlmIChub3V2ZWF1X2N0eGZ3KSB7CisJCW5vdXZlYXVfZ3JjdHhfcHJvZ19sb2FkKGRldik7CisJCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguZ3JjdHhfc2l6ZSA9IDE3NSAqIDEwMjQ7CisJfQorCisJaWYgKCFkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmN0eHByb2cpIHsKKwkJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307CisJCXVpbnQzMl90IGNwWzI1Nl07CisKKwkJY3R4LmRldiA9IGRldjsKKwkJY3R4Lm1vZGUgPSBOT1VWRUFVX0dSQ1RYX1BST0c7CisJCWN0eC5kYXRhID0gY3A7CisJCWN0eC5jdHhwcm9nX21heCA9IDI1NjsKKwkJbnY0MF9ncmN0eF9pbml0KCZjdHgpOworCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSBjdHguY3R4dmFsc19wb3MgKiA0OworCisJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9DVFhDVExfVUNPREVfSU5ERVgsIDApOworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LmN0eHByb2dfbGVuOyBpKyspCisJCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0RBVEEsIGNwW2ldKTsKKwl9CiAKIAkvKiBObyBjb250ZXh0IHByZXNlbnQgY3VycmVudGx5ICovCiAJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9DVVIsIDB4MDAwMDAwMDApOwpAQCAtNDI5LDc0ICszMzUsOSBAQAogCW52X3dyMzIoZGV2LCAweDQwMGIzOCwgMHgyZmZmZjgwMCk7CiAJbnZfd3IzMihkZXYsIDB4NDAwYjNjLCAweDAwMDA2MDAwKTsKIAotCS8qIGNvcHkgdGlsZSBpbmZvIGZyb20gUEZCICovCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgMHg0MDogLyogdmFuaWxsYSBOVjQwICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVjEwX1BGQl9USUxFX19TSVpFOyBpKyspIHsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjEwX1BGQl9USUxFKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMChpKSwgdG1wKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjEwX1BGQl9UTElNSVQoaSkpOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDAoaSksIHRtcCk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjEwX1BGQl9UU0laRShpKSk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNJWkUwKGkpLCB0bXApOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjEwX1BGQl9UU1RBVFVTKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU1RBVFVTMChpKSwgdG1wKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU1RBVFVTMShpKSwgdG1wKTsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4NDQ6Ci0JY2FzZSAweDRhOgotCWNhc2UgMHg0ZTogLyogTlY0NC1iYXNlZCBjb3JlcyBkb24ndCBoYXZlIDB4NDA2OTAwPyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTlY0MF9QRkJfVElMRV9fU0laRV8wOyBpKyspIHsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9USUxFKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMChpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9UTElNSVQoaSkpOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDAoaSksIHRtcCk7Ci0JCQl0bXAgPSBudl9yZDMyKGRldiwgTlY0MF9QRkJfVFNJWkUoaSkpOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMChpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9UU1RBVFVTKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU1RBVFVTMChpKSwgdG1wKTsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4NDY6Ci0JY2FzZSAweDQ3OgotCWNhc2UgMHg0OToKLQljYXNlIDB4NGI6IC8qIEc3WC1iYXNlZCBjb3JlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTlY0MF9QRkJfVElMRV9fU0laRV8xOyBpKyspIHsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9USUxFKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9USUxFMChpKSwgdG1wKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9UTElNSVQoaSkpOwotCQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RMSU1JVDAoaSksIHRtcCk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9UU0laRShpKSk7Ci0JCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVFNJWkUwKGkpLCB0bXApOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgdG1wKTsKLQkJCXRtcCA9IG52X3JkMzIoZGV2LCBOVjQwX1BGQl9UU1RBVFVTKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UU1RBVFVTMChpKSwgdG1wKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU1RBVFVTMShpKSwgdG1wKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OiAvKiBldmVyeXRoaW5nIGVsc2UgKi8KLQkJZm9yIChpID0gMDsgaSA8IE5WNDBfUEZCX1RJTEVfX1NJWkVfMDsgaSsrKSB7Ci0JCQl0bXAgPSBudl9yZDMyKGRldiwgTlY0MF9QRkJfVElMRShpKSk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTAoaSksIHRtcCk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTEoaSksIHRtcCk7Ci0JCQl0bXAgPSBudl9yZDMyKGRldiwgTlY0MF9QRkJfVExJTUlUKGkpKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UTElNSVQwKGkpLCB0bXApOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RMSU1JVDEoaSksIHRtcCk7Ci0JCQl0bXAgPSBudl9yZDMyKGRldiwgTlY0MF9QRkJfVFNJWkUoaSkpOwotCQkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMChpKSwgdG1wKTsKLQkJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UU0laRTEoaSksIHRtcCk7Ci0JCQl0bXAgPSBudl9yZDMyKGRldiwgTlY0MF9QRkJfVFNUQVRVUyhpKSk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNUQVRVUzAoaSksIHRtcCk7Ci0JCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNUQVRVUzEoaSksIHRtcCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCS8qIFR1cm4gYWxsIHRoZSB0aWxpbmcgcmVnaW9ucyBvZmYuICovCisJZm9yIChpID0gMDsgaSA8IHBmYi0+bnVtX3RpbGVzOyBpKyspCisJCW52NDBfZ3JhcGhfc2V0X3JlZ2lvbl90aWxpbmcoZGV2LCBpLCAwLCAwLCAwKTsKIAogCS8qIGJlZ2luIFJBTSBjb25maWcgKi8KIAl2cmFtc3ogPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIDApIC0gMTsKQEAgLTUzOSw2ICszODAsNyBAQAogCiB2b2lkIG52NDBfZ3JhcGhfdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKIH0KIAogc3RydWN0IG5vdXZlYXVfcGdyYXBoX29iamVjdF9jbGFzcyBudjQwX2dyYXBoX2dyY2xhc3NbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JjdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWIxMWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmN0eC5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQmVuIFNrZWdncworICovCisKKy8qIE5WSURJQSBjb250ZXh0IHByb2dyYW1zIGhhbmRsZSBhIG51bWJlciBvZiBvdGhlciBjb25kaXRpb25zIHdoaWNoIGFyZQorICogbm90IGltcGxlbWVudGVkIGluIG91ciB2ZXJzaW9ucy4gIEl0J3Mgbm90IGNsZWFyIHdoeSBOVklESUEgY29udGV4dAorICogcHJvZ3JhbXMgaGF2ZSB0aGlzIGNvZGUsIG5vciB3aGV0aGVyIGl0J3Mgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvcgorICogY29ycmVjdCBvcGVyYXRpb24uICBXZSdsbCBpbXBsZW1lbnQgYWRkaXRpb25hbCBoYW5kbGluZyBpZi93aGVuIHdlCisgKiBkaXNjb3ZlciBpdCdzIG5lY2Vzc2FyeS4KKyAqCisgKiAtIE9uIGNvbnRleHQgc2F2ZSwgTlZJRElBIHNldCAweDQwMDMxNCBiaXQgMCB0byAxIGlmIHRoZSAiM0Qgc3RhdGUiCisgKiAgIGZsYWcgaXMgc2V0LCB0aGlzIGdldHMgc2F2ZWQgaW50byB0aGUgY29udGV4dC4KKyAqIC0gT24gY29udGV4dCBzYXZlLCB0aGUgY29udGV4dCBwcm9ncmFtIGZvciBhbGwgY2FyZHMgbG9hZCBuc291cmNlCisgKiAgIGludG8gYSBmbGFnIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgSUxMRUdBTF9NVEhELiAgSWYgaXQncyBzZXQsCisgKiAgIG9wY29kZSAweDYwMDAwZCBpcyBjYWxsZWQgYmVmb3JlIHJlc3VtaW5nIG5vcm1hbCBvcGVyYXRpb24uCisgKiAtIFNvbWUgY29udGV4dCBwcm9ncmFtcyBjaGVjayBtb3JlIGNvbmRpdGlvbnMgdGhhbiB0aGUgYWJvdmUuICBOVjQ0CisgKiAgIGNoZWNrczogKChuc291cmNlICYgMHgwODU3KSB8fCAoMHg0MDA3MTggJiAweDAxMDApIHx8IChpbnRyICYgMHgwMDAxKSkKKyAqICAgYW5kIGNhbGxzIDB4NjAwMDBkIGJlZm9yZSByZXN1bWluZyBub3JtYWwgb3BlcmF0aW9uLgorICogLSBBdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgTlZJRElBJ3MgY29udGV4dCBwcm9ncmFtcywgZmxhZyA5IGlzIGNoZWNrZWQKKyAqICAgYW5kIGlmIHRydWUgMHg4MDAwMDEgaXMgY2FsbGVkIHdpdGggY291bnQ9MCwgcG9zPTAsIHRoZSBmbGFnIGlzIGNsZWFyZWQKKyAqICAgYW5kIHRoZW4gdGhlIGN0eHByb2cgaXMgYWJvcnRlZC4gIEl0IGxvb2tzIGxpa2UgYSBjb21wbGljYXRlZCBOT1AsCisgKiAgIGl0cyBwdXJwb3NlIGlzIHVua25vd24uCisgKiAtIEluIHRoZSBzZWN0aW9uIG9mIGNvZGUgdGhhdCBsb2FkcyB0aGUgcGVyLXZzIHN0YXRlLCBOVklESUEgY2hlY2sKKyAqICAgZmxhZyAxMC4gIElmIGl0J3Mgc2V0LCB0aGV5IG9ubHkgdHJhbnNmZXIgdGhlIHNtYWxsIDB4MzAwIGJ5dGUgYmxvY2sKKyAqICAgb2Ygc3RhdGUgKyB0aGUgc3RhdGUgZm9yIGEgc2luZ2xlIHZzIGFzIG9wcG9zZWQgdG8gdGhlIHN0YXRlIGZvcgorICogICBhbGwgdnMgdW5pdHMuICBJdCBkb2Vzbid0IHNlZW0gbGlrZWx5IHRoYXQgaXQnbGwgb2NjdXIgaW4gbm9ybWFsCisgKiAgIG9wZXJhdGlvbiwgZXNwZWNpYWxseSBzZWVpbmcgYXMgaXQgYXBwZWFycyBOVklESUEgbWF5IGhhdmUgc2NyZXdlZAorICogICB1cCB0aGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgYW5kIGhhdmUgYW4gaW52YWxpZCBpbnN0cnVjdGlvbgorICogICByYXRoZXIgdGhhbiBhIGNwX2xzcihjdHgsIGR3b3Jkc19mb3JfMV92c191bml0KSBpbnN0cnVjdGlvbi4KKyAqIC0gVGhlcmUncyBhIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29udGV4dCBvZmZzZXQgMCAod2hlcmUgd2UgcGxhY2UKKyAqICAgdGhlIFBSQU1JTiBvZmZzZXQgb2YgdGhlIGNvbnRleHQpIGlzIGxvYWRlZCBpbnRvIGVpdGhlciAweDQwODAwMCwKKyAqICAgMHg0MDgwMDQgb3IgMHg0MDgwMDguICBOb3Qgc3VyZSB3aGF0J3MgdXAgdGhlcmUgZWl0aGVyLgorICogLSBUaGUgY3R4cHJvZ3MgZm9yIHNvbWUgY2FyZHMgc2F2ZSAweDQwMGEwMCBhZ2FpbiBkdXJpbmcgdGhlIGNsZWFudXAKKyAqICAgcGF0aCBmb3IgYXV0by1sb2FkY3R4LgorICovCisKKyNkZWZpbmUgQ1BfRkxBR19DTEVBUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1NFVCAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT04gICAgICAgICgoMCAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1dBUF9ESVJFQ1RJT05fTE9BRCAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTl9TQVZFICAgMQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRSAgICAgICAgICAgICAoKDAgKiAzMikgKyA1KQorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQUQgICAgICAgICAgICAgKCgwICogMzIpICsgNikKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX1VTRVJfTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTX0lETEUgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TVEFUVVNfQlVTWSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRSAgICAgICAgICAgICAoKDMgKiAzMikgKyA0KQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfQVVUT19TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQUQgICAgICAgICAgICAgKCgzICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX0FVVE9fTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfVU5LNTQgICAgICAgICAgICAgICAgICgoMyAqIDMyKSArIDYpCisjZGVmaW5lIENQX0ZMQUdfVU5LNTRfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTks1NF9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FMV0FZUyAgICAgICAgICAgICAgICAoKDMgKiAzMikgKyA4KQorI2RlZmluZSBDUF9GTEFHX0FMV0FZU19GQUxTRSAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfQUxXQVlTX1RSVUUgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VTks1NyAgICAgICAgICAgICAgICAgKCgzICogMzIpICsgOSkKKyNkZWZpbmUgQ1BfRkxBR19VTks1N19DTEVBUiAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1VOSzU3X1NFVCAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQ1BfQ1RYICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UICAgICAgICAgICAgIDB4MDAwZmMwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgQ1BfQ1RYX1JFRyAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgQ1BfTE9BRF9TUiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BfTE9BRF9TUl9WQUxVRSAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgQ1BfQlJBICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BfQlJBX0lQICAgICAgICAgICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQ1BfQlJBX0lQX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BfQlJBX0lGX0NMRUFSICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfQlJBX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfV0FJVCAgICAgICAgICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgQ1BfV0FJVF9TRVQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfV0FJVF9GTEFHICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfU0VUICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgQ1BfU0VUXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfU0VUX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfTkVYVF9UT19TV0FQICAgICAgICAgIDB4MDA2MDAwMDcKKyNkZWZpbmUgQ1BfTkVYVF9UT19DVVJSRU5UICAgICAgIDB4MDA2MDAwMDkKKyNkZWZpbmUgQ1BfU0VUX0NPTlRFWFRfUE9JTlRFUiAgIDB4MDA2MDAwMGEKKyNkZWZpbmUgQ1BfRU5EICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMGUKKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19VTkswMSAgICAgIDB4MDA4MDAwMDEgLyogdW5rbm93biAqLworI2RlZmluZSBDUF9MT0FEX01BR0lDX05WNDRUQ0wgICAgMHgwMDgwMDAyOSAvKiBwZXItdnMgc3RhdGUgKDB4NDQ5NykgKi8KKyNkZWZpbmUgQ1BfTE9BRF9NQUdJQ19OVjQwVENMICAgIDB4MDA4MDAwNDEgLyogcGVyLXZzIHN0YXRlICgweDQwOTcpICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCisKKy8qIFRPRE86CisgKiAgLSBnZXQgdnMgY291bnQgZnJvbSAweDE1NDAKKyAqICAtIGRvY3VtZW50IHVuaW1wbGVtZW50ZWQgYml0cyBjb21wYXJlZCB0byBudmlkaWEKKyAqICAgIC0gbnNvdXJjZSBoYW5kbGluZworICogICAgLSBSMCAmIDB4MDIwMCBoYW5kbGluZworICogICAgLSBzaW5nbGUtdnMgaGFuZGxpbmcKKyAqICAgIC0gNDAwMzE0IGJpdCAwCisgKi8KKworc3RhdGljIGludAorbnY0MF9ncmFwaF80MDk3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDYwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAhISgweDBiYWYgJiAoMSA8PCBkZXZfcHJpdi0+Y2hpcHNldCkpOworfQorCitzdGF0aWMgaW50CitudjQwX2dyYXBoX3ZzX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJcmV0dXJuIDg7CisJY2FzZSAweDQwOgorCQlyZXR1cm4gNjsKKwljYXNlIDB4NDE6CisJY2FzZSAweDQyOgorCQlyZXR1cm4gNTsKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ0OgorCWNhc2UgMHg0NjoKKwljYXNlIDB4NGE6CisJCXJldHVybiAzOworCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworCitlbnVtIGNwX2xhYmVsIHsKKwljcF9jaGVja19sb2FkID0gMSwKKwljcF9zZXR1cF9hdXRvX2xvYWQsCisJY3Bfc2V0dXBfbG9hZCwKKwljcF9zZXR1cF9zYXZlLAorCWNwX3N3YXBfc3RhdGUsCisJY3Bfc3dhcF9zdGF0ZTNkXzNfaXNfc2F2ZSwKKwljcF9wcmVwYXJlX2V4aXQsCisJY3BfZXhpdCwKK307CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9nZW5lcmFsKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJY3BfY3R4KGN0eCwgMHg0MDAwYTQsIDEpOworCWdyX2RlZihjdHgsIDB4NDAwMGE0LCAweDAwMDAwMDA4KTsKKwljcF9jdHgoY3R4LCAweDQwMDE0NCwgNTgpOworCWdyX2RlZihjdHgsIDB4NDAwMTQ0LCAweDAwMDAwMDAxKTsKKwljcF9jdHgoY3R4LCAweDQwMDMxNCwgMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDAzMTQsIDB4MDAwMDAwMDApOworCWNwX2N0eChjdHgsIDB4NDAwNDAwLCAxMCk7CisJY3BfY3R4KGN0eCwgMHg0MDA0ODAsIDEwKTsKKwljcF9jdHgoY3R4LCAweDQwMDUwMCwgMTkpOworCWdyX2RlZihjdHgsIDB4NDAwNTE0LCAweDAwMDQwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMDUyNCwgMHg1NTU1NTU1NSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA1MjgsIDB4NTU1NTU1NTUpOworCWdyX2RlZihjdHgsIDB4NDAwNTJjLCAweDU1NTU1NTU1KTsKKwlncl9kZWYoY3R4LCAweDQwMDUzMCwgMHg1NTU1NTU1NSk7CisJY3BfY3R4KGN0eCwgMHg0MDA1NjAsIDYpOworCWdyX2RlZihjdHgsIDB4NDAwNTY4LCAweDAwMDBmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMDU2YywgMHgwMDAwZmZmZik7CisJY3BfY3R4KGN0eCwgMHg0MDA1N2MsIDUpOworCWNwX2N0eChjdHgsIDB4NDAwNzEwLCAzKTsKKwlncl9kZWYoY3R4LCAweDQwMDcxMCwgMHgyMDAxMDAwMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDA3MTQsIDB4MGY3M2VmMDApOworCWNwX2N0eChjdHgsIDB4NDAwNzI0LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwMDcyNCwgMHgwMjAwODgyMSk7CisJY3BfY3R4KGN0eCwgMHg0MDA3NzAsIDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwKSB7CisJCWNwX2N0eChjdHgsIDB4NDAwODE0LCA0KTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4MjgsIDUpOworCQljcF9jdHgoY3R4LCAweDQwMDg0MCwgNSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODUwLCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NTgsIDQpOworCQlncl9kZWYoY3R4LCAweDQwMDg1OCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODVjLCAweDAwMDAwMDQwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NjQsIDB4ODAwMDAwMDApOworCQljcF9jdHgoY3R4LCAweDQwMDg2YywgOSk7CisJCWdyX2RlZihjdHgsIDB4NDAwODZjLCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NzAsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDg3NCwgMHg4MDAwMDAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODc4LCAweDgwMDAwMDAwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODgsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4YywgMHg4MDAwMDAwMCk7CisJCWNwX2N0eChjdHgsIDB4NDAwOWMwLCA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA5Y2MsIDB4ODAwMDAwMDApOworCQlncl9kZWYoY3R4LCAweDQwMDlkYywgMHg4MDAwMDAwMCk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4NDAsIDIwKTsKKwkJaWYgKCFudjQwX2dyYXBoXzQwOTcoY3R4LT5kZXYpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCWdyX2RlZihjdHgsIDB4NDAwODYwICsgKGkgKiA0KSwgMHgwMDAwMDAwMSk7CisJCX0KKwkJZ3JfZGVmKGN0eCwgMHg0MDA4ODAsIDB4MDAwMDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDg4NCwgMHgwMDAwMDA0MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODg4LCAweDAwMDAwMDQwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4OTQsIDExKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4OTQsIDB4MDAwMDAwNDApOworCQlpZiAobnY0MF9ncmFwaF80MDk3KGN0eC0+ZGV2KSkgeworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQlncl9kZWYoY3R4LCAweDQwMDhhMCArIChpICogNCksIDB4ODAwMDAwMDApOworCQl9CisJCWNwX2N0eChjdHgsIDB4NDAwOGUwLCAyKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDA4ZjgsIDIpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0YyB8fAorCQkgICAgKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHg2MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAwOWY4LCAxKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBhMDAsIDczKTsKKwlncl9kZWYoY3R4LCAweDQwMGIwYywgMHgwYjBiMGIwYyk7CisJY3BfY3R4KGN0eCwgMHg0MDEwMDAsIDQpOworCWNwX2N0eChjdHgsIDB4NDA1MDA0LCAxKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAzNDQ4LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDM0NDgsIDB4MDAwMDEwMTApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcF9jdHgoY3R4LCAweDQwMzQ0MCwgMSk7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDQwOgorCQkJZ3JfZGVmKGN0eCwgMHg0MDM0NDAsIDB4MDAwMDAwMTApOworCQkJYnJlYWs7CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDQ2OgorCQljYXNlIDB4NGE6CisJCQlncl9kZWYoY3R4LCAweDQwMzQ0MCwgMHgwMDAwMzAxMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDRjOgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg2NzoKKwkJZGVmYXVsdDoKKwkJCWdyX2RlZihjdHgsIDB4NDAzNDQwLCAweDAwMDAxMDEwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK252NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2Qoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTg4MCwgNTEpOworCQlncl9kZWYoY3R4LCAweDQwMTk0MCwgMHgwMDAwMDEwMCk7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDYgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NyB8fAorCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQ5IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4NGIpIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDE4ODAsIDMyKTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMTg4MCArIChpICogNCksIDB4MDAwMDAxMTEpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0NikKKwkJCWNwX2N0eChjdHgsIDB4NDAxOTAwLCAxNik7CisJCWNwX2N0eChjdHgsIDB4NDAxOTQwLCAzKTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDE5NGMsIDE4KTsKKwlncl9kZWYoY3R4LCAweDQwMTk1NCwgMHgwMDAwMDExMSk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5NTgsIDB4MDAwODAwNjApOworCWdyX2RlZihjdHgsIDB4NDAxOTc0LCAweDAwMDAwMDgwKTsKKwlncl9kZWYoY3R4LCAweDQwMTk3OCwgMHhmZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDE5N2MsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIDB4NDAxOTkwLCAweDQ2NDAwMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMik7CisJCWNwX2N0eChjdHgsIDB4NDAxOWFjLCA1KTsKKwl9IGVsc2UgeworCQljcF9jdHgoY3R4LCAweDQwMTlhMCwgMSk7CisJCWNwX2N0eChjdHgsIDB4NDAxOWI0LCAzKTsKKwl9CisJZ3JfZGVmKGN0eCwgMHg0MDE5YmMsIDB4ZmZmZjAwMDApOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ3OgorCWNhc2UgMHg0OToKKwljYXNlIDB4NGI6CisJCWNwX2N0eChjdHgsIDB4NDAxOWMwLCAxOCk7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDE5YzAgKyAoaSAqIDQpLCAweDg4ODg4ODg4KTsKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAxYTA4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWExMCwgMHgwZmZmMDAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhMTQsIDB4MGZmZjAwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYTFjLCAweDAwMDExMTAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWEyYywgNCk7CisJY3BfY3R4KGN0eCwgMHg0MDFhNDQsIDI2KTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJZ3JfZGVmKGN0eCwgMHg0MDFhNDQgKyAoaSAqIDQpLCAweDA3ZmYwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMWE4YywgMHg0YjdmZmZmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYjgsIDMpOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDAxYWI4LCAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDFhYzAsIDEpOworCX0KKwljcF9jdHgoY3R4LCAweDQwMWFkMCwgOCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZDAsIDB4MzAyMDEwMDApOworCWdyX2RlZihjdHgsIDB4NDAxYWQ0LCAweDcwNjA1MDQwKTsKKwlncl9kZWYoY3R4LCAweDQwMWFkOCwgMHhiOGE4OTg4OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFhZGMsIDB4ZjhlOGQ4YzgpOworCWNwX2N0eChjdHgsIDB4NDAxYjEwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMiA6IDEpOworCWdyX2RlZihjdHgsIDB4NDAxYjEwLCAweDQwMTAwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWIxOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDYgOiA1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIyOCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/CisJCQkgICAgICAweDAwMDAwMDA0IDogMHgwMDAwMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiMzAsIDI1KTsKKwlncl9kZWYoY3R4LCAweDQwMWIzNCwgMHgwMDAwZmZmZik7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNjgsIDB4NDM1MTg1ZDYpOworCWdyX2RlZihjdHgsIDB4NDAxYjZjLCAweDIxNTViNjk5KTsKKwlncl9kZWYoY3R4LCAweDQwMWI3MCwgMHhmZWRjYmE5OCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiNzQsIDB4MDAwMDAwOTgpOworCWdyX2RlZihjdHgsIDB4NDAxYjg0LCAweGZmZmZmZmZmKTsKKwlncl9kZWYoY3R4LCAweDQwMWI4OCwgMHgwMGZmNzAwMCk7CisJZ3JfZGVmKGN0eCwgMHg0MDFiOGMsIDB4MDAwMGZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ0ICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGEgJiYKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0ZSkKKwkJY3BfY3R4KGN0eCwgMHg0MDFiOTQsIDEpOworCWNwX2N0eChjdHgsIDB4NDAxYjk4LCA4KTsKKwlncl9kZWYoY3R4LCAweDQwMWI5YywgMHgwMGZmMDAwMCk7CisJY3BfY3R4KGN0eCwgMHg0MDFiYzAsIDkpOworCWdyX2RlZihjdHgsIDB4NDAxYmUwLCAweDAwZmZmZjAwKTsKKwljcF9jdHgoY3R4LCAweDQwMWMwMCwgMTkyKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeyAvKiBmcmFnbWVudCB0ZXh0dXJlIHVuaXRzICovCisJCWdyX2RlZihjdHgsIDB4NDAxYzQwICsgKGkgKiA0KSwgMHgwMDAxODQ4OCk7CisJCWdyX2RlZihjdHgsIDB4NDAxYzgwICsgKGkgKiA0KSwgMHgwMDAyODIwMik7CisJCWdyX2RlZihjdHgsIDB4NDAxZDAwICsgKGkgKiA0KSwgMHgwMDAwYWFlNCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDQwICsgKGkgKiA0KSwgMHgwMTAxMjAwMCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZDgwICsgKGkgKiA0KSwgMHgwMDA4MDAwOCk7CisJCWdyX2RlZihjdHgsIDB4NDAxZTAwICsgKGkgKiA0KSwgMHgwMDEwMDAwOCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsgLyogdmVydGV4IHRleHR1cmUgdW5pdHMgKi8KKwkJZ3JfZGVmKGN0eCwgMHg0MDFlOTAgKyAoaSAqIDQpLCAweDAwMDFiYzgwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYTAgKyAoaSAqIDQpLCAweDAwMDAwMjAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlYzAgKyAoaSAqIDQpLCAweDAwMDAwMDA4KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDFlZTAgKyAoaSAqIDQpLCAweDAwMDgwMDA4KTsKKwl9CisJY3BfY3R4KGN0eCwgMHg0MDBmNWMsIDMpOworCWdyX2RlZihjdHgsIDB4NDAwZjVjLCAweDAwMDAwMDAyKTsKKwljcF9jdHgoY3R4LCAweDQwMGY4NCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zdGF0ZTNkXzIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwljcF9jdHgoY3R4LCAweDQwMjAwMCwgMSk7CisJY3BfY3R4KGN0eCwgMHg0MDI0MDQsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPyAxIDogMik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMDEpOworCQlicmVhazsKKwljYXNlIDB4NGM6CisJY2FzZSAweDRlOgorCWNhc2UgMHg2NzoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDAwMjApOworCQlicmVhazsKKwljYXNlIDB4NDY6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0MDQsIDB4MDAwMDA0MjEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlncl9kZWYoY3R4LCAweDQwMjQwNCwgMHgwMDAwMDAyMSk7CisJfQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQlncl9kZWYoY3R4LCAweDQwMjQwOCwgMHgwMzBjMzBjMyk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NDoKKwljYXNlIDB4NDY6CisJY2FzZSAweDRhOgorCWNhc2UgMHg0YzoKKwljYXNlIDB4NGU6CisJY2FzZSAweDY3OgorCQljcF9jdHgoY3R4LCAweDQwMjQ0MCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyNDQwLCAweDAwMDExMDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDAyNDgwLCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gOCA6IDkpOworCWdyX2RlZihjdHgsIDB4NDAyNDg4LCAweDNlMDIwMjAwKTsKKwlncl9kZWYoY3R4LCAweDQwMjQ4YywgMHgwMGZmZmZmZik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0MDoKKwkJZ3JfZGVmKGN0eCwgMHg0MDI0OTAsIDB4NjAxMDNmMDApOworCQlicmVhazsKKwljYXNlIDB4NDc6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDQwMTAzZjAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDQxOgorCWNhc2UgMHg0MjoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQlncl9kZWYoY3R4LCAweDQwMjQ5MCwgMHgyMDEwM2YwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdyX2RlZihjdHgsIDB4NDAyNDkwLCAweDBjMTAzZjAwKTsKKwkJYnJlYWs7CisJfQorCWdyX2RlZihjdHgsIDB4NDAyNDljLCBkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDQzID8KKwkJCSAgICAgIDB4MDAwMjAwMDAgOiAweDAwMDQwMDAwKTsKKwljcF9jdHgoY3R4LCAweDQwMjUwMCwgMzEpOworCWdyX2RlZihjdHgsIDB4NDAyNTMwLCAweDAwMDA4MTAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJY3BfY3R4KGN0eCwgMHg0MDI1N2MsIDYpOworCWNwX2N0eChjdHgsIDB4NDAyNTk0LCAxNik7CisJY3BfY3R4KGN0eCwgMHg0MDI4MDAsIDE3KTsKKwlncl9kZWYoY3R4LCAweDQwMjgwMCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NzoKKwljYXNlIDB4NDk6CisJY2FzZSAweDRiOgorCQljcF9jdHgoY3R4LCAweDQwMjg2NCwgMSk7CisJCWdyX2RlZihjdHgsIDB4NDAyODY0LCAweDAwMDAxMDAxKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NzAsIDMpOworCQlncl9kZWYoY3R4LCAweDQwMjg3OCwgMHgwMDAwMDAwMyk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ3KSB7IC8qIGJlbG9uZyBhdCBlbmQhISAqLworCQkJY3BfY3R4KGN0eCwgMHg0MDI5MDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5NDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5ODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDI5YzAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhMDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhNDAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhODAsIDEpOworCQkJY3BfY3R4KGN0eCwgMHg0MDJhYzAsIDEpOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg0MDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDI4NDQsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMjg0NCwgMHgwMDAwMTAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDAyODUwLCAyKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDI4NTQsIDB4MDAwMDAwMDMpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMmMwMCwgNCk7CisJZ3JfZGVmKGN0eCwgMHg0MDJjMDAsIGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDAgPworCQkJICAgICAgMHg4MDgwMDAwMSA6IDB4MDA4ODgwMDEpOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDQwKTsKKwkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQlncl9kZWYoY3R4LCAweDQwMmM0MCArIChpICogNCksIDB4ZmZmZmZmZmYpOworCQljcF9jdHgoY3R4LCAweDQwMzBiOCwgMTMpOworCQlncl9kZWYoY3R4LCAweDQwMzBkYywgMHgwMDAwMDAwNSk7CisJCWdyX2RlZihjdHgsIDB4NDAzMGU4LCAweDAwMDBmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3BfY3R4KGN0eCwgMHg0MDJjMTAsIDQpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCkKKwkJCWNwX2N0eChjdHgsIDB4NDAyYzIwLCAzNik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4NDIpCisJCQljcF9jdHgoY3R4LCAweDQwMmMyMCwgMjQpOworCQllbHNlCisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweDRhKQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDE2KTsKKwkJZWxzZQorCQkJY3BfY3R4KGN0eCwgMHg0MDJjMjAsIDgpOworCQljcF9jdHgoY3R4LCAweDQwMmNiMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDEyIDogMTMpOworCQlncl9kZWYoY3R4LCAweDQwMmNkNCwgMHgwMDAwMDAwNSk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDJjZTAsIDB4MDAwMGZmZmYpOworCQlicmVhazsKKwl9CisKKwljcF9jdHgoY3R4LCAweDQwMzQwMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQxMCwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MCA/IDQgOiAzKTsKKwljcF9jdHgoY3R4LCAweDQwMzQyMCwgbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldikpOworCWZvciAoaSA9IDA7IGkgPCBudjQwX2dyYXBoX3ZzX2NvdW50KGN0eC0+ZGV2KTsgaSsrKQorCQlncl9kZWYoY3R4LCAweDQwMzQyMCArIChpICogNCksIDB4MDAwMDU1NTUpOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDM2MDAsIDEpOworCQlncl9kZWYoY3R4LCAweDQwMzYwMCwgMHgwMDAwMDAwMSk7CisJfQorCWNwX2N0eChjdHgsIDB4NDAzODAwLCAxKTsKKworCWNwX2N0eChjdHgsIDB4NDAzYzE4LCAxKTsKKwlncl9kZWYoY3R4LCAweDQwM2MxOCwgMHgwMDAwMDAwMSk7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwkJY3BfY3R4KGN0eCwgMHg0MDUwMTgsIDEpOworCQlncl9kZWYoY3R4LCAweDQwNTAxOCwgMHgwOGUwMDAwMSk7CisJCWNwX2N0eChjdHgsIDB4NDA1YzI0LCAxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDVjMjQsIDB4MDAwZTMwMDApOworCQlicmVhazsKKwl9CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NGUpCisJCWNwX2N0eChjdHgsIDB4NDA1ODAwLCAxMSk7CisJY3BfY3R4KGN0eCwgMHg0MDcwMDAsIDEpOworfQorCitzdGF0aWMgdm9pZAorbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJaW50IGxlbiA9IG52NDBfZ3JhcGhfNDA5NyhjdHgtPmRldikgPyAweDA2ODQgOiAweDAwODQ7CisKKwljcF9vdXQgKGN0eCwgMHgzMDAwMDApOworCWNwX2xzciAoY3R4LCBsZW4gLSA0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX3N3YXBfc3RhdGUzZF8zX2lzX3NhdmUpOworCWNwX2xzciAoY3R4LCBsZW4pOworCWNwX25hbWUoY3R4LCBjcF9zd2FwX3N0YXRlM2RfM19pc19zYXZlKTsKKwljcF9vdXQgKGN0eCwgMHg4MDAwMDEpOworCisJY3R4LT5jdHh2YWxzX3BvcyArPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkCitudjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iaiA9IGN0eC0+ZGF0YTsKKwlpbnQgdnMsIHZzX25yLCB2c19sZW4sIHZzX25yX2IwLCB2c19ucl9iMSwgYjBfb2Zmc2V0LCBiMV9vZmZzZXQ7CisJaW50IG9mZnNldCwgaTsKKworCXZzX25yICAgID0gbnY0MF9ncmFwaF92c19jb3VudChjdHgtPmRldik7CisJdnNfbnJfYjAgPSAzNjM7CisJdnNfbnJfYjEgPSBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDQwID8gMTI4IDogNjQ7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDApIHsKKwkJYjBfb2Zmc2V0ID0gMHgyMjAwLzQ7IC8qIDMzYTAgKi8KKwkJYjFfb2Zmc2V0ID0gMHg1NWEwLzQ7IC8qIDE1MDAgKi8KKwkJdnNfbGVuID0gMHg2YWEwLzQ7CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NDEgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg0MikgeworCQliMF9vZmZzZXQgPSAweDIyMDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDQ0MDAvNDsgLyogMGIwMCAqLworCQl2c19sZW4gPSAweDRmMDAvNDsKKwl9IGVsc2UgeworCQliMF9vZmZzZXQgPSAweDFkNDAvNDsgLyogMjIwMCAqLworCQliMV9vZmZzZXQgPSAweDNmNDAvNDsgLyogMGIwMCA6IDBhNDAgKi8KKwkJdnNfbGVuID0gbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDRhNDAvNCA6IDB4NDk4MC80OworCX0KKworCWNwX2xzcihjdHgsIHZzX2xlbiAqIHZzX25yICsgMHgzMDAvNCk7CisJY3Bfb3V0KGN0eCwgbnY0MF9ncmFwaF80MDk3KGRldikgPyAweDgwMDA0MSA6IDB4ODAwMDI5KTsKKworCW9mZnNldCA9IGN0eC0+Y3R4dmFsc19wb3M7CisJY3R4LT5jdHh2YWxzX3BvcyArPSAoMHgwMzAwLzQgKyAodnNfbnIgKiB2c19sZW4pKTsKKworCWlmIChjdHgtPm1vZGUgIT0gTk9VVkVBVV9HUkNUWF9WQUxTKQorCQlyZXR1cm47CisKKwlvZmZzZXQgKz0gMHgwMjgwLzQ7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyssIG9mZnNldCArPSAyKQorCQludl93bzMyKGRldiwgb2JqLCBvZmZzZXQsIDB4M2Y4MDAwMDApOworCisJZm9yICh2cyA9IDA7IHZzIDwgdnNfbnI7IHZzKyssIG9mZnNldCArPSB2c19sZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IHZzX25yX2IwICogNjsgaSArPSA2KQorCQkJbnZfd28zMihkZXYsIG9iaiwgb2Zmc2V0ICsgYjBfb2Zmc2V0ICsgaSwgMHgwMDAwMDAwMSk7CisJCWZvciAoaSA9IDA7IGkgPCB2c19ucl9iMSAqIDQ7IGkgKz0gNCkKKwkJCW52X3dvMzIoZGV2LCBvYmosIG9mZnNldCArIGIxX29mZnNldCArIGksIDB4M2Y4MDAwMDApOworCX0KK30KKwordm9pZAorbnY0MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogZGVjaWRlIHdoZXRoZXIgd2UncmUgbG9hZGluZy91bmxvYWRpbmcgdGhlIGNvbnRleHQgKi8KKwljcF9icmEgKGN0eCwgQVVUT19TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKwljcF9icmEgKGN0eCwgVVNFUl9TQVZFLCBQRU5ESU5HLCBjcF9zZXR1cF9zYXZlKTsKKworCWNwX25hbWUoY3R4LCBjcF9jaGVja19sb2FkKTsKKwljcF9icmEgKGN0eCwgQVVUT19MT0FELCBQRU5ESU5HLCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX0xPQUQsIFBFTkRJTkcsIGNwX3NldHVwX2xvYWQpOworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX2V4aXQpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgbG9hZCAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9hdXRvX2xvYWQpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX1NXQVApOworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9sb2FkKTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIExPQUQpOworCWNwX291dCAoY3R4LCAweDAwOTEwODgwKTsgLyogPz8gKi8KKwljcF9vdXQgKGN0eCwgMHgwMDkwMWZmZSk7IC8qID8/ICovCisJY3Bfb3V0IChjdHgsIDB4MDE5NDAwMDApOyAvKiA/PyAqLworCWNwX2xzciAoY3R4LCAweDIwKTsKKwljcF9vdXQgKGN0eCwgMHgwMDYwMDAwYik7IC8qID8/ICovCisJY3Bfd2FpdChjdHgsIFVOSzU3LCBDTEVBUik7CisJY3Bfb3V0IChjdHgsIDB4MDA2MDAwMGMpOyAvKiA/PyAqLworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX3N3YXBfc3RhdGUpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgc2F2ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9zYXZlKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUpOworCisJLyogZ2VuZXJhbCBQR1JBUEggc3RhdGUgKi8KKwljcF9uYW1lKGN0eCwgY3Bfc3dhcF9zdGF0ZSk7CisJY3BfcG9zIChjdHgsIDB4MDAwMjAvNCk7CisJbnY0MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZXJhbChjdHgpOworCWNwX3dhaXQoY3R4LCBTVEFUVVMsIElETEUpOworCisJLyogM0Qgc3RhdGUsIGJsb2NrIDEgKi8KKwljcF9icmEgKGN0eCwgVU5LNTQsIENMRUFSLCBjcF9wcmVwYXJlX2V4aXQpOworCW52NDBfZ3JhcGhfY29uc3RydWN0X3N0YXRlM2QoY3R4KTsKKwljcF93YWl0KGN0eCwgU1RBVFVTLCBJRExFKTsKKworCS8qIDNEIHN0YXRlLCBibG9jayAyICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8yKGN0eCk7CisKKwkvKiBTb21lIG90aGVyIGJsb2NrIG9mICJyYW5kb20iIHN0YXRlICovCisJbnY0MF9ncmFwaF9jb25zdHJ1Y3Rfc3RhdGUzZF8zKGN0eCk7CisKKwkvKiBQZXItdmVydGV4IHNoYWRlciBzdGF0ZSAqLworCWNwX3BvcyAoY3R4LCBjdHgtPmN0eHZhbHNfcG9zKTsKKwludjQwX2dyYXBoX2NvbnN0cnVjdF9zaGFkZXIoY3R4KTsKKworCS8qIHByZS1leGl0IHN0YXRlIHVwZGF0ZXMgKi8KKwljcF9uYW1lKGN0eCwgY3BfcHJlcGFyZV9leGl0KTsKKwljcF9icmEgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUsIGNwX2NoZWNrX2xvYWQpOworCWNwX2JyYSAoY3R4LCBVU0VSX1NBVkUsIFBFTkRJTkcsIGNwX2V4aXQpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX0NVUlJFTlQpOworCisJY3BfbmFtZShjdHgsIGNwX2V4aXQpOworCWNwX3NldCAoY3R4LCBVU0VSX1NBVkUsIE5PVF9QRU5ESU5HKTsKKwljcF9zZXQgKGN0eCwgVVNFUl9MT0FELCBOT1RfUEVORElORyk7CisJY3Bfb3V0IChjdHgsIENQX0VORCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggZjhlMjhhMS4uMTE4ZDMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl2b2lkIF9faW9tZW0gKmx1dCA9IG52Ym9fa21hcF9vYmpfaW92aXJ0dWFsKG52X2NydGMtPmx1dC5udmJvKTsKIAlpbnQgaTsKIAotCU5WX0RFQlVHKGNydGMtPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGNydGMtPmRldiwgIlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJd3JpdGV3KG52X2NydGMtPmx1dC5yW2ldID4+IDIsIGx1dCArIDgqaSArIDApOwpAQCAtNjgsOCArNjgsOCBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IGluZGV4ID0gbnZfY3J0Yy0+aW5kZXgsIHJldDsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7Ci0JTlZfREVCVUcoZGV2LCAiJXNcbiIsIGJsYW5rZWQgPyAiYmxhbmtlZCIgOiAidW5ibGFua2VkIik7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgIiVzXG4iLCBibGFua2VkID8gImJsYW5rZWQiIDogInVuYmxhbmtlZCIpOwogCiAJaWYgKGJsYW5rZWQpIHsKIAkJbnZfY3J0Yy0+Y3Vyc29yLmhpZGUobnZfY3J0YywgZmFsc2UpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCAyICsgKHVwZGF0ZSA/IDIgOiAwKSk7CiAJaWYgKHJldCkgewpAQCAtMTkzLDcgKzE5Myw3IEBACiAJdWludDMyX3Qgb3V0WCwgb3V0WSwgaG9yaXosIHZlcnQ7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlzd2l0Y2ggKHNjYWxpbmdfbW9kZSkgewogCWNhc2UgRFJNX01PREVfU0NBTEVfTk9ORToKQEAgLTMwMSw3ICszMDEsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAlpZiAoIWNydGMpCiAJCXJldHVybjsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCS8qIERpc2Nvbm5lY3QgYWxsIHVudXNlZCBlbmNvZGVycy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJc3RydWN0IG5vdXZlYXVfY3J0YyAqbnZfY3J0YyA9IG5vdXZlYXVfY3J0YyhjcnRjKTsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKIAogCW52NTBfY3J0Y19ibGFuayhudl9jcnRjLCBmYWxzZSk7CiAKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2ZyYW1lYnVmZmVyICpmYiA9IG5vdXZlYXVfZnJhbWVidWZmZXIoZHJtX2ZiKTsKIAlpbnQgcmV0LCBmb3JtYXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOworCU5WX0RFQlVHX0tNUyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCiAJc3dpdGNoIChkcm1fZmItPmRlcHRoKSB7CiAJY2FzZSAgODoKQEAgLTYxMiw3ICs2MTIsNyBAQAogCiAJKm52X2NydGMtPm1vZGUgPSAqYWRqdXN0ZWRfbW9kZTsKIAotCU5WX0RFQlVHKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CisJTlZfREVCVUdfS01TKGRldiwgImluZGV4ICVkXG4iLCBudl9jcnRjLT5pbmRleCk7CiAKIAloc3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydDsKIAl2c3luY19kdXIgPSBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydDsKQEAgLTcwNiw3ICs3MDYsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMgPSBOVUxMOwogCWludCByZXQsIGk7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJbnZfY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKCpudl9jcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFudl9jcnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3Vyc29yLmMKaW5kZXggZTJlNzlhOC4uNzUzZTcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2N1cnNvci5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJaWYgKHVwZGF0ZSAmJiBudl9jcnRjLT5jdXJzb3IudmlzaWJsZSkKIAkJcmV0dXJuOwpAQCAtNzYsNyArNzYsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBudl9jcnRjLT5iYXNlLmRldjsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWlmICh1cGRhdGUgJiYgIW52X2NydGMtPmN1cnNvci52aXNpYmxlKQogCQlyZXR1cm47CkBAIC0xMTYsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkCiBudjUwX2N1cnNvcl9zZXRfb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2NydGMgKm52X2NydGMsIHVpbnQzMl90IG9mZnNldCkKIHsKLQlOVl9ERUJVRyhudl9jcnRjLT5iYXNlLmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKG52X2NydGMtPmJhc2UuZGV2LCAiXG4iKTsKIAlpZiAob2Zmc2V0ID09IG52X2NydGMtPmN1cnNvci5vZmZzZXQpCiAJCXJldHVybjsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG52X2NydGMtPmJhc2UuZGV2OwogCWludCBpZHggPSBudl9jcnRjLT5pbmRleDsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgTlY1MF9QRElTUExBWV9DVVJTT1JfQ1VSU09SX0NUUkwyKGlkeCksIDApOwogCWlmICghbnZfd2FpdChOVjUwX1BESVNQTEFZX0NVUlNPUl9DVVJTT1JfQ1RSTDIoaWR4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2RhYy5jCmluZGV4IGZiNTgzOGUuLmYwOGYwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtNDQsNyArNDQsNyBAQAogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmV2byA9IGRldl9wcml2LT5ldm87CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIkRpc2Nvbm5lY3RpbmcgREFDICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAlyZXQgPSBSSU5HX1NQQUNFKGV2bywgMik7CiAJaWYgKHJldCkgewpAQCAtODEsMTEgKzgxLDExIEBACiAJLyogVXNlIGJpb3MgcHJvdmlkZWQgdmFsdWUgaWYgcG9zc2libGUuICovCiAJaWYgKGRldl9wcml2LT52Ymlvcy0+ZGFjdGVzdHZhbCkgewogCQlsb2FkX3BhdHRlcm4gPSBkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWw7Ci0JCU5WX0RFQlVHKGRldiwgIlVzaW5nIGJpb3MgcHJvdmlkZWQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAorCQlOVl9ERUJVR19LTVMoZGV2LCAiVXNpbmcgYmlvcyBwcm92aWRlZCBsb2FkX3BhdHRlcm4gb2YgJWRcbiIsCiAJCQkgIGxvYWRfcGF0dGVybik7CiAJfSBlbHNlIHsKIAkJbG9hZF9wYXR0ZXJuID0gMzQwOwotCQlOVl9ERUJVRyhkZXYsICJVc2luZyBkZWZhdWx0IGxvYWRfcGF0dGVybiBvZiAlZFxuIiwKKwkJTlZfREVCVUdfS01TKGRldiwgIlVzaW5nIGRlZmF1bHQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAogCQkJIGxvYWRfcGF0dGVybik7CiAJfQogCkBAIC0xMDMsOSArMTAzLDkgQEAKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKIAlpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQlOVl9ERUJVRyhkZXYsICJMb2FkIHdhcyBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgZGV0ZWN0ZWQgb24gb3V0cHV0IHdpdGggb3IgJWRcbiIsIG9yKTsKIAllbHNlCi0JCU5WX0RFQlVHKGRldiwgIkxvYWQgd2FzIG5vdCBkZXRlY3RlZCBvbiBvdXRwdXQgd2l0aCBvciAlZFxuIiwgb3IpOworCQlOVl9ERUJVR19LTVMoZGV2LCAiTG9hZCB3YXMgbm90IGRldGVjdGVkIG9uIG91dHB1dCB3aXRoIG9yICVkXG4iLCBvcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTE4LDcgKzExOCw3IEBACiAJdWludDMyX3QgdmFsOwogCWludCBvciA9IG52X2VuY29kZXItPm9yOwogCi0JTlZfREVCVUcoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZCBtb2RlICVkXG4iLCBvciwgbW9kZSk7CiAKIAkvKiB3YWl0IGZvciBpdCB0byBiZSBkb25lICovCiAJaWYgKCFudl93YWl0KE5WNTBfUERJU1BMQVlfREFDX0RQTVNfQ1RSTChvciksCkBAIC0xNzMsNyArMTczLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCi0JTlZfREVCVUcoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZW5jb2Rlci0+ZGV2LCAib3IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWNvbm5lY3RvciA9IG5vdXZlYXVfZW5jb2Rlcl9jb25uZWN0b3JfZ2V0KG52X2VuY29kZXIpOwogCWlmICghY29ubmVjdG9yKSB7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAl1aW50MzJfdCBtb2RlX2N0bCA9IDAsIG1vZGVfY3RsMiA9IDA7CiAJaW50IHJldDsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAludjUwX2RhY19kcG1zKGVuY29kZXIsIERSTV9NT0RFX0RQTVNfT04pOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZiAoIWVuY29kZXIpCiAJCXJldHVybjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIlxuIik7CiAKIAlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwogCWtmcmVlKG52X2VuY29kZXIpOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlcjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEQUMgb3V0cHV0XG4iKTsKIAogCW52X2VuY29kZXIgPSBremFsbG9jKHNpemVvZigqbnZfZW5jb2RlciksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwppbmRleCAxMmM1ZWU2Li45MGYwYmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJdWludDY0X3Qgc3RhcnQ7CiAJaW50IHJldCwgaTsKIAotCU5WX0RFQlVHKGRldiwgIlxuIik7CisJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKIAludl93cjMyKGRldiwgMHgwMDYxMDE4NCwgbnZfcmQzMihkZXYsIDB4MDA2MTQwMDQpKTsKIAkvKgpAQCAtMjMyLDcgKzIzMiw3IEBACiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfVU5LXzM4MCwgMCk7CiAJLyogUkFNIGlzIGNsYW1wZWQgdG8gMjU2IE1pQi4gKi8KIAlyYW1fYW1vdW50ID0gbm91dmVhdV9tZW1fZmJfYW1vdW50KGRldik7Ci0JTlZfREVCVUcoZGV2LCAicmFtX2Ftb3VudCAlZFxuIiwgcmFtX2Ftb3VudCk7CisJTlZfREVCVUdfS01TKGRldiwgInJhbV9hbW91bnQgJWRcbiIsIHJhbV9hbW91bnQpOwogCWlmIChyYW1fYW1vdW50ID4gMjU2KjEwMjQqMTAyNCkKIAkJcmFtX2Ftb3VudCA9IDI1NioxMDI0KjEwMjQ7CiAJbnZfd3IzMihkZXYsIE5WNTBfUERJU1BMQVlfUkFNX0FNT1VOVCwgcmFtX2Ftb3VudCAtIDEpOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc3RydWN0IGRybV9jcnRjICpkcm1fY3J0YzsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJtX2NydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3Qgbm91dmVhdV9jcnRjICpjcnRjID0gbm91dmVhdV9jcnRjKGRybV9jcnRjKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVpbnQzMl90IGNvbm5lY3RvclsxNl0gPSB7fTsKIAlpbnQgcmV0LCBpOwogCi0JTlZfREVCVUcoZGV2LCAiXG4iKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiXG4iKTsKIAogCS8qIGluaXQgYmFzaWMga2VybmVsIG1vZGVzZXR0aW5nICovCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGV2KTsKQEAgLTU3Myw3ICs1NzMsNyBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZGV2KTsKIApAQCAtNjE3LDcgKzYxNyw3IEBACiAJICogQ1JUQyBzZXBhcmF0ZWx5LCBhbmQgc3VibWlzc2lvbiB3aWxsIGJlIGJsb2NrZWQgYnkgdGhlIEdQVQogCSAqIHVudGlsIHdlIGhhbmRsZSBlYWNoIGluIHR1cm4uCiAJICovCi0JTlZfREVCVUcoZGV2LCAiMHg2MTAwMzA6IDB4JTA4eFxuIiwgdW5rMzApOworCU5WX0RFQlVHX0tNUyhkZXYsICIweDYxMDAzMDogMHglMDh4XG4iLCB1bmszMCk7CiAJaGVhZCA9IGZmcygodW5rMzAgPj4gOSkgJiAzKSAtIDE7CiAJaWYgKGhlYWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY2MSw3ICs2NjEsNyBAQAogCQlvciA9IGk7CiAJfQogCi0JTlZfREVCVUcoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAidHlwZSAlZCwgb3IgJWRcbiIsIHR5cGUsIG9yKTsKIAlpZiAodHlwZSA9PSBPVVRQVVRfQU5ZKSB7CiAJCU5WX0VSUk9SKGRldiwgInVua25vd24gZW5jb2RlciEhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtNjkwLDkgKzY5MCwyMSBAQAogCQkJICAgaW50IHB4Y2xrKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKIAl1aW50MzJfdCBtYywgc2NyaXB0ID0gMCwgb3I7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyID0gbm91dmVhdV9lbmNvZGVyKGVuY29kZXIpOworCisJCWlmIChudl9lbmNvZGVyLT5kY2IgIT0gZGNiZW50KQorCQkJY29udGludWU7CisKKwkJbnZfY29ubmVjdG9yID0gbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2Rlcik7CisJCWJyZWFrOworCX0KKwogCW9yID0gZmZzKGRjYmVudC0+b3IpIC0gMTsKIAltYyA9IG52NTBfZGlzcGxheV9tb2RlX2N0cmwoZGV2LCBkY2JlbnQtPnR5cGUgIT0gT1VUUFVUX0FOQUxPRywgb3IpOwogCXN3aXRjaCAoZGNiZW50LT50eXBlKSB7CkBAIC03MTEsNiArNzIzLDExIEBACiAJCQl9IGVsc2UKIAkJCWlmIChiaW9zLT5mcC5zdHJhcGxlc3NfaXNfMjRiaXQgJiAxKQogCQkJCXNjcmlwdCB8PSAweDAyMDA7CisKKwkJCWlmIChudl9jb25uZWN0b3IgJiYgbnZfY29ubmVjdG9yLT5lZGlkICYmCisJCQkgICAgKG52X2Nvbm5lY3Rvci0+ZWRpZC0+cmV2aXNpb24gPj0gNCkgJiYKKwkJCSAgICAobnZfY29ubmVjdG9yLT5lZGlkLT5pbnB1dCAmIDB4NzApID49IDB4MjApCisJCQkJc2NyaXB0IHw9IDB4MDIwMDsKIAkJfQogCiAJCWlmIChub3V2ZWF1X3VzY3JpcHRfbHZkcyA+PSAwKSB7CkBAIC04MTEsNyArODI4LDcgQEAKIAlwY2xrID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfQ1JUQ19QKGhlYWQsIENMT0NLKSkgJiAweDNmZmZmZjsKIAlzY3JpcHQgPSBudjUwX2Rpc3BsYXlfc2NyaXB0X3NlbGVjdChkZXYsIGRjYmVudCwgcGNsayk7CiAKLQlOVl9ERUJVRyhkZXYsICJoZWFkICVkIHB4Y2xrOiAlZEtIelxuIiwgaGVhZCwgcGNsayk7CisJTlZfREVCVUdfS01TKGRldiwgImhlYWQgJWQgcHhjbGs6ICVkS0h6XG4iLCBoZWFkLCBwY2xrKTsKIAogCWlmIChkY2JlbnQtPnR5cGUgIT0gT1VUUFVUX0RQKQogCQlub3V2ZWF1X2Jpb3NfcnVuX2Rpc3BsYXlfdGFibGUoZGV2LCBkY2JlbnQsIDAsIC0yKTsKQEAgLTg3MCw3ICs4ODcsNyBAQAogCQl1aW50MzJfdCBpbnRyMCA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMCk7CiAJCXVpbnQzMl90IGludHIxID0gbnZfcmQzMihkZXYsIE5WNTBfUERJU1BMQVlfSU5UUl8xKTsKIAotCQlOVl9ERUJVRyhkZXYsICJQRElTUExBWV9JTlRSX0JIIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJQRElTUExBWV9JTlRSX0JIIDB4JTA4eCAweCUwOHhcbiIsIGludHIwLCBpbnRyMSk7CiAKIAkJaWYgKGludHIxICYgTlY1MF9QRElTUExBWV9JTlRSXzFfQ0xLX1VOSzEwKQogCQkJbnY1MF9kaXNwbGF5X3VuazEwX2hhbmRsZXIoZGV2KTsKQEAgLTk3NCw3ICs5OTEsNyBAQAogCQl1aW50MzJfdCBpbnRyMSA9IG52X3JkMzIoZGV2LCBOVjUwX1BESVNQTEFZX0lOVFJfMSk7CiAJCXVpbnQzMl90IGNsb2NrOwogCi0JCU5WX0RFQlVHKGRldiwgIlBESVNQTEFZX0lOVFIgMHglMDh4IDB4JTA4eFxuIiwgaW50cjAsIGludHIxKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIlBESVNQTEFZX0lOVFIgMHglMDh4IDB4JTA4eFxuIiwgaW50cjAsIGludHIxKTsKIAogCQlpZiAoIWludHIwICYmICEoaW50cjEgJiB+ZGVsYXllZCkpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYwppbmRleCA2YmNjNmQzLi5lNGYyNzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYmNvbi5jCkBAIC0xNiw5ICsxNiw3IEBACiAKIAlpZiAoIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSAmJgogCSAgICAgUklOR19TUEFDRShjaGFuLCByZWN0LT5yb3AgPT0gUk9QX0NPUFkgPyA3IDogMTEpKSB7Ci0JCU5WX0VSUk9SKGRldiwgIkdQVSBsb2NrdXAgLSBzd2l0Y2hpbmcgdG8gc29mdHdhcmUgZmJjb25cbiIpOwotCi0JCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7CiAJfQogCiAJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKQEAgLTMxLDcgKzI5LDExIEBACiAJCU9VVF9SSU5HKGNoYW4sIDEpOwogCX0KIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViMkQsIDB4MDU4OCwgMSk7Ci0JT1VUX1JJTkcoY2hhbiwgcmVjdC0+Y29sb3IpOworCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKKwkgICAgaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElSRUNUQ09MT1IpCisJCU9VVF9SSU5HKGNoYW4sICgodWludDMyX3QgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVjdC0+Y29sb3JdKTsKKwllbHNlCisJCU9VVF9SSU5HKGNoYW4sIHJlY3QtPmNvbG9yKTsKIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViMkQsIDB4MDYwMCwgNCk7CiAJT1VUX1JJTkcoY2hhbiwgcmVjdC0+ZHgpOwogCU9VVF9SSU5HKGNoYW4sIHJlY3QtPmR5KTsKQEAgLTU2LDkgKzU4LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgJiYgUklOR19TUEFDRShjaGFuLCAxMikpIHsKLQkJTlZfRVJST1IoZGV2LCAiR1BVIGxvY2t1cCAtIHN3aXRjaGluZyB0byBzb2Z0d2FyZSBmYmNvblxuIik7Ci0KLQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CisJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKIAl9CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgewpAQCAtMTAxLDggKzEwMSw3IEBACiAJfQogCiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgJiYgUklOR19TUEFDRShjaGFuLCAxMSkpIHsKLQkJTlZfRVJST1IoZGV2LCAiR1BVIGxvY2t1cCAtIHN3aXRjaGluZyB0byBzb2Z0d2FyZSBmYmNvblxuIik7Ci0JCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCQlub3V2ZWF1X2ZiY29uX2dwdV9sb2NrdXAoaW5mbyk7CiAJfQogCiAJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKQEAgLTEzNSw5ICsxMzQsNyBAQAogCQlpbnQgcHVzaCA9IGR3b3JkcyA+IDIwNDcgPyAyMDQ3IDogZHdvcmRzOwogCiAJCWlmIChSSU5HX1NQQUNFKGNoYW4sIHB1c2ggKyAxKSkgewotCQkJTlZfRVJST1IoZGV2LAotCQkJCSAiR1BVIGxvY2t1cCAtIHN3aXRjaGluZyB0byBzb2Z0d2FyZSBmYmNvblxuIik7Ci0JCQlpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKwkJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKIAkJCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xOTksNyArMTk2LDcgQEAKIAogCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgNTkpOwogCWlmIChyZXQpIHsKLQkJTlZfRVJST1IoZGV2LCAiR1BVIGxvY2t1cCAtIHN3aXRjaGluZyB0byBzb2Z0d2FyZSBmYmNvblxuIik7CisJCW5vdXZlYXVfZmJjb25fZ3B1X2xvY2t1cChpbmZvKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMKaW5kZXggNzdhZTFhYS4uMzljYWYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9maWZvLmMKQEAgLTM4NCw4ICszODQsOCBAQAogCQludl93cjMyKGRldiwgTlY0MF9QRklGT19DQUNIRTFfREFUQShwdHIpLAogCQkJbnZfcm8zMihkZXYsIGNhY2hlLCAocHRyICogMikgKyAxKSk7CiAJfQotCW52X3dyMzIoZGV2LCAweDMyMTAsIGNudCA8PCAyKTsKLQludl93cjMyKGRldiwgMHgzMjcwLCAwKTsKKwludl93cjMyKGRldiwgTlYwM19QRklGT19DQUNIRTFfUFVULCBjbnQgPDwgMik7CisJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX0dFVCwgMCk7CiAKIAkvKiBndWVzc2luZyB0aGF0IGFsbCB0aGUgMHgzNHh4IHJlZ3MgYXJlbid0IG9uIE5WNTAgKi8KIAlpZiAoIUlTX0c4MCkgewpAQCAtMzk4LDggKzM5OCw2IEBACiAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0uZmluaXNoX2FjY2VzcyhkZXYpOwogCi0JbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX0dFVCwgMCk7Ci0JbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX1BVVCwgMCk7CiAJbnZfd3IzMihkZXYsIE5WMDNfUEZJRk9fQ0FDSEUxX1BVU0gxLCBjaGFuLT5pZCB8ICgxPDwxNikpOwogCXJldHVybiAwOwogfQpAQCAtNDE2LDcgKzQxNCw3IEBACiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKIAogCWNoaWQgPSBwZmlmby0+Y2hhbm5lbF9pZChkZXYpOwotCWlmIChjaGlkIDwgMCB8fCBjaGlkID49IGRldl9wcml2LT5lbmdpbmUuZmlmby5jaGFubmVscykKKwlpZiAoY2hpZCA8IDEgfHwgY2hpZCA+PSBkZXZfcHJpdi0+ZW5naW5lLmZpZm8uY2hhbm5lbHMgLSAxKQogCQlyZXR1cm4gMDsKIAogCWNoYW4gPSBkZXZfcHJpdi0+Zmlmb3NbY2hpZF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKaW5kZXggMTc3ZDgyMi4uY2E3OWYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwpAQCAtMTA3LDkgKzEwNywxMyBAQAogc3RhdGljIGludAogbnY1MF9ncmFwaF9pbml0X2N0eGN0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKIAlOVl9ERUJVRyhkZXYsICJcbiIpOwogCi0JbnY0MF9ncmN0eF9pbml0KGRldik7CisJbm91dmVhdV9ncmN0eF9wcm9nX2xvYWQoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5lbmdpbmUuZ3JhcGguY3R4cHJvZykKKwkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKIAogCW52X3dyMzIoZGV2LCAweDQwMDMyMCwgNCk7CiAJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9DVVIsIDApOwpAQCAtMTQwLDcgKzE0NCw3IEBACiBudjUwX2dyYXBoX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJTlZfREVCVUcoZGV2LCAiXG4iKTsKLQludjQwX2dyY3R4X2ZpbmkoZGV2KTsKKwlub3V2ZWF1X2dyY3R4X2ZpbmkoZGV2KTsKIH0KIAogdm9pZApAQCAtMjA3LDcgKzIxMSw3IEBACiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLmZpbmlzaF9hY2Nlc3MoZGV2KTsKIAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwotCW52NDBfZ3JjdHhfdmFsc19sb2FkKGRldiwgY3R4KTsKKwlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7CiAJbnZfd28zMihkZXYsIGN0eCwgMHgwMDAwMC80LCBjaGFuLT5yYW1pbi0+aW5zdGFuY2UgPj4gMTIpOwogCWlmICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweGEwKQogCQludl93bzMyKGRldiwgY3R4LCAweDAwMDA0LzQsIDB4MDAwMDAwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfc29yLmMKaW5kZXggOGMyODA0Ni4uZTM5NWMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9zb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3Nvci5jCkBAIC00NCw3ICs0NCw3IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGV2X3ByaXYtPmV2bzsKIAlpbnQgcmV0OwogCi0JTlZfREVCVUcoZGV2LCAiRGlzY29ubmVjdGluZyBTT1IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAiRGlzY29ubmVjdGluZyBTT1IgJWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCAyKTsKIAlpZiAocmV0KSB7CkBAIC03MCw3ICs3MCw3IEBACiAJfQogCiAJaWYgKGRwZS0+c2NyaXB0MCkgewotCQlOVl9ERUJVRyhkZXYsICJTT1ItJWQ6IHJ1bm5pbmcgRFAgc2NyaXB0IDBcbiIsIG52X2VuY29kZXItPm9yKTsKKwkJTlZfREVCVUdfS01TKGRldiwgIlNPUi0lZDogcnVubmluZyBEUCBzY3JpcHQgMFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCQlub3V2ZWF1X2Jpb3NfcnVuX2luaXRfdGFibGUoZGV2LCBsZTE2X3RvX2NwdShkcGUtPnNjcmlwdDApLAogCQkJCQkgICAgbnZfZW5jb2Rlci0+ZGNiKTsKIAl9CkBAIC03OSw3ICs3OSw3IEBACiAJCU5WX0VSUk9SKGRldiwgIlNPUi0lZDogbGluayB0cmFpbmluZyBmYWlsZWRcbiIsIG52X2VuY29kZXItPm9yKTsKIAogCWlmIChkcGUtPnNjcmlwdDEpIHsKLQkJTlZfREVCVUcoZGV2LCAiU09SLSVkOiBydW5uaW5nIERQIHNjcmlwdCAxXG4iLCBudl9lbmNvZGVyLT5vcik7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJTT1ItJWQ6IHJ1bm5pbmcgRFAgc2NyaXB0IDFcbiIsIG52X2VuY29kZXItPm9yKTsKIAkJbm91dmVhdV9iaW9zX3J1bl9pbml0X3RhYmxlKGRldiwgbGUxNl90b19jcHUoZHBlLT5zY3JpcHQxKSwKIAkJCQkJICAgIG52X2VuY29kZXItPmRjYik7CiAJfQpAQCAtOTMsNyArOTMsNyBAQAogCXVpbnQzMl90IHZhbDsKIAlpbnQgb3IgPSBudl9lbmNvZGVyLT5vcjsKIAotCU5WX0RFQlVHKGRldiwgIm9yICVkIG1vZGUgJWRcbiIsIG9yLCBtb2RlKTsKKwlOVl9ERUJVR19LTVMoZGV2LCAib3IgJWQgbW9kZSAlZFxuIiwgb3IsIG1vZGUpOwogCiAJLyogd2FpdCBmb3IgaXQgdG8gYmUgZG9uZSAqLwogCWlmICghbnZfd2FpdChOVjUwX1BESVNQTEFZX1NPUl9EUE1TX0NUUkwob3IpLApAQCAtMTQyLDcgKzE0Miw3IEBACiAJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAotCU5WX0RFQlVHKGVuY29kZXItPmRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CisJTlZfREVCVUdfS01TKGVuY29kZXItPmRldiwgIm9yICVkXG4iLCBudl9lbmNvZGVyLT5vcik7CiAKIAljb25uZWN0b3IgPSBub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKIAlpZiAoIWNvbm5lY3RvcikgewpAQCAtMTgyLDcgKzE4Miw3IEBACiAJdWludDMyX3QgbW9kZV9jdGwgPSAwOwogCWludCByZXQ7CiAKLQlOVl9ERUJVRyhkZXYsICJvciAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOworCU5WX0RFQlVHX0tNUyhkZXYsICJvciAlZFxuIiwgbnZfZW5jb2Rlci0+b3IpOwogCiAJbnY1MF9zb3JfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAJaWYgKCFlbmNvZGVyKQogCQlyZXR1cm47CiAKLQlOVl9ERUJVRyhlbmNvZGVyLT5kZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhlbmNvZGVyLT5kZXYsICJcbiIpOwogCiAJZHJtX2VuY29kZXJfY2xlYW51cChlbmNvZGVyKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBACiAJYm9vbCBkdW07CiAJaW50IHR5cGU7CiAKLQlOVl9ERUJVRyhkZXYsICJcbiIpOworCU5WX0RFQlVHX0tNUyhkZXYsICJcbiIpOwogCiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewogCWNhc2UgT1VUUFVUX1RNRFM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYwppbmRleCA2MDFmNGMwLi5iODA2ZmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5vcGVuID0gZHJtX29wZW4sCiAJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkubW1hcCA9IGRybV9tbWFwLAogCQkucG9sbCA9IGRybV9wb2xsLAogCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaW9jMzIuYwppbmRleCBkM2NiNjc2Li41MWM5OWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pb2MzMi5jCkBAIC05NSw4ICs5NSw3IEBACiAJCQkgICZpbml0LT5hZ3BfdGV4dHVyZXNfb2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1IxMjhfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUjEyOF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfZGVwdGgzMiB7CkBAIC0xMjksOCArMTI4LDcgQEAKIAkJCSAgJmRlcHRoLT5tYXNrKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1IxMjhfREVQVEgsICh1bnNpZ25lZCBsb25nKWRlcHRoKTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SMTI4X0RFUFRILCAodW5zaWduZWQgbG9uZylkZXB0aCk7CiAKIH0KIApAQCAtMTUzLDggKzE1MSw3IEBACiAJCQkgICZzdGlwcGxlLT5tYXNrKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1IxMjhfU1RJUFBMRSwgKHVuc2lnbmVkIGxvbmcpc3RpcHBsZSk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUjEyOF9TVElQUExFLCAodW5zaWduZWQgbG9uZylzdGlwcGxlKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3IxMjhfZ2V0cGFyYW0zMiB7CkBAIC0xNzgsOCArMTc1LDcgQEAKIAkJCSAgJmdldHBhcmFtLT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SMTI4X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylnZXRwYXJhbSk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUjEyOF9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0pOwogfQogCiBkcm1faW9jdGxfY29tcGF0X3QgKnIxMjhfY29tcGF0X2lvY3Rsc1tdID0gewpAQCAtMjEwLDEyICsyMDYsMTAgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FSUkFZX1NJWkUocjEyOF9jb21wYXRfaW9jdGxzKSkKIAkJZm4gPSByMTI4X2NvbXBhdF9pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsKIAotCWxvY2tfa2VybmVsKCk7CQkvKiBYWFggZm9yIG5vdyAqLwogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKLQkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggYjVmNWZlNy4uMWNjN2I5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw5IEBACiAkKG9iaikvcjMwMF9yZWdfc2FmZS5oOiAkKHNyYykvcmVnX3NyY3MvcjMwMCAkKG9iaikvbWtyZWd0YWJsZQogCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCiAKKyQob2JqKS9yNDIwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yNDIwICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKwogJChvYmopL3JzNjAwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yczYwMCAkKG9iaikvbWtyZWd0YWJsZQogCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCiAKQEAgLTM1LDYgKzM4LDggQEAKIAogJChvYmopL3IzMDAubzogJChvYmopL3IzMDBfcmVnX3NhZmUuaAogCiskKG9iaikvcjQyMC5vOiAkKG9iaikvcjQyMF9yZWdfc2FmZS5oCisKICQob2JqKS9yczYwMC5vOiAkKG9iaikvcnM2MDBfcmVnX3NhZmUuaAogCiByYWRlb24teSA6PSByYWRlb25fZHJ2Lm8gcmFkZW9uX2NwLm8gcmFkZW9uX3N0YXRlLm8gcmFkZW9uX21lbS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vT2JqZWN0SUQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vT2JqZWN0SUQuaAppbmRleCA2ZDAxODNjLi5jNzE0MTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL09iamVjdElELmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9PYmplY3RJRC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IDIwMDYtMjAwNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisqIENvcHlyaWdodCAyMDA2LTIwMDcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCkBAIC00MSwxNCArNDEsMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRW5jb2RlciBPYmplY3QgSUQgRGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfTk9ORSAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9OT05FICAgICAgICAgICAgICAgICAgICAweDAwIAogCiAvKiBSYWRlb24gQ2xhc3MgRGlzcGxheSBIYXJkd2FyZSAqLwogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVkRTICAgICAgICAgICAweDAxCiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMxICAgICAgICAgIDB4MDIKICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVE1EUzIgICAgICAgICAgMHgwMwogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMxICAgICAgICAgICAweDA0Ci0jZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzIgICAgICAgICAgIDB4MDUJLyogVFYvQ1YgREFDICovCisjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzIgICAgICAgICAgIDB4MDUgICAgIC8qIFRWL0NWIERBQyAqLwogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9TRFZPQSAgICAgICAgICAweDA2CiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1NEVk9CICAgICAgICAgIDB4MDcKIApAQCAtNTYsMTEgKzU2LDExIEBACiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX1NJMTcwQiAgICAgICAgICAgICAgICAgIDB4MDgKICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfQ0g3MzAzICAgICAgICAgICAgICAgICAgMHgwOQogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9DSDczMDEgICAgICAgICAgICAgICAgICAweDBBCi0jZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RWTzEgICAgICAgICAgIDB4MEIJLyogVGhpcyBiZWxvbmdzIHRvIFJhZGVvbiBDbGFzcyBEaXNwbGF5IEhhcmR3YXJlICovCisjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RWTzEgICAgICAgICAgIDB4MEIgICAgLyogVGhpcyBiZWxvbmdzIHRvIFJhZGVvbiBDbGFzcyBEaXNwbGF5IEhhcmR3YXJlICovCiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0VYVEVSTkFMX1NEVk9BICAgICAgICAgIDB4MEMKICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfRVhURVJOQUxfU0RWT0IgICAgICAgICAgMHgwRAogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9USVRGUDUxMyAgICAgICAgICAgICAgICAweDBFCi0jZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0xWVE0xICAgICAgICAgIDB4MEYJLyogbm90IHVzZWQgZm9yIFJhZGVvbiAqLworI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVlRNMSAgICAgICAgICAweDBGICAgIC8qIG5vdCB1c2VkIGZvciBSYWRlb24gKi8KICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfVlQxNjIzICAgICAgICAgICAgICAgICAgMHgxMAogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9IRE1JX1NJMTkzMCAgICAgICAgICAgICAweDExCiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfSU5URVJOQUwgICAgICAgICAgIDB4MTIKQEAgLTY4LDkgKzY4LDkgQEAKICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxICAgMHgxMwogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSAgICAweDE0CiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMxICAgIDB4MTUKLSNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzIgICAgMHgxNgkvKiBTaGFyZWQgd2l0aCBDVi9UViBhbmQgQ1JUICovCi0jZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX1NJMTc4ICAgICAgICAgICAgICAgICAgIDBYMTcJLyogRXh0ZXJuYWwgVE1EUyAoZHVhbCBsaW5rLCBubyBIRENQLikgKi8KLSNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfTVZQVV9GUEdBICAgICAgICAgICAgICAgMHgxOAkvKiBNVlBVIEZQR0EgY2hpcCAqLworI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMiAgICAweDE2ICAvKiBTaGFyZWQgd2l0aCBDVi9UViBhbmQgQ1JUICovCisjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX1NJMTc4ICAgICAgICAgICAgICAgICAgIDBYMTcgIC8qIEV4dGVybmFsIFRNRFMgKGR1YWwgbGluaywgbm8gSERDUC4pICovCisjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX01WUFVfRlBHQSAgICAgICAgICAgICAgIDB4MTggIC8qIE1WUFUgRlBHQSBjaGlwICovCiAjZGVmaW5lIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RESSAgICAgICAgICAgIDB4MTkKICNkZWZpbmUgRU5DT0RFUl9PQkpFQ1RfSURfVlQxNjI1ICAgICAgICAgICAgICAgICAgMHgxQQogI2RlZmluZSBFTkNPREVSX09CSkVDVF9JRF9IRE1JX1NJMTkzMiAgICAgICAgICAgICAweDFCCkBAIC04Niw3ICs4Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvbm5lY3RvciBPYmplY3QgSUQgRGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIENPTk5FQ1RPUl9PQkpFQ1RfSURfTk9ORSAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9OT05FICAgICAgICAgICAgICAgICAgMHgwMCAKICNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSAgICAgMHgwMQogI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSAgICAgICAweDAyCiAjZGVmaW5lIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QgICAgIDB4MDMKQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8gICAgICAgICAgICAgICAgMHgwNwogI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX1lQYlByICAgICAgICAgICAgICAgICAweDA4CiAjZGVmaW5lIENPTk5FQ1RPUl9PQkpFQ1RfSURfRF9DT05ORUNUT1IgICAgICAgICAgIDB4MDkKLSNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiAgICAgICAgICAgICAgMHgwQQkvKiBTdXBwb3J0cyBib3RoIENWICYgVFYgKi8KKyNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiAgICAgICAgICAgICAgMHgwQSAgLyogU3VwcG9ydHMgYm90aCBDViAmIFRWICovCiAjZGVmaW5lIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0NBUlQgICAgICAgICAgICAgICAgIDB4MEIKICNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQSAgICAgICAgICAgMHgwQwogI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9CICAgICAgICAgICAweDBECkBAIC0xMDYsNiArMTA2LDggQEAKICNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9DUk9TU0ZJUkUgICAgICAgICAgICAgMHgxMQogI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX0hBUkRDT0RFX0RWSSAgICAgICAgICAweDEyCiAjZGVmaW5lIENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgQ09OTkVDVE9SX09CSkVDVF9JRF9lRFAgICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSAgICAgICAgICAgICAgICAgICAweDE1CiAKIC8qIGRlbGV0ZWQgKi8KIApAQCAtMTE2LDYgKzExOCwxNCBAQAogI2RlZmluZSBST1VURVJfT0JKRUNUX0lEX0kyQ19FWFRFTkRFUl9DTlRMCQkJCTB4MDEKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBHZW5lcmljIE9iamVjdCBJRCBEZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHRU5FUklDX09CSkVDVF9JRF9OT05FICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEdFTkVSSUNfT0JKRUNUX0lEX0dMU1lOQyAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgR0VORVJJQ19PQkpFQ1RfSURfUFgyX05PTl9EUklWQUJMRSAgICAgICAgMHgwMgorI2RlZmluZSBHRU5FUklDX09CSkVDVF9JRF9NWE1fT1BNICAgICAgICAgICAgICAgICAweDAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogR3JhcGhpY3MgT2JqZWN0IEVOVU0gSUQgRGVmaW5pdGlvbiAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgR1JBUEhfT0JKRUNUX0VOVU1fSUQxICAgICAgICAgICAgICAgICAgICAgMHgwMQpAQCAtMTI0LDYgKzEzNCw3IEBACiAjZGVmaW5lIEdSQVBIX09CSkVDVF9FTlVNX0lENCAgICAgICAgICAgICAgICAgICAgIDB4MDQKICNkZWZpbmUgR1JBUEhfT0JKRUNUX0VOVU1fSUQ1ICAgICAgICAgICAgICAgICAgICAgMHgwNQogI2RlZmluZSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDYgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIEdSQVBIX09CSkVDVF9FTlVNX0lENyAgICAgICAgICAgICAgICAgICAgIDB4MDcKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBHcmFwaGljcyBPYmplY3QgSUQgQml0IGRlZmluaXRpb24gICAgICAgICAgICAgICAgKi8KQEAgLTEzMywzNSArMTQ0LDM1IEBACiAjZGVmaW5lIFJFU0VSVkVEMV9JRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAogI2RlZmluZSBPQkpFQ1RfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMDAKICNkZWZpbmUgUkVTRVJWRUQyX0lEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAjZGVmaW5lIE9CSkVDVF9JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgRU5VTV9JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAogI2RlZmluZSBPQkpFQ1RfVFlQRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAweDBDCiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBHcmFwaGljcyBPYmplY3QgZmFtaWx5IGRlZmluaXRpb24gICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBDT05TVFJVQ1RPQkpFQ1RGQU1JTFlJRChHUkFQSElDU19PQkpFQ1RfVFlQRSwgR1JBUEhJQ1NfT0JKRUNUX0lEKSBcCi0JKEdSQVBISUNTX09CSkVDVF9UWVBFIDw8IE9CSkVDVF9UWVBFX1NISUZUIHwgXAotCSBHUkFQSElDU19PQkpFQ1RfSUQgICA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTlNUUlVDVE9CSkVDVEZBTUlMWUlEKEdSQVBISUNTX09CSkVDVF9UWVBFLCBHUkFQSElDU19PQkpFQ1RfSUQpIChHUkFQSElDU19PQkpFQ1RfVFlQRSA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBISUNTX09CSkVDVF9JRCAgIDw8IE9CSkVDVF9JRF9TSElGVCkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogR1BVIE9iamVjdCBJRCBkZWZpbml0aW9uIC0gU2hhcmVkIHdpdGggQklPUyAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgR1BVX0VOVU1fSUQxCShHUkFQSF9PQkpFQ1RfVFlQRV9HUFUgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkJCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCkKKyNkZWZpbmUgR1BVX0VOVU1fSUQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfR1BVIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRW5jb2RlciBPYmplY3QgSUQgZGVmaW5pdGlvbiAtIFNoYXJlZCB3aXRoIEJJT1MgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfTFZEU19FTlVNX0lEMSAgICAgICAgMHgyMTAxCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfTFZEU19FTlVNX0lEMSAgICAgICAgMHgyMTAxICAgICAgCiAjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVE1EUzFfRU5VTV9JRDEgICAgICAgMHgyMTAyCiAjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVE1EUzJfRU5VTV9JRDEgICAgICAgMHgyMTAzCiAjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfREFDMV9FTlVNX0lEMSAgICAgICAgMHgyMTA0CiAjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfREFDMl9FTlVNX0lEMSAgICAgICAgMHgyMTA1CiAjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfU0RWT0FfRU5VTV9JRDEgICAgICAgMHgyMTA2CiAjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfU0RWT0JfRU5VTV9JRDEgICAgICAgMHgyMTA3Ci0jZGVmaW5lIEVOQ09ERVJfU0lMMTcwQl9FTlVNX0lEMSAgICAgICAgICAgICAgMHgyMTA4CisjZGVmaW5lIEVOQ09ERVJfU0lMMTcwQl9FTlVNX0lEMSAgICAgICAgICAgICAgMHgyMTA4ICAKICNkZWZpbmUgRU5DT0RFUl9DSDczMDNfRU5VTV9JRDEgICAgICAgICAgICAgICAweDIxMDkKICNkZWZpbmUgRU5DT0RFUl9DSDczMDFfRU5VTV9JRDEgICAgICAgICAgICAgICAweDIxMEEKICNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9EVk8xX0VOVU1fSUQxICAgICAgICAweDIxMEIKQEAgLTE3NSw4ICsxODYsOCBAQAogI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9UTURTMV9FTlVNX0lEMSAgIDB4MjExMwogI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EVk8xX0VOVU1fSUQxICAgIDB4MjExNAogI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EQUMxX0VOVU1fSUQxICAgIDB4MjExNQotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EQUMyX0VOVU1fSUQxICAgIDB4MjExNgotI2RlZmluZSBFTkNPREVSX1NJMTc4X0VOVU1fSUQxICAgICAgICAgICAgICAgICAgIDB4MjExNworI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EQUMyX0VOVU1fSUQxICAgIDB4MjExNiAgCisjZGVmaW5lIEVOQ09ERVJfU0kxNzhfRU5VTV9JRDEgICAgICAgICAgICAgICAgICAgMHgyMTE3IAogI2RlZmluZSBFTkNPREVSX01WUFVfRlBHQV9FTlVNX0lEMSAgICAgICAgICAgICAgIDB4MjExOAogI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RESV9FTlVNX0lEMSAgICAgICAgICAgIDB4MjExOQogI2RlZmluZSBFTkNPREVSX1ZUMTYyNV9FTlVNX0lEMSAgICAgICAgICAgICAgICAgIDB4MjExQQpAQCAtMTg1LDIwNSArMTk2LDE2OSBAQAogI2RlZmluZSBFTkNPREVSX0RQX0RQNTAxX0VOVU1fSUQxICAgICAgICAgICAgICAgIDB4MjExRAogI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWV9FTlVNX0lEMSAgICAgICAgIDB4MjExRQogKi8KLSNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9MVkRTX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVkRTIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9MVkRTX0VOVU1fSUQxICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVkRTIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1RNRFMxX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9UTURTMSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVE1EUzFfRU5VTV9JRDEgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVE1EUzEgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVE1EUzJfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1RNRFMyIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9UTURTMl9FTlVNX0lEMSAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9UTURTMiA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9EQUMxX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMxIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9EQUMxX0VOVU1fSUQxICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EQUMxIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RBQzJfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzIgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RBQzJfRU5VTV9JRDEgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzIgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfU0RWT0FfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1NEVk9BIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9TRFZPQV9FTlVNX0lEMSAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9TRFZPQSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9TRFZPQV9FTlVNX0lEMiBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfU0RWT0EgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1NEVk9BX0VOVU1fSUQyICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1NEVk9BIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1NEVk9CX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9TRFZPQiA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfU0RWT0JfRU5VTV9JRDEgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfU0RWT0IgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfU0lMMTcwQl9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfU0kxNzBCIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9TSUwxNzBCX0VOVU1fSUQxICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9TSTE3MEIgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfQ0g3MzAzX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9DSDczMDMgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0NINzMwM19FTlVNX0lEMSAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0NINzMwMyA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9DSDczMDFfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0NINzMwMSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfQ0g3MzAxX0VOVU1fSUQxICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfQ0g3MzAxIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RWTzFfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RWTzEgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RWTzFfRU5VTV9JRDEgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RWTzEgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfRVhURVJOQUxfU0RWT0FfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0VYVEVSTkFMX1NEVk9BIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9FWFRFUk5BTF9TRFZPQV9FTlVNX0lEMSAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9FWFRFUk5BTF9TRFZPQSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9FWFRFUk5BTF9TRFZPQV9FTlVNX0lEMiBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfRVhURVJOQUxfU0RWT0EgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0VYVEVSTkFMX1NEVk9BX0VOVU1fSUQyICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0VYVEVSTkFMX1NEVk9BIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0VYVEVSTkFMX1NEVk9CX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9FWFRFUk5BTF9TRFZPQiA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9USVRGUDUxM19FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfVElURlA1MTMgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0VYVEVSTkFMX1NEVk9CX0VOVU1fSUQxICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0VYVEVSTkFMX1NEVk9CIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0xWVE0xX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVlRNMSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9WVDE2MjNfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX1ZUMTYyMyA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfVElURlA1MTNfRU5VTV9JRDEgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfVElURlA1MTMgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfSERNSV9TSTE5MzBfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfU0kxOTMwIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9MVlRNMV9FTlVNX0lEMSAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9MVlRNMSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9IRE1JX0lOVEVSTkFMX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9IRE1JX0lOVEVSTkFMIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9WVDE2MjNfRU5VTV9JRDEgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9WVDE2MjMgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfS0xEU0NQX1RNRFMxX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfVE1EUzEgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0hETUlfU0kxOTMwX0VOVU1fSUQxICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfU0kxOTMwIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9UTURTMV9FTlVNX0lEMiBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9IRE1JX0lOVEVSTkFMX0VOVU1fSUQxICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9IRE1JX0lOVEVSTkFMIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EVk8xX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfS0xEU0NQX1RNRFMxX0VOVU1fSUQxICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EQUMxX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9LTERTQ1BfREFDMl9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzIgPDwgT0JKRUNUX0lEX1NISUZUKSAvKiBTaGFyZWQgd2l0aCBDVi9UViBhbmQgQ1JUICovCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfS0xEU0NQX1RNRFMxX0VOVU1fSUQyICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX1RNRFMxIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX1NJMTc4X0VOVU1fSUQxICBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfU0kxNzggPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfTVZQVV9GUEdBX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9NVlBVX0ZQR0EgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9EVk8xX0VOVU1fSUQxICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RESV9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfRERJIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9LTERTQ1BfREFDMV9FTlVNX0lEMSAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9WVDE2MjVfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX1ZUMTYyNSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfS0xEU0NQX0RBQzJfRU5VTV9JRDEgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RBQzIgPDwgT0JKRUNUX0lEX1NISUZUKSAgLy8gU2hhcmVkIHdpdGggQ1YvVFYgYW5kIENSVAogCi0jZGVmaW5lIEVOQ09ERVJfSERNSV9TSTE5MzJfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0hETUlfU0kxOTMyIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9TSTE3OF9FTlVNX0lEMSAgICAgICAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfU0kxNzggPDwgT0JKRUNUX0lEX1NISUZUKSAgCiAKLSNkZWZpbmUgRU5DT0RFUl9EUF9EUDUwMV9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfRFBfRFA1MDEgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX01WUFVfRlBHQV9FTlVNX0lEMSAgICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9NVlBVX0ZQR0EgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfRFBfQU45ODAxX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9EUF9BTjk4MDEgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0RESV9FTlVNX0lEMSAgICAgKCAgR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RESSA8PCBPQkpFQ1RfSURfU0hJRlQpIAogCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVU5JUEhZX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX1ZUMTYyNV9FTlVNX0lEMSAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX1ZUMTYyNSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9VTklQSFlfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfSERNSV9TSTE5MzJfRU5VTV9JRDEgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSERNSV9TSTE5MzIgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfS0xEU0NQX0xWVE1BX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUEgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0RQX0RQNTAxX0VOVU1fSUQxICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfRFBfRFA1MDEgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVU5JUEhZMV9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIEVOQ09ERVJfRFBfQU45ODAxX0VOVU1fSUQxICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfRFBfQU45ODAxIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWTFfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTEgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWV9FTlVNX0lEMSAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWTJfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTIgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWV9FTlVNX0lEMiAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWTJfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTIgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX0tMRFNDUF9MVlRNQV9FTlVNX0lEMSAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BIDw8IE9CSkVDVF9JRF9TSElGVCkgIAogCi0jZGVmaW5lIEVOQ09ERVJfR0VORVJBTF9FWFRFUk5BTF9EVk9fRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIEVOQ09ERVJfT0JKRUNUX0lEX0dFTkVSQUxfRVhURVJOQUxfRFZPIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9VTklQSFkxX0VOVU1fSUQxICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBFTkNPREVSX0lOVEVSTkFMX1VOSVBIWTFfRU5VTV9JRDIgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0VOQ09ERVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTEgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIEVOQ09ERVJfSU5URVJOQUxfVU5JUEhZMl9FTlVNX0lEMSAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMiA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgRU5DT0RFUl9JTlRFUk5BTF9VTklQSFkyX0VOVU1fSUQyICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9FTkNPREVSIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBFTkNPREVSX0dFTkVSQUxfRVhURVJOQUxfRFZPX0VOVU1fSUQxICAgICggR1JBUEhfT0JKRUNUX1RZUEVfRU5DT0RFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkNPREVSX09CSkVDVF9JRF9HRU5FUkFMX0VYVEVSTkFMX0RWTyA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQ29ubmVjdG9yIE9iamVjdCBJRCBkZWZpbml0aW9uIC0gU2hhcmVkIHdpdGggQklPUyAqLwpAQCAtNDA2LDE2NyArMzgxLDI1MyBAQAogI2RlZmluZSBDT05ORUNUT1JfN1BJTl9ESU5fRU5VTV9JRDEgICAgICAgICAgICAgICAgIDB4MzEwRgogI2RlZmluZSBDT05ORUNUT1JfUENJRV9DT05ORUNUT1JfRU5VTV9JRDEgICAgICAgICAgIDB4MzExMAogKi8KLSNkZWZpbmUgQ09OTkVDVE9SX0xWRFNfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX0xWRFNfRU5VTV9JRDEgICAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX1NJTkdMRV9MSU5LX0RWSV9JX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBDT05ORUNUT1JfTFZEU19FTlVNX0lEMiAgICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfU0lOR0xFX0xJTktfRFZJX0lfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9lRFBfRU5VTV9JRDEgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX0RVQUxfTElOS19EVklfSV9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9lRFBfRU5VTV9JRDIgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX0RVQUxfTElOS19EVklfSV9FTlVNX0lEMiBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9TSU5HTEVfTElOS19EVklfSV9FTlVNX0lEMSAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfU0lOR0xFX0xJTktfRFZJX0RfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9TSU5HTEVfTElOS19EVklfSV9FTlVNX0lEMiAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfU0lOR0xFX0xJTktfRFZJX0RfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9EVUFMX0xJTktfRFZJX0lfRU5VTV9JRDEgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX0RVQUxfTElOS19EVklfRF9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRCA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9EVUFMX0xJTktfRFZJX0lfRU5VTV9JRDIgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX1ZHQV9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9TSU5HTEVfTElOS19EVklfRF9FTlVNX0lEMSAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfVkdBX0VOVU1fSUQyIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX1NJTkdMRV9MSU5LX0RWSV9EX0VOVU1fSUQyICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9DT01QT1NJVEVfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9DT01QT1NJVEUgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBDT05ORUNUT1JfRFVBTF9MSU5LX0RWSV9EX0VOVU1fSUQxICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0QgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9TVklERU9fRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8gPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBDT05ORUNUT1JfRFVBTF9MSU5LX0RWSV9EX0VOVU1fSUQyICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0QgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9ZUGJQcl9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX1lQYlByIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX0RVQUxfTElOS19EVklfRF9FTlVNX0lEMyAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDMgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfRF9DT05ORUNUT1JfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9EX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9WR0FfRU5VTV9JRDEgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SXzlQSU5fRElOX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIENPTk5FQ1RPUl9PQkpFQ1RfSURfOVBJTl9ESU4gPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBDT05ORUNUT1JfVkdBX0VOVU1fSUQyICAgICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9TQ0FSVF9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX1NDQVJUIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX0NPTVBPU0lURV9FTlVNX0lEMSAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfQ09NUE9TSVRFIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfSERNSV9UWVBFX0FfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9DT01QT1NJVEVfRU5VTV9JRDIgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0NPTVBPU0lURSA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX0hETUlfVFlQRV9CX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0IgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBDT05ORUNUT1JfU1ZJREVPX0VOVU1fSUQxICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8gPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl83UElOX0RJTl9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEXzdQSU5fRElOIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX1NWSURFT19FTlVNX0lEMiAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU1ZJREVPIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfUENJRV9DT05ORUNUT1JfRU5VTV9JRDEgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9ZUGJQcl9FTlVNX0lEMSAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1lQYlByIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfUENJRV9DT05ORUNUT1JfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl9ZUGJQcl9FTlVNX0lEMiAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1lQYlByIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfQ1JPU1NGSVJFX0VOVU1fSUQxIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIENPTk5FQ1RPUl9PQkpFQ1RfSURfQ1JPU1NGSVJFIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX0RfQ09OTkVDVE9SX0VOVU1fSUQxICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRF9DT05ORUNUT1IgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9DUk9TU0ZJUkVfRU5VTV9JRDIgXAotCShHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKLQkgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKLQkgQ09OTkVDVE9SX09CSkVDVF9JRF9DUk9TU0ZJUkUgPDwgT0JKRUNUX0lEX1NISUZUKQorI2RlZmluZSBDT05ORUNUT1JfRF9DT05ORUNUT1JfRU5VTV9JRDIgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9EX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfSURfU0hJRlQpCiAKLSNkZWZpbmUgQ09OTkVDVE9SX0hBUkRDT0RFX0RWSV9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0hBUkRDT0RFX0RWSSA8PCBPQkpFQ1RfSURfU0hJRlQpCisjZGVmaW5lIENPTk5FQ1RPUl85UElOX0RJTl9FTlVNX0lEMSAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEXzlQSU5fRElOIDw8IE9CSkVDVF9JRF9TSElGVCkKIAotI2RlZmluZSBDT05ORUNUT1JfSEFSRENPREVfRFZJX0VOVU1fSUQyIFwKLQkoR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCi0JIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCi0JIENPTk5FQ1RPUl9PQkpFQ1RfSURfSEFSRENPREVfRFZJIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SXzlQSU5fRElOX0VOVU1fSUQyICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfOVBJTl9ESU4gPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9ESVNQTEFZUE9SVF9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX1NDQVJUX0VOVU1fSUQxICAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0NBUlQgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9ESVNQTEFZUE9SVF9FTlVNX0lEMiBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX1NDQVJUX0VOVU1fSUQyICAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0NBUlQgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9ESVNQTEFZUE9SVF9FTlVNX0lEMyBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDMgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX0hETUlfVFlQRV9BX0VOVU1fSUQxICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0EgPDwgT0JKRUNUX0lEX1NISUZUKQogCi0jZGVmaW5lIENPTk5FQ1RPUl9ESVNQTEFZUE9SVF9FTlVNX0lENCBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDQgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SX0hETUlfVFlQRV9BX0VOVU1fSUQyICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0EgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9IRE1JX1RZUEVfQV9FTlVNX0lEMyAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQzIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9BIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBDT05ORUNUT1JfSERNSV9UWVBFX0JfRU5VTV9JRDEgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQiA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgQ09OTkVDVE9SX0hETUlfVFlQRV9CX0VOVU1fSUQyICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0IgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl83UElOX0RJTl9FTlVNX0lEMSAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEXzdQSU5fRElOIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgQ09OTkVDVE9SXzdQSU5fRElOX0VOVU1fSUQyICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfN1BJTl9ESU4gPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9QQ0lFX0NPTk5FQ1RPUl9FTlVNX0lEMSAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1BDSUVfQ09OTkVDVE9SIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBDT05ORUNUT1JfUENJRV9DT05ORUNUT1JfRU5VTV9JRDIgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgQ09OTkVDVE9SX0NST1NTRklSRV9FTlVNX0lEMSAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfQ1JPU1NGSVJFIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBDT05ORUNUT1JfQ1JPU1NGSVJFX0VOVU1fSUQyICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9DUk9TU0ZJUkUgPDwgT0JKRUNUX0lEX1NISUZUKQorCisKKyNkZWZpbmUgQ09OTkVDVE9SX0hBUkRDT0RFX0RWSV9FTlVNX0lEMSAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfSEFSRENPREVfRFZJIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBDT05ORUNUT1JfSEFSRENPREVfRFZJX0VOVU1fSUQyICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9IQVJEQ09ERV9EVkkgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9ESVNQTEFZUE9SVF9FTlVNX0lEMSAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBDT05ORUNUT1JfRElTUExBWVBPUlRfRU5VTV9JRDIgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMiA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgQ09OTkVDVE9SX0RJU1BMQVlQT1JUX0VOVU1fSUQzICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDMgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9ESVNQTEFZUE9SVF9FTlVNX0lENCAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQ0IDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBDT05ORUNUT1JfRElTUExBWVBPUlRfRU5VTV9JRDUgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lENSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgQ09OTkVDVE9SX0RJU1BMQVlQT1JUX0VOVU1fSUQ2ICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDYgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQgPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIENPTk5FQ1RPUl9NWE1fRU5VTV9JRDEgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSA8PCBPQkpFQ1RfSURfU0hJRlQpICAgICAgICAgIC8vTWFwcGluZyB0byBNWE1fRFBfQQorCisjZGVmaW5lIENPTk5FQ1RPUl9NWE1fRU5VTV9JRDIgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQyIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSA8PCBPQkpFQ1RfSURfU0hJRlQpICAgICAgICAgIC8vTWFwcGluZyB0byBNWE1fRFBfQgorCisjZGVmaW5lIENPTk5FQ1RPUl9NWE1fRU5VTV9JRDMgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQzIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSA8PCBPQkpFQ1RfSURfU0hJRlQpICAgICAgICAgIC8vTWFwcGluZyB0byBNWE1fRFBfQworCisjZGVmaW5lIENPTk5FQ1RPUl9NWE1fRU5VTV9JRDQgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQ0IDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSA8PCBPQkpFQ1RfSURfU0hJRlQpICAgICAgICAgIC8vTWFwcGluZyB0byBNWE1fRFBfRAorCisjZGVmaW5lIENPTk5FQ1RPUl9NWE1fRU5VTV9JRDUgICAgICAgICAgICAgICAgICggR1JBUEhfT0JKRUNUX1RZUEVfQ09OTkVDVE9SIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQ1IDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX01YTSA8PCBPQkpFQ1RfSURfU0hJRlQpICAgICAgICAgIC8vTWFwcGluZyB0byBNWE1fTFZEU19UWHh4CisKKyNkZWZpbmUgQ09OTkVDVE9SX01YTV9FTlVNX0lENiAgICAgICAgICAgICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9DT05ORUNUT1IgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDYgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTVhNIDw8IE9CSkVDVF9JRF9TSElGVCkgICAgICAgICAgLy9NYXBwaW5nIHRvIE1YTV9MVkRTX1VYeHgKKworI2RlZmluZSBDT05ORUNUT1JfTVhNX0VOVU1fSUQ3ICAgICAgICAgICAgICAgICAoIEdSQVBIX09CSkVDVF9UWVBFX0NPTk5FQ1RPUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lENyA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9NWE0gPDwgT0JKRUNUX0lEX1NISUZUKSAgICAgICAgICAvL01hcHBpbmcgdG8gTVhNX0RBQwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFJvdXRlciBPYmplY3QgSUQgZGVmaW5pdGlvbiAtIFNoYXJlZCB3aXRoIEJJT1MgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFJPVVRFUl9JMkNfRVhURU5ERVJfQ05UTF9FTlVNX0lEMSBcCi0JKEdSQVBIX09CSkVDVF9UWVBFX1JPVVRFUiA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAotCSBHUkFQSF9PQkpFQ1RfRU5VTV9JRDEgPDwgRU5VTV9JRF9TSElGVCB8XAotCSBST1VURVJfT0JKRUNUX0lEX0kyQ19FWFRFTkRFUl9DTlRMIDw8IE9CSkVDVF9JRF9TSElGVCkKKyNkZWZpbmUgUk9VVEVSX0kyQ19FWFRFTkRFUl9DTlRMX0VOVU1fSUQxICAgICAgKCBHUkFQSF9PQkpFQ1RfVFlQRV9ST1VURVIgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1VURVJfT0JKRUNUX0lEX0kyQ19FWFRFTkRFUl9DTlRMIDw8IE9CSkVDVF9JRF9TSElGVCkKIAogLyogZGVsZXRlZCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEdlbmVyaWMgT2JqZWN0IElEIGRlZmluaXRpb24gLSBTaGFyZWQgd2l0aCBCSU9TICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdFTkVSSUNPQkpFQ1RfR0xTWU5DX0VOVU1fSUQxICAgICAgICAgICAoR1JBUEhfT0JKRUNUX1RZUEVfR0VORVJJQyA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19PQkpFQ1RfSURfR0xTWU5DIDw8IE9CSkVDVF9JRF9TSElGVCkKKworI2RlZmluZSBHRU5FUklDT0JKRUNUX1BYMl9OT05fRFJJVkFCTEVfSUQxICAgICAgIChHUkFQSF9PQkpFQ1RfVFlQRV9HRU5FUklDIDw8IE9CSkVDVF9UWVBFX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhfT0JKRUNUX0VOVU1fSUQxIDw8IEVOVU1fSURfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5FUklDX09CSkVDVF9JRF9QWDJfTk9OX0RSSVZBQkxFPDwgT0JKRUNUX0lEX1NISUZUKQorCisjZGVmaW5lIEdFTkVSSUNPQkpFQ1RfUFgyX05PTl9EUklWQUJMRV9JRDIgICAgICAgKEdSQVBIX09CSkVDVF9UWVBFX0dFTkVSSUMgPDwgT0JKRUNUX1RZUEVfU0hJRlQgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSF9PQkpFQ1RfRU5VTV9JRDIgPDwgRU5VTV9JRF9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfT0JKRUNUX0lEX1BYMl9OT05fRFJJVkFCTEU8PCBPQkpFQ1RfSURfU0hJRlQpCisKKyNkZWZpbmUgR0VORVJJQ09CSkVDVF9NWE1fT1BNX0VOVU1fSUQxICAgICAgICAgICAoR1JBUEhfT0JKRUNUX1RZUEVfR0VORVJJQyA8PCBPQkpFQ1RfVFlQRV9TSElGVCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBIX09CSkVDVF9FTlVNX0lEMSA8PCBFTlVNX0lEX1NISUZUIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19PQkpFQ1RfSURfTVhNX09QTSA8PCBPQkpFQ1RfSURfU0hJRlQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogT2JqZWN0IENhcCBkZWZpbml0aW9uIC0gU2hhcmVkIHdpdGggQklPUyAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgR1JBUEhJQ1NfT0JKRUNUX0NBUF9JMkMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFMCiAjZGVmaW5lIEdSQVBISUNTX09CSkVDVF9DQVBfVEFCTEVfSUQgICAgICAgICAgICAweDAwMDAwMDAyTAogCisKICNkZWZpbmUgR1JBUEhJQ1NfT0JKRUNUX0kyQ0NPTU1BTkRfVEFCTEVfSUQgICAgICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBHUkFQSElDU19PQkpFQ1RfSE9UUExVR0RFVEVDVElPTklOVEVSVVBUX1RBQkxFX0lEICAgICAweDAyCiAjZGVmaW5lIEdSQVBISUNTX09CSkVDVF9FTkNPREVSX09VVFBVVF9QUk9URUNUSU9OX1RBQkxFX0lEICAgIDB4MDMKQEAgLTU3NSw0ICs2MzYsOCBAQAogI3ByYWdtYSBwYWNrKCkKICNlbmRpZgogCi0jZW5kaWYgLypHUkFQSElDVFlQRSAqLworI2VuZGlmICAvKkdSQVBISUNUWVBFICovCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKaW5kZXggNjU3OGQxOS4uMzg4MTQwYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC01OCw2ICs1OCw3IEBACiB9IGF0b21fZXhlY19jb250ZXh0OwogCiBpbnQgYXRvbV9kZWJ1ZyA9IDA7CitzdGF0aWMgdm9pZCBhdG9tX2V4ZWN1dGVfdGFibGVfbG9ja2VkKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGluZGV4LCB1aW50MzJfdCAqIHBhcmFtcyk7CiB2b2lkIGF0b21fZXhlY3V0ZV90YWJsZShzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpOwogCiBzdGF0aWMgdWludDMyX3QgYXRvbV9hcmdfbWFza1s4XSA9CkBAIC01NzMsNyArNTc0LDcgQEAKIAllbHNlCiAJCVNERUJVRygiICAgdGFibGU6ICVkXG4iLCBpZHgpOwogCWlmIChVMTYoY3R4LT5jdHgtPmNtZF90YWJsZSArIDQgKyAyICogaWR4KSkKLQkJYXRvbV9leGVjdXRlX3RhYmxlKGN0eC0+Y3R4LCBpZHgsIGN0eC0+cHMgKyBjdHgtPnBzX3NoaWZ0KTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlX2xvY2tlZChjdHgtPmN0eCwgaWR4LCBjdHgtPnBzICsgY3R4LT5wc19zaGlmdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0b21fb3BfY2xlYXIoYXRvbV9leGVjX2NvbnRleHQgKmN0eCwgaW50ICpwdHIsIGludCBhcmcpCkBAIC0xMDQwLDcgKzEwNDEsNyBAQAogCWF0b21fb3Bfc2hyLCBBVE9NX0FSR19NQ30sIHsKIGF0b21fb3BfZGVidWcsIDB9LH07CiAKLXZvaWQgYXRvbV9leGVjdXRlX3RhYmxlKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGluZGV4LCB1aW50MzJfdCAqIHBhcmFtcykKK3N0YXRpYyB2b2lkIGF0b21fZXhlY3V0ZV90YWJsZV9sb2NrZWQoc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgaW5kZXgsIHVpbnQzMl90ICogcGFyYW1zKQogewogCWludCBiYXNlID0gQ1UxNihjdHgtPmNtZF90YWJsZSArIDQgKyAyICogaW5kZXgpOwogCWludCBsZW4sIHdzLCBwcywgcHRyOwpAQCAtMTA5Miw2ICsxMDkzLDEzIEBACiAJCWtmcmVlKGVjdHgud3MpOwogfQogCit2b2lkIGF0b21fZXhlY3V0ZV90YWJsZShzdHJ1Y3QgYXRvbV9jb250ZXh0ICpjdHgsIGludCBpbmRleCwgdWludDMyX3QgKiBwYXJhbXMpCit7CisJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CisJYXRvbV9leGVjdXRlX3RhYmxlX2xvY2tlZChjdHgsIGluZGV4LCBwYXJhbXMpOworCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgYXRvbV9paW9fbGVuW10gPSB7IDEsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDMgfTsKIAogc3RhdGljIHZvaWQgYXRvbV9pbmRleF9paW8oc3RydWN0IGF0b21fY29udGV4dCAqY3R4LCBpbnQgYmFzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmgKaW5kZXggNjY3MTg0OC4uNDdmZDk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmgKQEAgLTEyMCw2ICsxMjAsNyBAQAogCiBzdHJ1Y3QgYXRvbV9jb250ZXh0IHsKIAlzdHJ1Y3QgY2FyZF9pbmZvICpjYXJkOworCXN0cnVjdCBtdXRleCBtdXRleDsKIAl2b2lkICpiaW9zOwogCXVpbnQzMl90IGNtZF90YWJsZSwgZGF0YV90YWJsZTsKIAl1aW50MTZfdCAqaWlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVmNDg1MTUuLjkxYWQwZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTQ2OTAsNiArNDY5MCwyMDUgQEAKIAlBVE9NX1BPV0VSTU9ERV9JTkZPX1YzIGFzUG93ZXJQbGF5SW5mb1tBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DS107CiB9IEFUT01fUE9XRVJQTEFZX0lORk9fVjM7CiAKKy8qIE5ldyBQUGxpYiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfVEhFUk1BTENPTlRST0xMRVIKKworeworICAgIFVDSEFSIHVjVHlwZTsgICAgICAgICAgIC8vIG9uZSBvZiBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSXyoKKyAgICBVQ0hBUiB1Y0kyY0xpbmU7ICAgICAgICAvLyBhcyBpbnRlcnByZXRlZCBieSBEQUwgSTJDCisgICAgVUNIQVIgdWNJMmNBZGRyZXNzOworICAgIFVDSEFSIHVjRmFuUGFyYW1ldGVyczsgIC8vIEZhbiBDb250cm9sIFBhcmFtZXRlcnMuCisgICAgVUNIQVIgdWNGYW5NaW5SUE07ICAgICAgLy8gRmFuIE1pbmltdW0gUlBNIChodW5kcmVkcykgLS0gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seS4KKyAgICBVQ0hBUiB1Y0Zhbk1heFJQTTsgICAgICAvLyBGYW4gTWF4aW11bSBSUE0gKGh1bmRyZWRzKSAtLSBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5LgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQ7ICAgICAgIC8vIC0tLS0KKyAgICBVQ0hBUiB1Y0ZsYWdzOyAgICAgICAgICAvLyB0byBiZSBkZWZpbmVkCit9IEFUT01fUFBMSUJfVEhFUk1BTENPTlRST0xMRVI7CisKKyNkZWZpbmUgQVRPTV9QUF9GQU5QQVJBTUVURVJTX1RBQ0hPTUVURVJfUFVMU0VTX1BFUl9SRVZPTFVUSU9OX01BU0sgMHgwZgorI2RlZmluZSBBVE9NX1BQX0ZBTlBBUkFNRVRFUlNfTk9GQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwICAgIC8vIE5vIGZhbiBpcyBjb25uZWN0ZWQgdG8gdGhpcyBjb250cm9sbGVyLgorCisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfTk9ORSAgICAgIDAKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9MTTYzICAgICAgMSAgLy8gTm90IHVzZWQgYnkgUFBMaWIKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9BRE0xMDMyICAgMiAgLy8gTm90IHVzZWQgYnkgUFBMaWIKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9BRE0xMDMwICAgMyAgLy8gTm90IHVzZWQgYnkgUFBMaWIKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9NVUE2NjQ5ICAgNCAgLy8gTm90IHVzZWQgYnkgUFBMaWIKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9MTTY0ICAgICAgNQorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX0Y3NTM3NSAgICA2ICAvLyBOb3QgdXNlZCBieSBQUExpYgorI2RlZmluZSBBVE9NX1BQX1RIRVJNQUxDT05UUk9MTEVSX1JWNnh4ICAgICA3CisjZGVmaW5lIEFUT01fUFBfVEhFUk1BTENPTlRST0xMRVJfUlY3NzAgICAgIDgKKyNkZWZpbmUgQVRPTV9QUF9USEVSTUFMQ09OVFJPTExFUl9BRFQ3NDczICAgOQorCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QUExJQl9TVEFURQoreworICAgIFVDSEFSIHVjTm9uQ2xvY2tTdGF0ZUluZGV4OworICAgIFVDSEFSIHVjQ2xvY2tTdGF0ZUluZGljZXNbMV07IC8vIHZhcmlhYmxlLXNpemVkCit9IEFUT01fUFBMSUJfU1RBVEU7CisKKy8vLy8gQVRPTV9QUExJQl9QT1dFUlBMQVlUQUJMRTo6dWxQbGF0Zm9ybUNhcHMKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfQkFDS0JJQVMgMQorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9QT1dFUlBMQVkgMgorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9TQklPU1BPV0VSU09VUkNFIDQKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfQVNQTV9MMHMgOAorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9BU1BNX0wxIDE2CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX0hBUkRXQVJFREMgMzIKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfR0VNSU5JUFJJTUFSWSA2NAorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9TVEVQVkREQyAxMjgKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfVk9MVEFHRUNPTlRST0wgMjU2CisjZGVmaW5lIEFUT01fUFBfUExBVEZPUk1fQ0FQX1NJREVQT1JUQ09OVFJPTCA1MTIKKyNkZWZpbmUgQVRPTV9QUF9QTEFURk9STV9DQVBfVFVSTk9GRlBMTF9BU1BNTDEgMTAyNAorI2RlZmluZSBBVE9NX1BQX1BMQVRGT1JNX0NBUF9IVExJTktDT05UUk9MIDIwNDgKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEUKK3sKKyAgICAgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOworCisgICAgICBVQ0hBUiB1Y0RhdGFSZXZpc2lvbjsKKworICAgICAgVUNIQVIgdWNOdW1TdGF0ZXM7CisgICAgICBVQ0hBUiB1Y1N0YXRlRW50cnlTaXplOworICAgICAgVUNIQVIgdWNDbG9ja0luZm9TaXplOworICAgICAgVUNIQVIgdWNOb25DbG9ja1NpemU7CisKKyAgICAgIC8vIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHRoaXMgdGFibGUgdG8gYXJyYXkgb2YgdWNOdW1TdGF0ZXMgQVRPTV9QUExJQl9TVEFURSBzdHJ1Y3R1cmVzCisgICAgICBVU0hPUlQgdXNTdGF0ZUFycmF5T2Zmc2V0OworCisgICAgICAvLyBvZmZzZXQgZnJvbSBzdGFydCBvZiB0aGlzIHRhYmxlIHRvIGFycmF5IG9mIEFTSUMtc3BlY2lmaWMgc3RydWN0dXJlcywKKyAgICAgIC8vIGN1cnJlbnRseSBBVE9NX1BQTElCX0NMT0NLX0lORk8uCisgICAgICBVU0hPUlQgdXNDbG9ja0luZm9BcnJheU9mZnNldDsKKworICAgICAgLy8gb2Zmc2V0IGZyb20gc3RhcnQgb2YgdGhpcyB0YWJsZSB0byBhcnJheSBvZiBBVE9NX1BQTElCX05PTkNMT0NLX0lORk8KKyAgICAgIFVTSE9SVCB1c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0OworCisgICAgICBVU0hPUlQgdXNCYWNrYmlhc1RpbWU7ICAgIC8vIGluIG1pY3Jvc2Vjb25kcworICAgICAgVVNIT1JUIHVzVm9sdGFnZVRpbWU7ICAgICAvLyBpbiBtaWNyb3NlY29uZHMKKyAgICAgIFVTSE9SVCB1c1RhYmxlU2l6ZTsgICAgICAgLy90aGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSwgb3IgdGhlIGV4dGVuZGVkIHN0cnVjdHVyZQorCisgICAgICBVTE9ORyB1bFBsYXRmb3JtQ2FwczsgICAgICAgICAgICAvLyBTZWUgQVRPTV9QUExJQl9DQVBTXyoKKworICAgICAgQVRPTV9QUExJQl9USEVSTUFMQ09OVFJPTExFUiAgICBzVGhlcm1hbENvbnRyb2xsZXI7CisKKyAgICAgIFVTSE9SVCB1c0Jvb3RDbG9ja0luZm9PZmZzZXQ7CisgICAgICBVU0hPUlQgdXNCb290Tm9uQ2xvY2tJbmZvT2Zmc2V0OworCit9IEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU7CisKKy8vLy8gQVRPTV9QUExJQl9OT05DTE9DS19JTkZPOjp1c0NsYXNzaWZpY2F0aW9uCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fVUlfTUFTSyAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9TSElGVCAgICAgICAgIDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9OT05FICAgICAgICAgIDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9CQVRURVJZICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9CQUxBTkNFRCAgICAgIDMKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9QRVJGT1JNQU5DRSAgIDUKKy8vIDIsIDQsIDYsIDcgYXJlIHJlc2VydmVkCisKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9CT09UICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1RIRVJNQUwgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fTElNSVRFRFBPV0VSU09VUkNFICAgICAweDAwMjAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9SRVNUICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX0ZPUkNFRCAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fM0RQRVJGT1JNQU5DRSAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9PVkVSRFJJVkVURU1QTEFURSAgICAgIDB4MDIwMAorI2RlZmluZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VWRFNUQVRFICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIEFUT01fUFBMSUJfQ0xBU1NJRklDQVRJT05fM0RMT1cgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9BQ1BJICAgICAgICAgICAgICAgICAgIDB4MTAwMAorLy8gcmVtYWluaW5nIDMgYml0cyBhcmUgcmVzZXJ2ZWQKKworLy8vLyBBVE9NX1BQTElCX05PTkNMT0NLX0lORk86OnVsQ2Fwc0FuZFNldHRpbmdzCisjZGVmaW5lIEFUT01fUFBMSUJfU0lOR0xFX0RJU1BMQVlfT05MWSAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBVE9NX1BQTElCX1NVUFBPUlRTX1ZJREVPX1BMQVlCQUNLICAgICAgICAgMHgwMDAwMDAwMgorCisvLyAwIGlzIDIuNUdiL3MsIDEgaXMgNUdiL3MKKyNkZWZpbmUgQVRPTV9QUExJQl9QQ0lFX0xJTktfU1BFRURfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVRPTV9QUExJQl9QQ0lFX0xJTktfU1BFRURfU0hJRlQgICAgICAgICAgIDIKKworLy8gbGFuZXMgLSAxOiAxLCAyLCA0LCA4LCAxMiwgMTYgcGVybWl0dGVkIGJ5IFBDSUUgc3BlYworI2RlZmluZSBBVE9NX1BQTElCX1BDSUVfTElOS19XSURUSF9NQVNLICAgICAgICAgICAgMHgwMDAwMDBGOAorI2RlZmluZSBBVE9NX1BQTElCX1BDSUVfTElOS19XSURUSF9TSElGVCAgICAgICAgICAgMworCisvLyBsb29rdXAgaW50byByZWR1Y2VkIHJlZnJlc2gtcmF0ZSB0YWJsZQorI2RlZmluZSBBVE9NX1BQTElCX0xJTUlURURfUkVGUkVTSFJBVEVfVkFMVUVfTUFTSyAgMHgwMDAwMEYwMAorI2RlZmluZSBBVE9NX1BQTElCX0xJTUlURURfUkVGUkVTSFJBVEVfVkFMVUVfU0hJRlQgOAorCisjZGVmaW5lIEFUT01fUFBMSUJfTElNSVRFRF9SRUZSRVNIUkFURV9VTkxJTUlURUQgICAgMAorI2RlZmluZSBBVE9NX1BQTElCX0xJTUlURURfUkVGUkVTSFJBVEVfNTBIWiAgICAgICAgIDEKKy8vIDItMTUgVEJEIGFzIG5lZWRlZC4KKworI2RlZmluZSBBVE9NX1BQTElCX1NPRlRXQVJFX0RJU0FCTEVfTE9BREJBTEFOQ0lORyAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBVE9NX1BQTElCX1NPRlRXQVJFX0VOQUJMRV9TTEVFUF9GT1JfVElNRVNUQU1QUyAgMHgwMDAwMjAwMAorI2RlZmluZSBBVE9NX1BQTElCX0VOQUJMRV9WQVJJQlJJR0hUICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorCisjZGVmaW5lIEFUT01fUFBMSUJfRElTQUxMT1dfT05fREMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLy8gQ29udGFpbmVkIGluIGFuIGFycmF5IHN0YXJ0aW5nIGF0IHRoZSBvZmZzZXQKKy8vIGluIEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU6OnVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQuCisvLyByZWZlcmVuY2VkIGZyb20gQVRPTV9QUExJQl9TVEFURV9JTkZPOjp1Y05vbkNsb2NrU3RhdGVJbmRleAordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTworeworICAgICAgVVNIT1JUIHVzQ2xhc3NpZmljYXRpb247CisgICAgICBVQ0hBUiAgdWNNaW5UZW1wZXJhdHVyZTsKKyAgICAgIFVDSEFSICB1Y01heFRlbXBlcmF0dXJlOworICAgICAgVUxPTkcgIHVsQ2Fwc0FuZFNldHRpbmdzOworICAgICAgVUNIQVIgIHVjUmVxdWlyZWRQb3dlcjsKKyAgICAgIFVDSEFSICB1Y1VudXNlZDFbM107Cit9IEFUT01fUFBMSUJfTk9OQ0xPQ0tfSU5GTzsKKworLy8gQ29udGFpbmVkIGluIGFuIGFycmF5IHN0YXJ0aW5nIGF0IHRoZSBvZmZzZXQKKy8vIGluIEFUT01fUFBMSUJfUE9XRVJQTEFZVEFCTEU6OnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQuCisvLyByZWZlcmVuY2VkIGZyb20gQVRPTV9QUExJQl9TVEFURTo6dWNDbG9ja1N0YXRlSW5kaWNlcwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPCit7CisgICAgICBVU0hPUlQgdXNFbmdpbmVDbG9ja0xvdzsKKyAgICAgIFVDSEFSIHVjRW5naW5lQ2xvY2tIaWdoOworCisgICAgICBVU0hPUlQgdXNNZW1vcnlDbG9ja0xvdzsKKyAgICAgIFVDSEFSIHVjTWVtb3J5Q2xvY2tIaWdoOworCisgICAgICBVU0hPUlQgdXNWRERDOworICAgICAgVVNIT1JUIHVzVW51c2VkMTsKKyAgICAgIFVTSE9SVCB1c1VudXNlZDI7CisKKyAgICAgIFVMT05HIHVsRmxhZ3M7IC8vIEFUT01fUFBMSUJfUjYwMF9GTEFHU18qCisKK30gQVRPTV9QUExJQl9SNjAwX0NMT0NLX0lORk87CisKKy8vIHVsRmxhZ3MgaW4gQVRPTV9QUExJQl9SNjAwX0NMT0NLX0lORk8KKyNkZWZpbmUgQVRPTV9QUExJQl9SNjAwX0ZMQUdTX1BDSUVHRU4yICAgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9SNjAwX0ZMQUdTX1VWRFNBRkUgICAgICAgICAgIDIKKyNkZWZpbmUgQVRPTV9QUExJQl9SNjAwX0ZMQUdTX0JBQ0tCSUFTRU5BQkxFICAgIDQKKyNkZWZpbmUgQVRPTV9QUExJQl9SNjAwX0ZMQUdTX01FTU9SWV9PRFRfT0ZGICAgIDgKKyNkZWZpbmUgQVRPTV9QUExJQl9SNjAwX0ZMQUdTX01FTU9SWV9ETExfT0ZGICAgIDE2CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BQTElCX1JTNzgwX0NMT0NLX0lORk8KKworeworICAgICAgVVNIT1JUIHVzTG93RW5naW5lQ2xvY2tMb3c7ICAgICAgICAgLy8gTG93IEVuZ2luZSBjbG9jayBpbiBNSHogKHRoZSBzYW1lIHdheSBhcyBvbiB0aGUgUjYwMCkuCisgICAgICBVQ0hBUiAgdWNMb3dFbmdpbmVDbG9ja0hpZ2g7CisgICAgICBVU0hPUlQgdXNIaWdoRW5naW5lQ2xvY2tMb3c7ICAgICAgICAvLyBIaWdoIEVuZ2luZSBjbG9jayBpbiBNSHouCisgICAgICBVQ0hBUiAgdWNIaWdoRW5naW5lQ2xvY2tIaWdoOworICAgICAgVVNIT1JUIHVzTWVtb3J5Q2xvY2tMb3c7ICAgICAgICAgICAgLy8gRm9yIG5vdyBvbmUgb2YgdGhlIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX1hYWFggY29uc3RhbnRzLgorICAgICAgVUNIQVIgIHVjTWVtb3J5Q2xvY2tIaWdoOyAgICAgICAgICAgLy8gQ3VycmVudHlsIHVudXNlZC4KKyAgICAgIFVDSEFSICB1Y1BhZGRpbmc7ICAgICAgICAgICAgICAgICAgIC8vIEZvciBwcm9wZXIgYWxpZ25tZW50IGFuZCBzaXplLgorICAgICAgVVNIT1JUIHVzVkREQzsgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSA3ODAsIHVzZTogTm9uZSwgTG93LCBIaWdoLCBWYXJpYWJsZQorICAgICAgVUNIQVIgIHVjTWF4SFRMaW5rV2lkdGg7ICAgICAgICAgICAgLy8gRnJvbSBTQklPUyAtIHsyLCA0LCA4LCAxNn0KKyAgICAgIFVDSEFSICB1Y01pbkhUTGlua1dpZHRoOyAgICAgICAgICAgIC8vIEZyb20gU0JJT1MgLSB7MiwgNCwgOCwgMTZ9LiBFZmZlY3RpdmUgb25seSBpZiBDRExXIGVuYWJsZWQuIE1pbmltdW0gZG93biBzdHJlYW0gd2lkdGggY291bGQgYmUgYmlnZ2VyIGFzIGRpc3BsYXkgQlcgcmVxdXJpZW1lbnQuCisgICAgICBVU0hPUlQgdXNIVExpbmtGcmVxOyAgICAgICAgICAgICAgICAvLyBTZWUgZGVmaW5pdGlvbiBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfeHh4IG9yIGluIE1Ieig+PTIwMCkuCisgICAgICBVTE9ORyAgdWxGbGFnczsKK30gQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPOworCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9OT05FICAgICAgIDAKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX0xPVyAgICAgICAgMQorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfSElHSCAgICAgICAyCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9WQVJJQUJMRSAgIDMKKworI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19OT05FICAgICAgICAwICAgLy8gV2UgY2Fubm90IGNoYW5nZSB0aGUgc2lkZSBwb3J0IG1lbW9yeSBjbG9jaywgbGVhdmUgaXQgYXMgaXQgaXMuCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX0xPVyAgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfSElHSCAgICAgICAgMgorCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9OT05FICAgICAgIDAKKyNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX0xPVyAgICAgICAgMQorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfSElHSCAgICAgICAyCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGNvbXBhdGlibGl0eSBpc3N1ZSBpbiBkaWZmZXJlbnQgU1cgY29tcG9uZW50cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCAwZDYzYzQ0Li4zZWIwY2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC00NjgsNyArNDY4LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvcjsKIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB8fAorCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSkKIAkJcmV0dXJuOwogCiAJcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKQEAgLTU4Miw3ICs1ODMsOCBAQAogCXU4IHRyYWluX3NldFs0XTsKIAlpbnQgaTsKIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB8fAorCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL21rcmVndGFibGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCmluZGV4IDBkNzk1NzcuLjYwNzI0MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCkBAIC02NjEsOCArNjYxLDEwIEBACiAJZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOwogCiAJLyogZ2V0IGhlYWRlciAqLwotCWlmIChmZ2V0cyhidWYsIDEwMjQsIGZpbGUpID09IE5VTEwpCisJaWYgKGZnZXRzKGJ1ZiwgMTAyNCwgZmlsZSkgPT0gTlVMTCkgeworCQlmY2xvc2UoZmlsZSk7CiAJCXJldHVybiAtMTsKKwl9CiAKIAkvKiBmaXJzdCBsaW5lIHdpbGwgY29udGFpbiB0aGUgbGFzdCByZWdpc3RlcgogCSAqIGFuZCBncHUgbmFtZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCA4NGU1ZGY3Li44NzYwZDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtMTMxLDcgKzEzMSw4IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlyMTAwX2lycV9zZXQocmRldik7CisJaWYgKHJkZXYtPmlycS5pbnN0YWxsZWQpCisJCXIxMDBfaXJxX3NldChyZGV2KTsKIH0KIAogdm9pZCByMTAwX2hwZF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMjQzLDYgKzI0NCwxMSBAQAogewogCXVpbnQzMl90IHRtcCA9IDA7CiAKKwlpZiAoIXJkZXYtPmlycS5pbnN0YWxsZWQpIHsKKwkJV0FSTigxLCAiQ2FuJ3QgZW5hYmxlIElSUS9NU0kgYmVjYXVzZSBubyBoYW5kbGVyIGlzIGluc3RhbGxlZC5cbiIpOworCQlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCWlmIChyZGV2LT5pcnEuc3dfaW50KSB7CiAJCXRtcCB8PSBSQURFT05fU1dfSU5UX0VOQUJMRTsKIAl9CkBAIC0zNTYsNiArMzYyLDExIEBACiAJLyogV2FpdCB1bnRpbCBJRExFICYgQ0xFQU4gKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcyMCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE2KSB8ICgxIDw8IDE3KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fSE9TVF9QQVRIX0NOVEwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCByZGV2LT5jb25maWcucjEwMC5oZHBfY250bCB8CisJCQkJUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHJkZXYtPmNvbmZpZy5yMTAwLmhkcF9jbnRsKTsKIAkvKiBFbWl0IGZlbmNlIHNlcXVlbmNlICYgZmlyZSBJUlEgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZywgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGZlbmNlLT5zZXEpOwpAQCAtMTcxMywxNCArMTcyNCw2IEBACiAJcjEwMF9oZHBfcmVzZXQocmRldik7CiB9CiAKLXZvaWQgcjEwMF9oZHBfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdTMyIHRtcDsKLQl0bXAgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQl0bXAgfD0gUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFOwotCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCk7Ci19Ci0KIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMjg4MSw2ICsyODg0LDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9jYjsgaSsrKSB7CiAJCWlmICh0cmFjay0+Y2JbaV0ucm9iaiA9PSBOVUxMKSB7CisJCQlpZiAoISh0cmFjay0+ZmFzdGZpbGwgfHwgdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayB8fAorCQkJICAgICAgdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIGNvbG9yIGJ1ZmZlciAlZCAhXG4iLCBpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zMzA5LDYgKzMzMTYsNyBAQAogCX0KIAkvKiBFbmFibGUgSVJRICovCiAJcjEwMF9pcnFfc2V0KHJkZXYpOworCXJkZXYtPmNvbmZpZy5yMTAwLmhkcF9jbnRsID0gUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7CiAJLyogMU0gcmluZyBidWZmZXIgKi8KIAlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKIAlpZiAocikgewpAQCAtMzM2Nyw2ICszMzc1LDcgQEAKIAlyYWRlb25fZ2VtX2ZpbmkocmRldik7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKIAkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fYm9fZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzE4OGMzNy4uYjI3YTY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTY3LDEzICs2NywxNSBAQAogCXVuc2lnbmVkCQkJaW1tZF9kd29yZHM7CiAJdW5zaWduZWQJCQludW1fYXJyYXlzOwogCXVuc2lnbmVkCQkJbWF4X2luZHg7CisJdW5zaWduZWQJCQljb2xvcl9jaGFubmVsX21hc2s7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfYXJyYXkJYXJyYXlzWzExXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJY2JbUjMwMF9NQVhfQ0JdOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAl6YjsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlCXRleHR1cmVzW1IzMDBfVFJBQ0tfTUFYX1RFWFRVUkVdOwogCWJvb2wJCQkJel9lbmFibGVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVfY3ViZTsKLQorCWJvb2wJCQkJZmFzdGZpbGw7CisJYm9vbAkJCQlibGVuZF9yZWFkX2VuYWJsZTsKIH07CiAKIGludCByMTAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCA4MzQ5MGMyLi4wMDUxZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtMzYsNyArMzYsMTUgQEAKICNpbmNsdWRlICJydjM1MGQuaCIKICNpbmNsdWRlICJyMzAwX3JlZ19zYWZlLmgiCiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCAqLworLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwCisgKgorICogR1BVIEVycmF0YToKKyAqIC0gSE9TVF9QQVRIX0NOVEw6IHIzMDAgZmFtaWx5IHNlZW1zIHRvIGRpc2xpa2Ugd3JpdGUgdG8gSE9TVF9QQVRIX0NOVEwKKyAqICAgdXNpbmcgTU1JTyB0byBmbHVzaCBob3N0IHBhdGggcmVhZCBjYWNoZSwgdGhpcyBsZWFkIHRvIEhBUkRMT0NLVVAuCisgKiAgIEhvd2V2ZXIsIHNjaGVkdWxpbmcgc3VjaCB3cml0ZSB0byB0aGUgcmluZyBzZWVtcyBoYXJtbGVzcywgaSBzdXNwZWN0CisgKiAgIHRoZSBDUCByZWFkIGNvbGxpZGUgd2l0aCB0aGUgZmx1c2ggc29tZWhvdywgb3IgbWF5YmUgdGhlIE1DLCBoYXJkIHRvCisgKiAgIHRlbGwuIChKZXJvbWUgR2xpc3NlKQorICovCiAKIC8qCiAgKiBydjM3MCxydjM4MCBQQ0lFIEdBUlQKQEAgLTE3OCw2ICsxODYsMTEgQEAKIAkvKiBXYWl0IHVudGlsIElETEUgJiBDTEVBTiAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHgxNzIwLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKDEgPDwgMTcpIHwgKDEgPDwgMTYpICB8ICgxIDw8IDkpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHJkZXYtPmNvbmZpZy5yMzAwLmhkcF9jbnRsIHwKKwkJCQlSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgcmRldi0+Y29uZmlnLnIzMDAuaGRwX2NudGwpOwogCS8qIEVtaXQgZmVuY2Ugc2VxdWVuY2UgJiBmaXJlIElSUSAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZmVuY2UtPnNlcSk7CkBAIC04ODcsNiArOTAwLDE0IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfRFhUMTsKIAkJCWJyZWFrOworCQljYXNlIFIzMDBfVFhfRk9STUFUX0FUSTJOOgorCQkJaWYgKHAtPnJkZXYtPmZhbWlseSA8IENISVBfUjQyMCkgeworCQkJCURSTV9FUlJPUigiSW52YWxpZCB0ZXh0dXJlIGZvcm1hdCAldVxuIiwKKwkJCQkJICAoaWR4X3ZhbHVlICYgMHgxRikpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJLyogVGhlIHNhbWUgcnVsZXMgYXBwbHkgYXMgZm9yIERYVDMvNS4gKi8KKwkJCS8qIFBhc3MgdGhyb3VnaC4gKi8KIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9EWFQzOgogCQljYXNlIFIzMDBfVFhfRk9STUFUX0RYVDU6CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gMTsKQEAgLTk1MSw2ICs5NzIsMTYgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aF8xMSA9IHRtcDsKIAkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodF8xMSA9IHRtcDsKKworCQkJLyogQVRJMU4gKi8KKwkJCWlmIChpZHhfdmFsdWUgJiAoMSA8PCAxNCkpIHsKKwkJCQkvKiBUaGUgc2FtZSBydWxlcyBhcHBseSBhcyBmb3IgRFhUMS4gKi8KKwkJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0KKwkJCQkJUjEwMF9UUkFDS19DT01QX0RYVDE7CisJCQl9CisJCX0gZWxzZSBpZiAoaWR4X3ZhbHVlICYgKDEgPDwgMTQpKSB7CisJCQlEUk1fRVJST1IoIkZvcmJpZGRlbiBiaXQgVFhGT1JNQVRfTVNCXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg0NDgwOgpAQCAtOTkyLDYgKzEwMjMsMTggQEAKIAkJfQogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOworCWNhc2UgMHg0ZTBjOgorCQkvKiBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSyAqLworCQl0cmFjay0+Y29sb3JfY2hhbm5lbF9tYXNrID0gaWR4X3ZhbHVlOworCQlicmVhazsKKwljYXNlIDB4NGQxYzoKKwkJLyogWkJfQldfQ05UTCAqLworCQl0cmFjay0+ZmFzdGZpbGwgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCAyKSk7CisJCWJyZWFrOworCWNhc2UgMHg0ZTA0OgorCQkvKiBSQjNEX0JMRU5EQ05UTCAqLworCQl0cmFjay0+YmxlbmRfcmVhZF9lbmFibGUgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCAyKSk7CisJCWJyZWFrOwogCWNhc2UgMHg0YmU4OgogCQkvKiB2YWxpZCByZWdpc3RlciBvbmx5IG9uIFJWNTMwICovCiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjUzMCkKQEAgLTEyMjgsNiArMTI3MSw3IEBACiAJfQogCS8qIEVuYWJsZSBJUlEgKi8KIAlyMTAwX2lycV9zZXQocmRldik7CisJcmRldi0+Y29uZmlnLnIzMDAuaGRwX2NudGwgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7CkBAIC0xMjkyLDYgKzEzMzYsNyBAQAogCQlydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQogCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2FncF9maW5pKHJkZXYpOwogCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CiAJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOwogCXJhZGVvbl9ib19maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IGNiMmU0NzAuLjM0YmZmYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCWludCBzejsKIAlpbnQgYWRkcjsKIAlpbnQgdHlwZTsKLQlpbnQgY2xhbXA7CisJaW50IGlzY2xhbXA7CiAJaW50IHN0cmlkZTsKIAlSSU5HX0xPQ0FMUzsKIApAQCAtOTk5LDEwICs5OTksMTAgQEAKIAlhZGRyID0gKChoZWFkZXIucjUwMGZwLmFkcmhpX2ZsYWdzICYgMSkgPDwgOCkgfCBoZWFkZXIucjUwMGZwLmFkcmxvOwogCiAJdHlwZSA9ICEhKGhlYWRlci5yNTAwZnAuYWRyaGlfZmxhZ3MgJiBSNTAwRlBfQ09OU1RBTlRfVFlQRSk7Ci0JY2xhbXAgPSAhIShoZWFkZXIucjUwMGZwLmFkcmhpX2ZsYWdzICYgUjUwMEZQX0NPTlNUQU5UX0NMQU1QKTsKKwlpc2NsYW1wID0gISEoaGVhZGVyLnI1MDBmcC5hZHJoaV9mbGFncyAmIFI1MDBGUF9DT05TVEFOVF9DTEFNUCk7CiAKIAlhZGRyIHw9ICh0eXBlIDw8IDE2KTsKLQlhZGRyIHw9IChjbGFtcCA8PCAxNyk7CisJYWRkciB8PSAoaXNjbGFtcCA8PCAxNyk7CiAKIAlzdHJpZGUgPSB0eXBlID8gNCA6IDY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAppbmRleCA0YjdhZmVmLi4xNzM1YTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCkBAIC05MDAsNiArOTAwLDcgQEAKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0ZMX0kzMgkJICAgIDB4MUIKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0ZMX0kzMkEzMgkJICAgIDB4MUMKICMJZGVmaW5lIFIzMDBfVFhfRk9STUFUX0ZMX1IzMkczMkIzMkEzMgkgICAgMHgxRAorIwlkZWZpbmUgUjMwMF9UWF9GT1JNQVRfQVRJMk4JCSAgICAweDFGCiAJLyogYWxwaGEgbW9kZXMsIGNvbnZlbmllbmNlIG1vc3RseSAqLwogCS8qIGlmIHlvdSBoYXZlIGFscGhhLCBwaWNrIGNvbnN0YW50IGFwcHJvcHJpYXRlIHRvIHRoZQogCSAgIG51bWJlciBvZiBjaGFubmVscyAoMSBmb3IgSTgsIDIgZm9yIEk4QTgsIDQgZm9yIFI4RzhCOEE4LCBldGMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggYzA1YTcyNy4uMDUzNDA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTMwLDcgKzMwLDE1IEBACiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKKyNpbmNsdWRlICJyMTAwZC5oIgogI2luY2x1ZGUgInI0MjBkLmgiCisjaW5jbHVkZSAicjQyMF9yZWdfc2FmZS5oIgorCitzdGF0aWMgdm9pZCByNDIwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHI0MjBfcmVnX3NhZmVfYm07CisJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjQyMF9yZWdfc2FmZV9ibSk7Cit9CiAKIGludCByNDIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CkBAIC0xNjUsNiArMTczLDM0IEBACiAJV1JFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwsIHNjbGtfY250bCk7CiB9CiAKK3N0YXRpYyB2b2lkIHI0MjBfY3BfZXJyYXRhX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogUlY0MTAgYW5kIFI0MjAgY2FuIGxvY2sgdXAgaWYgQ1AgRE1BIHRvIGhvc3QgbWVtb3J5IGhhcHBlbnMKKwkgKiB3aGlsZSB0aGUgMkQgZW5naW5lIGlzIGJ1c3kuCisJICoKKwkgKiBUaGUgcHJvcGVyIHdvcmthcm91bmQgaXMgdG8gcXVldWUgYSBSRVNZTkMgYXQgdGhlIGJlZ2lubmluZworCSAqIG9mIHRoZSBDUCBpbml0LCBhcHBhcmVudGx5LgorCSAqLworCXJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmcmRldi0+Y29uZmlnLnIzMDAucmVzeW5jX3NjcmF0Y2gpOworCXJhZGVvbl9yaW5nX2xvY2socmRldiwgOCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSMzAwX0NQX1JFU1lOQ19BRERSLCAxKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgcmRldi0+Y29uZmlnLnIzMDAucmVzeW5jX3NjcmF0Y2gpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4REVBREJFRUYpOworCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7Cit9CisKK3N0YXRpYyB2b2lkIHI0MjBfY3BfZXJyYXRhX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogQ2F0Y2ggdGhlIFJFU1lOQyB3ZSBkaXNwYXRjaGVkIGFsbCB0aGUgd2F5IGJhY2ssCisJICogYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBDUCBpbml0LgorCSAqLworCXJhZGVvbl9yaW5nX2xvY2socmRldiwgOCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSMzAwX1JCM0RfRFNUQ0FDSEVfQ1RMU1RBVCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFIzMDBfUkIzRF9EQ19GSU5JU0gpOworCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7CisJcmFkZW9uX3NjcmF0Y2hfZnJlZShyZGV2LCByZGV2LT5jb25maWcucjMwMC5yZXN5bmNfc2NyYXRjaCk7Cit9CisKIHN0YXRpYyBpbnQgcjQyMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByOwpAQCAtMTkwLDEyICsyMjYsMTQgQEAKIAlyNDIwX3BpcGVzX2luaXQocmRldik7CiAJLyogRW5hYmxlIElSUSAqLwogCXIxMDBfaXJxX3NldChyZGV2KTsKKwlyZGV2LT5jb25maWcucjMwMC5oZHBfY250bCA9IFJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwogCS8qIDFNIHJpbmcgYnVmZmVyICovCiAJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CiAJaWYgKHIpIHsKIAkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwogCX0KKwlyNDIwX2NwX2VycmF0YV9pbml0KHJkZXYpOwogCXIgPSByMTAwX3diX2luaXQocmRldik7CiAJaWYgKHIpIHsKIAkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CkBAIC0yMzgsNiArMjc2LDcgQEAKIAogaW50IHI0MjBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlyNDIwX2NwX2VycmF0YV9maW5pKHJkZXYpOwogCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKIAlyMTAwX3diX2Rpc2FibGUocmRldik7CiAJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKQEAgLTM0Niw3ICszODUsNyBAQAogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KLQlyMzAwX3NldF9yZWdfc2FmZShyZGV2KTsKKwlyNDIwX3NldF9yZWdfc2FmZShyZGV2KTsKIAlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKIAlyID0gcjQyMF9zdGFydHVwKHJkZXYpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IDBmMzg0M2IuLjlhMTg5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC0xODYsNiArMTg2LDcgQEAKIAl9CiAJLyogRW5hYmxlIElSUSAqLwogCXJzNjAwX2lycV9zZXQocmRldik7CisJcmRldi0+Y29uZmlnLnIzMDAuaGRwX2NudGwgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGEwYWMzYzEuLmMwNjUxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0yODUsNyArMjg1LDggQEAKIAkJCX0KIAkJfQogCX0KLQlyNjAwX2lycV9zZXQocmRldik7CisJaWYgKHJkZXYtPmlycS5pbnN0YWxsZWQpCisJCXI2MDBfaXJxX3NldChyZGV2KTsKIH0KIAogdm9pZCByNjAwX2hwZF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtNzI2LDYgKzcyNywxMCBAQAogCWEuZnVsbCA9IHJmaXhlZF9jb25zdCgxMDApOwogCXJkZXYtPnBtLnNjbGsuZnVsbCA9IHJmaXhlZF9jb25zdChyZGV2LT5jbG9jay5kZWZhdWx0X3NjbGspOwogCXJkZXYtPnBtLnNjbGsuZnVsbCA9IHJmaXhlZF9kaXYocmRldi0+cG0uc2NsaywgYSk7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQlyZGV2LT5tYy5pZ3Bfc2lkZXBvcnRfZW5hYmxlZCA9IHJhZGVvbl9hdG9tYmlvc19zaWRlcG9ydF9wcmVzZW50KHJkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzODQsMTEgKzEzODksNiBAQAogCSh2b2lkKVJSRUczMihQQ0lFX1BPUlRfREFUQSk7CiB9CiAKLXZvaWQgcjYwMF9oZHBfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JV1JFRzMyKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDB4MSk7Ci19Ci0KIC8qCiAgKiBDUCAmIFJpbmcKICAqLwpAQCAtMTc4NSw2ICsxNzg1LDggQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoKHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZmVuY2UtPnNlcSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSXzAwNTQ4MF9IRFBfTUVNX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CiAJLyogQ1BfSU5URVJSVVBUIHBhY2tldCAzIG5vIGxvbmdlciBleGlzdHMsIHVzZSBwYWNrZXQgMCAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoQ1BfSU5UX1NUQVRVUywgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJCX0lOVF9TVEFUKTsKQEAgLTIwODksOCArMjA5MSw3IEBACiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKLQkJcmFkZW9uX2FncF9maW5pKHJkZXYpOworCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAlyYWRlb25fYm9fZmluaShyZGV2KTsKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKQEAgLTI0NjEsNiArMjQ2MiwxMCBAQAogCXUzMiBtb2RlX2ludCA9IDA7CiAJdTMyIGhwZDEsIGhwZDIsIGhwZDMsIGhwZDQgPSAwLCBocGQ1ID0gMCwgaHBkNiA9IDA7CiAKKwlpZiAoIXJkZXYtPmlycS5pbnN0YWxsZWQpIHsKKwkJV0FSTigxLCAiQ2FuJ3QgZW5hYmxlIElSUS9NU0kgYmVjYXVzZSBubyBoYW5kbGVyIGlzIGluc3RhbGxlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJLyogZG9uJ3QgZW5hYmxlIGFueXRoaW5nIGlmIHRoZSBpaCBpcyBkaXNhYmxlZCAqLwogCWlmICghcmRldi0+aWguZW5hYmxlZCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCmluZGV4IDlhZWNhZmIuLjg3ODdlYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jCkBAIC01NzcsOSArNTc3LDkgQEAKIAlyaW5nX3NpemUgPSBudW1fbG9vcHMgKiBkd29yZHNfcGVyX2xvb3A7CiAJLyogc2V0IGRlZmF1bHQgICsgc2hhZGVycyAqLwogCXJpbmdfc2l6ZSArPSA0MDsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLwotCXJpbmdfc2l6ZSArPSA1OyAvKiBmZW5jZSBlbWl0IGZvciBWQiBJQiAqLworCXJpbmdfc2l6ZSArPSA3OyAvKiBmZW5jZSBlbWl0IGZvciBWQiBJQiAqLwogCXJpbmdfc2l6ZSArPSA1OyAvKiBkb25lIGNvcHkgKi8KLQlyaW5nX3NpemUgKz0gNTsgLyogZmVuY2UgZW1pdCBmb3IgZG9uZSBjb3B5ICovCisJcmluZ19zaXplICs9IDc7IC8qIGZlbmNlIGVtaXQgZm9yIGRvbmUgY29weSAqLwogCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIHJpbmdfc2l6ZSk7CiAJV0FSTl9PTihyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCAwZDgyMDc2Li40NDA2MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JKmNzX3JlbG9jID0gJnAtPnJlbG9jc1swXTsKKwkqY3NfcmVsb2MgPSBwLT5yZWxvY3M7CiAJKCpjc19yZWxvYyktPmxvYmouZ3B1X29mZnNldCA9ICh1NjQpcmVsb2NzX2NodW5rLT5rZGF0YVtpZHggKyAzXSA8PCAzMjsKIAkoKmNzX3JlbG9jKS0+bG9iai5ncHVfb2Zmc2V0IHw9IHJlbG9jc19jaHVuay0+a2RhdGFbaWR4ICsgMF07CiAJcmV0dXJuIDA7CkBAIC03MTcsNyArNzE3LDcgQEAKIAlpZiAocC0+Y2h1bmtfcmVsb2NzX2lkeCA9PSAtMSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JcC0+cmVsb2NzID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJhZGVvbl9jc19yZWxvYyksIEdGUF9LRVJORUwpOworCXAtPnJlbG9jcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY3NfcmVsb2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAocC0+cmVsb2NzID09IE5VTEwpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggY2Q2NTBmZC4uZWI1Zjk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0xNjIsNiArMTYyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQljcmVhdGVkOwogCXN0cnVjdCBsaXN0X2hlYWQJCWVtaXRlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWduYWxlZDsKKwlib29sCQkJCWluaXRpYWxpemVkOwogfTsKIAogc3RydWN0IHJhZGVvbl9mZW5jZSB7CkBAIC0yMDIsOCArMjAzLDkgQEAKIHN0cnVjdCByYWRlb25fbW1hbiB7CiAJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmICAgICAgICBib19nbG9iYWxfcmVmOwogCXN0cnVjdCB0dG1fZ2xvYmFsX3JlZmVyZW5jZQltZW1fZ2xvYmFsX3JlZjsKLQlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZQkJYmRldjsKKwlib29sCQkJCW1lbV9nbG9iYWxfcmVmZXJlbmNlZDsKKwlib29sCQkJCWluaXRpYWxpemVkOwogfTsKIAogc3RydWN0IHJhZGVvbl9ibyB7CkBAIC0zMTcsMTAgKzMxOSwxMiBAQAogCXU2NAkJCXJlYWxfdnJhbV9zaXplOwogCWludAkJCXZyYW1fbXRycjsKIAlib29sCQkJdnJhbV9pc19kZHI7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgaWdwX3NpZGVwb3J0X2VuYWJsZWQ7CiB9OwogCiBpbnQgcmFkZW9uX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQorYm9vbCByYWRlb25fY29tYmlvc19zaWRlcG9ydF9wcmVzZW50KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2Jvb2wgcmFkZW9uX2F0b21iaW9zX3NpZGVwb3J0X3ByZXNlbnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogR1BVIHNjcmF0Y2ggcmVnaXN0ZXJzIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucyAmIGhlbHBlcnMKQEAgLTY1Miw3ICs2NTYsNiBAQAogCQkJICAgICAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgb2JqX3NpemUpOwogCWludCAoKmNsZWFyX3N1cmZhY2VfcmVnKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHJlZyk7CiAJdm9pZCAoKmJhbmR3aWR0aF91cGRhdGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqaGRwX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmhwZF9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmhwZF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJYm9vbCAoKmhwZF9zZW5zZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGVudW0gcmFkZW9uX2hwZF9pZCBocGQpOwpAQCAtNjY1LDExICs2NjgsMTQgQEAKIHN0cnVjdCByMTAwX2FzaWMgewogCWNvbnN0IHVuc2lnbmVkCSpyZWdfc2FmZV9ibTsKIAl1bnNpZ25lZAlyZWdfc2FmZV9ibV9zaXplOworCXUzMgkJaGRwX2NudGw7CiB9OwogCiBzdHJ1Y3QgcjMwMF9hc2ljIHsKIAljb25zdCB1bnNpZ25lZAkqcmVnX3NhZmVfYm07CiAJdW5zaWduZWQJcmVnX3NhZmVfYm1fc2l6ZTsKKwl1MzIJCXJlc3luY19zY3JhdGNoOworCXUzMgkJaGRwX2NudGw7CiB9OwogCiBzdHJ1Y3QgcjYwMF9hc2ljIHsKQEAgLTEwMDUsNyArMTAxMSw2IEBACiAjZGVmaW5lIHJhZGVvbl9zZXRfc3VyZmFjZV9yZWcocmRldiwgciwgZiwgcCwgbywgcykgKChyZGV2KS0+YXNpYy0+c2V0X3N1cmZhY2VfcmVnKChyZGV2KSwgKHIpLCAoZiksIChwKSwgKG8pLCAocykpKQogI2RlZmluZSByYWRlb25fY2xlYXJfc3VyZmFjZV9yZWcocmRldiwgcikgKChyZGV2KS0+YXNpYy0+Y2xlYXJfc3VyZmFjZV9yZWcoKHJkZXYpLCAocikpKQogI2RlZmluZSByYWRlb25fYmFuZHdpZHRoX3VwZGF0ZShyZGV2KSAocmRldiktPmFzaWMtPmJhbmR3aWR0aF91cGRhdGUoKHJkZXYpKQotI2RlZmluZSByYWRlb25faGRwX2ZsdXNoKHJkZXYpIChyZGV2KS0+YXNpYy0+aGRwX2ZsdXNoKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2hwZF9pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+aHBkX2luaXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25faHBkX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5ocGRfZmluaSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9ocGRfc2Vuc2UocmRldiwgaHBkKSAocmRldiktPmFzaWMtPmhwZF9zZW5zZSgocmRldiksIChocGQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYwppbmRleCA1NGJmNDlhLi4yMjBmNDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hZ3AuYwpAQCAtMjUyLDEwICsyNTIsOCBAQAogdm9pZCByYWRlb25fYWdwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlpZiAocmRldi0+ZGRldi0+YWdwICYmIHJkZXYtPmRkZXYtPmFncC0+YWNxdWlyZWQpIHsKLQkJCWRybV9hZ3BfcmVsZWFzZShyZGV2LT5kZGV2KTsKLQkJfQorCWlmIChyZGV2LT5kZGV2LT5hZ3AgJiYgcmRldi0+ZGRldi0+YWdwLT5hY3F1aXJlZCkgeworCQlkcm1fYWdwX3JlbGVhc2UocmRldi0+ZGRldik7CiAJfQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggNjM2MTE2Yi4uZjJmYmQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtMzMsNiArMzMsNyBAQAogICovCiB1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCiB1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTc2LDcgKzc3LDYgQEAKIHZvaWQgcjEwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKIGludCByMTAwX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfaGRwX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9ocGRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfaHBkX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogYm9vbCByMTAwX2hwZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7CkBAIC0xMDYsMTQgKzEwNiwxMyBAQAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCi0JLmdldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCiAJLmJhbmR3aWR0aF91cGRhdGUgPSAmcjEwMF9iYW5kd2lkdGhfdXBkYXRlLAotCS5oZHBfZmx1c2ggPSAmcjEwMF9oZHBfZmx1c2gsCiAJLmhwZF9pbml0ID0gJnIxMDBfaHBkX2luaXQsCiAJLmhwZF9maW5pID0gJnIxMDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyMTAwX2hwZF9zZW5zZSwKQEAgLTE2NiwxNCArMTY1LDEzIEBACiAJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKLQkuZ2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByMTAwX2NsZWFyX3N1cmZhY2VfcmVnLAogCS5iYW5kd2lkdGhfdXBkYXRlID0gJnIxMDBfYmFuZHdpZHRoX3VwZGF0ZSwKLQkuaGRwX2ZsdXNoID0gJnIxMDBfaGRwX2ZsdXNoLAogCS5ocGRfaW5pdCA9ICZyMTAwX2hwZF9pbml0LAogCS5ocGRfZmluaSA9ICZyMTAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcjEwMF9ocGRfc2Vuc2UsCkBAIC0yMTcsNyArMjE1LDYgQEAKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjEwMF9jbGVhcl9zdXJmYWNlX3JlZywKIAkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyMTAwX2JhbmR3aWR0aF91cGRhdGUsCi0JLmhkcF9mbHVzaCA9ICZyMTAwX2hkcF9mbHVzaCwKIAkuaHBkX2luaXQgPSAmcjEwMF9ocGRfaW5pdCwKIAkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLApAQCAtMjU5LDE0ICsyNTYsMTMgQEAKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAotCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByMTAwX2NsZWFyX3N1cmZhY2VfcmVnLAogCS5iYW5kd2lkdGhfdXBkYXRlID0gJnIxMDBfYmFuZHdpZHRoX3VwZGF0ZSwKLQkuaGRwX2ZsdXNoID0gJnIxMDBfaGRwX2ZsdXNoLAogCS5ocGRfaW5pdCA9ICZyMTAwX2hwZF9pbml0LAogCS5ocGRfZmluaSA9ICZyMTAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcjEwMF9ocGRfc2Vuc2UsCkBAIC0zMjMsNyArMzE5LDYgQEAKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnM2MDBfYmFuZHdpZHRoX3VwZGF0ZSwKLQkuaGRwX2ZsdXNoID0gJnIxMDBfaGRwX2ZsdXNoLAogCS5ocGRfaW5pdCA9ICZyczYwMF9ocGRfaW5pdCwKIAkuaHBkX2ZpbmkgPSAmcnM2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyczYwMF9ocGRfc2Vuc2UsCkBAIC0zNzEsNyArMzY2LDYgQEAKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjEwMF9jbGVhcl9zdXJmYWNlX3JlZywKIAkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyczY5MF9iYW5kd2lkdGhfdXBkYXRlLAotCS5oZHBfZmx1c2ggPSAmcjEwMF9oZHBfZmx1c2gsCiAJLmhwZF9pbml0ID0gJnJzNjAwX2hwZF9pbml0LAogCS5ocGRfZmluaSA9ICZyczYwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnJzNjAwX2hwZF9zZW5zZSwKQEAgLTQyMyw3ICs0MTcsNiBAQAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByMTAwX2NsZWFyX3N1cmZhY2VfcmVnLAogCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCi0JLmhkcF9mbHVzaCA9ICZyMTAwX2hkcF9mbHVzaCwKIAkuaHBkX2luaXQgPSAmcnM2MDBfaHBkX2luaXQsCiAJLmhwZF9maW5pID0gJnJzNjAwX2hwZF9maW5pLAogCS5ocGRfc2Vuc2UgPSAmcnM2MDBfaHBkX3NlbnNlLApAQCAtNDY2LDcgKzQ1OSw2IEBACiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCiAJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZSwKLQkuaGRwX2ZsdXNoID0gJnIxMDBfaGRwX2ZsdXNoLAogCS5ocGRfaW5pdCA9ICZyczYwMF9ocGRfaW5pdCwKIAkuaHBkX2ZpbmkgPSAmcnM2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyczYwMF9ocGRfc2Vuc2UsCkBAIC01MDcsNyArNDk5LDYgQEAKIGludCByNjAwX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7Ci12b2lkIHI2MDBfaGRwX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjYwMF9ocGRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHI2MDBfaHBkX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogYm9vbCByNjAwX2hwZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7CkBAIC01NDMsNyArNTM0LDYgQEAKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKIAkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZydjUxNV9iYW5kd2lkdGhfdXBkYXRlLAotCS5oZHBfZmx1c2ggPSAmcjYwMF9oZHBfZmx1c2gsCiAJLmhwZF9pbml0ID0gJnI2MDBfaHBkX2luaXQsCiAJLmhwZF9maW5pID0gJnI2MDBfaHBkX2ZpbmksCiAJLmhwZF9zZW5zZSA9ICZyNjAwX2hwZF9zZW5zZSwKQEAgLTU4OCw3ICs1NzgsNiBAQAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAogCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCi0JLmhkcF9mbHVzaCA9ICZyNjAwX2hkcF9mbHVzaCwKIAkuaHBkX2luaXQgPSAmcjYwMF9ocGRfaW5pdCwKIAkuaHBkX2ZpbmkgPSAmcjYwMF9ocGRfZmluaSwKIAkuaHBkX3NlbnNlID0gJnI2MDBfaHBkX3NlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggMTJhMGM3Ni4uZmE4MmNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIAkJCWkyYy5pMmNfaWQgPSBncGlvLT5zdWNJMmNJZC51Y0FjY2VzczsKIAogCQkJaTJjLnZhbGlkID0gdHJ1ZTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0zNDUsNyArMzQ2LDkgQEAKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKIAlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biwKLQlEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQKKwlEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQsCisJRFJNX01PREVfQ09OTkVDVE9SX2VEUCwKKwlEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bgogfTsKIAogYm9vbCByYWRlb25fZ2V0X2F0b21fY29ubmVjdG9yX2luZm9fZnJvbV9vYmplY3RfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTc0NSw4ICs3NDgsNyBAQAogCQllbHNlCiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2lkKGRldiwKLQkJCQkJCQkJCSgxIDw8Ci0JCQkJCQkJCQkgaSksCisJCQkJCQkJCQkoMSA8PCBpKSwKIAkJCQkJCQkJCWRhYyksCiAJCQkJCQkgICgxIDw8IGkpKTsKIAl9CkBAIC03NTgsMzIgKzc2MCwzMCBAQAogCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbal0udmFsaWQgJiYgKGkgIT0gaikpIHsKIAkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tpXS5saW5lX211eCA9PQogCQkJCQkgICAgYmlvc19jb25uZWN0b3JzW2pdLmxpbmVfbXV4KSB7Ci0JCQkJCQlpZiAoKChiaW9zX2Nvbm5lY3RvcnNbaV0uCi0JCQkJCQkgICAgICBkZXZpY2VzICYKLQkJCQkJCSAgICAgIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpCi0JCQkJCQkgICAgICYmIChiaW9zX2Nvbm5lY3RvcnNbal0uCi0JCQkJCQkJIGRldmljZXMgJgotCQkJCQkJCSAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKSkKLQkJCQkJCSAgICB8fAotCQkJCQkJICAgICgoYmlvc19jb25uZWN0b3JzW2pdLgotCQkJCQkJICAgICAgZGV2aWNlcyAmCi0JCQkJCQkgICAgICAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKQotCQkJCQkJICAgICAmJiAoYmlvc19jb25uZWN0b3JzW2ldLgotCQkJCQkJCSBkZXZpY2VzICYKLQkJCQkJCQkgKEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSkpKSB7Ci0JCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLgotCQkJCQkJCSAgICBkZXZpY2VzIHw9Ci0JCQkJCQkJICAgIGJpb3NfY29ubmVjdG9yc1tqXS4KLQkJCQkJCQkgICAgZGV2aWNlczsKLQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0uCi0JCQkJCQkJICAgIGNvbm5lY3Rvcl90eXBlID0KLQkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk7Ci0JCQkJCQkJaWYgKGJpb3NfY29ubmVjdG9yc1tqXS5kZXZpY2VzICYKLQkJCQkJCQkgICAgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkKKwkJCQkJCS8qIG1ha2Ugc3VyZSBub3QgdG8gY29tYmluZSBMVkRTICovCisJCQkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmxpbmVfbXV4ID0gNTM7CisJCQkJCQkJYmlvc19jb25uZWN0b3JzW2ldLmRkY19idXMudmFsaWQgPSBmYWxzZTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChiaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0ubGluZV9tdXggPSA1MzsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0uZGRjX2J1cy52YWxpZCA9IGZhbHNlOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQkJLyogY29tYmluZSBhbmFsb2cgYW5kIGRpZ2l0YWwgZm9yIERWSS1JICovCisJCQkJCQlpZiAoKChiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpICYmCisJCQkJCQkgICAgIChiaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DUlRfU1VQUE9SVCkpKSB8fAorCQkJCQkJICAgICgoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSAmJgorCQkJCQkJICAgICAoYmlvc19jb25uZWN0b3JzW2ldLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1JUX1NVUFBPUlQpKSkpIHsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyB8PQorCQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbal0uZGV2aWNlczsKKwkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0uY29ubmVjdG9yX3R5cGUgPQorCQkJCQkJCQlEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKKwkJCQkJCQlpZiAoYmlvc19jb25uZWN0b3JzW2pdLmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKQogCQkJCQkJCQliaW9zX2Nvbm5lY3RvcnNbaV0uaHBkID0KIAkJCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS5ocGQ7Ci0JCQkJCQkJYmlvc19jb25uZWN0b3JzW2pdLgotCQkJCQkJCSAgICB2YWxpZCA9IGZhbHNlOworCQkJCQkJCWJpb3NfY29ubmVjdG9yc1tqXS52YWxpZCA9IGZhbHNlOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJfQpAQCAtOTM4LDYgKzkzOCw0MyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAordW5pb24gaWdwX2luZm8geworCXN0cnVjdCBfQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPIGluZm87CisJc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjIgaW5mb18yOworfTsKKworYm9vbCByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBJbnRlZ3JhdGVkU3lzdGVtSW5mbyk7CisJdW5pb24gaWdwX2luZm8gKmlncF9pbmZvOworCXU4IGZyZXYsIGNyZXY7CisJdTE2IGRhdGFfb2Zmc2V0OworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LAorCQkJICAgICAgICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJaWdwX2luZm8gPSAodW5pb24gaWdwX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCSAgICAgIGRhdGFfb2Zmc2V0KTsKKworCWlmIChpZ3BfaW5mbykgeworCQlzd2l0Y2ggKGNyZXYpIHsKKwkJY2FzZSAxOgorCQkJaWYgKGlncF9pbmZvLT5pbmZvLnVjTWVtb3J5VHlwZSAmIDB4ZjApCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKGlncF9pbmZvLT5pbmZvXzIudWNNZW1vcnlUeXBlICYgMHgwZikKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBJR1AgdGFibGU6ICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogYm9vbCByYWRlb25fYXRvbWJpb3NfZ2V0X3RtZHNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJICAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX2ludF90bWRzICp0bWRzKQogewpAQCAtMTAyOSw2ICsxMDY2LDcgQEAKIAkJCQlzcy0+ZGVsYXkgPSBzc19pbmZvLT5hc1NTX0luZm9baV0udWNTU19EZWxheTsKIAkJCQlzcy0+cmFuZ2UgPSBzc19pbmZvLT5hc1NTX0luZm9baV0udWNTU19SYW5nZTsKIAkJCQlzcy0+cmVmZGl2ID0gc3NfaW5mby0+YXNTU19JbmZvW2ldLnVjUmVjb21tZW5kZWRSZWZfRGl2OworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQpAQCAtMTIzNCw2ICsxMjcyLDYxIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK2VudW0gcmFkZW9uX3R2X3N0ZAorcmFkZW9uX2F0b21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25fbW9kZV9pbmZvICptb2RlX2luZm8gPSAmcmRldi0+bW9kZV9pbmZvOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEFuYWxvZ1RWX0luZm8pOworCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXVpbnQ4X3QgZnJldiwgY3JldjsKKwlzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk8gKnR2X2luZm87CisJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZCA9IFRWX1NURF9OVFNDOworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKKworCXR2X2luZm8gPSAoc3RydWN0IF9BVE9NX0FOQUxPR19UVl9JTkZPICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCisJc3dpdGNoICh0dl9pbmZvLT51Y1RWX0Jvb3RVcERlZmF1bHRTdGFuZGFyZCkgeworCWNhc2UgQVRPTV9UVl9OVFNDOgorCQl0dl9zdGQgPSBUVl9TVERfTlRTQzsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IE5UU0NcbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfTlRTQ0o6CisJCXR2X3N0ZCA9IFRWX1NURF9OVFNDX0o7CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBOVFNDLUpcbiIpOworCQlicmVhazsKKwljYXNlIEFUT01fVFZfUEFMOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogUEFMXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1BBTE06CisJCXR2X3N0ZCA9IFRWX1NURF9QQUxfTTsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTC1NXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1BBTE46CisJCXR2X3N0ZCA9IFRWX1NURF9QQUxfTjsKKwkJRFJNX0lORk8oIkRlZmF1bHQgVFYgc3RhbmRhcmQ6IFBBTC1OXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1BBTENOOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMX0NOOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogUEFMLUNOXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1BBTDYwOgorCQl0dl9zdGQgPSBUVl9TVERfUEFMXzYwOworCQlEUk1fSU5GTygiRGVmYXVsdCBUViBzdGFuZGFyZDogUEFMLTYwXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBBVE9NX1RWX1NFQ0FNOgorCQl0dl9zdGQgPSBUVl9TVERfU0VDQU07CisJCURSTV9JTkZPKCJEZWZhdWx0IFRWIHN0YW5kYXJkOiBTRUNBTVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXR2X3N0ZCA9IFRWX1NURF9OVFNDOworCQlEUk1fSU5GTygiVW5rbm93biBUViBzdGFuZGFyZDsgZGVmYXVsdGluZyB0byBOVFNDXG4iKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0dl9zdGQ7Cit9CisKIHN0cnVjdCByYWRlb25fZW5jb2Rlcl90dl9kYWMgKgogcmFkZW9uX2F0b21iaW9zX2dldF90dl9kYWNfaW5mbyhzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKmVuY29kZXIpCiB7CkBAIC0xMjY5LDYgKzEzNjIsNyBAQAogCQlkYWMgPSBkYWNfaW5mby0+dWNEQUMyX05UU0NfREFDX0FkanVzdG1lbnQ7CiAJCXR2X2RhYy0+bnRzY190dmRhY19hZGogPSAoYmcgPDwgMTYpIHwgKGRhYyA8PCAyMCk7CiAKKwkJdHZfZGFjLT50dl9zdGQgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3R2X2luZm8ocmRldik7CiAJfQogCXJldHVybiB0dl9kYWM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCmluZGV4IGIwNjIxMDkuLjgxMmYyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIC8qIDEwIGtoeiAqLwotc3RhdGljIHVpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqbXBsbCA9ICZyZGV2LT5jbG9jay5tcGxsOwogCXVpbnQzMl90IGZiX2RpdiwgcmVmX2RpdiwgcG9zdF9kaXYsIG1jbGs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggYzUwMjFhMy4uNzkxNDQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtNTk1LDYgKzU5NSw0OCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorYm9vbCByYWRlb25fY29tYmlvc19zaWRlcG9ydF9wcmVzZW50KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZGV2LT5kZGV2OworCXUxNiBpZ3BfaW5mbzsKKworCWlncF9pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1RBQkxFKTsKKworCWlmIChpZ3BfaW5mbykgeworCQlpZiAoUkJJT1MxNihpZ3BfaW5mbyArIDB4NCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgdWludDMyX3QgZGVmYXVsdF9wcmltYXJ5ZGFjX2FkaltDSElQX0xBU1RdID0geworCTB4MDAwMDA4MDgsCQkvKiByMTAwICAqLworCTB4MDAwMDA4MDgsCQkvKiBydjEwMCAqLworCTB4MDAwMDA4MDgsCQkvKiByczEwMCAqLworCTB4MDAwMDA4MDgsCQkvKiBydjIwMCAqLworCTB4MDAwMDA4MDgsCQkvKiByczIwMCAqLworCTB4MDAwMDA4MDgsCQkvKiByMjAwICAqLworCTB4MDAwMDA4MDgsCQkvKiBydjI1MCAqLworCTB4MDAwMDAwMDAsCQkvKiByczMwMCAqLworCTB4MDAwMDA4MDgsCQkvKiBydjI4MCAqLworCTB4MDAwMDA4MDgsCQkvKiByMzAwICAqLworCTB4MDAwMDA4MDgsCQkvKiByMzUwICAqLworCTB4MDAwMDA4MDgsCQkvKiBydjM1MCAqLworCTB4MDAwMDA4MDgsCQkvKiBydjM4MCAqLworCTB4MDAwMDA4MDgsCQkvKiByNDIwICAqLworCTB4MDAwMDA4MDgsCQkvKiByNDIzICAqLworCTB4MDAwMDA4MDgsCQkvKiBydjQxMCAqLworCTB4MDAwMDAwMDAsCQkvKiByczQwMCAqLworCTB4MDAwMDAwMDAsCQkvKiByczQ4MCAqLworfTsKKworc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9nZXRfcHJpbWFyeV9kYWNfaW5mb19mcm9tX3RhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkJCSAgc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjICpwX2RhYykKK3sKKwlwX2RhYy0+cHMyX3BkYWNfYWRqID0gZGVmYXVsdF9wcmltYXJ5ZGFjX2FkaltyZGV2LT5mYW1pbHldOworCXJldHVybjsKK30KKwogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjICpyYWRlb25fY29tYmlvc19nZXRfcHJpbWFyeV9kYWNfaW5mbyhzdHJ1Y3QKIAkJCQkJCQkJICAgICAgIHJhZGVvbl9lbmNvZGVyCiAJCQkJCQkJCSAgICAgICAqZW5jb2RlcikKQEAgLTYwNCwyMCArNjQ2LDIwIEBACiAJdWludDE2X3QgZGFjX2luZm87CiAJdWludDhfdCByZXYsIGJnLCBkYWM7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjICpwX2RhYyA9IE5VTEw7CisJaW50IGZvdW5kID0gMDsKKworCXBfZGFjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjKSwKKwkJCUdGUF9LRVJORUwpOworCisJaWYgKCFwX2RhYykKKwkJcmV0dXJuIE5VTEw7CiAKIAlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXQ7CiAKIAkvKiBjaGVjayBDUlQgdGFibGUgKi8KIAlkYWNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfQ1JUX0lORk9fVEFCTEUpOwogCWlmIChkYWNfaW5mbykgewotCQlwX2RhYyA9Ci0JCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfcHJpbWFyeV9kYWMpLAotCQkJICAgIEdGUF9LRVJORUwpOwotCi0JCWlmICghcF9kYWMpCi0JCQlyZXR1cm4gTlVMTDsKLQogCQlyZXYgPSBSQklPUzgoZGFjX2luZm8pICYgMHgzOwogCQlpZiAocmV2IDwgMikgewogCQkJYmcgPSBSQklPUzgoZGFjX2luZm8gKyAweDIpICYgMHhmOwpAQCAtNjI4LDE3ICs2NzAsMjAgQEAKIAkJCWRhYyA9IFJCSU9TOChkYWNfaW5mbyArIDB4MykgJiAweGY7CiAJCQlwX2RhYy0+cHMyX3BkYWNfYWRqID0gKGJnIDw8IDgpIHwgKGRhYyk7CiAJCX0KLQorCQlmb3VuZCA9IDE7CiAJfQogCitvdXQ6CisJaWYgKCFmb3VuZCkgLyogZmFsbGJhY2sgdG8gZGVmYXVsdHMgKi8KKwkJcmFkZW9uX2xlZ2FjeV9nZXRfcHJpbWFyeV9kYWNfaW5mb19mcm9tX3RhYmxlKHJkZXYsIHBfZGFjKTsKKwogCXJldHVybiBwX2RhYzsKIH0KIAotc3RhdGljIGVudW0gcmFkZW9uX3R2X3N0ZAotcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8oc3RydWN0IHJhZGVvbl9lbmNvZGVyICplbmNvZGVyKQorZW51bSByYWRlb25fdHZfc3RkCityYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+YmFzZS5kZXY7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZGV2LT5kZGV2OwogCXVpbnQxNl90IHR2X2luZm87CiAJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZCA9IFRWX1NURF9OVFNDOwogCkBAIC03NzksNyArODI0LDcgQEAKIAkJCXR2X2RhYy0+bnRzY190dmRhY19hZGogPSAoYmcgPDwgMTYpIHwgKGRhYyA8PCAyMCk7CiAJCQlmb3VuZCA9IDE7CiAJCX0KLQkJdHZfZGFjLT50dl9zdGQgPSByYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhlbmNvZGVyKTsKKwkJdHZfZGFjLT50dl9zdGQgPSByYWRlb25fY29tYmlvc19nZXRfdHZfaW5mbyhyZGV2KTsKIAl9CiAJaWYgKCFmb3VuZCkgewogCQkvKiB0aGVuIGNoZWNrIENSVCB0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IDVlZWNlMTguLjlkYTEwZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTQ5LDggKzQ5LDEwIEBACiAJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQgIT0gUkFERU9OX0hQRF9OT05FKQogCQlyYWRlb25faHBkX3NldF9wb2xhcml0eShyZGV2LCByYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkKTsKIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgewotCQlpZiAocmFkZW9uX2RwX2dldHNpbmt0eXBlKHJhZGVvbl9jb25uZWN0b3IpID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQpIHsKKwlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB8fAorCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSkgeworCQlpZiAoKHJhZGVvbl9kcF9nZXRzaW5rdHlwZShyYWRlb25fY29ubmVjdG9yKSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAorCQkgICAgKHJhZGVvbl9kcF9nZXRzaW5rdHlwZShyYWRlb25fY29ubmVjdG9yKSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpIHsKIAkJCWlmIChyYWRlb25fZHBfbmVlZHNfbGlua190cmFpbihyYWRlb25fY29ubmVjdG9yKSkgewogCQkJCWlmIChjb25uZWN0b3ItPmVuY29kZXIpCiAJCQkJCWRwX2xpbmtfdHJhaW4oY29ubmVjdG9yLT5lbmNvZGVyLCBjb25uZWN0b3IpOwpAQCAtMjA4LDYgKzIxMCwxOCBAQAogCQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCQlEUk1fREVCVUcoIkFkZGluZyBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CisJfSBlbHNlIGlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgIT0gMCAmJgorCQkgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgIT0gMCkgeworCQkvKiBtYWMgbGFwdG9wcyB3aXRob3V0IGFuIGVkaWQgKi8KKwkJLyogTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBleGFjdCBwYW5lbCBtb2RlLAorCQkgKiBidXQgYW4gYXBwcm94aW1hdGlvbiBiYXNlZCBvbiB0aGUgY3Z0IGZvcm11bGEuICBGb3IgdGhlc2UKKwkJICogc3lzdGVtcyB3ZSBzaG91bGQgaWRlYWxseSByZWFkIHRoZSBtb2RlIGluZm8gb3V0IG9mIHRoZQorCQkgKiByZWdpc3RlcnMgb3IgYWRkIGEgbW9kZSB0YWJsZSwgYnV0IHRoaXMgd29ya3MgYW5kIGlzIG11Y2gKKwkJICogc2ltcGxlci4KKwkJICovCisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBuYXRpdmVfbW9kZS0+aGRpc3BsYXksIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSwgNjAsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisJCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCB8IERSTV9NT0RFX1RZUEVfRFJJVkVSOworCQlEUk1fREVCVUcoIkFkZGluZyBjdnQgYXBwcm94aW1hdGlvbiBvZiBuYXRpdmUgcGFuZWwgbW9kZSAlc1xuIiwgbW9kZS0+bmFtZSk7CiAJfQogCXJldHVybiBtb2RlOwogfQpAQCAtNjAzLDcgKzYxNyw3IEBACiAJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CisJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgJiYgZW5jb2RlcikgewogCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOwogCQkJcmV0ID0gZW5jb2Rlcl9mdW5jcy0+ZGV0ZWN0KGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJCX0KQEAgLTk1NSw3ICs5NjksOCBAQAogCX0KIAogCXNpbmtfdHlwZSA9IHJhZGVvbl9kcF9nZXRzaW5rdHlwZShyYWRlb25fY29ubmVjdG9yKTsKLQlpZiAoc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQpIHsKKwlpZiAoKHNpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAorCSAgICAoc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfZURQKSkgewogCQlpZiAocmFkZW9uX2RwX2dldGRwY2QocmFkZW9uX2Nvbm5lY3RvcikpIHsKIAkJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPSBzaW5rX3R5cGU7CiAJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKQEAgLTk4MCw3ICs5OTUsOCBAQAogCiAJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCiAKLQlpZiAocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKQorCWlmICgocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAorCSAgICAocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpCiAJCXJldHVybiByYWRlb25fZHBfbW9kZV92YWxpZF9oZWxwZXIocmFkZW9uX2Nvbm5lY3RvciwgbW9kZSk7CiAJZWxzZQogCQlyZXR1cm4gTU9ERV9PSzsKQEAgLTExMzMsNiArMTE0OSw3IEBACiAJCXN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxIb3Jpem9udGFsUkdCOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDoKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA6CiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyYWRlb25fZGlnX2Nvbm5lY3RvcikKIAkJCWdvdG8gZmFpbGVkOwpAQCAtMTE0NSwxMCArMTE2MiwxNiBAQAogCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJLyogYWRkIERQIGkyYyBidXMgKi8KLQkJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGVfZHAoZGV2LCBpMmNfYnVzLCAiRFAtYXV4Y2giKTsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKQorCQkJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGVfZHAoZGV2LCBpMmNfYnVzLCAiZURQLWF1eGNoIik7CisJCQllbHNlCisJCQkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMgPSByYWRlb25faTJjX2NyZWF0ZV9kcChkZXYsIGkyY19idXMsICJEUC1hdXhjaCIpOwogCQkJaWYgKCFyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfaTJjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKLQkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEUCIpOworCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApCisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgImVEUCIpOworCQkJZWxzZQorCQkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEUCIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CkBAIC0xMTcxLDcgKzExOTQsNyBAQAogCQkJCQkJICAgICAgMSk7CiAJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby50dl9zdGRfcHJvcGVydHksCi0JCQkJCQkgICAgICAxKTsKKwkJCQkJCSAgICAgIHJhZGVvbl9hdG9tYmlvc19nZXRfdHZfaW5mbyhyZGV2KSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKQEAgLTEzMTUsNyArMTMzOCw3IEBACiAJCQkJCQkgICAgICAxKTsKIAkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLnR2X3N0ZF9wcm9wZXJ0eSwKLQkJCQkJCSAgICAgIDEpOworCQkJCQkJICAgICAgcmFkZW9uX2NvbWJpb3NfZ2V0X3R2X2luZm8ocmRldikpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwppbmRleCAwYjJmOWMyLi4wNjEyM2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKQEAgLTIxNDUsNiArMjE0NSw3IEBACiAJCQkgJm1hc3Rlcl9wcml2LT5zYXJlYSk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoIlNBUkVBIHNldHVwIGZhaWxlZFxuIik7CisJCWtmcmVlKG1hc3Rlcl9wcml2KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYgPSBtYXN0ZXJfcHJpdi0+c2FyZWEtPmhhbmRsZSArIHNpemVvZihzdHJ1Y3QgZHJtX3NhcmVhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggMDJiY2RiMS4uMGM1MWY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTM5MSw2ICszOTEsMTIgQEAKIAkJLyogRklYTUU6IG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJcmRldi0+YXNpYy0+Z2V0X21lbW9yeV9jbG9jayA9IE5VTEw7CisJCXJkZXYtPmFzaWMtPnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00ODEsNiArNDg3LDcgQEAKIAlhdG9tX2NhcmRfaW5mby0+cGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGU7CiAKIAlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZShhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CisJbXV0ZXhfaW5pdCgmcmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dC0+bXV0ZXgpOwogCXJhZGVvbl9hdG9tX2luaXRpYWxpemVfYmlvc19zY3JhdGNoX3JlZ3MocmRldi0+ZGRldik7CiAJYXRvbV9hbGxvY2F0ZV9mYl9zY3JhdGNoKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwogCXJldHVybiAwOwpAQCAtNTM5LDkgKzU0Niw3MiBAQAogCX0KIH0KIAotLyoKLSAqIFJhZGVvbiBkZXZpY2UuCi0gKi8KK3ZvaWQgcmFkZW9uX2NoZWNrX2FyZ3VtZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiB2cmFtbGltaXQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byAqLworCXN3aXRjaCAocmFkZW9uX3ZyYW1fbGltaXQpIHsKKwljYXNlIDA6CisJY2FzZSA0OgorCWNhc2UgODoKKwljYXNlIDE2OgorCWNhc2UgMzI6CisJY2FzZSA2NDoKKwljYXNlIDEyODoKKwljYXNlIDI1NjoKKwljYXNlIDUxMjoKKwljYXNlIDEwMjQ6CisJY2FzZSAyMDQ4OgorCWNhc2UgNDA5NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAidnJhbSBsaW1pdCAoJWQpIG11c3QgYmUgYSBwb3dlciBvZiAyXG4iLAorCQkJCXJhZGVvbl92cmFtX2xpbWl0KTsKKwkJcmFkZW9uX3ZyYW1fbGltaXQgPSAwOworCQlicmVhazsKKwl9CisJcmFkZW9uX3ZyYW1fbGltaXQgPSByYWRlb25fdnJhbV9saW1pdCA8PCAyMDsKKwkvKiBndHQgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIHR3byBhbmQgZ3JlYXRlciBvciBlcXVhbCB0byAzMk0gKi8KKwlzd2l0Y2ggKHJhZGVvbl9nYXJ0X3NpemUpIHsKKwljYXNlIDQ6CisJY2FzZSA4OgorCWNhc2UgMTY6CisJCWRldl93YXJuKHJkZXYtPmRldiwgImdhcnQgc2l6ZSAoJWQpIHRvbyBzbWFsbCBmb3JjaW5nIHRvIDUxMk1cbiIsCisJCQkJcmFkZW9uX2dhcnRfc2l6ZSk7CisJCXJhZGVvbl9nYXJ0X3NpemUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgMzI6CisJY2FzZSA2NDoKKwljYXNlIDEyODoKKwljYXNlIDI1NjoKKwljYXNlIDUxMjoKKwljYXNlIDEwMjQ6CisJY2FzZSAyMDQ4OgorCWNhc2UgNDA5NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiZ2FydCBzaXplICglZCkgbXVzdCBiZSBhIHBvd2VyIG9mIDJcbiIsCisJCQkJcmFkZW9uX2dhcnRfc2l6ZSk7CisJCXJhZGVvbl9nYXJ0X3NpemUgPSA1MTI7CisJCWJyZWFrOworCX0KKwlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkvKiBBR1AgbW9kZSBjYW4gb25seSBiZSAtMSwgMSwgMiwgNCwgOCAqLworCXN3aXRjaCAocmFkZW9uX2FncG1vZGUpIHsKKwljYXNlIC0xOgorCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKHJkZXYtPmRldiwgImludmFsaWQgQUdQIG1vZGUgJWQgKHZhbGlkIG1vZGU6ICIKKwkJCQkiLTEsIDAsIDEsIDIsIDQsIDgpXG4iLCByYWRlb25fYWdwbW9kZSk7CisJCXJhZGVvbl9hZ3Btb2RlID0gMDsKKwkJYnJlYWs7CisJfQorfQorCiBpbnQgcmFkZW9uX2RldmljZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsCiAJCSAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTU4MCw5ICs2NTAsOSBAQAogCiAJLyogU2V0IGFzaWMgZnVuY3Rpb25zICovCiAJciA9IHJhZGVvbl9hc2ljX2luaXQocmRldik7Ci0JaWYgKHIpIHsKKwlpZiAocikKIAkJcmV0dXJuIHI7Ci0JfQorCXJhZGVvbl9jaGVja19hcmd1bWVudHMocmRldik7CiAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQICYmIHJhZGVvbl9hZ3Btb2RlID09IC0xKSB7CiAJCXJhZGVvbl9hZ3BfZGlzYWJsZShyZGV2KTsKQEAgLTY2MywxNiArNzMzLDE4IEBACiAgKi8KIGludCByYWRlb25fc3VzcGVuZF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHI7CiAKLQlpZiAoZGV2ID09IE5VTEwgfHwgcmRldiA9PSBOVUxMKSB7CisJaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+ZGV2X3ByaXZhdGUgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpIHsKIAkJcmV0dXJuIDA7CiAJfQorCXJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCiAJLyogdW5waW4gdGhlIGZyb250IGJ1ZmZlcnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICpyZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoY3J0Yy0+ZmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGExMzNiODMuLjBlYzQ5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCSJJTlRFUk5BTF9VTklQSFkyIiwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpjb25uZWN0b3JfbmFtZXNbMTNdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5lY3Rvcl9uYW1lc1sxNV0gPSB7CiAJIlVua25vd24iLAogCSJWR0EiLAogCSJEVkktSSIsCkBAIC0yNDgsNiArMjQ4LDggQEAKIAkiRGlzcGxheVBvcnQiLAogCSJIRE1JLUEiLAogCSJIRE1JLUIiLAorCSJUViIsCisJImVEUCIsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqaHBkX25hbWVzWzddID0gewpAQCAtMzI5LDggKzMzMSwxMSBAQAogCQkJCXJldCA9IHJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfaW5mb19mcm9tX29iamVjdF90YWJsZShkZXYpOwogCQkJZWxzZQogCQkJCXJldCA9IHJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfaW5mb19mcm9tX3N1cHBvcnRlZF9kZXZpY2VzX3RhYmxlKGRldik7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJcmV0ID0gcmFkZW9uX2dldF9sZWdhY3lfY29ubmVjdG9yX2luZm9fZnJvbV9iaW9zKGRldik7CisJCQlpZiAocmV0ID09IGZhbHNlKQorCQkJCXJldCA9IHJhZGVvbl9nZXRfbGVnYWN5X2Nvbm5lY3Rvcl9pbmZvX2Zyb21fdGFibGUoZGV2KTsKKwkJfQogCX0gZWxzZSB7CiAJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJCXJldCA9IHJhZGVvbl9nZXRfbGVnYWN5X2Nvbm5lY3Rvcl9pbmZvX2Zyb21fdGFibGUoZGV2KTsKQEAgLTM0OSw3ICszNTQsOCBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB7CisJaWYgKChyYWRlb25fY29ubmVjdG9yLT5iYXNlLmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgfHwKKwkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkpIHsKIAkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OwogCQlpZiAoZGlnLT5kcF9pMmNfYnVzKQogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJmRpZy0+ZHBfaTJjX2J1cy0+YWRhcHRlcik7CkBAIC03MzksNyArNzQ1LDcgQEAKIAl7IFRWX1NURF9TRUNBTSwgInNlY2FtIiB9LAogfTsKIAotaW50IHJhZGVvbl9tb2Rlc2V0X2NyZWF0ZV9wcm9wcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcmFkZW9uX21vZGVzZXRfY3JlYXRlX3Byb3BzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCBpLCBzejsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBkYmQ1NmVmLi44YmEzZGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJCSAub3duZXIgPSBUSElTX01PRFVMRSwKIAkJIC5vcGVuID0gZHJtX29wZW4sCiAJCSAucmVsZWFzZSA9IGRybV9yZWxlYXNlLAotCQkgLmlvY3RsID0gZHJtX2lvY3RsLAorCQkgLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAogCQkgLm1tYXAgPSBkcm1fbW1hcCwKIAkJIC5wb2xsID0gZHJtX3BvbGwsCiAJCSAuZmFzeW5jID0gZHJtX2Zhc3luYywKQEAgLTI4NCw3ICsyODQsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gcmFkZW9uX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCAwZDFkOTA4Li44MmViNTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTIzMyw2ICsyMzMsOCBAQAogCQlpZiAoIUFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID0gbW9kZS0+aGRpc3BsYXk7CiAJCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IG1vZGUtPnZkaXNwbGF5OworCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OworCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSA9IG1vZGUtPnZkaXNwbGF5OwogCQl9CiAJCWFkanVzdGVkX21vZGUtPmJhc2UuaWQgPSBtb2RlX2lkOwogCX0KQEAgLTQ5NSw5ICs0OTcsOSBAQAogCQkJCWFyZ3MudjEudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19IRE1JX1RZUEU7CiAJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKLQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAwKSkKKwkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiBBVE9NX1BBTkVMX01JU0NfRFVBTCkKIAkJCQkJYXJncy52MS51Y01pc2MgfD0gUEFORUxfRU5DT0RFUl9NSVNDX0RVQUw7Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgMSkpCisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDXzg4OFJHQikKIAkJCQkJYXJncy52MS51Y01pc2MgfD0gKDEgPDwgMSk7CiAJCQl9IGVsc2UgewogCQkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKQEAgLTUyNCwxOCArNTI2LDE4IEBACiAJCQlhcmdzLnYyLnVjVGVtcG9yYWwgPSAwOwogCQkJYXJncy52Mi51Y0ZSQyA9IDA7CiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7Ci0JCQkJaWYgKGRpZy0+bHZkc19taXNjICYgKDEgPDwgMCkpCisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDX0RVQUwpCiAJCQkJCWFyZ3MudjIudWNNaXNjIHw9IFBBTkVMX0VOQ09ERVJfTUlTQ19EVUFMOwotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDUpKSB7CisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDX1NQQVRJQUwpIHsKIAkJCQkJYXJncy52Mi51Y1NwYXRpYWwgPSBQQU5FTF9FTkNPREVSX1NQQVRJQUxfRElUSEVSX0VOOwotCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDXzg4OFJHQikKIAkJCQkJCWFyZ3MudjIudWNTcGF0aWFsIHw9IFBBTkVMX0VOQ09ERVJfU1BBVElBTF9ESVRIRVJfREVQVEg7CiAJCQkJfQotCQkJCWlmIChkaWctPmx2ZHNfbWlzYyAmICgxIDw8IDYpKSB7CisJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDX1RFTVBPUkFMKSB7CiAJCQkJCWFyZ3MudjIudWNUZW1wb3JhbCA9IFBBTkVMX0VOQ09ERVJfVEVNUE9SQUxfRElUSEVSX0VOOwotCQkJCQlpZiAoZGlnLT5sdmRzX21pc2MgJiAoMSA8PCAxKSkKKwkJCQkJaWYgKGRpZy0+bHZkc19taXNjICYgQVRPTV9QQU5FTF9NSVNDXzg4OFJHQikKIAkJCQkJCWFyZ3MudjIudWNUZW1wb3JhbCB8PSBQQU5FTF9FTkNPREVSX1RFTVBPUkFMX0RJVEhFUl9ERVBUSDsKLQkJCQkJaWYgKCgoZGlnLT5sdmRzX21pc2MgPj4gMikgJiAweDMpID09IDIpCisJCQkJCWlmICgoKGRpZy0+bHZkc19taXNjID4+IEFUT01fUEFORUxfTUlTQ19HUkVZX0xFVkVMX1NISUZUKSAmIDB4MykgPT0gMikKIAkJCQkJCWFyZ3MudjIudWNUZW1wb3JhbCB8PSBQQU5FTF9FTkNPREVSX1RFTVBPUkFMX0xFVkVMXzQ7CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTU5NCwyMSArNTk2LDIzIEBACiAJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9MVkRTOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDoKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA6CiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7Ci0JCWlmIChyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQpCisJCWlmICgocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAorCQkgICAgKHJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9lRFApKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RQOwogCQllbHNlIGlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JOwogCQllbHNlCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwogCQlicmVhazsKLQljYXNlIENPTk5FQ1RPUl9EVklfQToKLQljYXNlIENPTk5FQ1RPUl9WR0E6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9DUlQ7CiAJCWJyZWFrOwotCWNhc2UgQ09OTkVDVE9SX1NUVjoKLQljYXNlIENPTk5FQ1RPUl9DVFY6Ci0JY2FzZSBDT05ORUNUT1JfRElOOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZToKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU86CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKIAkJLyogZml4IG1lICovCiAJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9UVjsKIAkJLypyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfQ1Y7Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCmluZGV4IGNiNGNkOTcuLjg0OTVkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwpAQCAtMTQwLDE2ICsxNDAsMTUgQEAKIAogYm9vbCByYWRlb25fZmVuY2Vfc2lnbmFsZWQoc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7Ci0Jc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBmZW5jZS0+cmRldjsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlib29sIHNpZ25hbGVkID0gZmFsc2U7CiAKLQlpZiAocmRldi0+Z3B1X2xvY2t1cCkgeworCWlmICghZmVuY2UpCiAJCXJldHVybiB0cnVlOwotCX0KLQlpZiAoZmVuY2UgPT0gTlVMTCkgeworCisJaWYgKGZlbmNlLT5yZGV2LT5ncHVfbG9ja3VwKQogCQlyZXR1cm4gdHJ1ZTsKLQl9CisKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmZlbmNlLT5yZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAlzaWduYWxlZCA9IGZlbmNlLT5zaWduYWxlZDsKIAkvKiBpZiB3ZSBhcmUgc2h1dGluZyBkb3duIHJlcG9ydCBhbGwgZmVuY2UgYXMgc2lnbmFsZWQgKi8KQEAgLTMyNCw3ICszMjMsNyBAQAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CiAJciA9IHJhZGVvbl9zY3JhdGNoX2dldChyZGV2LCAmcmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnKTsKIAlpZiAocikgewotCQlEUk1fRVJST1IoIkZlbmNlIGZhaWxlZCB0byBnZXQgYSBzY3JhdGNoIHJlZ2lzdGVyLiIpOworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZlbmNlIGZhaWxlZCB0byBnZXQgc2NyYXRjaCByZWdpc3RlclxuIik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAkJcmV0dXJuIHI7CiAJfQpAQCAtMzM1LDkgKzMzNCwxMCBAQAogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5mZW5jZV9kcnYuc2lnbmFsZWQpOwogCXJkZXYtPmZlbmNlX2Rydi5jb3VudF90aW1lb3V0ID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZGV2LT5mZW5jZV9kcnYucXVldWUpOworCXJkZXYtPmZlbmNlX2Rydi5pbml0aWFsaXplZCA9IHRydWU7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwogCWlmIChyYWRlb25fZGVidWdmc19mZW5jZV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgZmVuY2UgIVxuIik7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmVuY2UgZGVidWdmcyBmaWxlIGNyZWF0aW9uIGZhaWxlZFxuIik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzQ2LDExICszNDYsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAorCWlmICghcmRldi0+ZmVuY2VfZHJ2LmluaXRpYWxpemVkKQorCQlyZXR1cm47CiAJd2FrZV91cF9hbGwoJnJkZXYtPmZlbmNlX2Rydi5xdWV1ZSk7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKIAlyYWRlb25fc2NyYXRjaF9mcmVlKHJkZXYsIHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOwotCURSTV9JTkZPKCJyYWRlb246IGZlbmNlIGZpbmFsaXplZFxuIik7CisJcmRldi0+ZmVuY2VfZHJ2LmluaXRpYWxpemVkID0gZmFsc2U7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwppbmRleCA2MGRmMmQ3Li4wZTEzMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwpAQCAtMTMxLDcgKzEzMSw2IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byB3YWl0IGZvciBvYmplY3QgIVxuIik7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlyYWRlb25faGRwX2ZsdXNoKHJvYmotPnJkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMxMiw3ICszMTEsNiBAQAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyYWRlb25faGRwX2ZsdXNoKHJvYmotPnJkZXYpOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faW9jMzIuYwppbmRleCBhMWJmMTFkLi40OGI3Y2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lvYzMyLmMKQEAgLTkyLDggKzkyLDcgQEAKIAkJCSAgJmluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9DUF9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fQ1BfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fY2xlYXIzMiB7CkBAIC0xMjUsOCArMTI0LDcgQEAKIAkJCSAgJmNsci0+ZGVwdGhfYm94ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NMRUFSLCAodW5zaWduZWQgbG9uZyljbHIpOworCXJldHVybiBkcm1faW9jdGwoZmlsZSwgRFJNX0lPQ1RMX1JBREVPTl9DTEVBUiwgKHVuc2lnbmVkIGxvbmcpY2xyKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zdGlwcGxlMzIgewpAQCAtMTQ5LDggKzE0Nyw3IEBACiAJCQkgICZyZXF1ZXN0LT5tYXNrKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fU1RJUFBMRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fdGV4X2ltYWdlMzIgewpAQCAtMjA0LDggKzIwMSw3IEBACiAJCQkgICZpbWFnZS0+ZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAotCQkJIERSTV9JT0NUTF9SQURFT05fVEVYVFVSRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX1RFWFRVUkUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX3ZlcnRleDJfMzIgewpAQCAtMjM4LDggKzIzNCw3IEBACiAJCQkgICZyZXF1ZXN0LT5wcmltKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9WRVJURVgyLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fVkVSVEVYMiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fY21kX2J1ZmZlcjMyIHsKQEAgLTI2OCw4ICsyNjMsNyBAQAogCQkJICAmcmVxdWVzdC0+Ym94ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0NNREJVRiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0NNREJVRiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZ2V0cGFyYW0zMiB7CkBAIC0yOTMsOCArMjg3LDcgQEAKIAkJCSAgJnJlcXVlc3QtPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9tZW1fYWxsb2MzMiB7CkBAIC0zMjIsOCArMzE1LDcgQEAKIAkJCSAgJnJlcXVlc3QtPnJlZ2lvbl9vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX0FMTE9DLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUsIERSTV9JT0NUTF9SQURFT05fQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2lycV9lbWl0MzIgewpAQCAtMzQ1LDggKzMzNyw3IEBACiAJCQkgICZyZXF1ZXN0LT5pcnFfc2VxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCi0JCQkgRFJNX0lPQ1RMX1JBREVPTl9JUlFfRU1JVCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX0lSUV9FTUlULCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIAogLyogVGhlIHR3byA2NC1iaXQgYXJjaGVzIHdoZXJlIGFsaWdub2YodTY0KT09NCBpbiAzMi1iaXQgY29kZSAqLwpAQCAtMzcyLDggKzM2Myw3IEBACiAJCQkgICZyZXF1ZXN0LT52YWx1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKLQkJCSBEUk1fSU9DVExfUkFERU9OX1NFVFBBUkFNLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CisJcmV0dXJuIGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfUkFERU9OX1NFVFBBUkFNLCAodW5zaWduZWQgbG9uZykgcmVxdWVzdCk7CiB9CiAjZWxzZQogI2RlZmluZSBjb21wYXRfcmFkZW9uX2NwX3NldHBhcmFtIE5VTEwKQEAgLTQxMywxMiArNDAzLDEwIEBACiAJaWYgKG5yIDwgRFJNX0NPTU1BTkRfQkFTRSArIERSTV9BUlJBWV9TSVpFKHJhZGVvbl9jb21wYXRfaW9jdGxzKSkKIAkJZm4gPSByYWRlb25fY29tcGF0X2lvY3Rsc1tuciAtIERSTV9DT01NQU5EX0JBU0VdOwogCi0JbG9ja19rZXJuZWwoKTsJCS8qIFhYWCBmb3Igbm93ICovCiAJaWYgKGZuICE9IE5VTEwpCiAJCXJldCA9ICgqZm4pIChmaWxwLCBjbWQsIGFyZyk7CiAJZWxzZQotCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0ID0gZHJtX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00MzEsOSArNDE5LDcgQEAKIAlpZiAobnIgPCBEUk1fQ09NTUFORF9CQVNFKQogCQlyZXR1cm4gZHJtX2NvbXBhdF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiAKLQlsb2NrX2tlcm5lbCgpOwkJLyogWFhYIGZvciBub3cgKi8KLQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwlyZXQgPSBkcm1faW9jdGwoZmlscCwgY21kLCBhcmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKaW5kZXggYjc5ZWNjNC4uMmYzNDlhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKQEAgLTI4OSwxNiArMjg5LDE2IEBACiAJZHJtX3JhZGVvbl9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwotCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCiAJcmVzdWx0ID0gcmFkZW9uX2VtaXRfaXJxKGRldik7CiAKIAlpZiAoRFJNX0NPUFlfVE9fVVNFUihlbWl0LT5pcnFfc2VxLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwppbmRleCA5MjIzMjk2Li4zY2ZkNjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCkBAIC05Nyw2ICs5Nyw3IEBACiAJcmRldi0+aXJxLnN3X2ludCA9IGZhbHNlOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJcmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFtpXSA9IGZhbHNlOworCQlyZGV2LT5pcnEuaHBkW2ldID0gZmFsc2U7CiAJfQogCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwogfQpAQCAtMTI4LDE3ICsxMjksMjIgQEAKIAkJCURSTV9JTkZPKCJyYWRlb246IHVzaW5nIE1TSS5cbiIpOwogCQl9CiAJfQotCWRybV9pcnFfaW5zdGFsbChyZGV2LT5kZGV2KTsKIAlyZGV2LT5pcnEuaW5zdGFsbGVkID0gdHJ1ZTsKKwlyID0gZHJtX2lycV9pbnN0YWxsKHJkZXYtPmRkZXYpOworCWlmIChyKSB7CisJCXJkZXYtPmlycS5pbnN0YWxsZWQgPSBmYWxzZTsKKwkJcmV0dXJuIHI7CisJfQogCURSTV9JTkZPKCJyYWRlb246IGlycSBpbml0aWFsaXplZC5cbiIpOwogCXJldHVybiAwOwogfQogCiB2b2lkIHJhZGVvbl9pcnFfa21zX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJZHJtX3ZibGFua19jbGVhbnVwKHJkZXYtPmRkZXYpOwogCWlmIChyZGV2LT5pcnEuaW5zdGFsbGVkKSB7Ci0JCXJkZXYtPmlycS5pbnN0YWxsZWQgPSBmYWxzZTsKIAkJZHJtX2lycV91bmluc3RhbGwocmRldi0+ZGRldik7CisJCXJkZXYtPmlycS5pbnN0YWxsZWQgPSBmYWxzZTsKIAkJaWYgKHJkZXYtPm1zaV9lbmFibGVkKQogCQkJcGNpX2Rpc2FibGVfbXNpKHJkZXYtPnBkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IGI4MmVkZTkuLmNjMjc0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNDMsOCArNDMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3JteF9tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xMDU5LDcgKzEwNTgsNyBAQAogCXJhZGVvbl9zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwogCXJhZGVvbl9vdmVyc2Nhbl9zZXR1cChjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQlyYWRlb25fbGVnYWN5X3JteF9tb2RlX3NldChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKKwkJcmFkZW9uX2xlZ2FjeV9ybXhfbW9kZV9zZXQoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJfSBlbHNlIHsKIAkJaWYgKHJhZGVvbl9jcnRjLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKSB7CiAJCQkvKiBGSVhNRTogb25seSBmaXJzdCBjcnRjIGhhcyBybXggd2hhdCBzaG91bGQgd2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggZGYwMDUxNS4uOTgxNTA4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTIwNyw2ICsyMDcsOCBAQAogCQkqYWRqdXN0ZWRfbW9kZSA9ICpuYXRpdmVfbW9kZTsKIAkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKIAkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBtb2RlLT52ZGlzcGxheTsKKwkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSA9IG1vZGUtPmhkaXNwbGF5OworCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCWFkanVzdGVkX21vZGUtPmJhc2UuaWQgPSBtb2RlX2lkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYwppbmRleCAzYTEyYmIwLi40MTc2ODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfdHYuYwpAQCAtNzcsNyArNzcsNyBAQAogCXVuc2lnbmVkIHBpeF90b190djsKIH07CiAKLXN0YXRpYyBjb25zdCB1aW50MTZfdCBob3JfdGltaW5nX05UU0NbXSA9IHsKK3N0YXRpYyBjb25zdCB1aW50MTZfdCBob3JfdGltaW5nX05UU0NbTUFYX0hfQ09ERV9USU1JTkdfTEVOXSA9IHsKIAkweDAwMDcsCiAJMHgwMDNmLAogCTB4MDI2MywKQEAgLTk4LDcgKzk4LDcgQEAKIAkwCiB9OwogCi1zdGF0aWMgY29uc3QgdWludDE2X3QgdmVydF90aW1pbmdfTlRTQ1tdID0geworc3RhdGljIGNvbnN0IHVpbnQxNl90IHZlcnRfdGltaW5nX05UU0NbTUFYX1ZfQ09ERV9USU1JTkdfTEVOXSA9IHsKIAkweDIwMDEsCiAJMHgyMDBkLAogCTB4MTAwNiwKQEAgLTExNSw3ICsxMTUsNyBAQAogCTAKIH07CiAKLXN0YXRpYyBjb25zdCB1aW50MTZfdCBob3JfdGltaW5nX1BBTFtdID0geworc3RhdGljIGNvbnN0IHVpbnQxNl90IGhvcl90aW1pbmdfUEFMW01BWF9IX0NPREVfVElNSU5HX0xFTl0gPSB7CiAJMHgwMDA3LAogCTB4MDA1OCwKIAkweDAyN2MsCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkwCiB9OwogCi1zdGF0aWMgY29uc3QgdWludDE2X3QgdmVydF90aW1pbmdfUEFMW10gPSAJeworc3RhdGljIGNvbnN0IHVpbnQxNl90IHZlcnRfdGltaW5nX1BBTFtNQVhfVl9DT0RFX1RJTUlOR19MRU5dID0gewogCTB4MjAwMSwKIAkweDIwMGMsCiAJMHgxMDA1LApAQCAtNjIzLDkgKzYyMyw5IEBACiAJfQogCWZsaWNrZXJfcmVtb3ZhbCA9ICh0bXAgKyA1MDApIC8gMTAwMDsKIAotCWlmIChmbGlja2VyX3JlbW92YWwgPCAzKQotCQlmbGlja2VyX3JlbW92YWwgPSAzOwotCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHsKKwlpZiAoZmxpY2tlcl9yZW1vdmFsIDwgMikKKwkJZmxpY2tlcl9yZW1vdmFsID0gMjsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShTTE9QRV9saW1pdCk7ICsraSkgewogCQlpZiAoZmxpY2tlcl9yZW1vdmFsID09IFNMT1BFX2xpbWl0W2ldKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IDNkY2JlMTMuLjkxY2IwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTQ2LDMyICs0Niw2IEBACiAjZGVmaW5lIHRvX3JhZGVvbl9lbmNvZGVyKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgcmFkZW9uX2VuY29kZXIsIGJhc2UpCiAjZGVmaW5lIHRvX3JhZGVvbl9mcmFtZWJ1ZmZlcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHJhZGVvbl9mcmFtZWJ1ZmZlciwgYmFzZSkKIAotZW51bSByYWRlb25fY29ubmVjdG9yX3R5cGUgewotCUNPTk5FQ1RPUl9OT05FLAotCUNPTk5FQ1RPUl9WR0EsCi0JQ09OTkVDVE9SX0RWSV9JLAotCUNPTk5FQ1RPUl9EVklfRCwKLQlDT05ORUNUT1JfRFZJX0EsCi0JQ09OTkVDVE9SX1NUViwKLQlDT05ORUNUT1JfQ1RWLAotCUNPTk5FQ1RPUl9MVkRTLAotCUNPTk5FQ1RPUl9ESUdJVEFMLAotCUNPTk5FQ1RPUl9TQ0FSVCwKLQlDT05ORUNUT1JfSERNSV9UWVBFX0EsCi0JQ09OTkVDVE9SX0hETUlfVFlQRV9CLAotCUNPTk5FQ1RPUl8wWEMsCi0JQ09OTkVDVE9SXzBYRCwKLQlDT05ORUNUT1JfRElOLAotCUNPTk5FQ1RPUl9ESVNQTEFZX1BPUlQsCi0JQ09OTkVDVE9SX1VOU1VQUE9SVEVECi19OwotCi1lbnVtIHJhZGVvbl9kdmlfdHlwZSB7Ci0JRFZJX0FVVE8sCi0JRFZJX0RJR0lUQUwsCi0JRFZJX0FOQUxPRwotfTsKLQogZW51bSByYWRlb25fcm14X3R5cGUgewogCVJNWF9PRkYsCiAJUk1YX0ZVTEwsCkBAIC04OCw2ICs2Miw3IEBACiAJVFZfU1REX1NDQVJUX1BBTCwKIAlUVl9TVERfU0VDQU0sCiAJVFZfU1REX1BBTF9DTiwKKwlUVl9TVERfUEFMX04sCiB9OwogCiAvKiByYWRlb24gZ3Bpby1iYXNlZCBpMmMKQEAgLTM5NSw2ICszNzAsMTEgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIH07CiAKK2V4dGVybiBlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9jb21iaW9zX2dldF90dl9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBlbnVtIHJhZGVvbl90dl9zdGQKK3JhZGVvbl9hdG9tYmlvc19nZXRfdHZfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKIGV4dGVybiB2b2lkIHJhZGVvbl9jb25uZWN0b3JfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIGV4dGVybiBib29sIHJhZGVvbl9kcF9uZWVkc19saW5rX3RyYWluKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RwX21vZGVfdmFsaWRfaGVscGVyKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCBkOWZmZTFmLi40ZTYzNmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtMjIxLDggKzIyMSw5IEBACiBpbnQgcmFkZW9uX2JvX2V2aWN0X3ZyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgewotCQkvKiBVc2VsZXNzIHRvIGV2aWN0IG9uIElHUCBjaGlwcyAqLwotCQlyZXR1cm4gMDsKKwkJaWYgKHJkZXYtPm1jLmlncF9zaWRlcG9ydF9lbmFibGVkID09IGZhbHNlKQorCQkJLyogVXNlbGVzcyB0byBldmljdCBvbiBJR1AgY2hpcHMgKi8KKwkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gdHRtX2JvX2V2aWN0X21tKCZyZGV2LT5tbWFuLmJkZXYsIFRUTV9QTF9WUkFNKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwppbmRleCAzOTFjOTczLi45ZjVlMmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCkBAIC00Miw4ICs0Miw4IEBACiAJLyogTnVtYmVyIG9mIHRlc3RzID0KIAkgKiAoVG90YWwgR1RUIC0gSUIgcG9vbCAtIHdyaXRlYmFjayBwYWdlIC0gcmluZyBidWZmZXIpIC8gdGVzdCBzaXplCiAJICovCi0JbiA9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIFJBREVPTl9HUFVfUEFHRV9TSVpFIC0KLQkgICAgIHJkZXYtPmNwLnJpbmdfc2l6ZSkgLyBzaXplOworCW4gPSAoKHUzMikocmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fSUJfUE9PTF9TSVpFKjY0KjEwMjQgLSBSQURFT05fR1BVX1BBR0VfU0laRSAtCisJICAgICByZGV2LT5jcC5yaW5nX3NpemUpKSAvIHNpemU7CiAKIAlndHRfb2JqID0ga3phbGxvYyhuICogc2l6ZW9mKCpndHRfb2JqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFndHRfb2JqKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCmluZGV4IGQ3ZmQxNjAuLjNiMGMwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCkBAIC00OTQsNiArNDk0LDcgQEAKIAkJRFJNX0VSUk9SKCJmYWlsZWQgaW5pdGlhbGl6aW5nIGJ1ZmZlciBvYmplY3QgZHJpdmVyKCVkKS5cbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CisJcmRldi0+bW1hbi5pbml0aWFsaXplZCA9IHRydWU7CiAJciA9IHR0bV9ib19pbml0X21tKCZyZGV2LT5tbWFuLmJkZXYsIFRUTV9QTF9WUkFNLAogCQkJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4+IFBBR0VfU0hJRlQpOwogCWlmIChyKSB7CkBAIC01NDEsNiArNTQyLDggQEAKIHsKIAlpbnQgcjsKIAorCWlmICghcmRldi0+bW1hbi5pbml0aWFsaXplZCkKKwkJcmV0dXJuOwogCWlmIChyZGV2LT5zdG9sbGVuX3ZnYV9tZW1vcnkpIHsKIAkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPnN0b2xsZW5fdmdhX21lbW9yeSwgZmFsc2UpOwogCQlpZiAociA9PSAwKSB7CkBAIC01NTQsNiArNTU3LDcgQEAKIAl0dG1fYm9fZGV2aWNlX3JlbGVhc2UoJnJkZXYtPm1tYW4uYmRldik7CiAJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIAlyYWRlb25fdHRtX2dsb2JhbF9maW5pKHJkZXYpOworCXJkZXYtPm1tYW4uaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAlEUk1fSU5GTygicmFkZW9uOiB0dG0gZmluYWxpemVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWY3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAKQEAgLTAsMCArMSw3OTUgQEAKK3I0MjAgMHg0ZjYwCisweDE0MzQgU1JDX1lfWAorMHgxNDM4IERTVF9ZX1gKKzB4MTQzQyBEU1RfSEVJR0hUX1dJRFRICisweDE0NkMgRFBfR1VJX01BU1RFUl9DTlRMCisweDE0NzQgQlJVU0hfWV9YCisweDE0NzggRFBfQlJVU0hfQktHRF9DTFIKKzB4MTQ3QyBEUF9CUlVTSF9GUkdEX0NMUgorMHgxNDgwIEJSVVNIX0RBVEEwCisweDE0ODQgQlJVU0hfREFUQTEKKzB4MTU5OCBEU1RfV0lEVEhfSEVJR0hUCisweDE1QzAgQ0xSX0NNUF9DTlRMCisweDE1QzQgQ0xSX0NNUF9DTFJfU1JDCisweDE1QzggQ0xSX0NNUF9DTFJfRFNUCisweDE1Q0MgQ0xSX0NNUF9NU0sKKzB4MTVEOCBEUF9TUkNfRlJHRF9DTFIKKzB4MTVEQyBEUF9TUkNfQktHRF9DTFIKKzB4MTYwMCBEU1RfTElORV9TVEFSVAorMHgxNjA0IERTVF9MSU5FX0VORAorMHgxNjA4IERTVF9MSU5FX1BBVENPVU5UCisweDE2QzAgRFBfQ05UTAorMHgxNkNDIERQX1dSSVRFX01TSworMHgxNkQwIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUgorMHgxNkU4IERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUCisweDE2RUMgU0NfVE9QX0xFRlQKKzB4MTZGMCBTQ19CT1RUT01fUklHSFQKKzB4MTZGNCBTUkNfU0NfQk9UVE9NX1JJR0hUCisweDE3MTQgRFNUQ0FDSEVfQ1RMU1RBVAorMHgxNzIwIFdBSVRfVU5USUwKKzB4MTcyQyBSQkJNX0dVSUNOVEwKKzB4MUQ5OCBWQVBfVlBPUlRfWFNDQUxFCisweDFEOUMgVkFQX1ZQT1JUX1hPRkZTRVQKKzB4MURBMCBWQVBfVlBPUlRfWVNDQUxFCisweDFEQTQgVkFQX1ZQT1JUX1lPRkZTRVQKKzB4MURBOCBWQVBfVlBPUlRfWlNDQUxFCisweDFEQUMgVkFQX1ZQT1JUX1pPRkZTRVQKKzB4MjA4MCBWQVBfQ05UTAorMHgyMDkwIFZBUF9PVVRfVlRYX0ZNVF8wCisweDIwOTQgVkFQX09VVF9WVFhfRk1UXzEKKzB4MjBCMCBWQVBfVlRFX0NOVEwKKzB4MjEzOCBWQVBfVkZfTUlOX1ZUWF9JTkRYCisweDIxNDAgVkFQX0NOVExfU1RBVFVTCisweDIxNTAgVkFQX1BST0dfU1RSRUFNX0NOVExfMAorMHgyMTU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMXzEKKzB4MjE1OCBWQVBfUFJPR19TVFJFQU1fQ05UTF8yCisweDIxNUMgVkFQX1BST0dfU1RSRUFNX0NOVExfMworMHgyMTYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzQKKzB4MjE2NCBWQVBfUFJPR19TVFJFQU1fQ05UTF81CisweDIxNjggVkFQX1BST0dfU1RSRUFNX0NOVExfNgorMHgyMTZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMXzcKKzB4MjE4MCBWQVBfVlRYX1NUQVRFX0NOVEwKKzB4MjE4NCBWQVBfVlNNX1ZUWF9BU1NNCisweDIxODggVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzAKKzB4MjE4QyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMQorMHgyMTkwIFZBUF9WVFhfU1RBVEVfSU5EX1JFR18yCisweDIxOTQgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzMKKzB4MjE5OCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNAorMHgyMTlDIFZBUF9WVFhfU1RBVEVfSU5EX1JFR181CisweDIxQTAgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzYKKzB4MjFBNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfNworMHgyMUE4IFZBUF9WVFhfU1RBVEVfSU5EX1JFR184CisweDIxQUMgVkFQX1ZUWF9TVEFURV9JTkRfUkVHXzkKKzB4MjFCMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTAKKzB4MjFCNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTEKKzB4MjFCOCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTIKKzB4MjFCQyBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTMKKzB4MjFDMCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTQKKzB4MjFDNCBWQVBfVlRYX1NUQVRFX0lORF9SRUdfMTUKKzB4MjFEQyBWQVBfUFNDX1NHTl9OT1JNX0NOVEwKKzB4MjFFMCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMAorMHgyMUU0IFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF8xCisweDIxRTggVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzIKKzB4MjFFQyBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfMworMHgyMUYwIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF80CisweDIxRjQgVkFQX1BST0dfU1RSRUFNX0NOVExfRVhUXzUKKzB4MjFGOCBWQVBfUFJPR19TVFJFQU1fQ05UTF9FWFRfNgorMHgyMUZDIFZBUF9QUk9HX1NUUkVBTV9DTlRMX0VYVF83CisweDIyMDAgVkFQX1BWU19WRUNUT1JfSU5EWF9SRUcKKzB4MjIwNCBWQVBfUFZTX1ZFQ1RPUl9EQVRBX1JFRworMHgyMjA4IFZBUF9QVlNfVkVDVE9SX0RBVEFfUkVHXzEyOAorMHgyMjFDIFZBUF9DTElQX0NOVEwKKzB4MjIyMCBWQVBfR0JfVkVSVF9DTElQX0FESgorMHgyMjI0IFZBUF9HQl9WRVJUX0RJU0NfQURKCisweDIyMjggVkFQX0dCX0hPUlpfQ0xJUF9BREoKKzB4MjIyQyBWQVBfR0JfSE9SWl9ESVNDX0FESgorMHgyMjMwIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzAKKzB4MjIzNCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xCisweDIyMzggVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMgorMHgyMjNDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzMKKzB4MjI0MCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU180CisweDIyNDQgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfNQorMHgyMjQ4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzYKKzB4MjI0QyBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU183CisweDIyNTAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfOAorMHgyMjU0IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzkKKzB4MjI1OCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMAorMHgyMjVDIFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzExCisweDIyNjAgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTIKKzB4MjI2NCBWQVBfUFZTX0ZMT1dfQ05UTF9BRERSU18xMworMHgyMjY4IFZBUF9QVlNfRkxPV19DTlRMX0FERFJTXzE0CisweDIyNkMgVkFQX1BWU19GTE9XX0NOVExfQUREUlNfMTUKKzB4MjI4NCBWQVBfUFZTX1NUQVRFX0ZMVVNIX1JFRworMHgyMjg4IFZBUF9QVlNfVlRYX1RJTUVPVVRfUkVHCisweDIyOTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8wCisweDIyOTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xCisweDIyOTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8yCisweDIyOUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8zCisweDIyQTAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF80CisweDIyQTQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF81CisweDIyQTggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF82CisweDIyQUMgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF83CisweDIyQjAgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF84CisweDIyQjQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF85CisweDIyQjggVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMAorMHgyMkJDIFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTEKKzB4MjJDMCBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzEyCisweDIyQzQgVkFQX1BWU19GTE9XX0NOVExfTE9PUF9JTkRFWF8xMworMHgyMkM4IFZBUF9QVlNfRkxPV19DTlRMX0xPT1BfSU5ERVhfMTQKKzB4MjJDQyBWQVBfUFZTX0ZMT1dfQ05UTF9MT09QX0lOREVYXzE1CisweDIyRDAgVkFQX1BWU19DT0RFX0NOVExfMAorMHgyMkQ0IFZBUF9QVlNfQ09OU1RfQ05UTAorMHgyMkQ4IFZBUF9QVlNfQ09ERV9DTlRMXzEKKzB4MjJEQyBWQVBfUFZTX0ZMT1dfQ05UTF9PUEMKKzB4MzQyQyBSQjJEX0RTVENBQ0hFX0NUTFNUQVQKKzB4NDAwMCBHQl9WQVBfUkFTVEVSX1ZUWF9GTVRfMAorMHg0MDA0IEdCX1ZBUF9SQVNURVJfVlRYX0ZNVF8xCisweDQwMDggR0JfRU5BQkxFCisweDQwMUMgR0JfU0VMRUNUCisweDQwMjAgR0JfQUFfQ09ORklHCisweDQwMjQgR0JfRklGT19TSVpFCisweDQxMDAgVFhfSU5WQUxUQUdTCisweDQyMDAgR0FfUE9JTlRfUzAKKzB4NDIwNCBHQV9QT0lOVF9UMAorMHg0MjA4IEdBX1BPSU5UX1MxCisweDQyMEMgR0FfUE9JTlRfVDEKKzB4NDIxNCBHQV9UUklBTkdMRV9TVElQUExFCisweDQyMUMgR0FfUE9JTlRfU0laRQorMHg0MjMwIEdBX1BPSU5UX01JTk1BWAorMHg0MjM0IEdBX0xJTkVfQ05UTAorMHg0MjM4IEdBX0xJTkVfU1RJUFBMRV9DT05GSUcKKzB4NDI2MCBHQV9MSU5FX1NUSVBQTEVfVkFMVUUKKzB4NDI2NCBHQV9MSU5FX1MwCisweDQyNjggR0FfTElORV9TMQorMHg0Mjc4IEdBX0NPTE9SX0NPTlRST0wKKzB4NDI3QyBHQV9TT0xJRF9SRworMHg0MjgwIEdBX1NPTElEX0JBCisweDQyODggR0FfUE9MWV9NT0RFCisweDQyOEMgR0FfUk9VTkRfTU9ERQorMHg0MjkwIEdBX09GRlNFVAorMHg0Mjk0IEdBX0ZPR19TQ0FMRQorMHg0Mjk4IEdBX0ZPR19PRkZTRVQKKzB4NDJBMCBTVV9URVhfV1JBUAorMHg0MkE0IFNVX1BPTFlfT0ZGU0VUX0ZST05UX1NDQUxFCisweDQyQTggU1VfUE9MWV9PRkZTRVRfRlJPTlRfT0ZGU0VUCisweDQyQUMgU1VfUE9MWV9PRkZTRVRfQkFDS19TQ0FMRQorMHg0MkIwIFNVX1BPTFlfT0ZGU0VUX0JBQ0tfT0ZGU0VUCisweDQyQjQgU1VfUE9MWV9PRkZTRVRfRU5BQkxFCisweDQyQjggU1VfQ1VMTF9NT0RFCisweDQyQzAgU1VfREVQVEhfU0NBTEUKKzB4NDJDNCBTVV9ERVBUSF9PRkZTRVQKKzB4NDJDOCBTVV9SRUdfREVTVAorMHg0MzAwIFJTX0NPVU5UCisweDQzMDQgUlNfSU5TVF9DT1VOVAorMHg0MzEwIFJTX0lQXzAKKzB4NDMxNCBSU19JUF8xCisweDQzMTggUlNfSVBfMgorMHg0MzFDIFJTX0lQXzMKKzB4NDMyMCBSU19JUF80CisweDQzMjQgUlNfSVBfNQorMHg0MzI4IFJTX0lQXzYKKzB4NDMyQyBSU19JUF83CisweDQzMzAgUlNfSU5TVF8wCisweDQzMzQgUlNfSU5TVF8xCisweDQzMzggUlNfSU5TVF8yCisweDQzM0MgUlNfSU5TVF8zCisweDQzNDAgUlNfSU5TVF80CisweDQzNDQgUlNfSU5TVF81CisweDQzNDggUlNfSU5TVF82CisweDQzNEMgUlNfSU5TVF83CisweDQzNTAgUlNfSU5TVF84CisweDQzNTQgUlNfSU5TVF85CisweDQzNTggUlNfSU5TVF8xMAorMHg0MzVDIFJTX0lOU1RfMTEKKzB4NDM2MCBSU19JTlNUXzEyCisweDQzNjQgUlNfSU5TVF8xMworMHg0MzY4IFJTX0lOU1RfMTQKKzB4NDM2QyBSU19JTlNUXzE1CisweDQzQTQgU0NfSFlQRVJaX0VOCisweDQzQTggU0NfRURHRVJVTEUKKzB4NDNCMCBTQ19DTElQXzBfQQorMHg0M0I0IFNDX0NMSVBfMF9CCisweDQzQjggU0NfQ0xJUF8xX0EKKzB4NDNCQyBTQ19DTElQXzFfQgorMHg0M0MwIFNDX0NMSVBfMl9BCisweDQzQzQgU0NfQ0xJUF8yX0IKKzB4NDNDOCBTQ19DTElQXzNfQQorMHg0M0NDIFNDX0NMSVBfM19CCisweDQzRDAgU0NfQ0xJUF9SVUxFCisweDQzRTAgU0NfU0NJU1NPUjAKKzB4NDNFOCBTQ19TQ1JFRU5ET09SCisweDQ0NDAgVFhfRklMVEVSMV8wCisweDQ0NDQgVFhfRklMVEVSMV8xCisweDQ0NDggVFhfRklMVEVSMV8yCisweDQ0NEMgVFhfRklMVEVSMV8zCisweDQ0NTAgVFhfRklMVEVSMV80CisweDQ0NTQgVFhfRklMVEVSMV81CisweDQ0NTggVFhfRklMVEVSMV82CisweDQ0NUMgVFhfRklMVEVSMV83CisweDQ0NjAgVFhfRklMVEVSMV84CisweDQ0NjQgVFhfRklMVEVSMV85CisweDQ0NjggVFhfRklMVEVSMV8xMAorMHg0NDZDIFRYX0ZJTFRFUjFfMTEKKzB4NDQ3MCBUWF9GSUxURVIxXzEyCisweDQ0NzQgVFhfRklMVEVSMV8xMworMHg0NDc4IFRYX0ZJTFRFUjFfMTQKKzB4NDQ3QyBUWF9GSUxURVIxXzE1CisweDQ1ODAgVFhfQ0hST01BX0tFWV8wCisweDQ1ODQgVFhfQ0hST01BX0tFWV8xCisweDQ1ODggVFhfQ0hST01BX0tFWV8yCisweDQ1OEMgVFhfQ0hST01BX0tFWV8zCisweDQ1OTAgVFhfQ0hST01BX0tFWV80CisweDQ1OTQgVFhfQ0hST01BX0tFWV81CisweDQ1OTggVFhfQ0hST01BX0tFWV82CisweDQ1OUMgVFhfQ0hST01BX0tFWV83CisweDQ1QTAgVFhfQ0hST01BX0tFWV84CisweDQ1QTQgVFhfQ0hST01BX0tFWV85CisweDQ1QTggVFhfQ0hST01BX0tFWV8xMAorMHg0NUFDIFRYX0NIUk9NQV9LRVlfMTEKKzB4NDVCMCBUWF9DSFJPTUFfS0VZXzEyCisweDQ1QjQgVFhfQ0hST01BX0tFWV8xMworMHg0NUI4IFRYX0NIUk9NQV9LRVlfMTQKKzB4NDVCQyBUWF9DSFJPTUFfS0VZXzE1CisweDQ1QzAgVFhfQk9SREVSX0NPTE9SXzAKKzB4NDVDNCBUWF9CT1JERVJfQ09MT1JfMQorMHg0NUM4IFRYX0JPUkRFUl9DT0xPUl8yCisweDQ1Q0MgVFhfQk9SREVSX0NPTE9SXzMKKzB4NDVEMCBUWF9CT1JERVJfQ09MT1JfNAorMHg0NUQ0IFRYX0JPUkRFUl9DT0xPUl81CisweDQ1RDggVFhfQk9SREVSX0NPTE9SXzYKKzB4NDVEQyBUWF9CT1JERVJfQ09MT1JfNworMHg0NUUwIFRYX0JPUkRFUl9DT0xPUl84CisweDQ1RTQgVFhfQk9SREVSX0NPTE9SXzkKKzB4NDVFOCBUWF9CT1JERVJfQ09MT1JfMTAKKzB4NDVFQyBUWF9CT1JERVJfQ09MT1JfMTEKKzB4NDVGMCBUWF9CT1JERVJfQ09MT1JfMTIKKzB4NDVGNCBUWF9CT1JERVJfQ09MT1JfMTMKKzB4NDVGOCBUWF9CT1JERVJfQ09MT1JfMTQKKzB4NDVGQyBUWF9CT1JERVJfQ09MT1JfMTUKKzB4NDYwMCBVU19DT05GSUcKKzB4NDYwNCBVU19QSVhTSVpFCisweDQ2MDggVVNfQ09ERV9PRkZTRVQKKzB4NDYwQyBVU19SRVNFVAorMHg0NjEwIFVTX0NPREVfQUREUl8wCisweDQ2MTQgVVNfQ09ERV9BRERSXzEKKzB4NDYxOCBVU19DT0RFX0FERFJfMgorMHg0NjFDIFVTX0NPREVfQUREUl8zCisweDQ2MjAgVVNfVEVYX0lOU1RfMAorMHg0NjI0IFVTX1RFWF9JTlNUXzEKKzB4NDYyOCBVU19URVhfSU5TVF8yCisweDQ2MkMgVVNfVEVYX0lOU1RfMworMHg0NjMwIFVTX1RFWF9JTlNUXzQKKzB4NDYzNCBVU19URVhfSU5TVF81CisweDQ2MzggVVNfVEVYX0lOU1RfNgorMHg0NjNDIFVTX1RFWF9JTlNUXzcKKzB4NDY0MCBVU19URVhfSU5TVF84CisweDQ2NDQgVVNfVEVYX0lOU1RfOQorMHg0NjQ4IFVTX1RFWF9JTlNUXzEwCisweDQ2NEMgVVNfVEVYX0lOU1RfMTEKKzB4NDY1MCBVU19URVhfSU5TVF8xMgorMHg0NjU0IFVTX1RFWF9JTlNUXzEzCisweDQ2NTggVVNfVEVYX0lOU1RfMTQKKzB4NDY1QyBVU19URVhfSU5TVF8xNQorMHg0NjYwIFVTX1RFWF9JTlNUXzE2CisweDQ2NjQgVVNfVEVYX0lOU1RfMTcKKzB4NDY2OCBVU19URVhfSU5TVF8xOAorMHg0NjZDIFVTX1RFWF9JTlNUXzE5CisweDQ2NzAgVVNfVEVYX0lOU1RfMjAKKzB4NDY3NCBVU19URVhfSU5TVF8yMQorMHg0Njc4IFVTX1RFWF9JTlNUXzIyCisweDQ2N0MgVVNfVEVYX0lOU1RfMjMKKzB4NDY4MCBVU19URVhfSU5TVF8yNAorMHg0Njg0IFVTX1RFWF9JTlNUXzI1CisweDQ2ODggVVNfVEVYX0lOU1RfMjYKKzB4NDY4QyBVU19URVhfSU5TVF8yNworMHg0NjkwIFVTX1RFWF9JTlNUXzI4CisweDQ2OTQgVVNfVEVYX0lOU1RfMjkKKzB4NDY5OCBVU19URVhfSU5TVF8zMAorMHg0NjlDIFVTX1RFWF9JTlNUXzMxCisweDQ2QTQgVVNfT1VUX0ZNVF8wCisweDQ2QTggVVNfT1VUX0ZNVF8xCisweDQ2QUMgVVNfT1VUX0ZNVF8yCisweDQ2QjAgVVNfT1VUX0ZNVF8zCisweDQ2QjQgVVNfV19GTVQKKzB4NDZCOCBVU19DT0RFX0JBTksKKzB4NDZCQyBVU19DT0RFX0VYVAorMHg0NkMwIFVTX0FMVV9SR0JfQUREUl8wCisweDQ2QzQgVVNfQUxVX1JHQl9BRERSXzEKKzB4NDZDOCBVU19BTFVfUkdCX0FERFJfMgorMHg0NkNDIFVTX0FMVV9SR0JfQUREUl8zCisweDQ2RDAgVVNfQUxVX1JHQl9BRERSXzQKKzB4NDZENCBVU19BTFVfUkdCX0FERFJfNQorMHg0NkQ4IFVTX0FMVV9SR0JfQUREUl82CisweDQ2REMgVVNfQUxVX1JHQl9BRERSXzcKKzB4NDZFMCBVU19BTFVfUkdCX0FERFJfOAorMHg0NkU0IFVTX0FMVV9SR0JfQUREUl85CisweDQ2RTggVVNfQUxVX1JHQl9BRERSXzEwCisweDQ2RUMgVVNfQUxVX1JHQl9BRERSXzExCisweDQ2RjAgVVNfQUxVX1JHQl9BRERSXzEyCisweDQ2RjQgVVNfQUxVX1JHQl9BRERSXzEzCisweDQ2RjggVVNfQUxVX1JHQl9BRERSXzE0CisweDQ2RkMgVVNfQUxVX1JHQl9BRERSXzE1CisweDQ3MDAgVVNfQUxVX1JHQl9BRERSXzE2CisweDQ3MDQgVVNfQUxVX1JHQl9BRERSXzE3CisweDQ3MDggVVNfQUxVX1JHQl9BRERSXzE4CisweDQ3MEMgVVNfQUxVX1JHQl9BRERSXzE5CisweDQ3MTAgVVNfQUxVX1JHQl9BRERSXzIwCisweDQ3MTQgVVNfQUxVX1JHQl9BRERSXzIxCisweDQ3MTggVVNfQUxVX1JHQl9BRERSXzIyCisweDQ3MUMgVVNfQUxVX1JHQl9BRERSXzIzCisweDQ3MjAgVVNfQUxVX1JHQl9BRERSXzI0CisweDQ3MjQgVVNfQUxVX1JHQl9BRERSXzI1CisweDQ3MjggVVNfQUxVX1JHQl9BRERSXzI2CisweDQ3MkMgVVNfQUxVX1JHQl9BRERSXzI3CisweDQ3MzAgVVNfQUxVX1JHQl9BRERSXzI4CisweDQ3MzQgVVNfQUxVX1JHQl9BRERSXzI5CisweDQ3MzggVVNfQUxVX1JHQl9BRERSXzMwCisweDQ3M0MgVVNfQUxVX1JHQl9BRERSXzMxCisweDQ3NDAgVVNfQUxVX1JHQl9BRERSXzMyCisweDQ3NDQgVVNfQUxVX1JHQl9BRERSXzMzCisweDQ3NDggVVNfQUxVX1JHQl9BRERSXzM0CisweDQ3NEMgVVNfQUxVX1JHQl9BRERSXzM1CisweDQ3NTAgVVNfQUxVX1JHQl9BRERSXzM2CisweDQ3NTQgVVNfQUxVX1JHQl9BRERSXzM3CisweDQ3NTggVVNfQUxVX1JHQl9BRERSXzM4CisweDQ3NUMgVVNfQUxVX1JHQl9BRERSXzM5CisweDQ3NjAgVVNfQUxVX1JHQl9BRERSXzQwCisweDQ3NjQgVVNfQUxVX1JHQl9BRERSXzQxCisweDQ3NjggVVNfQUxVX1JHQl9BRERSXzQyCisweDQ3NkMgVVNfQUxVX1JHQl9BRERSXzQzCisweDQ3NzAgVVNfQUxVX1JHQl9BRERSXzQ0CisweDQ3NzQgVVNfQUxVX1JHQl9BRERSXzQ1CisweDQ3NzggVVNfQUxVX1JHQl9BRERSXzQ2CisweDQ3N0MgVVNfQUxVX1JHQl9BRERSXzQ3CisweDQ3ODAgVVNfQUxVX1JHQl9BRERSXzQ4CisweDQ3ODQgVVNfQUxVX1JHQl9BRERSXzQ5CisweDQ3ODggVVNfQUxVX1JHQl9BRERSXzUwCisweDQ3OEMgVVNfQUxVX1JHQl9BRERSXzUxCisweDQ3OTAgVVNfQUxVX1JHQl9BRERSXzUyCisweDQ3OTQgVVNfQUxVX1JHQl9BRERSXzUzCisweDQ3OTggVVNfQUxVX1JHQl9BRERSXzU0CisweDQ3OUMgVVNfQUxVX1JHQl9BRERSXzU1CisweDQ3QTAgVVNfQUxVX1JHQl9BRERSXzU2CisweDQ3QTQgVVNfQUxVX1JHQl9BRERSXzU3CisweDQ3QTggVVNfQUxVX1JHQl9BRERSXzU4CisweDQ3QUMgVVNfQUxVX1JHQl9BRERSXzU5CisweDQ3QjAgVVNfQUxVX1JHQl9BRERSXzYwCisweDQ3QjQgVVNfQUxVX1JHQl9BRERSXzYxCisweDQ3QjggVVNfQUxVX1JHQl9BRERSXzYyCisweDQ3QkMgVVNfQUxVX1JHQl9BRERSXzYzCisweDQ3QzAgVVNfQUxVX0FMUEhBX0FERFJfMAorMHg0N0M0IFVTX0FMVV9BTFBIQV9BRERSXzEKKzB4NDdDOCBVU19BTFVfQUxQSEFfQUREUl8yCisweDQ3Q0MgVVNfQUxVX0FMUEhBX0FERFJfMworMHg0N0QwIFVTX0FMVV9BTFBIQV9BRERSXzQKKzB4NDdENCBVU19BTFVfQUxQSEFfQUREUl81CisweDQ3RDggVVNfQUxVX0FMUEhBX0FERFJfNgorMHg0N0RDIFVTX0FMVV9BTFBIQV9BRERSXzcKKzB4NDdFMCBVU19BTFVfQUxQSEFfQUREUl84CisweDQ3RTQgVVNfQUxVX0FMUEhBX0FERFJfOQorMHg0N0U4IFVTX0FMVV9BTFBIQV9BRERSXzEwCisweDQ3RUMgVVNfQUxVX0FMUEhBX0FERFJfMTEKKzB4NDdGMCBVU19BTFVfQUxQSEFfQUREUl8xMgorMHg0N0Y0IFVTX0FMVV9BTFBIQV9BRERSXzEzCisweDQ3RjggVVNfQUxVX0FMUEhBX0FERFJfMTQKKzB4NDdGQyBVU19BTFVfQUxQSEFfQUREUl8xNQorMHg0ODAwIFVTX0FMVV9BTFBIQV9BRERSXzE2CisweDQ4MDQgVVNfQUxVX0FMUEhBX0FERFJfMTcKKzB4NDgwOCBVU19BTFVfQUxQSEFfQUREUl8xOAorMHg0ODBDIFVTX0FMVV9BTFBIQV9BRERSXzE5CisweDQ4MTAgVVNfQUxVX0FMUEhBX0FERFJfMjAKKzB4NDgxNCBVU19BTFVfQUxQSEFfQUREUl8yMQorMHg0ODE4IFVTX0FMVV9BTFBIQV9BRERSXzIyCisweDQ4MUMgVVNfQUxVX0FMUEhBX0FERFJfMjMKKzB4NDgyMCBVU19BTFVfQUxQSEFfQUREUl8yNAorMHg0ODI0IFVTX0FMVV9BTFBIQV9BRERSXzI1CisweDQ4MjggVVNfQUxVX0FMUEhBX0FERFJfMjYKKzB4NDgyQyBVU19BTFVfQUxQSEFfQUREUl8yNworMHg0ODMwIFVTX0FMVV9BTFBIQV9BRERSXzI4CisweDQ4MzQgVVNfQUxVX0FMUEhBX0FERFJfMjkKKzB4NDgzOCBVU19BTFVfQUxQSEFfQUREUl8zMAorMHg0ODNDIFVTX0FMVV9BTFBIQV9BRERSXzMxCisweDQ4NDAgVVNfQUxVX0FMUEhBX0FERFJfMzIKKzB4NDg0NCBVU19BTFVfQUxQSEFfQUREUl8zMworMHg0ODQ4IFVTX0FMVV9BTFBIQV9BRERSXzM0CisweDQ4NEMgVVNfQUxVX0FMUEhBX0FERFJfMzUKKzB4NDg1MCBVU19BTFVfQUxQSEFfQUREUl8zNgorMHg0ODU0IFVTX0FMVV9BTFBIQV9BRERSXzM3CisweDQ4NTggVVNfQUxVX0FMUEhBX0FERFJfMzgKKzB4NDg1QyBVU19BTFVfQUxQSEFfQUREUl8zOQorMHg0ODYwIFVTX0FMVV9BTFBIQV9BRERSXzQwCisweDQ4NjQgVVNfQUxVX0FMUEhBX0FERFJfNDEKKzB4NDg2OCBVU19BTFVfQUxQSEFfQUREUl80MgorMHg0ODZDIFVTX0FMVV9BTFBIQV9BRERSXzQzCisweDQ4NzAgVVNfQUxVX0FMUEhBX0FERFJfNDQKKzB4NDg3NCBVU19BTFVfQUxQSEFfQUREUl80NQorMHg0ODc4IFVTX0FMVV9BTFBIQV9BRERSXzQ2CisweDQ4N0MgVVNfQUxVX0FMUEhBX0FERFJfNDcKKzB4NDg4MCBVU19BTFVfQUxQSEFfQUREUl80OAorMHg0ODg0IFVTX0FMVV9BTFBIQV9BRERSXzQ5CisweDQ4ODggVVNfQUxVX0FMUEhBX0FERFJfNTAKKzB4NDg4QyBVU19BTFVfQUxQSEFfQUREUl81MQorMHg0ODkwIFVTX0FMVV9BTFBIQV9BRERSXzUyCisweDQ4OTQgVVNfQUxVX0FMUEhBX0FERFJfNTMKKzB4NDg5OCBVU19BTFVfQUxQSEFfQUREUl81NAorMHg0ODlDIFVTX0FMVV9BTFBIQV9BRERSXzU1CisweDQ4QTAgVVNfQUxVX0FMUEhBX0FERFJfNTYKKzB4NDhBNCBVU19BTFVfQUxQSEFfQUREUl81NworMHg0OEE4IFVTX0FMVV9BTFBIQV9BRERSXzU4CisweDQ4QUMgVVNfQUxVX0FMUEhBX0FERFJfNTkKKzB4NDhCMCBVU19BTFVfQUxQSEFfQUREUl82MAorMHg0OEI0IFVTX0FMVV9BTFBIQV9BRERSXzYxCisweDQ4QjggVVNfQUxVX0FMUEhBX0FERFJfNjIKKzB4NDhCQyBVU19BTFVfQUxQSEFfQUREUl82MworMHg0OEMwIFVTX0FMVV9SR0JfSU5TVF8wCisweDQ4QzQgVVNfQUxVX1JHQl9JTlNUXzEKKzB4NDhDOCBVU19BTFVfUkdCX0lOU1RfMgorMHg0OENDIFVTX0FMVV9SR0JfSU5TVF8zCisweDQ4RDAgVVNfQUxVX1JHQl9JTlNUXzQKKzB4NDhENCBVU19BTFVfUkdCX0lOU1RfNQorMHg0OEQ4IFVTX0FMVV9SR0JfSU5TVF82CisweDQ4REMgVVNfQUxVX1JHQl9JTlNUXzcKKzB4NDhFMCBVU19BTFVfUkdCX0lOU1RfOAorMHg0OEU0IFVTX0FMVV9SR0JfSU5TVF85CisweDQ4RTggVVNfQUxVX1JHQl9JTlNUXzEwCisweDQ4RUMgVVNfQUxVX1JHQl9JTlNUXzExCisweDQ4RjAgVVNfQUxVX1JHQl9JTlNUXzEyCisweDQ4RjQgVVNfQUxVX1JHQl9JTlNUXzEzCisweDQ4RjggVVNfQUxVX1JHQl9JTlNUXzE0CisweDQ4RkMgVVNfQUxVX1JHQl9JTlNUXzE1CisweDQ5MDAgVVNfQUxVX1JHQl9JTlNUXzE2CisweDQ5MDQgVVNfQUxVX1JHQl9JTlNUXzE3CisweDQ5MDggVVNfQUxVX1JHQl9JTlNUXzE4CisweDQ5MEMgVVNfQUxVX1JHQl9JTlNUXzE5CisweDQ5MTAgVVNfQUxVX1JHQl9JTlNUXzIwCisweDQ5MTQgVVNfQUxVX1JHQl9JTlNUXzIxCisweDQ5MTggVVNfQUxVX1JHQl9JTlNUXzIyCisweDQ5MUMgVVNfQUxVX1JHQl9JTlNUXzIzCisweDQ5MjAgVVNfQUxVX1JHQl9JTlNUXzI0CisweDQ5MjQgVVNfQUxVX1JHQl9JTlNUXzI1CisweDQ5MjggVVNfQUxVX1JHQl9JTlNUXzI2CisweDQ5MkMgVVNfQUxVX1JHQl9JTlNUXzI3CisweDQ5MzAgVVNfQUxVX1JHQl9JTlNUXzI4CisweDQ5MzQgVVNfQUxVX1JHQl9JTlNUXzI5CisweDQ5MzggVVNfQUxVX1JHQl9JTlNUXzMwCisweDQ5M0MgVVNfQUxVX1JHQl9JTlNUXzMxCisweDQ5NDAgVVNfQUxVX1JHQl9JTlNUXzMyCisweDQ5NDQgVVNfQUxVX1JHQl9JTlNUXzMzCisweDQ5NDggVVNfQUxVX1JHQl9JTlNUXzM0CisweDQ5NEMgVVNfQUxVX1JHQl9JTlNUXzM1CisweDQ5NTAgVVNfQUxVX1JHQl9JTlNUXzM2CisweDQ5NTQgVVNfQUxVX1JHQl9JTlNUXzM3CisweDQ5NTggVVNfQUxVX1JHQl9JTlNUXzM4CisweDQ5NUMgVVNfQUxVX1JHQl9JTlNUXzM5CisweDQ5NjAgVVNfQUxVX1JHQl9JTlNUXzQwCisweDQ5NjQgVVNfQUxVX1JHQl9JTlNUXzQxCisweDQ5NjggVVNfQUxVX1JHQl9JTlNUXzQyCisweDQ5NkMgVVNfQUxVX1JHQl9JTlNUXzQzCisweDQ5NzAgVVNfQUxVX1JHQl9JTlNUXzQ0CisweDQ5NzQgVVNfQUxVX1JHQl9JTlNUXzQ1CisweDQ5NzggVVNfQUxVX1JHQl9JTlNUXzQ2CisweDQ5N0MgVVNfQUxVX1JHQl9JTlNUXzQ3CisweDQ5ODAgVVNfQUxVX1JHQl9JTlNUXzQ4CisweDQ5ODQgVVNfQUxVX1JHQl9JTlNUXzQ5CisweDQ5ODggVVNfQUxVX1JHQl9JTlNUXzUwCisweDQ5OEMgVVNfQUxVX1JHQl9JTlNUXzUxCisweDQ5OTAgVVNfQUxVX1JHQl9JTlNUXzUyCisweDQ5OTQgVVNfQUxVX1JHQl9JTlNUXzUzCisweDQ5OTggVVNfQUxVX1JHQl9JTlNUXzU0CisweDQ5OUMgVVNfQUxVX1JHQl9JTlNUXzU1CisweDQ5QTAgVVNfQUxVX1JHQl9JTlNUXzU2CisweDQ5QTQgVVNfQUxVX1JHQl9JTlNUXzU3CisweDQ5QTggVVNfQUxVX1JHQl9JTlNUXzU4CisweDQ5QUMgVVNfQUxVX1JHQl9JTlNUXzU5CisweDQ5QjAgVVNfQUxVX1JHQl9JTlNUXzYwCisweDQ5QjQgVVNfQUxVX1JHQl9JTlNUXzYxCisweDQ5QjggVVNfQUxVX1JHQl9JTlNUXzYyCisweDQ5QkMgVVNfQUxVX1JHQl9JTlNUXzYzCisweDQ5QzAgVVNfQUxVX0FMUEhBX0lOU1RfMAorMHg0OUM0IFVTX0FMVV9BTFBIQV9JTlNUXzEKKzB4NDlDOCBVU19BTFVfQUxQSEFfSU5TVF8yCisweDQ5Q0MgVVNfQUxVX0FMUEhBX0lOU1RfMworMHg0OUQwIFVTX0FMVV9BTFBIQV9JTlNUXzQKKzB4NDlENCBVU19BTFVfQUxQSEFfSU5TVF81CisweDQ5RDggVVNfQUxVX0FMUEhBX0lOU1RfNgorMHg0OURDIFVTX0FMVV9BTFBIQV9JTlNUXzcKKzB4NDlFMCBVU19BTFVfQUxQSEFfSU5TVF84CisweDQ5RTQgVVNfQUxVX0FMUEhBX0lOU1RfOQorMHg0OUU4IFVTX0FMVV9BTFBIQV9JTlNUXzEwCisweDQ5RUMgVVNfQUxVX0FMUEhBX0lOU1RfMTEKKzB4NDlGMCBVU19BTFVfQUxQSEFfSU5TVF8xMgorMHg0OUY0IFVTX0FMVV9BTFBIQV9JTlNUXzEzCisweDQ5RjggVVNfQUxVX0FMUEhBX0lOU1RfMTQKKzB4NDlGQyBVU19BTFVfQUxQSEFfSU5TVF8xNQorMHg0QTAwIFVTX0FMVV9BTFBIQV9JTlNUXzE2CisweDRBMDQgVVNfQUxVX0FMUEhBX0lOU1RfMTcKKzB4NEEwOCBVU19BTFVfQUxQSEFfSU5TVF8xOAorMHg0QTBDIFVTX0FMVV9BTFBIQV9JTlNUXzE5CisweDRBMTAgVVNfQUxVX0FMUEhBX0lOU1RfMjAKKzB4NEExNCBVU19BTFVfQUxQSEFfSU5TVF8yMQorMHg0QTE4IFVTX0FMVV9BTFBIQV9JTlNUXzIyCisweDRBMUMgVVNfQUxVX0FMUEhBX0lOU1RfMjMKKzB4NEEyMCBVU19BTFVfQUxQSEFfSU5TVF8yNAorMHg0QTI0IFVTX0FMVV9BTFBIQV9JTlNUXzI1CisweDRBMjggVVNfQUxVX0FMUEhBX0lOU1RfMjYKKzB4NEEyQyBVU19BTFVfQUxQSEFfSU5TVF8yNworMHg0QTMwIFVTX0FMVV9BTFBIQV9JTlNUXzI4CisweDRBMzQgVVNfQUxVX0FMUEhBX0lOU1RfMjkKKzB4NEEzOCBVU19BTFVfQUxQSEFfSU5TVF8zMAorMHg0QTNDIFVTX0FMVV9BTFBIQV9JTlNUXzMxCisweDRBNDAgVVNfQUxVX0FMUEhBX0lOU1RfMzIKKzB4NEE0NCBVU19BTFVfQUxQSEFfSU5TVF8zMworMHg0QTQ4IFVTX0FMVV9BTFBIQV9JTlNUXzM0CisweDRBNEMgVVNfQUxVX0FMUEhBX0lOU1RfMzUKKzB4NEE1MCBVU19BTFVfQUxQSEFfSU5TVF8zNgorMHg0QTU0IFVTX0FMVV9BTFBIQV9JTlNUXzM3CisweDRBNTggVVNfQUxVX0FMUEhBX0lOU1RfMzgKKzB4NEE1QyBVU19BTFVfQUxQSEFfSU5TVF8zOQorMHg0QTYwIFVTX0FMVV9BTFBIQV9JTlNUXzQwCisweDRBNjQgVVNfQUxVX0FMUEhBX0lOU1RfNDEKKzB4NEE2OCBVU19BTFVfQUxQSEFfSU5TVF80MgorMHg0QTZDIFVTX0FMVV9BTFBIQV9JTlNUXzQzCisweDRBNzAgVVNfQUxVX0FMUEhBX0lOU1RfNDQKKzB4NEE3NCBVU19BTFVfQUxQSEFfSU5TVF80NQorMHg0QTc4IFVTX0FMVV9BTFBIQV9JTlNUXzQ2CisweDRBN0MgVVNfQUxVX0FMUEhBX0lOU1RfNDcKKzB4NEE4MCBVU19BTFVfQUxQSEFfSU5TVF80OAorMHg0QTg0IFVTX0FMVV9BTFBIQV9JTlNUXzQ5CisweDRBODggVVNfQUxVX0FMUEhBX0lOU1RfNTAKKzB4NEE4QyBVU19BTFVfQUxQSEFfSU5TVF81MQorMHg0QTkwIFVTX0FMVV9BTFBIQV9JTlNUXzUyCisweDRBOTQgVVNfQUxVX0FMUEhBX0lOU1RfNTMKKzB4NEE5OCBVU19BTFVfQUxQSEFfSU5TVF81NAorMHg0QTlDIFVTX0FMVV9BTFBIQV9JTlNUXzU1CisweDRBQTAgVVNfQUxVX0FMUEhBX0lOU1RfNTYKKzB4NEFBNCBVU19BTFVfQUxQSEFfSU5TVF81NworMHg0QUE4IFVTX0FMVV9BTFBIQV9JTlNUXzU4CisweDRBQUMgVVNfQUxVX0FMUEhBX0lOU1RfNTkKKzB4NEFCMCBVU19BTFVfQUxQSEFfSU5TVF82MAorMHg0QUI0IFVTX0FMVV9BTFBIQV9JTlNUXzYxCisweDRBQjggVVNfQUxVX0FMUEhBX0lOU1RfNjIKKzB4NEFCQyBVU19BTFVfQUxQSEFfSU5TVF82MworMHg0QUMwIFVTX0FMVV9FWFRfQUREUl8wCisweDRBQzQgVVNfQUxVX0VYVF9BRERSXzEKKzB4NEFDOCBVU19BTFVfRVhUX0FERFJfMgorMHg0QUNDIFVTX0FMVV9FWFRfQUREUl8zCisweDRBRDAgVVNfQUxVX0VYVF9BRERSXzQKKzB4NEFENCBVU19BTFVfRVhUX0FERFJfNQorMHg0QUQ4IFVTX0FMVV9FWFRfQUREUl82CisweDRBREMgVVNfQUxVX0VYVF9BRERSXzcKKzB4NEFFMCBVU19BTFVfRVhUX0FERFJfOAorMHg0QUU0IFVTX0FMVV9FWFRfQUREUl85CisweDRBRTggVVNfQUxVX0VYVF9BRERSXzEwCisweDRBRUMgVVNfQUxVX0VYVF9BRERSXzExCisweDRBRjAgVVNfQUxVX0VYVF9BRERSXzEyCisweDRBRjQgVVNfQUxVX0VYVF9BRERSXzEzCisweDRBRjggVVNfQUxVX0VYVF9BRERSXzE0CisweDRBRkMgVVNfQUxVX0VYVF9BRERSXzE1CisweDRCMDAgVVNfQUxVX0VYVF9BRERSXzE2CisweDRCMDQgVVNfQUxVX0VYVF9BRERSXzE3CisweDRCMDggVVNfQUxVX0VYVF9BRERSXzE4CisweDRCMEMgVVNfQUxVX0VYVF9BRERSXzE5CisweDRCMTAgVVNfQUxVX0VYVF9BRERSXzIwCisweDRCMTQgVVNfQUxVX0VYVF9BRERSXzIxCisweDRCMTggVVNfQUxVX0VYVF9BRERSXzIyCisweDRCMUMgVVNfQUxVX0VYVF9BRERSXzIzCisweDRCMjAgVVNfQUxVX0VYVF9BRERSXzI0CisweDRCMjQgVVNfQUxVX0VYVF9BRERSXzI1CisweDRCMjggVVNfQUxVX0VYVF9BRERSXzI2CisweDRCMkMgVVNfQUxVX0VYVF9BRERSXzI3CisweDRCMzAgVVNfQUxVX0VYVF9BRERSXzI4CisweDRCMzQgVVNfQUxVX0VYVF9BRERSXzI5CisweDRCMzggVVNfQUxVX0VYVF9BRERSXzMwCisweDRCM0MgVVNfQUxVX0VYVF9BRERSXzMxCisweDRCNDAgVVNfQUxVX0VYVF9BRERSXzMyCisweDRCNDQgVVNfQUxVX0VYVF9BRERSXzMzCisweDRCNDggVVNfQUxVX0VYVF9BRERSXzM0CisweDRCNEMgVVNfQUxVX0VYVF9BRERSXzM1CisweDRCNTAgVVNfQUxVX0VYVF9BRERSXzM2CisweDRCNTQgVVNfQUxVX0VYVF9BRERSXzM3CisweDRCNTggVVNfQUxVX0VYVF9BRERSXzM4CisweDRCNUMgVVNfQUxVX0VYVF9BRERSXzM5CisweDRCNjAgVVNfQUxVX0VYVF9BRERSXzQwCisweDRCNjQgVVNfQUxVX0VYVF9BRERSXzQxCisweDRCNjggVVNfQUxVX0VYVF9BRERSXzQyCisweDRCNkMgVVNfQUxVX0VYVF9BRERSXzQzCisweDRCNzAgVVNfQUxVX0VYVF9BRERSXzQ0CisweDRCNzQgVVNfQUxVX0VYVF9BRERSXzQ1CisweDRCNzggVVNfQUxVX0VYVF9BRERSXzQ2CisweDRCN0MgVVNfQUxVX0VYVF9BRERSXzQ3CisweDRCODAgVVNfQUxVX0VYVF9BRERSXzQ4CisweDRCODQgVVNfQUxVX0VYVF9BRERSXzQ5CisweDRCODggVVNfQUxVX0VYVF9BRERSXzUwCisweDRCOEMgVVNfQUxVX0VYVF9BRERSXzUxCisweDRCOTAgVVNfQUxVX0VYVF9BRERSXzUyCisweDRCOTQgVVNfQUxVX0VYVF9BRERSXzUzCisweDRCOTggVVNfQUxVX0VYVF9BRERSXzU0CisweDRCOUMgVVNfQUxVX0VYVF9BRERSXzU1CisweDRCQTAgVVNfQUxVX0VYVF9BRERSXzU2CisweDRCQTQgVVNfQUxVX0VYVF9BRERSXzU3CisweDRCQTggVVNfQUxVX0VYVF9BRERSXzU4CisweDRCQUMgVVNfQUxVX0VYVF9BRERSXzU5CisweDRCQjAgVVNfQUxVX0VYVF9BRERSXzYwCisweDRCQjQgVVNfQUxVX0VYVF9BRERSXzYxCisweDRCQjggVVNfQUxVX0VYVF9BRERSXzYyCisweDRCQkMgVVNfQUxVX0VYVF9BRERSXzYzCisweDRCQzAgRkdfRk9HX0JMRU5ECisweDRCQzQgRkdfRk9HX0ZBQ1RPUgorMHg0QkM4IEZHX0ZPR19DT0xPUl9SCisweDRCQ0MgRkdfRk9HX0NPTE9SX0cKKzB4NEJEMCBGR19GT0dfQ09MT1JfQgorMHg0QkQ0IEZHX0FMUEhBX0ZVTkMKKzB4NEJEOCBGR19ERVBUSF9TUkMKKzB4NEMwMCBVU19BTFVfQ09OU1RfUl8wCisweDRDMDQgVVNfQUxVX0NPTlNUX0dfMAorMHg0QzA4IFVTX0FMVV9DT05TVF9CXzAKKzB4NEMwQyBVU19BTFVfQ09OU1RfQV8wCisweDRDMTAgVVNfQUxVX0NPTlNUX1JfMQorMHg0QzE0IFVTX0FMVV9DT05TVF9HXzEKKzB4NEMxOCBVU19BTFVfQ09OU1RfQl8xCisweDRDMUMgVVNfQUxVX0NPTlNUX0FfMQorMHg0QzIwIFVTX0FMVV9DT05TVF9SXzIKKzB4NEMyNCBVU19BTFVfQ09OU1RfR18yCisweDRDMjggVVNfQUxVX0NPTlNUX0JfMgorMHg0QzJDIFVTX0FMVV9DT05TVF9BXzIKKzB4NEMzMCBVU19BTFVfQ09OU1RfUl8zCisweDRDMzQgVVNfQUxVX0NPTlNUX0dfMworMHg0QzM4IFVTX0FMVV9DT05TVF9CXzMKKzB4NEMzQyBVU19BTFVfQ09OU1RfQV8zCisweDRDNDAgVVNfQUxVX0NPTlNUX1JfNAorMHg0QzQ0IFVTX0FMVV9DT05TVF9HXzQKKzB4NEM0OCBVU19BTFVfQ09OU1RfQl80CisweDRDNEMgVVNfQUxVX0NPTlNUX0FfNAorMHg0QzUwIFVTX0FMVV9DT05TVF9SXzUKKzB4NEM1NCBVU19BTFVfQ09OU1RfR181CisweDRDNTggVVNfQUxVX0NPTlNUX0JfNQorMHg0QzVDIFVTX0FMVV9DT05TVF9BXzUKKzB4NEM2MCBVU19BTFVfQ09OU1RfUl82CisweDRDNjQgVVNfQUxVX0NPTlNUX0dfNgorMHg0QzY4IFVTX0FMVV9DT05TVF9CXzYKKzB4NEM2QyBVU19BTFVfQ09OU1RfQV82CisweDRDNzAgVVNfQUxVX0NPTlNUX1JfNworMHg0Qzc0IFVTX0FMVV9DT05TVF9HXzcKKzB4NEM3OCBVU19BTFVfQ09OU1RfQl83CisweDRDN0MgVVNfQUxVX0NPTlNUX0FfNworMHg0QzgwIFVTX0FMVV9DT05TVF9SXzgKKzB4NEM4NCBVU19BTFVfQ09OU1RfR184CisweDRDODggVVNfQUxVX0NPTlNUX0JfOAorMHg0QzhDIFVTX0FMVV9DT05TVF9BXzgKKzB4NEM5MCBVU19BTFVfQ09OU1RfUl85CisweDRDOTQgVVNfQUxVX0NPTlNUX0dfOQorMHg0Qzk4IFVTX0FMVV9DT05TVF9CXzkKKzB4NEM5QyBVU19BTFVfQ09OU1RfQV85CisweDRDQTAgVVNfQUxVX0NPTlNUX1JfMTAKKzB4NENBNCBVU19BTFVfQ09OU1RfR18xMAorMHg0Q0E4IFVTX0FMVV9DT05TVF9CXzEwCisweDRDQUMgVVNfQUxVX0NPTlNUX0FfMTAKKzB4NENCMCBVU19BTFVfQ09OU1RfUl8xMQorMHg0Q0I0IFVTX0FMVV9DT05TVF9HXzExCisweDRDQjggVVNfQUxVX0NPTlNUX0JfMTEKKzB4NENCQyBVU19BTFVfQ09OU1RfQV8xMQorMHg0Q0MwIFVTX0FMVV9DT05TVF9SXzEyCisweDRDQzQgVVNfQUxVX0NPTlNUX0dfMTIKKzB4NENDOCBVU19BTFVfQ09OU1RfQl8xMgorMHg0Q0NDIFVTX0FMVV9DT05TVF9BXzEyCisweDRDRDAgVVNfQUxVX0NPTlNUX1JfMTMKKzB4NENENCBVU19BTFVfQ09OU1RfR18xMworMHg0Q0Q4IFVTX0FMVV9DT05TVF9CXzEzCisweDRDREMgVVNfQUxVX0NPTlNUX0FfMTMKKzB4NENFMCBVU19BTFVfQ09OU1RfUl8xNAorMHg0Q0U0IFVTX0FMVV9DT05TVF9HXzE0CisweDRDRTggVVNfQUxVX0NPTlNUX0JfMTQKKzB4NENFQyBVU19BTFVfQ09OU1RfQV8xNAorMHg0Q0YwIFVTX0FMVV9DT05TVF9SXzE1CisweDRDRjQgVVNfQUxVX0NPTlNUX0dfMTUKKzB4NENGOCBVU19BTFVfQ09OU1RfQl8xNQorMHg0Q0ZDIFVTX0FMVV9DT05TVF9BXzE1CisweDREMDAgVVNfQUxVX0NPTlNUX1JfMTYKKzB4NEQwNCBVU19BTFVfQ09OU1RfR18xNgorMHg0RDA4IFVTX0FMVV9DT05TVF9CXzE2CisweDREMEMgVVNfQUxVX0NPTlNUX0FfMTYKKzB4NEQxMCBVU19BTFVfQ09OU1RfUl8xNworMHg0RDE0IFVTX0FMVV9DT05TVF9HXzE3CisweDREMTggVVNfQUxVX0NPTlNUX0JfMTcKKzB4NEQxQyBVU19BTFVfQ09OU1RfQV8xNworMHg0RDIwIFVTX0FMVV9DT05TVF9SXzE4CisweDREMjQgVVNfQUxVX0NPTlNUX0dfMTgKKzB4NEQyOCBVU19BTFVfQ09OU1RfQl8xOAorMHg0RDJDIFVTX0FMVV9DT05TVF9BXzE4CisweDREMzAgVVNfQUxVX0NPTlNUX1JfMTkKKzB4NEQzNCBVU19BTFVfQ09OU1RfR18xOQorMHg0RDM4IFVTX0FMVV9DT05TVF9CXzE5CisweDREM0MgVVNfQUxVX0NPTlNUX0FfMTkKKzB4NEQ0MCBVU19BTFVfQ09OU1RfUl8yMAorMHg0RDQ0IFVTX0FMVV9DT05TVF9HXzIwCisweDRENDggVVNfQUxVX0NPTlNUX0JfMjAKKzB4NEQ0QyBVU19BTFVfQ09OU1RfQV8yMAorMHg0RDUwIFVTX0FMVV9DT05TVF9SXzIxCisweDRENTQgVVNfQUxVX0NPTlNUX0dfMjEKKzB4NEQ1OCBVU19BTFVfQ09OU1RfQl8yMQorMHg0RDVDIFVTX0FMVV9DT05TVF9BXzIxCisweDRENjAgVVNfQUxVX0NPTlNUX1JfMjIKKzB4NEQ2NCBVU19BTFVfQ09OU1RfR18yMgorMHg0RDY4IFVTX0FMVV9DT05TVF9CXzIyCisweDRENkMgVVNfQUxVX0NPTlNUX0FfMjIKKzB4NEQ3MCBVU19BTFVfQ09OU1RfUl8yMworMHg0RDc0IFVTX0FMVV9DT05TVF9HXzIzCisweDRENzggVVNfQUxVX0NPTlNUX0JfMjMKKzB4NEQ3QyBVU19BTFVfQ09OU1RfQV8yMworMHg0RDgwIFVTX0FMVV9DT05TVF9SXzI0CisweDREODQgVVNfQUxVX0NPTlNUX0dfMjQKKzB4NEQ4OCBVU19BTFVfQ09OU1RfQl8yNAorMHg0RDhDIFVTX0FMVV9DT05TVF9BXzI0CisweDREOTAgVVNfQUxVX0NPTlNUX1JfMjUKKzB4NEQ5NCBVU19BTFVfQ09OU1RfR18yNQorMHg0RDk4IFVTX0FMVV9DT05TVF9CXzI1CisweDREOUMgVVNfQUxVX0NPTlNUX0FfMjUKKzB4NERBMCBVU19BTFVfQ09OU1RfUl8yNgorMHg0REE0IFVTX0FMVV9DT05TVF9HXzI2CisweDREQTggVVNfQUxVX0NPTlNUX0JfMjYKKzB4NERBQyBVU19BTFVfQ09OU1RfQV8yNgorMHg0REIwIFVTX0FMVV9DT05TVF9SXzI3CisweDREQjQgVVNfQUxVX0NPTlNUX0dfMjcKKzB4NERCOCBVU19BTFVfQ09OU1RfQl8yNworMHg0REJDIFVTX0FMVV9DT05TVF9BXzI3CisweDREQzAgVVNfQUxVX0NPTlNUX1JfMjgKKzB4NERDNCBVU19BTFVfQ09OU1RfR18yOAorMHg0REM4IFVTX0FMVV9DT05TVF9CXzI4CisweDREQ0MgVVNfQUxVX0NPTlNUX0FfMjgKKzB4NEREMCBVU19BTFVfQ09OU1RfUl8yOQorMHg0REQ0IFVTX0FMVV9DT05TVF9HXzI5CisweDRERDggVVNfQUxVX0NPTlNUX0JfMjkKKzB4NEREQyBVU19BTFVfQ09OU1RfQV8yOQorMHg0REUwIFVTX0FMVV9DT05TVF9SXzMwCisweDRERTQgVVNfQUxVX0NPTlNUX0dfMzAKKzB4NERFOCBVU19BTFVfQ09OU1RfQl8zMAorMHg0REVDIFVTX0FMVV9DT05TVF9BXzMwCisweDRERjAgVVNfQUxVX0NPTlNUX1JfMzEKKzB4NERGNCBVU19BTFVfQ09OU1RfR18zMQorMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCisweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKKzB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMworMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMworMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCisweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgorMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKKzB4NEUxOCBSQjNEX1JPUENOVExfUjMKKzB4NEUxQyBSQjNEX0NMUkNNUF9GTElQRV9SMworMHg0RTIwIFJCM0RfQ0xSQ01QX0NMUl9SMworMHg0RTI0IFJCM0RfQ0xSQ01QX01TS19SMworMHg0RTQ4IFJCM0RfREVCVUdfQ1RMCisweDRFNEMgUkIzRF9EU1RDQUNIRV9DVExTVEFUX1IzCisweDRFNTAgUkIzRF9ESVRIRVJfQ1RMCisweDRFNTQgUkIzRF9DTUFTS19PRkZTRVQwCisweDRFNTggUkIzRF9DTUFTS19PRkZTRVQxCisweDRFNUMgUkIzRF9DTUFTS19PRkZTRVQyCisweDRFNjAgUkIzRF9DTUFTS19PRkZTRVQzCisweDRFNjQgUkIzRF9DTUFTS19QSVRDSDAKKzB4NEU2OCBSQjNEX0NNQVNLX1BJVENIMQorMHg0RTZDIFJCM0RfQ01BU0tfUElUQ0gyCisweDRFNzAgUkIzRF9DTUFTS19QSVRDSDMKKzB4NEU3NCBSQjNEX0NNQVNLX1dSSU5ERVgKKzB4NEU3OCBSQjNEX0NNQVNLX0RXT1JECisweDRFN0MgUkIzRF9DTUFTS19SRElOREVYCisweDRFODAgUkIzRF9BQVJFU09MVkVfT0ZGU0VUCisweDRFODQgUkIzRF9BQVJFU09MVkVfUElUQ0gKKzB4NEU4OCBSQjNEX0FBUkVTT0xWRV9DVEwKKzB4NEVBMCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0xURV9USFJFU0hPTEQKKzB4NEVBNCBSQjNEX0RJU0NBUkRfU1JDX1BJWEVMX0dURV9USFJFU0hPTEQKKzB4NEYwNCBaQl9aU1RFTkNJTENOVEwKKzB4NEYwOCBaQl9TVEVOQ0lMUkVGTUFTSworMHg0RjE0IFpCX1pUT1AKKzB4NEYxOCBaQl9aQ0FDSEVfQ1RMU1RBVAorMHg0RjFDIFpCX0JXX0NOVEwKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKKzB4NEYzMCBaQl9aTUFTS19PRkZTRVQKKzB4NEYzNCBaQl9aTUFTS19QSVRDSAorMHg0RjM4IFpCX1pNQVNLX1dSSU5ERVgKKzB4NEYzQyBaQl9aTUFTS19EV09SRAorMHg0RjQwIFpCX1pNQVNLX1JESU5ERVgKKzB4NEY0NCBaQl9ISVpfT0ZGU0VUCisweDRGNDggWkJfSElaX1dSSU5ERVgKKzB4NEY0QyBaQl9ISVpfRFdPUkQKKzB4NEY1MCBaQl9ISVpfUkRJTkRFWAorMHg0RjU0IFpCX0hJWl9QSVRDSAorMHg0RjU4IFpCX1pQQVNTX0RBVEEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwCmluZGV4IDhlM2MwYjguLjY4MDFiODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMApAQCAtMTUzLDcgKzE1Myw3IEBACiAweDQyQTQgU1VfUE9MWV9PRkZTRVRfRlJPTlRfU0NBTEUKIDB4NDJBOCBTVV9QT0xZX09GRlNFVF9GUk9OVF9PRkZTRVQKIDB4NDJBQyBTVV9QT0xZX09GRlNFVF9CQUNLX1NDQUxFCi0weDQyQjAgU1VfUE9MWV9PRkZTRVRfQkFDS19PRkZTRVQgCisweDQyQjAgU1VfUE9MWV9PRkZTRVRfQkFDS19PRkZTRVQKIDB4NDJCNCBTVV9QT0xZX09GRlNFVF9FTkFCTEUKIDB4NDJCOCBTVV9DVUxMX01PREUKIDB4NDJDMCBTVV9ERVBUSF9TQ0FMRQpAQCAtMjkxLDYgKzI5MSw4IEBACiAweDQ2QUMgVVNfT1VUX0ZNVF8yCiAweDQ2QjAgVVNfT1VUX0ZNVF8zCiAweDQ2QjQgVVNfV19GTVQKKzB4NDZCOCBVU19DT0RFX0JBTksKKzB4NDZCQyBVU19DT0RFX0VYVAogMHg0NkMwIFVTX0FMVV9SR0JfQUREUl8wCiAweDQ2QzQgVVNfQUxVX1JHQl9BRERSXzEKIDB4NDZDOCBVU19BTFVfUkdCX0FERFJfMgpAQCAtNTQ3LDYgKzU0OSw3MCBAQAogMHg0QUI0IFVTX0FMVV9BTFBIQV9JTlNUXzYxCiAweDRBQjggVVNfQUxVX0FMUEhBX0lOU1RfNjIKIDB4NEFCQyBVU19BTFVfQUxQSEFfSU5TVF82MworMHg0QUMwIFVTX0FMVV9FWFRfQUREUl8wCisweDRBQzQgVVNfQUxVX0VYVF9BRERSXzEKKzB4NEFDOCBVU19BTFVfRVhUX0FERFJfMgorMHg0QUNDIFVTX0FMVV9FWFRfQUREUl8zCisweDRBRDAgVVNfQUxVX0VYVF9BRERSXzQKKzB4NEFENCBVU19BTFVfRVhUX0FERFJfNQorMHg0QUQ4IFVTX0FMVV9FWFRfQUREUl82CisweDRBREMgVVNfQUxVX0VYVF9BRERSXzcKKzB4NEFFMCBVU19BTFVfRVhUX0FERFJfOAorMHg0QUU0IFVTX0FMVV9FWFRfQUREUl85CisweDRBRTggVVNfQUxVX0VYVF9BRERSXzEwCisweDRBRUMgVVNfQUxVX0VYVF9BRERSXzExCisweDRBRjAgVVNfQUxVX0VYVF9BRERSXzEyCisweDRBRjQgVVNfQUxVX0VYVF9BRERSXzEzCisweDRBRjggVVNfQUxVX0VYVF9BRERSXzE0CisweDRBRkMgVVNfQUxVX0VYVF9BRERSXzE1CisweDRCMDAgVVNfQUxVX0VYVF9BRERSXzE2CisweDRCMDQgVVNfQUxVX0VYVF9BRERSXzE3CisweDRCMDggVVNfQUxVX0VYVF9BRERSXzE4CisweDRCMEMgVVNfQUxVX0VYVF9BRERSXzE5CisweDRCMTAgVVNfQUxVX0VYVF9BRERSXzIwCisweDRCMTQgVVNfQUxVX0VYVF9BRERSXzIxCisweDRCMTggVVNfQUxVX0VYVF9BRERSXzIyCisweDRCMUMgVVNfQUxVX0VYVF9BRERSXzIzCisweDRCMjAgVVNfQUxVX0VYVF9BRERSXzI0CisweDRCMjQgVVNfQUxVX0VYVF9BRERSXzI1CisweDRCMjggVVNfQUxVX0VYVF9BRERSXzI2CisweDRCMkMgVVNfQUxVX0VYVF9BRERSXzI3CisweDRCMzAgVVNfQUxVX0VYVF9BRERSXzI4CisweDRCMzQgVVNfQUxVX0VYVF9BRERSXzI5CisweDRCMzggVVNfQUxVX0VYVF9BRERSXzMwCisweDRCM0MgVVNfQUxVX0VYVF9BRERSXzMxCisweDRCNDAgVVNfQUxVX0VYVF9BRERSXzMyCisweDRCNDQgVVNfQUxVX0VYVF9BRERSXzMzCisweDRCNDggVVNfQUxVX0VYVF9BRERSXzM0CisweDRCNEMgVVNfQUxVX0VYVF9BRERSXzM1CisweDRCNTAgVVNfQUxVX0VYVF9BRERSXzM2CisweDRCNTQgVVNfQUxVX0VYVF9BRERSXzM3CisweDRCNTggVVNfQUxVX0VYVF9BRERSXzM4CisweDRCNUMgVVNfQUxVX0VYVF9BRERSXzM5CisweDRCNjAgVVNfQUxVX0VYVF9BRERSXzQwCisweDRCNjQgVVNfQUxVX0VYVF9BRERSXzQxCisweDRCNjggVVNfQUxVX0VYVF9BRERSXzQyCisweDRCNkMgVVNfQUxVX0VYVF9BRERSXzQzCisweDRCNzAgVVNfQUxVX0VYVF9BRERSXzQ0CisweDRCNzQgVVNfQUxVX0VYVF9BRERSXzQ1CisweDRCNzggVVNfQUxVX0VYVF9BRERSXzQ2CisweDRCN0MgVVNfQUxVX0VYVF9BRERSXzQ3CisweDRCODAgVVNfQUxVX0VYVF9BRERSXzQ4CisweDRCODQgVVNfQUxVX0VYVF9BRERSXzQ5CisweDRCODggVVNfQUxVX0VYVF9BRERSXzUwCisweDRCOEMgVVNfQUxVX0VYVF9BRERSXzUxCisweDRCOTAgVVNfQUxVX0VYVF9BRERSXzUyCisweDRCOTQgVVNfQUxVX0VYVF9BRERSXzUzCisweDRCOTggVVNfQUxVX0VYVF9BRERSXzU0CisweDRCOUMgVVNfQUxVX0VYVF9BRERSXzU1CisweDRCQTAgVVNfQUxVX0VYVF9BRERSXzU2CisweDRCQTQgVVNfQUxVX0VYVF9BRERSXzU3CisweDRCQTggVVNfQUxVX0VYVF9BRERSXzU4CisweDRCQUMgVVNfQUxVX0VYVF9BRERSXzU5CisweDRCQjAgVVNfQUxVX0VYVF9BRERSXzYwCisweDRCQjQgVVNfQUxVX0VYVF9BRERSXzYxCisweDRCQjggVVNfQUxVX0VYVF9BRERSXzYyCisweDRCQkMgVVNfQUxVX0VYVF9BRERSXzYzCiAweDRCQzAgRkdfRk9HX0JMRU5ECiAweDRCQzQgRkdfRk9HX0ZBQ1RPUgogMHg0QkM4IEZHX0ZPR19DT0xPUl9SCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQppbmRleCAwMTAyYTBkLi4zOGFiZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKQEAgLTE2MSw3ICsxNjEsMTIgQEAKIDB4NDAxQyBHQl9TRUxFQ1QKIDB4NDAyMCBHQl9BQV9DT05GSUcKIDB4NDAyNCBHQl9GSUZPX1NJWkUKKzB4NDAyOCBHQl9aX1BFUV9DT05GSUcKIDB4NDEwMCBUWF9JTlZBTFRBR1MKKzB4NDExNCBTVV9URVhfV1JBUF9QUzMKKzB4NDExOCBQUzNfRU5BQkxFCisweDQxMWMgUFMzX1ZUWF9GTVQKKzB4NDEyMCBQUzNfVEVYX1NPVVJDRQogMHg0MjAwIEdBX1BPSU5UX1MwCiAweDQyMDQgR0FfUE9JTlRfVDAKIDB4NDIwOCBHQV9QT0lOVF9TMQpAQCAtMTcxLDYgKzE3Niw3IEBACiAweDQyMzAgR0FfUE9JTlRfTUlOTUFYCiAweDQyMzQgR0FfTElORV9DTlRMCiAweDQyMzggR0FfTElORV9TVElQUExFX0NPTkZJRworMHg0MjU4IEdBX0NPTE9SX0NPTlRST0xfUFMzCiAweDQyNjAgR0FfTElORV9TVElQUExFX1ZBTFVFCiAweDQyNjQgR0FfTElORV9TMAogMHg0MjY4IEdBX0xJTkVfUzEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCAzNjg0MTVkLi45ZjU0MTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC0zNTYsNiArMzU2LDcgQEAKIAlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gR18wMDAxNUNfTUNfRkJfU1RBUlQodG1wKSA8PCAxNjsKIAlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CiAJciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKKwlyZGV2LT5tYy5pZ3Bfc2lkZXBvcnRfZW5hYmxlZCA9IHJhZGVvbl9jb21iaW9zX3NpZGVwb3J0X3ByZXNlbnQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCXJldHVybiAwOwpAQCAtMzk1LDYgKzM5Niw3IEBACiAJCXJldHVybiByOwogCS8qIEVuYWJsZSBJUlEgKi8KIAlyMTAwX2lycV9zZXQocmRldik7CisJcmRldi0+Y29uZmlnLnIzMDAuaGRwX2NudGwgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKaW5kZXggNGY4ZWE0Mi4uZDUyNTU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtNTYsNiArNTYsNyBAQAogCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDAwNF9NQ19GQl9TVEFSVCh0bXApIDw8IDE2OwogCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4ZmZmZmZmZmZVTDsKIAlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOworCXJkZXYtPm1jLmlncF9zaWRlcG9ydF9lbmFibGVkID0gcmFkZW9uX2F0b21iaW9zX3NpZGVwb3J0X3ByZXNlbnQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCXJldHVybiAwOwpAQCAtMTM0LDcgKzEzNSw4IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlyczYwMF9pcnFfc2V0KHJkZXYpOworCWlmIChyZGV2LT5pcnEuaW5zdGFsbGVkKQorCQlyczYwMF9pcnFfc2V0KHJkZXYpOwogfQogCiB2b2lkIHJzNjAwX2hwZF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMzE1LDYgKzMxNywxMSBAQAogCXUzMiBocGQyID0gUlJFRzMyKFJfMDA3RDE4X0RDX0hPVF9QTFVHX0RFVEVDVDJfSU5UX0NPTlRST0wpICYKIAkJflNfMDA3RDE4X0RDX0hPVF9QTFVHX0RFVEVDVDJfSU5UX0VOKDEpOwogCisJaWYgKCFyZGV2LT5pcnEuaW5zdGFsbGVkKSB7CisJCVdBUk4oMSwgIkNhbid0IGVuYWJsZSBJUlEvTVNJIGJlY2F1c2Ugbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQuXG4iKTsKKwkJV1JFRzMyKFJfMDAwMDQwX0dFTl9JTlRfQ05UTCwgMCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlpZiAocmRldi0+aXJxLnN3X2ludCkgewogCQl0bXAgfD0gU18wMDAwNDBfU1dfSU5UX0VOKDEpOwogCX0KQEAgLTM5Niw3ICs0MDMsNyBAQAogCX0KIAl3aGlsZSAoc3RhdHVzIHx8IHI1MDBfZGlzcF9pbnQpIHsKIAkJLyogU1cgaW50ZXJydXB0ICovCi0JCWlmIChHXzAwMDA0MF9TV19JTlRfRU4oc3RhdHVzKSkKKwkJaWYgKEdfMDAwMDQ0X1NXX0lOVChzdGF0dXMpKQogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7CiAJCS8qIFZlcnRpY2FsIGJsYW5rIGludGVycnVwdHMgKi8KIAkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCkBAIC01NTMsNiArNTYwLDcgQEAKIAkJcmV0dXJuIHI7CiAJLyogRW5hYmxlIElSUSAqLwogCXJzNjAwX2lycV9zZXQocmRldik7CisJcmRldi0+Y29uZmlnLnIzMDAuaGRwX2NudGwgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKaW5kZXggMWUyMmY1Mi4uY2QzMWRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiAJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IEdfMDAwMTAwX01DX0ZCX1NUQVJUKHRtcCkgPDwgMTY7CiAJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwogCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7CisJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJcmV0dXJuIDA7CkBAIC02MjUsNiArNjI2LDcgQEAKIAkJcmV0dXJuIHI7CiAJLyogRW5hYmxlIElSUSAqLwogCXJzNjAwX2lycV9zZXQocmRldik7CisJcmRldi0+Y29uZmlnLnIzMDAuaGRwX2NudGwgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKIAkvKiAxTSByaW5nIGJ1ZmZlciAqLwogCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOwogCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNTk2MzJhNS4uNjI3NTY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtNDc5LDYgKzQ3OSw3IEBACiAJfQogCS8qIEVuYWJsZSBJUlEgKi8KIAlyczYwMF9pcnFfc2V0KHJkZXYpOworCXJkZXYtPmNvbmZpZy5yMzAwLmhkcF9jbnRsID0gUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7CiAJLyogMU0gcmluZyBidWZmZXIgKi8KIAlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IDNiY2I2NmUuLjU5YzcxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTEwOTYsOCArMTA5Niw3IEBACiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKLQkJcmFkZW9uX2FncF9maW5pKHJkZXYpOworCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKIAlyYWRlb25fYm9fZmluaShyZGV2KTsKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfZHJ2LmMKaW5kZXggZWVlNTJhYS4uMDIxZGU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3NhdmFnZS9zYXZhZ2VfZHJ2LmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYwppbmRleCBlNzI1Y2MwLi40ZmQxZjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19kcnYuYwpAQCAtODAsNyArODAsNyBAQAogCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCSAub3BlbiA9IGRybV9vcGVuLAogCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKKwkJIC51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKIAkJIC5tbWFwID0gZHJtX21tYXAsCiAJCSAucG9sbCA9IGRybV9wb2xsLAogCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGRmeC90ZGZ4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3RkZngvdGRmeF9kcnYuYwppbmRleCAwMTJmZjJlLi5lYzVhNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGRmeC90ZGZ4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZGZ4L3RkZnhfZHJ2LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLAogCQkgLm9wZW4gPSBkcm1fb3BlbiwKIAkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCisJCSAudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCSAubW1hcCA9IGRybV9tbWFwLAogCQkgLnBvbGwgPSBkcm1fcG9sbCwKIAkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCBiYzJmNTE4Li43YTFiMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtNTgsNyArNTgsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm9wZW4gPSBkcm1fb3BlbiwKIAkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCiAJCS5tbWFwID0gZHJtX21tYXAsCiAJCS5wb2xsID0gZHJtX3BvbGwsCiAJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYwppbmRleCA3YjQ4YmIzLi4xZGIxZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYwpAQCAtMTAzLDM3ICsxMDMsMzkgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZtd19pb2N0bHNbXSA9IHsKLQlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfR0VUX1BBUkFNLCB2bXdfZ2V0cGFyYW1faW9jdGwsIDApLAorCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19HRVRfUEFSQU0sIHZtd19nZXRwYXJhbV9pb2N0bCwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQpLAogCVZNV19JT0NUTF9ERUYoRFJNX0lPQ1RMX1ZNV19BTExPQ19ETUFCVUYsIHZtd19kbWFidWZfYWxsb2NfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX0RNQUJVRiwgdm13X2RtYWJ1Zl91bnJlZl9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ1VSU09SX0JZUEFTUywKLQkJICAgICAgdm13X2ttc19jdXJzb3JfYnlwYXNzX2lvY3RsLCAwKSwKKwkJICAgICAgdm13X2ttc19jdXJzb3JfYnlwYXNzX2lvY3RsLAorCQkgICAgICBEUk1fTUFTVEVSIHwgRFJNX0NPTlRST0xfQUxMT1cgfCBEUk1fVU5MT0NLRUQpLAogCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0NPTlRST0xfU1RSRUFNLCB2bXdfb3ZlcmxheV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0NMQUlNX1NUUkVBTSwgdm13X3N0cmVhbV9jbGFpbV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX1VOUkVGX1NUUkVBTSwgdm13X3N0cmVhbV91bnJlZl9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPVyB8IERSTV9VTkxPQ0tFRCksCiAKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ1JFQVRFX0NPTlRFWFQsIHZtd19jb250ZXh0X2RlZmluZV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfVU5SRUZfQ09OVEVYVCwgdm13X2NvbnRleHRfZGVzdHJveV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfQ1JFQVRFX1NVUkZBQ0UsIHZtd19zdXJmYWNlX2RlZmluZV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfVU5SRUZfU1VSRkFDRSwgdm13X3N1cmZhY2VfZGVzdHJveV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfUkVGX1NVUkZBQ0UsIHZtd19zdXJmYWNlX3JlZmVyZW5jZV9pb2N0bCwKLQkJICAgICAgMCksCisJCSAgICAgIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEKSwKIAlWTVdfSU9DVExfREVGKERSTV9JT0NUTF9WTVdfRVhFQ0JVRiwgdm13X2V4ZWNidWZfaW9jdGwsCi0JCSAgICAgIDApLAorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0ZJRk9fREVCVUcsIHZtd19maWZvX2RlYnVnX2lvY3RsLAotCQkgICAgICAwKSwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fUk9PVF9PTkxZIHwgRFJNX01BU1RFUiB8IERSTV9VTkxPQ0tFRCksCiAJVk1XX0lPQ1RMX0RFRihEUk1fSU9DVExfVk1XX0ZFTkNFX1dBSVQsIHZtd19mZW5jZV93YWl0X2lvY3RsLAotCQkgICAgICAwKQorCQkgICAgICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCkKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2bXdfcGNpX2lkX2xpc3RbXSA9IHsKQEAgLTQ2MCwxMSArNDYyLDkgQEAKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2OwogCXVuc2lnbmVkIGludCBuciA9IERSTV9JT0NUTF9OUihjbWQpOwotCWxvbmcgcmV0OwogCiAJLyoKLQkgKiBUaGUgZHJpdmVyIHByaXZhdGUgaW9jdGxzIGFuZCBUVE0gaW9jdGxzIHNob3VsZCBiZQotCSAqIHRocmVhZC1zYWZlLgorCSAqIERvIGV4dHJhIGNoZWNraW5nIG9uIGRyaXZlciBwcml2YXRlIGlvY3Rscy4KIAkgKi8KIAogCWlmICgobnIgPj0gRFJNX0NPTU1BTkRfQkFTRSkgJiYgKG5yIDwgRFJNX0NPTU1BTkRfRU5EKQpAQCAtNDc3LDE4ICs0NzcsOSBAQAogCQkJCSAgbnIgLSBEUk1fQ09NTUFORF9CQVNFKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXJldHVybiBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKLQkJCQkgZmlscCwgY21kLCBhcmcpOwogCX0KIAotCS8qCi0JICogTm90IGFsbCBvbGQgZHJtIGlvY3RscyBhcmUgdGhyZWFkLXNhZmUuCi0JICovCi0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRybV9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiB9CiAKIHN0YXRpYyBpbnQgdm13X2ZpcnN0b3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAppbmRleCA0MzU0NmQwLi5lNjFiZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtMTIzLDYgKzEyMyw3IEBACiAJdWludDMyX3QgbGFzdF9jaWQ7CiAJYm9vbCBjaWRfdmFsaWQ7CiAJdWludDMyX3QgbGFzdF9zaWQ7CisJdWludDMyX3Qgc2lkX3RyYW5zbGF0aW9uOwogCWJvb2wgc2lkX3ZhbGlkOwogCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlOwogCXN0cnVjdCBsaXN0X2hlYWQgdmFsaWRhdGVfbm9kZXM7CkBAIC0zMTcsOSArMzE4LDEwIEBACiBleHRlcm4gaW50IHZtd19zdXJmYWNlX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICBzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZiwKIAkJCSAgICB2b2lkICgqcmVzX2ZyZWUpIChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpKTsKLWV4dGVybiBpbnQgdm13X3VzZXJfc3VyZmFjZV9sb29rdXAoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJCQkgICBpbnQgc2lkLCBzdHJ1Y3Qgdm13X3N1cmZhY2UgKipvdXQpOworZXh0ZXJuIGludCB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cF9oYW5kbGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKKwkJCQkJICB1aW50MzJfdCBoYW5kbGUsCisJCQkJCSAgc3RydWN0IHZtd19zdXJmYWNlICoqb3V0KTsKIGV4dGVybiBpbnQgdm13X3N1cmZhY2VfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCB2bXdfc3VyZmFjZV9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTMyOCw3ICszMzAsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IHZtd19zdXJmYWNlX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkJICAgICBpbnQgaWQpOworCQkJICAgICB1aW50MzJfdCBoYW5kbGUsIGludCAqaWQpOwogZXh0ZXJuIHZvaWQgdm13X2RtYWJ1Zl9ib19mcmVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwogZXh0ZXJuIGludCB2bXdfZG1hYnVmX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgIHN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqdm13X2JvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IDdhMzlmM2UuLjJlOTJkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTczLDIxICs3MywzMiBAQAogCiBzdGF0aWMgaW50IHZtd19jbWRfc2lkX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKLQkJCSAgICAgdWludDMyX3Qgc2lkKQorCQkJICAgICB1aW50MzJfdCAqc2lkKQogewotCWlmICh1bmxpa2VseSgoIXN3X2NvbnRleHQtPnNpZF92YWxpZCB8fCBzaWQgIT0gc3dfY29udGV4dC0+bGFzdF9zaWQpICYmCi0JCSAgICAgc2lkICE9IFNWR0EzRF9JTlZBTElEX0lEKSkgewotCQlpbnQgcmV0ID0gdm13X3N1cmZhY2VfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQtPnRmaWxlLCBzaWQpOworCWlmICgqc2lkID09IFNWR0EzRF9JTlZBTElEX0lEKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseSgoIXN3X2NvbnRleHQtPnNpZF92YWxpZCAgfHwKKwkJICAgICAgKnNpZCAhPSBzd19jb250ZXh0LT5sYXN0X3NpZCkpKSB7CisJCWludCByZWFsX2lkOworCQlpbnQgcmV0ID0gdm13X3N1cmZhY2VfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQtPnRmaWxlLAorCQkJCQkgICAgKnNpZCwgJnJlYWxfaWQpOwogCiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJCURSTV9FUlJPUigiQ291bGQgb3QgZmluZCBvciB1c2Ugc3VyZmFjZSAldVxuIiwKLQkJCQkgICh1bnNpZ25lZCkgc2lkKTsKKwkJCURSTV9FUlJPUigiQ291bGQgb3QgZmluZCBvciB1c2Ugc3VyZmFjZSAweCUwOHggIgorCQkJCSAgImFkZHJlc3MgMHglMDhseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBpbnQpICpzaWQsCisJCQkJICAodW5zaWduZWQgbG9uZykgc2lkKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlzd19jb250ZXh0LT5sYXN0X3NpZCA9IHNpZDsKKwkJc3dfY29udGV4dC0+bGFzdF9zaWQgPSAqc2lkOwogCQlzd19jb250ZXh0LT5zaWRfdmFsaWQgPSB0cnVlOwotCX0KKwkJKnNpZCA9IHJlYWxfaWQ7CisJCXN3X2NvbnRleHQtPnNpZF90cmFuc2xhdGlvbiA9IHJlYWxfaWQ7CisJfSBlbHNlCisJCSpzaWQgPSBzd19jb250ZXh0LT5zaWRfdHJhbnNsYXRpb247CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA3LDcgKzExOCw4IEBACiAJCXJldHVybiByZXQ7CiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NpZF9jbWQsIGhlYWRlcik7Ci0JcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkudGFyZ2V0LnNpZCk7CisJcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkudGFyZ2V0LnNpZCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2bXdfY21kX3N1cmZhY2VfY29weV9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTIxLDEwICsxMzMsMTAgQEAKIAlpbnQgcmV0OwogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwotCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkuc3JjLnNpZCk7CisJcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuc3JjLnNpZCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS5kZXN0LnNpZCk7CisJcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCAmY21kLT5ib2R5LmRlc3Quc2lkKTsKIH0KIAogc3RhdGljIGludCB2bXdfY21kX3N0cmV0Y2hfYmx0X2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xMzgsMTAgKzE1MCwxMCBAQAogCWludCByZXQ7CiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NpZF9jbWQsIGhlYWRlcik7Ci0JcmV0ID0gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS5zcmMuc2lkKTsKKwlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5zcmMuc2lkKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwotCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5ib2R5LmRlc3Quc2lkKTsKKwlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuZGVzdC5zaWQpOwogfQogCiBzdGF0aWMgaW50IHZtd19jbWRfYmx0X3N1cmZfc2NyZWVuX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xNTQsNyArMTY2LDcgQEAKIAl9ICpjbWQ7CiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NpZF9jbWQsIGhlYWRlcik7Ci0JcmV0dXJuIHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBjbWQtPmJvZHkuc3JjSW1hZ2Uuc2lkKTsKKwlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsICZjbWQtPmJvZHkuc3JjSW1hZ2Uuc2lkKTsKIH0KIAogc3RhdGljIGludCB2bXdfY21kX3ByZXNlbnRfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTE2Nyw3ICsxNzksNyBAQAogCX0gKmNtZDsKIAogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2lkX2NtZCwgaGVhZGVyKTsKLQlyZXR1cm4gdm13X2NtZF9zaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGNtZC0+Ym9keS5zaWQpOworCXJldHVybiB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgJmNtZC0+Ym9keS5zaWQpOwogfQogCiBzdGF0aWMgaW50IHZtd19jbWRfZG1hKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xODcsMTIgKzE5OSw3IEBACiAJdWludDMyX3QgY3VyX3ZhbGlkYXRlX25vZGU7CiAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKnZhbF9idWY7CiAKLQogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfZG1hX2NtZCwgaGVhZGVyKTsKLQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgY21kLT5kbWEuaG9zdC5zaWQpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCXJldHVybiByZXQ7Ci0KIAloYW5kbGUgPSBjbWQtPmRtYS5ndWVzdC5wdHIuZ21ySWQ7CiAJcmV0ID0gdm13X3VzZXJfZG1hYnVmX2xvb2t1cChzd19jb250ZXh0LT50ZmlsZSwgaGFuZGxlLCAmdm13X2JvKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CkBAIC0yMjgsMTQgKzIzNSwyMyBAQAogCQkrK3N3X2NvbnRleHQtPmN1cl92YWxfYnVmOwogCX0KIAotCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwKGRldl9wcml2LCBzd19jb250ZXh0LT50ZmlsZSwKLQkJCQkgICAgICBjbWQtPmRtYS5ob3N0LnNpZCwgJnNyZik7CisJcmV0ID0gdm13X3VzZXJfc3VyZmFjZV9sb29rdXBfaGFuZGxlKGRldl9wcml2LCBzd19jb250ZXh0LT50ZmlsZSwKKwkJCQkJICAgICBjbWQtPmRtYS5ob3N0LnNpZCwgJnNyZik7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIHN1cmZhY2VcbiIpOwogCQlnb3RvIG91dF9ub19yZWxvYzsKIAl9CiAKKwkvKioKKwkgKiBQYXRjaCBjb21tYW5kIHN0cmVhbSB3aXRoIGRldmljZSBTSUQuCisJICovCisKKwljbWQtPmRtYS5ob3N0LnNpZCA9IHNyZi0+cmVzLmlkOwogCXZtd19rbXNfY3Vyc29yX3Nub29wKHNyZiwgc3dfY29udGV4dC0+dGZpbGUsIGJvLCBoZWFkZXIpOworCS8qKgorCSAqIEZJWE1FOiBNYXkgZGVhZGxvY2sgaGVyZSB3aGVuIGNhbGxlZCBmcm9tIHRoZQorCSAqIGNvbW1hbmQgcGFyc2luZyBjb2RlLgorCSAqLwogCXZtd19zdXJmYWNlX3VucmVmZXJlbmNlKCZzcmYpOwogCiBvdXRfbm9fcmVsb2M6CkBAIC0yNDMsNiArMjU5LDkwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB2bXdfY21kX2RyYXcoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCXN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCVNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfZHJhd19jbWQgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREcmF3UHJpbWl0aXZlcyBib2R5OworCX0gKmNtZDsKKwlTVkdBM2RWZXJ0ZXhEZWNsICpkZWNsID0gKFNWR0EzZFZlcnRleERlY2wgKikoCisJCSh1bnNpZ25lZCBsb25nKWhlYWRlciArIHNpemVvZigqY21kKSk7CisJU1ZHQTNkUHJpbWl0aXZlUmFuZ2UgKnJhbmdlOworCXVpbnQzMl90IGk7CisJdWludDMyX3QgbWF4bnVtOworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfY21kX2NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgaGVhZGVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19kcmF3X2NtZCwgaGVhZGVyKTsKKwltYXhudW0gPSAoaGVhZGVyLT5zaXplIC0gc2l6ZW9mKGNtZC0+Ym9keSkpIC8gc2l6ZW9mKCpkZWNsKTsKKworCWlmICh1bmxpa2VseShjbWQtPmJvZHkubnVtVmVydGV4RGVjbHMgPiBtYXhudW0pKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBudW1iZXIgb2YgdmVydGV4IGRlY2xhcmF0aW9ucy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5ib2R5Lm51bVZlcnRleERlY2xzOyArK2ksICsrZGVjbCkgeworCQlyZXQgPSB2bXdfY21kX3NpZF9jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwKKwkJCQkJJmRlY2wtPmFycmF5LnN1cmZhY2VJZCk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCW1heG51bSA9IChoZWFkZXItPnNpemUgLSBzaXplb2YoY21kLT5ib2R5KSAtCisJCSAgY21kLT5ib2R5Lm51bVZlcnRleERlY2xzICogc2l6ZW9mKCpkZWNsKSkgLyBzaXplb2YoKnJhbmdlKTsKKwlpZiAodW5saWtlbHkoY21kLT5ib2R5Lm51bVJhbmdlcyA+IG1heG51bSkpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIG51bWJlciBvZiBpbmRleCByYW5nZXMuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmFuZ2UgPSAoU1ZHQTNkUHJpbWl0aXZlUmFuZ2UgKikgZGVjbDsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5ib2R5Lm51bVJhbmdlczsgKytpLCArK3JhbmdlKSB7CisJCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LAorCQkJCQkmcmFuZ2UtPmluZGV4QXJyYXkuc3VyZmFjZUlkKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdm13X2NtZF90ZXhfc3RhdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3Qgdm13X3RleF9zdGF0ZV9jbWQgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRTZXRUZXh0dXJlU3RhdGUgc3RhdGU7CisJfTsKKworCVNWR0EzZFRleHR1cmVTdGF0ZSAqbGFzdF9zdGF0ZSA9IChTVkdBM2RUZXh0dXJlU3RhdGUgKikKKwkgICgodW5zaWduZWQgbG9uZykgaGVhZGVyICsgaGVhZGVyLT5zaXplICsgc2l6ZW9mKGhlYWRlcikpOworCVNWR0EzZFRleHR1cmVTdGF0ZSAqY3VyX3N0YXRlID0gKFNWR0EzZFRleHR1cmVTdGF0ZSAqKQorCQkoKHVuc2lnbmVkIGxvbmcpIGhlYWRlciArIHNpemVvZihzdHJ1Y3Qgdm13X3RleF9zdGF0ZV9jbWQpKTsKKwlpbnQgcmV0OworCisJcmV0ID0gdm13X2NtZF9jaWRfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIGhlYWRlcik7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoOyBjdXJfc3RhdGUgPCBsYXN0X3N0YXRlOyArK2N1cl9zdGF0ZSkgeworCQlpZiAobGlrZWx5KGN1cl9zdGF0ZS0+bmFtZSAhPSBTVkdBM0RfVFNfQklORF9URVhUVVJFKSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHZtd19jbWRfc2lkX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LAorCQkJCQkmY3VyX3N0YXRlLT52YWx1ZSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiAKIHR5cGVkZWYgaW50ICgqdm13X2NtZF9mdW5jKSAoc3RydWN0IHZtd19wcml2YXRlICosCiAJCQkgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqLApAQCAtMjY0LDcgKzM2NCw3IEBACiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUUkVOREVSU1RBVEUsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUUkVOREVSVEFSR0VULAogCQkgICAgJnZtd19jbWRfc2V0X3JlbmRlcl90YXJnZXRfY2hlY2spLAotCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFRFWFRVUkVTVEFURSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRURVhUVVJFU1RBVEUsICZ2bXdfY21kX3RleF9zdGF0ZSksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUTUFURVJJQUwsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUTElHSFREQVRBLCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVExJR0hURU5BQkxFRCwgJnZtd19jbWRfY2lkX2NoZWNrKSwKQEAgLTI3Niw3ICszNzYsNyBAQAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NIQURFUl9ERVNUUk9ZLCAmdm13X2NtZF9jaWRfY2hlY2spLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVF9TSEFERVIsICZ2bXdfY21kX2NpZF9jaGVjayksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUX1NIQURFUl9DT05TVCwgJnZtd19jbWRfY2lkX2NoZWNrKSwKLQlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EUkFXX1BSSU1JVElWRVMsICZ2bXdfY21kX2NpZF9jaGVjayksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFJBV19QUklNSVRJVkVTLCAmdm13X2NtZF9kcmF3KSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRTQ0lTU09SUkVDVCwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9CRUdJTl9RVUVSWSwgJnZtd19jbWRfY2lkX2NoZWNrKSwKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9FTkRfUVVFUlksICZ2bXdfY21kX2NpZF9jaGVjayksCkBAIC0yOTEsNiArMzkxLDcgQEAKIAkJCSB2b2lkICpidWYsIHVpbnQzMl90ICpzaXplKQogewogCXVpbnQzMl90IGNtZF9pZDsKKwl1aW50MzJfdCBzaXplX3JlbWFpbmluZyA9ICpzaXplOwogCVNWR0EzZENtZEhlYWRlciAqaGVhZGVyID0gKFNWR0EzZENtZEhlYWRlciAqKSBidWY7CiAJaW50IHJldDsKIApAQCAtMzA0LDYgKzQwNSw5IEBACiAJKnNpemUgPSBsZTMyX3RvX2NwdShoZWFkZXItPnNpemUpICsgc2l6ZW9mKFNWR0EzZENtZEhlYWRlcik7CiAKIAljbWRfaWQgLT0gU1ZHQV8zRF9DTURfQkFTRTsKKwlpZiAodW5saWtlbHkoKnNpemUgPiBzaXplX3JlbWFpbmluZykpCisJCWdvdG8gb3V0X2VycjsKKwogCWlmICh1bmxpa2VseShjbWRfaWQgPj0gU1ZHQV8zRF9DTURfTUFYIC0gU1ZHQV8zRF9DTURfQkFTRSkpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMzI2LDYgKzQzMCw3IEBACiAJaW50IHJldDsKIAogCXdoaWxlIChjdXJfc2l6ZSA+IDApIHsKKwkJc2l6ZSA9IGN1cl9zaXplOwogCQlyZXQgPSB2bXdfY21kX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCBidWYsICZzaXplKTsKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCXJldHVybiByZXQ7CkBAIC0zODYsNyArNDkxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSB2bXdfZ21yX2JpbmQoZGV2X3ByaXYsIGJvKTsKLQlpZiAobGlrZWx5KHJldCA9PSAwIHx8IHJldCA9PSAtRVJFU1RBUlQpKQorCWlmIChsaWtlbHkocmV0ID09IDAgfHwgcmV0ID09IC1FUkVTVEFSVFNZUykpCiAJCXJldHVybiByZXQ7CiAKIApAQCAtNDI5LDcgKzUzNCw3IEBACiAKIAlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9wcml2LT5jbWRidWZfbXV0ZXgpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJcmV0ID0gLUVSRVNUQVJUOworCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCWdvdG8gb3V0X25vX2NtZF9tdXRleDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwppbmRleCA3NmIwNjkzLi4wMWZlYjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJfQogCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCQlpZiAoaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0ID0gLUVSRVNUQVJUOworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yMzcsOSArMjM3LDcgQEAKIAkJICAgIChkZXZfcHJpdi0+Zmlmb19xdWV1ZSwKIAkJICAgICAhdm13X2ZpZm9faXNfZnVsbChkZXZfcHJpdiwgYnl0ZXMpLCB0aW1lb3V0KTsKIAotCWlmICh1bmxpa2VseShyZXQgPT0gLUVSRVNUQVJUU1lTKSkKLQkJcmV0ID0gLUVSRVNUQVJUOwotCWVsc2UgaWYgKHVubGlrZWx5KHJldCA9PSAwKSkKKwlpZiAodW5saWtlbHkocmV0ID09IDApKQogCQlyZXQgPSAtRUJVU1k7CiAJZWxzZSBpZiAobGlrZWx5KHJldCA+IDApKQogCQlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwppbmRleCA5ZTBmMDMwLi5kNDAwODZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCQkJCSAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCX0KIAkJaWYgKGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldCA9IC1FUkVTVEFSVDsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjE4LDkgKzIxOCw3IEBACiAJCSAgICAgdm13X2ZlbmNlX3NpZ25hbGVkKGRldl9wcml2LCBzZXF1ZW5jZSksCiAJCSAgICAgdGltZW91dCk7CiAKLQlpZiAodW5saWtlbHkocmV0ID09IC1FUkVTVEFSVFNZUykpCi0JCXJldCA9IC1FUkVTVEFSVDsKLQllbHNlIGlmICh1bmxpa2VseShyZXQgPT0gMCkpCisJaWYgKHVubGlrZWx5KHJldCA9PSAwKSkKIAkJcmV0ID0gLUVCVVNZOwogCWVsc2UgaWYgKGxpa2VseShyZXQgPiAwKSkKIAkJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggZTk0MDNiZS4uYjFhZjc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTEwNiw4ICsxMDYsOCBAQAogCWludCByZXQ7CiAKIAlpZiAoaGFuZGxlKSB7Ci0JCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwKGRldl9wcml2LCB0ZmlsZSwKLQkJCQkJICAgICAgaGFuZGxlLCAmc3VyZmFjZSk7CisJCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgdGZpbGUsCisJCQkJCQkgICAgIGhhbmRsZSwgJnN1cmZhY2UpOwogCQlpZiAoIXJldCkgewogCQkJaWYgKCFzdXJmYWNlLT5zbm9vcGVyLmltYWdlKSB7CiAJCQkJRFJNX0VSUk9SKCJzdXJmYWNlIG5vdCBzdWl0YWJsZSBmb3IgY3Vyc29yXG4iKTsKQEAgLTcwNCw4ICs3MDQsOCBAQAogCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqYm8gPSBOVUxMOwogCWludCByZXQ7CiAKLQlyZXQgPSB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cChkZXZfcHJpdiwgdGZpbGUsCi0JCQkJICAgICAgbW9kZV9jbWQtPmhhbmRsZSwgJnN1cmZhY2UpOworCXJldCA9IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShkZXZfcHJpdiwgdGZpbGUsCisJCQkJCSAgICAgbW9kZV9jbWQtPmhhbmRsZSwgJnN1cmZhY2UpOwogCWlmIChyZXQpCiAJCWdvdG8gdHJ5X2RtYWJ1ZjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKaW5kZXggYTFjZWVkMC4uYzAxMmQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCkBAIC00ODgsMjggKzQ4OCw0NCBAQAogCWtmcmVlKHVzZXJfc3JmKTsKIH0KIAotaW50IHZtd191c2VyX3N1cmZhY2VfbG9va3VwKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgc3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUsCi0JCQkgICAgaW50IHNpZCwgc3RydWN0IHZtd19zdXJmYWNlICoqb3V0KQoraW50IHZtd191c2VyX3N1cmZhY2VfbG9va3VwX2hhbmRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJCSAgIHVpbnQzMl90IGhhbmRsZSwgc3RydWN0IHZtd19zdXJmYWNlICoqb3V0KQogewogCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZjsKIAlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCXJlcyA9IHZtd19yZXNvdXJjZV9sb29rdXAoZGV2X3ByaXYsICZkZXZfcHJpdi0+c3VyZmFjZV9pZHIsIHNpZCk7Ci0JaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkKKwliYXNlID0gdHRtX2Jhc2Vfb2JqZWN0X2xvb2t1cCh0ZmlsZSwgaGFuZGxlKTsKKwlpZiAodW5saWtlbHkoYmFzZSA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocmVzLT5yZXNfZnJlZSAhPSAmdm13X3VzZXJfc3VyZmFjZV9mcmVlKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodW5saWtlbHkoYmFzZS0+b2JqZWN0X3R5cGUgIT0gVk1XX1JFU19TVVJGQUNFKSkKKwkJZ290byBvdXRfYmFkX3Jlc291cmNlOwogCi0Jc3JmID0gY29udGFpbmVyX29mKHJlcywgc3RydWN0IHZtd19zdXJmYWNlLCByZXMpOwotCXVzZXJfc3JmID0gY29udGFpbmVyX29mKHNyZiwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIHNyZik7Ci0JaWYgKHVzZXJfc3JmLT5iYXNlLnRmaWxlICE9IHRmaWxlICYmICF1c2VyX3NyZi0+YmFzZS5zaGFyZWFibGUpCi0JCXJldHVybiAtRVBFUk07CisJdXNlcl9zcmYgPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIGJhc2UpOworCXNyZiA9ICZ1c2VyX3NyZi0+c3JmOworCXJlcyA9ICZzcmYtPnJlczsKKworCXJlYWRfbG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCisJaWYgKCFyZXMtPmF2YWlsIHx8IHJlcy0+cmVzX2ZyZWUgIT0gJnZtd191c2VyX3N1cmZhY2VfZnJlZSkgeworCQlyZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOworCQlnb3RvIG91dF9iYWRfcmVzb3VyY2U7CisJfQorCisJa3JlZl9nZXQoJnJlcy0+a3JlZik7CisJcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKIAogCSpvdXQgPSBzcmY7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKKworb3V0X2JhZF9yZXNvdXJjZToKKwl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdm13X3VzZXJfc3VyZmFjZV9iYXNlX3JlbGVhc2Uoc3RydWN0IHR0bV9iYXNlX29iamVjdCAqKnBfYmFzZSkKQEAgLTUyNiwzNSArNTQyLDEwIEBACiBpbnQgdm13X3N1cmZhY2VfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0Jc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7Ci0Jc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmOwotCXN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlICp1c2VyX3NyZjsKIAlzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyAqYXJnID0gKHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfYXJnICopZGF0YTsKIAlzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKLQlpbnQgcmV0ID0gMDsKIAotCXJlcyA9IHZtd19yZXNvdXJjZV9sb29rdXAoZGV2X3ByaXYsICZkZXZfcHJpdi0+c3VyZmFjZV9pZHIsIGFyZy0+c2lkKTsKLQlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChyZXMtPnJlc19mcmVlICE9ICZ2bXdfdXNlcl9zdXJmYWNlX2ZyZWUpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3JmID0gY29udGFpbmVyX29mKHJlcywgc3RydWN0IHZtd19zdXJmYWNlLCByZXMpOwotCXVzZXJfc3JmID0gY29udGFpbmVyX29mKHNyZiwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIHNyZik7Ci0JaWYgKHVzZXJfc3JmLT5iYXNlLnRmaWxlICE9IHRmaWxlICYmICF1c2VyX3NyZi0+YmFzZS5zaGFyZWFibGUpIHsKLQkJcmV0ID0gLUVQRVJNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKHRmaWxlLCB1c2VyX3NyZi0+YmFzZS5oYXNoLmtleSwKLQkJCQkgIFRUTV9SRUZfVVNBR0UpOwotb3V0OgotCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiB0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKHRmaWxlLCBhcmctPnNpZCwgVFRNX1JFRl9VU0FHRSk7CiB9CiAKIGludCB2bXdfc3VyZmFjZV9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTY0OSw3ICs2NDAsMTAgQEAKIAl9CiAJc3JmLT5zbm9vcGVyLmNydGMgPSBOVUxMOwogCi0JcmVwLT5zaWQgPSByZXMtPmlkOworCXJlcC0+c2lkID0gdXNlcl9zcmYtPmJhc2UuaGFzaC5rZXk7CisJaWYgKHJlcC0+c2lkID09IFNWR0EzRF9JTlZBTElEX0lEKQorCQlEUk1fRVJST1IoIkNyZWF0ZWQgYmFkIFN1cmZhY2UgSUQuXG4iKTsKKwogCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKIAlyZXR1cm4gMDsKIG91dF9lcnIxOgpAQCAtNjYyLDM5ICs2NTYsMzMgQEAKIGludCB2bXdfc3VyZmFjZV9yZWZlcmVuY2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKIAl1bmlvbiBkcm1fdm13X3N1cmZhY2VfcmVmZXJlbmNlX2FyZyAqYXJnID0KIAkgICAgKHVuaW9uIGRybV92bXdfc3VyZmFjZV9yZWZlcmVuY2VfYXJnICopZGF0YTsKIAlzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyAqcmVxID0gJmFyZy0+cmVxOwogCXN0cnVjdCBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX3JlcSAqcmVwID0gJmFyZy0+cmVwOwogCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOwotCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnNyZjsKIAlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CiAJc3RydWN0IGRybV92bXdfc2l6ZSBfX3VzZXIgKnVzZXJfc2l6ZXM7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgdHRtX2Jhc2Vfb2JqZWN0ICpiYXNlOworCWludCByZXQgPSAtRUlOVkFMOwogCi0JcmVzID0gdm13X3Jlc291cmNlX2xvb2t1cChkZXZfcHJpdiwgJmRldl9wcml2LT5zdXJmYWNlX2lkciwgcmVxLT5zaWQpOwotCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpCisJYmFzZSA9IHR0bV9iYXNlX29iamVjdF9sb29rdXAodGZpbGUsIHJlcS0+c2lkKTsKKwlpZiAodW5saWtlbHkoYmFzZSA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBmaW5kIHN1cmZhY2UgdG8gcmVmZXJlbmNlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHJlcy0+cmVzX2ZyZWUgIT0gJnZtd191c2VyX3N1cmZhY2VfZnJlZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKIAl9CiAKLQlzcmYgPSBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3N1cmZhY2UsIHJlcyk7Ci0JdXNlcl9zcmYgPSBjb250YWluZXJfb2Yoc3JmLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgc3JmKTsKLQlpZiAodXNlcl9zcmYtPmJhc2UudGZpbGUgIT0gdGZpbGUgJiYgIXVzZXJfc3JmLT5iYXNlLnNoYXJlYWJsZSkgewotCQlEUk1fRVJST1IoIlRyaWVkIHRvIHJlZmVyZW5jZSBub25lIHNoYXJlYWJsZSBzdXJmYWNlXG4iKTsKLQkJcmV0ID0gLUVQRVJNOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHVubGlrZWx5KGJhc2UtPm9iamVjdF90eXBlICE9IFZNV19SRVNfU1VSRkFDRSkpCisJCWdvdG8gb3V0X2JhZF9yZXNvdXJjZTsKKworCXVzZXJfc3JmID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCB2bXdfdXNlcl9zdXJmYWNlLCBiYXNlKTsKKwlzcmYgPSAmdXNlcl9zcmYtPnNyZjsKIAogCXJldCA9IHR0bV9yZWZfb2JqZWN0X2FkZCh0ZmlsZSwgJnVzZXJfc3JmLT5iYXNlLCBUVE1fUkVGX1VTQUdFLCBOVUxMKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CiAJCURSTV9FUlJPUigiQ291bGQgbm90IGFkZCBhIHJlZmVyZW5jZSB0byBhIHN1cmZhY2UuXG4iKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X25vX3JlZmVyZW5jZTsKIAl9CiAKIAlyZXAtPmZsYWdzID0gc3JmLT5mbGFnczsKQEAgLTcwNiw0MCArNjk0LDQzIEBACiAJaWYgKHVzZXJfc2l6ZXMpCiAJCXJldCA9IGNvcHlfdG9fdXNlcih1c2VyX3NpemVzLCBzcmYtPnNpemVzLAogCQkJCSAgIHNyZi0+bnVtX3NpemVzICogc2l6ZW9mKCpzcmYtPnNpemVzKSk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCURSTV9FUlJPUigiY29weV90b191c2VyIGZhaWxlZCAlcCAldVxuIiwKIAkJCSAgdXNlcl9zaXplcywgc3JmLT5udW1fc2l6ZXMpOwotCQkvKioKLQkJICogRklYTUU6IFVucmVmZXJlbmNlIHN1cmZhY2UgaGVyZT8KLQkJICovCi0JCWdvdG8gb3V0OwotCX0KLW91dDoKLQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CitvdXRfYmFkX3Jlc291cmNlOgorb3V0X25vX3JlZmVyZW5jZToKKwl0dG1fYmFzZV9vYmplY3RfdW5yZWYoJmJhc2UpOworCiAJcmV0dXJuIHJldDsKIH0KIAogaW50IHZtd19zdXJmYWNlX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCSAgICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAotCQkgICAgICBpbnQgaWQpCisJCSAgICAgIHVpbnQzMl90IGhhbmRsZSwgaW50ICppZCkKIHsKLQlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHR0bV9iYXNlX29iamVjdCAqYmFzZTsKKwlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CiAKLQlyZWFkX2xvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKLQlyZXMgPSBpZHJfZmluZCgmZGV2X3ByaXYtPnN1cmZhY2VfaWRyLCBpZCk7Ci0JaWYgKHJlcyAmJiByZXMtPmF2YWlsKSB7Ci0JCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3JmID0KLQkJCWNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfc3VyZmFjZSwgcmVzKTsKLQkJc3RydWN0IHZtd191c2VyX3N1cmZhY2UgKnVzcmYgPQotCQkJY29udGFpbmVyX29mKHNyZiwgc3RydWN0IHZtd191c2VyX3N1cmZhY2UsIHNyZik7CisJaW50IHJldCA9IC1FUEVSTTsKIAotCQlpZiAodXNyZi0+YmFzZS50ZmlsZSAhPSB0ZmlsZSAmJiAhdXNyZi0+YmFzZS5zaGFyZWFibGUpCi0JCQlyZXQgPSAtRVBFUk07Ci0JfSBlbHNlCi0JCXJldCA9IC1FSU5WQUw7Ci0JcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNvdXJjZV9sb2NrKTsKKwliYXNlID0gdHRtX2Jhc2Vfb2JqZWN0X2xvb2t1cCh0ZmlsZSwgaGFuZGxlKTsKKwlpZiAodW5saWtlbHkoYmFzZSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAodW5saWtlbHkoYmFzZS0+b2JqZWN0X3R5cGUgIT0gVk1XX1JFU19TVVJGQUNFKSkKKwkJZ290byBvdXRfYmFkX3N1cmZhY2U7CisKKwl1c2VyX3NyZiA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgYmFzZSk7CisJKmlkID0gdXNlcl9zcmYtPnNyZi5yZXMuaWQ7CisJcmV0ID0gMDsKKworb3V0X2JhZF9zdXJmYWNlOgorCS8qKgorCSAqIEZJWE1FOiBNYXkgZGVhZGxvY2sgaGVyZSB3aGVuIGNhbGxlZCBmcm9tIHRoZQorCSAqIGNvbW1hbmQgcGFyc2luZyBjb2RlLgorCSAqLworCisJdHRtX2Jhc2Vfb2JqZWN0X3VucmVmKCZiYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggOTVjY2JlMy4uNjhjZjg3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMjI4LDYgKzIyOCwxOCBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgazh0ZW1wLgogCitjb25maWcgU0VOU09SU19LMTBURU1QCisJdHJpc3RhdGUgIkFNRCBQaGVub20vU2VtcHJvbi9UdXJpb24vT3B0ZXJvbiB0ZW1wZXJhdHVyZSBzZW5zb3IiCisJZGVwZW5kcyBvbiBYODYgJiYgUENJCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZQorCSAgc2Vuc29yKHMpIGluc2lkZSB5b3VyIENQVS4gU3VwcG9ydGVkIGFyZSBsYXRlciByZXZpc2lvbnMgb2YKKwkgIHRoZSBBTUQgRmFtaWx5IDEwaCBhbmQgYWxsIHJldmlzaW9ucyBvZiB0aGUgQU1EIEZhbWlseSAxMWgKKwkgIG1pY3JvYXJjaGl0ZWN0dXJlcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgazEwdGVtcC4KKwogY29uZmlnIFNFTlNPUlNfQU1TCiAJdHJpc3RhdGUgIkFwcGxlIE1vdGlvbiBTZW5zb3IgZHJpdmVyIgogCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgIVBQQzY0ICYmIElOUFVUICYmICgoQURCX1BNVSAmJiBJMkMgPSB5KSB8fCAoQURCX1BNVSAmJiAhSTJDKSB8fCBJMkMpICYmIEVYUEVSSU1FTlRBTApAQCAtMzgwLDcgKzM5Miw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0NPUkVURU1QCiAJdHJpc3RhdGUgIkludGVsIENvcmUvQ29yZTIvQXRvbSB0ZW1wZXJhdHVyZSBzZW5zb3IiCi0JZGVwZW5kcyBvbiBYODYgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBYODYgJiYgUENJICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUKIAkgIHNlbnNvciBpbnNpZGUgeW91ciBDUFUuIE1vc3Qgb2YgdGhlIGZhbWlseSA2IENQVXMKQEAgLTc4MCw2ICs3OTIsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFkczc4MjguCiAKK2NvbmZpZyBTRU5TT1JTX0FNQzY4MjEKKwl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgQU1DNjgyMSIKKwlkZXBlbmRzIG9uIEkyQyAgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cworCSAgQU1DNjgyMSBoYXJkd2FyZSBtb25pdG9yaW5nIGNoaXBzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBhbWM2ODIxLgorCiBjb25maWcgU0VOU09SU19USE1DNTAKIAl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgVEhNQzUwIC8gQW5hbG9nIERldmljZXMgQURNMTAyMiIKIAlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKQEAgLTgxMCw2ICs4MzIsMTQgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHRtcDQyMS4KIAorY29uZmlnIFNFTlNPUlNfVklBX0NQVVRFTVAKKwl0cmlzdGF0ZSAiVklBIENQVSB0ZW1wZXJhdHVyZSBzZW5zb3IiCisJZGVwZW5kcyBvbiBYODYKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHRlbXBlcmF0dXJlCisJICBzZW5zb3IgaW5zaWRlIHlvdXIgQ1BVLiBTdXBwb3J0ZWQgYXJlIGFsbCBrbm93biB2YXJpYW50cyBvZgorCSAgdGhlIFZJQSBDNyBhbmQgTmFuby4KKwogY29uZmlnIFNFTlNPUlNfVklBNjg2QQogCXRyaXN0YXRlICJWSUE2ODZBIgogCWRlcGVuZHMgb24gUENJCkBAIC05OTgsNiArMTAyOCwyMyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgbGlzM2x2MDJkIGFuZCBhIHNwZWNpZmljIG1vZHVsZSBmb3IgdGhlIFNQSSB0cmFuc3BvcnQKIAkgIGlzIGNhbGxlZCBsaXMzbHYwMmRfc3BpLgogCitjb25maWcgU0VOU09SU19MSVMzX0kyQworCXRyaXN0YXRlICJTVE1pY3JvZWxldHJvbmljcyBMSVMzTFYwMkR4IHRocmVlLWF4aXMgZGlnaXRhbCBhY2NlbGVyb21ldGVyIChJMkMpIgorCWRlcGVuZHMgb24gSTJDICYmIElOUFVUCisJc2VsZWN0IElOUFVUX1BPTExERVYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTElTM0xWMDJEeCBhY2NlbGVyb21ldGVyIGNvbm5lY3RlZAorCSAgdmlhIEkyQy4gVGhlIGFjY2VsZXJvbWV0ZXIgZGF0YSBpcyByZWFkYWJsZSB2aWEKKwkgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9saXMzbHYwMmQuCisKKwkgIFRoaXMgZHJpdmVyIGFsc28gcHJvdmlkZXMgYW4gYWJzb2x1dGUgaW5wdXQgY2xhc3MgZGV2aWNlLCBhbGxvd2luZworCSAgdGhlIGRldmljZSB0byBhY3QgYXMgYSBwaW5iYWxsIG1hY2hpbmUtZXNxdWUgam95c3RpY2suCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIG1vZHVsZXMuICBJZiBzbywgdGhlIGNvcmUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBsaXMzbHYwMmQgYW5kIGEgc3BlY2lmaWMgbW9kdWxlIGZvciB0aGUgSTJDIHRyYW5zcG9ydAorCSAgaXMgY2FsbGVkIGxpczNsdjAyZF9pMmMuCisKIGNvbmZpZyBTRU5TT1JTX0FQUExFU01DCiAJdHJpc3RhdGUgIkFwcGxlIFNNQyAoTW90aW9uIHNlbnNvciwgbGlnaHQgc2Vuc29yLCBrZXlib2FyZCBiYWNrbGlnaHQpIgogCWRlcGVuZHMgb24gSU5QVVQgJiYgWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCAzM2MyZWUxLi40YmMyMTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTUzLDggKzUzLDEwIEBACiBvYmotJChDT05GSUdfU0VOU09SU19JQk1QRVgpCSs9IGlibXBleC5vCiBvYmotJChDT05GSUdfU0VOU09SU19JVDg3KQkrPSBpdDg3Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0s4VEVNUCkJKz0gazh0ZW1wLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0sxMFRFTVApCSs9IGsxMHRlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTElTM0xWMDJEKSArPSBsaXMzbHYwMmQubyBocF9hY2NlbC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MSVMzX1NQSSkJKz0gbGlzM2x2MDJkLm8gbGlzM2x2MDJkX3NwaS5vCitvYmotJChDT05GSUdfU0VOU09SU19MSVMzX0kyQykJKz0gbGlzM2x2MDJkLm8gbGlzM2x2MDJkX2kyYy5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTYzKQkrPSBsbTYzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNNzApCSs9IGxtNzAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE03MykJKz0gbG03My5vCkBAIC04NCw5ICs4NiwxMSBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NykrPSBzbXNjNDdiMzk3Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1NNU0M0N00xKQkrPSBzbXNjNDdtMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyKSs9IHNtc2M0N20xOTIubworb2JqLSQoQ09ORklHX1NFTlNPUlNfQU1DNjgyMSkJKz0gYW1jNjgyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19USE1DNTApCSs9IHRobWM1MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19UTVA0MDEpCSs9IHRtcDQwMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19UTVA0MjEpCSs9IHRtcDQyMS5vCitvYmotJChDT05GSUdfU0VOU09SU19WSUFfQ1BVVEVNUCkrPSB2aWEtY3B1dGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19WSUE2ODZBKQkrPSB2aWE2ODZhLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1ZUMTIxMSkJKz0gdnQxMjExLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1ZUODIzMSkJKz0gdnQ4MjMxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQ2Mi5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMKaW5kZXggYTFhN2VmMS4uYTMxZTc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDYyLmMKQEAgLTk0LDcgKzk0LDcgQEAKICNkZWZpbmUJCUFEVDc0NjJfUElOMjRfU0hJRlQJCTYKICNkZWZpbmUJCUFEVDc0NjJfUElOMjZfVk9MVF9JTlBVVAkweDA4CiAjZGVmaW5lCQlBRFQ3NDYyX1BJTjI1X1ZPTFRfSU5QVVQJMHgyMAotI2RlZmluZQkJQURUNzQ2Ml9QSU4yOF9TSElGVAkJNgkvKiBjZmczICovCisjZGVmaW5lCQlBRFQ3NDYyX1BJTjI4X1NISUZUCQk0CS8qIGNmZzMgKi8KICNkZWZpbmUJCUFEVDc0NjJfUElOMjhfVk9MVAkJMHg1CiAKICNkZWZpbmUgQURUNzQ2Ml9SRUdfQUxBUk0xCQkJMHhCOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbWM2ODIxLmMgYi9kcml2ZXJzL2h3bW9uL2FtYzY4MjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg5ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hbWM2ODIxLmMKQEAgLTAsMCArMSwxMTE2IEBACisvKgorCWFtYzY4MjEuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCisJbW9uaXRvcmluZworCUNvcHlyaWdodCAoQykgMjAwOSBULiBNZXJ0ZWxqIDx0b21hei5tZXJ0ZWxqQGd1ZXN0LmFybmVzLnNpPgorCisJQmFzZWQgb24gbWF4NjY1MC5jOgorCUNvcHlyaWdodCAoQykgMjAwNyBIYW5zIEouIEtvY2ggPGhqa0BsaW51dHJvbml4LmRlPgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogTmVlZGVkIGZvciBLRVJOX0lORk8gKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworCisvKgorICogQWRkcmVzc2VzIHRvIHNjYW4uCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsweDE4LCAweDE5LCAweDFhLCAweDJjLCAweDJkLCAweDJlLAorCTB4NGMsIDB4NGQsIDB4NGUsIEkyQ19DTElFTlRfRU5EfTsKKworCisKKy8qCisgKiBJbnNtb2QgcGFyYW1ldGVycworICovCisKK3N0YXRpYyBpbnQgcHdtaW52ID0gMDsJLypJbnZlcnRlZCBQV00gb3V0cHV0LiAqLworbW9kdWxlX3BhcmFtKHB3bWludiwgaW50LCBTX0lSVUdPKTsKKworc3RhdGljIGludCBpbml0ID0gMTsgLypQb3dlci1vbiBpbml0aWFsaXphdGlvbi4qLworbW9kdWxlX3BhcmFtKGluaXQsIGludCwgU19JUlVHTyk7CisKKworZW51bSBjaGlwcyB7IGFtYzY4MjEgfTsKKworI2RlZmluZSBBTUM2ODIxX1JFR19ERVZfSUQgMHgzRAorI2RlZmluZSBBTUM2ODIxX1JFR19DT01QX0lEIDB4M0UKKyNkZWZpbmUgQU1DNjgyMV9SRUdfQ09ORjEgMHgwMAorI2RlZmluZSBBTUM2ODIxX1JFR19DT05GMiAweDAxCisjZGVmaW5lIEFNQzY4MjFfUkVHX0NPTkYzIDB4M0YKKyNkZWZpbmUgQU1DNjgyMV9SRUdfQ09ORjQgMHgwNAorI2RlZmluZSBBTUM2ODIxX1JFR19TVEFUMSAweDAyCisjZGVmaW5lIEFNQzY4MjFfUkVHX1NUQVQyIDB4MDMKKyNkZWZpbmUgQU1DNjgyMV9SRUdfVERBVEFfTE9XIDB4MDgKKyNkZWZpbmUgQU1DNjgyMV9SRUdfVERBVEFfSEkgMHgwOQorI2RlZmluZSBBTUM2ODIxX1JFR19MVEVNUF9ISSAweDBBCisjZGVmaW5lIEFNQzY4MjFfUkVHX1JURU1QX0hJIDB4MEIKKyNkZWZpbmUgQU1DNjgyMV9SRUdfTFRFTVBfTElNSVRfTUlOIDB4MTUKKyNkZWZpbmUgQU1DNjgyMV9SRUdfTFRFTVBfTElNSVRfTUFYIDB4MTQKKyNkZWZpbmUgQU1DNjgyMV9SRUdfUlRFTVBfTElNSVRfTUlOIDB4MTkKKyNkZWZpbmUgQU1DNjgyMV9SRUdfUlRFTVBfTElNSVRfTUFYIDB4MTgKKyNkZWZpbmUgQU1DNjgyMV9SRUdfTFRFTVBfQ1JJVCAweDFCCisjZGVmaW5lIEFNQzY4MjFfUkVHX1JURU1QX0NSSVQgMHgxRAorI2RlZmluZSBBTUM2ODIxX1JFR19QU1ZfVEVNUCAweDFDCisjZGVmaW5lIEFNQzY4MjFfUkVHX0RDWSAweDIyCisjZGVmaW5lIEFNQzY4MjFfUkVHX0xURU1QX0ZBTl9DVFJMIDB4MjQKKyNkZWZpbmUgQU1DNjgyMV9SRUdfUlRFTVBfRkFOX0NUUkwgMHgyNQorI2RlZmluZSBBTUM2ODIxX1JFR19EQ1lfTE9XX1RFTVAgMHgyMQorCisjZGVmaW5lIEFNQzY4MjFfUkVHX1RBQ0hfTExJTUlUTCAweDEwCisjZGVmaW5lIEFNQzY4MjFfUkVHX1RBQ0hfTExJTUlUSCAweDExCisjZGVmaW5lIEFNQzY4MjFfUkVHX1RBQ0hfSExJTUlUTCAweDEyCisjZGVmaW5lIEFNQzY4MjFfUkVHX1RBQ0hfSExJTUlUSCAweDEzCisKKyNkZWZpbmUgQU1DNjgyMV9DT05GMV9TVEFSVCAweDAxCisjZGVmaW5lIEFNQzY4MjFfQ09ORjFfRkFOX0lOVF9FTiAweDAyCisjZGVmaW5lIEFNQzY4MjFfQ09ORjFfRkFOSUUgMHgwNAorI2RlZmluZSBBTUM2ODIxX0NPTkYxX1BXTUlOViAweDA4CisjZGVmaW5lIEFNQzY4MjFfQ09ORjFfRkFOX0ZBVUxUX0VOIDB4MTAKKyNkZWZpbmUgQU1DNjgyMV9DT05GMV9GRFJDMCAweDIwCisjZGVmaW5lIEFNQzY4MjFfQ09ORjFfRkRSQzEgMHg0MAorI2RlZmluZSBBTUM2ODIxX0NPTkYxX1RIRVJNT1ZJRSAweDgwCisKKyNkZWZpbmUgQU1DNjgyMV9DT05GMl9QV01fRU4gMHgwMQorI2RlZmluZSBBTUM2ODIxX0NPTkYyX1RBQ0hfTU9ERSAweDAyCisjZGVmaW5lIEFNQzY4MjFfQ09ORjJfVEFDSF9FTiAweDA0CisjZGVmaW5lIEFNQzY4MjFfQ09ORjJfUlRGSUUgMHgwOAorI2RlZmluZSBBTUM2ODIxX0NPTkYyX0xUT0lFIDB4MTAKKyNkZWZpbmUgQU1DNjgyMV9DT05GMl9SVE9JRSAweDIwCisjZGVmaW5lIEFNQzY4MjFfQ09ORjJfUFNWSUUgMHg0MAorI2RlZmluZSBBTUM2ODIxX0NPTkYyX1JTVCAweDgwCisKKyNkZWZpbmUgQU1DNjgyMV9DT05GM19USEVSTV9GQU5fRU4gMHg4MAorI2RlZmluZSBBTUM2ODIxX0NPTkYzX1JFVl9NQVNLIDB4MEYKKworI2RlZmluZSBBTUM2ODIxX0NPTkY0X09WUkVOIDB4MTAKKyNkZWZpbmUgQU1DNjgyMV9DT05GNF9UQUNIX0ZBU1QgMHgyMAorI2RlZmluZSBBTUM2ODIxX0NPTkY0X1BTUFIgMHg0MAorI2RlZmluZSBBTUM2ODIxX0NPTkY0X01PREUgMHg4MAorCisjZGVmaW5lIEFNQzY4MjFfU1RBVDFfUlBNX0FMQVJNIDB4MDEKKyNkZWZpbmUgQU1DNjgyMV9TVEFUMV9GQU5TIDB4MDIKKyNkZWZpbmUgQU1DNjgyMV9TVEFUMV9SVEggMHgwNAorI2RlZmluZSBBTUM2ODIxX1NUQVQxX1JUTCAweDA4CisjZGVmaW5lIEFNQzY4MjFfU1RBVDFfUl9USEVSTSAweDEwCisjZGVmaW5lIEFNQzY4MjFfU1RBVDFfUlRGIDB4MjAKKyNkZWZpbmUgQU1DNjgyMV9TVEFUMV9MVEggMHg0MAorI2RlZmluZSBBTUM2ODIxX1NUQVQxX0xUTCAweDgwCisKKyNkZWZpbmUgQU1DNjgyMV9TVEFUMl9SVEMgMHgwOAorI2RlZmluZSBBTUM2ODIxX1NUQVQyX0xUQyAweDEwCisjZGVmaW5lIEFNQzY4MjFfU1RBVDJfTFBTViAweDIwCisjZGVmaW5lIEFNQzY4MjFfU1RBVDJfTF9USEVSTSAweDQwCisjZGVmaW5lIEFNQzY4MjFfU1RBVDJfVEhFUk1fSU4gMHg4MAorCitlbnVtIHtJRFhfVEVNUDFfSU5QVVQgPSAwLCBJRFhfVEVNUDFfTUlOLCBJRFhfVEVNUDFfTUFYLAorCUlEWF9URU1QMV9DUklULCBJRFhfVEVNUDJfSU5QVVQsIElEWF9URU1QMl9NSU4sCisJSURYX1RFTVAyX01BWCwgSURYX1RFTVAyX0NSSVQsCisJVEVNUF9JRFhfTEVOLCB9OworCitzdGF0aWMgY29uc3QgdTggdGVtcF9yZWdbXSA9IHtBTUM2ODIxX1JFR19MVEVNUF9ISSwKKwkJCUFNQzY4MjFfUkVHX0xURU1QX0xJTUlUX01JTiwKKwkJCUFNQzY4MjFfUkVHX0xURU1QX0xJTUlUX01BWCwKKwkJCUFNQzY4MjFfUkVHX0xURU1QX0NSSVQsCisJCQlBTUM2ODIxX1JFR19SVEVNUF9ISSwKKwkJCUFNQzY4MjFfUkVHX1JURU1QX0xJTUlUX01JTiwKKwkJCUFNQzY4MjFfUkVHX1JURU1QX0xJTUlUX01BWCwKKwkJCUFNQzY4MjFfUkVHX1JURU1QX0NSSVQsIH07CisKK2VudW0ge0lEWF9GQU4xX0lOUFVUID0gMCwgSURYX0ZBTjFfTUlOLCBJRFhfRkFOMV9NQVgsCisJRkFOMV9JRFhfTEVOLCB9OworCitzdGF0aWMgY29uc3QgdTggZmFuX3JlZ19sb3dbXSA9IHtBTUM2ODIxX1JFR19UREFUQV9MT1csCisJCQlBTUM2ODIxX1JFR19UQUNIX0xMSU1JVEwsCisJCQlBTUM2ODIxX1JFR19UQUNIX0hMSU1JVEwsIH07CisKKworc3RhdGljIGNvbnN0IHU4IGZhbl9yZWdfaGlbXSA9IHtBTUM2ODIxX1JFR19UREFUQV9ISSwKKwkJCUFNQzY4MjFfUkVHX1RBQ0hfTExJTUlUSCwKKwkJCUFNQzY4MjFfUkVHX1RBQ0hfSExJTUlUSCwgfTsKKworc3RhdGljIGludCBhbWM2ODIxX3Byb2JlKAorCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCBhbWM2ODIxX2RldGVjdCgKKwkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgYW1jNjgyMV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgYW1jNjgyMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgc3RydWN0IGFtYzY4MjFfZGF0YSAqYW1jNjgyMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKy8qCisgKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhbWM2ODIxX2lkW10gPSB7CisJeyAiYW1jNjgyMSIsIGFtYzY4MjEgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhbWM2ODIxX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFtYzY4MjFfZHJpdmVyID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJhbWM2ODIxIiwKKwl9LAorCS5wcm9iZSA9IGFtYzY4MjFfcHJvYmUsCisJLnJlbW92ZSA9IGFtYzY4MjFfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGFtYzY4MjFfaWQsCisJLmRldGVjdCA9IGFtYzY4MjFfZGV0ZWN0LAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAorfTsKKworCisvKgorICogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikKKyAgKi8KKworc3RydWN0IGFtYzY4MjFfZGF0YSB7CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKKwljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KKworCS8qIHJlZ2lzdGVyIHZhbHVlcyAqLworCWludCB0ZW1wW1RFTVBfSURYX0xFTl07CisKKwl1MTYgZmFuW0ZBTjFfSURYX0xFTl07CisJdTggZmFuMV9kaXY7CisKKwl1OCBwd20xOworCXU4IHRlbXAxX2F1dG9fcG9pbnRfdGVtcFszXTsKKwl1OCB0ZW1wMl9hdXRvX3BvaW50X3RlbXBbM107CisJdTggcHdtMV9hdXRvX3BvaW50X3B3bVszXTsKKwl1OCBwd20xX2VuYWJsZTsKKwl1OCBwd20xX2F1dG9fY2hhbm5lbHNfdGVtcDsKKworCXU4IHN0YXQxOworCXU4IHN0YXQyOworfTsKKworCitzdGF0aWMgc3NpemVfdCBnZXRfdGVtcCgKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWM2ODIxX2RhdGEgKmRhdGEgPSBhbWM2ODIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgaXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXBbaXhdICogMTAwMCk7Cit9CisKKworCitzdGF0aWMgc3NpemVfdCBzZXRfdGVtcCgKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYW1jNjgyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGl4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlsb25nIHZhbDsKKworCWludCByZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJdmFsID0gU0VOU09SU19MSU1JVCh2YWwgLyAxMDAwLCAtMTI4LCAxMjcpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBbaXhdID0gdmFsOworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgdGVtcF9yZWdbaXhdLCBkYXRhLT50ZW1wW2l4XSkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJSZWdpc3RlciB3cml0ZSBlcnJvciwgYWJvcnRpbmcuXG4iKTsKKwkJY291bnQgPSAtRUlPOworCX0KKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKworCisKK3N0YXRpYyBzc2l6ZV90IGdldF90ZW1wX2FsYXJtKAorCXN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwljaGFyICpidWYpCit7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGFtYzY4MjFfdXBkYXRlX2RldmljZShkZXYpOworCWludCBpeCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisJdTggZmxhZzsKKworCXN3aXRjaCAoaXgpIHsKKwljYXNlIElEWF9URU1QMV9NSU46CisJCWZsYWcgPSBkYXRhLT5zdGF0MSAmIEFNQzY4MjFfU1RBVDFfTFRMOworCQlicmVhazsKKwljYXNlIElEWF9URU1QMV9NQVg6CisJCWZsYWcgPSBkYXRhLT5zdGF0MSAmIEFNQzY4MjFfU1RBVDFfTFRIOworCQlicmVhazsKKwljYXNlIElEWF9URU1QMV9DUklUOgorCQlmbGFnID0gZGF0YS0+c3RhdDIgJiBBTUM2ODIxX1NUQVQyX0xUQzsKKwkJYnJlYWs7CisJY2FzZSBJRFhfVEVNUDJfTUlOOgorCQlmbGFnID0gZGF0YS0+c3RhdDEgJiBBTUM2ODIxX1NUQVQxX1JUTDsKKwkJYnJlYWs7CisJY2FzZSBJRFhfVEVNUDJfTUFYOgorCQlmbGFnID0gZGF0YS0+c3RhdDEgJiBBTUM2ODIxX1NUQVQxX1JUSDsKKwkJYnJlYWs7CisJY2FzZSBJRFhfVEVNUDJfQ1JJVDoKKwkJZmxhZyA9IGRhdGEtPnN0YXQyICYgQU1DNjgyMV9TVEFUMl9SVEM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAiVW5rbm93biBhdHRyLT5pbmRleCAoJWQpLlxuIiwgaXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGZsYWcpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjEiKTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjAiKTsKK30KKworCisKKworc3RhdGljIHNzaXplX3QgZ2V0X3RlbXAyX2ZhdWx0KAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGFtYzY4MjFfdXBkYXRlX2RldmljZShkZXYpOworCWlmIChkYXRhLT5zdGF0MSAmIEFNQzY4MjFfU1RBVDFfUlRGKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIxIik7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdldF9wd20xKAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGFtYzY4MjFfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5wd20xKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3B3bTEoCisJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdmFsOworCWludCByZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cHdtMSA9IFNFTlNPUlNfTElNSVQodmFsICwgMCwgMjU1KTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQU1DNjgyMV9SRUdfRENZLCBkYXRhLT5wd20xKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGdldF9wd20xX2VuYWJsZSgKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWM2ODIxX2RhdGEgKmRhdGEgPSBhbWM2ODIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtMV9lbmFibGUpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtMV9lbmFibGUoCisJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdmFsOworCWludCBjb25maWcgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChjb25maWcpCisJCXJldHVybiBjb25maWc7CisKKwljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBTUM2ODIxX1JFR19DT05GMSk7CisJaWYgKGNvbmZpZyA8IDApIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkVycm9yIHJlYWRpbmcgY29uZmlndXJhdGlvbiByZWdpc3RlciwgYWJvcnRpbmcuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCX0KKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAxOgorCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjFfRkRSQzA7CisJCWNvbmZpZyAmPSB+QU1DNjgyMV9DT05GMV9GRFJDMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjFfRkRSQzA7CisJCWNvbmZpZyB8PSBBTUM2ODIxX0NPTkYxX0ZEUkMxOworCQlicmVhazsKKwljYXNlIDM6CisJCWNvbmZpZyB8PSBBTUM2ODIxX0NPTkYxX0ZEUkMwOworCQljb25maWcgfD0gQU1DNjgyMV9DT05GMV9GRFJDMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0NPTkYxLCBjb25maWcpKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJDb25maWd1cmF0aW9uIHJlZ2lzdGVyIHdyaXRlIGVycm9yLCBhYm9ydGluZy5cbiIpOworCQkJY291bnQgPSAtRUlPOworCX0KKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgZ2V0X3B3bTFfYXV0b19jaGFubmVsc190ZW1wKAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGFtYzY4MjFfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5wd20xX2F1dG9fY2hhbm5lbHNfdGVtcCk7Cit9CisKKworc3RhdGljIHNzaXplX3QgZ2V0X3RlbXBfYXV0b19wb2ludF90ZW1wKAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQljaGFyICpidWYpCit7CisJaW50IGl4ID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoZGV2YXR0ciktPmluZGV4OworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGRldmF0dHIpLT5ucjsKKwlzdHJ1Y3QgYW1jNjgyMV9kYXRhICpkYXRhID0gYW1jNjgyMV91cGRhdGVfZGV2aWNlKGRldik7CisJc3dpdGNoIChucikgeworCWNhc2UgMToKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQlkYXRhLT50ZW1wMV9hdXRvX3BvaW50X3RlbXBbaXhdICogMTAwMCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQlkYXRhLT50ZW1wMl9hdXRvX3BvaW50X3RlbXBbaXhdICogMTAwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAiVW5rbm93biBhdHRyLT5uciAoJWQpLlxuIiwgbnIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworc3RhdGljIHNzaXplX3QgZ2V0X3B3bTFfYXV0b19wb2ludF9wd20oCisJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgaXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXN0cnVjdCBhbWM2ODIxX2RhdGEgKmRhdGEgPSBhbWM2ODIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVtpeF0pOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBzZXRfc2xvcGVfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJdTggcmVnLAorCQl1OCBkcHdtLAorCQl1OCAqcHRlbXApCit7CisJaW50IGR0OworCXU4IHRtcDsKKworCWR0ID0gcHRlbXBbMl0tcHRlbXBbMV07CisJZm9yICh0bXAgPSA0OyB0bXAgPiAwOyB0bXAtLSkgeworCQlpZiAoZHQgKiAoMHgyMCA+PiB0bXApID49IGRwd20pCisJCQlicmVhazsKKwl9CisJdG1wIHw9IChwdGVtcFsxXSAmIDB4N0MpIDw8IDE7CisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJcmVnLCB0bXApKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUmVnaXN0ZXIgd3JpdGUgZXJyb3IsIGFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wX2F1dG9fcG9pbnRfdGVtcCgKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYW1jNjgyMV9kYXRhICpkYXRhID0gYW1jNjgyMV91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IGl4ID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0ciktPmluZGV4OworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpLT5ucjsKKwl1OCAqcHRlbXA7CisJdTggcmVnOworCWludCBkcHdtOworCWxvbmcgdmFsOworCWludCByZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKG5yKSB7CisJY2FzZSAxOgorCQlwdGVtcCA9IGRhdGEtPnRlbXAxX2F1dG9fcG9pbnRfdGVtcDsKKwkJcmVnID0gQU1DNjgyMV9SRUdfTFRFTVBfRkFOX0NUUkw7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHRlbXAgPSBkYXRhLT50ZW1wMl9hdXRvX3BvaW50X3RlbXA7CisJCXJlZyA9IEFNQzY4MjFfUkVHX1JURU1QX0ZBTl9DVFJMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGRldiwgIlVua25vd24gYXR0ci0+bnIgKCVkKS5cbiIsIG5yKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGF0YS0+dmFsaWQgPSAwOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlzd2l0Y2ggKGl4KSB7CisJY2FzZSAwOgorCQlwdGVtcFswXSA9IFNFTlNPUlNfTElNSVQodmFsIC8gMTAwMCwgMCwKKwkJCQlkYXRhLT50ZW1wMV9hdXRvX3BvaW50X3RlbXBbMV0pOworCQlwdGVtcFswXSA9IFNFTlNPUlNfTElNSVQocHRlbXBbMF0sIDAsCisJCQkJZGF0YS0+dGVtcDJfYXV0b19wb2ludF90ZW1wWzFdKTsKKwkJcHRlbXBbMF0gPSBTRU5TT1JTX0xJTUlUKHB0ZW1wWzBdLCAwLCA2Myk7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKAorCQkJCQljbGllbnQsCisJCQkJCUFNQzY4MjFfUkVHX1BTVl9URU1QLAorCQkJCQlwdGVtcFswXSkpIHsKKwkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkJIlJlZ2lzdGVyIHdyaXRlIGVycm9yLCBhYm9ydGluZy5cbiIpOworCQkJCWNvdW50ID0gLUVJTzsKKwkJfQorCQlnb3RvIEVYSVQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHRlbXBbMV0gPSBTRU5TT1JTX0xJTUlUKAorCQkJCQl2YWwgLyAxMDAwLAorCQkJCQkocHRlbXBbMF0gJiAweDdDKSArIDQsCisJCQkJCTEyNCk7CisJCXB0ZW1wWzFdICY9IDB4N0M7CisJCXB0ZW1wWzJdID0gU0VOU09SU19MSU1JVCgKKwkJCQkJcHRlbXBbMl0sIHB0ZW1wWzFdICsgMSwKKwkJCQkJMjU1KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwdGVtcFsyXSA9IFNFTlNPUlNfTElNSVQoCisJCQkJCXZhbCAvIDEwMDAsCisJCQkJCXB0ZW1wWzFdKzEsCisJCQkJCTI1NSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAiVW5rbm93biBhdHRyLT5pbmRleCAoJWQpLlxuIiwgaXgpOworCQljb3VudCA9IC1FSU5WQUw7CisJCWdvdG8gRVhJVDsKKwl9CisJZHB3bSA9IGRhdGEtPnB3bTFfYXV0b19wb2ludF9wd21bMl0gLSBkYXRhLT5wd20xX2F1dG9fcG9pbnRfcHdtWzFdOworCWlmIChzZXRfc2xvcGVfcmVnaXN0ZXIoY2xpZW50LCByZWcsIGRwd20sIHB0ZW1wKSkKKwkJY291bnQgPSAtRUlPOworCitFWElUOgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworCisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd20xX2F1dG9fcG9pbnRfcHdtKAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsCisJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhbWM2ODIxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgZHB3bTsKKwlsb25nIHZhbDsKKwlpbnQgcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bTFfYXV0b19wb2ludF9wd21bMV0gPSBTRU5TT1JTX0xJTUlUKHZhbCwgMCwgMjU0KTsKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0RDWV9MT1dfVEVNUCwKKwkJCWRhdGEtPnB3bTFfYXV0b19wb2ludF9wd21bMV0pKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUmVnaXN0ZXIgd3JpdGUgZXJyb3IsIGFib3J0aW5nLlxuIik7CisJCWNvdW50ID0gLUVJTzsKKwkJZ290byBFWElUOworCX0KKwlkcHdtID0gZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsyXSAtIGRhdGEtPnB3bTFfYXV0b19wb2ludF9wd21bMV07CisJaWYgKHNldF9zbG9wZV9yZWdpc3RlcihjbGllbnQsIEFNQzY4MjFfUkVHX0xURU1QX0ZBTl9DVFJMLCBkcHdtLAorCQkJZGF0YS0+dGVtcDFfYXV0b19wb2ludF90ZW1wKSkgeworCQljb3VudCA9IC1FSU87CisJCWdvdG8gRVhJVDsKKwl9CisJaWYgKHNldF9zbG9wZV9yZWdpc3RlcihjbGllbnQsIEFNQzY4MjFfUkVHX1JURU1QX0ZBTl9DVFJMLCBkcHdtLAorCQkJZGF0YS0+dGVtcDJfYXV0b19wb2ludF90ZW1wKSkgeworCQljb3VudCA9IC1FSU87CisJCWdvdG8gRVhJVDsKKwl9CisKK0VYSVQ6CisJZGF0YS0+dmFsaWQgPSAwOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgZ2V0X2ZhbigKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWM2ODIxX2RhdGEgKmRhdGEgPSBhbWM2ODIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgaXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCWlmICgwID09IGRhdGEtPmZhbltpeF0pCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjAiKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGludCkoNjAwMDAwMCAvIGRhdGEtPmZhbltpeF0pKTsKK30KKworCisKK3N0YXRpYyBzc2l6ZV90IGdldF9mYW4xX2ZhdWx0KAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGFtYzY4MjFfdXBkYXRlX2RldmljZShkZXYpOworCWlmIChkYXRhLT5zdGF0MSAmIEFNQzY4MjFfU1RBVDFfRkFOUykKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMSIpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMCIpOworfQorCisKKworc3RhdGljIHNzaXplX3Qgc2V0X2ZhbigKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYW1jNjgyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJbG9uZyB2YWw7CisJaW50IGl4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlpbnQgcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXZhbCA9IDEgPiB2YWwgPyAweEZGRkYgOiA2MDAwMDAwL3ZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5mYW5baXhdID0gKHUxNikgU0VOU09SU19MSU1JVCh2YWwsIDEsIDB4RkZGRik7CisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBmYW5fcmVnX2xvd1tpeF0sCisJCQlkYXRhLT5mYW5baXhdICYgMHhGRikpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJSZWdpc3RlciB3cml0ZSBlcnJvciwgYWJvcnRpbmcuXG4iKTsKKwkJY291bnQgPSAtRUlPOworCQlnb3RvIEVYSVQ7CisJfQorCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCWZhbl9yZWdfaGlbaXhdLCBkYXRhLT5mYW5baXhdID4+IDgpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUmVnaXN0ZXIgd3JpdGUgZXJyb3IsIGFib3J0aW5nLlxuIik7CisJCWNvdW50ID0gLUVJTzsKKwl9CitFWElUOgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworCisKK3N0YXRpYyBzc2l6ZV90IGdldF9mYW4xX2RpdigKKwkJc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWM2ODIxX2RhdGEgKmRhdGEgPSBhbWM2ODIxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+ZmFuMV9kaXYpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfZmFuMV9kaXYoCisJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdmFsOworCWludCBjb25maWcgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChjb25maWcpCisJCXJldHVybiBjb25maWc7CisKKwljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBTUM2ODIxX1JFR19DT05GNCk7CisJaWYgKGNvbmZpZyA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiRXJyb3IgcmVhZGluZyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLCBhYm9ydGluZy5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAyOgorCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjRfUFNQUjsKKwkJZGF0YS0+ZmFuMV9kaXYgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNvbmZpZyB8PSBBTUM2ODIxX0NPTkY0X1BTUFI7CisJCWRhdGEtPmZhbjFfZGl2ID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJCWNvdW50ID0gLUVJTlZBTDsKKwkJZ290byBFWElUOworCX0KKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0NPTkY0LCBjb25maWcpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd3JpdGUgZXJyb3IsIGFib3J0aW5nLlxuIik7CisJCWNvdW50ID0gLUVJTzsKKwl9CitFWElUOgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworCisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sCisJZ2V0X3RlbXAsIE5VTEwsIElEWF9URU1QMV9JTlBVVCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF90ZW1wLAorCXNldF90ZW1wLCBJRFhfVEVNUDFfTUlOKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X3RlbXAsCisJc2V0X3RlbXAsIElEWF9URU1QMV9NQVgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X3RlbXAsCisJc2V0X3RlbXAsIElEWF9URU1QMV9DUklUKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWluX2FsYXJtLCBTX0lSVUdPLAorCWdldF90ZW1wX2FsYXJtLCBOVUxMLCBJRFhfVEVNUDFfTUlOKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLAorCWdldF90ZW1wX2FsYXJtLCBOVUxMLCBJRFhfVEVNUDFfTUFYKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywKKwlnZXRfdGVtcF9hbGFybSwgTlVMTCwgSURYX1RFTVAxX0NSSVQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTyB8IFNfSVdVU1IsCisJZ2V0X3RlbXAsIE5VTEwsIElEWF9URU1QMl9JTlBVVCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF90ZW1wLAorCXNldF90ZW1wLCBJRFhfVEVNUDJfTUlOKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X3RlbXAsCisJc2V0X3RlbXAsIElEWF9URU1QMl9NQVgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X3RlbXAsCisJc2V0X3RlbXAsIElEWF9URU1QMl9DUklUKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfZmF1bHQsIFNfSVJVR08sCisJZ2V0X3RlbXAyX2ZhdWx0LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWluX2FsYXJtLCBTX0lSVUdPLAorCWdldF90ZW1wX2FsYXJtLCBOVUxMLCBJRFhfVEVNUDJfTUlOKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4X2FsYXJtLCBTX0lSVUdPLAorCWdldF90ZW1wX2FsYXJtLCBOVUxMLCBJRFhfVEVNUDJfTUFYKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywKKwlnZXRfdGVtcF9hbGFybSwgTlVMTCwgSURYX1RFTVAyX0NSSVQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBnZXRfZmFuLCBOVUxMLCBJRFhfRkFOMV9JTlBVVCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwlnZXRfZmFuLCBzZXRfZmFuLCBJRFhfRkFOMV9NSU4pOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJZ2V0X2Zhbiwgc2V0X2ZhbiwgSURYX0ZBTjFfTUFYKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9mYXVsdCwgU19JUlVHTywgZ2V0X2ZhbjFfZmF1bHQsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2RpdiwgU19JUlVHTyB8IFNfSVdVU1IsCisJZ2V0X2ZhbjFfZGl2LCBzZXRfZmFuMV9kaXYsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBnZXRfcHdtMSwgc2V0X3B3bTEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJZ2V0X3B3bTFfZW5hYmxlLCBzZXRfcHdtMV9lbmFibGUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTywKKwlnZXRfcHdtMV9hdXRvX3BvaW50X3B3bSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKKwlnZXRfcHdtMV9hdXRvX3BvaW50X3B3bSwgc2V0X3B3bTFfYXV0b19wb2ludF9wd20sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2F1dG9fcG9pbnQzX3B3bSwgU19JUlVHTywKKwlnZXRfcHdtMV9hdXRvX3BvaW50X3B3bSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19jaGFubmVsc190ZW1wLCBTX0lSVUdPLAorCWdldF9wd20xX2F1dG9fY2hhbm5lbHNfdGVtcCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDFfYXV0b19wb2ludDFfdGVtcCwgU19JUlVHTywKKwlnZXRfdGVtcF9hdXRvX3BvaW50X3RlbXAsIE5VTEwsIDEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAorCWdldF90ZW1wX2F1dG9fcG9pbnRfdGVtcCwgc2V0X3RlbXBfYXV0b19wb2ludF90ZW1wLCAxLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9hdXRvX3BvaW50M190ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKKwlnZXRfdGVtcF9hdXRvX3BvaW50X3RlbXAsIHNldF90ZW1wX2F1dG9fcG9pbnRfdGVtcCwgMSwgMik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9hdXRvX3BvaW50MV90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKKwlnZXRfdGVtcF9hdXRvX3BvaW50X3RlbXAsIHNldF90ZW1wX2F1dG9fcG9pbnRfdGVtcCwgMiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfYXV0b19wb2ludDJfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCisJZ2V0X3RlbXBfYXV0b19wb2ludF90ZW1wLCBzZXRfdGVtcF9hdXRvX3BvaW50X3RlbXAsIDIsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX2F1dG9fcG9pbnQzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAorCWdldF90ZW1wX2F1dG9fcG9pbnRfdGVtcCwgc2V0X3RlbXBfYXV0b19wb2ludF90ZW1wLCAyLCAyKTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbWM2ODIxX2F0dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDNfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50M190ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50M190ZW1wLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYW1jNjgyMV9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBhbWM2ODIxX2F0dHJzLAorfTsKKworCisKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLworc3RhdGljIGludCBhbWM2ODIxX2RldGVjdCgKKwkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKKwlpbnQgZGV2X2lkLCBjb21wX2lkOworCisJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiYW1jNjgyMV9kZXRlY3QgY2FsbGVkLlxuIik7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LAorCQkJImFtYzY4MjE6IEkyQyBidXMgZG9lc24ndCBzdXBwb3J0IGJ5dGUgbW9kZSwgIgorCQkJInNraXBwaW5nLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9pZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0RFVl9JRCk7CisJY29tcF9pZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0NPTVBfSUQpOworCWlmIChkZXZfaWQgIT0gMHgyMSB8fCBjb21wX2lkICE9IDB4NDkpIHsKKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LAorCQkJImFtYzY4MjE6IGRldGVjdGlvbiBmYWlsZWQgYXQgMHglMDJ4LlxuIiwKKwkJCWFkZHJlc3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBCaXQgNyBvZiB0aGUgYWRkcmVzcyByZWdpc3RlciBpcyBpZ25vcmVkLCBzbyB3ZSBjYW4gY2hlY2sgdGhlCisJICAgSUQgcmVnaXN0ZXJzIGFnYWluICovCisJZGV2X2lkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHg4MCB8IEFNQzY4MjFfUkVHX0RFVl9JRCk7CisJY29tcF9pZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4ODAgfCBBTUM2ODIxX1JFR19DT01QX0lEKTsKKwlpZiAoZGV2X2lkICE9IDB4MjEgfHwgY29tcF9pZCAhPSAweDQ5KSB7CisJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwKKwkJCSJhbWM2ODIxOiBkZXRlY3Rpb24gZmFpbGVkIGF0IDB4JTAyeC5cbiIsCisJCQlhZGRyZXNzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgImFtYzY4MjE6IGNoaXAgZm91bmQgYXQgMHglMDJ4LlxuIiwgYWRkcmVzcyk7CisJc3RybGNweShpbmZvLT50eXBlLCAiYW1jNjgyMSIsIEkyQ19OQU1FX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1jNjgyMV9wcm9iZSgKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYW1jNjgyMV9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFtYzY4MjFfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm91dCBvZiBtZW1vcnkuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGFtYzY4MjEgY2hpcAorCSAqLworCWVyciA9IGFtYzY4MjFfaW5pdF9jbGllbnQoY2xpZW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlOworCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYW1jNjgyMV9hdHRyX2dycCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZTsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmICghSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpCisJCXJldHVybiAwOworCisJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZXJyb3IgcmVnaXN0ZXJpbmcgaHdtb24gZGV2aWNlLlxuIik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYW1jNjgyMV9hdHRyX2dycCk7CitlcnJfZnJlZToKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFtYzY4MjFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZhbWM2ODIxX2F0dHJfZ3JwKTsKKworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBhbWM2ODIxX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IGNvbmZpZzsKKwlpbnQgZXJyID0gLUVJTzsKKworCWlmIChpbml0KSB7CisJCWNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0NPTkY0KTsKKworCQlpZiAoY29uZmlnIDwgMCkgeworCQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkVycm9yIHJlYWRpbmcgY29uZmlndXJhdGlvbiByZWdpc3RlciwgYWJvcnRpbmcuXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJY29uZmlnIHw9IEFNQzY4MjFfQ09ORjRfTU9ERTsKKworCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0NPTkY0LAorCQkJCWNvbmZpZykpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd3JpdGUgZXJyb3IsIGFib3J0aW5nLlxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJY29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQU1DNjgyMV9SRUdfQ09ORjMpOworCisJCWlmIChjb25maWcgPCAwKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJFcnJvciByZWFkaW5nIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIsIGFib3J0aW5nLlxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiUmV2aXNpb24gJWRcbiIsIGNvbmZpZyAmIDB4MGYpOworCisJCWNvbmZpZyAmPSB+QU1DNjgyMV9DT05GM19USEVSTV9GQU5fRU47CisKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBTUM2ODIxX1JFR19DT05GMywKKwkJCQljb25maWcpKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJDb25maWd1cmF0aW9uIHJlZ2lzdGVyIHdyaXRlIGVycm9yLCBhYm9ydGluZy5cbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFNQzY4MjFfUkVHX0NPTkYyKTsKKworCQlpZiAoY29uZmlnIDwgMCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiRXJyb3IgcmVhZGluZyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLCBhYm9ydGluZy5cbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWNvbmZpZyAmPSB+QU1DNjgyMV9DT05GMl9SVEZJRTsKKwkJY29uZmlnICY9IH5BTUM2ODIxX0NPTkYyX0xUT0lFOworCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjJfUlRPSUU7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQlBTUM2ODIxX1JFR19DT05GMiwgY29uZmlnKSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiQ29uZmlndXJhdGlvbiByZWdpc3RlciB3cml0ZSBlcnJvciwgYWJvcnRpbmcuXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBTUM2ODIxX1JFR19DT05GMSk7CisKKwkJaWYgKGNvbmZpZyA8IDApIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkVycm9yIHJlYWRpbmcgY29uZmlndXJhdGlvbiByZWdpc3RlciwgYWJvcnRpbmcuXG4iKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjFfVEhFUk1PVklFOworCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjFfRkFOSUU7CisJCWNvbmZpZyB8PSBBTUM2ODIxX0NPTkYxX1NUQVJUOworCQlpZiAocHdtaW52KQorCQkJY29uZmlnIHw9IEFNQzY4MjFfQ09ORjFfUFdNSU5WOworCQllbHNlCisJCQljb25maWcgJj0gfkFNQzY4MjFfQ09ORjFfUFdNSU5WOworCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKAorCQkJCWNsaWVudCwgQU1DNjgyMV9SRUdfQ09ORjEsIGNvbmZpZykpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd3JpdGUgZXJyb3IsIGFib3J0aW5nLlxuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgYW1jNjgyMV9kYXRhICphbWM2ODIxX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFtYzY4MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB0aW1lb3V0ID0gSFo7CisJdTggcmVnOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgdGltZW91dCkgfHwKKwkJCSFkYXRhLT52YWxpZCkgeworCisJCWZvciAoaSA9IDA7IGkgPCBURU1QX0lEWF9MRU47IGkrKykKKwkJCWRhdGEtPnRlbXBbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCXRlbXBfcmVnW2ldKTsKKworCQlkYXRhLT5zdGF0MSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQlBTUM2ODIxX1JFR19TVEFUMSk7CisJCWRhdGEtPnN0YXQyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCUFNQzY4MjFfUkVHX1NUQVQyKTsKKworCQlkYXRhLT5wd20xID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCUFNQzY4MjFfUkVHX0RDWSk7CisJCWZvciAoaSA9IDA7IGkgPCBGQU4xX0lEWF9MRU47IGkrKykgeworCQkJZGF0YS0+ZmFuW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKAorCQkJCQljbGllbnQsCisJCQkJCWZhbl9yZWdfbG93W2ldKTsKKwkJCWRhdGEtPmZhbltpXSArPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJCWNsaWVudCwKKwkJCQkJZmFuX3JlZ19oaVtpXSkgPDwgODsKKwkJfQorCQlkYXRhLT5mYW4xX2RpdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQlBTUM2ODIxX1JFR19DT05GNCk7CisJCWRhdGEtPmZhbjFfZGl2ID0gZGF0YS0+ZmFuMV9kaXYgJiBBTUM2ODIxX0NPTkY0X1BTUFIgPyA0IDogMjsKKworCQlkYXRhLT5wd20xX2F1dG9fcG9pbnRfcHdtWzBdID0gMDsKKwkJZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsyXSA9IDI1NTsKKwkJZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsxXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQlBTUM2ODIxX1JFR19EQ1lfTE9XX1RFTVApOworCisJCWRhdGEtPnRlbXAxX2F1dG9fcG9pbnRfdGVtcFswXSA9CisJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlBTUM2ODIxX1JFR19QU1ZfVEVNUCk7CisJCWRhdGEtPnRlbXAyX2F1dG9fcG9pbnRfdGVtcFswXSA9CisJCQkJZGF0YS0+dGVtcDFfYXV0b19wb2ludF90ZW1wWzBdOworCQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJQU1DNjgyMV9SRUdfTFRFTVBfRkFOX0NUUkwpOworCQlkYXRhLT50ZW1wMV9hdXRvX3BvaW50X3RlbXBbMV0gPSAocmVnICYgMHhGOCkgPj4gMTsKKwkJcmVnICY9IDB4MDc7CisJCXJlZyA9IDB4MjAgPj4gcmVnOworCQlpZiAocmVnID4gMCkKKwkJCWRhdGEtPnRlbXAxX2F1dG9fcG9pbnRfdGVtcFsyXSA9CisJCQkJZGF0YS0+dGVtcDFfYXV0b19wb2ludF90ZW1wWzFdICsKKwkJCQkoZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsyXSAtCisJCQkJZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsxXSkgLyByZWc7CisJCWVsc2UKKwkJCWRhdGEtPnRlbXAxX2F1dG9fcG9pbnRfdGVtcFsyXSA9IDI1NTsKKworCQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJQU1DNjgyMV9SRUdfUlRFTVBfRkFOX0NUUkwpOworCQlkYXRhLT50ZW1wMl9hdXRvX3BvaW50X3RlbXBbMV0gPSAocmVnICYgMHhGOCkgPj4gMTsKKwkJcmVnICY9IDB4MDc7CisJCXJlZyA9IDB4MjAgPj4gcmVnOworCQlpZiAocmVnID4gMCkKKwkJCWRhdGEtPnRlbXAyX2F1dG9fcG9pbnRfdGVtcFsyXSA9CisJCQkJZGF0YS0+dGVtcDJfYXV0b19wb2ludF90ZW1wWzFdICsKKwkJCQkoZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsyXSAtCisJCQkJZGF0YS0+cHdtMV9hdXRvX3BvaW50X3B3bVsxXSkgLyByZWc7CisJCWVsc2UKKwkJCWRhdGEtPnRlbXAyX2F1dG9fcG9pbnRfdGVtcFsyXSA9IDI1NTsKKworCQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBTUM2ODIxX1JFR19DT05GMSk7CisJCXJlZyA9IChyZWcgPj4gNSkgJiAweDM7CisJCXN3aXRjaCAocmVnKSB7CisJCWNhc2UgMDogLypvcGVuIGxvb3A6IHNvZnR3YXJlIHNldHMgcHdtMSovCisJCQlkYXRhLT5wd20xX2F1dG9fY2hhbm5lbHNfdGVtcCA9IDA7CisJCQlkYXRhLT5wd20xX2VuYWJsZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvKmNsb3NlZCBsb29wOiByZW1vdGUgVCAodGVtcDIpKi8KKwkJCWRhdGEtPnB3bTFfYXV0b19jaGFubmVsc190ZW1wID0gMjsKKwkJCWRhdGEtPnB3bTFfZW5hYmxlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qY2xvc2VkIGxvb3A6IGxvY2FsIGFuZCByZW1vdGUgVCAodGVtcDIpKi8KKwkJCWRhdGEtPnB3bTFfYXV0b19jaGFubmVsc190ZW1wID0gMzsKKwkJCWRhdGEtPnB3bTFfZW5hYmxlID0gMzsKKwkJCWJyZWFrOworCQljYXNlIDE6IC8qc2VtaS1vcGVuIGxvb3A6IHNvZnR3YXJlIHNldHMgcnBtLCBjaGlwIGNvbnRyb2xzIHB3bTEsCisJCQkgICpjdXJyZW50bHkgbm90IGltcGxlbWVudGVkCisJCQkgICovCisJCQlkYXRhLT5wd20xX2F1dG9fY2hhbm5lbHNfdGVtcCA9IDA7CisJCQlkYXRhLT5wd20xX2VuYWJsZSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGRhdGE7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgYW1jNjgyMV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZhbWM2ODIxX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbWM2ODIxX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYW1jNjgyMV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbWM2ODIxX2luaXQpOworbW9kdWxlX2V4aXQoYW1jNjgyMV9leGl0KTsKKworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJULiBNZXJ0ZWxqIDx0b21hei5tZXJ0ZWxqQGd1ZXN0LmFybmVzLnNpPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZXhhcyBJbnN0cnVtZW50cyBhbWM2ODIxIGh3bW9uIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggNWEzZWUwMC4uNjgxMTM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC01LDYgKzUsNyBAQAogICogU2VlIENPUFlJTkcgaW4gdGhlIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIGtlcm5lbCB0cmVlLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0xMDEsNiArMTAyLDExIEBACiAJaW50IHRlbXBlcmF0dXJlX2NvdW50OwogCWludCBmYW5fY291bnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBzZW5zb3JfbGlzdDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBkZW50cnkgKnJvb3Q7CisJCXUzMiBpZDsKKwl9IGRlYnVnZnM7CiB9OwogCiAKQEAgLTYyNCw2ICs2MzAsMTg3IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBhdGtfZGVidWdmc19naXRtX2dldCh2b2lkICpwLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEgPSBwOworCXVuaW9uIGFjcGlfb2JqZWN0ICpyZXQ7CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmJ1ZjsKKwlpbnQgZXJyID0gMDsKKworCWlmICghZGF0YS0+cmVhZF9oYW5kbGUpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkYXRhLT5kZWJ1Z2ZzLmlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGF0a19naXRtKGRhdGEsIGRhdGEtPmRlYnVnZnMuaWQpOworCWlmIChJU19FUlIocmV0KSkKKwkJcmV0dXJuIFBUUl9FUlIocmV0KTsKKworCWJ1ZiA9IChzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqKXJldC0+YnVmZmVyLnBvaW50ZXI7CisJaWYgKGJ1Zi0+ZmxhZ3MpCisJCSp2YWwgPSBidWYtPnZhbHVlOworCWVsc2UKKwkJZXJyID0gLUVJTzsKKworCXJldHVybiBlcnI7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGF0a19kZWJ1Z2ZzX2dpdG0sCisJCQlhdGtfZGVidWdmc19naXRtX2dldCwKKwkJCU5VTEwsCisJCQkiMHglMDhsbHhcbiIpCisKK3N0YXRpYyBpbnQgYXRrX2FjcGlfcHJpbnQoY2hhciAqYnVmLCBzaXplX3Qgc3osIHVuaW9uIGFjcGlfb2JqZWN0ICpvYmopCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKG9iai0+dHlwZSkgeworCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CisJCXJldCA9IHNucHJpbnRmKGJ1Ziwgc3osICIweCUwOGxseFxuIiwgb2JqLT5pbnRlZ2VyLnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgorCQlyZXQgPSBzbnByaW50ZihidWYsIHN6LCAiJXNcbiIsIG9iai0+c3RyaW5nLnBvaW50ZXIpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdGtfcGFja19wcmludChjaGFyICpidWYsIHNpemVfdCBzeiwgdW5pb24gYWNwaV9vYmplY3QgKnBhY2spCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOworCisJCXJldCA9IGF0a19hY3BpX3ByaW50KGJ1Ziwgc3osIG9iaik7CisJCWlmIChyZXQgPj0gc3opCisJCQlicmVhazsKKwkJYnVmICs9IHJldDsKKwkJc3ogLT0gcmV0OworCX0KK30KKworc3RhdGljIGludCBhdGtfZGVidWdmc19nZ3JwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGF0a19kYXRhICpkYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwljaGFyICpidWYgPSBOVUxMOworCXVuaW9uIGFjcGlfb2JqZWN0ICpyZXQ7CisJdTggY2xzOworCWludCBpOworCisJaWYgKCFkYXRhLT5lbnVtZXJhdGVfaGFuZGxlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRhdGEtPmRlYnVnZnMuaWQpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xzID0gKGRhdGEtPmRlYnVnZnMuaWQgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwlyZXQgPSBhdGtfZ2dycChkYXRhLCBjbHMpOworCWlmIChJU19FUlIocmV0KSkKKwkJcmV0dXJuIFBUUl9FUlIocmV0KTsKKworCWZvciAoaSA9IDA7IGkgPCByZXQtPnBhY2thZ2UuY291bnQ7IGkrKykgeworCQl1bmlvbiBhY3BpX29iamVjdCAqcGFjayA9ICZyZXQtPnBhY2thZ2UuZWxlbWVudHNbaV07CisJCXVuaW9uIGFjcGlfb2JqZWN0ICppZDsKKworCQlpZiAocGFjay0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBhY2stPnBhY2thZ2UuY291bnQpCisJCQljb250aW51ZTsKKwkJaWQgPSAmcGFjay0+cGFja2FnZS5lbGVtZW50c1swXTsKKwkJaWYgKGlkLT5pbnRlZ2VyLnZhbHVlID09IGRhdGEtPmRlYnVnZnMuaWQpIHsKKwkJCS8qIFByaW50IHRoZSBwYWNrYWdlICovCisJCQlidWYgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1ZikgeworCQkJCUFDUElfRlJFRShyZXQpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJYXRrX3BhY2tfcHJpbnQoYnVmLCA1MTIsIHBhY2spOworCQkJYnJlYWs7CisJCX0KKwl9CisJQUNQSV9GUkVFKHJldCk7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0a19kZWJ1Z2ZzX2dncnBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwljaGFyICpzdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBvcywgc3RyLCBsZW4pOworfQorCitzdGF0aWMgaW50IGF0a19kZWJ1Z2ZzX2dncnBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdGtfZGVidWdmc19nZ3JwX2ZvcHMgPSB7CisJLnJlYWQJCT0gYXRrX2RlYnVnZnNfZ2dycF9yZWFkLAorCS5vcGVuCQk9IGF0a19kZWJ1Z2ZzX2dncnBfb3BlbiwKKwkucmVsZWFzZQk9IGF0a19kZWJ1Z2ZzX2dncnBfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGF0a19kZWJ1Z2ZzX2luaXQoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisJc3RydWN0IGRlbnRyeSAqZjsKKworCWRhdGEtPmRlYnVnZnMuaWQgPSAwOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYXN1c19hdGswMTEwIiwgTlVMTCk7CisJaWYgKCFkIHx8IElTX0VSUihkKSkKKwkJcmV0dXJuOworCisJZiA9IGRlYnVnZnNfY3JlYXRlX3gzMigiaWQiLCBTX0lSVVNSIHwgU19JV1VTUiwgZCwgJmRhdGEtPmRlYnVnZnMuaWQpOworCWlmICghZiB8fCBJU19FUlIoZikpCisJCWdvdG8gY2xlYW51cDsKKworCWYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJnaXRtIiwgU19JUlVTUiwgZCwgZGF0YSwKKwkJCSZhdGtfZGVidWdmc19naXRtKTsKKwlpZiAoIWYgfHwgSVNfRVJSKGYpKQorCQlnb3RvIGNsZWFudXA7CisKKwlmID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZ2dycCIsIFNfSVJVU1IsIGQsIGRhdGEsCisJCQkmYXRrX2RlYnVnZnNfZ2dycF9mb3BzKTsKKwlpZiAoIWYgfHwgSVNfRVJSKGYpKQorCQlnb3RvIGNsZWFudXA7CisKKwlkYXRhLT5kZWJ1Z2ZzLnJvb3QgPSBkOworCisJcmV0dXJuOworY2xlYW51cDoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0a19kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkYXRhLT5kZWJ1Z2ZzLnJvb3QpOworfQorCisjZWxzZSAvKiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIHZvaWQgYXRrX2RlYnVnZnNfaW5pdChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGF0a19kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgYXRrX2FkZF9zZW5zb3Ioc3RydWN0IGF0a19kYXRhICpkYXRhLCB1bmlvbiBhY3BpX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OwpAQCAtMTA0Nyw3NiArMTIzNCw3NSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYXRrX2NoZWNrX29sZF9pZihzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCitzdGF0aWMgaW50IGF0a19wcm9iZV9pZihzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CiAJYWNwaV9oYW5kbGUgcmV0OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlpbnQgZXJyID0gMDsKIAogCS8qIFJUTVA6IHJlYWQgdGVtcGVyYXR1cmUgKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX09MRF9SRUFEX1RNUCwgJnJldCk7Ci0JaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZGF0YS0+cnRtcF9oYW5kbGUgPSByZXQ7CisJZWxzZQogCQlkZXZfZGJnKGRldiwgIm1ldGhvZCAiIE1FVEhPRF9PTERfUkVBRF9UTVAgIiBub3QgZm91bmQ6ICVzXG4iLAogCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWRhdGEtPnJ0bXBfaGFuZGxlID0gcmV0OwogCiAJLyogUlZMVDogcmVhZCB2b2x0YWdlICovCiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRhdGEtPmF0a19oYW5kbGUsIE1FVEhPRF9PTERfUkVBRF9WTFQsICZyZXQpOwotCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCWRhdGEtPnJ2bHRfaGFuZGxlID0gcmV0OworCWVsc2UKIAkJZGV2X2RiZyhkZXYsICJtZXRob2QgIiBNRVRIT0RfT0xEX1JFQURfVkxUICIgbm90IGZvdW5kOiAlc1xuIiwKIAkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlkYXRhLT5ydmx0X2hhbmRsZSA9IHJldDsKIAogCS8qIFJGQU46IHJlYWQgZmFuIHN0YXR1cyAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkYXRhLT5hdGtfaGFuZGxlLCBNRVRIT0RfT0xEX1JFQURfRkFOLCAmcmV0KTsKLQlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlkYXRhLT5yZmFuX2hhbmRsZSA9IHJldDsKKwllbHNlCiAJCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX09MRF9SRUFEX0ZBTiAiIG5vdCBmb3VuZDogJXNcbiIsCiAJCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JZGF0YS0+cmZhbl9oYW5kbGUgPSByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGtfY2hlY2tfbmV3X2lmKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKLQlhY3BpX2hhbmRsZSByZXQ7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwogCiAJLyogRW51bWVyYXRpb24gKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX0VOVU1FUkFURSwgJnJldCk7Ci0JaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSA9IHJldDsKKwllbHNlCiAJCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX0VOVU1FUkFURSAiIG5vdCBmb3VuZDogJXNcbiIsCiAJCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSA9IHJldDsKIAogCS8qIERlLW11bHRpcGxleGVyIChyZWFkKSAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkYXRhLT5hdGtfaGFuZGxlLCBNRVRIT0RfUkVBRCwgJnJldCk7Ci0JaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZGF0YS0+cmVhZF9oYW5kbGUgPSByZXQ7CisJZWxzZQogCQlkZXZfZGJnKGRldiwgIm1ldGhvZCAiIE1FVEhPRF9SRUFEICIgbm90IGZvdW5kOiAlc1xuIiwKIAkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlkYXRhLT5yZWFkX2hhbmRsZSA9IHJldDsKIAogCS8qIERlLW11bHRpcGxleGVyICh3cml0ZSkgKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX1dSSVRFLCAmcmV0KTsKLQlpZiAoc3RhdHVzICE9IEFFX09LKSB7Ci0JCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX1JFQUQgIiBub3QgZm91bmQ6ICVzXG4iLAorCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZGF0YS0+d3JpdGVfaGFuZGxlID0gcmV0OworCWVsc2UKKwkJZGV2X2RiZyhkZXYsICJtZXRob2QgIiBNRVRIT0RfV1JJVEUgIiBub3QgZm91bmQ6ICVzXG4iLAogCQkJCSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlkYXRhLT53cml0ZV9oYW5kbGUgPSByZXQ7CiAKLQlyZXR1cm4gMDsKKwkvKiBDaGVjayBmb3IgaHdtb24gbWV0aG9kczogZmlyc3QgY2hlY2sgIm9sZCIgc3R5bGUgbWV0aG9kczsgbm90ZSB0aGF0CisJICogYm90aCBtYXkgYmUgcHJlc2VudDogaW4gdGhpcyBjYXNlIHdlIHN0aWNrIHRvIHRoZSBvbGQgaW50ZXJmYWNlOworCSAqIGFuYWx5c2lzIG9mIG11bHRpcGxlIERTRFRzIGluZGljYXRlcyB0aGF0IHdoZW4gYm90aCBpbnRlcmZhY2VzCisJICogYXJlIHByZXNlbnQgdGhlIG5ldyBvbmUgKEdHUlAvR0lUTSkgaXMgbm90IGZ1bmN0aW9uYWwuCisJICovCisJaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlKQorCQlkYXRhLT5vbGRfaW50ZXJmYWNlID0gdHJ1ZTsKKwllbHNlIGlmIChkYXRhLT5lbnVtZXJhdGVfaGFuZGxlICYmIGRhdGEtPnJlYWRfaGFuZGxlICYmCisJCQlkYXRhLT53cml0ZV9oYW5kbGUpCisJCWRhdGEtPm9sZF9pbnRlcmZhY2UgPSBmYWxzZTsKKwllbHNlCisJCWVyciA9IC1FTk9ERVY7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGF0a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC0xMTU1LDI4ICsxMzQxLDE5IEBACiAJfQogCUFDUElfRlJFRShidWYucG9pbnRlcik7CiAKLQkvKiBDaGVjayBmb3IgaHdtb24gbWV0aG9kczogZmlyc3QgY2hlY2sgIm9sZCIgc3R5bGUgbWV0aG9kczsgbm90ZSB0aGF0Ci0JICogYm90aCBtYXkgYmUgcHJlc2VudDogaW4gdGhpcyBjYXNlIHdlIHN0aWNrIHRvIHRoZSBvbGQgaW50ZXJmYWNlOwotCSAqIGFuYWx5c2lzIG9mIG11bHRpcGxlIERTRFRzIGluZGljYXRlcyB0aGF0IHdoZW4gYm90aCBpbnRlcmZhY2VzCi0JICogYXJlIHByZXNlbnQgdGhlIG5ldyBvbmUgKEdHUlAvR0lUTSkgaXMgbm90IGZ1bmN0aW9uYWwuCi0JICovCi0JZXJyID0gYXRrX2NoZWNrX29sZF9pZihkYXRhKTsKLQlpZiAoIWVycikgewotCQlkZXZfZGJnKCZkZXZpY2UtPmRldiwgIlVzaW5nIG9sZCBod21vbiBpbnRlcmZhY2VcbiIpOwotCQlkYXRhLT5vbGRfaW50ZXJmYWNlID0gdHJ1ZTsKLQl9IGVsc2UgewotCQllcnIgPSBhdGtfY2hlY2tfbmV3X2lmKGRhdGEpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJZGV2X2RiZygmZGV2aWNlLT5kZXYsICJVc2luZyBuZXcgaHdtb24gaW50ZXJmYWNlXG4iKTsKLQkJZGF0YS0+b2xkX2ludGVyZmFjZSA9IGZhbHNlOworCWVyciA9IGF0a19wcm9iZV9pZihkYXRhKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiTm8gdXNhYmxlIGh3bW9uIGludGVyZmFjZSBkZXRlY3RlZFxuIik7CisJCWdvdG8gb3V0OwogCX0KIAotCWlmIChkYXRhLT5vbGRfaW50ZXJmYWNlKQorCWlmIChkYXRhLT5vbGRfaW50ZXJmYWNlKSB7CisJCWRldl9kYmcoJmRldmljZS0+ZGV2LCAiVXNpbmcgb2xkIGh3bW9uIGludGVyZmFjZVxuIik7CiAJCWVyciA9IGF0a19lbnVtZXJhdGVfb2xkX2h3bW9uKGRhdGEpOwotCWVsc2UKKwl9IGVsc2UgeworCQlkZXZfZGJnKCZkZXZpY2UtPmRldiwgIlVzaW5nIG5ldyBod21vbiBpbnRlcmZhY2VcbiIpOwogCQllcnIgPSBhdGtfZW51bWVyYXRlX25ld19od21vbihkYXRhKTsKKwl9CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCWlmIChlcnIgPT0gMCkgewpAQCAtMTE5MCw2ICsxMzY3LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGNsZWFudXA7CiAKKwlhdGtfZGVidWdmc19pbml0KGRhdGEpOworCiAJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGRhdGE7CiAJcmV0dXJuIDA7CiBjbGVhbnVwOgpAQCAtMTIwOCw2ICsxMzg3LDggQEAKIAogCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCisJYXRrX2RlYnVnZnNfY2xlYW51cChkYXRhKTsKKwogCWF0a19yZW1vdmVfZmlsZXMoZGF0YSk7CiAJYXRrX2ZyZWVfc2Vuc29ycyhkYXRhKTsKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCmluZGV4IGNhZWYzOWMuLjJkN2JjZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYworKysgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApAQCAtMTYxLDYgKzE2Miw3IEBACiAJaW50IHVzZW1zcl9lZSA9IDE7CiAJaW50IGVycjsKIAl1MzIgZWF4LCBlZHg7CisJc3RydWN0IHBjaV9kZXYgKmhvc3RfYnJpZGdlOwogCiAJLyogRWFybHkgY2hpcHMgaGF2ZSBubyBNU1IgZm9yIFRqTWF4ICovCiAKQEAgLTE2OCwxMSArMTcwLDIxIEBACiAJCXVzZW1zcl9lZSA9IDA7CiAJfQogCi0JLyogQXRvbXMgc2VlbXMgdG8gaGF2ZSBUak1heCBhdCA5MEMgKi8KKwkvKiBBdG9tIENQVXMgKi8KIAogCWlmIChjLT54ODZfbW9kZWwgPT0gMHgxYykgewogCQl1c2Vtc3JfZWUgPSAwOwotCQl0am1heCA9IDkwMDAwOworCisJCWhvc3RfYnJpZGdlID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgUENJX0RFVkZOKDAsIDApKTsKKworCQlpZiAoaG9zdF9icmlkZ2UgJiYgaG9zdF9icmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMCisJCSAgICAmJiAoaG9zdF9icmlkZ2UtPmRldmljZSA9PSAweGEwMDAJLyogTk0xMCBiYXNlZCBuZXR0b3AgKi8KKwkJICAgIHx8IGhvc3RfYnJpZGdlLT5kZXZpY2UgPT0gMHhhMDEwKSkJLyogTk0xMCBiYXNlZCBuZXRib29rICovCisJCQl0am1heCA9IDEwMDAwMDsKKwkJZWxzZQorCQkJdGptYXggPSA5MDAwMDsKKworCQlwY2lfZGV2X3B1dChob3N0X2JyaWRnZSk7CiAJfQogCiAJaWYgKChjLT54ODZfbW9kZWwgPiAweGUpICYmICh1c2Vtc3JfZWUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYyBiL2RyaXZlcnMvaHdtb24vazEwdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWEyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIGsxMHRlbXAuYyAtIEFNRCBGYW1pbHkgMTBoLzExaCBwcm9jZXNzb3IgaGFyZHdhcmUgbW9uaXRvcmluZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKgorICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXI7IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIEZhbWlseSAxMGgvMTFoIENQVSBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKK01PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgYm9vbCBmb3JjZTsKK21vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiZm9yY2UgbG9hZGluZyBvbiBwcm9jZXNzb3JzIHdpdGggZXJyYXR1bSAzMTkiKTsKKworLyogQ1BVSUQgZnVuY3Rpb24gMHg4MDAwMDAwMSwgZWJ4ICovCisjZGVmaW5lIENQVUlEX1BLR1RZUEVfTUFTSwkweGYwMDAwMDAwCisjZGVmaW5lIENQVUlEX1BLR1RZUEVfRgkJMHgwMDAwMDAwMAorI2RlZmluZSBDUFVJRF9QS0dUWVBFX0FNMlIyX0FNMwkweDEwMDAwMDAwCisKKy8qIERSQU0gY29udHJvbGxlciAoUENJIGZ1bmN0aW9uIDIpICovCisjZGVmaW5lIFJFR19EQ1QwX0NPTkZJR19ISUdICQkweDA5NAorI2RlZmluZSAgRERSM19NT0RFCQkJMHgwMDAwMDEwMAorCisvKiBtaXNjZWxsYW5lb3VzIChQQ0kgZnVuY3Rpb24gMykgKi8KKyNkZWZpbmUgUkVHX0hBUkRXQVJFX1RIRVJNQUxfQ09OVFJPTAkweDY0CisjZGVmaW5lICBIVENfRU5BQkxFCQkJMHgwMDAwMDAwMQorCisjZGVmaW5lIFJFR19SRVBPUlRFRF9URU1QRVJBVFVSRQkweGE0CisKKyNkZWZpbmUgUkVHX05PUlRIQlJJREdFX0NBUEFCSUxJVElFUwkweGU4CisjZGVmaW5lICBOQl9DQVBfSFRDCQkJMHgwMDAwMDQwMAorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJdTMyIHJlZ3ZhbDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0b19wY2lfZGV2KGRldiksCisJCQkgICAgICBSRUdfUkVQT1JURURfVEVNUEVSQVRVUkUsICZyZWd2YWwpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAocmVndmFsID4+IDIxKSAqIDEyNSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCA3MCAqIDEwMDApOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfY3JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgc2hvd19oeXN0ID0gYXR0ci0+aW5kZXg7CisJdTMyIHJlZ3ZhbDsKKwlpbnQgdmFsdWU7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQodG9fcGNpX2RldihkZXYpLAorCQkJICAgICAgUkVHX0hBUkRXQVJFX1RIRVJNQUxfQ09OVFJPTCwgJnJlZ3ZhbCk7CisJdmFsdWUgPSAoKHJlZ3ZhbCA+PiAxNikgJiAweDdmKSAqIDUwMCArIDUyMDAwOworCWlmIChzaG93X2h5c3QpCisJCXZhbHVlIC09ICgocmVndmFsID4+IDI0KSAmIDB4ZikgKiA1MDA7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbHVlKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgImsxMHRlbXBcbiIpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LCBOVUxMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JUlVHTywgc2hvd190ZW1wX2NyaXQsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcF9jcml0LCBOVUxMLCAxKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOworCitzdGF0aWMgYm9vbCBfX2RldmluaXQgaGFzX2VycmF0dW1fMzE5KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXUzMiBwa2dfdHlwZSwgcmVnX2RyYW1fY2ZnOworCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRXJyYXR1bSAzMTk6IFRoZSB0aGVybWFsIHNlbnNvciBvZiBTb2NrZXQgRi9BTTIrIHByb2Nlc3NvcnMKKwkgKiAgICAgICAgICAgICAgbWF5IGJlIHVucmVsaWFibGUuCisJICovCisJcGtnX3R5cGUgPSBjcHVpZF9lYngoMHg4MDAwMDAwMSkgJiBDUFVJRF9QS0dUWVBFX01BU0s7CisJaWYgKHBrZ190eXBlID09IENQVUlEX1BLR1RZUEVfRikKKwkJcmV0dXJuIHRydWU7CisJaWYgKHBrZ190eXBlICE9IENQVUlEX1BLR1RZUEVfQU0yUjJfQU0zKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBEaWZmZXJlbnRpYXRlIGJldHdlZW4gQU0yKyAoYmFkKSBhbmQgQU0zIChnb29kKSAqLworCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGRldi0+YnVzLAorCQkJCSAgUENJX0RFVkZOKFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgMiksCisJCQkJICBSRUdfRENUMF9DT05GSUdfSElHSCwgJnJlZ19kcmFtX2NmZyk7CisJcmV0dXJuICEocmVnX2RyYW1fY2ZnICYgRERSM19NT0RFKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgazEwdGVtcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCXUzMiByZWdfY2FwcywgcmVnX2h0YzsKKwlpbnQgdW5yZWxpYWJsZSA9IGhhc19lcnJhdHVtXzMxOShwZGV2KTsKKwlpbnQgZXJyOworCisJaWYgKHVucmVsaWFibGUgJiYgIWZvcmNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJ1bnJlbGlhYmxlIENQVSB0aGVybWFsIHNlbnNvcjsgbW9uaXRvcmluZyBkaXNhYmxlZFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUkVHX05PUlRIQlJJREdFX0NBUEFCSUxJVElFUywgJnJlZ19jYXBzKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUkVHX0hBUkRXQVJFX1RIRVJNQUxfQ09OVFJPTCwgJnJlZ19odGMpOworCWlmICgocmVnX2NhcHMgJiBOQl9DQVBfSFRDKSAmJiAocmVnX2h0YyAmIEhUQ19FTkFCTEUpKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAorCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5kZXZfYXR0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X3JlbW92ZTsKKworCWh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihod21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaHdtb25fZGV2KTsKKworCWlmICh1bnJlbGlhYmxlICYmIGZvcmNlKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJ1bnJlbGlhYmxlIENQVSB0aGVybWFsIHNlbnNvcjsgY2hlY2sgZXJyYXR1bSAzMTlcbiIpOworCXJldHVybiAwOworCitleGl0X3JlbW92ZToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfaW5wdXQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0cik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5kZXZfYXR0cik7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBrMTB0ZW1wX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldikpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyKTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrMTB0ZW1wX2lkX3RhYmxlW10gPSB7CisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzEwSF9OQl9NSVNDKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xMUhfTkJfTUlTQykgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBrMTB0ZW1wX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGsxMHRlbXBfZHJpdmVyID0geworCS5uYW1lID0gImsxMHRlbXAiLAorCS5pZF90YWJsZSA9IGsxMHRlbXBfaWRfdGFibGUsCisJLnByb2JlID0gazEwdGVtcF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoazEwdGVtcF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgazEwdGVtcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmsxMHRlbXBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGsxMHRlbXBfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmazEwdGVtcF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChrMTB0ZW1wX2luaXQpCittb2R1bGVfZXhpdChrMTB0ZW1wX2V4aXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jIGIvZHJpdmVycy9od21vbi9rOHRlbXAuYwppbmRleCAxZmU5OTUxLi4wY2ViNmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vazh0ZW1wLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXA0X2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDEsIDEpOwogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrOHRlbXBfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgazh0ZW1wX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSzhfTkJfTUlTQykgfSwKIAl7IDAgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9pMmMuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMWY1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9pMmMuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIGRyaXZlcnMvaHdtb24vbGlzM2x2MDJkX2kyYy5jCisgKgorICogSW1wbGVtZW50cyBJMkMgaW50ZXJmYWNlIGZvciBsaXMzbHYwMmQgKFNUTWljcm9lbGVjdHJvbmljcykgYWNjZWxlcm9tZXRlci4KKyAqIERyaXZlciBpcyBiYXNlZCBvbiBjb3JyZXNwb25kaW5nIFNQSSBkcml2ZXIgd3JpdHRlbiBieSBEYW5pZWwgTWFjaworICogKGxpczNsdjAyZF9zcGkuYyAoQykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiApLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQ29udGFjdDogU2FtdSBPbmthbG8gPHNhbXUucC5vbmthbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImxpczNsdjAyZC5oIgorCisjZGVmaW5lIERSVl9OQU1FIAkibGlzM2x2MDJkX2kyYyIKKworc3RhdGljIGlubGluZSBzMzIgbGlzM19pMmNfd3JpdGUoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZywgdTggdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSBsaXMzLT5idXNfcHJpdjsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjLCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBzMzIgbGlzM19pMmNfcmVhZChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCAqdikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IGxpczMtPmJ1c19wcml2OworCSp2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGMsIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlzM19pMmNfaW5pdChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQoreworCXU4IHJlZzsKKwlpbnQgcmV0OworCisJLyogcG93ZXIgdXAgdGhlIGRldmljZSAqLworCXJldCA9IGxpczMtPnJlYWQobGlzMywgQ1RSTF9SRUcxLCAmcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJlZyB8PSBDVFJMMV9QRDA7CisJcmV0dXJuIGxpczMtPndyaXRlKGxpczMsIENUUkxfUkVHMSwgcmVnKTsKK30KKworLyogRGVmYXVsdCBheGlzIG1hcHBpbmcgYnV0IGl0IGNhbiBiZSBvdmVyd3JpdHRlbiBieSBwbGF0Zm9ybSBkYXRhICovCitzdGF0aWMgc3RydWN0IGF4aXNfY29udmVyc2lvbiBsaXMzbHYwMmRfYXhpc19tYXAgPSB7IExJUzNfREVWX1gsCisJCQkJCQkgICAgIExJUzNfREVWX1ksCisJCQkJCQkgICAgIExJUzNfREVWX1ogfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbGlzM2x2MDJkX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGxpczNsdjAyZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEpIHsKKwkJaWYgKHBkYXRhLT5heGlzX3gpCisJCQlsaXMzbHYwMmRfYXhpc19tYXAueCA9IHBkYXRhLT5heGlzX3g7CisKKwkJaWYgKHBkYXRhLT5heGlzX3kpCisJCQlsaXMzbHYwMmRfYXhpc19tYXAueSA9IHBkYXRhLT5heGlzX3k7CisKKwkJaWYgKHBkYXRhLT5heGlzX3opCisJCQlsaXMzbHYwMmRfYXhpc19tYXAueiA9IHBkYXRhLT5heGlzX3o7CisKKwkJaWYgKHBkYXRhLT5zZXR1cF9yZXNvdXJjZXMpCisJCQlyZXQgPSBwZGF0YS0+c2V0dXBfcmVzb3VyY2VzKCk7CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlsaXMzX2Rldi5wZGF0YQkgID0gcGRhdGE7CisJbGlzM19kZXYuYnVzX3ByaXYgPSBjbGllbnQ7CisJbGlzM19kZXYuaW5pdAkgID0gbGlzM19pMmNfaW5pdDsKKwlsaXMzX2Rldi5yZWFkCSAgPSBsaXMzX2kyY19yZWFkOworCWxpczNfZGV2LndyaXRlCSAgPSBsaXMzX2kyY193cml0ZTsKKwlsaXMzX2Rldi5pcnEJICA9IGNsaWVudC0+aXJxOworCWxpczNfZGV2LmFjCSAgPSBsaXMzbHYwMmRfYXhpc19tYXA7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCAmbGlzM19kZXYpOworCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmbGlzM19kZXYpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaXMzbHYwMmRfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsaXMzbHYwMmQgKmxpczMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgbGlzM2x2MDJkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+cmVsZWFzZV9yZXNvdXJjZXMpCisJCXBkYXRhLT5yZWxlYXNlX3Jlc291cmNlcygpOworCisJbGlzM2x2MDJkX2pveXN0aWNrX2Rpc2FibGUoKTsKKwlsaXMzbHYwMmRfcG93ZXJvZmYobGlzMyk7CisKKwlyZXR1cm4gbGlzM2x2MDJkX3JlbW92ZV9mcygmbGlzM19kZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGxpczNsdjAyZF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoIWxpczMtPnBkYXRhLT53YWtldXBfZmxhZ3MpCisJCWxpczNsdjAyZF9wb3dlcm9mZihsaXMzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaXMzbHYwMmRfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsaXMzbHYwMmQgKmxpczMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlmICghbGlzMy0+cGRhdGEtPndha2V1cF9mbGFncykKKwkJbGlzM2x2MDJkX3Bvd2Vyb24obGlzMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpczNsdjAyZF9pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlsaXMzbHYwMmRfaTJjX3N1c3BlbmQoY2xpZW50LCBQTVNHX1NVU1BFTkQpOworfQorI2Vsc2UKKyNkZWZpbmUgbGlzM2x2MDJkX2kyY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgbGlzM2x2MDJkX2kyY19yZXN1bWUJTlVMTAorI2RlZmluZSBsaXMzbHYwMmRfaTJjX3NodXRkb3duCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbGlzM2x2MDJkX2lkW10gPSB7CisJeyJsaXMzbHYwMmQiLCAwIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsaXMzbHYwMmRfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbGlzM2x2MDJkX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlcgkgPSB7CisJCS5uYW1lICAgPSBEUlZfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSBsaXMzbHYwMmRfaTJjX3N1c3BlbmQsCisJLnNodXRkb3duID0gbGlzM2x2MDJkX2kyY19zaHV0ZG93biwKKwkucmVzdW1lID0gbGlzM2x2MDJkX2kyY19yZXN1bWUsCisJLnByb2JlCT0gbGlzM2x2MDJkX2kyY19wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobGlzM2x2MDJkX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IGxpczNsdjAyZF9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxpczNsdjAyZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZsaXMzbHYwMmRfaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXMzbHYwMmRfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZsaXMzbHYwMmRfaTJjX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIk5va2lhIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImxpczNsdjAyZCBJMkMgaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGxpczNsdjAyZF9pbml0KTsKK21vZHVsZV9leGl0KGxpczNsdjAyZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwppbmRleCBlYmUzOGI2Li44NjRhMzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAlpbnQgZDEgPSAwOwogCWludCBpOwogCi0JZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodGVtcHBvaW50cykgLSAxOyBpKyspCisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodGVtcHBvaW50cyk7IGkrKykKIAkJLyogRmluZCBwb2ludGVyIHRvIGludGVycG9sYXRlICovCiAJCWlmIChkYXRhLT5zdXBwbHlfdVYgPiB0ZW1wcG9pbnRzW2kgLSAxXS52ZGQpIHsKIAkJCWQxID0gKGRhdGEtPnN1cHBseV91Vi8xMDAwIC0gdGVtcHBvaW50c1tpIC0gMV0udmRkKQpAQCAtMzMyLDEyICszMzIsMTIgQEAKIAogCWNvbnN0IGludCBjMSA9IC00OwogCWNvbnN0IGludCBjMiA9IDQwNTAwOyAvKiB4IDEwIF4gLTYgKi8KLQljb25zdCBpbnQgYzMgPSAyODAwOyAvKiB4MTAgXiAtOSAqLworCWNvbnN0IGludCBjMyA9IC0yODAwOyAvKiB4MTAgXiAtOSAqLwogCiAJUkhsaW5lYXIgPSBjMSoxMDAwCiAJCSsgYzIgKiBkYXRhLT52YWxfaHVtaWQvMTAwMAogCQkrIChkYXRhLT52YWxfaHVtaWQgKiBkYXRhLT52YWxfaHVtaWQgKiBjMykvMTAwMDAwMDsKLQlyZXR1cm4gKHRlbXAgLSAyNTAwMCkgKiAoMTAwMDAgKyA4MDAgKiBkYXRhLT52YWxfaHVtaWQpCisJcmV0dXJuICh0ZW1wIC0gMjUwMDApICogKDEwMDAwICsgODAgKiBkYXRhLT52YWxfaHVtaWQpCiAJCS8gMTAwMDAwMCArIFJIbGluZWFyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NpczU1OTUuYyBiL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCmluZGV4IDEyZjJlNzAuLjc5YzI5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCkBAIC02OTcsNyArNjk3LDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczU1OTVfcGNpX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpczU1OTVfcGNpX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJXzUwMykgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMKaW5kZXggOGFkNTBmZC4uOWNhOTc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3bTEuYwpAQCAtMTM2LDExICsxMzYsMTEgQEAKIAogc3RydWN0IHNtc2M0N20xX3Npb19kYXRhIHsKIAllbnVtIGNoaXBzIHR5cGU7CisJdTggYWN0aXZhdGU7CQkvKiBSZW1lbWJlciBpbml0aWFsIGRldmljZSBzdGF0ZSAqLwogfTsKIAogCi1zdGF0aWMgaW50IHNtc2M0N20xX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotc3RhdGljIGludCBfX2RldmV4aXQgc21zYzQ3bTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBfX2V4aXQgc21zYzQ3bTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIHN0cnVjdCBzbXNjNDdtMV9kYXRhICpzbXNjNDdtMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJaW50IGluaXQpOwogCkBAIC0xNjAsOCArMTYwLDcgQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gRFJWTkFNRSwKIAl9LAotCS5wcm9iZQkJPSBzbXNjNDdtMV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNtc2M0N20xX3JlbW92ZSksCisJLnJlbW92ZQkJPSBfX2V4aXRfcChzbXNjNDdtMV9yZW1vdmUpLAogfTsKIAogc3RhdGljIHNzaXplX3QgZ2V0X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCkBAIC00NzAsMjQgKzQ2OSwxMjYgQEAKIAlzdXBlcmlvX3NlbGVjdCgpOwogCSphZGRyID0gKHN1cGVyaW9faW5iKFNVUEVSSU9fUkVHX0JBU0UpIDw8IDgpCiAJICAgICAgfCAgc3VwZXJpb19pbmIoU1VQRVJJT19SRUdfQkFTRSArIDEpOwotCXZhbCA9IHN1cGVyaW9faW5iKFNVUEVSSU9fUkVHX0FDVCk7Ci0JaWYgKCphZGRyID09IDAgfHwgKHZhbCAmIDB4MDEpID09IDApIHsKLQkJcHJfaW5mbyhEUlZOQU1FICI6IERldmljZSBpcyBkaXNhYmxlZCwgd2lsbCBub3QgdXNlXG4iKTsKKwlpZiAoKmFkZHIgPT0gMCkgeworCQlwcl9pbmZvKERSVk5BTUUgIjogRGV2aWNlIGFkZHJlc3Mgbm90IHNldCwgd2lsbCBub3QgdXNlXG4iKTsKIAkJc3VwZXJpb19leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCS8qIEVuYWJsZSBvbmx5IGlmIGFkZHJlc3MgaXMgc2V0IChuZWVkZWQgYXQgbGVhc3Qgb24gdGhlCisJICogQ29tcGFxIFByZXNhcmlvIFM0MDAwTlgpICovCisJc2lvX2RhdGEtPmFjdGl2YXRlID0gc3VwZXJpb19pbmIoU1VQRVJJT19SRUdfQUNUKTsKKwlpZiAoKHNpb19kYXRhLT5hY3RpdmF0ZSAmIDB4MDEpID09IDApIHsKKwkJcHJfaW5mbyhEUlZOQU1FICI6IEVuYWJsaW5nIGRldmljZVxuIik7CisJCXN1cGVyaW9fb3V0YihTVVBFUklPX1JFR19BQ1QsIHNpb19kYXRhLT5hY3RpdmF0ZSB8IDB4MDEpOworCX0KKwogCXN1cGVyaW9fZXhpdCgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbXNjNDdtMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorLyogUmVzdG9yZSBkZXZpY2UgdG8gaXRzIGluaXRpYWwgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzbXNjNDdtMV9yZXN0b3JlKGNvbnN0IHN0cnVjdCBzbXNjNDdtMV9zaW9fZGF0YSAqc2lvX2RhdGEpCit7CisJaWYgKChzaW9fZGF0YS0+YWN0aXZhdGUgJiAweDAxKSA9PSAwKSB7CisJCXN1cGVyaW9fZW50ZXIoKTsKKwkJc3VwZXJpb19zZWxlY3QoKTsKKworCQlwcl9pbmZvKERSVk5BTUUgIjogRGlzYWJsaW5nIGRldmljZVxuIik7CisJCXN1cGVyaW9fb3V0YihTVVBFUklPX1JFR19BQ1QsIHNpb19kYXRhLT5hY3RpdmF0ZSk7CisKKwkJc3VwZXJpb19leGl0KCk7CisJfQorfQorCisjZGVmaW5lIENIRUNLCQkxCisjZGVmaW5lIFJFUVVFU1QJCTIKKyNkZWZpbmUgUkVMRUFTRQkJMworCisvKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0bzoKKyAqICAtIHRlc3QgZm9yIHJlc291cmNlIGNvbmZsaWN0cyB3aXRoIEFDUEkKKyAqICAtIHJlcXVlc3QgdGhlIHJlc291cmNlcworICogIC0gcmVsZWFzZSB0aGUgcmVzb3VyY2VzCisgKiBXZSBvbmx5IGFsbG9jYXRlIHRoZSBJL08gcG9ydHMgd2UgcmVhbGx5IG5lZWQsIHRvIG1pbmltaXplIHRoZSByaXNrIG9mCisgKiBjb25mbGljdHMgd2l0aCBBQ1BJIG9yIHdpdGggb3RoZXIgZHJpdmVycy4KKyAqLworc3RhdGljIGludCBzbXNjNDdtMV9oYW5kbGVfcmVzb3VyY2VzKHVuc2lnbmVkIHNob3J0IGFkZHJlc3MsIGVudW0gY2hpcHMgdHlwZSwKKwkJCQkgICAgIGludCBhY3Rpb24sIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgY29uc3QgdTggcG9ydHNfbTFbXSA9IHsKKwkJLyogcmVnaXN0ZXIsIHJlZ2lvbiBsZW5ndGggKi8KKwkJMHgwNCwgMSwKKwkJMHgzMywgNCwKKwkJMHg1NiwgNywKKwl9OworCisJc3RhdGljIGNvbnN0IHU4IHBvcnRzX20yW10gPSB7CisJCS8qIHJlZ2lzdGVyLCByZWdpb24gbGVuZ3RoICovCisJCTB4MDQsIDEsCisJCTB4MDksIDEsCisJCTB4MmMsIDIsCisJCTB4MzUsIDQsCisJCTB4NTYsIDcsCisJCTB4NjksIDQsCisJfTsKKworCWludCBpLCBwb3J0c19zaXplLCBlcnI7CisJY29uc3QgdTggKnBvcnRzOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBzbXNjNDdtMToKKwlkZWZhdWx0OgorCQlwb3J0cyA9IHBvcnRzX20xOworCQlwb3J0c19zaXplID0gQVJSQVlfU0laRShwb3J0c19tMSk7CisJCWJyZWFrOworCWNhc2Ugc21zYzQ3bTI6CisJCXBvcnRzID0gcG9ydHNfbTI7CisJCXBvcnRzX3NpemUgPSBBUlJBWV9TSVpFKHBvcnRzX20yKTsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSArIDEgPCBwb3J0c19zaXplOyBpICs9IDIpIHsKKwkJdW5zaWduZWQgc2hvcnQgc3RhcnQgPSBhZGRyZXNzICsgcG9ydHNbaV07CisJCXVuc2lnbmVkIHNob3J0IGxlbiA9IHBvcnRzW2kgKyAxXTsKKworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIENIRUNLOgorCQkJLyogT25seSBjaGVjayBmb3IgY29uZmxpY3RzICovCisJCQllcnIgPSBhY3BpX2NoZWNrX3JlZ2lvbihzdGFydCwgbGVuLCBEUlZOQU1FKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWJyZWFrOworCQljYXNlIFJFUVVFU1Q6CisJCQkvKiBSZXF1ZXN0IHRoZSByZXNvdXJjZXMgKi8KKwkJCWlmICghcmVxdWVzdF9yZWdpb24oc3RhcnQsIGxlbiwgRFJWTkFNRSkpIHsKKwkJCQlkZXZfZXJyKGRldiwgIlJlZ2lvbiAweCVoeC0weCVoeCBhbHJlYWR5IGluICIKKwkJCQkJInVzZSFcbiIsIHN0YXJ0LCBzdGFydCArIGxlbik7CisKKwkJCQkvKiBVbmRvIGFsbCByZXF1ZXN0cyAqLworCQkJCWZvciAoaSAtPSAyOyBpID49IDA7IGkgLT0gMikKKwkJCQkJcmVsZWFzZV9yZWdpb24oYWRkcmVzcyArIHBvcnRzW2ldLAorCQkJCQkJICAgICAgIHBvcnRzW2kgKyAxXSk7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJFTEVBU0U6CisJCQkvKiBSZWxlYXNlIHRoZSByZXNvdXJjZXMgKi8KKwkJCXJlbGVhc2VfcmVnaW9uKHN0YXJ0LCBsZW4pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc21zYzQ3bTFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBzbXNjNDdtMV9zaW9fZGF0YSAqc2lvX2RhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGVyciA9IDA7CisJaW50IGVycjsKIAlpbnQgZmFuMSwgZmFuMiwgZmFuMywgcHdtMSwgcHdtMiwgcHdtMzsKIAogCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lc1tdID0gewpAQCAtNDk2LDEyICs1OTcsMTAgQEAKIAl9OwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgU01TQ19FWFRFTlQsIERSVk5BTUUpKSB7Ci0JCWRldl9lcnIoZGV2LCAiUmVnaW9uIDB4JWx4LTB4JWx4IGFscmVhZHkgaW4gdXNlIVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZylyZXMtPmVuZCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQorCWVyciA9IHNtc2M0N20xX2hhbmRsZV9yZXNvdXJjZXMocmVzLT5zdGFydCwgc2lvX2RhdGEtPnR5cGUsCisJCQkJCVJFUVVFU1QsIGRldik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtc2M0N20xX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTYzNywxMSArNzM2LDExIEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiBlcnJvcl9yZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIFNNU0NfRVhURU5UKTsKKwlzbXNjNDdtMV9oYW5kbGVfcmVzb3VyY2VzKHJlcy0+c3RhcnQsIHNpb19kYXRhLT50eXBlLCBSRUxFQVNFLCBkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHNtc2M0N20xX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2V4aXQgc21zYzQ3bTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTY1MCw3ICs3NDksNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzbXNjNDdtMV9ncm91cCk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0JcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgU01TQ19FWFRFTlQpOworCXNtc2M0N20xX2hhbmRsZV9yZXNvdXJjZXMocmVzLT5zdGFydCwgZGF0YS0+dHlwZSwgUkVMRUFTRSwgJnBkZXYtPmRldik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiAKQEAgLTcxNyw3ICs4MTYsNyBAQAogCX07CiAJaW50IGVycjsKIAotCWVyciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJnJlcyk7CisJZXJyID0gc21zYzQ3bTFfaGFuZGxlX3Jlc291cmNlcyhhZGRyZXNzLCBzaW9fZGF0YS0+dHlwZSwgQ0hFQ0ssIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXhpdDsKIApAQCAtNzY2LDI3ICs4NjUsMjkgQEAKIAlpZiAoc21zYzQ3bTFfZmluZCgmYWRkcmVzcywgJnNpb19kYXRhKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtc2M0N20xX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJZ290byBleGl0OwotCiAJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCiAJZXJyID0gc21zYzQ3bTFfZGV2aWNlX2FkZChhZGRyZXNzLCAmc2lvX2RhdGEpOwogCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9kcml2ZXI7CisJCWdvdG8gZXhpdDsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmc21zYzQ3bTFfZHJpdmVyLCBzbXNjNDdtMV9wcm9iZSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldmljZTsKIAogCXJldHVybiAwOwogCi1leGl0X2RyaXZlcjoKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zYzQ3bTFfZHJpdmVyKTsKK2V4aXRfZGV2aWNlOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCXNtc2M0N20xX3Jlc3RvcmUoJnNpb19kYXRhKTsKIGV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNtX3Ntc2M0N20xX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zYzQ3bTFfZHJpdmVyKTsKKwlzbXNjNDdtMV9yZXN0b3JlKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92aWEtY3B1dGVtcC5jIGIvZHJpdmVycy9od21vbi92aWEtY3B1dGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDJjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL3ZpYS1jcHV0ZW1wLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiB2aWEtY3B1dGVtcC5jIC0gRHJpdmVyIGZvciBWSUEgQ1BVIGNvcmUgdGVtcGVyYXR1cmUgbW9uaXRvcmluZworICogQ29weXJpZ2h0IChDKSAyMDA5IFZJQSBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBiYXNlZCBvbiBleGlzdGluZyBjb3JldGVtcC5jLCB3aGljaCBpcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIERSVk5BTUUJInZpYV9jcHV0ZW1wIgorCitlbnVtIHsgU0hPV19URU1QLCBTSE9XX0xBQkVMLCBTSE9XX05BTUUgfSBTSE9XOworCisvKgorICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCisgKi8KKworc3RydWN0IHZpYV9jcHV0ZW1wX2RhdGEgeworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBpZDsKKwl1MzIgbXNyOworfTsKKworLyoKKyAqIFN5c2ZzIHN0dWZmCisgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgdmlhX2NwdXRlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGF0dHItPmluZGV4ID09IFNIT1dfTkFNRSkKKwkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7CisJZWxzZQkvKiBzaG93IGxhYmVsICovCisJCXJldCA9IHNwcmludGYoYnVmLCAiQ29yZSAlZFxuIiwgZGF0YS0+aWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmlhX2NwdXRlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiBlYXgsIGVkeDsKKwlpbnQgZXJyOworCisJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoZGF0YS0+aWQsIGRhdGEtPm1zciwgJmVheCwgJmVkeCk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsICgodW5zaWduZWQgbG9uZyllYXggJiAweGZmZmZmZikgKiAxMDAwKTsKK30KKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLAorCQkJICBTSE9XX1RFTVApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9sYWJlbCwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX0xBQkVMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX05BTUUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdmlhX2NwdXRlbXBfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfbmFtZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbGFiZWwuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdmlhX2NwdXRlbXBfZ3JvdXAgPSB7CisJLmF0dHJzID0gdmlhX2NwdXRlbXBfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpYV9jcHV0ZW1wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZpYV9jcHV0ZW1wX2RhdGEgKmRhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBkZXYtPmlkKTsKKwlpbnQgZXJyOworCXUzMiBlYXgsIGVkeDsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlhX2NwdXRlbXBfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+bmFtZSA9ICJ2aWFfY3B1dGVtcCI7CisKKwlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgeworCWNhc2UgMHhBOgorCQkvKiBDNyBBICovCisJY2FzZSAweEQ6CisJCS8qIEM3IEQgKi8KKwkJZGF0YS0+bXNyID0gMHgxMTY5OworCQlicmVhazsKKwljYXNlIDB4RjoKKwkJLyogTmFubyAqLworCQlkYXRhLT5tc3IgPSAweDE0MjM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCS8qIHRlc3QgaWYgd2UgY2FuIGFjY2VzcyB0aGUgVEVNUEVSQVRVUkUgTVNSICovCisJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoZGF0YS0+aWQsIGRhdGEtPm1zciwgJmVheCwgJmVkeCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFjY2VzcyBURU1QRVJBVFVSRSBNU1IsIGdpdmluZyB1cFxuIik7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnZpYV9jcHV0ZW1wX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsCisJCQllcnIpOworCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKworCXJldHVybiAwOworCitleGl0X3JlbW92ZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdmlhX2NwdXRlbXBfZ3JvdXApOworZXhpdF9mcmVlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB2aWFfY3B1dGVtcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdmlhX2NwdXRlbXBfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdmlhX2NwdXRlbXBfZ3JvdXApOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2aWFfY3B1dGVtcF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gRFJWTkFNRSwKKwl9LAorCS5wcm9iZSA9IHZpYV9jcHV0ZW1wX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh2aWFfY3B1dGVtcF9yZW1vdmUpLAorfTsKKworc3RydWN0IHBkZXZfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXVuc2lnbmVkIGludCBjcHU7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHBkZXZfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBkZXZfbGlzdF9tdXRleCk7CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IHZpYV9jcHV0ZW1wX2RldmljZV9hZGQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBkZXZfZW50cnkgKnBkZXZfZW50cnk7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIGNwdSk7CisJaWYgKCFwZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwZGV2X2VudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBkZXZfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkZXZfZW50cnkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKKwkJICAgICAgIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfZnJlZTsKKwl9CisKKwlwZGV2X2VudHJ5LT5wZGV2ID0gcGRldjsKKwlwZGV2X2VudHJ5LT5jcHUgPSBjcHU7CisJbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZwZGV2X2VudHJ5LT5saXN0LCAmcGRldl9saXN0KTsKKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VfZnJlZToKKwlrZnJlZShwZGV2X2VudHJ5KTsKK2V4aXRfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgdm9pZCB2aWFfY3B1dGVtcF9kZXZpY2VfcmVtb3ZlKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHAtPmNwdSA9PSBjcHUpIHsKKwkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtPnBkZXYpOworCQkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQkJa2ZyZWUocCk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCB2aWFfY3B1dGVtcF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCQl2aWFfY3B1dGVtcF9kZXZpY2VfYWRkKGNwdSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJdmlhX2NwdXRlbXBfZGV2aWNlX3JlbW92ZShjcHUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB2aWFfY3B1dGVtcF9jcHVfbm90aWZpZXIgX19yZWZkYXRhID0geworCS5ub3RpZmllcl9jYWxsID0gdmlhX2NwdXRlbXBfY3B1X2NhbGxiYWNrLAorfTsKKyNlbmRpZgkJCQkvKiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCisKK3N0YXRpYyBpbnQgX19pbml0IHZpYV9jcHV0ZW1wX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgZXJyOworCXN0cnVjdCBwZGV2X2VudHJ5ICpwLCAqbjsKKworCWlmIChjcHVfZGF0YSgwKS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQ0VOVEFVUikgeworCQlwcmludGsoS0VSTl9ERUJVRyBEUlZOQU1FICI6IE5vdCBhIFZJQSBDUFVcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2aWFfY3B1dGVtcF9kcml2ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoaSk7CisKKwkJaWYgKGMtPng4NiAhPSA2KQorCQkJY29udGludWU7CisKKwkJaWYgKGMtPng4Nl9tb2RlbCA8IDB4MGEpCisJCQljb250aW51ZTsKKworCQlpZiAoYy0+eDg2X21vZGVsID4gMHgwZikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IFVua25vd24gQ1BVICIKKwkJCQkibW9kZWwgMHgleFxuIiwgYy0+eDg2X21vZGVsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gdmlhX2NwdXRlbXBfZGV2aWNlX2FkZChpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9kZXZpY2VzX3VucmVnOworCX0KKwlpZiAobGlzdF9lbXB0eSgmcGRldl9saXN0KSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfZHJpdmVyX3VucmVnOworCX0KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmdmlhX2NwdXRlbXBfY3B1X25vdGlmaWVyKTsKKyNlbmRpZgorCXJldHVybiAwOworCitleGl0X2RldmljZXNfdW5yZWc6CisJbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnBkZXZfbGlzdCwgbGlzdCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLT5wZGV2KTsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrZnJlZShwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworZXhpdF9kcml2ZXJfdW5yZWc6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZpYV9jcHV0ZW1wX2RyaXZlcik7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aWFfY3B1dGVtcF9leGl0KHZvaWQpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZ2aWFfY3B1dGVtcF9jcHVfbm90aWZpZXIpOworI2VuZGlmCisJbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnBkZXZfbGlzdCwgbGlzdCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLT5wZGV2KTsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrZnJlZShwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aWFfY3B1dGVtcF9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPEhhcmFsZFdlbHRlQHZpYXRlY2guY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJWSUEgQ1BVIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQodmlhX2NwdXRlbXBfaW5pdCkKK21vZHVsZV9leGl0KHZpYV9jcHV0ZW1wX2V4aXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYyBiL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCmluZGV4IDM5ZTgyYTQuLmYzOTdjZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCkBAIC03NjcsNyArNzY3LDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZpYTY4NmFfcGNpX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZpYTY4NmFfcGNpX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzQpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92dDgyMzEuYyBiL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMKaW5kZXggNDcwYTEyMi4uZDQ3YjRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi92dDgyMzEuYworKysgYi9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jCkBAIC02OTcsNyArNjk3LDcgQEAKIAkucmVtb3ZlCT0gX19kZXZleGl0X3AodnQ4MjMxX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnQ4MjMxX3BjaV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2dDgyMzFfcGNpX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzMV80KSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNjI3aGYuYyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3aGYuYwppbmRleCBiMjU3YzcyLi4zOGUyODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCkBAIC0xMTM1LDYgKzExMzUsNyBAQAogCQkiVzgzNjg3VEhGIiwKIAl9OwogCisJc2lvX2RhdGEtPnNpb2FkZHIgPSBzaW9hZGRyOwogCXN1cGVyaW9fZW50ZXIoc2lvX2RhdGEpOwogCXZhbCA9IGZvcmNlX2lkID8gZm9yY2VfaWQgOiBzdXBlcmlvX2luYihzaW9fZGF0YSwgREVWSUQpOwogCXN3aXRjaCAodmFsKSB7CkBAIC0xMTc3LDcgKzExNzgsNiBAQAogCX0KIAogCWVyciA9IDA7Ci0Jc2lvX2RhdGEtPnNpb2FkZHIgPSBzaW9hZGRyOwogCXByX2luZm8oRFJWTkFNRSAiOiBGb3VuZCAlcyBjaGlwIGF0ICUjeFxuIiwKIAkJbmFtZXNbc2lvX2RhdGEtPnR5cGVdLCAqYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYmZpbi10d2kuYwppbmRleCBiMzA5YWMyLi5mZTNmYjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWJmaW4tdHdpLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1iZmluLXR3aS5jCkBAIC02OTMsMTMgKzY5MywxMyBAQAogCX0KIAogCS8qIFNldCBUV0kgaW50ZXJuYWwgY2xvY2sgYXMgMTBNSHogKi8KLQl3cml0ZV9DT05UUk9MKGlmYWNlLCAoKGdldF9zY2xrKCkgLyAxMDI0IC8gMTAyNCArIDUpIC8gMTApICYgMHg3Rik7CisJd3JpdGVfQ09OVFJPTChpZmFjZSwgKChnZXRfc2NsaygpIC8gMTAwMCAvIDEwMDAgKyA1KSAvIDEwKSAmIDB4N0YpOwogCiAJLyoKIAkgKiBXZSB3aWxsIG5vdCBlbmQgdXAgd2l0aCBhIENMS0RJVj0wIGJlY2F1c2Ugbm8gb25lIHdpbGwgc3BlY2lmeQotCSAqIDIwa0h6IFNDTCBvciBsZXNzIGluIEtjb25maWcgbm93LiAoNSAqIDEwMjQgLyAyMCA9IDB4MTAwKQorCSAqIDIwa0h6IFNDTCBvciBsZXNzIGluIEtjb25maWcgbm93LiAoNSAqIDEwMDAgLyAyMCA9IDI1MCkKIAkgKi8KLQljbGtoaWxvdyA9IDUgKiAxMDI0IC8gQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWjsKKwljbGtoaWxvdyA9ICgoMTAgKiAxMDAwIC8gQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWikgKyAxKSAvIDI7CiAKIAkvKiBTZXQgVHdpIGludGVyZmFjZSBjbG9jayBhcyBzcGVjaWZpZWQgKi8KIAl3cml0ZV9DTEtESVYoaWZhY2UsIChjbGtoaWxvdyA8PCA4KSB8IGNsa2hpbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggNzViZjNhZC4uMDAzN2UzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTI0Nyw3ICsyNDcsMTMgQEAKIAkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgT01BUF9JMkNfQ09OX0VOKTsKIAl9CiAJZGV2LT5pZGxlID0gMDsKLQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19JRV9SRUcsIGRldi0+aWVzdGF0ZSk7CisKKwkvKgorCSAqIERvbid0IHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgaWYgdGhlIElFIHN0YXRlIGlzIDAgYXMgaXQgY2FuCisJICogY2F1c2UgZGVhZGxvY2suCisJICovCisJaWYgKGRldi0+aWVzdGF0ZSkKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfSUVfUkVHLCBkZXYtPmllc3RhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2kyY19pZGxlKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTI4MCw2ICsyODYsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGludGVybmFsX2NsayA9IDA7CiAKIAlpZiAoZGV2LT5yZXYgPj0gT01BUF9JMkNfUkVWXzIpIHsKKwkJLyogRGlzYWJsZSBJMkMgY29udHJvbGxlciBiZWZvcmUgc29mdCByZXNldCAqLworCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLAorCQkJb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHKSAmCisJCQkJfihPTUFQX0kyQ19DT05fRU4pKTsKKwogCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19TWVNDX1JFRywgU1lTQ19TT0ZUUkVTRVRfTUFTSyk7CiAJCS8qIEZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHNldCB0aGUgRU4gYml0IGJlZm9yZSB0aGUKIAkJICogcmVzZXQgZG9uZSBiaXQgZ2V0cyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jIGIvZHJpdmVycy9pZGxlL2k3MzAwX2lkbGUuYwppbmRleCAxZjIwYTA0Li5kZDI1MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkbGUvaTczMDBfaWRsZS5jCisrKyBiL2RyaXZlcnMvaWRsZS9pNzMwMF9pZGxlLmMKQEAgLTgxLDcgKzgxLDcgQEAKIHN0YXRpYyB1OCBpNzMwMF9pZGxlX3RocnRsb3dfc2F2ZWQ7CiBzdGF0aWMgdTMyIGk3MzAwX2lkbGVfbWNfc2F2ZWQ7CiAKLXN0YXRpYyBjcHVtYXNrX3QgaWRsZV9jcHVtYXNrOworc3RhdGljIGNwdW1hc2tfdmFyX3QgaWRsZV9jcHVtYXNrOwogc3RhdGljIGt0aW1lX3Qgc3RhcnRfa3RpbWU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhdmdfaWRsZV91czsKIApAQCAtNDU5LDkgKzQ1OSw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk3MzAwX2lkbGVfbG9jaywgZmxhZ3MpOwogCWlmICh2YWwgPT0gSURMRV9TVEFSVCkgewogCi0JCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZGxlX2NwdW1hc2spOworCQljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZGxlX2NwdW1hc2spOwogCi0JCWlmIChjcHVzX3dlaWdodChpZGxlX2NwdW1hc2spICE9IG51bV9vbmxpbmVfY3B1cygpKQorCQlpZiAoY3B1bWFza193ZWlnaHQoaWRsZV9jcHVtYXNrKSAhPSBudW1fb25saW5lX2NwdXMoKSkKIAkJCWdvdG8gZW5kOwogCiAJCW5vd19rdGltZSA9IGt0aW1lX2dldCgpOwpAQCAtNDc4LDggKzQ3OCw4IEBACiAJCWk3MzAwX2lkbGVfaW9hdF9zdGFydCgpOwogCiAJfSBlbHNlIGlmICh2YWwgPT0gSURMRV9FTkQpIHsKLQkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgaWRsZV9jcHVtYXNrKTsKLQkJaWYgKGNwdXNfd2VpZ2h0KGlkbGVfY3B1bWFzaykgPT0gKG51bV9vbmxpbmVfY3B1cygpIC0gMSkpIHsKKwkJY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZGxlX2NwdW1hc2spOworCQlpZiAoY3B1bWFza193ZWlnaHQoaWRsZV9jcHVtYXNrKSA9PSAobnVtX29ubGluZV9jcHVzKCkgLSAxKSkgewogCQkJLyogRmlyc3QgQ1BVIGNvbWluZyBvdXQgb2YgaWRsZSAqLwogCQkJdTY0IGlkbGVfZHVyYXRpb25fdXM7CiAKQEAgLTU1Myw3ICs1NTMsNiBAQAogc3RhdGljIGludCBfX2luaXQgaTczMDBfaWRsZV9pbml0KHZvaWQpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmk3MzAwX2lkbGVfbG9jayk7Ci0JY3B1c19jbGVhcihpZGxlX2NwdW1hc2spOwogCXRvdGFsX3VzID0gMDsKIAogCWlmIChpNzMwMF9pZGxlX3BsYXRmb3JtX3Byb2JlKCZmYmRfZGV2LCAmaW9hdF9kZXYsIGZvcmNlbG9hZCkpCkBAIC01NjUsNiArNTY0LDkgQEAKIAlpZiAoaTczMDBfaWRsZV9pb2F0X2luaXQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmaWRsZV9jcHVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiaTczMDBfaWRsZSIsIE5VTEwpOwogCWlmIChkZWJ1Z2ZzX2RpcikgewogCQlpbnQgaSA9IDA7CkBAIC01ODksNiArNTkxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpNzMwMF9pZGxlX2V4aXQodm9pZCkKIHsKIAlpZGxlX25vdGlmaWVyX3VucmVnaXN0ZXIoJmk3MzAwX2lkbGVfbmIpOworCWZyZWVfY3B1bWFza192YXIoaWRsZV9jcHVtYXNrKTsKIAogCWlmIChkZWJ1Z2ZzX2RpcikgewogCQlpbnQgaSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcgYi9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcKaW5kZXggZjEwMmZjYy4uZTAyMDk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZwpAQCAtMSw4ICsxLDMgQEAKLW1lbnUgIklFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgfHwgQlJPS0VOCi0KLXNvdXJjZSAiZHJpdmVycy9maXJld2lyZS9LY29uZmlnIgotCiBjb25maWcgSUVFRTEzOTQKIAl0cmlzdGF0ZSAiTGVnYWN5IGFsdGVybmF0aXZlIEZpcmVXaXJlIGRyaXZlciBzdGFjayIKIAlkZXBlbmRzIG9uIFBDSSB8fCBCUk9LRU4KQEAgLTE2LDggKzExLDEzIEBACiAJICBpcyB0aGUgY29yZSBzdXBwb3J0IG9ubHksIHlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgYSBkcml2ZXIgZm9yCiAJICB5b3VyIElFRUUgMTM5NCBhZGFwdGVyLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZWVlMTM5NC4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGllZWUxMzk0LgorCisJICBOT1RFOgorCSAgaWVlZTEzOTQgaXMgc3VwZXJzZWRlZCBieSB0aGUgbmV3ZXIgZmlyZXdpcmUtY29yZSBkcml2ZXIuICBTZWUKKwkgIGh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0p1anVfTWlncmF0aW9uIGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIHRvIHRoZSBuZXcgRmlyZVdpcmUgZHJpdmVycy4KIAogY29uZmlnIElFRUUxMzk0X09IQ0kxMzk0CiAJdHJpc3RhdGUgIk9IQ0ktMTM5NCBjb250cm9sbGVycyIKQEAgLTI5LDE5ICsyOSwyMyBAQAogCSAgdXNlIG9uZSBvZiB0aGVzZSBjaGlwc2V0cy4gIEl0IHNob3VsZCB3b3JrIHdpdGggYW55IE9IQ0ktMTM5NAogCSAgY29tcGxpYW50IGNhcmQsIGhvd2V2ZXIuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9oY2kxMzk0LgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgb2hjaTEzOTQuCiAKIAkgIE5PVEU6CisJICBvaGNpMTM5NCBpcyBzdXBlcnNlZGVkIGJ5IHRoZSBuZXdlciBmaXJld2lyZS1vaGNpIGRyaXZlci4gIFNlZQorCSAgaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSnVqdV9NaWdyYXRpb24gZm9yCisJICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggdG8gdGhlIG5ldyBGaXJlV2lyZSBkcml2ZXJzLgorCiAJICBJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGZpcmV3aXJlLW9oY2kgYW5kIG9oY2kxMzk0IHRvZ2V0aGVyLCB5b3UKIAkgIHNob3VsZCBjb25maWd1cmUgdGhlbSBvbmx5IGFzIG1vZHVsZXMgYW5kIGJsYWNrbGlzdCB0aGUgZHJpdmVyKHMpCiAJICB3aGljaCB5b3UgZG9uJ3Qgd2FudCB0byBoYXZlIGF1dG8tbG9hZGVkLiAgQWRkIGVpdGhlcgogCi0JICAgICAgYmxhY2tsaXN0IGZpcmV3aXJlLW9oY2kKLQkgIG9yCiAJICAgICAgYmxhY2tsaXN0IG9oY2kxMzk0CiAJICAgICAgYmxhY2tsaXN0IHZpZGVvMTM5NAogCSAgICAgIGJsYWNrbGlzdCBkdjEzOTQKKwkgIG9yCisJICAgICAgYmxhY2tsaXN0IGZpcmV3aXJlLW9oY2kKIAogCSAgdG8gL2V0Yy9tb2Rwcm9iZS5jb25mIG9yIC9ldGMvbW9kcHJvYmUuZC8qIGFuZCB1cGRhdGUgbW9kcHJvYmUuY29uZgogCSAgZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uLgpAQCAtNTgsOCArNjIsOCBAQAogCSAgSW5zdHJ1bWVudHMgUENJTHlueCBjaGlwLiAgTm90ZTogdGhpcyBkcml2ZXIgaXMgd3JpdHRlbiBmb3IgcmV2aXNpb24KIAkgIDIgb2YgdGhpcyBjaGlwIGFuZCBtYXkgbm90IHdvcmsgd2l0aCByZXZpc2lvbiAwLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwY2lseW54LgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgcGNpbHlueC4KIAogCSAgT25seSBzb21lIG9sZCBhbmQgbm93IHZlcnkgcmFyZSBQQ0kgYW5kIENhcmRCdXMgY2FyZHMgYW5kCiAJICBQb3dlck1hY3MgRzMgQiZXIGNvbnRhaW4gdGhlIFBDSUx5bnggY29udHJvbGxlci4gIFRoZXJlZm9yZQpAQCAtNzksNiArODMsMTQgQEAKIAkgIFlvdSBzaG91bGQgYWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgZGlza3MsIENELVJPTXMsIGV0Yy4gaW4gdGhlIFNDU0kKIAkgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgc2JwMi4KKworCSAgTk9URToKKwkgIHNicDIgaXMgc3VwZXJzZWRlZCBieSB0aGUgbmV3ZXIgZmlyZXdpcmUtc2JwMiBkcml2ZXIuIFNlZQorCSAgaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSnVqdV9NaWdyYXRpb24gZm9yCisJICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggdG8gdGhlIG5ldyBGaXJlV2lyZSBkcml2ZXJzLgorCiBjb25maWcgSUVFRTEzOTRfU0JQMl9QSFlTX0RNQQogCWJvb2wgIkVuYWJsZSByZXBsYWNlbWVudCBmb3IgcGh5c2ljYWwgRE1BIGluIFNCUDIiCiAJZGVwZW5kcyBvbiBJRUVFMTM5NF9TQlAyICYmIFZJUlRfVE9fQlVTICYmIEVYUEVSSU1FTlRBTApAQCAtMTExLDYgKzEyMywxMSBAQAogCiAJICBUaGUgbW9kdWxlIGlzIGNhbGxlZCBldGgxMzk0IGFsdGhvdWdoIGl0IGRvZXMgbm90IGVtdWxhdGUgRXRoZXJuZXQuCiAKKwkgIE5PVEU6CisJICBldGgxMzk0IGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGZpcmV3aXJlLW5ldCBkcml2ZXIuIFNlZQorCSAgaHR0cDovL2llZWUxMzk0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvSnVqdV9NaWdyYXRpb24gZm9yCisJICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggdG8gdGhlIG5ldyBGaXJlV2lyZSBkcml2ZXJzLgorCiBjb25maWcgSUVFRTEzOTRfUkFXSU8KIAl0cmlzdGF0ZSAicmF3MTM5NCB1c2Vyc3BhY2UgaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gSUVFRTEzOTQKQEAgLTEyMyw2ICsxNDAsMTEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIHJhdzEzOTQuCiAKKwkgIE5PVEU6CisJICByYXcxMzk0IGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGZpcmV3aXJlLWNvcmUgZHJpdmVyLiBTZWUKKwkgIGh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0p1anVfTWlncmF0aW9uIGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIHRvIHRoZSBuZXcgRmlyZVdpcmUgZHJpdmVycy4KKwogY29uZmlnIElFRUUxMzk0X1ZJREVPMTM5NAogCXRyaXN0YXRlICJ2aWRlbzEzOTQgdXNlcnNwYWNlIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIElFRUUxMzk0ICYmIElFRUUxMzk0X09IQ0kxMzk0CkBAIC0xMzYsMTMgKzE1OCwxOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgdmlkZW8xMzk0LgogCisJICBOT1RFOgorCSAgdmlkZW8xMzk0IGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGZpcmV3aXJlLWNvcmUgZHJpdmVyLiBTZWUKKwkgIGh0dHA6Ly9pZWVlMTM5NC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0p1anVfTWlncmF0aW9uIGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3dpdGNoIHRvIHRoZSBuZXcgRmlyZVdpcmUgZHJpdmVycy4KKwogY29uZmlnIElFRUUxMzk0X0RWMTM5NAogCXRyaXN0YXRlICJkdjEzOTQgdXNlcnNwYWNlIGludGVyZmFjZSAoZGVwcmVjYXRlZCkiCiAJZGVwZW5kcyBvbiBJRUVFMTM5NCAmJiBJRUVFMTM5NF9PSENJMTM5NAogCWhlbHAKIAkgIFRoZSBkdjEzOTQgZHJpdmVyIGlzIHVuc3VwcG9ydGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBmcm9tIExpbnV4IGluIGEKLQkgIGZ1dHVyZSByZWxlYXNlLiAgSXRzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IHByb3ZpZGVkIGJ5IHJhdzEzOTQgdG9nZXRoZXIKLQkgIHdpdGggbGlicmFyaWVzIHN1Y2ggYXMgbGliaWVjNjE4ODMuCisJICBmdXR1cmUgcmVsZWFzZS4gIEl0cyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBwcm92aWRlZCBieSBlaXRoZXIKKwkgIHJhdzEzOTQgb3IgZmlyZXdpcmUtY29yZSB0b2dldGhlciB3aXRoIGxpYnJhcmllcyBzdWNoIGFzIGxpYmllYzYxODgzLgogCiBjb25maWcgSUVFRTEzOTRfVkVSQk9TRURFQlVHCiAJYm9vbCAiRXhjZXNzaXZlIGRlYnVnZ2luZyBvdXRwdXQiCkBAIC0xNTMsNSArMTgwLDMgQEAKIAkgIHdpbGwgcXVpY2tseSByZXN1bHQgaW4gbGFyZ2UgYW1vdW50cyBvZiBkYXRhIHNlbnQgdG8gdGhlIHN5c3RlbSBsb2cuCiAKIAkgIFNheSBZIGlmIHlvdSByZWFsbHkgbmVlZCB0aGUgZGVidWdnaW5nIG91dHB1dC4gIEV2ZXJ5b25lIGVsc2Ugc2F5cyBOLgotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCmluZGV4IGZiZGQ3MzEuLmNjOWI1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCkBAIC0yMDgzLDcgKzIwODMsNyBAQAogc3RhdGljIGludCBjbWFfY2hlY2tfbGlua2xvY2FsKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwKIAkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVB2NikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKIAogCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCmluZGV4IGJmZDAzYmYuLmYzZDQ0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAjaW5jbHVkZSAidDNfY3BsLmgiCiAjaW5jbHVkZSAidDNjZGV2LmgiCkBAIC03NSwxMyArNzYsMTMgQEAKIH07CiAKIHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSB7Ci0Jc3RydWN0IGtmaWZvICp0cHRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gdHB0X2ZpZm87CiAJc3BpbmxvY2tfdCB0cHRfZmlmb19sb2NrOwotCXN0cnVjdCBrZmlmbyAqcXBpZF9maWZvOworCXN0cnVjdCBrZmlmbyBxcGlkX2ZpZm87CiAJc3BpbmxvY2tfdCBxcGlkX2ZpZm9fbG9jazsKLQlzdHJ1Y3Qga2ZpZm8gKmNxaWRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gY3FpZF9maWZvOwogCXNwaW5sb2NrX3QgY3FpZF9maWZvX2xvY2s7Ci0Jc3RydWN0IGtmaWZvICpwZGlkX2ZpZm87CisJc3RydWN0IGtmaWZvIHBkaWRfZmlmbzsKIAlzcGlubG9ja190IHBkaWRfZmlmb19sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3Jlc291cmNlLmMKaW5kZXggYmQyMzNjMC4uMzFmOTIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19yZXNvdXJjZS5jCkBAIC0zOSwxMiArMzksMTIgQEAKICNpbmNsdWRlICJjeGlvX3Jlc291cmNlLmgiCiAjaW5jbHVkZSAiY3hpb19oYWwuaCIKIAotc3RhdGljIHN0cnVjdCBrZmlmbyAqcmhkbF9maWZvOworc3RhdGljIHN0cnVjdCBrZmlmbyByaGRsX2ZpZm87CiBzdGF0aWMgc3BpbmxvY2tfdCByaGRsX2ZpZm9fbG9jazsKIAogI2RlZmluZSBSQU5ET01fU0laRSAxNgogCi1zdGF0aWMgaW50IF9fY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICoqZmlmbywKK3N0YXRpYyBpbnQgX19jeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCiAJCQkJICAgc3BpbmxvY2tfdCAqZmlmb19sb2NrLAogCQkJCSAgIHUzMiBuciwgdTMyIHNraXBfbG93LAogCQkJCSAgIHUzMiBza2lwX2hpZ2gsCkBAIC01NSwxMiArNTUsMTEgQEAKIAl1MzIgcmFycmF5WzE2XTsKIAlzcGluX2xvY2tfaW5pdChmaWZvX2xvY2spOwogCi0JKmZpZm8gPSBrZmlmb19hbGxvYyhuciAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMLCBmaWZvX2xvY2spOwotCWlmIChJU19FUlIoKmZpZm8pKQorCWlmIChrZmlmb19hbGxvYyhmaWZvLCBuciAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2tpcF9sb3cgKyBza2lwX2hpZ2g7IGkrKykKLQkJX19rZmlmb19wdXQoKmZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMikpOworCQlrZmlmb19pbihmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKTsKIAlpZiAocmFuZG9tKSB7CiAJCWogPSAwOwogCQlyYW5kb21fYnl0ZXMgPSByYW5kb20zMigpOwpAQCAtNzIsMzMgKzcxLDM1IEBACiAJCQkJcmFuZG9tX2J5dGVzID0gcmFuZG9tMzIoKTsKIAkJCX0KIAkJCWlkeCA9IChyYW5kb21fYnl0ZXMgPj4gKGogKiAyKSkgJiAweEY7Ci0JCQlfX2tmaWZvX3B1dCgqZmlmbywKKwkJCWtmaWZvX2luKGZpZm8sCiAJCQkJKHVuc2lnbmVkIGNoYXIgKikgJnJhcnJheVtpZHhdLAogCQkJCXNpemVvZih1MzIpKTsKIAkJCXJhcnJheVtpZHhdID0gaTsKIAkJCWorKzsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NJWkU7IGkrKykKLQkJCV9fa2ZpZm9fcHV0KCpmaWZvLAorCQkJa2ZpZm9faW4oZmlmbywKIAkJCQkodW5zaWduZWQgY2hhciAqKSAmcmFycmF5W2ldLAogCQkJCXNpemVvZih1MzIpKTsKIAl9IGVsc2UKIAkJZm9yIChpID0gc2tpcF9sb3c7IGkgPCBuciAtIHNraXBfaGlnaDsgaSsrKQotCQkJX19rZmlmb19wdXQoKmZpZm8sICh1bnNpZ25lZCBjaGFyICopICZpLCBzaXplb2YodTMyKSk7CisJCQlrZmlmb19pbihmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmaSwgc2l6ZW9mKHUzMikpOwogCiAJZm9yIChpID0gMDsgaSA8IHNraXBfbG93ICsgc2tpcF9oaWdoOyBpKyspCi0JCWtmaWZvX2dldCgqZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmVudHJ5LCBzaXplb2YodTMyKSk7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwKKwkJCQlzaXplb2YodTMyKSwgZmlmb19sb2NrKSAhPSBzaXplb2YodTMyKSkKKwkJCQkJYnJlYWs7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICoqZmlmbywgc3BpbmxvY2tfdCAqIGZpZm9fbG9jaywKK3N0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm8oc3RydWN0IGtmaWZvICpmaWZvLCBzcGlubG9ja190ICogZmlmb19sb2NrLAogCQkJCSAgIHUzMiBuciwgdTMyIHNraXBfbG93LCB1MzIgc2tpcF9oaWdoKQogewogCXJldHVybiAoX19jeGlvX2luaXRfcmVzb3VyY2VfZmlmbyhmaWZvLCBmaWZvX2xvY2ssIG5yLCBza2lwX2xvdywKIAkJCQkJICBza2lwX2hpZ2gsIDApKTsKIH0KIAotc3RhdGljIGludCBjeGlvX2luaXRfcmVzb3VyY2VfZmlmb19yYW5kb20oc3RydWN0IGtmaWZvICoqZmlmbywKK3N0YXRpYyBpbnQgY3hpb19pbml0X3Jlc291cmNlX2ZpZm9fcmFuZG9tKHN0cnVjdCBrZmlmbyAqZmlmbywKIAkJCQkgICBzcGlubG9ja190ICogZmlmb19sb2NrLAogCQkJCSAgIHUzMiBuciwgdTMyIHNraXBfbG93LCB1MzIgc2tpcF9oaWdoKQogewpAQCAtMTEzLDE1ICsxMTQsMTMgQEAKIAogCXNwaW5fbG9ja19pbml0KCZyZGV2X3AtPnJzY3AtPnFwaWRfZmlmb19sb2NrKTsKIAotCXJkZXZfcC0+cnNjcC0+cXBpZF9maWZvID0ga2ZpZm9fYWxsb2MoVDNfTUFYX05VTV9RUCAqIHNpemVvZih1MzIpLAotCQkJCQkgICAgICBHRlBfS0VSTkVMLAotCQkJCQkgICAgICAmcmRldl9wLT5yc2NwLT5xcGlkX2ZpZm9fbG9jayk7Ci0JaWYgKElTX0VSUihyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbykpCisJaWYgKGtmaWZvX2FsbG9jKCZyZGV2X3AtPnJzY3AtPnFwaWRfZmlmbywgVDNfTUFYX05VTV9RUCAqIHNpemVvZih1MzIpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGkgPSAxNjsgaSA8IFQzX01BWF9OVU1fUVA7IGkrKykKIAkJaWYgKCEoaSAmIHJkZXZfcC0+cXBtYXNrKSkKLQkJCV9fa2ZpZm9fcHV0KHJkZXZfcC0+cnNjcC0+cXBpZF9maWZvLAorCQkJa2ZpZm9faW4oJnJkZXZfcC0+cnNjcC0+cXBpZF9maWZvLAogCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSAmaSwgc2l6ZW9mKHUzMikpOwogCXJldHVybiAwOwogfQpAQCAtMTM0LDcgKzEzMyw3IEBACiAKIHZvaWQgY3hpb19oYWxfZGVzdHJveV9yaGRsX3Jlc291cmNlKHZvaWQpCiB7Ci0Ja2ZpZm9fZnJlZShyaGRsX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJoZGxfZmlmbyk7CiB9CiAKIC8qIG5yXyogbXVzdCBiZSBwb3dlciBvZiAyICovCkBAIC0xNjcsMTEgKzE2NiwxMSBAQAogCQlnb3RvIHBkaWRfZXJyOwogCXJldHVybiAwOwogcGRpZF9lcnI6Ci0Ja2ZpZm9fZnJlZShyc2NwLT5jcWlkX2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPmNxaWRfZmlmbyk7CiBjcWlkX2VycjoKLQlrZmlmb19mcmVlKHJzY3AtPnFwaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+cXBpZF9maWZvKTsKIHFwaWRfZXJyOgotCWtmaWZvX2ZyZWUocnNjcC0+dHB0X2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPnRwdF9maWZvKTsKIHRwdF9lcnI6CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0xNzksMzMgKzE3OCwzNyBAQAogLyoKICAqIHJldHVybnMgMCBpZiBubyByZXNvdXJjZSBhdmFpbGFibGUKICAqLwotc3RhdGljIHUzMiBjeGlvX2hhbF9nZXRfcmVzb3VyY2Uoc3RydWN0IGtmaWZvICpmaWZvKQorc3RhdGljIHUzMiBjeGlvX2hhbF9nZXRfcmVzb3VyY2Uoc3RydWN0IGtmaWZvICpmaWZvLCBzcGlubG9ja190ICogbG9jaykKIHsKIAl1MzIgZW50cnk7Ci0JaWYgKGtmaWZvX2dldChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKSkKKwlpZiAoa2ZpZm9fb3V0X2xvY2tlZChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpLCBsb2NrKSkKIAkJcmV0dXJuIGVudHJ5OwogCWVsc2UKIAkJcmV0dXJuIDA7CS8qIGZpZm8gZW1wdHJ5ICovCiB9CiAKLXN0YXRpYyB2b2lkIGN4aW9faGFsX3B1dF9yZXNvdXJjZShzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHUzMiBlbnRyeSkKK3N0YXRpYyB2b2lkIGN4aW9faGFsX3B1dF9yZXNvdXJjZShzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHNwaW5sb2NrX3QgKiBsb2NrLAorCQl1MzIgZW50cnkpCiB7Ci0JQlVHX09OKGtmaWZvX3B1dChmaWZvLCAodW5zaWduZWQgY2hhciAqKSAmZW50cnksIHNpemVvZih1MzIpKSA9PSAwKTsKKwlCVUdfT04oCisJa2ZpZm9faW5fbG9ja2VkKGZpZm8sICh1bnNpZ25lZCBjaGFyICopICZlbnRyeSwgc2l6ZW9mKHUzMiksIGxvY2spCisJPT0gMCk7CiB9CiAKIHUzMiBjeGlvX2hhbF9nZXRfc3RhZyhzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0JcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZShyc2NwLT50cHRfZmlmbyk7CisJcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZSgmcnNjcC0+dHB0X2ZpZm8sICZyc2NwLT50cHRfZmlmb19sb2NrKTsKIH0KIAogdm9pZCBjeGlvX2hhbF9wdXRfc3RhZyhzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3AsIHUzMiBzdGFnKQogewotCWN4aW9faGFsX3B1dF9yZXNvdXJjZShyc2NwLT50cHRfZmlmbywgc3RhZyk7CisJY3hpb19oYWxfcHV0X3Jlc291cmNlKCZyc2NwLT50cHRfZmlmbywgJnJzY3AtPnRwdF9maWZvX2xvY2ssIHN0YWcpOwogfQogCiB1MzIgY3hpb19oYWxfZ2V0X3FwaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCXUzMiBxcGlkID0gY3hpb19oYWxfZ2V0X3Jlc291cmNlKHJzY3AtPnFwaWRfZmlmbyk7CisJdTMyIHFwaWQgPSBjeGlvX2hhbF9nZXRfcmVzb3VyY2UoJnJzY3AtPnFwaWRfZmlmbywKKwkJCSZyc2NwLT5xcGlkX2ZpZm9fbG9jayk7CiAJUERCRygiJXMgcXBpZCAweCV4XG4iLCBfX2Z1bmNfXywgcXBpZCk7CiAJcmV0dXJuIHFwaWQ7CiB9CkBAIC0yMTMsMzUgKzIxNiwzNSBAQAogdm9pZCBjeGlvX2hhbF9wdXRfcXBpZChzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3AsIHUzMiBxcGlkKQogewogCVBEQkcoIiVzIHFwaWQgMHgleFxuIiwgX19mdW5jX18sIHFwaWQpOwotCWN4aW9faGFsX3B1dF9yZXNvdXJjZShyc2NwLT5xcGlkX2ZpZm8sIHFwaWQpOworCWN4aW9faGFsX3B1dF9yZXNvdXJjZSgmcnNjcC0+cXBpZF9maWZvLCAmcnNjcC0+cXBpZF9maWZvX2xvY2ssIHFwaWQpOwogfQogCiB1MzIgY3hpb19oYWxfZ2V0X2NxaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwKQogewotCXJldHVybiBjeGlvX2hhbF9nZXRfcmVzb3VyY2UocnNjcC0+Y3FpZF9maWZvKTsKKwlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKCZyc2NwLT5jcWlkX2ZpZm8sICZyc2NwLT5jcWlkX2ZpZm9fbG9jayk7CiB9CiAKIHZvaWQgY3hpb19oYWxfcHV0X2NxaWQoc3RydWN0IGN4aW9faGFsX3Jlc291cmNlICpyc2NwLCB1MzIgY3FpZCkKIHsKLQljeGlvX2hhbF9wdXRfcmVzb3VyY2UocnNjcC0+Y3FpZF9maWZvLCBjcWlkKTsKKwljeGlvX2hhbF9wdXRfcmVzb3VyY2UoJnJzY3AtPmNxaWRfZmlmbywgJnJzY3AtPmNxaWRfZmlmb19sb2NrLCBjcWlkKTsKIH0KIAogdTMyIGN4aW9faGFsX2dldF9wZGlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCkKIHsKLQlyZXR1cm4gY3hpb19oYWxfZ2V0X3Jlc291cmNlKHJzY3AtPnBkaWRfZmlmbyk7CisJcmV0dXJuIGN4aW9faGFsX2dldF9yZXNvdXJjZSgmcnNjcC0+cGRpZF9maWZvLCAmcnNjcC0+cGRpZF9maWZvX2xvY2spOwogfQogCiB2b2lkIGN4aW9faGFsX3B1dF9wZGlkKHN0cnVjdCBjeGlvX2hhbF9yZXNvdXJjZSAqcnNjcCwgdTMyIHBkaWQpCiB7Ci0JY3hpb19oYWxfcHV0X3Jlc291cmNlKHJzY3AtPnBkaWRfZmlmbywgcGRpZCk7CisJY3hpb19oYWxfcHV0X3Jlc291cmNlKCZyc2NwLT5wZGlkX2ZpZm8sICZyc2NwLT5wZGlkX2ZpZm9fbG9jaywgcGRpZCk7CiB9CiAKIHZvaWQgY3hpb19oYWxfZGVzdHJveV9yZXNvdXJjZShzdHJ1Y3QgY3hpb19oYWxfcmVzb3VyY2UgKnJzY3ApCiB7Ci0Ja2ZpZm9fZnJlZShyc2NwLT50cHRfZmlmbyk7Ci0Ja2ZpZm9fZnJlZShyc2NwLT5jcWlkX2ZpZm8pOwotCWtmaWZvX2ZyZWUocnNjcC0+cXBpZF9maWZvKTsKLQlrZmlmb19mcmVlKHJzY3AtPnBkaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+dHB0X2ZpZm8pOworCWtmaWZvX2ZyZWUoJnJzY3AtPmNxaWRfZmlmbyk7CisJa2ZpZm9fZnJlZSgmcnNjcC0+cXBpZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyc2NwLT5wZGlkX2ZpZm8pOwogCWtmcmVlKHJzY3ApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCA5ODk1NTVjLi4yYTk3Yzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTE3NTIsNyArMTc1Miw3IEBACiAJaW5kID0gcXAtPnJxLmhlYWQgJiAocXAtPnJxLndxZV9jbnQgLSAxKTsKIAogCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKLQkJaWYgKG1seDRfd3Ffb3ZlcmZsb3coJnFwLT5ycSwgbnJlcSwgcXAtPmlicXAuc2VuZF9jcSkpIHsKKwkJaWYgKG1seDRfd3Ffb3ZlcmZsb3coJnFwLT5ycSwgbnJlcSwgcXAtPmlicXAucmVjdl9jcSkpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQkqYmFkX3dyID0gd3I7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3NycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3JxLmMKaW5kZXggZDQyNTY1Mi4uY2Y4MDg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3JxLmMKQEAgLTc0LDYgKzc0LDcgQEAKIAlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtPmRldmljZSk7CiAJc3RydWN0IG1seDRfaWJfc3JxICpzcnE7CiAJc3RydWN0IG1seDRfd3FlX3NycV9uZXh0X3NlZyAqbmV4dDsKKwlzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgKnNjYXR0ZXI7CiAJaW50IGRlc2Nfc2l6ZTsKIAlpbnQgYnVmX3NpemU7CiAJaW50IGVycjsKQEAgLTE0OSw2ICsxNTAsMTEgQEAKIAkJCW5leHQgPSBnZXRfd3FlKHNycSwgaSk7CiAJCQluZXh0LT5uZXh0X3dxZV9pbmRleCA9CiAJCQkJY3B1X3RvX2JlMTYoKGkgKyAxKSAmIChzcnEtPm1zcnEubWF4IC0gMSkpOworCisJCQlmb3IgKHNjYXR0ZXIgPSAodm9pZCAqKSAobmV4dCArIDEpOworCQkJICAgICAodm9pZCAqKSBzY2F0dGVyIDwgKHZvaWQgKikgbmV4dCArIGRlc2Nfc2l6ZTsKKwkJCSAgICAgKytzY2F0dGVyKQorCQkJCXNjYXR0ZXItPmxrZXkgPSBjcHVfdG9fYmUzMihNTFg0X0lOVkFMSURfTEtFWSk7CiAJCX0KIAogCQllcnIgPSBtbHg0X210dF9pbml0KGRldi0+ZGV2LCBzcnEtPmJ1Zi5ucGFnZXMsIHNycS0+YnVmLnBhZ2Vfc2hpZnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYyBiL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCmluZGV4IGI0ODNiMjkuLmY5NjcwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jCkBAIC0yMjEsMTEgKzIyMSwyNyBAQAogfQogCiAvKgorICogT25seSBsZWZ0L3JpZ2h0IGRpcmVjdGlvbiBzaG91bGQgYmUgdXNlZCAodW5kZXIvb3ZlciAweDgwMDApIGZvcgorICogZm9yd2FyZC9yZXZlcnNlIG1vdG9yIGRpcmVjdGlvbiAodG8ga2VlcCBjYWxjdWxhdGlvbiBmYXN0ICYgc2ltcGxlKS4KKyAqLworc3RhdGljIHUxNiBtbF9jYWxjdWxhdGVfZGlyZWN0aW9uKHUxNiBkaXJlY3Rpb24sIHUxNiBmb3JjZSwKKwkJCQkgIHUxNiBuZXdfZGlyZWN0aW9uLCB1MTYgbmV3X2ZvcmNlKQoreworCWlmICghZm9yY2UpCisJCXJldHVybiBuZXdfZGlyZWN0aW9uOworCWlmICghbmV3X2ZvcmNlKQorCQlyZXR1cm4gZGlyZWN0aW9uOworCXJldHVybiAoKCh1MzIpKGRpcmVjdGlvbiA+PiAxKSAqIGZvcmNlICsKKwkJIChuZXdfZGlyZWN0aW9uID4+IDEpICogbmV3X2ZvcmNlKSAvCisJCShmb3JjZSArIG5ld19mb3JjZSkpIDw8IDE7Cit9CisKKy8qCiAgKiBDb21iaW5lIHR3byBlZmZlY3RzIGFuZCBhcHBseSBnYWluLgogICovCiBzdGF0aWMgdm9pZCBtbF9jb21iaW5lX2VmZmVjdHMoc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LAogCQkJICAgICAgIHN0cnVjdCBtbF9lZmZlY3Rfc3RhdGUgKnN0YXRlLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBnYWluKQorCQkJICAgICAgIGludCBnYWluKQogewogCXN0cnVjdCBmZl9lZmZlY3QgKm5ldyA9IHN0YXRlLT5lZmZlY3Q7CiAJdW5zaWduZWQgaW50IHN0cm9uZywgd2VhaywgaTsKQEAgLTI1Miw4ICsyNjgsMjEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZGX1JVTUJMRToKLQkJc3Ryb25nID0gbmV3LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlICogZ2FpbiAvIDB4ZmZmZjsKLQkJd2VhayA9IG5ldy0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGUgKiBnYWluIC8gMHhmZmZmOworCQlzdHJvbmcgPSAodTMyKW5ldy0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZSAqIGdhaW4gLyAweGZmZmY7CisJCXdlYWsgPSAodTMyKW5ldy0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGUgKiBnYWluIC8gMHhmZmZmOworCisJCWlmIChlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGUgKyBzdHJvbmcpCisJCQllZmZlY3QtPmRpcmVjdGlvbiA9IG1sX2NhbGN1bGF0ZV9kaXJlY3Rpb24oCisJCQkJZWZmZWN0LT5kaXJlY3Rpb24sCisJCQkJZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLAorCQkJCW5ldy0+ZGlyZWN0aW9uLCBzdHJvbmcpOworCQllbHNlIGlmIChlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlICsgd2VhaykKKwkJCWVmZmVjdC0+ZGlyZWN0aW9uID0gbWxfY2FsY3VsYXRlX2RpcmVjdGlvbigKKwkJCQllZmZlY3QtPmRpcmVjdGlvbiwKKwkJCQllZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlLAorCQkJCW5ldy0+ZGlyZWN0aW9uLCB3ZWFrKTsKKwkJZWxzZQorCQkJZWZmZWN0LT5kaXJlY3Rpb24gPSAwOwogCQllZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGUgPQogCQkJbWluKHN0cm9uZyArIGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZSwKIAkJCSAgICAweGZmZmZVKTsKQEAgLTI2OCw2ICsyOTcsMTMgQEAKIAkJLyogaGVyZSB3ZSBhbHNvIHNjYWxlIGl0IDB4N2ZmZiA9PiAweGZmZmYgKi8KIAkJaSA9IGkgKiBnYWluIC8gMHg3ZmZmOwogCisJCWlmIChlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGUgKyBpKQorCQkJZWZmZWN0LT5kaXJlY3Rpb24gPSBtbF9jYWxjdWxhdGVfZGlyZWN0aW9uKAorCQkJCWVmZmVjdC0+ZGlyZWN0aW9uLAorCQkJCWVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZSwKKwkJCQluZXctPmRpcmVjdGlvbiwgaSk7CisJCWVsc2UKKwkJCWVmZmVjdC0+ZGlyZWN0aW9uID0gMDsKIAkJZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlID0KIAkJCW1pbihpICsgZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLCAweGZmZmZVKTsKIAkJZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZSA9CkBAIC00MTEsOCArNDQ3LDYgQEAKIAkJCQkgbXNlY3NfdG9famlmZmllcyhzdGF0ZS0+ZWZmZWN0LT5yZXBsYXkubGVuZ3RoKTsKIAkJc3RhdGUtPmFkal9hdCA9IHN0YXRlLT5wbGF5X2F0OwogCi0JCW1sX3NjaGVkdWxlX3RpbWVyKG1sKTsKLQogCX0gZWxzZSB7CiAJCWRlYnVnKCJpbml0aWF0ZWQgc3RvcCIpOwogCkBAIC00MjAsMTAgKzQ1NCwxMCBAQAogCQkJX19zZXRfYml0KEZGX0VGRkVDVF9BQk9SVElORywgJnN0YXRlLT5mbGFncyk7CiAJCWVsc2UKIAkJCV9fY2xlYXJfYml0KEZGX0VGRkVDVF9TVEFSVEVELCAmc3RhdGUtPmZsYWdzKTsKLQotCQltbF9wbGF5X2VmZmVjdHMobWwpOwogCX0KIAorCW1sX3BsYXlfZWZmZWN0cyhtbCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKaW5kZXggZjZjNjg4Yy4uYjFlZGQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaWZvcmNlX3JlbGVhc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQorc3RhdGljIHZvaWQgaWZvcmNlX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWZvcmNlICppZm9yY2UgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwpAQCAtMjI4LDMwICsyMjgsMTcgQEAKIAogCQkvKiBEaXNhYmxlIGZvcmNlIGZlZWRiYWNrIHBsYXliYWNrICovCiAJCWlmb3JjZV9zZW5kX3BhY2tldChpZm9yY2UsIEZGX0NNRF9FTkFCTEUsICJcMDAxIik7CisJCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpZm9yY2UtPndhaXQsCisJCQkhdGVzdF9iaXQoSUZPUkNFX1hNSVRfUlVOTklORywgaWZvcmNlLT54bWl0X2ZsYWdzKSk7CiAJfQogCiAJc3dpdGNoIChpZm9yY2UtPmJ1cykgewogI2lmZGVmIENPTkZJR19KT1lTVElDS19JRk9SQ0VfVVNCCi0JCWNhc2UgSUZPUkNFX1VTQjoKLQkJCXVzYl9raWxsX3VyYihpZm9yY2UtPmlycSk7Ci0KLQkJCS8qIFRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCBiZWZvcmUgdGhlIGZpbGUKLQkJCSAqIHdhcyByZWxlYXNlZCAqLwotCQkJaWYgKGlmb3JjZS0+dXNiZGV2ID09IE5VTEwpIHsKLQkJCQlpZm9yY2VfZGVsZXRlX2RldmljZShpZm9yY2UpOwotCQkJCWtmcmVlKGlmb3JjZSk7Ci0JCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0JfQotfQotCi12b2lkIGlmb3JjZV9kZWxldGVfZGV2aWNlKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSkKLXsKLQlzd2l0Y2ggKGlmb3JjZS0+YnVzKSB7Ci0jaWZkZWYgQ09ORklHX0pPWVNUSUNLX0lGT1JDRV9VU0IKIAljYXNlIElGT1JDRV9VU0I6Ci0JCWlmb3JjZV91c2JfZGVsZXRlKGlmb3JjZSk7CisJCXVzYl9raWxsX3VyYihpZm9yY2UtPmlycSk7CisJCXVzYl9raWxsX3VyYihpZm9yY2UtPm91dCk7CisJCXVzYl9raWxsX3VyYihpZm9yY2UtPmN0cmwpOwogCQlicmVhazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19KT1lTVElDS19JRk9SQ0VfMjMyCkBAIC0zMDMsNyArMjkwLDcgQEAKIAogCWlucHV0X2Rldi0+bmFtZSA9ICJVbmtub3duIEktRm9yY2UgZGV2aWNlIjsKIAlpbnB1dF9kZXYtPm9wZW4gPSBpZm9yY2Vfb3BlbjsKLQlpbnB1dF9kZXYtPmNsb3NlID0gaWZvcmNlX3JlbGVhc2U7CisJaW5wdXRfZGV2LT5jbG9zZSA9IGlmb3JjZV9jbG9zZTsKIAogLyoKICAqIE9uLWRldmljZSBtZW1vcnkgYWxsb2NhdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYwppbmRleCA5ZjI4OWQ4Li5iNDEzMDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCkBAIC0xMDksNiArMTA5LDcgQEAKIAlzdHJ1Y3QgaWZvcmNlICppZm9yY2UgPSB1cmItPmNvbnRleHQ7CiAKIAlpZiAodXJiLT5zdGF0dXMpIHsKKwkJY2xlYXJfYml0KElGT1JDRV9YTUlUX1JVTk5JTkcsIGlmb3JjZS0+eG1pdF9mbGFncyk7CiAJCWRiZygidXJiLT5zdGF0dXMgJWQsIGV4aXRpbmciLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9CkBAIC0xODYsMzMgKzE4NywxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIENhbGxlZCBieSBpZm9yY2VfZGVsZXRlKCkgKi8KLXZvaWQgaWZvcmNlX3VzYl9kZWxldGUoc3RydWN0IGlmb3JjZSogaWZvcmNlKQorc3RhdGljIHZvaWQgaWZvcmNlX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXVzYl9raWxsX3VyYihpZm9yY2UtPmlycSk7Ci0JdXNiX2tpbGxfdXJiKGlmb3JjZS0+b3V0KTsKLQl1c2Jfa2lsbF91cmIoaWZvcmNlLT5jdHJsKTsKKwlzdHJ1Y3QgaWZvcmNlICppZm9yY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlmb3JjZS0+ZGV2KTsKIAogCXVzYl9mcmVlX3VyYihpZm9yY2UtPmlycSk7CiAJdXNiX2ZyZWVfdXJiKGlmb3JjZS0+b3V0KTsKIAl1c2JfZnJlZV91cmIoaWZvcmNlLT5jdHJsKTsKLX0KIAotc3RhdGljIHZvaWQgaWZvcmNlX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCBpZm9yY2UgKmlmb3JjZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaW50IG9wZW4gPSAwOyAvKiBGSVhNRSEgaWZvcmNlLT5kZXYuaGFuZGxlLT5vcGVuOyAqLwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQlpZiAoaWZvcmNlKSB7Ci0JCWlmb3JjZS0+dXNiZGV2ID0gTlVMTDsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWZvcmNlLT5kZXYpOwotCi0JCWlmICghb3BlbikgewotCQkJaWZvcmNlX2RlbGV0ZV9kZXZpY2UoaWZvcmNlKTsKLQkJCWtmcmVlKGlmb3JjZSk7Ci0JCX0KLQl9CisJa2ZyZWUoaWZvcmNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlmb3JjZV91c2JfaWRzIFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmggYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAppbmRleCBmMmQ5MWY0Li45ZjQ5NGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaApAQCAtMTUwLDExICsxNTAsOSBAQAogCiAvKiBpZm9yY2UtdXNiLmMgKi8KIHZvaWQgaWZvcmNlX3VzYl94bWl0KHN0cnVjdCBpZm9yY2UgKmlmb3JjZSk7Ci12b2lkIGlmb3JjZV91c2JfZGVsZXRlKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSk7CiAKIC8qIGlmb3JjZS1tYWluLmMgKi8KIGludCBpZm9yY2VfaW5pdF9kZXZpY2Uoc3RydWN0IGlmb3JjZSAqaWZvcmNlKTsKLXZvaWQgaWZvcmNlX2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGlmb3JjZSAqaWZvcmNlKTsKIAogLyogaWZvcmNlLXBhY2tldHMuYyAqLwogaW50IGlmb3JjZV9jb250cm9sX3BsYXliYWNrKHN0cnVjdCBpZm9yY2UqLCB1MTYgaWQsIHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggYTM1NzM1Ny4uMWY1ZTJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMTM0LDcgKzEzNCw4IEBACiAjZGVmaW5lIEFUS0JEX0NNRF9HRVRJRAkJMHgwMmYyCiAjZGVmaW5lIEFUS0JEX0NNRF9TRVRSRVAJMHgxMGYzCiAjZGVmaW5lIEFUS0JEX0NNRF9FTkFCTEUJMHgwMGY0Ci0jZGVmaW5lIEFUS0JEX0NNRF9SRVNFVF9ESVMJMHgwMGY1CisjZGVmaW5lIEFUS0JEX0NNRF9SRVNFVF9ESVMJMHgwMGY1CS8qIFJlc2V0IHRvIGRlZmF1bHRzIGFuZCBkaXNhYmxlICovCisjZGVmaW5lIEFUS0JEX0NNRF9SRVNFVF9ERUYJMHgwMGY2CS8qIFJlc2V0IHRvIGRlZmF1bHRzICovCiAjZGVmaW5lIEFUS0JEX0NNRF9TRVRBTExfTUJSCTB4MDBmYQogI2RlZmluZSBBVEtCRF9DTURfUkVTRVRfQkFUCTB4MDJmZgogI2RlZmluZSBBVEtCRF9DTURfUkVTRU5ECTB4MDBmZQpAQCAtODM2LDcgKzgzNyw3IEBACiAJc3RydWN0IGF0a2JkICphdGtiZCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIAogCWF0a2JkX2Rpc2FibGUoYXRrYmQpOwotCXBzMl9jb21tYW5kKCZhdGtiZC0+cHMyZGV2LCBOVUxMLCBBVEtCRF9DTURfUkVTRVRfQkFUKTsKKwlwczJfY29tbWFuZCgmYXRrYmQtPnBzMmRldiwgTlVMTCwgQVRLQkRfQ01EX1JFU0VUX0RFRik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXRyaXhfa2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYwppbmRleCAzNGY0YTI5Li5kM2M4YjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYwpAQCAtMjksMTEgKzI5LDEzIEBACiAJdW5zaWduZWQgc2hvcnQgKmtleWNvZGVzOwogCXVuc2lnbmVkIGludCByb3dfc2hpZnQ7CiAKKwlERUNMQVJFX0JJVE1BUChkaXNhYmxlZF9ncGlvcywgTUFUUklYX01BWF9ST1dTKTsKKwogCXVpbnQzMl90IGxhc3Rfa2V5X3N0YXRlW01BVFJJWF9NQVhfQ09MU107CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXNwaW5sb2NrX3QgbG9jazsKIAlib29sIHNjYW5fcGVuZGluZzsKIAlib29sIHN0b3BwZWQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogLyoKQEAgLTIyMiw5ICsyMjQsMTYgQEAKIAogCW1hdHJpeF9rZXlwYWRfc3RvcChrZXlwYWQtPmlucHV0X2Rldik7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCi0JCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQotCQkJZW5hYmxlX2lycV93YWtlKGdwaW9fdG9faXJxKHBkYXRhLT5yb3dfZ3Bpb3NbaV0pKTsKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcm93X2dwaW9zOyBpKyspIHsKKwkJCWlmICghdGVzdF9iaXQoaSwga2V5cGFkLT5kaXNhYmxlZF9ncGlvcykpIHsKKwkJCQl1bnNpZ25lZCBpbnQgZ3BpbyA9IHBkYXRhLT5yb3dfZ3Bpb3NbaV07CisKKwkJCQlpZiAoZW5hYmxlX2lycV93YWtlKGdwaW9fdG9faXJxKGdwaW8pKSA9PSAwKQorCQkJCQlfX3NldF9iaXQoaSwga2V5cGFkLT5kaXNhYmxlZF9ncGlvcyk7CisJCQl9CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNiw5ICsyNDUsMTUgQEAKIAljb25zdCBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CiAJaW50IGk7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCi0JCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKQotCQkJZGlzYWJsZV9pcnFfd2FrZShncGlvX3RvX2lycShwZGF0YS0+cm93X2dwaW9zW2ldKSk7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3Jvd19ncGlvczsgaSsrKSB7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksIGtleXBhZC0+ZGlzYWJsZWRfZ3Bpb3MpKSB7CisJCQkJdW5zaWduZWQgaW50IGdwaW8gPSBwZGF0YS0+cm93X2dwaW9zW2ldOworCisJCQkJZGlzYWJsZV9pcnFfd2FrZShncGlvX3RvX2lycShncGlvKSk7CisJCQl9CisJCX0KKwl9CiAKIAltYXRyaXhfa2V5cGFkX3N0YXJ0KGtleXBhZC0+aW5wdXRfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCmluZGV4IGVlYWE3YWMuLjIxZDYxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKQEAgLTI1MywxNCArMjUzLDYgQEAKIAl1OCByZWc7CiAJaW50IHJldDsKIAotI2lmZGVmIENPTkZJR19MT0NLREVQCi0JLyogV09SS0FST1VORCBmb3IgbG9ja2RlcCBmb3JjaW5nIElSUUZfRElTQUJMRUQgb24gdXMsIHdoaWNoCi0JICogd2UgZG9uJ3Qgd2FudCBhbmQgY2FuJ3QgdG9sZXJhdGUuICBBbHRob3VnaCBpdCBtaWdodCBiZQotCSAqIGZyaWVuZGxpZXIgbm90IHRvIGJvcnJvdyB0aGlzIHRocmVhZCBjb250ZXh0Li4uCi0JICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotI2VuZGlmCi0KIAkvKiBSZWFkICYgQ2xlYXIgVFdMNDAzMCBwZW5kaW5nIGludGVycnVwdCAqLwogCXJldCA9IHR3bDQwMzBfa3ByZWFkKGtwLCAmcmVnLCBLRVlQX0lTUjEsIDEpOwogCkBAIC00MDMsNyArMzk1LDggQEAKIAkgKgogCSAqIE5PVEU6ICB3ZSBhc3N1bWUgdGhpcyBob3N0IGlzIHdpcmVkIHRvIFRXTDQwNDAgSU5UMSwgbm90IElOVDIgLi4uCiAJICovCi0JZXJyb3IgPSByZXF1ZXN0X2lycShrcC0+aXJxLCBkb19rcF9pcnEsIDAsIHBkZXYtPm5hbWUsIGtwKTsKKwllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGtwLT5pcnEsIE5VTEwsIGRvX2twX2lycSwKKwkJCTAsIHBkZXYtPm5hbWUsIGtwKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2luZm8oa3AtPmRiZ19kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGlycSBubz0lZFxuIiwKIAkJCWtwLT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3R3bDQwMzAtcHdyYnV0dG9uLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwppbmRleCBiZGRlNWM4Li5lOTA2OWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdHdsNDAzMC1wd3JidXR0b24uYwpAQCAtMzksMTggKzM5LDggQEAKIAlpbnQgZXJyOwogCXU4IHZhbHVlOwogCi0jaWZkZWYgQ09ORklHX0xPQ0tERVAKLQkvKiBXT1JLQVJPVU5EIGZvciBsb2NrZGVwIGZvcmNpbmcgSVJRRl9ESVNBQkxFRCBvbiB1cywgd2hpY2gKLQkgKiB3ZSBkb24ndCB3YW50IGFuZCBjYW4ndCB0b2xlcmF0ZSBzaW5jZSB0aGlzIGlzIGEgdGhyZWFkZWQKLQkgKiBJUlEgYW5kIGNhbiBzbGVlcCBkdWUgdG8gdGhlIGkyYyByZWFkcyBpdCBoYXMgdG8gaXNzdWUuCi0JICogQWx0aG91Z2ggaXQgbWlnaHQgYmUgZnJpZW5kbGllciBub3QgdG8gYm9ycm93IHRoaXMgdGhyZWFkCi0JICogY29udGV4dC4uLgotCSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLSNlbmRpZgotCiAJZXJyID0gdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgJnZhbHVlLAotCQkJCSAgU1RTX0hXX0NPTkRJVElPTlMpOworCQkJCVNUU19IV19DT05ESVRJT05TKTsKIAlpZiAoIWVycikgIHsKIAkJaW5wdXRfcmVwb3J0X2tleShwd3IsIEtFWV9QT1dFUiwgdmFsdWUgJiBQV1JfUFdST05fSVJRKTsKIAkJaW5wdXRfc3luYyhwd3IpOwpAQCAtODAsNyArNzAsNyBAQAogCXB3ci0+cGh5cyA9ICJ0d2w0MDMwX3B3cmJ1dHRvbi9pbnB1dDAiOwogCXB3ci0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQllcnIgPSByZXF1ZXN0X2lycShpcnEsIHBvd2VyYnV0dG9uX2lycSwKKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIHBvd2VyYnV0dG9uX2lycSwKIAkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKIAkJCSJ0d2w0MDMwX3B3cmJ1dHRvbiIsIHB3cik7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAzOGRhNmFiLi5jMGFmYjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJ3aXN0cm9uLWJpb3MiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKLSNpZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE0KIAkJLnBtCT0gJndpc3Ryb25fcG1fb3BzLAogI2VuZGlmCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCAzZmVlYjNhLi5jNzE0Y2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC03MCw3ICs3MCw3IEBACiBjb25maWcgTU9VU0VfUFMyX0xJRkVCT09LCiAJYm9vbCAiRnVqaXRzdSBMaWZlYm9vayBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRU1CRURERUQKIAlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBYODYKKwlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBYODYgJiYgRE1JCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIEZ1aml0c3UgQi1zZXJpZXMgTGlmZWJvb2sgUFMvMgogCSAgVG91Y2hTY3JlZW4gY29ubmVjdGVkIHRvIHlvdXIgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwppbmRleCBiMTQ2MjM3Li45MGJlMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwpAQCAtNDI3LDcgKzQyNyw2IEBACiAKIHN0YXRpYyBpbnQgaGdwa19yZWdpc3RlcihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CiAJaW50IGVycjsKIAogCS8qIHJlZ2lzdGVyIGhhbmRsZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKaW5kZXggMmU2YmRmZS4uNmQ3YWExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwpAQCAtNDQsNyArNDQsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0Y29uc3QgbGlmZWJvb2tfZG1pX3RhYmxlW10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfRE1JKSAmJiBkZWZpbmVkKENPTkZJR19YODYpCiAJewogCQkvKiBGTE9SQS1pZSA1NW1pICovCiAJCS5tYXRjaGVzID0gewpAQCAtMTE4LDcgKzExNyw2IEBACiAJCX0sCiAJfSwKIAl7IH0KLSNlbmRpZgogfTsKIAogdm9pZCBfX2luaXQgbGlmZWJvb2tfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGZkMGJjMDkuLjQwMWFjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtMTEzNyw3ICsxMTM3LDEwIEBACiAJaWYgKHBzbW91c2UtPmNsZWFudXApCiAJCXBzbW91c2UtPmNsZWFudXAocHNtb3VzZSk7CiAKLQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworLyoKKyAqIFJlc2V0IHRoZSBtb3VzZSB0byBkZWZhdWx0cyAoYmFyZSBQUy8yIHByb3RvY29sKS4KKyAqLworCXBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX1JFU0VUX0RJUyk7CiAKIC8qCiAgKiBTb21lIGJveGVzLCBzdWNoIGFzIEhQIG54NzQwMCwgZ2V0IHRlcnJpYmx5IGNvbmZ1c2VkIGlmIG1vdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggMDIzNmYwZC4uZTBmMzAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMjg0LDEzICsyODQsNyBAQAogCiAJbXV0ZXhfbG9jaygmc2VyaW9fbXV0ZXgpOwogCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgaGFuZGxlIG9ubHkgb25lIGV2ZW50IGhlcmUgdG8gZ2l2ZSBzd3N1c3AKLQkgKiBhIGNoYW5jZSB0byBmcmVlemUga3NlcmlvZCB0aHJlYWQuIFNlcmlvIGV2ZW50cyBzaG91bGQKLQkgKiBiZSBwcmV0dHkgcmFyZSBzbyB3ZSBhcmUgbm90IGNvbmNlcm5lZCBhYm91dCB0YWtpbmcKLQkgKiBwZXJmb3JtYW5jZSBoaXQuCi0JICovCi0JaWYgKChldmVudCA9IHNlcmlvX2dldF9ldmVudCgpKSkgeworCXdoaWxlICgoZXZlbnQgPSBzZXJpb19nZXRfZXZlbnQoKSkpIHsKIAogCQlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CiAJCQljYXNlIFNFUklPX1JFR0lTVEVSX1BPUlQ6CkBAIC0zODAsMTAgKzM3NCw5IEBACiAKIHN0YXRpYyBpbnQgc2VyaW9fdGhyZWFkKHZvaWQgKm5vdGhpbmcpCiB7Ci0Jc2V0X2ZyZWV6YWJsZSgpOwogCWRvIHsKIAkJc2VyaW9faGFuZGxlX2V2ZW50KCk7Ci0JCXdhaXRfZXZlbnRfZnJlZXphYmxlKHNlcmlvX3dhaXQsCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZXJpb193YWl0LAogCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZzZXJpb19ldmVudF9saXN0KSk7CiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKaW5kZXggYTY2MjRhZC4uMWExNDIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKQEAgLTMxNTIsNyArMzE1Miw3IEBACiBoZmNtdWx0aV9wY20oc3RydWN0IGhmY19tdWx0aSAqaGMsIGludCBjaCwgaW50IHNsb3RfdHgsIGludCBiYW5rX3R4LAogICAgIGludCBzbG90X3J4LCBpbnQgYmFua19yeCkKIHsKLQlpZiAoc2xvdF9yeCA8IDAgfHwgc2xvdF9yeCA8IDAgfHwgYmFua190eCA8IDAgfHwgYmFua19yeCA8IDApIHsKKwlpZiAoc2xvdF90eCA8IDAgfHwgc2xvdF9yeCA8IDAgfHwgYmFua190eCA8IDAgfHwgYmFua19yeCA8IDApIHsKIAkJLyogZGlzYWJsZSBQQ00gKi8KIAkJbW9kZV9oZmNtdWx0aShoYywgY2gsIGhjLT5jaGFuW2NoXS5wcm90b2NvbCwgLTEsIDAsIC0xLCAwKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKaW5kZXggN2U1ZjMwZC4uZjFlOGFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCkBAIC02NjEsNyArNjYxLDcgQEAKIAlzaXplX3QgcmVjdmJ1Zl9zaXplID0gMTUwMDsKIAlpbnQgcmVjdmxlbjsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQgPSBOVUxMOwotCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKIAogCS8qIGFsbG9jYXRlIGJ1ZmZlciBtZW1vcnkgKi8KIAlyZWN2YnVmID0ga21hbGxvYyhyZWN2YnVmX3NpemUsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCBlNGY1OTlmLi44YTBlMWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMjI5LDYgKzIyOSwxMiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgcHdtIGRyaXZlbiBMRURzCiAKK2NvbmZpZyBMRURTX1JFR1VMQVRPUgorCXRyaXN0YXRlICJSRUdVTEFUT1IgZHJpdmVuIExFRCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBSRUdVTEFUT1IKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHJlZ3VsYXRvciBkcml2ZW4gTEVEcy4KKwogY29uZmlnIExFRFNfQkQyODAyCiAJdHJpc3RhdGUgIkxFRCBkcml2ZXIgZm9yIEJEMjgwMiBSR0IgTEVEIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMKQEAgLTIzNiw2ICsyNDIsMzMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQkQyODAyR1UgUkdCIExFRCBkcml2ZXIgY2hpcHMKIAkgIGFjY2Vzc2VkIHZpYSB0aGUgSTJDIGJ1cy4KIAorY29uZmlnIExFRFNfSU5URUxfU1M0MjAwCisJdHJpc3RhdGUgIkxFRCBkcml2ZXIgZm9yIEludGVsIE5BUyBTUzQyMDAgc2VyaWVzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBQQ0kgJiYgRE1JCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgSW50ZWwgU1M0MjAwIHNlcmllcyBvZgorCSAgTmV0d29yayBBdHRhY2hlZCBTdG9yYWdlIHNlcnZlcnMuICBZb3UgbWF5IGNvbnRyb2wgdGhlIGhhcmQKKwkgIGRyaXZlIG9yIHBvd2VyIExFRHMgb24gdGhlIGZyb250IHBhbmVsLiAgVXNpbmcgdGhpcyBkcml2ZXIKKwkgIGNhbiBzdG9wIHRoZSBmcm9udCBMRUQgZnJvbSBibGlua2luZyBhZnRlciBzdGFydHVwLgorCitjb25maWcgTEVEU19MVDM1OTMKKwl0cmlzdGF0ZSAiTEVEIGRyaXZlciBmb3IgTFQzNTkzIGNvbnRyb2xsZXJzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgZHJpdmVuIGJ5IGEgTGluZWFyIFRlY2hub2xvZ3kKKwkgIExUMzU5MyBjb250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgdXNlcyBhIHNwZWNpYWwgb25lLXdpcmUgcHVsc2UKKwkgIGNvZGluZyBwcm90b2NvbCB0byBzZXQgdGhlIGJyaWdodG5lc3MuCisKK2NvbmZpZyBMRURTX0FEUDU1MjAKKwl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIEFEUDU1MjAvQURQNTUwMSBQTUlDIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBQTUlDX0FEUDU1MjAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIG9uLWNoaXAgTEVEIGRyaXZlcnMgZm91bmQKKwkgIG9uIEFuYWxvZyBEZXZpY2VzIEFEUDU1MjAvQURQNTUwMSBQTUlDcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgbGVkcy1hZHA1NTIwLgorCiBjb21tZW50ICJMRUQgVHJpZ2dlcnMiCiAKIGNvbmZpZyBMRURTX1RSSUdHRVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggNDZkNzI3MC4uOWU2Mzg2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMjksNiArMjksMTAgQEAKIG9iai0kKENPTkZJR19MRURTX1dNODMxWF9TVEFUVVMpCSs9IGxlZHMtd204MzF4LXN0YXR1cy5vCiBvYmotJChDT05GSUdfTEVEU19XTTgzNTApCQkrPSBsZWRzLXdtODM1MC5vCiBvYmotJChDT05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1wd20ubworb2JqLSQoQ09ORklHX0xFRFNfUkVHVUxBVE9SKQkJKz0gbGVkcy1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX0xFRFNfSU5URUxfU1M0MjAwKQkJKz0gbGVkcy1zczQyMDAubworb2JqLSQoQ09ORklHX0xFRFNfTFQzNTkzKQkJKz0gbGVkcy1sdDM1OTMubworb2JqLSQoQ09ORklHX0xFRFNfQURQNTUyMCkJCSs9IGxlZHMtYWRwNTUyMC5vCiAKICMgTEVEIFNQSSBEcml2ZXJzCiBvYmotJChDT05GSUdfTEVEU19EQUMxMjRTMDg1KQkJKz0gbGVkcy1kYWMxMjRzMDg1Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWFkcDU1MjAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWFkcDU1MjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYzMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtYWRwNTUyMC5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogTEVEcyBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFEUDU1MjAvQURQNTUwMSBNRkQgUE1JQ3MKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTG9vc2VseSBkZXJpdmVkIGZyb20gbGVkcy1kYTkwM3g6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIsIEx0ZC4KKyAqIAlNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hZHA1NTIwLmg+CisKK3N0cnVjdCBhZHA1NTIwX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBkZXZpY2UJCSptYXN0ZXI7CisJZW51bSBsZWRfYnJpZ2h0bmVzcwluZXdfYnJpZ2h0bmVzczsKKwlpbnQJCQlpZDsKKwlpbnQJCQlmbGFnczsKK307CisKK3N0YXRpYyB2b2lkIGFkcDU1MjBfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZHA1NTIwX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZHA1NTIwX2xlZCwgd29yayk7CisJYWRwNTUyMF93cml0ZShsZWQtPm1hc3RlciwgQURQNTUyMF9MRUQxX0NVUlJFTlQgKyBsZWQtPmlkIC0gMSwKKwkJCSBsZWQtPm5ld19icmlnaHRuZXNzID4+IDIpOworfQorCitzdGF0aWMgdm9pZCBhZHA1NTIwX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBhZHA1NTIwX2xlZCAqbGVkOworCisJbGVkID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgYWRwNTUyMF9sZWQsIGNkZXYpOworCWxlZC0+bmV3X2JyaWdodG5lc3MgPSB2YWx1ZTsKKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfbGVkX3NldHVwKHN0cnVjdCBhZHA1NTIwX2xlZCAqbGVkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZC0+bWFzdGVyOworCWludCBmbGFncyA9IGxlZC0+ZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGxlZC0+aWQpIHsKKwljYXNlIEZMQUdfSURfQURQNTUyMF9MRUQxX0FEUDU1MDFfTEVEMDoKKwkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LCBBRFA1NTIwX0xFRF9USU1FLAorCQkJCQkoZmxhZ3MgPj4gQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpICYKKwkJCQkJQURQNTUyMF9GTEFHX09GRlRfTUFTSyk7CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJQURQNTUyMF9MRUQxX0VOKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFHX0lEX0FEUDU1MjBfTEVEMl9BRFA1NTAxX0xFRDE6CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgIEFEUDU1MjBfTEVEX1RJTUUsCisJCQkJCSgoZmxhZ3MgPj4gQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpICYKKwkJCQkJQURQNTUyMF9GTEFHX09GRlRfTUFTSykgPDwgMik7CisJCXJldCB8PSBhZHA1NTIwX2Nscl9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJIEFEUDU1MjBfUjNfTU9ERSk7CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJQURQNTUyMF9MRUQyX0VOKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFHX0lEX0FEUDU1MjBfTEVEM19BRFA1NTAxX0xFRDI6CisJCXJldCB8PSBhZHA1NTIwX3NldF9iaXRzKGRldiwgIEFEUDU1MjBfTEVEX1RJTUUsCisJCQkJCSgoZmxhZ3MgPj4gQURQNTUyMF9GTEFHX09GRlRfU0hJRlQpICYKKwkJCQkJQURQNTUyMF9GTEFHX09GRlRfTUFTSykgPDwgNCk7CisJCXJldCB8PSBhZHA1NTIwX2Nscl9iaXRzKGRldiwgQURQNTUyMF9MRURfQ09OVFJPTCwKKwkJCQkJQURQNTUyMF9DM19NT0RFKTsKKwkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMoZGV2LCBBRFA1NTIwX0xFRF9DT05UUk9MLAorCQkJCQlBRFA1NTIwX0xFRDNfRU4pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2xlZF9wcmVwYXJlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkcDU1MjBfbGVkc19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CisJaW50IHJldCA9IDA7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEMV9DVVJSRU5ULCAwKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEMl9DVVJSRU5ULCAwKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEM19DVVJSRU5ULCAwKTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEX1RJTUUsIHBkYXRhLT5sZWRfb25fdGltZSA8PCA2KTsKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShkZXYsIEFEUDU1MjBfTEVEX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAorCQkgcGRhdGEtPmZhZGVfb3V0KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHA1NTIwX2xlZHNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWRwNTUyMF9sZWQgKmxlZCwgKmxlZF9kYXQ7CisJc3RydWN0IGxlZF9pbmZvICpjdXJfbGVkOworCWludCByZXQsIGk7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGRhdGEtPm51bV9sZWRzID4gQURQNTUyMF8wMV9NQVhMRURTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGhhbmRsZSBtb3JlIHRoYW4gJWQgTEVEU1xuIiwKKwkJCQkgQURQNTUyMF8wMV9NQVhMRURTKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbGVkID0ga3phbGxvYyhzaXplb2YoKmxlZCkgKiBwZGF0YS0+bnVtX2xlZHMsIEdGUF9LRVJORUwpOworCWlmIChsZWQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gYWRwNTUyMF9sZWRfcHJlcGFyZShwZGV2KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9sZWRzOyArK2kpIHsKKwkJY3VyX2xlZCA9ICZwZGF0YS0+bGVkc1tpXTsKKwkJbGVkX2RhdCA9ICZsZWRbaV07CisKKwkJbGVkX2RhdC0+Y2Rldi5uYW1lID0gY3VyX2xlZC0+bmFtZTsKKwkJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBjdXJfbGVkLT5kZWZhdWx0X3RyaWdnZXI7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBhZHA1NTIwX2xlZF9zZXQ7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CisKKwkJaWYgKGN1cl9sZWQtPmZsYWdzICYgQURQNTUyMF9GTEFHX0xFRF9NQVNLKQorCQkJbGVkX2RhdC0+ZmxhZ3MgPSBjdXJfbGVkLT5mbGFnczsKKwkJZWxzZQorCQkJbGVkX2RhdC0+ZmxhZ3MgPSBpICsgMTsKKworCQlsZWRfZGF0LT5pZCA9IGxlZF9kYXQtPmZsYWdzICYgQURQNTUyMF9GTEFHX0xFRF9NQVNLOworCisJCWxlZF9kYXQtPm1hc3RlciA9IHBkZXYtPmRldi5wYXJlbnQ7CisJCWxlZF9kYXQtPm5ld19icmlnaHRuZXNzID0gTEVEX09GRjsKKworCQlJTklUX1dPUksoJmxlZF9kYXQtPndvcmssIGFkcDU1MjBfbGVkX3dvcmspOworCisJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihsZWRfZGF0LT5tYXN0ZXIsICZsZWRfZGF0LT5jZGV2KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIExFRCAlZFxuIiwKKwkJCQlsZWRfZGF0LT5pZCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJldCA9IGFkcDU1MjBfbGVkX3NldHVwKGxlZF9kYXQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gd3JpdGVcbiIpOworCQkJaSsrOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWQpOworCXJldHVybiAwOworCitlcnI6CisJaWYgKGkgPiAwKSB7CisJCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkgeworCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZFtpXS5jZGV2KTsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJmxlZFtpXS53b3JrKTsKKwkJfQorCX0KKworZXJyX2ZyZWU6CisJa2ZyZWUobGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHA1NTIwX2xlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9sZWRzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkcDU1MjBfbGVkICpsZWQ7CisJaW50IGk7CisKKwlsZWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWFkcDU1MjBfY2xyX2JpdHMobGVkLT5tYXN0ZXIsIEFEUDU1MjBfTEVEX0NPTlRST0wsCisJCSBBRFA1NTIwX0xFRDFfRU4gfCBBRFA1NTIwX0xFRDJfRU4gfCBBRFA1NTIwX0xFRDNfRU4pOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbGVkczsgaSsrKSB7CisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWRbaV0uY2Rldik7CisJCWNhbmNlbF93b3JrX3N5bmMoJmxlZFtpXS53b3JrKTsKKwl9CisKKwlrZnJlZShsZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHA1NTIwX2xlZF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiYWRwNTUyMC1sZWQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBhZHA1NTIwX2xlZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkcDU1MjBfbGVkX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHA1NTIwX2xlZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWRwNTUyMF9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfbGVkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWRwNTUyMF9sZWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhZHA1NTIwX2xlZF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9sZWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSGVubmVyaWNoIDxoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxFRFMgQURQNTUyMCgwMSkgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDU1MjAtbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1hbGl4Mi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtYWxpeDIuYwppbmRleCA3MzFkNGVlLi5mNTlmZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1hbGl4Mi5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWFsaXgyLmMKQEAgLTExLDExICsxMSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiBzdGF0aWMgaW50IGZvcmNlID0gMDsKIG1vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiQXNzdW1lIHN5c3RlbSBoYXMgQUxJWC4yL0FMSVguMyBzdHlsZSBMRURzIik7CiAKKyNkZWZpbmUgTVNSX0xCQVJfR1BJTwkJMHg1MTQwMDAwQworI2RlZmluZSBDUzU1MzVfR1BJT19TSVpFCTI1NgorCitzdGF0aWMgdTMyIGdwaW9fYmFzZTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRpdmlsX3BjaVtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05TLCAgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSVNBKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSkgfSwKKwl7IH0gLyogTlVMTCBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkaXZpbF9wY2kpOworCiBzdHJ1Y3QgYWxpeF9sZWQgewogCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwpAQCAtMzAsOSArNDMsOSBAQAogCQljb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhbGl4X2xlZCwgY2Rldik7CiAKIAlpZiAoYnJpZ2h0bmVzcykKLQkJb3V0bChsZWRfZGV2LT5vbl92YWx1ZSwgbGVkX2Rldi0+cG9ydCk7CisJCW91dGwobGVkX2Rldi0+b25fdmFsdWUsIGdwaW9fYmFzZSArIGxlZF9kZXYtPnBvcnQpOwogCWVsc2UKLQkJb3V0bChsZWRfZGV2LT5vZmZfdmFsdWUsIGxlZF9kZXYtPnBvcnQpOworCQlvdXRsKGxlZF9kZXYtPm9mZl92YWx1ZSwgZ3Bpb19iYXNlICsgbGVkX2Rldi0+cG9ydCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYWxpeF9sZWQgYWxpeF9sZWRzW10gPSB7CkBAIC00MSw3ICs1NCw3IEBACiAJCQkubmFtZSA9ICJhbGl4OjEiLAogCQkJLmJyaWdodG5lc3Nfc2V0ID0gYWxpeF9sZWRfc2V0LAogCQl9LAotCQkucG9ydCA9IDB4NjEwMCwKKwkJLnBvcnQgPSAweDAwLAogCQkub25fdmFsdWUgPSAxIDw8IDIyLAogCQkub2ZmX3ZhbHVlID0gMSA8PCA2LAogCX0sCkBAIC01MCw3ICs2Myw3IEBACiAJCQkubmFtZSA9ICJhbGl4OjIiLAogCQkJLmJyaWdodG5lc3Nfc2V0ID0gYWxpeF9sZWRfc2V0LAogCQl9LAotCQkucG9ydCA9IDB4NjE4MCwKKwkJLnBvcnQgPSAweDgwLAogCQkub25fdmFsdWUgPSAxIDw8IDI1LAogCQkub2ZmX3ZhbHVlID0gMSA8PCA5LAogCX0sCkBAIC01OSw3ICs3Miw3IEBACiAJCQkubmFtZSA9ICJhbGl4OjMiLAogCQkJLmJyaWdodG5lc3Nfc2V0ID0gYWxpeF9sZWRfc2V0LAogCQl9LAotCQkucG9ydCA9IDB4NjE4MCwKKwkJLnBvcnQgPSAweDgwLAogCQkub25fdmFsdWUgPSAxIDw8IDI3LAogCQkub2ZmX3ZhbHVlID0gMSA8PCAxMSwKIAl9LApAQCAtMTAxLDY0ICsxMTQsMTA0IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFsaXhfcHJlc2VudCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxpeF9wcmVzZW50KHVuc2lnbmVkIGxvbmcgYmlvc19waHlzLAorCQkJCWNvbnN0IGNoYXIgKmFsaXhfc2lnLAorCQkJCXNpemVfdCBhbGl4X3NpZ19sZW4pCiB7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBiaW9zX3BoeXMgPSAweDAwMGYwMDAwOwogCWNvbnN0IHNpemVfdCBiaW9zX2xlbiA9IDB4MDAwMTAwMDA7Ci0JY29uc3QgY2hhciBhbGl4X3NpZ1tdID0gIlBDIEVuZ2luZXMgQUxJWC4iOwotCWNvbnN0IHNpemVfdCBhbGl4X3NpZ19sZW4gPSBzaXplb2YoYWxpeF9zaWcpIC0gMTsKLQogCWNvbnN0IGNoYXIgKmJpb3NfdmlydDsKIAljb25zdCBjaGFyICpzY2FuX2VuZDsKIAljb25zdCBjaGFyICpwOwotCWludCByZXQgPSAwOworCWNoYXIgbmFtZVs2NF07CiAKIAlpZiAoZm9yY2UpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogZm9yY2VkIHRvIHNraXAgQklPUyB0ZXN0LCAiCiAJCSAgICAgICAiYXNzdW1lIHN5c3RlbSBoYXMgQUxJWC4yIHN0eWxlIExFRHNcbiIsCiAJCSAgICAgICBLQlVJTERfTU9ETkFNRSk7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMTsKIAl9CiAKIAliaW9zX3ZpcnQgPSBwaHlzX3RvX3ZpcnQoYmlvc19waHlzKTsKIAlzY2FuX2VuZCA9IGJpb3NfdmlydCArIGJpb3NfbGVuIC0gKGFsaXhfc2lnX2xlbiArIDIpOwogCWZvciAocCA9IGJpb3NfdmlydDsgcCA8IHNjYW5fZW5kOyBwKyspIHsKIAkJY29uc3QgY2hhciAqdGFpbDsKKwkJY2hhciAqYTsKIAotCQlpZiAobWVtY21wKHAsIGFsaXhfc2lnLCBhbGl4X3NpZ19sZW4pICE9IDApIHsKKwkJaWYgKG1lbWNtcChwLCBhbGl4X3NpZywgYWxpeF9zaWdfbGVuKSAhPSAwKQogCQkJY29udGludWU7Ci0JCX0KKworCQltZW1jcHkobmFtZSwgcCwgc2l6ZW9mKG5hbWUpKTsKKworCQkvKiByZW1vdmUgdGhlIGZpcnN0IFwwIGNoYXJhY3RlciBmcm9tIHN0cmluZyAqLworCQlhID0gc3RyY2hyKG5hbWUsICdcMCcpOworCQlpZiAoYSkKKwkJCSphID0gJyAnOworCisJCS8qIGN1dCB0aGUgc3RyaW5nIGF0IGEgbmV3bGluZSAqLworCQlhID0gc3RyY2hyKG5hbWUsICdccicpOworCQlpZiAoYSkKKwkJCSphID0gJ1wwJzsKIAogCQl0YWlsID0gcCArIGFsaXhfc2lnX2xlbjsKLQkJaWYgKCh0YWlsWzBdID09ICcyJyB8fCB0YWlsWzBdID09ICczJykgJiYgdGFpbFsxXSA9PSAnXDAnKSB7CisJCWlmICgodGFpbFswXSA9PSAnMicgfHwgdGFpbFswXSA9PSAnMycpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgIiVzOiBzeXN0ZW0gaXMgcmVjb2duaXplZCBhcyBcIiVzXCJcbiIsCi0JCQkgICAgICAgS0JVSUxEX01PRE5BTUUsIHApOwotCQkJcmV0ID0gMTsKLQkJCWJyZWFrOworCQkJICAgICAgIEtCVUlMRF9NT0ROQU1FLCBuYW1lKTsKKwkJCXJldHVybiAxOwogCQl9CiAJfQogCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKLXN0YXRpYyBpbnQgX19pbml0IGFsaXhfbGVkX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGFsaXhfcGNpX2xlZF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwl1MzIgbG93LCBoaTsKIAotCWlmICghYWxpeF9wcmVzZW50KCkpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJaWYgKHBjaV9kZXZfcHJlc2VudChkaXZpbF9wY2kpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSI6IERJVklMIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIGVuYWJsZSBvdXRwdXQgb24gR1BJTyBmb3IgTEVEIDEsMiwzICovCi0Jb3V0bCgxIDw8IDYsIDB4NjEwNCk7Ci0Jb3V0bCgxIDw8IDksIDB4NjE4NCk7Ci0Jb3V0bCgxIDw8IDExLCAweDYxODQpOworCS8qIEdyYWIgdGhlIEdQSU8gSS9PIHJhbmdlICovCisJcmRtc3IoTVNSX0xCQVJfR1BJTywgbG93LCBoaSk7CisKKwkvKiBDaGVjayB0aGUgbWFzayBhbmQgd2hldGhlciBHUElPIGlzIGVuYWJsZWQgKHNhbml0eSBjaGVjaykgKi8KKwlpZiAoaGkgIT0gMHgwMDAwZjAwMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FIjogR1BJTyBub3QgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1hc2sgb2ZmIHRoZSBJTyBiYXNlIGFkZHJlc3MgKi8KKwlncGlvX2Jhc2UgPSBsb3cgJiAweDAwMDBmZjAwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUsIEtCVUlMRF9NT0ROQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUiOiBjYW4ndCBhbGxvY2F0ZSBJL08gZm9yIEdQSU9cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBTZXQgR1BJTyBmdW5jdGlvbiB0byBvdXRwdXQgKi8KKwlvdXRsKDEgPDwgNiwgZ3Bpb19iYXNlICsgMHgwNCk7CisJb3V0bCgxIDw8IDksIGdwaW9fYmFzZSArIDB4ODQpOworCW91dGwoMSA8PCAxMSwgZ3Bpb19iYXNlICsgMHg4NCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgYWxpeF9sZWRfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRU5PREVWOworCWNvbnN0IGNoYXIgdGlueWJpb3Nfc2lnW10gPSAiUEMgRW5naW5lcyBBTElYLiI7CisJY29uc3QgY2hhciBjb3JlYm9vdF9zaWdbXSA9ICJQQyBFbmdpbmVzXDBBTElYLiI7CisKKwlpZiAoYWxpeF9wcmVzZW50KDB4ZjAwMDAsIHRpbnliaW9zX3NpZywgc2l6ZW9mKHRpbnliaW9zX3NpZykgLSAxKSB8fAorCSAgICBhbGl4X3ByZXNlbnQoMHg1MDAsIGNvcmVib290X3NpZywgc2l6ZW9mKGNvcmVib290X3NpZykgLSAxKSkKKwkJcmV0ID0gYWxpeF9wY2lfbGVkX2luaXQoKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoS0JVSUxEX01PRE5BTUUsIC0xLCBOVUxMLCAwKTsKIAlpZiAoIUlTX0VSUihwZGV2KSkgewpAQCAtMTY4LDcgKzIyMSw2IEBACiAJfSBlbHNlCiAJCXJldCA9IFBUUl9FUlIocGRldik7CiAKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzYsNiArMjI4LDcgQEAKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWxpeF9sZWRfZHJpdmVyKTsKKwlyZWxlYXNlX3JlZ2lvbihncGlvX2Jhc2UsIENTNTUzNV9HUElPX1NJWkUpOwogfQogCiBtb2R1bGVfaW5pdChhbGl4X2xlZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCmluZGV4IDg4MTY4MDYuLmRhNWZiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYwpAQCAtMzEsNyArMzEsNyBAQAogCS5uYW1lCQkJPSAicXViZTo6ZnJvbnQiLAogCS5icmlnaHRuZXNzCQk9IExFRF9GVUxMLAogCS5icmlnaHRuZXNzX3NldAkJPSBxdWJlX2Zyb250X2xlZF9zZXQsCi0JLmRlZmF1bHRfdHJpZ2dlcgk9ICJpZGUtZGlzayIsCisJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNvYmFsdF9xdWJlX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNDMsNyArNDMsNyBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbGVkX3BvcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWxlZF9wb3J0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghbGVkX3BvcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKaW5kZXggZGVmYzIxMi4uNDM4ZDQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYwpAQCAtODQsNyArODQsNyBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbGVkX3BvcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWxlZF9wb3J0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghbGVkX3BvcnQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1sdDM1OTMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWx0MzU5My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTQwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1sdDM1OTMuYwpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIExFRHMgZHJpdmVyIGZvciBMVDM1OTMgY29udHJvbGxlcnMKKyAqCisgKiBTZWUgdGhlIGRhdGFzaGVldCBhdCBodHRwOi8vY2RzLmxpbmVhci5jb20vZG9jcy9EYXRhc2hlZXQvMzU5M2YucGRmCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKgorICogQmFzZWQgb24gbGVkcy1ncGlvLmMsCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDcgOEQgVGVjaG5vbG9naWVzIGluYy4KKyAqICAgUmFwaGFlbCBBc3NlbmF0IDxyYXBoQDhkLmNvbT4KKyAqICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworc3RydWN0IGx0MzU5M19sZWRfZGF0YSB7CisJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OworCXVuc2lnbmVkIGdwaW87CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdTggbmV3X2xldmVsOworfTsKKworc3RhdGljIHZvaWQgbHQzNTkzX2xlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgcHVsc2VzOworCXN0cnVjdCBsdDM1OTNfbGVkX2RhdGEgKmxlZF9kYXQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGx0MzU5M19sZWRfZGF0YSwgd29yayk7CisKKwkvKgorCSAqIFRoZSBMVDM1OTMgcmVzZXRzIGl0cyBpbnRlcm5hbCBjdXJyZW50IGxldmVsIHJlZ2lzdGVyIHRvIHRoZSBtYXhpbXVtCisJICogbGV2ZWwgb24gdGhlIGZpcnN0IGZhbGxpbmcgZWRnZSBvbiB0aGUgY29udHJvbCBwaW4uIEVhY2ggZm9sbG93aW5nCisJICogZmFsbGluZyBlZGdlIGRlY3JlYXNlcyB0aGUgY3VycmVudCBsZXZlbCBieSA2MjV1QS4gVXAgdG8gMzIgcHVsc2VzCisJICogY2FuIGJlIHNlbnQsIHNvIHRoZSBtYXhpbXVtIHBvd2VyIHJlZHVjdGlvbiBpcyAyMG1BLgorCSAqIEFmdGVyIGEgdGltZW91dCBvZiAxMjh1cywgdGhlIHZhbHVlIGlzIHRha2VuIGZyb20gdGhlIHJlZ2lzdGVyIGFuZAorCSAqIGFwcGxpZWQgaXMgdG8gdGhlIG91dHB1dCBkcml2ZXIuCisJICovCisKKwlpZiAobGVkX2RhdC0+bmV3X2xldmVsID09IDApIHsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbywgMCk7CisJCXJldHVybjsKKwl9CisKKwlwdWxzZXMgPSAzMiAtIChsZWRfZGF0LT5uZXdfbGV2ZWwgKiAzMikgLyAyNTU7CisKKwlpZiAocHVsc2VzID09IDApIHsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbywgMCk7CisJCW1kZWxheSgxKTsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGVkX2RhdC0+Z3BpbywgMSk7CisJCXJldHVybjsKKwl9CisKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChsZWRfZGF0LT5ncGlvLCAxKTsKKworCXdoaWxlIChwdWxzZXMtLSkgeworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChsZWRfZGF0LT5ncGlvLCAwKTsKKwkJdWRlbGF5KDEpOworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChsZWRfZGF0LT5ncGlvLCAxKTsKKwkJdWRlbGF5KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgbHQzNTkzX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhICpsZWRfZGF0ID0KKwkJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhLCBjZGV2KTsKKworCWxlZF9kYXQtPm5ld19sZXZlbCA9IHZhbHVlOworCXNjaGVkdWxlX3dvcmsoJmxlZF9kYXQtPndvcmspOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjcmVhdGVfbHQzNTkzX2xlZChjb25zdCBzdHJ1Y3QgZ3Bpb19sZWQgKnRlbXBsYXRlLAorCXN0cnVjdCBsdDM1OTNfbGVkX2RhdGEgKmxlZF9kYXQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKK3sKKwlpbnQgcmV0LCBzdGF0ZTsKKworCS8qIHNraXAgbGVkcyBvbiBHUElPcyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgKi8KKwlpZiAoIWdwaW9faXNfdmFsaWQodGVtcGxhdGUtPmdwaW8pKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBza2lwcGluZyB1bmF2YWlsYWJsZSBMVDM1OTMgTEVEIGF0IGdwaW8gJWQgKCVzKVxuIiwKKwkJCQlLQlVJTERfTU9ETkFNRSwgdGVtcGxhdGUtPmdwaW8sIHRlbXBsYXRlLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHRlbXBsYXRlLT5ncGlvLCB0ZW1wbGF0ZS0+bmFtZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlsZWRfZGF0LT5jZGV2Lm5hbWUgPSB0ZW1wbGF0ZS0+bmFtZTsKKwlsZWRfZGF0LT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRlbXBsYXRlLT5kZWZhdWx0X3RyaWdnZXI7CisJbGVkX2RhdC0+Z3BpbyA9IHRlbXBsYXRlLT5ncGlvOworCisJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IGx0MzU5M19sZWRfc2V0OworCisJc3RhdGUgPSAodGVtcGxhdGUtPmRlZmF1bHRfc3RhdGUgPT0gTEVEU19HUElPX0RFRlNUQVRFX09OKTsKKwlsZWRfZGF0LT5jZGV2LmJyaWdodG5lc3MgPSBzdGF0ZSA/IExFRF9GVUxMIDogTEVEX09GRjsKKworCWlmICghdGVtcGxhdGUtPnJldGFpbl9zdGF0ZV9zdXNwZW5kZWQpCisJCWxlZF9kYXQtPmNkZXYuZmxhZ3MgfD0gTEVEX0NPUkVfU1VTUEVORFJFU1VNRTsKKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChsZWRfZGF0LT5ncGlvLCBzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJSU5JVF9XT1JLKCZsZWRfZGF0LT53b3JrLCBsdDM1OTNfbGVkX3dvcmspOworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHBhcmVudCwgJmxlZF9kYXQtPmNkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIExUMzU5MyBMRUQgJyVzJyBhdCBHUElPICVkXG4iLAorCQlLQlVJTERfTU9ETkFNRSwgdGVtcGxhdGUtPm5hbWUsIHRlbXBsYXRlLT5ncGlvKTsKKworCXJldHVybiAwOworCitlcnI6CisJZ3Bpb19mcmVlKGxlZF9kYXQtPmdwaW8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9sdDM1OTNfbGVkKHN0cnVjdCBsdDM1OTNfbGVkX2RhdGEgKmxlZCkKK3sKKwlpZiAoIWdwaW9faXNfdmFsaWQobGVkLT5ncGlvKSkKKwkJcmV0dXJuOworCisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+Y2Rldik7CisJY2FuY2VsX3dvcmtfc3luYygmbGVkLT53b3JrKTsKKwlncGlvX2ZyZWUobGVkLT5ncGlvKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbHQzNTkzX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBsdDM1OTNfbGVkX2RhdGEgKmxlZHNfZGF0YTsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUJVU1k7CisKKwlsZWRzX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhKSAqIHBkYXRhLT5udW1fbGVkcywKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWxlZHNfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9sZWRzOyBpKyspIHsKKwkJcmV0ID0gY3JlYXRlX2x0MzU5M19sZWQoJnBkYXRhLT5sZWRzW2ldLCAmbGVkc19kYXRhW2ldLAorCQkJCSAgICAgICZwZGV2LT5kZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxlZHNfZGF0YSk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKKwkJZGVsZXRlX2x0MzU5M19sZWQoJmxlZHNfZGF0YVtpXSk7CisKKwlrZnJlZShsZWRzX2RhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbHQzNTkzX2xlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbHQzNTkzX2xlZF9kYXRhICpsZWRzX2RhdGE7CisKKwlsZWRzX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2xlZHM7IGkrKykKKwkJZGVsZXRlX2x0MzU5M19sZWQoJmxlZHNfZGF0YVtpXSk7CisKKwlrZnJlZShsZWRzX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0MzU5M19sZWRfZHJpdmVyID0geworCS5wcm9iZQkJPSBsdDM1OTNfbGVkX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobHQzNTkzX2xlZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJsZWRzLWx0MzU5MyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmxlZHMtbHQzNTkzIik7CisKK3N0YXRpYyBpbnQgX19pbml0IGx0MzU5M19sZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmx0MzU5M19sZWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGx0MzU5M19sZWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsdDM1OTNfbGVkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGx0MzU5M19sZWRfaW5pdCk7Cittb2R1bGVfZXhpdChsdDM1OTNfbGVkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMRUQgZHJpdmVyIGZvciBMVDM1OTMgY29udHJvbGxlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXB3bS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKaW5kZXggY2RmZGM4Ny4uODhiMWRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMKQEAgLTI3LDcgKzI3LDYgQEAKIAlzdHJ1Y3QgcHdtX2RldmljZQkqcHdtOwogCXVuc2lnbmVkIGludCAJCWFjdGl2ZV9sb3c7CiAJdW5zaWduZWQgaW50CQlwZXJpb2Q7Ci0JdW5zaWduZWQgaW50CQltYXhfYnJpZ2h0bmVzczsKIH07CiAKIHN0YXRpYyB2b2lkIGxlZF9wd21fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApAQCAtMzUsNyArMzQsNyBAQAogewogCXN0cnVjdCBsZWRfcHdtX2RhdGEgKmxlZF9kYXQgPQogCQljb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBsZWRfcHdtX2RhdGEsIGNkZXYpOwotCXVuc2lnbmVkIGludCBtYXggPSBsZWRfZGF0LT5tYXhfYnJpZ2h0bmVzczsKKwl1bnNpZ25lZCBpbnQgbWF4ID0gbGVkX2RhdC0+Y2Rldi5tYXhfYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBpbnQgcGVyaW9kID0gIGxlZF9kYXQtPnBlcmlvZDsKIAogCWlmIChicmlnaHRuZXNzID09IDApIHsKQEAgLTc3LDEwICs3NiwxMCBAQAogCQlsZWRfZGF0LT5jZGV2Lm5hbWUgPSBjdXJfbGVkLT5uYW1lOwogCQlsZWRfZGF0LT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IGN1cl9sZWQtPmRlZmF1bHRfdHJpZ2dlcjsKIAkJbGVkX2RhdC0+YWN0aXZlX2xvdyA9IGN1cl9sZWQtPmFjdGl2ZV9sb3c7Ci0JCWxlZF9kYXQtPm1heF9icmlnaHRuZXNzID0gY3VyX2xlZC0+bWF4X2JyaWdodG5lc3M7CiAJCWxlZF9kYXQtPnBlcmlvZCA9IGN1cl9sZWQtPnB3bV9wZXJpb2RfbnM7CiAJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBsZWRfcHdtX3NldDsKIAkJbGVkX2RhdC0+Y2Rldi5icmlnaHRuZXNzID0gTEVEX09GRjsKKwkJbGVkX2RhdC0+Y2Rldi5tYXhfYnJpZ2h0bmVzcyA9IGN1cl9sZWQtPm1heF9icmlnaHRuZXNzOwogCQlsZWRfZGF0LT5jZGV2LmZsYWdzIHw9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUU7CiAKIAkJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZsZWRfZGF0LT5jZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwMGRlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogbGVkcy1yZWd1bGF0b3IuYyAtIExFRCBjbGFzcyBkcml2ZXIgZm9yIHJlZ3VsYXRvciBkcml2ZW4gTEVEcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4KKyAqCisgKiBJbnNwaXJlZCBieSBsZWRzLXdtODM1MCBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLXJlZ3VsYXRvci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjZGVmaW5lIHRvX3JlZ3VsYXRvcl9sZWQobGVkX2NkZXYpIFwKKwljb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCByZWd1bGF0b3JfbGVkLCBjZGV2KQorCitzdHJ1Y3QgcmVndWxhdG9yX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OworCWVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWU7CisJaW50IGVuYWJsZWQ7CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJc3RydWN0IHJlZ3VsYXRvciAqdmNjOworfTsKKworc3RhdGljIGlubGluZSBpbnQgbGVkX3JlZ3VsYXRvcl9nZXRfbWF4X2JyaWdodG5lc3Moc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5KQoreworCWludCByZXQ7CisJaW50IHZvbHRhZ2UgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN1cHBseSwgMCk7CisKKwlpZiAodm9sdGFnZSA8PSAwKQorCQlyZXR1cm4gMTsKKworCS8qIGV2ZW4gaWYgcmVndWxhdG9yIGNhbid0IGNoYW5nZSB2b2x0YWdlcywKKwkgKiB3ZSBzdGlsbCBhc3N1bWUgaXQgY2FuIGNoYW5nZSBzdGF0dXMKKwkgKiBhbmQgdGhlIExFRCBjYW4gYmUgdHVybmVkIG9uIGFuZCBvZmYuCisJICovCisJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKHN1cHBseSwgdm9sdGFnZSwgdm9sdGFnZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhzdXBwbHkpOworfQorCitzdGF0aWMgaW50IGxlZF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5LAorCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJaWYgKGJyaWdodG5lc3MgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZShzdXBwbHksIGJyaWdodG5lc3MgLSAxKTsKK30KKworCitzdGF0aWMgdm9pZCByZWd1bGF0b3JfbGVkX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2xlZCAqbGVkKQoreworCWludCByZXQ7CisKKwlpZiAobGVkLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGxlZC0+dmNjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihsZWQtPmNkZXYuZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSB2Y2M6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJbGVkLT5lbmFibGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgcmVndWxhdG9yX2xlZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfbGVkICpsZWQpCit7CisJaW50IHJldDsKKworCWlmICghbGVkLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShsZWQtPnZjYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIobGVkLT5jZGV2LmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIHZjYzogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlsZWQtPmVuYWJsZWQgPSAwOworfQorCitzdGF0aWMgdm9pZCByZWd1bGF0b3JfbGVkX3NldF92YWx1ZShzdHJ1Y3QgcmVndWxhdG9yX2xlZCAqbGVkKQoreworCWludCB2b2x0YWdlOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZsZWQtPm11dGV4KTsKKworCWlmIChsZWQtPnZhbHVlID09IExFRF9PRkYpIHsKKwkJcmVndWxhdG9yX2xlZF9kaXNhYmxlKGxlZCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZWQtPmNkZXYubWF4X2JyaWdodG5lc3MgPiAxKSB7CisJCXZvbHRhZ2UgPSBsZWRfcmVndWxhdG9yX2dldF92b2x0YWdlKGxlZC0+dmNjLCBsZWQtPnZhbHVlKTsKKwkJZGV2X2RiZyhsZWQtPmNkZXYuZGV2LCAiYnJpZ2h0bmVzczogJWQgdm9sdGFnZTogJWRcbiIsCisJCQkJbGVkLT52YWx1ZSwgdm9sdGFnZSk7CisKKwkJcmV0ID0gcmVndWxhdG9yX3NldF92b2x0YWdlKGxlZC0+dmNjLCB2b2x0YWdlLCB2b2x0YWdlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2VycihsZWQtPmNkZXYuZGV2LCAiRmFpbGVkIHRvIHNldCB2b2x0YWdlICVkOiAlZFxuIiwKKwkJCQl2b2x0YWdlLCByZXQpOworCX0KKworCXJlZ3VsYXRvcl9sZWRfZW5hYmxlKGxlZCk7CisKK291dDoKKwltdXRleF91bmxvY2soJmxlZC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBsZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJlZ3VsYXRvcl9sZWQgKmxlZDsKKworCWxlZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmVndWxhdG9yX2xlZCwgd29yayk7CisJcmVndWxhdG9yX2xlZF9zZXRfdmFsdWUobGVkKTsKK30KKworc3RhdGljIHZvaWQgcmVndWxhdG9yX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9sZWQgKmxlZCA9IHRvX3JlZ3VsYXRvcl9sZWQobGVkX2NkZXYpOworCisJbGVkLT52YWx1ZSA9IHZhbHVlOworCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJlZ3VsYXRvcl9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGVkX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZWd1bGF0b3JfbGVkICpsZWQ7CisJc3RydWN0IHJlZ3VsYXRvciAqdmNjOworCWludCByZXQgPSAwOworCisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXZjYyA9IHJlZ3VsYXRvcl9nZXRfZXhjbHVzaXZlKCZwZGV2LT5kZXYsICJ2bGVkIik7CisJaWYgKElTX0VSUih2Y2MpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgdmNjIGZvciAlc1xuIiwgcGRhdGEtPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUih2Y2MpOworCX0KKworCWxlZCA9IGt6YWxsb2Moc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAobGVkID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfdmNjOworCX0KKworCWxlZC0+Y2Rldi5tYXhfYnJpZ2h0bmVzcyA9IGxlZF9yZWd1bGF0b3JfZ2V0X21heF9icmlnaHRuZXNzKHZjYyk7CisJaWYgKHBkYXRhLT5icmlnaHRuZXNzID4gbGVkLT5jZGV2Lm1heF9icmlnaHRuZXNzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgZGVmYXVsdCBicmlnaHRuZXNzICVkXG4iLAorCQkJCXBkYXRhLT5icmlnaHRuZXNzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfbGVkOworCX0KKwlsZWQtPnZhbHVlID0gcGRhdGEtPmJyaWdodG5lc3M7CisKKwlsZWQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSByZWd1bGF0b3JfbGVkX2JyaWdodG5lc3Nfc2V0OworCWxlZC0+Y2Rldi5uYW1lID0gcGRhdGEtPm5hbWU7CisJbGVkLT5jZGV2LmZsYWdzIHw9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUU7CisJbGVkLT52Y2MgPSB2Y2M7CisKKwltdXRleF9pbml0KCZsZWQtPm11dGV4KTsKKwlJTklUX1dPUksoJmxlZC0+d29yaywgbGVkX3dvcmspOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbGVkKTsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbGVkLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQljYW5jZWxfd29ya19zeW5jKCZsZWQtPndvcmspOworCQlnb3RvIGVycl9sZWQ7CisJfQorCisJLyogdG8gZXhwb3NlIHRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZXJzcGFjZSAqLworCWxlZC0+Y2Rldi5icmlnaHRuZXNzID0gbGVkLT52YWx1ZTsKKworCS8qIFNldCB0aGUgZGVmYXVsdCBsZWQgc3RhdHVzICovCisJcmVndWxhdG9yX2xlZF9zZXRfdmFsdWUobGVkKTsKKworCXJldHVybiAwOworCitlcnJfbGVkOgorCWtmcmVlKGxlZCk7CitlcnJfdmNjOgorCXJlZ3VsYXRvcl9wdXQodmNjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCByZWd1bGF0b3JfbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfbGVkICpsZWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmNkZXYpOworCWNhbmNlbF93b3JrX3N5bmMoJmxlZC0+d29yayk7CisJcmVndWxhdG9yX2xlZF9kaXNhYmxlKGxlZCk7CisJcmVndWxhdG9yX3B1dChsZWQtPnZjYyk7CisJa2ZyZWUobGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmVndWxhdG9yX2xlZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgID0gImxlZHMtcmVndWxhdG9yIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlICA9IHJlZ3VsYXRvcl9sZWRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHJlZ3VsYXRvcl9sZWRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJlZ3VsYXRvcl9sZWRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJlZ3VsYXRvcl9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHJlZ3VsYXRvcl9sZWRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByZWd1bGF0b3JfbGVkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcmVndWxhdG9yX2xlZF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQocmVndWxhdG9yX2xlZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVndWxhdG9yIGRyaXZlbiBMRUQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmxlZHMtcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1zczQyMDAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXNzNDIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZjA0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1zczQyMDAuYwpAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAqIFNTNDIwMC1FIEhhcmR3YXJlIEFQSQorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcjogRGF2ZSBIYW5zZW4gPGRhdmVAc3I3MS5uZXQ+CisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworTU9EVUxFX0FVVEhPUigiUm9kbmV5IEdpcm9kIDxyZ2lyb2RAY29uZm9jdXMuY29tPiwgRGF2ZSBIYW5zZW4gPGRhdmVAc3I3MS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIE5BUy9Ib21lIFNlcnZlciBJQ0g3IEdQSU8gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBJQ0g3IExQQy9HUElPIFBDSSBDb25maWcgcmVnaXN0ZXIgb2Zmc2V0cworICovCisjZGVmaW5lIFBNQkFTRQkJMHgwNDAKKyNkZWZpbmUgR1BJT19CQVNFCTB4MDQ4CisjZGVmaW5lIEdQSU9fQ1RSTAkweDA0YworI2RlZmluZSBHUElPX0VOCQkweDAxMAorCisvKgorICogVGhlIElDSDcgR1BJTyByZWdpc3RlciBibG9jayBpcyA2NCBieXRlcyBpbiBzaXplLgorICovCisjZGVmaW5lIElDSDdfR1BJT19TSVpFCTY0CisKKy8qCisgKiBEZWZpbmUgcmVnaXN0ZXIgb2Zmc2V0cyB3aXRoaW4gdGhlIElDSDcgcmVnaXN0ZXIgYmxvY2suCisgKi8KKyNkZWZpbmUgR1BJT19VU0VfU0VMCTB4MDAwCisjZGVmaW5lIEdQX0lPX1NFTAkweDAwNAorI2RlZmluZSBHUF9MVkwJCTB4MDBjCisjZGVmaW5lIEdQT19CTElOSwkweDAxOAorI2RlZmluZSBHUElfSU5WCQkweDAzMAorI2RlZmluZSBHUElPX1VTRV9TRUwyCTB4MDM0CisjZGVmaW5lIEdQX0lPX1NFTDIJMHgwMzgKKyNkZWZpbmUgR1BfTFZMMgkJMHgwM2MKKworLyoKKyAqIFBDSSBJRCBvZiB0aGUgSW50ZWwgSUNINyBMUEMgRGV2aWNlIHdpdGhpbiB3aGljaCB0aGUgR1BJTyBibG9jayBsaXZlcy4KKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljaDdfbHBjX3BjaV9pZFtdID0KK3sKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzApIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMzApIH0sCisJeyB9IC8qIE5VTEwgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpY2g3X2xwY19wY2lfaWQpOworCitzdGF0aWMgaW50IF9faW5pdCBzczQyMDBfbGVkX2RtaV9jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJcHJfaW5mbygiZGV0ZWN0ZWQgJyVzJ1xuIiwgaWQtPmlkZW50KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG5vZGV0ZWN0OworbW9kdWxlX3BhcmFtX25hbWVkKG5vZGV0ZWN0LCBub2RldGVjdCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vZGV0ZWN0LCAiU2tpcCBETUktYmFzZWQgaGFyZHdhcmUgZGV0ZWN0aW9uIik7CisKKy8qCisgKiBzdHJ1Y3QgbmFzX2xlZF93aGl0ZWxpc3QgLSBMaXN0IG9mIGtub3duIGdvb2QgbW9kZWxzCisgKgorICogQ29udGFpbnMgdGhlIGtub3duIGdvb2QgbW9kZWxzIHRoaXMgZHJpdmVyIGlzIGNvbXBhdGlibGUgd2l0aC4KKyAqIFdoZW4gYWRkaW5nIGEgbmV3IG1vZGVsIHRyeSB0byBiZSBhcyBzdHJpY3QgYXMgcG9zc2libGUuIFRoaXMKKyAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGtlZXAgdGhlIGZhbHNlIHBvc2l0aXZlcyAodGhlIG1vZGVsIGlzCisgKiBkZXRlY3RlZCBhcyB3b3JraW5nLCBidXQgaW4gcmVhbGl0eSBpdCBpcyBub3QpIGFzIGxvdyBhcworICogcG9zc2libGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIG5hc19sZWRfd2hpdGVsaXN0W10gPSB7CisJeworCQkuY2FsbGJhY2sgPSBzczQyMDBfbGVkX2RtaV9jYWxsYmFjaywKKwkJLmlkZW50ID0gIkludGVsIFNTNDIwMC1FIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJJbnRlbCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTUzQyMDAtRSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIxLjAwLjAwIikKKwkJfQorCX0sCit9OworCisvKgorICogQmFzZSBJL08gYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgUG93ZXIgTWFuYWdlbWVudCByZWdpc3RlciBibG9jaworICovCitzdGF0aWMgdTMyIGdfcG1faW9fYmFzZTsKKworLyoKKyAqIEJhc2UgSS9PIGFkZHJlc3MgYXNzaWduZWQgdG8gdGhlIElDSDcgR1BJTyByZWdpc3RlciBibG9jaworICovCitzdGF0aWMgdTMyIG5hc19ncGlvX2lvX2Jhc2U7CisKKy8qCisgKiBXaGVuIHdlIHN1Y2Nlc3NmdWxseSByZWdpc3RlciBhIHJlZ2lvbiwgd2UgYXJlIHJldHVybmVkIGEgcmVzb3VyY2UuCisgKiBXZSB1c2UgdGhlc2UgdG8gaWRlbnRpZnkgd2hpY2ggcmVnaW9ucyB3ZSBuZWVkIHRvIHJlbGVhc2Ugb24gb3VyIHdheQorICogYmFjayBvdXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmdwX2dwaW9fcmVzb3VyY2U7CisKK3N0cnVjdCBuYXNncGlvX2xlZCB7CisJY2hhciAqbmFtZTsKKwl1MzIgZ3Bpb19iaXQ7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfY2RldjsKK307CisKKy8qCisgKiBncGlvX2JpdChzKSBhcmUgdGhlIElDSDcgR1BJTyBiaXQgYXNzaWdubWVudHMKKyAqLworc3RhdGljIHN0cnVjdCBuYXNncGlvX2xlZCBuYXNncGlvX2xlZHNbXSA9IHsKKwl7IC5uYW1lID0gImhkZDE6Ymx1ZTpzYXRhIiwJLmdwaW9fYml0ID0gMCB9LAorCXsgLm5hbWUgPSAiaGRkMTphbWJlcjpzYXRhIiwJLmdwaW9fYml0ID0gMSB9LAorCXsgLm5hbWUgPSAiaGRkMjpibHVlOnNhdGEiLAkuZ3Bpb19iaXQgPSAyIH0sCisJeyAubmFtZSA9ICJoZGQyOmFtYmVyOnNhdGEiLAkuZ3Bpb19iaXQgPSAzIH0sCisJeyAubmFtZSA9ICJoZGQzOmJsdWU6c2F0YSIsCS5ncGlvX2JpdCA9IDQgfSwKKwl7IC5uYW1lID0gImhkZDM6YW1iZXI6c2F0YSIsCS5ncGlvX2JpdCA9IDUgfSwKKwl7IC5uYW1lID0gImhkZDQ6Ymx1ZTpzYXRhIiwJLmdwaW9fYml0ID0gNiB9LAorCXsgLm5hbWUgPSAiaGRkNDphbWJlcjpzYXRhIiwJLmdwaW9fYml0ID0gNyB9LAorCXsgLm5hbWUgPSAicG93ZXI6Ymx1ZTpwb3dlciIsCS5ncGlvX2JpdCA9IDI3fSwKKwl7IC5uYW1lID0gInBvd2VyOmFtYmVyOnBvd2VyIiwgIC5ncGlvX2JpdCA9IDI4fSwKK307CisKKyNkZWZpbmUgTkFTX1JFQ09WRVJZCTB4MDAwMDA0MDAJLyogR1BJTzEwICovCisKK3N0YXRpYyBzdHJ1Y3QgbmFzZ3Bpb19sZWQgKgorbGVkX2NsYXNzZGV2X3RvX25hc2dwaW9fbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBuYXNncGlvX2xlZCwgbGVkX2NkZXYpOworfQorCitzdGF0aWMgc3RydWN0IG5hc2dwaW9fbGVkICpnZXRfbGVkX25hbWVkKGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFzZ3Bpb19sZWRzKTsgaSsrKSB7CisJCWlmIChzdHJjbXAobmFzZ3Bpb19sZWRzW2ldLm5hbWUsIG5hbWUpKQorCQkJY29udGludWU7CisJCXJldHVybiAmbmFzZ3Bpb19sZWRzW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgcHJvdGVjdHMgYWNjZXNzIHRvIHRoZSBncGlvIHBvcnRzLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5hc2dwaW9fZ3Bpb19sb2NrKTsKKworLyoKKyAqIFRoZXJlIGFyZSB0d28gZ3BpbyBwb3J0cywgb25lIGZvciBibGlua2luZyBhbmQgdGhlIG90aGVyCisgKiBmb3IgcG93ZXIuICBAcG9ydCB0ZWxscyB1cyBpZiB3ZSdyZSBkb2luZyBibGlua2luZyBvcgorICogcG93ZXIgY29udHJvbC4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIG5hc2dwaW9fZ3Bpb19sb2NrCisgKi8KK3N0YXRpYyB2b2lkIF9fbmFzZ3Bpb19sZWRfc2V0X2F0dHIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJICAgdTMyIHBvcnQsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbmFzZ3Bpb19sZWQgKmxlZCA9IGxlZF9jbGFzc2Rldl90b19uYXNncGlvX2xlZChsZWRfY2Rldik7CisJdTMyIGdwaW9fb3V0OworCisJZ3Bpb19vdXQgPSBpbmwobmFzX2dwaW9faW9fYmFzZSArIHBvcnQpOworCWlmICh2YWx1ZSkKKwkJZ3Bpb19vdXQgfD0gKDE8PGxlZC0+Z3Bpb19iaXQpOworCWVsc2UKKwkJZ3Bpb19vdXQgJj0gfigxPDxsZWQtPmdwaW9fYml0KTsKKworCW91dGwoZ3Bpb19vdXQsIG5hc19ncGlvX2lvX2Jhc2UgKyBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgbmFzZ3Bpb19sZWRfc2V0X2F0dHIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJIHUzMiBwb3J0LCB1MzIgdmFsdWUpCit7CisJc3Bpbl9sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7CisJX19uYXNncGlvX2xlZF9zZXRfYXR0cihsZWRfY2RldiwgcG9ydCwgdmFsdWUpOworCXNwaW5fdW5sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7Cit9CisKK3UzMiBuYXNncGlvX2xlZF9nZXRfYXR0cihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdTMyIHBvcnQpCit7CisJc3RydWN0IG5hc2dwaW9fbGVkICpsZWQgPSBsZWRfY2xhc3NkZXZfdG9fbmFzZ3Bpb19sZWQobGVkX2NkZXYpOworCXUzMiBncGlvX2luOworCisJc3Bpbl9sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7CisJZ3Bpb19pbiA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgcG9ydCk7CisJc3Bpbl91bmxvY2soJm5hc2dwaW9fZ3Bpb19sb2NrKTsKKwlpZiAoZ3Bpb19pbiAmICgxPDxsZWQtPmdwaW9fYml0KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGVyZSBpcyBhY3R1YWwgYnJpZ2h0bmVzcyBjb250cm9sIGluIHRoZSBoYXJkd2FyZSwKKyAqIGJ1dCBpdCBpcyB2aWEgc21idXMgY29tbWFuZHMgYW5kIG5vdCBpbXBsZW1lbnRlZAorICogaW4gdGhpcyBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG5hc2dwaW9fbGVkX3NldF9icmlnaHRuZXNzKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJdTMyIHNldHRpbmcgPSAwOworCWlmIChicmlnaHRuZXNzID49IExFRF9IQUxGKQorCQlzZXR0aW5nID0gMTsKKwkvKgorCSAqIEhvbGQgdGhlIGxvY2sgYWNyb3NzIGJvdGggb3BlcmF0aW9ucy4gIFRoaXMgZW5zdXJlcworCSAqIGNvbnNpc3RlbmN5IHNvIHRoYXQgYm90aCB0aGUgInR1cm4gb2ZmIGJsaW5raW5nIgorCSAqIGFuZCAidHVybiBsaWdodCBvZmYiIG9wZXJhdGlvbnMgY29tcGxldGUgYXMgYSBzZXQuCisJICovCisJc3Bpbl9sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7CisJLyoKKwkgKiBMRUQgY2xhc3MgZG9jdW1lbnRhdGlvbiBhc2tzIHRoYXQgcGFzdCBibGluayBzdGF0ZQorCSAqIGJlIGRpc2FibGVkIHdoZW4gYnJpZ2h0bmVzcyBpcyB0dXJuZWQgdG8gemVyby4KKwkgKi8KKwlpZiAoYnJpZ2h0bmVzcyA9PSAwKQorCQlfX25hc2dwaW9fbGVkX3NldF9hdHRyKGxlZF9jZGV2LCBHUE9fQkxJTkssIDApOworCV9fbmFzZ3Bpb19sZWRfc2V0X2F0dHIobGVkX2NkZXYsIEdQX0xWTCwgc2V0dGluZyk7CisJc3Bpbl91bmxvY2soJm5hc2dwaW9fZ3Bpb19sb2NrKTsKK30KKworc3RhdGljIGludCBuYXNncGlvX2xlZF9zZXRfYmxpbmsoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJCSB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCit7CisJdTMyIHNldHRpbmcgPSAxOworCWlmICghKCpkZWxheV9vbiA9PSAwICYmICpkZWxheV9vZmYgPT0gMCkgJiYKKwkgICAgISgqZGVsYXlfb24gPT0gNTAwICYmICpkZWxheV9vZmYgPT0gNTAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBUaGVzZSBhcmUgdmVyeSBhcHByb3hpbWF0ZS4KKwkgKi8KKwkqZGVsYXlfb24gPSA1MDA7CisJKmRlbGF5X29mZiA9IDUwMDsKKworCW5hc2dwaW9fbGVkX3NldF9hdHRyKGxlZF9jZGV2LCBHUE9fQkxJTkssIHNldHRpbmcpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIElDSDcgR1BJTyByZWdpc3RlcnMgZm9yIE5BUyB1c2FnZS4gIFRoZSBCSU9TIHNob3VsZCBoYXZlCisgKiBhbHJlYWR5IHRha2VuIGNhcmUgb2YgdGhpcywgYnV0IHdlIHdpbGwgZG8gc28gaW4gYSBub24gZGVzdHJ1Y3RpdmUgbWFubmVyCisgKiBzbyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkIHdoZXRoZXIgdGhlIEJJT1MgZGlkIGl0IG9yIG5vdC4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgaWNoN19ncGlvX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpOworCXUzMiBjb25maWdfZGF0YSA9IDA7CisJdTMyIGFsbF9uYXNfbGVkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hc2dwaW9fbGVkcyk7IGkrKykKKwkJYWxsX25hc19sZWQgfD0gKDE8PG5hc2dwaW9fbGVkc1tpXS5ncGlvX2JpdCk7CisKKwlzcGluX2xvY2soJm5hc2dwaW9fZ3Bpb19sb2NrKTsKKwkvKgorCSAqIFdlIG5lZWQgdG8gZW5hYmxlIGFsbCBvZiB0aGUgR1BJTyBsaW5lcyB1c2VkIGJ5IHRoZSBOQVMgYm94LAorCSAqIHNvIHdlIHdpbGwgcmVhZCB0aGUgY3VycmVudCBVc2UgU2VsZWN0aW9uIGFuZCBhZGQgb3VyIHVzYWdlCisJICogdG8gaXQuICBUaGlzIHNob3VsZCBiZSBiZW5pZ24gd2l0aCByZWdhcmQgdG8gdGhlIG9yaWdpbmFsCisJICogQklPUyBjb25maWd1cmF0aW9uLgorCSAqLworCWNvbmZpZ19kYXRhID0gaW5sKG5hc19ncGlvX2lvX2Jhc2UgKyBHUElPX1VTRV9TRUwpOworCWRldl9kYmcoZGV2LCAiOiBEYXRhIHJlYWQgZnJvbSBHUElPX1VTRV9TRUwgPSAweCUwOHhcbiIsIGNvbmZpZ19kYXRhKTsKKwljb25maWdfZGF0YSB8PSBhbGxfbmFzX2xlZCArIE5BU19SRUNPVkVSWTsKKwlvdXRsKGNvbmZpZ19kYXRhLCBuYXNfZ3Bpb19pb19iYXNlICsgR1BJT19VU0VfU0VMKTsKKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BJT19VU0VfU0VMKTsKKwlkZXZfZGJnKGRldiwgIjogR1BJT19VU0VfU0VMID0gMHglMDh4XG5cbiIsIGNvbmZpZ19kYXRhKTsKKworCS8qCisJICogVGhlIExFRCBHUElPIG91dHB1dHMgbmVlZCB0byBiZSBjb25maWd1cmVkIGZvciBvdXRwdXQsIHNvIHdlCisJICogd2lsbCBlbnN1cmUgdGhhdCBhbGwgTEVEIGxpbmVzIGFyZSBjbGVhcmVkIGZvciBvdXRwdXQgYW5kIHRoZQorCSAqIFJFQ09WRVJZIGxpbmUgcmVhZHkgZm9yIGlucHV0LiAgVGhpcyB0b28gc2hvdWxkIGJlIGJlbmlnbiB3aXRoCisJICogcmVnYXJkIHRvIEJJT1MgY29uZmlndXJhdGlvbi4KKwkgKi8KKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BfSU9fU0VMKTsKKwlkZXZfZGJnKGRldiwgIjogRGF0YSByZWFkIGZyb20gR1BfSU9fU0VMID0gMHglMDh4XG4iLAorCQkJCQljb25maWdfZGF0YSk7CisJY29uZmlnX2RhdGEgJj0gfmFsbF9uYXNfbGVkOworCWNvbmZpZ19kYXRhIHw9IE5BU19SRUNPVkVSWTsKKwlvdXRsKGNvbmZpZ19kYXRhLCBuYXNfZ3Bpb19pb19iYXNlICsgR1BfSU9fU0VMKTsKKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BfSU9fU0VMKTsKKwlkZXZfZGJnKGRldiwgIjogR1BfSU9fU0VMID0gMHglMDh4XG4iLCBjb25maWdfZGF0YSk7CisKKwkvKgorCSAqIEluIG91ciBmaW5hbCBzeXN0ZW0sIHRoZSBCSU9TIHdpbGwgaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgYWxsCisJICogb2YgdGhlIExFRHMuICBGb3Igbm93LCB3ZSB0dXJuIHRoZW0gYWxsIG9mZiAob3IgTG93KS4KKwkgKi8KKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BfTFZMKTsKKwlkZXZfZGJnKGRldiwgIjogRGF0YSByZWFkIGZyb20gR1BfTFZMID0gMHglMDh4XG4iLCBjb25maWdfZGF0YSk7CisJLyoKKwkgKiBJbiBvdXIgZmluYWwgc3lzdGVtLCB0aGUgQklPUyB3aWxsIGluaXRpYWxpemUgdGhlIGJsaW5rIHN0YXRlIG9mIGFsbAorCSAqIG9mIHRoZSBMRURzLiAgRm9yIG5vdywgd2UgdHVybiBibGluayBvZmYgZm9yIGFsbCBvZiB0aGVtLgorCSAqLworCWNvbmZpZ19kYXRhID0gaW5sKG5hc19ncGlvX2lvX2Jhc2UgKyBHUE9fQkxJTkspOworCWRldl9kYmcoZGV2LCAiOiBEYXRhIHJlYWQgZnJvbSBHUE9fQkxJTksgPSAweCUwOHhcbiIsIGNvbmZpZ19kYXRhKTsKKworCS8qCisJICogQXQgdGhpcyBtb21lbnQsIEkgYW0gdW5zdXJlIGlmIGFueXRoaW5nIG5lZWRzIHRvIGhhcHBlbiB3aXRoIEdQSV9JTlYKKwkgKi8KKwljb25maWdfZGF0YSA9IGlubChuYXNfZ3Bpb19pb19iYXNlICsgR1BJX0lOVik7CisJZGV2X2RiZyhkZXYsICI6IERhdGEgcmVhZCBmcm9tIEdQSV9JTlYgPSAweCUwOHhcbiIsIGNvbmZpZ19kYXRhKTsKKworCXNwaW5fdW5sb2NrKCZuYXNncGlvX2dwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGljaDdfbHBjX2NsZWFudXAoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qCisJICogSWYgd2Ugd2VyZSBnaXZlbiBleGNsdXNpdmUgdXNlIG9mIHRoZSBHUElPCisJICogSS9PIEFkZHJlc3MgcmFuZ2UsIHdlIG11c3QgcmV0dXJuIGl0LgorCSAqLworCWlmIChncF9ncGlvX3Jlc291cmNlKSB7CisJCWRldl9kYmcoZGV2LCAiOiBSZWxlYXNpbmcgR1BJTyBJL08gYWRkcmVzc2VzXG4iKTsKKwkJcmVsZWFzZV9yZWdpb24obmFzX2dwaW9faW9fYmFzZSwgSUNIN19HUElPX1NJWkUpOworCQlncF9ncGlvX3Jlc291cmNlID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBUaGUgT1MgaGFzIGRldGVybWluZWQgdGhhdCB0aGUgTFBDIG9mIHRoZSBJbnRlbCBJQ0g3IFNvdXRoYnJpZGdlIGlzIHByZXNlbnQKKyAqIHNvIHdlIGNhbiByZXRyaXZlIHRoZSByZXF1aXJlZCBvcGVyYXRpb25hbCBpbmZvcm1hdGlvbiBhbmQgcHJlcGFyZSB0aGUgR1BJTy4KKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpuYXNfZ3Bpb19wY2lfZGV2Oworc3RhdGljIGludCBfX2RldmluaXQgaWNoN19scGNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCBzdGF0dXM7CisJdTMyIGdjID0gMDsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCW5hc19ncGlvX3BjaV9kZXYgPSBkZXY7CisJc3RhdHVzID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1CQVNFLCAmZ19wbV9pb19iYXNlKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKKwlnX3BtX2lvX2Jhc2UgJj0gMHgwMDAwMGZmODA7CisKKwlzdGF0dXMgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBHUElPX0NUUkwsICZnYyk7CisJaWYgKCEoR1BJT19FTiAmIGdjKSkgeworCQlzdGF0dXMgPSAtRUVYSVNUOworCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkgICAiRVJST1I6IFRoZSBMUEMgR1BJTyBCbG9jayBoYXMgbm90IGJlZW4gZW5hYmxlZC5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0dXMgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBHUElPX0JBU0UsICZuYXNfZ3Bpb19pb19iYXNlKTsKKwlpZiAoMCA+IHN0YXR1cykgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJVbmFibGUgdG8gcmVhZCBHUElPQkFTRS5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJZGV2X2RiZygmZGV2LT5kZXYsICI6IEdQSU9CQVNFID0gMHglMDh4XG4iLCBuYXNfZ3Bpb19pb19iYXNlKTsKKwluYXNfZ3Bpb19pb19iYXNlICY9IDB4MDAwMDBmZmMwOworCisJLyoKKwkgKiBJbnN1cmUgdGhhdCB3ZSBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIEdQSU8gSS9PIGFkZHJlc3MgcmFuZ2UuCisJICovCisJZ3BfZ3Bpb19yZXNvdXJjZSA9IHJlcXVlc3RfcmVnaW9uKG5hc19ncGlvX2lvX2Jhc2UsIElDSDdfR1BJT19TSVpFLAorCQkJCQkgIEtCVUlMRF9NT0ROQU1FKTsKKwlpZiAoTlVMTCA9PSBncF9ncGlvX3Jlc291cmNlKSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAiRVJST1IgVW5hYmxlIHRvIHJlZ2lzdGVyIEdQSU8gSS9PIGFkZHJlc3Nlcy5cbiIpOworCQlzdGF0dXMgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBHUElPIGZvciBOQVMvSG9tZSBTZXJ2ZXIgVXNlCisJICovCisJaWNoN19ncGlvX2luaXQoJmRldi0+ZGV2KTsKKworb3V0OgorCWlmIChzdGF0dXMpIHsKKwkJaWNoN19scGNfY2xlYW51cCgmZGV2LT5kZXYpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgaWNoN19scGNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWNoN19scGNfY2xlYW51cCgmZGV2LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworfQorCisvKgorICogcGNpX2RyaXZlciBzdHJ1Y3R1cmUgcGFzc2VkIHRvIHRoZSBQQ0kgbW9kdWxlcworICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmFzX2dwaW9fcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCS5pZF90YWJsZSA9IGljaDdfbHBjX3BjaV9pZCwKKwkucHJvYmUgPSBpY2g3X2xwY19wcm9iZSwKKwkucmVtb3ZlID0gaWNoN19scGNfcmVtb3ZlLAorfTsKKworc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgKmdldF9jbGFzc2Rldl9mb3JfbGVkX25yKGludCBucikKK3sKKwlzdHJ1Y3QgbmFzZ3Bpb19sZWQgKm5hc19sZWQgPSAmbmFzZ3Bpb19sZWRzW25yXTsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSAmbmFzX2xlZC0+bGVkX2NkZXY7CisJcmV0dXJuIGxlZDsKK30KKworCitzdGF0aWMgdm9pZCBzZXRfcG93ZXJfbGlnaHRfYW1iZXJfbm9ibGluayh2b2lkKQoreworCXN0cnVjdCBuYXNncGlvX2xlZCAqYW1iZXIgPSBnZXRfbGVkX25hbWVkKCJwb3dlcjphbWJlcjpwb3dlciIpOworCXN0cnVjdCBuYXNncGlvX2xlZCAqYmx1ZSA9IGdldF9sZWRfbmFtZWQoInBvd2VyOmJsdWU6cG93ZXIiKTsKKworCWlmICghYW1iZXIgfHwgIWJsdWUpCisJCXJldHVybjsKKwkvKgorCSAqIExFRF9PRkYgaW1wbGllcyBkaXNhYmxpbmcgZnV0dXJlIGJsaW5raW5nCisJICovCisJcHJfZGVidWcoInNldHRpbmcgYmx1ZSBvZmYgYW5kIGFtYmVyIG9uXG4iKTsKKworCW5hc2dwaW9fbGVkX3NldF9icmlnaHRuZXNzKCZibHVlLT5sZWRfY2RldiwgTEVEX09GRik7CisJbmFzZ3Bpb19sZWRfc2V0X2JyaWdodG5lc3MoJmFtYmVyLT5sZWRfY2RldiwgTEVEX0ZVTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBuYXNfbGVkX2JsaW5rX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgYmxpbmtpbmcgPSAwOworCWlmIChuYXNncGlvX2xlZF9nZXRfYXR0cihsZWQsIEdQT19CTElOSykpCisJCWJsaW5raW5nID0gMTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYmxpbmtpbmcpOworfQorCitzdGF0aWMgc3NpemVfdCBuYXNfbGVkX2JsaW5rX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWludCByZXQ7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBibGlua19zdGF0ZTsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZibGlua19zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5hc2dwaW9fbGVkX3NldF9hdHRyKGxlZCwgR1BPX0JMSU5LLCBibGlua19zdGF0ZSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJsaW5rLCAwNjQ0LCBuYXNfbGVkX2JsaW5rX3Nob3csIG5hc19sZWRfYmxpbmtfc3RvcmUpOworCitzdGF0aWMgaW50IHJlZ2lzdGVyX25hc2dwaW9fbGVkKGludCBsZWRfbnIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbmFzZ3Bpb19sZWQgKm5hc19sZWQgPSAmbmFzZ3Bpb19sZWRzW2xlZF9ucl07CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gZ2V0X2NsYXNzZGV2X2Zvcl9sZWRfbnIobGVkX25yKTsKKworCWxlZC0+bmFtZSA9IG5hc19sZWQtPm5hbWU7CisJbGVkLT5icmlnaHRuZXNzID0gTEVEX09GRjsKKwlpZiAobmFzZ3Bpb19sZWRfZ2V0X2F0dHIobGVkLCBHUF9MVkwpKQorCQlsZWQtPmJyaWdodG5lc3MgPSBMRURfRlVMTDsKKwlsZWQtPmJyaWdodG5lc3Nfc2V0ID0gbmFzZ3Bpb19sZWRfc2V0X2JyaWdodG5lc3M7CisJbGVkLT5ibGlua19zZXQgPSBuYXNncGlvX2xlZF9zZXRfYmxpbms7CisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZuYXNfZ3Bpb19wY2lfZGV2LT5kZXYsIGxlZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobGVkLT5kZXYsICZkZXZfYXR0cl9ibGluayk7CisJaWYgKHJldCkKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIobGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX25hc2dwaW9fbGVkKGludCBsZWRfbnIpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkID0gZ2V0X2NsYXNzZGV2X2Zvcl9sZWRfbnIobGVkX25yKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihsZWQpOworCWRldmljZV9yZW1vdmVfZmlsZShsZWQtPmRldiwgJmRldl9hdHRyX2JsaW5rKTsKK30KKy8qCisgKiBtb2R1bGUgbG9hZC9pbml0aWFsaXphdGlvbgorICovCitzdGF0aWMgaW50IF9faW5pdCBuYXNfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisJaW50IG5yX2RldmljZXMgPSAwOworCisJbnJfZGV2aWNlcyA9IGRtaV9jaGVja19zeXN0ZW0obmFzX2xlZF93aGl0ZWxpc3QpOworCWlmIChub2RldGVjdCkgeworCQlwcl9pbmZvKCJza2lwcGluZyBoYXJkd2FyZSBhdXRvZGV0ZWN0aW9uXG4iKTsKKwkJcHJfaW5mbygiUGxlYXNlIHNlbmQgJ2RtaWRlY29kZScgb3V0cHV0IHRvIGRhdmVAc3I3MS5uZXRcbiIpOworCQlucl9kZXZpY2VzKys7CisJfQorCisJaWYgKG5yX2RldmljZXMgPD0gMCkgeworCQlwcl9pbmZvKCJubyBMRUQgZGV2aWNlcyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByX2luZm8oInJlZ2lzdGVyaW5nIFBDSSBkcml2ZXJcbiIpOworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5hc19ncGlvX3BjaV9kcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFzZ3Bpb19sZWRzKTsgaSsrKSB7CisJCXJldCA9IHJlZ2lzdGVyX25hc2dwaW9fbGVkKGkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZXJyOworCX0KKwkvKgorCSAqIFdoZW4gdGhlIHN5c3RlbSBwb3dlcnMgb24sIHRoZSBCSU9TIGxlYXZlcyB0aGUgcG93ZXIKKwkgKiBsaWdodCBibHVlIGFuZCBibGlua2luZy4gIFRoaXMgd2lsbCB0dXJuIGl0IHNvbGlkCisJICogYW1iZXIgb25jZSB0aGUgZHJpdmVyIGlzIGxvYWRlZC4KKwkgKi8KKwlzZXRfcG93ZXJfbGlnaHRfYW1iZXJfbm9ibGluaygpOworCXJldHVybiAwOworb3V0X2VycjoKKwlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCXVucmVnaXN0ZXJfbmFzZ3Bpb19sZWQoaSk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuYXNfZ3Bpb19wY2lfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogbW9kdWxlIHVubG9hZAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbmFzX2dwaW9fZXhpdCh2b2lkKQoreworCWludCBpOworCXByX2luZm8oIlVucmVnaXN0ZXJpbmcgZHJpdmVyXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYXNncGlvX2xlZHMpOyBpKyspCisJCXVucmVnaXN0ZXJfbmFzZ3Bpb19sZWQoaSk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuYXNfZ3Bpb19wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobmFzX2dwaW9faW5pdCk7Cittb2R1bGVfZXhpdChuYXNfZ3Bpb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMgYi9kcml2ZXJzL2xndWVzdC9zZWdtZW50cy5jCmluZGV4IDk1MWM1N2IuLmVkZTQ2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3Qvc2VnbWVudHMuYwpAQCAtMTc5LDggKzE3OSwxMCBAQAogCSAqIFdlIGFzc3VtZSB0aGUgR3Vlc3QgaGFzIHRoZSBzYW1lIG51bWJlciBvZiBHRFQgZW50cmllcyBhcyB0aGUKIAkgKiBIb3N0LCBvdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBHdWVzdCBHRFQuCiAJICovCi0JaWYgKG51bSA+PSBBUlJBWV9TSVpFKGNwdS0+YXJjaC5nZHQpKQorCWlmIChudW0gPj0gQVJSQVlfU0laRShjcHUtPmFyY2guZ2R0KSkgewogCQlraWxsX2d1ZXN0KGNwdSwgInRvbyBtYW55IGdkdCBlbnRyaWVzICVpIiwgbnVtKTsKKwkJcmV0dXJuOworCX0KIAogCS8qIFNldCBpdCB1cCwgdGhlbiBmaXggaXQuICovCiAJY3B1LT5hcmNoLmdkdFtudW1dLmEgPSBsbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBmNGY1ZjgyLi5kZDNkZmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zODYsNyArMzg2LDkgQEAKIAlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJm1kZGV2LT5hY3RpdmUsICZhbGxfbWRkZXZzX2xvY2spKQogCQlyZXR1cm47CiAJaWYgKCFtZGRldi0+cmFpZF9kaXNrcyAmJiBsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpICYmCi0JICAgICFtZGRldi0+aG9sZF9hY3RpdmUpIHsKKwkgICAgbWRkZXYtPmN0aW1lID09IDAgJiYgIW1kZGV2LT5ob2xkX2FjdGl2ZSkgeworCQkvKiBBcnJheSBpcyBub3QgY29uZmlndXJlZCBhdCBhbGwsIGFuZCBub3QgaGVsZCBhY3RpdmUsCisJCSAqIHNvIGRlc3Ryb3kgaXQgKi8KIAkJbGlzdF9kZWwoJm1kZGV2LT5hbGxfbWRkZXZzKTsKIAkJaWYgKG1kZGV2LT5nZW5kaXNrKSB7CiAJCQkvKiB3ZSBkaWQgYSBwcm9iZSBzbyBuZWVkIHRvIGNsZWFuIHVwLgpAQCAtNDM1NSw3ICs0MzU3LDcgQEAKIAltZGRldi0+YmFycmllcnNfd29yayA9IDE7CiAJbWRkZXYtPm9rX3N0YXJ0X2RlZ3JhZGVkID0gc3RhcnRfZGlydHlfZGVncmFkZWQ7CiAKLQlpZiAoc3RhcnRfcmVhZG9ubHkpCisJaWYgKHN0YXJ0X3JlYWRvbmx5ICYmIG1kZGV2LT5ybyA9PSAwKQogCQltZGRldi0+cm8gPSAyOyAvKiByZWFkLW9ubHksIGJ1dCBzd2l0Y2ggb24gZmlyc3Qgd3JpdGUgKi8KIAogCWVyciA9IG1kZGV2LT5wZXJzLT5ydW4obWRkZXYpOwpAQCAtNDQxOSwzMyArNDQyMSw2IEBACiAKIAlzZXRfY2FwYWNpdHkoZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCi0JLyogSWYgdGhlcmUgaXMgYSBwYXJ0aWFsbHktcmVjb3ZlcmVkIGRyaXZlIHdlIG5lZWQgdG8KLQkgKiBzdGFydCByZWNvdmVyeSBoZXJlLiAgSWYgd2UgbGVhdmUgaXQgdG8gbWRfY2hlY2tfcmVjb3ZlcnksCi0JICogaXQgd2lsbCByZW1vdmUgdGhlIGRyaXZlcyBhbmQgbm90IGRvIHRoZSByaWdodCB0aGluZwotCSAqLwotCWlmIChtZGRldi0+ZGVncmFkZWQgJiYgIW1kZGV2LT5zeW5jX3RocmVhZCkgewotCQlpbnQgc3BhcmVzID0gMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgotCQkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCi0JCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKLQkJCQkvKiBjb21wbGV0ZSBhbiBpbnRlcnJ1cHRlZCByZWNvdmVyeSAqLwotCQkJCXNwYXJlcysrOwotCQlpZiAoc3BhcmVzICYmIG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKLQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7Ci0JCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpOwotCQkJbWRkZXYtPnN5bmNfdGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKG1kX2RvX3N5bmMsCi0JCQkJCQkJCW1kZGV2LAotCQkJCQkJCQkicmVzeW5jIik7Ci0JCQlpZiAoIW1kZGV2LT5zeW5jX3RocmVhZCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBzdGFydCByZXN5bmMiCi0JCQkJICAgICAgICIgdGhyZWFkLi4uXG4iLAotCQkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKLQkJCQkvKiBsZWF2ZSB0aGUgc3BhcmVzIHdoZXJlIHRoZXkgYXJlLCBpdCBzaG91bGRuJ3QgaHVydCAqLwotCQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7Ci0JCQl9Ci0JCX0KLQl9CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7IC8qIHBvc3NpYmx5IGtpY2sgb2ZmIGEgcmVzaGFwZSAqLwogCkBAIC01MjYyLDYgKzUyMzcsMTAgQEAKIAkJbWRkZXYtPm1pbm9yX3ZlcnNpb24gPSBpbmZvLT5taW5vcl92ZXJzaW9uOwogCQltZGRldi0+cGF0Y2hfdmVyc2lvbiA9IGluZm8tPnBhdGNoX3ZlcnNpb247CiAJCW1kZGV2LT5wZXJzaXN0ZW50ID0gIWluZm8tPm5vdF9wZXJzaXN0ZW50OworCQkvKiBlbnN1cmUgbWRkZXZfcHV0IGRvZXNuJ3QgZGVsZXRlIHRoaXMgbm93IHRoYXQgdGhlcmUKKwkJICogaXMgc29tZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24uCisJCSAqLworCQltZGRldi0+Y3RpbWUgICAgICAgICA9IGdldF9zZWNvbmRzKCk7CiAJCXJldHVybiAwOwogCX0KIAltZGRldi0+bWFqb3JfdmVyc2lvbiA9IE1EX01BSk9SX1ZFUlNJT047CkBAIC02NDk0LDEwICs2NDczLDExIEBACiAJCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDI7CiAKIAl0cnlfYWdhaW46Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CisKKwkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpKQogCQkJZ290byBza2lwOwotCQl9CiAJCWZvcl9lYWNoX21kZGV2KG1kZGV2MiwgdG1wKSB7CiAJCQlpZiAobWRkZXYyID09IG1kZGV2KQogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCmluZGV4IGZlNDQ3ODkuLjYyMjNiZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKQEAgLTIwMiwxNCArMjAyLDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzdTsKIAotCWlmICgodGNvZGUgIT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUICYmCi0JICAgICB0Y29kZSAhPSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUKSB8fAotCSAgICBvZmZzZXQgIT0gQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfRkNQX1JFU1BPTlNFIHx8Ci0JICAgIGxlbmd0aCA9PSAwIHx8Ci0JICAgICgoKHU4ICopcGF5bG9hZClbMF0gJiAweGYwKSAhPSAwKSB7Ci0JCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfVFlQRV9FUlJPUik7CisJaWYgKGxlbmd0aCA8IDIgfHwgKCgodTggKilwYXlsb2FkKVswXSAmIDB4ZjApICE9IDApCiAJCXJldHVybjsKLQl9CiAKIAlzdSA9ICgodTggKilwYXlsb2FkKVsxXSAmIDB4NzsKIApAQCAtMjMwLDEwICsyMjQsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZub2RlX2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGZkdHYpIHsKKwlpZiAoZmR0dikKIAkJYXZjX3JlY3YoZmR0diwgcGF5bG9hZCwgbGVuZ3RoKTsKLQkJZndfc2VuZF9yZXNwb25zZShjYXJkLCByZXF1ZXN0LCBSQ09ERV9DT01QTEVURSk7Ci0JfQogfQogCiBzdGF0aWMgc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciBmY3BfaGFuZGxlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jCmluZGV4IDNjY2M4YWYuLjJiZjU3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYwpAQCAtMTI0LDE1ICsxMjQsMTIgQEAKIAlhdG9taWNfdCByeGNsa19kaXZpZGVyOwogCWF0b21pY190IHJ4X2ludmVydDsKIAotCXN0cnVjdCBrZmlmbyAqcnhfa2ZpZm87CisJc3RydWN0IGtmaWZvIHJ4X2tmaWZvOwogCXNwaW5sb2NrX3Qgcnhfa2ZpZm9fbG9jazsKIAogCXN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzIHR4X3BhcmFtczsKIAlzdHJ1Y3QgbXV0ZXggdHhfcGFyYW1zX2xvY2s7CiAJYXRvbWljX3QgdHhjbGtfZGl2aWRlcjsKLQotCXN0cnVjdCBrZmlmbyAqdHhfa2ZpZm87Ci0Jc3BpbmxvY2tfdCB0eF9rZmlmb19sb2NrOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gyMzg4OF9pcl9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKQEAgLTUyMiw2ICs1MTksNyBAQAogewogCXN0cnVjdCBjeDIzODg4X2lyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHN0YXRlLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXUzMiBjbnRybCA9IGN4MjM4ODhfaXJfcmVhZDQoZGV2LCBDWDIzODg4X0lSX0NOVFJMX1JFRyk7CiAJdTMyIGlycWVuID0gY3gyMzg4OF9pcl9yZWFkNChkZXYsIENYMjM4ODhfSVJfSVJRRU5fUkVHKTsKQEAgLTU5NCw4ICs1OTIsOSBAQAogCQkJaWYgKGkgPT0gMCkKIAkJCQlicmVhazsKIAkJCWogPSBpICogc2l6ZW9mKHUzMik7Ci0JCQlrID0ga2ZpZm9fcHV0KHN0YXRlLT5yeF9rZmlmbywKLQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqKTsKKwkJCWsgPSBrZmlmb19pbl9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqLAorCQkJCSAgICAgICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7CiAJCQlpZiAoayAhPSBqKQogCQkJCWtyb3IrKzsgLyogcnhfa2ZpZm8gb3ZlciBydW4gKi8KIAkJfQpAQCAtNjMxLDggKzYzMCwxMSBAQAogCQljeDIzODg4X2lyX3dyaXRlNChkZXYsIENYMjM4ODhfSVJfQ05UUkxfUkVHLCBjbnRybCk7CiAJCSpoYW5kbGVkID0gdHJ1ZTsKIAl9Ci0JaWYgKGtmaWZvX2xlbihzdGF0ZS0+cnhfa2ZpZm8pID49IENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSAvIDIpCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKKwlpZiAoa2ZpZm9fbGVuKCZzdGF0ZS0+cnhfa2ZpZm8pID49IENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRSAvIDIpCiAJCWV2ZW50cyB8PSBWNEwyX1NVQkRFVl9JUl9SWF9GSUZPX1NFUlZJQ0VfUkVROworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CiAKIAlpZiAoZXZlbnRzKQogCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIFY0TDJfU1VCREVWX0lSX1JYX05PVElGWSwgJmV2ZW50cyk7CkBAIC02NTcsNyArNjU5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbiA9IGtmaWZvX2dldChzdGF0ZS0+cnhfa2ZpZm8sIGJ1Ziwgbik7CisJbiA9IGtmaWZvX291dF9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywgYnVmLCBuLCAmc3RhdGUtPnJ4X2tmaWZvX2xvY2spOwogCiAJbiAvPSBzaXplb2YodTMyKTsKIAkqbnVtID0gbiAqIHNpemVvZih1MzIpOwpAQCAtNzg1LDcgKzc4NywxMiBAQAogCW8tPmludGVycnVwdF9lbmFibGUgPSBwLT5pbnRlcnJ1cHRfZW5hYmxlOwogCW8tPmVuYWJsZSA9IHAtPmVuYWJsZTsKIAlpZiAocC0+ZW5hYmxlKSB7Ci0JCWtmaWZvX3Jlc2V0KHN0YXRlLT5yeF9rZmlmbyk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CisJCWtmaWZvX3Jlc2V0KCZzdGF0ZS0+cnhfa2ZpZm8pOworCQkvKiByZXNldCB0eF9maWZvIHRvbyBpZiB0aGVyZSBpcyBvbmUuLi4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHAtPmludGVycnVwdF9lbmFibGUpCiAJCQlpcnFlbmFibGVfcngoZGV2LCBJUlFFTl9SU0UgfCBJUlFFTl9SVEUgfCBJUlFFTl9ST0UpOwogCQljb250cm9sX3J4X2VuYWJsZShkZXYsIHAtPmVuYWJsZSk7CkBAIC04OTIsNyArODk5LDYgQEAKIAlvLT5pbnRlcnJ1cHRfZW5hYmxlID0gcC0+aW50ZXJydXB0X2VuYWJsZTsKIAlvLT5lbmFibGUgPSBwLT5lbmFibGU7CiAJaWYgKHAtPmVuYWJsZSkgewotCQlrZmlmb19yZXNldChzdGF0ZS0+dHhfa2ZpZm8pOwogCQlpZiAocC0+aW50ZXJydXB0X2VuYWJsZSkKIAkJCWlycWVuYWJsZV90eChkZXYsIElSUUVOX1RTRSk7CiAJCWNvbnRyb2xfdHhfZW5hYmxlKGRldiwgcC0+ZW5hYmxlKTsKQEAgLTExNjgsMTkgKzExNzQsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7Ci0Jc3RhdGUtPnJ4X2tmaWZvID0ga2ZpZm9fYWxsb2MoQ1gyMzg4OF9JUl9SWF9LRklGT19TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAgICZzdGF0ZS0+cnhfa2ZpZm9fbG9jayk7Ci0JaWYgKHN0YXRlLT5yeF9rZmlmbyA9PSBOVUxMKQorCWlmIChrZmlmb19hbGxvYygmc3RhdGUtPnJ4X2tmaWZvLCBDWDIzODg4X0lSX1JYX0tGSUZPX1NJWkUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNwaW5fbG9ja19pbml0KCZzdGF0ZS0+dHhfa2ZpZm9fbG9jayk7Ci0Jc3RhdGUtPnR4X2tmaWZvID0ga2ZpZm9fYWxsb2MoQ1gyMzg4OF9JUl9UWF9LRklGT19TSVpFLCBHRlBfS0VSTkVMLAotCQkJCSAgICAgICZzdGF0ZS0+dHhfa2ZpZm9fbG9jayk7Ci0JaWYgKHN0YXRlLT50eF9rZmlmbyA9PSBOVUxMKSB7Ci0JCWtmaWZvX2ZyZWUoc3RhdGUtPnJ4X2tmaWZvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJc3RhdGUtPmRldiA9IGRldjsKIAlzdGF0ZS0+aWQgPSBWNEwyX0lERU5UX0NYMjM4ODhfSVI7CiAJc3RhdGUtPnJldiA9IDA7CkBAIC0xMjExLDggKzEyMDcsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzKSk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGlyLCB0eF9zX3BhcmFtZXRlcnMsICZkZWZhdWx0X3BhcmFtcyk7CiAJfSBlbHNlIHsKLQkJa2ZpZm9fZnJlZShzdGF0ZS0+cnhfa2ZpZm8pOwotCQlrZmlmb19mcmVlKHN0YXRlLT50eF9rZmlmbyk7CisJCWtmaWZvX2ZyZWUoJnN0YXRlLT5yeF9rZmlmbyk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMjMxLDggKzEyMjYsNyBAQAogCiAJc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCWtmaWZvX2ZyZWUoc3RhdGUtPnJ4X2tmaWZvKTsKLQlrZmlmb19mcmVlKHN0YXRlLT50eF9rZmlmbyk7CisJa2ZpZm9fZnJlZSgmc3RhdGUtPnJ4X2tmaWZvKTsKIAlrZnJlZShzdGF0ZSk7CiAJLyogTm90aGluZyBtb3JlIHRvIGZyZWUoKSBhcyBzdGF0ZSBoZWxkIHRoZSBhY3R1YWwgdjRsMl9zdWJkZXYgb2JqZWN0ICovCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCmluZGV4IDZmZmE2NGMuLmI0MjE4NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCkBAIC04MDAsOCArODAwLDggQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJaWYgKG1leWUubWNoaXBfbW9kZSA9PSBNQ0hJUF9ISUNfTU9ERV9DT05UX09VVCkgewotCQlpZiAoa2ZpZm9fZ2V0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAotCQkJICAgICAgc2l6ZW9mKGludCkpICE9IHNpemVvZihpbnQpKSB7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKCZtZXllLmdyYWJxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCSAgICAgIHNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKSAhPSBzaXplb2YoaW50KSkgewogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CkBAIC04MTEsNyArODExLDggQEAKIAkJbWV5ZS5ncmFiX2J1ZmZlcltyZXFucl0uc3RhdGUgPSBNRVlFX0JVRl9ET05FOwogCQlkb19nZXR0aW1lb2ZkYXkoJm1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnRpbWVzdGFtcCk7CiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnNlcXVlbmNlID0gc2VxdWVuY2UrKzsKLQkJa2ZpZm9fcHV0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLCBzaXplb2YoaW50KSk7CisJCWtmaWZvX2luX2xvY2tlZCgmbWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCisJCQkJc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1leWUucHJvY19saXN0KTsKIAl9IGVsc2UgewogCQlpbnQgc2l6ZTsKQEAgLTgyMCw4ICs4MjEsOCBAQAogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJZ290byBhZ2FpbjsKIAkJfQotCQlpZiAoa2ZpZm9fZ2V0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAotCQkJICAgICAgc2l6ZW9mKGludCkpICE9IHNpemVvZihpbnQpKSB7CisJCWlmIChrZmlmb19vdXRfbG9ja2VkKCZtZXllLmdyYWJxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwKKwkJCSAgICAgIHNpemVvZihpbnQpLCAmbWV5ZS5ncmFicV9sb2NrKSAhPSBzaXplb2YoaW50KSkgewogCQkJbWNoaXBfZnJlZV9mcmFtZSgpOwogCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtODMxLDcgKzgzMiw4IEBACiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnN0YXRlID0gTUVZRV9CVUZfRE9ORTsKIAkJZG9fZ2V0dGltZW9mZGF5KCZtZXllLmdyYWJfYnVmZmVyW3JlcW5yXS50aW1lc3RhbXApOwogCQltZXllLmdyYWJfYnVmZmVyW3JlcW5yXS5zZXF1ZW5jZSA9IHNlcXVlbmNlKys7Ci0JCWtmaWZvX3B1dChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZyZXFuciwgc2l6ZW9mKGludCkpOworCQlrZmlmb19pbl9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkJCXNpemVvZihpbnQpLCAmbWV5ZS5kb25lcV9sb2NrKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZtZXllLnByb2NfbGlzdCk7CiAJfQogCW1jaGlwX2ZyZWVfZnJhbWUoKTsKQEAgLTg1OSw4ICs4NjEsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1FWUVfTUFYX0JVRk5CUlM7IGkrKykKIAkJbWV5ZS5ncmFiX2J1ZmZlcltpXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKLQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKLQlrZmlmb19yZXNldChtZXllLmRvbmVxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5ncmFicSk7CisJa2ZpZm9fcmVzZXQoJm1leWUuZG9uZXEpOwogCXJldHVybiAwOwogfQogCkBAIC05MzMsNyArOTM1LDggQEAKIAkJbWNoaXBfY29udF9jb21wcmVzc2lvbl9zdGFydCgpOwogCiAJbWV5ZS5ncmFiX2J1ZmZlclsqbmJdLnN0YXRlID0gTUVZRV9CVUZfVVNJTkc7Ci0Ja2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopbmIsIHNpemVvZihpbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopbmIsIHNpemVvZihpbnQpLAorCQkJICZtZXllLmdyYWJxX2xvY2spOwogCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtOTY1LDcgKzk2OCw5IEBACiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgTUVZRV9CVUZfRE9ORToKIAkJbWV5ZS5ncmFiX2J1ZmZlclsqaV0uc3RhdGUgPSBNRVlFX0JVRl9VTlVTRUQ7Ci0JCWtmaWZvX2dldChtZXllLmRvbmVxLCAodW5zaWduZWQgY2hhciAqKSZ1bnVzZWQsIHNpemVvZihpbnQpKTsKKwkJaWYgKGtmaWZvX291dF9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnVudXNlZCwKKwkJCQlzaXplb2YoaW50KSwgJm1leWUuZG9uZXFfbG9jaykgIT0gc2l6ZW9mKGludCkpCisJCQkJCWJyZWFrOwogCX0KIAkqaSA9IG1leWUuZ3JhYl9idWZmZXJbKmldLnNpemU7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwpAQCAtMTQ1Miw3ICsxNDU3LDggQEAKIAlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOwogCWJ1Zi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKIAltZXllLmdyYWJfYnVmZmVyW2J1Zi0+aW5kZXhdLnN0YXRlID0gTUVZRV9CVUZfVVNJTkc7Ci0Ja2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsIHNpemVvZihpbnQpKTsKKwlrZmlmb19pbl9sb2NrZWQoJm1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsCisJCQlzaXplb2YoaW50KSwgJm1leWUuZ3JhYnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0xNDY3LDE5ICsxNDczLDE5IEBACiAKIAltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCi0JaWYgKGtmaWZvX2xlbihtZXllLmRvbmVxKSA9PSAwICYmIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJaWYgKGtmaWZvX2xlbigmbWV5ZS5kb25lcSkgPT0gMCAmJiBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWV5ZS5wcm9jX2xpc3QsCi0JCQkJICAgICBrZmlmb19sZW4obWV5ZS5kb25lcSkgIT0gMCkgPCAwKSB7CisJCQkJICAgICBrZmlmb19sZW4oJm1leWUuZG9uZXEpICE9IDApIDwgMCkgewogCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCi0JaWYgKCFrZmlmb19nZXQobWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmcmVxbnIsCi0JCSAgICAgICBzaXplb2YoaW50KSkpIHsKKwlpZiAoIWtmaWZvX291dF9sb2NrZWQoJm1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAorCQkgICAgICAgc2l6ZW9mKGludCksICZtZXllLmRvbmVxX2xvY2spKSB7CiAJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0xNTI5LDggKzE1MzUsOCBAQAogewogCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJbWNoaXBfaGljX3N0b3AoKTsKLQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKLQlrZmlmb19yZXNldChtZXllLmRvbmVxKTsKKwlrZmlmb19yZXNldCgmbWV5ZS5ncmFicSk7CisJa2ZpZm9fcmVzZXQoJm1leWUuZG9uZXEpOwogCiAJZm9yIChpID0gMDsgaSA8IE1FWUVfTUFYX0JVRk5CUlM7IGkrKykKIAkJbWV5ZS5ncmFiX2J1ZmZlcltpXS5zdGF0ZSA9IE1FWUVfQlVGX1VOVVNFRDsKQEAgLTE1NzIsNyArMTU3OCw3IEBACiAKIAltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCXBvbGxfd2FpdChmaWxlLCAmbWV5ZS5wcm9jX2xpc3QsIHdhaXQpOwotCWlmIChrZmlmb19sZW4obWV5ZS5kb25lcSkpCisJaWYgKGtmaWZvX2xlbigmbWV5ZS5kb25lcSkpCiAJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCXJldHVybiByZXM7CkBAIC0xNzQ1LDE2ICsxNzUxLDE0IEBACiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJm1leWUuZ3JhYnFfbG9jayk7Ci0JbWV5ZS5ncmFicSA9IGtmaWZvX2FsbG9jKHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywgR0ZQX0tFUk5FTCwKLQkJCQkgJm1leWUuZ3JhYnFfbG9jayk7Ci0JaWYgKElTX0VSUihtZXllLmdyYWJxKSkgeworCWlmIChrZmlmb19hbGxvYygmbWV5ZS5ncmFicSwgc2l6ZW9mKGludCkgKiBNRVlFX01BWF9CVUZOQlJTLAorCQkJCUdGUF9LRVJORUwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogZmlmbyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0a2ZpZm9hbGxvYzE7CiAJfQogCXNwaW5fbG9ja19pbml0KCZtZXllLmRvbmVxX2xvY2spOwotCW1leWUuZG9uZXEgPSBrZmlmb19hbGxvYyhzaXplb2YoaW50KSAqIE1FWUVfTUFYX0JVRk5CUlMsIEdGUF9LRVJORUwsCi0JCQkJICZtZXllLmRvbmVxX2xvY2spOwotCWlmIChJU19FUlIobWV5ZS5kb25lcSkpIHsKKwlpZiAoa2ZpZm9fYWxsb2MoJm1leWUuZG9uZXEsIHNpemVvZihpbnQpICogTUVZRV9NQVhfQlVGTkJSUywKKwkJCQlHRlBfS0VSTkVMKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1leWU6IGZpZm8gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIG91dGtmaWZvYWxsb2MyOwogCX0KQEAgLTE4NjgsOSArMTg3Miw5IEBACiBvdXRlbmFibGVkZXY6CiAJc29ueV9waWNfY2FtZXJhX2NvbW1hbmQoU09OWV9QSUNfQ09NTUFORF9TRVRDQU1FUkEsIDApOwogb3V0c29ueXBpZW5hYmxlOgotCWtmaWZvX2ZyZWUobWV5ZS5kb25lcSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5kb25lcSk7CiBvdXRrZmlmb2FsbG9jMjoKLQlrZmlmb19mcmVlKG1leWUuZ3JhYnEpOworCWtmaWZvX2ZyZWUoJm1leWUuZ3JhYnEpOwogb3V0a2ZpZm9hbGxvYzE6CiAJdmZyZWUobWV5ZS5ncmFiX3RlbXApOwogb3V0dm1hbGxvYzoKQEAgLTE5MDEsOCArMTkwNSw4IEBACiAKIAlzb255X3BpY19jYW1lcmFfY29tbWFuZChTT05ZX1BJQ19DT01NQU5EX1NFVENBTUVSQSwgMCk7CiAKLQlrZmlmb19mcmVlKG1leWUuZG9uZXEpOwotCWtmaWZvX2ZyZWUobWV5ZS5ncmFicSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5kb25lcSk7CisJa2ZpZm9fZnJlZSgmbWV5ZS5ncmFicSk7CiAKIAl2ZnJlZShtZXllLmdyYWJfdGVtcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKaW5kZXggNWY3MGExMC4uMTMyMWFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKQEAgLTMwMyw5ICszMDMsOSBAQAogCXN0cnVjdCBtZXllX2dyYWJfYnVmZmVyIGdyYWJfYnVmZmVyW01FWUVfTUFYX0JVRk5CUlNdOwogCWludCB2bWFfdXNlX2NvdW50W01FWUVfTUFYX0JVRk5CUlNdOyAvKiBtbWFwIGNvdW50ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBtdXRleCBmb3Igb3Blbi9tbWFwLi4uICovCi0Jc3RydWN0IGtmaWZvICpncmFicTsJCS8qIHF1ZXVlIGZvciBidWZmZXJzIHRvIGJlIGdyYWJiZWQgKi8KKwlzdHJ1Y3Qga2ZpZm8gZ3JhYnE7CQkvKiBxdWV1ZSBmb3IgYnVmZmVycyB0byBiZSBncmFiYmVkICovCiAJc3BpbmxvY2tfdCBncmFicV9sb2NrOwkJLyogbG9jayBwcm90ZWN0aW5nIHRoZSBxdWV1ZSAqLwotCXN0cnVjdCBrZmlmbyAqZG9uZXE7CQkvKiBxdWV1ZSBmb3IgZ3JhYmJlZCBidWZmZXJzICovCisJc3RydWN0IGtmaWZvIGRvbmVxOwkJLyogcXVldWUgZm9yIGdyYWJiZWQgYnVmZmVycyAqLwogCXNwaW5sb2NrX3QgZG9uZXFfbG9jazsJCS8qIGxvY2sgcHJvdGVjdGluZyB0aGUgcXVldWUgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBwcm9jX2xpc3Q7CS8qIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CS8qIHZpZGVvIGRldmljZSBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDYxMGU5MTQuLjg1YmM2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogewogCXU4CQlfX2lvbWVtICptZW07CiAJaW50CQkgaWk7Ci0JdW5zaWduZWQgbG9uZwkgbWVtX3BoeXM7CisJcmVzb3VyY2Vfc2l6ZV90CSBtZW1fcGh5czsKIAl1bnNpZ25lZCBsb25nCSBwb3J0OwogCXUzMgkJIG1zaXplOwogCXUzMgkJIHBzaXplOwpAQCAtMTY3Nyw4ICsxNjc3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlvYy0+bWVtbWFwID0gbWVtOwotCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIm1lbSA9ICVwLCBtZW1fcGh5cyA9ICVseFxuIiwKLQkgICAgaW9jLT5uYW1lLCBtZW0sIG1lbV9waHlzKSk7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAibWVtID0gJXAsIG1lbV9waHlzID0gJWxseFxuIiwKKwkgICAgaW9jLT5uYW1lLCBtZW0sICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtX3BoeXMpKTsKIAogCWlvYy0+bWVtX3BoeXMgPSBtZW1fcGh5czsKIAlpb2MtPmNoaXAgPSAoU1lTSUZfUkVHUyBfX2lvbWVtICopbWVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fY29uZmlnLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYwppbmRleCBlZmJhNzAyLi4zZDVmNDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYwpAQCAtNDAsOCArNDAsNyBAQAogCiAjZGVmaW5lIFNHX1RBQkxFU0laRQkJMzAKIAotc3RhdGljIGludCBpMm9fY2ZnX2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgbG9uZyBpMm9fY2ZnX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIHN0YXRpYyBzcGlubG9ja190IGkyb19jb25maWdfbG9jazsKIApAQCAtNzUxLDcgKzc1MCw3IEBACiAJbG9ja19rZXJuZWwoKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSTJPR0VUSU9QUzoKLQkJcmV0ID0gaTJvX2NmZ19pb2N0bChOVUxMLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldCA9IGkyb19jZmdfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAljYXNlIEkyT1BBU1NUSFJVMzI6CiAJCXJldCA9IGkyb19jZmdfcGFzc3RocnUzMihmaWxlLCBjbWQsIGFyZyk7CkBAIC05ODQsMTEgKzk4MywxMSBAQAogLyoKICAqIElPQ1RMIEhhbmRsZXIKICAqLwotc3RhdGljIGludCBpMm9fY2ZnX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGkyb19jZmdfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0OwogCisJbG9ja19rZXJuZWwoKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSTJPR0VUSU9QUzoKIAkJcmV0ID0gaTJvX2NmZ19nZXRpb3BzKGFyZyk7CkBAIC0xMDQ0LDcgKzEwNDMsNyBAQAogCQlvc21fZGVidWcoInVua25vd24gaW9jdGwgY2FsbGVkIVxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQotCisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExMTgsNyArMTExNyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb25maWdfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAotCS5pb2N0bCA9IGkyb19jZmdfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gaTJvX2NmZ19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IGkyb19jZmdfY29tcGF0X2lvY3RsLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYwppbmRleCAyMGQyOWJhLi45ZGY5YTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMKQEAgLTU2OCwxMiArNTY4LDEyIEBACiAKIAkJYnl0ZXNbYnl0ZV0gJj0gfigweDAzIDw8IG9mZik7CiAKLQkJc3Bpbl9sb2NrX2lycSgmZC0+bG9jayk7CisJCXJhd19zcGluX2xvY2tfaXJxKCZkLT5sb2NrKTsKIAkJaWYgKGQtPnN0YXR1cyAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQkJYnl0ZXNbYnl0ZV0gfD0gQklUKG9mZiArIDEpOwogCQlpZiAoZC0+c3RhdHVzICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQogCQkJYnl0ZXNbYnl0ZV0gfD0gQklUKG9mZiArIDApOwotCQlzcGluX3VubG9ja19pcnEoJmQtPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkLT5sb2NrKTsKIAogCQllZGdlX2NoYW5nZSAmPSB+QklUKGkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggMWE3YTlmYy4uZTM1NTFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTIwMyw2ICsyMDMsNyBAQAogCiBjb25maWcgQ1M1NTM1X01GR1BUX0RFRkFVTFRfSVJRCiAJaW50CisJZGVwZW5kcyBvbiBDUzU1MzVfTUZHUFQKIAlkZWZhdWx0IDcKIAloZWxwCiAJICBNRkdQVHMgb24gdGhlIENTNTUzNSByZXF1aXJlIGFuIGludGVycnVwdC4gIFRoZSBzZWxlY3RlZCBJUlEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYyBiL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYwppbmRleCBlOWVhZTRhLi4xZWFjNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKKysrIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCkBAIC0zOTEsNiArMzkxLDcgQEAKIAlbRU5DTE9TVVJFX1NUQVRVU19OT1RfSU5TVEFMTEVEXSA9ICJub3QgaW5zdGFsbGVkIiwKIAlbRU5DTE9TVVJFX1NUQVRVU19VTktOT1dOXSA9ICJ1bmtub3duIiwKIAlbRU5DTE9TVVJFX1NUQVRVU19VTkFWQUlMQUJMRV0gPSAidW5hdmFpbGFibGUiLAorCVtFTkNMT1NVUkVfU1RBVFVTX01BWF0gPSBOVUxMLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVuY2xvc3VyZV90eXBlIFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDg1ZjBlOGMuLjFmNTUyYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTg1LDcgKzg1LDE0IEBACiAJbXV0ZXhfbG9jaygmb3Blbl9sb2NrKTsKIAltZC0+dXNhZ2UtLTsKIAlpZiAobWQtPnVzYWdlID09IDApIHsKKwkJaW50IGRldm1haiA9IE1BSk9SKGRpc2tfZGV2dChtZC0+ZGlzaykpOwogCQlpbnQgZGV2aWR4ID0gTUlOT1IoZGlza19kZXZ0KG1kLT5kaXNrKSkgPj4gTU1DX1NISUZUOworCisJCWlmICghZGV2bWFqKQorCQkJZGV2aWR4ID0gbWQtPmRpc2stPmZpcnN0X21pbm9yID4+IE1NQ19TSElGVDsKKworCQlibGtfY2xlYW51cF9xdWV1ZShtZC0+cXVldWUucXVldWUpOworCiAJCV9fY2xlYXJfYml0KGRldmlkeCwgZGV2X3VzZSk7CiAKIAkJcHV0X2Rpc2sobWQtPmRpc2spOwpAQCAtNjEzLDYgKzYyMCw3IEBACiAJcmV0dXJuIDA7CiAKICBvdXQ6CisJbW1jX2NsZWFudXBfcXVldWUoJm1kLT5xdWV1ZSk7CiAJbW1jX2Jsa19wdXQobWQpOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwppbmRleCA0OWU1ODIzLi5jNWE3YTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCkBAIC05MCw5ICs5MCwxMCBAQAogCXN0cnVjdCByZXF1ZXN0ICpyZXE7CiAKIAlpZiAoIW1xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTU1DOiBraWxsaW5nIHJlcXVlc3RzIGZvciBkZWFkIHF1ZXVlXG4iKTsKLQkJd2hpbGUgKChyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxKSkgIT0gTlVMTCkKKwkJd2hpbGUgKChyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxKSkgIT0gTlVMTCkgeworCQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwogCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgLUVJTyk7CisJCX0KIAkJcmV0dXJuOwogCX0KIApAQCAtMjIzLDE3ICsyMjQsMTggQEAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1xLT5xdWV1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogTWFyayB0aGF0IHdlIHNob3VsZCBzdGFydCB0aHJvd2luZyBvdXQgc3RyYWdnbGVycyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlxLT5xdWV1ZWRhdGEgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCiAJLyogTWFrZSBzdXJlIHRoZSBxdWV1ZSBpc24ndCBzdXNwZW5kZWQsIGFzIHRoYXQgd2lsbCBkZWFkbG9jayAqLwogCW1tY19xdWV1ZV9yZXN1bWUobXEpOwogCiAJLyogVGhlbiB0ZXJtaW5hdGUgb3VyIHdvcmtlciB0aHJlYWQgKi8KIAlrdGhyZWFkX3N0b3AobXEtPnRocmVhZCk7CiAKKwkvKiBFbXB0eSB0aGUgcXVldWUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJcS0+cXVldWVkYXRhID0gTlVMTDsKKwlibGtfc3RhcnRfcXVldWUocSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKICAJaWYgKG1xLT5ib3VuY2Vfc2cpCiAgCQlrZnJlZShtcS0+Ym91bmNlX3NnKTsKICAJbXEtPmJvdW5jZV9zZyA9IE5VTEw7CkBAIC0yNDUsOCArMjQ3LDYgQEAKIAkJa2ZyZWUobXEtPmJvdW5jZV9idWYpOwogCW1xLT5ib3VuY2VfYnVmID0gTlVMTDsKIAotCWJsa19jbGVhbnVwX3F1ZXVlKG1xLT5xdWV1ZSk7Ci0KIAltcS0+Y2FyZCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG1tY19jbGVhbnVwX3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IGMxMTE4OTQuLjBlYWM2YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJfQogCiAJY2FyZC0+ZXh0X2NzZC5yZXYgPSBleHRfY3NkW0VYVF9DU0RfUkVWXTsKLQlpZiAoY2FyZC0+ZXh0X2NzZC5yZXYgPiAzKSB7CisJaWYgKGNhcmQtPmV4dF9jc2QucmV2ID4gNSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbmlzZWQgRVhUX0NTRCBzdHJ1Y3R1cmUgIgogCQkJInZlcnNpb24gJWRcbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwKIAkJCWNhcmQtPmV4dF9jc2QucmV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKaW5kZXggY2RiODQ1Yi4uMDZiNjQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKQEAgLTUxNiw3ICs1MTYsOCBAQAogCSAqIFRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIG9uIHRoZSBjYXJkIGlzIGVuY29kZWQgaW5zaWRlCiAJICogdGhlIG9jci4KIAkgKi8KLQljYXJkLT5zZGlvX2Z1bmNzID0gZnVuY3MgPSAob2NyICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJZnVuY3MgPSAob2NyICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJY2FyZC0+c2Rpb19mdW5jcyA9IDA7CiAKIAkvKgogCSAqIElmIG5lZWRlZCwgZGlzY29ubmVjdCBjYXJkIGRldGVjdGlvbiBwdWxsLXVwIHJlc2lzdG9yLgpAQCAtNTI4LDcgKzUyOSw3IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIChidXQgZG9uJ3QgYWRkKSBhbGwgcHJlc2VudCBmdW5jdGlvbnMuCiAJICovCi0JZm9yIChpID0gMDtpIDwgZnVuY3M7aSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGZ1bmNzOyBpKyssIGNhcmQtPnNkaW9fZnVuY3MrKykgewogCQllcnIgPSBzZGlvX2luaXRfZnVuYyhob3N0LT5jYXJkLCBpICsgMSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHJlbW92ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwppbmRleCBkMzc0NjRlLi45ZTA2MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCkBAIC0yNDgsMTIgKzI0OCwxNSBAQAogLyoKICAqIFVucmVnaXN0ZXIgYSBTRElPIGZ1bmN0aW9uIHdpdGggdGhlIGRyaXZlciBtb2RlbCwgYW5kCiAgKiAoZXZlbnR1YWxseSkgZnJlZSBpdC4KKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0aHJvdWdoIGVycm9yIHBhdGhzIHdoZXJlIHNkaW9fYWRkX2Z1bmMoKSB3YXMKKyAqIG5ldmVyIGV4ZWN1dGVkIChiZWNhdXNlIGEgZmFpbHVyZSBvY2N1cnJlZCBhdCBhbiBlYXJsaWVyIHBvaW50KS4KICAqLwogdm9pZCBzZGlvX3JlbW92ZV9mdW5jKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCiB7Ci0JaWYgKHNkaW9fZnVuY19wcmVzZW50KGZ1bmMpKQotCQlkZXZpY2VfZGVsKCZmdW5jLT5kZXYpOworCWlmICghc2Rpb19mdW5jX3ByZXNlbnQoZnVuYykpCisJCXJldHVybjsKIAorCWRldmljZV9kZWwoJmZ1bmMtPmRldik7CiAJcHV0X2RldmljZSgmZnVuYy0+ZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IDlkNDA1YjEuLmNlMWQyODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTQ0LDYgKzQ0LDE5IEBACiAJICBUaGlzIGlzIHNpbGVudCBLY29uZmlnIHN5bWJvbCB0aGF0IGlzIHNlbGVjdGVkIGJ5IHRoZSBkcml2ZXJzIHRoYXQKIAkgIG5lZWQgdG8gb3ZlcndyaXRlIFNESENJIElPIG1lbW9yeSBhY2Nlc3NvcnMuCiAKK2NvbmZpZyBNTUNfU0RIQ0lfQklHX0VORElBTl8zMkJJVF9CWVRFX1NXQVBQRVIKKwlib29sCisJc2VsZWN0IE1NQ19TREhDSV9JT19BQ0NFU1NPUlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBkcml2ZXJzIHJ1bm5pbmcgb24gYmlnIGVuZGlhbiBob3N0cworCSAgYW5kIHBlcmZvcm1pbmcgSS9PIHRvIGEgU0RIQ0kgY29udHJvbGxlciB0aHJvdWdoIGEgYnVzIHRoYXQKKwkgIGltcGxlbWVudHMgYSBoYXJkd2FyZSBieXRlIHN3YXBwZXIgdXNpbmcgYSAzMi1iaXQgZGF0dW0uCisJICBUaGlzIGVuZGlhbiBtYXBwaW5nIG1vZGUgaXMgY2FsbGVkICJkYXRhIGludmFyaWFuY2UiIGFuZAorCSAgaGFzIHRoZSBlZmZlY3Qgb2Ygc2NyYW1ibGluZyB0aGUgYWRkcmVzc2VzIGFuZCBmb3JtYXRzIG9mIGRhdGEKKwkgIGFjY2Vzc2VkIGluIHNpemVzIG90aGVyIHRoYW4gdGhlIGRhdHVtIHNpemUuCisKKwkgIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHRoZSBGcmVlc2NhbGUgZVNESEMgYW5kIE5pbnRlbmRvIFdpaSBTREhDSS4KKwogY29uZmlnIE1NQ19TREhDSV9QQ0kKIAl0cmlzdGF0ZSAiU0RIQ0kgc3VwcG9ydCBvbiBQQ0kgYnVzIgogCWRlcGVuZHMgb24gTU1DX1NESENJICYmIFBDSQpAQCAtNzUsMTEgKzg4LDI5IEBACiBjb25maWcgTU1DX1NESENJX09GCiAJdHJpc3RhdGUgIlNESENJIHN1cHBvcnQgb24gT3BlbkZpcm13YXJlIHBsYXRmb3JtcyIKIAlkZXBlbmRzIG9uIE1NQ19TREhDSSAmJiBQUENfT0YKLQlzZWxlY3QgTU1DX1NESENJX0lPX0FDQ0VTU09SUwogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgT0Ygc3VwcG9ydCBmb3IgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyCi0JICBJbnRlcmZhY2VzLiBTbyBmYXIsIG9ubHkgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyIGlzIGtub3duCi0JICB0byBleGlzdCBvbiBPRiBwbGF0Zm9ybXMuCisJICBJbnRlcmZhY2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTU1DX1NESENJX09GX0VTREhDCisJYm9vbCAiU0RIQ0kgT0Ygc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gTU1DX1NESENJX09GCisJc2VsZWN0IE1NQ19TREhDSV9CSUdfRU5ESUFOXzMyQklUX0JZVEVfU1dBUFBFUgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgRnJlZXNjYWxlIGVTREhDIGNvbnRyb2xsZXIgc3VwcG9ydC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE1NQ19TREhDSV9PRl9ITFdECisJYm9vbCAiU0RIQ0kgT0Ygc3VwcG9ydCBmb3IgdGhlIE5pbnRlbmRvIFdpaSBTREhDSSBjb250cm9sbGVycyIKKwlkZXBlbmRzIG9uIE1NQ19TREhDSV9PRgorCXNlbGVjdCBNTUNfU0RIQ0lfQklHX0VORElBTl8zMkJJVF9CWVRFX1NXQVBQRVIKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKFNESENJKQorCSAgZm91bmQgaW4gdGhlICJIb2xseXdvb2QiIGNoaXBzZXQgb2YgdGhlIE5pbnRlbmRvIFdpaSB2aWRlbyBnYW1lCisJICBjb25zb2xlLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQppbmRleCBkZWQ0ZDhjZC4uM2QyNTNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCkBAIC0xMyw3ICsxMyw2IEBACiBvYmotJChDT05GSUdfTU1DX1NESENJKQkJKz0gc2RoY2kubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9QQ0kpCSs9IHNkaGNpLXBjaS5vCiBvYmotJChDT05GSUdfTU1DX1JJQ09IX01NQykJKz0gcmljb2hfbW1jLm8KLW9iai0kKENPTkZJR19NTUNfU0RIQ0lfT0YpCSs9IHNkaGNpLW9mLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUExURk0pCSs9IHNkaGNpLXBsdGZtLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUzNDKQkrPSBzZGhjaS1zM2Mubwogb2JqLSQoQ09ORklHX01NQ19XQlNEKQkJKz0gd2JzZC5vCkBAIC0zNyw2ICszNiwxMSBAQAogb2JqLSQoQ09ORklHX01NQ19WSUFfU0RNTUMpCSs9IHZpYS1zZG1tYy5vCiBvYmotJChDT05GSUdfU0RIX0JGSU4pCQkrPSBiZmluX3NkaC5vCiAKK29iai0kKENPTkZJR19NTUNfU0RIQ0lfT0YpCSs9IHNkaGNpLW9mLm8KK3NkaGNpLW9mLXkJCQkJOj0gc2RoY2ktb2YtY29yZS5vCitzZGhjaS1vZi0kKENPTkZJR19NTUNfU0RIQ0lfT0ZfRVNESEMpCSs9IHNkaGNpLW9mLWVzZGhjLm8KK3NkaGNpLW9mLSQoQ09ORklHX01NQ19TREhDSV9PRl9ITFdEKQkrPSBzZGhjaS1vZi1obHdkLm8KKwogaWZlcSAoJChDT05GSUdfQ0I3MTBfREVCVUcpLHkpCiAJQ0ZMQUdTLWNiNzEwLW1tYwkrPSAtRERFQlVHCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1jb3JlLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUzMzEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1jb3JlLmMKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBPcGVuRmlybXdhcmUgYmluZGluZ3MgZm9yIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcnM6IFhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+CisgKgkgICAgQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgInNkaGNpLW9mLmgiCisjaW5jbHVkZSAic2RoY2kuaCIKKworI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfQklHX0VORElBTl8zMkJJVF9CWVRFX1NXQVBQRVIKKworLyoKKyAqIFRoZXNlIGFjY2Vzc29ycyBhcmUgZGVzaWduZWQgZm9yIGJpZyBlbmRpYW4gaG9zdHMgZG9pbmcgSS9PIHRvCisgKiBsaXR0bGUgZW5kaWFuIGNvbnRyb2xsZXJzIGluY29ycG9yYXRpbmcgYSAzMi1iaXQgaGFyZHdhcmUgYnl0ZSBzd2FwcGVyLgorICovCisKK3UzMiBzZGhjaV9iZTMyYnNfcmVhZGwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIGluX2JlMzIoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKwordTE2IHNkaGNpX2JlMzJic19yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fYmUxNihob3N0LT5pb2FkZHIgKyAocmVnIF4gMHgyKSk7Cit9CisKK3U4IHNkaGNpX2JlMzJic19yZWFkYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fOChob3N0LT5pb2FkZHIgKyAocmVnIF4gMHgzKSk7Cit9CisKK3ZvaWQgc2RoY2lfYmUzMmJzX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlvdXRfYmUzMihob3N0LT5pb2FkZHIgKyByZWcsIHZhbCk7Cit9CisKK3ZvaWQgc2RoY2lfYmUzMmJzX3dyaXRldyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZykKK3sKKwlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJaW50IGJhc2UgPSByZWcgJiB+MHgzOworCWludCBzaGlmdCA9IChyZWcgJiAweDIpICogODsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBTREhDSV9UUkFOU0ZFUl9NT0RFOgorCQkvKgorCQkgKiBQb3N0cG9uZSB0aGlzIHdyaXRlLCB3ZSBtdXN0IGRvIGl0IHRvZ2V0aGVyIHdpdGggYQorCQkgKiBjb21tYW5kIHdyaXRlIHRoYXQgaXMgZG93biBiZWxvdy4KKwkJICovCisJCW9mX2hvc3QtPnhmZXJfbW9kZV9zaGFkb3cgPSB2YWw7CisJCXJldHVybjsKKwljYXNlIFNESENJX0NPTU1BTkQ6CisJCXNkaGNpX2JlMzJic193cml0ZWwoaG9zdCwgdmFsIDw8IDE2IHwgb2ZfaG9zdC0+eGZlcl9tb2RlX3NoYWRvdywKKwkJCQkgICAgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisJCXJldHVybjsKKwl9CisJY2xyc2V0Yml0c19iZTMyKGhvc3QtPmlvYWRkciArIGJhc2UsIDB4ZmZmZiA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKK30KKwordm9pZCBzZGhjaV9iZTMyYnNfd3JpdGViKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpCit7CisJaW50IGJhc2UgPSByZWcgJiB+MHgzOworCWludCBzaGlmdCA9IChyZWcgJiAweDMpICogODsKKworCWNscnNldGJpdHNfYmUzMihob3N0LT5pb2FkZHIgKyBiYXNlICwgMHhmZiA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTU1DX1NESENJX0JJR19FTkRJQU5fMzJCSVRfQllURV9TV0FQUEVSICovCisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBzZGhjaV9vZl9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCisJcmV0dXJuIG1tY19zdXNwZW5kX2hvc3QoaG9zdC0+bW1jLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2RoY2lfb2ZfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKworCXJldHVybiBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBzZGhjaV9vZl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgc2RoY2lfb2ZfcmVzdW1lIE5VTEwKKworI2VuZGlmCisKK3N0YXRpYyBib29sIF9fZGV2aW5pdCBzZGhjaV9vZl93cF9pbnZlcnRlZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSx3cC1pbnZlcnRlZCIsIE5VTEwpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIE9sZCBkZXZpY2UgdHJlZXMgZG9uJ3QgaGF2ZSB0aGUgd3AtaW52ZXJ0ZWQgcHJvcGVydHkuICovCisJcmV0dXJuIG1hY2hpbmVfaXMobXBjODM3eF9yZGIpIHx8IG1hY2hpbmVfaXMobXBjODM3eF9tZHMpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZGhjaV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXN0cnVjdCBzZGhjaV9vZl9kYXRhICpzZGhjaV9vZl9kYXRhID0gbWF0Y2gtPmRhdGE7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3Q7CisJY29uc3QgdTMyICpjbGs7CisJaW50IHNpemU7CisJaW50IHJldDsKKworCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCisJCXJldHVybiAtRU5PREVWOworCisJaG9zdCA9IHNkaGNpX2FsbG9jX2hvc3QoJm9mZGV2LT5kZXYsIHNpemVvZigqb2ZfaG9zdCkpOworCWlmIChJU19FUlIoaG9zdCkpCisJCXJldHVybiAtRU5PTUVNOworCisJb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBob3N0KTsKKworCWhvc3QtPmlvYWRkciA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoIWhvc3QtPmlvYWRkcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hZGRyX21hcDsKKwl9CisKKwlob3N0LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKCFob3N0LT5pcnEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfbm9faXJxOworCX0KKworCWhvc3QtPmh3X25hbWUgPSBkZXZfbmFtZSgmb2ZkZXYtPmRldik7CisJaWYgKHNkaGNpX29mX2RhdGEpIHsKKwkJaG9zdC0+cXVpcmtzID0gc2RoY2lfb2ZfZGF0YS0+cXVpcmtzOworCQlob3N0LT5vcHMgPSAmc2RoY2lfb2ZfZGF0YS0+b3BzOworCX0KKworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSwxLWJpdC1vbmx5IiwgTlVMTCkpCisJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19GT1JDRV8xX0JJVF9EQVRBOworCisJaWYgKHNkaGNpX29mX3dwX2ludmVydGVkKG5wKSkKKwkJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1Q7CisKKwljbGsgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmc2l6ZSk7CisJaWYgKGNsayAmJiBzaXplID09IHNpemVvZigqY2xrKSAmJiAqY2xrKQorCQlvZl9ob3N0LT5jbG9jayA9ICpjbGs7CisKKwlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZGRfaG9zdDsKKworCXJldHVybiAwOworCitlcnJfYWRkX2hvc3Q6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOworZXJyX25vX2lycToKKwlpb3VubWFwKGhvc3QtPmlvYWRkcik7CitlcnJfYWRkcl9tYXA6CisJc2RoY2lfZnJlZV9ob3N0KGhvc3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNkaGNpX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CisKKwlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAwKTsKKwlzZGhjaV9mcmVlX2hvc3QoaG9zdCk7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOworCWlvdW5tYXAoaG9zdC0+aW9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RoY2lfb2ZfbWF0Y2hbXSA9IHsKKyNpZmRlZiBDT05GSUdfTU1DX1NESENJX09GX0VTREhDCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1lc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZXNkaGMiLCAuZGF0YSA9ICZzZGhjaV9lc2RoYywgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxlc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX01NQ19TREhDSV9PRl9ITFdECisJeyAuY29tcGF0aWJsZSA9ICJuaW50ZW5kbyxob2xseXdvb2Qtc2RoY2kiLCAuZGF0YSA9ICZzZGhjaV9obHdkLCB9LAorI2VuZGlmCisJeyAuY29tcGF0aWJsZSA9ICJnZW5lcmljLXNkaGNpIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzZGhjaV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHNkaGNpX29mX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUgPSAic2RoY2ktb2YiLAorCS5tYXRjaF90YWJsZSA9IHNkaGNpX29mX21hdGNoLAorCS5wcm9iZSA9IHNkaGNpX29mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzZGhjaV9vZl9yZW1vdmUpLAorCS5zdXNwZW5kID0gc2RoY2lfb2Zfc3VzcGVuZCwKKwkucmVzdW1lCT0gc2RoY2lfb2ZfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RoY2lfb2ZfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNkaGNpX29mX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzZGhjaV9vZl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNkaGNpX29mX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc2RoY2lfb2ZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNkaGNpX29mX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgT0YgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPiwgIgorCSAgICAgICJBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWIxMWExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1lc2RoYy5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogRnJlZXNjYWxlIGVTREhDIGNvbnRyb2xsZXIgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3JzOiBYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICoJICAgIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgInNkaGNpLW9mLmgiCisjaW5jbHVkZSAic2RoY2kuaCIKKworLyoKKyAqIE9wcyBhbmQgcXVpcmtzIGZvciB0aGUgRnJlZXNjYWxlIGVTREhDIGNvbnRyb2xsZXIuCisgKi8KKworI2RlZmluZSBFU0RIQ19ETUFfU1lTQ1RMCTB4NDBjCisjZGVmaW5lIEVTREhDX0RNQV9TTk9PUAkJMHgwMDAwMDA0MAorCisjZGVmaW5lIEVTREhDX1NZU1RFTV9DT05UUk9MCTB4MmMKKyNkZWZpbmUgRVNESENfQ0xPQ0tfTUFTSwkweDAwMDBmZmYwCisjZGVmaW5lIEVTREhDX1BSRURJVl9TSElGVAk4CisjZGVmaW5lIEVTREhDX0RJVklERVJfU0hJRlQJNAorI2RlZmluZSBFU0RIQ19DTE9DS19QRVJFTgkweDAwMDAwMDA0CisjZGVmaW5lIEVTREhDX0NMT0NLX0hDS0VOCTB4MDAwMDAwMDIKKyNkZWZpbmUgRVNESENfQ0xPQ0tfSVBHRU4JMHgwMDAwMDAwMQorCisjZGVmaW5lIEVTREhDX0hPU1RfQ09OVFJPTF9SRVMJMHgwNQorCitzdGF0aWMgdTE2IGVzZGhjX3JlYWR3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXUxNiByZXQ7CisKKwlpZiAodW5saWtlbHkocmVnID09IFNESENJX0hPU1RfVkVSU0lPTikpCisJCXJldCA9IGluX2JlMTYoaG9zdC0+aW9hZGRyICsgcmVnKTsKKwllbHNlCisJCXJldCA9IHNkaGNpX2JlMzJic19yZWFkdyhob3N0LCByZWcpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGVzZGhjX3dyaXRldyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZykKK3sKKwlpZiAocmVnID09IFNESENJX0JMT0NLX1NJWkUpIHsKKwkJLyoKKwkJICogVHdvIGxhc3QgRE1BIGJpdHMgYXJlIHJlc2VydmVkLCBhbmQgZmlyc3Qgb25lIGlzIHVzZWQgZm9yCisJCSAqIG5vbi1zdGFuZGFyZCBibGtzeiBvZiA0MDk2IGJ5dGVzIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydAorCQkgKiB5ZXQuIFNvIGNsZWFyIHRoZSBETUEgYm91bmRhcnkgYml0cy4KKwkJICovCisJCXZhbCAmPSB+U0RIQ0lfTUFLRV9CTEtTWigweDcsIDApOworCX0KKwlzZGhjaV9iZTMyYnNfd3JpdGV3KGhvc3QsIHZhbCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfd3JpdGViKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpCit7CisJLyogUHJldmVudCBTREhDSSBjb3JlIGZyb20gd3JpdGluZyByZXNlcnZlZCBiaXRzIChlLmcuIEhJU1BEKS4gKi8KKwlpZiAocmVnID09IFNESENJX0hPU1RfQ09OVFJPTCkKKwkJdmFsICY9IH5FU0RIQ19IT1NUX0NPTlRST0xfUkVTOworCXNkaGNpX2JlMzJic193cml0ZWIoaG9zdCwgdmFsLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBlc2RoY19zZXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwlpbnQgcHJlX2RpdiA9IDI7CisJaW50IGRpdiA9IDE7CisKKwljbHJiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfU1lTVEVNX0NPTlRST0wsIEVTREhDX0NMT0NLX0lQR0VOIHwKKwkJICBFU0RIQ19DTE9DS19IQ0tFTiB8IEVTREhDX0NMT0NLX1BFUkVOIHwgRVNESENfQ0xPQ0tfTUFTSyk7CisKKwlpZiAoY2xvY2sgPT0gMCkKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyAxNiA+IGNsb2NrICYmIHByZV9kaXYgPCAyNTYpCisJCXByZV9kaXYgKj0gMjsKKworCXdoaWxlIChob3N0LT5tYXhfY2xrIC8gcHJlX2RpdiAvIGRpdiA+IGNsb2NrICYmIGRpdiA8IDE2KQorCQlkaXYrKzsKKworCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiZGVzaXJlZCBTRCBjbG9jazogJWQsIGFjdHVhbDogJWRcbiIsCisJCWNsb2NrLCBob3N0LT5tYXhfY2xrIC8gcHJlX2RpdiAvIGRpdik7CisKKwlwcmVfZGl2ID4+PSAxOworCWRpdi0tOworCisJc2V0Yml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX1NZU1RFTV9DT05UUk9MLCBFU0RIQ19DTE9DS19JUEdFTiB8CisJCSAgRVNESENfQ0xPQ0tfSENLRU4gfCBFU0RIQ19DTE9DS19QRVJFTiB8CisJCSAgZGl2IDw8IEVTREhDX0RJVklERVJfU0hJRlQgfCBwcmVfZGl2IDw8IEVTREhDX1BSRURJVl9TSElGVCk7CisJbWRlbGF5KDEwMCk7CitvdXQ6CisJaG9zdC0+Y2xvY2sgPSBjbG9jazsKK30KKworc3RhdGljIGludCBlc2RoY19lbmFibGVfZG1hKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXNldGJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19ETUFfU1lTQ1RMLCBFU0RIQ19ETUFfU05PT1ApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVzZGhjX2dldF9tYXhfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCisJcmV0dXJuIG9mX2hvc3QtPmNsb2NrOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGVzZGhjX2dldF9taW5fY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCisJcmV0dXJuIG9mX2hvc3QtPmNsb2NrIC8gMjU2IC8gMTY7Cit9CisKK3N0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2VzZGhjID0geworCS5xdWlya3MgPSBTREhDSV9RVUlSS19GT1JDRV9CTEtfU1pfMjA0OCB8CisJCSAgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OIHwKKwkJICBTREhDSV9RVUlSS19OT19CVVNZX0lSUSB8CisJCSAgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sgfAorCQkgIFNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLIHwKKwkJICBTREhDSV9RVUlSS19QSU9fTkVFRFNfREVMQVkgfAorCQkgIFNESENJX1FVSVJLX1JFU1RPUkVfSVJRU19BRlRFUl9SRVNFVCB8CisJCSAgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVCwKKwkub3BzID0geworCQkucmVhZGwgPSBzZGhjaV9iZTMyYnNfcmVhZGwsCisJCS5yZWFkdyA9IGVzZGhjX3JlYWR3LAorCQkucmVhZGIgPSBzZGhjaV9iZTMyYnNfcmVhZGIsCisJCS53cml0ZWwgPSBzZGhjaV9iZTMyYnNfd3JpdGVsLAorCQkud3JpdGV3ID0gZXNkaGNfd3JpdGV3LAorCQkud3JpdGViID0gZXNkaGNfd3JpdGViLAorCQkuc2V0X2Nsb2NrID0gZXNkaGNfc2V0X2Nsb2NrLAorCQkuZW5hYmxlX2RtYSA9IGVzZGhjX2VuYWJsZV9kbWEsCisJCS5nZXRfbWF4X2Nsb2NrID0gZXNkaGNfZ2V0X21heF9jbG9jaywKKwkJLmdldF9taW5fY2xvY2sgPSBlc2RoY19nZXRfbWluX2Nsb2NrLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1obHdkLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWhsd2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTExN2YzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1obHdkLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtaGx3ZC5jCisgKgorICogTmludGVuZG8gV2lpIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEdhbWVDdWJlIExpbnV4IFRlYW0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGJlcnQgSGVycmFuegorICoKKyAqIEJhc2VkIG9uIHNkaGNpLW9mLWVzZGhjLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogQXV0aG9yczogWGlhb2JvIFhpZSA8WC5YaWVAZnJlZXNjYWxlLmNvbT4KKyAqCSAgICBBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSAic2RoY2ktb2YuaCIKKyNpbmNsdWRlICJzZGhjaS5oIgorCisvKgorICogT3BzIGFuZCBxdWlya3MgZm9yIHRoZSBOaW50ZW5kbyBXaWkgU0RIQ0kgY29udHJvbGxlcnMuCisgKi8KKworLyoKKyAqIFdlIG5lZWQgYSBzbWFsbCBkZWxheSBhZnRlciBlYWNoIHdyaXRlLCBvciB0aGluZ3MgZ28gaG9ycmlibHkgd3JvbmcuCisgKi8KKyNkZWZpbmUgU0RIQ0lfSExXRF9XUklURV9ERUxBWQk1IC8qIHVzZWNzICovCisKK3N0YXRpYyB2b2lkIHNkaGNpX2hsd2Rfd3JpdGVsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKQoreworCXNkaGNpX2JlMzJic193cml0ZWwoaG9zdCwgdmFsLCByZWcpOworCXVkZWxheShTREhDSV9ITFdEX1dSSVRFX0RFTEFZKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfaGx3ZF93cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJc2RoY2lfYmUzMmJzX3dyaXRldyhob3N0LCB2YWwsIHJlZyk7CisJdWRlbGF5KFNESENJX0hMV0RfV1JJVEVfREVMQVkpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV9obHdkX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQoreworCXNkaGNpX2JlMzJic193cml0ZWIoaG9zdCwgdmFsLCByZWcpOworCXVkZWxheShTREhDSV9ITFdEX1dSSVRFX0RFTEFZKTsKK30KKworc3RydWN0IHNkaGNpX29mX2RhdGEgc2RoY2lfaGx3ZCA9IHsKKwkucXVpcmtzID0gU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfAorCQkgIFNESENJX1FVSVJLXzMyQklUX0RNQV9TSVpFLAorCS5vcHMgPSB7CisJCS5yZWFkbCA9IHNkaGNpX2JlMzJic19yZWFkbCwKKwkJLnJlYWR3ID0gc2RoY2lfYmUzMmJzX3JlYWR3LAorCQkucmVhZGIgPSBzZGhjaV9iZTMyYnNfcmVhZGIsCisJCS53cml0ZWwgPSBzZGhjaV9obHdkX3dyaXRlbCwKKwkJLndyaXRldyA9IHNkaGNpX2hsd2Rfd3JpdGV3LAorCQkud3JpdGViID0gc2RoY2lfaGx3ZF93cml0ZWIsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYWI5MTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICswLDAgQEAKLS8qCi0gKiBPcGVuRmlybXdhcmUgYmluZGluZ3MgZm9yIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIEF1dGhvcnM6IFhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+Ci0gKgkgICAgQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKLSAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgInNkaGNpLmgiCi0KLXN0cnVjdCBzZGhjaV9vZl9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgcXVpcmtzOwotCXN0cnVjdCBzZGhjaV9vcHMgb3BzOwotfTsKLQotc3RydWN0IHNkaGNpX29mX2hvc3QgewotCXVuc2lnbmVkIGludCBjbG9jazsKLQl1MTYgeGZlcl9tb2RlX3NoYWRvdzsKLX07Ci0KLS8qCi0gKiBPcHMgYW5kIHF1aXJrcyBmb3IgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyLgotICovCi0KLSNkZWZpbmUgRVNESENfRE1BX1NZU0NUTAkweDQwYwotI2RlZmluZSBFU0RIQ19ETUFfU05PT1AJCTB4MDAwMDAwNDAKLQotI2RlZmluZSBFU0RIQ19TWVNURU1fQ09OVFJPTAkweDJjCi0jZGVmaW5lIEVTREhDX0NMT0NLX01BU0sJMHgwMDAwZmZmMAotI2RlZmluZSBFU0RIQ19QUkVESVZfU0hJRlQJOAotI2RlZmluZSBFU0RIQ19ESVZJREVSX1NISUZUCTQKLSNkZWZpbmUgRVNESENfQ0xPQ0tfUEVSRU4JMHgwMDAwMDAwNAotI2RlZmluZSBFU0RIQ19DTE9DS19IQ0tFTgkweDAwMDAwMDAyCi0jZGVmaW5lIEVTREhDX0NMT0NLX0lQR0VOCTB4MDAwMDAwMDEKLQotI2RlZmluZSBFU0RIQ19IT1NUX0NPTlRST0xfUkVTCTB4MDUKLQotc3RhdGljIHUzMiBlc2RoY19yZWFkbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKLXsKLQlyZXR1cm4gaW5fYmUzMihob3N0LT5pb2FkZHIgKyByZWcpOwotfQotCi1zdGF0aWMgdTE2IGVzZGhjX3JlYWR3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQotewotCXUxNiByZXQ7Ci0KLQlpZiAodW5saWtlbHkocmVnID09IFNESENJX0hPU1RfVkVSU0lPTikpCi0JCXJldCA9IGluX2JlMTYoaG9zdC0+aW9hZGRyICsgcmVnKTsKLQllbHNlCi0JCXJldCA9IGluX2JlMTYoaG9zdC0+aW9hZGRyICsgKHJlZyBeIDB4MikpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1OCBlc2RoY19yZWFkYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKLXsKLQlyZXR1cm4gaW5fOChob3N0LT5pb2FkZHIgKyAocmVnIF4gMHgzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVzZGhjX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKLXsKLQlvdXRfYmUzMihob3N0LT5pb2FkZHIgKyByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVzZGhjX3dyaXRldyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZykKLXsKLQlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0JaW50IGJhc2UgPSByZWcgJiB+MHgzOwotCWludCBzaGlmdCA9IChyZWcgJiAweDIpICogODsKLQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBTREhDSV9UUkFOU0ZFUl9NT0RFOgotCQkvKgotCQkgKiBQb3N0cG9uZSB0aGlzIHdyaXRlLCB3ZSBtdXN0IGRvIGl0IHRvZ2V0aGVyIHdpdGggYQotCQkgKiBjb21tYW5kIHdyaXRlIHRoYXQgaXMgZG93biBiZWxvdy4KLQkJICovCi0JCW9mX2hvc3QtPnhmZXJfbW9kZV9zaGFkb3cgPSB2YWw7Ci0JCXJldHVybjsKLQljYXNlIFNESENJX0NPTU1BTkQ6Ci0JCWVzZGhjX3dyaXRlbChob3N0LCB2YWwgPDwgMTYgfCBvZl9ob3N0LT54ZmVyX21vZGVfc2hhZG93LAotCQkJICAgICBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKLQkJcmV0dXJuOwotCWNhc2UgU0RIQ0lfQkxPQ0tfU0laRToKLQkJLyoKLQkJICogVHdvIGxhc3QgRE1BIGJpdHMgYXJlIHJlc2VydmVkLCBhbmQgZmlyc3Qgb25lIGlzIHVzZWQgZm9yCi0JCSAqIG5vbi1zdGFuZGFyZCBibGtzeiBvZiA0MDk2IGJ5dGVzIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydAotCQkgKiB5ZXQuIFNvIGNsZWFyIHRoZSBETUEgYm91bmRhcnkgYml0cy4KLQkJICovCi0JCXZhbCAmPSB+U0RIQ0lfTUFLRV9CTEtTWigweDcsIDApOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQl9Ci0JY2xyc2V0Yml0c19iZTMyKGhvc3QtPmlvYWRkciArIGJhc2UsIDB4ZmZmZiA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKLX0KLQotc3RhdGljIHZvaWQgZXNkaGNfd3JpdGViKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpCi17Ci0JaW50IGJhc2UgPSByZWcgJiB+MHgzOwotCWludCBzaGlmdCA9IChyZWcgJiAweDMpICogODsKLQotCS8qIFByZXZlbnQgU0RIQ0kgY29yZSBmcm9tIHdyaXRpbmcgcmVzZXJ2ZWQgYml0cyAoZS5nLiBISVNQRCkuICovCi0JaWYgKHJlZyA9PSBTREhDSV9IT1NUX0NPTlRST0wpCi0JCXZhbCAmPSB+RVNESENfSE9TVF9DT05UUk9MX1JFUzsKLQotCWNscnNldGJpdHNfYmUzMihob3N0LT5pb2FkZHIgKyBiYXNlICwgMHhmZiA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKLX0KLQotc3RhdGljIHZvaWQgZXNkaGNfc2V0X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xvY2spCi17Ci0JaW50IHByZV9kaXYgPSAyOwotCWludCBkaXYgPSAxOwotCi0JY2xyYml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX1NZU1RFTV9DT05UUk9MLCBFU0RIQ19DTE9DS19JUEdFTiB8Ci0JCSAgRVNESENfQ0xPQ0tfSENLRU4gfCBFU0RIQ19DTE9DS19QRVJFTiB8IEVTREhDX0NMT0NLX01BU0spOwotCi0JaWYgKGNsb2NrID09IDApCi0JCWdvdG8gb3V0OwotCi0Jd2hpbGUgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IC8gMTYgPiBjbG9jayAmJiBwcmVfZGl2IDwgMjU2KQotCQlwcmVfZGl2ICo9IDI7Ci0KLQl3aGlsZSAoaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyBkaXYgPiBjbG9jayAmJiBkaXYgPCAxNikKLQkJZGl2Kys7Ci0KLQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImRlc2lyZWQgU0QgY2xvY2s6ICVkLCBhY3R1YWw6ICVkXG4iLAotCQljbG9jaywgaG9zdC0+bWF4X2NsayAvIHByZV9kaXYgLyBkaXYpOwotCi0JcHJlX2RpdiA+Pj0gMTsKLQlkaXYtLTsKLQotCXNldGJpdHMzMihob3N0LT5pb2FkZHIgKyBFU0RIQ19TWVNURU1fQ09OVFJPTCwgRVNESENfQ0xPQ0tfSVBHRU4gfAotCQkgIEVTREhDX0NMT0NLX0hDS0VOIHwgRVNESENfQ0xPQ0tfUEVSRU4gfAotCQkgIGRpdiA8PCBFU0RIQ19ESVZJREVSX1NISUZUIHwgcHJlX2RpdiA8PCBFU0RIQ19QUkVESVZfU0hJRlQpOwotCW1kZWxheSgxMDApOwotb3V0OgotCWhvc3QtPmNsb2NrID0gY2xvY2s7Ci19Ci0KLXN0YXRpYyBpbnQgZXNkaGNfZW5hYmxlX2RtYShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKLXsKLQlzZXRiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfRE1BX1NZU0NUTCwgRVNESENfRE1BX1NOT09QKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfbWF4X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQotewotCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKLQotCXJldHVybiBvZl9ob3N0LT5jbG9jazsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBlc2RoY19nZXRfbWluX2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQotewotCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKLQotCXJldHVybiBvZl9ob3N0LT5jbG9jayAvIDI1NiAvIDE2OwotfQotCi1zdGF0aWMgc3RydWN0IHNkaGNpX29mX2RhdGEgc2RoY2lfZXNkaGMgPSB7Ci0JLnF1aXJrcyA9IFNESENJX1FVSVJLX0ZPUkNFX0JMS19TWl8yMDQ4IHwKLQkJICBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04gfAotCQkgIFNESENJX1FVSVJLX05PX0JVU1lfSVJRIHwKLQkJICBTREhDSV9RVUlSS19OT05TVEFOREFSRF9DTE9DSyB8Ci0JCSAgU0RIQ0lfUVVJUktfREFUQV9USU1FT1VUX1VTRVNfU0RDTEsgfAotCQkgIFNESENJX1FVSVJLX1BJT19ORUVEU19ERUxBWSB8Ci0JCSAgU0RIQ0lfUVVJUktfUkVTVE9SRV9JUlFTX0FGVEVSX1JFU0VUIHwKLQkJICBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VULAotCS5vcHMgPSB7Ci0JCS5yZWFkbCA9IGVzZGhjX3JlYWRsLAotCQkucmVhZHcgPSBlc2RoY19yZWFkdywKLQkJLnJlYWRiID0gZXNkaGNfcmVhZGIsCi0JCS53cml0ZWwgPSBlc2RoY193cml0ZWwsCi0JCS53cml0ZXcgPSBlc2RoY193cml0ZXcsCi0JCS53cml0ZWIgPSBlc2RoY193cml0ZWIsCi0JCS5zZXRfY2xvY2sgPSBlc2RoY19zZXRfY2xvY2ssCi0JCS5lbmFibGVfZG1hID0gZXNkaGNfZW5hYmxlX2RtYSwKLQkJLmdldF9tYXhfY2xvY2sgPSBlc2RoY19nZXRfbWF4X2Nsb2NrLAotCQkuZ2V0X21pbl9jbG9jayA9IGVzZGhjX2dldF9taW5fY2xvY2ssCi0JfSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBzZGhjaV9vZl9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwotCi0JcmV0dXJuIG1tY19zdXNwZW5kX2hvc3QoaG9zdC0+bW1jLCBzdGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2RoY2lfb2ZfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQotewotCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQotCXJldHVybiBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKLX0KLQotI2Vsc2UKLQotI2RlZmluZSBzZGhjaV9vZl9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgc2RoY2lfb2ZfcmVzdW1lIE5VTEwKLQotI2VuZGlmCi0KLXN0YXRpYyBib29sIF9fZGV2aW5pdCBzZGhjaV9vZl93cF9pbnZlcnRlZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSx3cC1pbnZlcnRlZCIsIE5VTEwpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCS8qIE9sZCBkZXZpY2UgdHJlZXMgZG9uJ3QgaGF2ZSB0aGUgd3AtaW52ZXJ0ZWQgcHJvcGVydHkuICovCi0JcmV0dXJuIG1hY2hpbmVfaXMobXBjODM3eF9yZGIpIHx8IG1hY2hpbmVfaXMobXBjODM3eF9tZHMpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzZGhjaV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKLQkJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOwotCXN0cnVjdCBzZGhjaV9vZl9kYXRhICpzZGhjaV9vZl9kYXRhID0gbWF0Y2gtPmRhdGE7Ci0Jc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7Ci0Jc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3Q7Ci0JY29uc3QgdTMyICpjbGs7Ci0JaW50IHNpemU7Ci0JaW50IHJldDsKLQotCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaG9zdCA9IHNkaGNpX2FsbG9jX2hvc3QoJm9mZGV2LT5kZXYsIHNpemVvZigqb2ZfaG9zdCkpOwotCWlmIChJU19FUlIoaG9zdCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7Ci0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBob3N0KTsKLQotCWhvc3QtPmlvYWRkciA9IG9mX2lvbWFwKG5wLCAwKTsKLQlpZiAoIWhvc3QtPmlvYWRkcikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9hZGRyX21hcDsKLQl9Ci0KLQlob3N0LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0JaWYgKCFob3N0LT5pcnEpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfbm9faXJxOwotCX0KLQotCWhvc3QtPmh3X25hbWUgPSBkZXZfbmFtZSgmb2ZkZXYtPmRldik7Ci0JaWYgKHNkaGNpX29mX2RhdGEpIHsKLQkJaG9zdC0+cXVpcmtzID0gc2RoY2lfb2ZfZGF0YS0+cXVpcmtzOwotCQlob3N0LT5vcHMgPSAmc2RoY2lfb2ZfZGF0YS0+b3BzOwotCX0KLQotCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSwxLWJpdC1vbmx5IiwgTlVMTCkpCi0JCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19GT1JDRV8xX0JJVF9EQVRBOwotCi0JaWYgKHNkaGNpX29mX3dwX2ludmVydGVkKG5wKSkKLQkJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1Q7Ci0KLQljbGsgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCAmc2l6ZSk7Ci0JaWYgKGNsayAmJiBzaXplID09IHNpemVvZigqY2xrKSAmJiAqY2xrKQotCQlvZl9ob3N0LT5jbG9jayA9ICpjbGs7Ci0KLQlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9hZGRfaG9zdDsKLQotCXJldHVybiAwOwotCi1lcnJfYWRkX2hvc3Q6Ci0JaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOwotZXJyX25vX2lycToKLQlpb3VubWFwKGhvc3QtPmlvYWRkcik7Ci1lcnJfYWRkcl9tYXA6Ci0Jc2RoY2lfZnJlZV9ob3N0KGhvc3QpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHNkaGNpX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKLXsKLQlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7Ci0KLQlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCAwKTsKLQlzZGhjaV9mcmVlX2hvc3QoaG9zdCk7Ci0JaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOwotCWlvdW5tYXAoaG9zdC0+aW9hZGRyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RoY2lfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWVzZGhjIiwgLmRhdGEgPSAmc2RoY2lfZXNkaGMsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1lc2RoYyIsIC5kYXRhID0gJnNkaGNpX2VzZGhjLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiZnNsLGVzZGhjIiwgLmRhdGEgPSAmc2RoY2lfZXNkaGMsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJnZW5lcmljLXNkaGNpIiwgfSwKLQl7fSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzZGhjaV9vZl9tYXRjaCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHNkaGNpX29mX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUgPSAic2RoY2ktb2YiLAotCS5tYXRjaF90YWJsZSA9IHNkaGNpX29mX21hdGNoLAotCS5wcm9iZSA9IHNkaGNpX29mX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzZGhjaV9vZl9yZW1vdmUpLAotCS5zdXNwZW5kID0gc2RoY2lfb2Zfc3VzcGVuZCwKLQkucmVzdW1lCT0gc2RoY2lfb2ZfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2RoY2lfb2ZfaW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNkaGNpX29mX2RyaXZlcik7Ci19Ci1tb2R1bGVfaW5pdChzZGhjaV9vZl9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHNkaGNpX29mX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc2RoY2lfb2ZfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KHNkaGNpX29mX2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgT0YgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPiwgIgotCSAgICAgICJBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA5YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBPcGVuRmlybXdhcmUgYmluZGluZ3MgZm9yIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcnM6IFhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+CisgKgkgICAgQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fU0RIQ0lfT0ZfSAorI2RlZmluZSBfX1NESENJX09GX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAic2RoY2kuaCIKKworc3RydWN0IHNkaGNpX29mX2RhdGEgeworCXVuc2lnbmVkIGludCBxdWlya3M7CisJc3RydWN0IHNkaGNpX29wcyBvcHM7Cit9OworCitzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCB7CisJdW5zaWduZWQgaW50IGNsb2NrOworCXUxNiB4ZmVyX21vZGVfc2hhZG93OworfTsKKworZXh0ZXJuIHUzMiBzZGhjaV9iZTMyYnNfcmVhZGwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOworZXh0ZXJuIHUxNiBzZGhjaV9iZTMyYnNfcmVhZHcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOworZXh0ZXJuIHU4IHNkaGNpX2JlMzJic19yZWFkYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZyk7CitleHRlcm4gdm9pZCBzZGhjaV9iZTMyYnNfd3JpdGVsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKTsKK2V4dGVybiB2b2lkIHNkaGNpX2JlMzJic193cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpOworZXh0ZXJuIHZvaWQgc2RoY2lfYmUzMmJzX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKTsKKworZXh0ZXJuIHN0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2VzZGhjOworZXh0ZXJuIHN0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2hsd2Q7CisKKyNlbmRpZiAvKiBfX1NESENJX09GX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaAppbmRleCBjZTVmMWQ3Li44NDJmNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCkBAIC04LDYgKzgsOCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KKyNpZm5kZWYgX19TREhDSV9ICisjZGVmaW5lIF9fU0RIQ0lfSAogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtNDA4LDMgKzQxMCw1IEBACiBleHRlcm4gaW50IHNkaGNpX3N1c3BlbmRfaG9zdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgc2RoY2lfcmVzdW1lX2hvc3Qoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwogI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NESENJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCmluZGV4IDc0ZmEwNzUuLmIxM2Y2NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwpAQCAtMjAsMTQgKzIwLDIzIEBACiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNkZWZpbmUgQ0FDSEVMSU5FU0laRQkzMgorCiBzdGF0aWMgdm9pZCBweGEyeHhfbWFwX2ludmFsX2NhY2hlKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIGZyb20sCiAJCQkJICAgICAgc3NpemVfdCBsZW4pCiB7Ci0JZmx1c2hfaW9yZW1hcF9yZWdpb24obWFwLT5waHlzLCBtYXAtPmNhY2hlZCwgZnJvbSwgbGVuKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpbWFwLT5jYWNoZWQgKyBmcm9tOworCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBsZW47CisKKwlzdGFydCAmPSB+KENBQ0hFTElORVNJWkUgLSAxKTsKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJLyogaW52YWxpZGF0ZSBEIGNhY2hlIGxpbmUgKi8KKwkJYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNiwgMSIgOiA6ICJyIiAoc3RhcnQpKTsKKwkJc3RhcnQgKz0gQ0FDSEVMSU5FU0laRTsKKwl9CiB9CiAKIHN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggNzY3ODUzOC4uNjc3Y2Q1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtMjkxLDE0ICsyOTEsNiBAQAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIEZsYXNoIG9uIFNoYXJwIFNMIFNlcmllcyAoQzd4eCArIG90aGVycykiCiAJZGVwZW5kcyBvbiBBUkNIX1BYQQogCi1jb25maWcgTVREX05BTkRfQkFTTEVSX0VYQ0lURQotCXRyaXN0YXRlICAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBCYXNsZXIgZVhjaXRlIgotCWRlcGVuZHMgb24gQkFTTEVSX0VYQ0lURQotCWhlbHAKLSAgICAgICAgICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uIHRoZQotICAgICAgICAgIEJhc2xlciBlWGNpdGUgU21hcnQgQ2FtZXJhLiBJZiBidWlsdCBhcyBhIG1vZHVsZSwgdGhlIGRyaXZlcgotICAgICAgICAgIHdpbGwgYmUgbmFtZWQgZXhjaXRlX25hbmRmbGFzaC4KLQogY29uZmlnIE1URF9OQU5EX0NBRkUKIAl0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBPTFBDIENBRsOJIGNoaXAiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IDQ2MGExZjMuLjE0MDdiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNiBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX0dQSU8pCQkrPSBncGlvLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9PTUFQMikgCQkrPSBvbWFwMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQ01fWDI3MCkJCSs9IGNteDI3MF9uYW5kLm8KLW9iai0kKENPTkZJR19NVERfTkFORF9CQVNMRVJfRVhDSVRFKQkrPSBleGNpdGVfbmFuZGZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9QWEEzeHgpCQkrPSBweGEzeHhfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfVE1JTykJCSs9IHRtaW9fbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfUExBVEZPUk0pCQkrPSBwbGF0X25hbmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9leGNpdGVfbmFuZGZsYXNoLmMgYi9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY2YTZhNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKgotKiAgQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwNyBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRwotKiAgQXV0aG9yOiBUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXIucWJhc2xlcndlYi5jb20+Ci0qICBPcmlnaW5hbCBjb2RlIGJ5IFRoaWVzIE1vZWxsZXIgPHRoaWVzLm1vZWxsZXJAYmFzbGVyd2ViLmNvbT4KLSoKLSogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0qICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qCi0qICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0qICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKgotKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0qICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcm05ay1vY2QuaD4KLQotI2luY2x1ZGUgPGV4Y2l0ZV9uYW5kZmxhc2guaD4KLQotI2RlZmluZSBFWENJVEVfTkFOREZMQVNIX1ZFUlNJT04gIjAuMSIKLQotLyogSS9PIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9EQVRBX0JZVEUgICAweDAwCi0jZGVmaW5lIEVYQ0lURV9OQU5ERkxBU0hfU1RBVFVTX0JZVEUgMHgwYwotI2RlZmluZSBFWENJVEVfTkFOREZMQVNIX0FERFJfQllURSAgIDB4MTAKLSNkZWZpbmUgRVhDSVRFX05BTkRGTEFTSF9DTURfQllURSAgICAweDE0Ci0KLS8qIHByZWZpeCBmb3IgZGVidWcgb3V0cHV0ICovCi1zdGF0aWMgY29uc3QgY2hhciBtb2R1bGVfaWRbXSA9ICJleGNpdGVfbmFuZGZsYXNoIjsKLQotLyoKLSAqIHBhcnRpdGlvbiBkZWZpbml0aW9uCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewotCXsKLQkJLm5hbWUgPSAiZVhjaXRlIFJvb3RGUyIsCi0JCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwKLQl9Ci19OwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqCi1leGNpdGVfbmFuZF9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZCwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCSBjb25zdCBjaGFyICpiYXNlbmFtZSkKLXsKLQljaGFyIGJ1Zls4MF07Ci0KLQlpZiAoc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJXNfJXUiLCBiYXNlbmFtZSwgZC0+aWQpID49IHNpemVvZiBidWYpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGQsIGZsYWdzLCBidWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1leGNpdGVfbmFuZF9tYXBfcmVncyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkLCBjb25zdCBjaGFyICpiYXNlbmFtZSkKLXsKLQl2b2lkICpyZXN1bHQgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqY29uc3QgciA9Ci0JICAgIGV4Y2l0ZV9uYW5kX2dldF9yZXNvdXJjZShkLCBJT1JFU09VUkNFX01FTSwgYmFzZW5hbWUpOwotCi0JaWYgKHIpCi0JCXJlc3VsdCA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgci0+ZW5kICsgMSAtIHItPnN0YXJ0KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBjb250cm9sbGVyIGFuZCBtdGQgaW5mb3JtYXRpb24gKi8KLXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhIHsKLQlzdHJ1Y3QgbXRkX2luZm8gYm9hcmRfbXRkOwotCXN0cnVjdCBuYW5kX2NoaXAgYm9hcmRfY2hpcDsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0Jdm9pZCBfX2lvbWVtICp0Z3Q7Ci19OwotCi0vKiBDb250cm9sIGZ1bmN0aW9uICovCi1zdGF0aWMgdm9pZCBleGNpdGVfbmFuZF9jb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3RybCkKLXsKLQlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqIGNvbnN0IGQgPQotCSAgICBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSwgYm9hcmRfbXRkKTsKLQotCXN3aXRjaCAoY3RybCkgewotCWNhc2UgTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfQ1RSTF9DTEU6Ci0JCWQtPnRndCA9IGQtPnJlZ3MgKyBFWENJVEVfTkFOREZMQVNIX0NNRF9CWVRFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX0NUUkxfQUxFOgotCQlkLT50Z3QgPSBkLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9BRERSX0JZVEU7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfTkNFOgotCQlkLT50Z3QgPSBkLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9EQVRBX0JZVEU7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKLQkJX19yYXdfd3JpdGViKGNtZCwgZC0+dGd0KTsKLX0KLQotLyogUmV0dXJuIDAgaWYgZmxhc2ggaXMgYnVzeSwgMSBpZiByZWFkeSAqLwotc3RhdGljIGludCBleGNpdGVfbmFuZF9kZXZyZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKLXsKLQlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqIGNvbnN0IGRydmRhdGEgPQotCSAgICBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSwgYm9hcmRfbXRkKTsKLQotCXJldHVybiBfX3Jhd19yZWFkYihkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9TVEFUVVNfQllURSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgYnkgZGV2aWNlIGxheWVyIHRvIHJlbW92ZSB0aGUgZHJpdmVyLgotICogVGhlIGJpbmRpbmcgdG8gdGhlIG10ZCBhbmQgYWxsIGFsbG9jYXRlZAotICogcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4KLSAqLwotc3RhdGljIGludCBfX2RldmV4aXQgZXhjaXRlX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZXhjaXRlX25hbmRfZHJ2ZGF0YSAqIGNvbnN0IHRoaXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLQotCWlmICh1bmxpa2VseSghdGhpcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkICVzIHdpdGhvdXQgcHJpdmF0ZSBkYXRhISEiLAotCQkgICAgICAgbW9kdWxlX2lkLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVsZWFzZSBvdXIgbXRkCi0JICogdGhlbiBnbyB0aHJvdWdoIGZyZWVpbmcgdGhlIHJlc291cmNlIHVzZWQKLQkgKi8KLQluYW5kX3JlbGVhc2UoJnRoaXMtPmJvYXJkX210ZCk7Ci0KLQkvKiBmcmVlIHRoZSBjb21tb24gcmVzb3VyY2VzICovCi0JaW91bm1hcCh0aGlzLT5yZWdzKTsKLQlrZnJlZSh0aGlzKTsKLQotCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICIlczogcmVtb3ZlZFxuIiwgbW9kdWxlX2lkKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENhbGxlZCBieSBkZXZpY2UgbGF5ZXIgd2hlbiBpdCBmaW5kcyBhIGRldmljZSBtYXRjaGluZwotICogb25lIG91ciBkcml2ZXIgY2FuIGhhbmRsZS4gVGhpcyBjb2RlIGNoZWNrcyB0byBzZWUgaWYKLSAqIGl0IGNhbiBhbGxvY2F0ZSBhbGwgbmVjZXNzYXJ5IHJlc291cmNlcyB0aGVuIGNhbGxzIHRoZQotICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzLgotKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKmRydmRhdGE7CS8qIHByaXZhdGUgZHJpdmVyIGRhdGEgKi8KLQlzdHJ1Y3QgbmFuZF9jaGlwICpib2FyZF9jaGlwOwkvKiBwcml2YXRlIGZsYXNoIGNoaXAgZGF0YSAqLwotCXN0cnVjdCBtdGRfaW5mbyAqYm9hcmRfbXRkOwkvKiBtdGQgaW5mbyBmb3IgdGhpcyBib2FyZCAqLwotCWludCBzY2FuX3JlczsKLQotCWRydmRhdGEgPSBremFsbG9jKHNpemVvZigqZHJ2ZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghZHJ2ZGF0YSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBkcnZkYXRhXG4iLAotCQkgICAgICAgbW9kdWxlX2lkKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogYmluZCBwcml2YXRlIGRhdGEgaW50byBkcml2ZXIgKi8KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcnZkYXRhKTsKLQotCS8qIGFsbG9jYXRlIGFuZCBtYXAgdGhlIHJlc291cmNlICovCi0JZHJ2ZGF0YS0+cmVncyA9Ci0JCWV4Y2l0ZV9uYW5kX21hcF9yZWdzKHBkZXYsIEVYQ0lURV9OQU5ERkxBU0hfUkVTT1VSQ0VfUkVHUyk7Ci0KLQlpZiAodW5saWtlbHkoIWRydmRhdGEtPnJlZ3MpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXNlcnZlIHJlZ2lzdGVyIHJlZ2lvblxuIiwKLQkJICAgICAgIG1vZHVsZV9pZCk7Ci0JCWtmcmVlKGRydmRhdGEpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQkKLQlkcnZkYXRhLT50Z3QgPSBkcnZkYXRhLT5yZWdzICsgRVhDSVRFX05BTkRGTEFTSF9EQVRBX0JZVEU7Ci0KLQkvKiBpbml0aWFsaXNlIG91ciBjaGlwICovCi0JYm9hcmRfY2hpcCA9ICZkcnZkYXRhLT5ib2FyZF9jaGlwOwotCWJvYXJkX2NoaXAtPklPX0FERFJfUiA9IGJvYXJkX2NoaXAtPklPX0FERFJfVyA9Ci0JCWRydmRhdGEtPnJlZ3MgKyBFWENJVEVfTkFOREZMQVNIX0RBVEFfQllURTsKLQlib2FyZF9jaGlwLT5jbWRfY3RybCA9IGV4Y2l0ZV9uYW5kX2NvbnRyb2w7Ci0JYm9hcmRfY2hpcC0+ZGV2X3JlYWR5ID0gZXhjaXRlX25hbmRfZGV2cmVhZHk7Ci0JYm9hcmRfY2hpcC0+Y2hpcF9kZWxheSA9IDI1OwotCWJvYXJkX2NoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKLQotCS8qIGxpbmsgY2hpcCB0byBtdGQgKi8KLQlib2FyZF9tdGQgPSAmZHJ2ZGF0YS0+Ym9hcmRfbXRkOwotCWJvYXJkX210ZC0+cHJpdiA9IGJvYXJkX2NoaXA7Ci0KLQlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAiJXM6IGRldmljZSBzY2FuXG4iLCBtb2R1bGVfaWQpOwotCXNjYW5fcmVzID0gbmFuZF9zY2FuKCZkcnZkYXRhLT5ib2FyZF9tdGQsIDEpOwotCi0JaWYgKGxpa2VseSghc2Nhbl9yZXMpKSB7Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDIsICIlczogcmVnaXN0ZXIgcGFydGl0aW9uc1xuIiwgbW9kdWxlX2lkKTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKCZkcnZkYXRhLT5ib2FyZF9tdGQsIHBhcnRpdGlvbl9pbmZvLAotCQkJCSAgIEFSUkFZX1NJWkUocGFydGl0aW9uX2luZm8pKTsKLQl9IGVsc2UgewotCQlpb3VubWFwKGRydmRhdGEtPnJlZ3MpOwotCQlrZnJlZShkcnZkYXRhKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlIHNjYW4gZmFpbGVkXG4iLCBtb2R1bGVfaWQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV4Y2l0ZV9uYW5kX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJleGNpdGVfbmFuZCIsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZSA9IGV4Y2l0ZV9uYW5kX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBleGNpdGVfbmFuZF9pbml0KHZvaWQpCi17Ci0JcHJfaW5mbygiQmFzbGVyIGVYY2l0ZSBuYW5kIGZsYXNoIGRyaXZlciBWZXJzaW9uICIKLQkJRVhDSVRFX05BTkRGTEFTSF9WRVJTSU9OICJcbiIpOwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGNpdGVfbmFuZF9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmV4Y2l0ZV9uYW5kX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGV4Y2l0ZV9uYW5kX2luaXQpOwotbW9kdWxlX2V4aXQoZXhjaXRlX25hbmRfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLb2VsbGVyIDx0aG9tYXMua29lbGxlckBiYXNsZXJ3ZWIuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJCYXNsZXIgZVhjaXRlIE5BTkQtRmxhc2ggZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTihFWENJVEVfTkFOREZMQVNIX1ZFUlNJT04pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwNy5jIGIvZHJpdmVycy9uZXQvM2M1MDcuYwppbmRleCBmYmMyMzExLi43N2NmMDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNzM0LDggKzczNSw3IEBACiAJbWVtY3B5X3RvaW8obHAtPmJhc2UsIGluaXRfd29yZHMgKyA1LCBzaXplb2YoaW5pdF93b3JkcykgLSAxMCk7CiAKIAkvKiBGaWxsIGluIHRoZSBzdGF0aW9uIGFkZHJlc3MuICovCi0JbWVtY3B5X3RvaW8obHAtPmJhc2UrU0FfT0ZGU0VULCBkZXYtPmRldl9hZGRyLAotCQkgICBzaXplb2YoZGV2LT5kZXZfYWRkcikpOworCW1lbWNweV90b2lvKGxwLT5iYXNlK1NBX09GRlNFVCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCiAJLyogVGhlIFR4LWJsb2NrIGxpc3QgaXMgd3JpdHRlbiBhcyBuZWVkZWQuICBXZSBqdXN0IHNldCB1cCB0aGUgdmFsdWVzLiAqLwogCWxwLT50eF9jbWRfbGluayA9IElETEVMT09QICsgNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGE1YmU5YWMuLmRkOWEwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMTk1Myw2ICsxOTUzLDggQEAKIAogc291cmNlICJkcml2ZXJzL25ldC9mc19lbmV0L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9uZXQvb2N0ZW9uL0tjb25maWciCisKIGVuZGlmICMgTkVUX0VUSEVSTkVUCiAKICMKQEAgLTIzNDQsNiArMjM0Niw3IEBACiAKIGNvbmZpZyBHRUxJQ19XSVJFTEVTUwogCWJvb2wgIlBTMyBXaXJlbGVzcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0xBTgogCWRlcGVuZHMgb24gR0VMSUNfTkVUCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCWhlbHAKQEAgLTIzNTYsNiArMjM1OSw3IEBACiBjb25maWcgR0VMSUNfV0lSRUxFU1NfT0xEX1BTS19JTlRFUkZBQ0UKICAgICAgICBib29sICJQUzMgV2lyZWxlc3MgcHJpdmF0ZSBQU0sgaW50ZXJmYWNlIChPQlNPTEVURSkiCiAgICAgICAgZGVwZW5kcyBvbiBHRUxJQ19XSVJFTEVTUworICAgICAgIHNlbGVjdCBXRVhUX1BSSVYKICAgICAgICBoZWxwCiAgICAgICAgICAgVGhpcyBvcHRpb24gcmV0YWlucyB0aGUgb2Jzb2xldGUgcHJpdmF0ZSBpbnRlcmZhY2UgdG8gcGFzcwogICAgICAgICAgIHRoZSBQU0sgZnJvbSB1c2VyIHNwYWNlIHByb2dyYW1zIHRvIHRoZSBkcml2ZXIuICBUaGUgUFNLCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDI0NjMyM2QuLmFkMTM0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0yODUsMyArMjg1LDUgQEAKIG9iai0kKENPTkZJR19TRkMpICs9IHNmYy8KIAogb2JqLSQoQ09ORklHX1dJTUFYKSArPSB3aW1heC8KKworb2JqLSQoQ09ORklHX09DVEVPTl9NR01UX0VUSEVSTkVUKSArPSBvY3Rlb24vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCmluZGV4IGMzN2VlOWUuLjM5ZTFjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCkBAIC02OCw2ICs2OCw3IEBACiAJdHJpc3RhdGUgIk51dm90b24gdzkwcDkxMCBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfVzkwWDkwMAogCXNlbGVjdCBQSFlMSUIKKwlzZWxlY3QgTUlJCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYnVpbHQtaW4gRXRoZXJuZXQgcG9ydHMKIAkgIG9uIHc5MHA5MTAgcHJvY2Vzc29yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCmluZGV4IGM1NzIxY2IuLmNjOWVkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKQEAgLTY2Myw3ICs2NjMsNyBAQAogCXdoaWxlICgtLWkgPiAwKQogCQlpZiAoRFJFRyAmIENTUjBfSURPTikKIAkJCWJyZWFrOwotCWlmIChpIDwgMCB8fCAoRFJFRyAmIENTUjBfRVJSKSkgeworCWlmIChpIDw9IDAgfHwgKERSRUcgJiBDU1IwX0VSUikpIHsKIAkJRFBSSU5USyggMiwgKCAibGFuY2Vfb3BlbigpOiBvcGVuaW5nICVzIGZhaWxlZCwgaT0lZCwgY3NyMD0lMDR4XG4iLAogCQkJCQkgIGRldi0+bmFtZSwgaSwgRFJFRyApKTsKIAkJRFJFRyA9IENTUjBfU1RPUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggYzA0NTFkNy4uZWM1MjUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTE5NTksMTIgKzE5NTksMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGkgPSBmaXJzdF9kd29yZDsgaSA8IGxhc3RfZHdvcmQ7IGkrKykgewotCQlpZiAoIWF0bDJfcmVhZF9lZXByb20oaHcsIGkqNCwgJihlZXByb21fYnVmZltpLWZpcnN0X2R3b3JkXSkpKQotCQkJcmV0dXJuIC1FSU87CisJCWlmICghYXRsMl9yZWFkX2VlcHJvbShodywgaSo0LCAmKGVlcHJvbV9idWZmW2ktZmlyc3RfZHdvcmRdKSkpIHsKKwkJCXJldF92YWwgPSAtRUlPOworCQkJZ290byBmcmVlOworCQl9CiAJfQogCiAJbWVtY3B5KGJ5dGVzLCAodTggKillZXByb21fYnVmZiArIChlZXByb20tPm9mZnNldCAmIDMpLAogCQllZXByb20tPmxlbik7CitmcmVlOgogCWtmcmVlKGVlcHJvbV9idWZmKTsKIAogCXJldHVybiByZXRfdmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggOWU1NjAxNC4uOWZkOGU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0yNzUsNiArMjc1LDcgQEAKIAl1MzIgdHhfZmM7CQkvKiBUeCBmbG93IGNvbnRyb2wgKi8KIAlpbnQgbGlua19zcGVlZDsKIAl1OCBwb3J0X3R5cGU7CisJdTggdHJhbnNjZWl2ZXI7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDFiNjhiZDkuLjEwMmFkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTE0NzksNiArMTQ3OSw0MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBiZV9jbWRfc2V0X2xvb3BiYWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwKKwkJCXU4IGxvb3BiYWNrX3R5cGUsIHU4IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9jbWRfcmVxX3NldF9sbW9kZSAqcmVxOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDAsCisJCQkJT1BDT0RFX0xPV0xFVkVMX1NFVF9MT09QQkFDS19NT0RFKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fTE9XTEVWRUwsCisJCQlPUENPREVfTE9XTEVWRUxfU0VUX0xPT1BCQUNLX01PREUsCisJCQlzaXplb2YoKnJlcSkpOworCisJcmVxLT5zcmNfcG9ydCA9IHBvcnRfbnVtOworCXJlcS0+ZGVzdF9wb3J0ID0gcG9ydF9udW07CisJcmVxLT5sb29wYmFja190eXBlID0gbG9vcGJhY2tfdHlwZTsKKwlyZXEtPmxvb3BiYWNrX3N0YXRlID0gZW5hYmxlOworCisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworZXJyOgorCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwogaW50IGJlX2NtZF9sb29wYmFja190ZXN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgcG9ydF9udW0sCiAJCXUzMiBsb29wYmFja190eXBlLCB1MzIgcGt0X3NpemUsIHUzMiBudW1fcGt0cywgdTY0IHBhdHRlcm4pCiB7CkBAIC0xNTAxLDYgKzE1MzYsNyBAQAogCiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9MT1dMRVZFTCwKIAkJCU9QQ09ERV9MT1dMRVZFTF9MT09QQkFDS19URVNULCBzaXplb2YoKnJlcSkpOworCXJlcS0+aGRyLnRpbWVvdXQgPSA0OwogCiAJcmVxLT5wYXR0ZXJuID0gY3B1X3RvX2xlNjQocGF0dGVybik7CiAJcmVxLT5zcmNfcG9ydCA9IGNwdV90b19sZTMyKHBvcnRfbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAppbmRleCA5MmI4N2VmLi5jMDAyYjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCkBAIC0xNTUsNiArMTU1LDcgQEAKIAogI2RlZmluZSBPUENPREVfTE9XTEVWRUxfSE9TVF9ERFJfRE1BICAgICAgICAgICAgICAgICAgICAxNwogI2RlZmluZSBPUENPREVfTE9XTEVWRUxfTE9PUEJBQ0tfVEVTVCAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBPUENPREVfTE9XTEVWRUxfU0VUX0xPT1BCQUNLX01PREUJCTE5CiAKIHN0cnVjdCBiZV9jbWRfcmVxX2hkciB7CiAJdTggb3Bjb2RlOwkJLyogZHdvcmQgMCAqLwpAQCAtODIxLDYgKzgyMiwxOSBAQAogCXUzMiAgICB0aWNrc19jb21wbDsKIH07CiAKK3N0cnVjdCBiZV9jbWRfcmVxX3NldF9sbW9kZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1OCBzcmNfcG9ydDsKKwl1OCBkZXN0X3BvcnQ7CisJdTggbG9vcGJhY2tfdHlwZTsKKwl1OCBsb29wYmFja19zdGF0ZTsKK307CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9zZXRfbG1vZGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgcmVzcF9oZHI7CisJdTggcnN2ZDBbNF07Cit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKiBERFIgRE1BIHRlc3QgKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGJlX2NtZF9yZXFfZGRyZG1hX3Rlc3QgewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CkBAIC05MTIsMyArOTI2LDUgQEAKIAkJCQl1MzIgbnVtX3BrdHMsIHU2NCBwYXR0ZXJuKTsKIGV4dGVybiBpbnQgYmVfY21kX2Rkcl9kbWFfdGVzdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTY0IHBhdHRlcm4sCiAJCQl1MzIgYnl0ZV9jbnQsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQpOworZXh0ZXJuIGludCBiZV9jbWRfc2V0X2xvb3BiYWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwKKwkJCQl1OCBsb29wYmFja190eXBlLCB1OCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCmluZGV4IDI5OGI5MmMuLjVkMDAxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKQEAgLTExOCw2ICsxMTgsNyBAQAogI2RlZmluZSBCRV9NQUNfTE9PUEJBQ0sgMHgwCiAjZGVmaW5lIEJFX1BIWV9MT09QQkFDSyAweDEKICNkZWZpbmUgQkVfT05FX1BPUlRfRVhUX0xPT1BCQUNLIDB4MgorI2RlZmluZSBCRV9OT19MT09QQkFDSyAweGZmCiAKIHN0YXRpYyB2b2lkCiBiZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQpAQCAtMzM5LDI4ICszNDAsNTAgQEAKIAogCQlzdGF0dXMgPSBiZV9jbWRfcmVhZF9wb3J0X3R5cGUoYWRhcHRlciwgYWRhcHRlci0+cG9ydF9udW0sCiAJCQkJCQkmY29ubmVjdG9yKTsKLQkJc3dpdGNoIChjb25uZWN0b3IpIHsKLQkJY2FzZSA3OgotCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwotCQkJYnJlYWs7CisJCWlmICghc3RhdHVzKSB7CisJCQlzd2l0Y2ggKGNvbm5lY3RvcikgeworCQkJY2FzZSA3OgorCQkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwkJCQllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCQkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0FVSTsKKwkJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAkJfQogCiAJCS8qIFNhdmUgZm9yIGZ1dHVyZSB1c2UgKi8KIAkJYWRhcHRlci0+bGlua19zcGVlZCA9IGVjbWQtPnNwZWVkOwogCQlhZGFwdGVyLT5wb3J0X3R5cGUgPSBlY21kLT5wb3J0OworCQlhZGFwdGVyLT50cmFuc2NlaXZlciA9IGVjbWQtPnRyYW5zY2VpdmVyOwogCX0gZWxzZSB7CiAJCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKIAkJZWNtZC0+cG9ydCA9IGFkYXB0ZXItPnBvcnRfdHlwZTsKKwkJZWNtZC0+dHJhbnNjZWl2ZXIgPSBhZGFwdGVyLT50cmFuc2NlaXZlcjsKIAl9CiAKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX1RQKTsKIAllY21kLT5waHlfYWRkcmVzcyA9IGFkYXB0ZXItPnBvcnRfbnVtOwotCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwlzd2l0Y2ggKGVjbWQtPnBvcnQpIHsKKwljYXNlIFBPUlRfRklCUkU6CisJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX1RQOgorCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9UUCk7CisJCWJyZWFrOworCWNhc2UgUE9SVF9BVUk6CisJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0FVSSk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDg5LDYgKzUxMiwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1NjQgYmVfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggbG9vcGJhY2tfdHlwZSwKKwkJCQl1NjQgKnN0YXR1cykKK3sKKwliZV9jbWRfc2V0X2xvb3BiYWNrKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAorCQkJCWxvb3BiYWNrX3R5cGUsIDEpOworCSpzdGF0dXMgPSBiZV9jbWRfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwKKwkJCQlsb29wYmFja190eXBlLCAxNTAwLAorCQkJCTIsIDB4YWJjKTsKKwliZV9jbWRfc2V0X2xvb3BiYWNrKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAorCQkJCUJFX05PX0xPT1BCQUNLLCAxKTsKKwlyZXR1cm4gKnN0YXR1czsKK30KKwogc3RhdGljIHZvaWQKIGJlX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpCiB7CkBAIC00OTcsMjMgKzUzMywxOCBAQAogCW1lbXNldChkYXRhLCAwLCBzaXplb2YodTY0KSAqIEVUSFRPT0xfVEVTVFNfTlVNKTsKIAogCWlmICh0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKLQkJZGF0YVswXSA9IGJlX2NtZF9sb29wYmFja190ZXN0KGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLAotCQkJCQkJQkVfTUFDX0xPT1BCQUNLLCAxNTAwLAotCQkJCQkJMiwgMHhhYmMpOwotCQlpZiAoZGF0YVswXSAhPSAwKQorCQlpZiAoYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBCRV9NQUNfTE9PUEJBQ0ssCisJCQkJCQkmZGF0YVswXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCi0JCWRhdGFbMV0gPSBiZV9jbWRfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwKLQkJCQkJCUJFX1BIWV9MT09QQkFDSywgMTUwMCwKLQkJCQkJCTIsIDB4YWJjKTsKLQkJaWYgKGRhdGFbMV0gIT0gMCkKKwkJfQorCQlpZiAoYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBCRV9QSFlfTE9PUEJBQ0ssCisJCQkJCQkmZGF0YVsxXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCi0JCWRhdGFbMl0gPSBiZV9jbWRfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwKLQkJCQkJCUJFX09ORV9QT1JUX0VYVF9MT09QQkFDSywKLQkJCQkJCTE1MDAsIDIsIDB4YWJjKTsKLQkJaWYgKGRhdGFbMl0gIT0gMCkKKwkJfQorCQlpZiAoYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCBCRV9PTkVfUE9SVF9FWFRfTE9PUEJBQ0ssCisJCQkJCQkmZGF0YVsyXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCQl9CiAKIAkJZGF0YVszXSA9IGJlX3Rlc3RfZGRyX2RtYShhZGFwdGVyKTsKIAkJaWYgKGRhdGFbM10gIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA0YmZjODA4Li42NWRmMWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC02NTMsMTIgKzY1MywyMCBAQAogYm54Ml9uZXRpZl9zdG9wKHN0cnVjdCBibngyICpicCkKIHsKIAlibngyX2NuaWNfc3RvcChicCk7Ci0JYm54Ml9kaXNhYmxlX2ludF9zeW5jKGJwKTsKIAlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgeworCQlpbnQgaTsKKwogCQlibngyX25hcGlfZGlzYWJsZShicCk7CiAJCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7Ci0JCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCisJCS8qIHByZXZlbnQgdHggdGltZW91dCAqLworCQlmb3IgKGkgPSAwOyBpIDwgIGJwLT5kZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCisJCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGJwLT5kZXYsIGkpOworCQkJdHhxLT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCX0KIAl9CisJYm54Ml9kaXNhYmxlX2ludF9zeW5jKGJwKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwppbmRleCA3N2JhMTM1Li4zMDZjMmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCkBAIC03NTkzLDYgKzc1OTMsOCBAQAogCQlpZiAoYnAtPmNuaWNfZXRoX2Rldi5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9SRUdEKSB7CiAJCQlibngyeF9zZXRfaXNjc2lfZXRoX21hY19hZGRyKGJwLCAxKTsKIAkJCWJwLT5jbmljX2ZsYWdzIHw9IEJOWDJYX0NOSUNfRkxBR19NQUNfU0VUOworCQkJYm54MnhfaW5pdF9zYihicCwgYnAtPmNuaWNfc2IsIGJwLT5jbmljX3NiX21hcHBpbmcsCisJCQkJICAgICAgQ05JQ19TQl9JRChicCkpOwogCQl9CiAJCW11dGV4X3VubG9jaygmYnAtPmNuaWNfbXV0ZXgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggMGZiN2E0OS4uODIyZjU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTU4MCw3ICsxNTgwLDcgQEAKIAkJLy8gY2hlY2sgaWYgYW55IHBhcnRuZXIgcmVwbHlzCiAJCWlmIChiZXN0LT5pc19pbmRpdmlkdWFsKSB7CiAJCQlwcl93YXJuaW5nKCIlczogV2FybmluZzogTm8gODAyLjNhZCByZXNwb25zZSBmcm9tIHRoZSBsaW5rIHBhcnRuZXIgZm9yIGFueSBhZGFwdGVycyBpbiB0aGUgYm9uZFxuIiwKLQkJCQkgICBiZXN0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOworCQkJCSAgIGJlc3QtPnNsYXZlID8gYmVzdC0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lIDogIk5VTEwiKTsKIAkJfQogCiAJCWJlc3QtPmlzX2FjdGl2ZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IGQwZWMxNzguLjE2NmNjN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghcmVzIHx8ICFpcnEpIHsKKwlpZiAoIXJlcyB8fCBpcnEgPD0gMCkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCmluZGV4IDljNWExNTMuLjFhNzJjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJCQlnb3RvIGVycm9yX3R4X2J1ZjsKIAkJfQogCQlwcml2LT5zcGlfcnhfYnVmID0ga21hbGxvYyhTUElfVFJBTlNGRVJfQlVGX0xFTiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcHJpdi0+c3BpX3R4X2J1ZikgeworCQlpZiAoIXByaXYtPnNwaV9yeF9idWYpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycm9yX3J4X2J1ZjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmMgYi9kcml2ZXJzL25ldC9jczg5eDAuYwppbmRleCBhZjkzMjE2Li4wZTc5Y2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuYworKysgYi9kcml2ZXJzL25ldC9jczg5eDAuYwpAQCAtMTMyNSw4ICsxMzI1LDcgQEAKIAkJd3JpdGVfaXJxKGRldiwgbHAtPmNoaXBfdHlwZSwgZGV2LT5pcnEpOwogCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgbmV0X2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOwogCQlpZiAocmV0KSB7Ci0JCQlpZiAobmV0X2RlYnVnKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjczg5eDA6IHJlcXVlc3RfaXJxKCVkKSBmYWlsZWRcbiIsIGRldi0+aXJxKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY3M4OXgwOiByZXF1ZXN0X2lycSglZCkgZmFpbGVkXG4iLCBkZXYtPmlycSk7CiAJCQlnb3RvIGJhZF9vdXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IDhlZGFjODkuLjMzYzRmZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCkBAIC0yMjcyLDcgKzIyNzIsNyBAQAogCXVuc2lnbmVkIGludCBjbGtfZGl2OwogCWludCBtZGlvX2J1c19mcmVxID0gZW1hY19idXNfZnJlcXVlbmN5OwogCi0JaWYgKG1kaW9fbWF4X2ZyZXEgJiBtZGlvX2J1c19mcmVxKQorCWlmIChtZGlvX21heF9mcmVxICYmIG1kaW9fYnVzX2ZyZXEpCiAJCWNsa19kaXYgPSAoKG1kaW9fYnVzX2ZyZXEgLyBtZGlvX21heF9mcmVxKSAtIDEpOwogCWVsc2UKIAkJY2xrX2RpdiA9IDB4RkY7CkBAIC0yNzExLDYgKzI3MTEsOCBAQAogCVNFVF9FVEhUT09MX09QUyhuZGV2LCAmZXRodG9vbF9vcHMpOwogCW5ldGlmX25hcGlfYWRkKG5kZXYsICZwcml2LT5uYXBpLCBlbWFjX3BvbGwsIEVNQUNfUE9MTF9XRUlHSFQpOwogCisJY2xrX2VuYWJsZShlbWFjX2Nsayk7CisKIAkvKiByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgKi8KIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAlyYyA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKQEAgLTI3MjAsNyArMjcyMiw2IEBACiAJCWdvdG8gbmV0ZGV2X3JlZ19lcnI7CiAJfQogCi0JY2xrX2VuYWJsZShlbWFjX2Nsayk7CiAKIAkvKiBNSUkvUGh5IGludGlhbGlzYXRpb24sIG1kaW8gYnVzIHJlZ2lzdHJhdGlvbiAqLwogCWVtYWNfbWlpID0gbWRpb2J1c19hbGxvYygpOwpAQCAtMjc2MCw2ICsyNzYxLDcgQEAKIAogbmV0ZGV2X3JlZ19lcnI6CiBtZGlvX2FsbG9jX2VycjoKKwljbGtfZGlzYWJsZShlbWFjX2Nsayk7CiBub19pcnFfcmVzOgogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IDkyOTcwMWMuLjgzOWZiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTE4MjksNiArMTgyOSw3IEBACiAJCQkJICAmbmljLT5jYnNfZG1hX2FkZHIpOwogCWlmICghbmljLT5jYnMpCiAJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChuaWMtPmNicywgMCwgY291bnQgKiBzaXplb2Yoc3RydWN0IGNiKSk7CiAKIAlmb3IgKGNiID0gbmljLT5jYnMsIGkgPSAwOyBpIDwgY291bnQ7IGNiKyssIGkrKykgewogCQljYi0+bmV4dCA9IChpICsgMSA8IGNvdW50KSA/IGNiICsgMSA6IG5pYy0+Y2JzOwpAQCAtMTgzNyw3ICsxODM4LDYgQEAKIAkJY2ItPmRtYV9hZGRyID0gbmljLT5jYnNfZG1hX2FkZHIgKyBpICogc2l6ZW9mKHN0cnVjdCBjYik7CiAJCWNiLT5saW5rID0gY3B1X3RvX2xlMzIobmljLT5jYnNfZG1hX2FkZHIgKwogCQkJKChpKzEpICUgY291bnQpICogc2l6ZW9mKHN0cnVjdCBjYikpOwotCQljYi0+c2tiID0gTlVMTDsKIAl9CiAKIAluaWMtPmNiX3RvX3VzZSA9IG5pYy0+Y2JfdG9fc2VuZCA9IG5pYy0+Y2JfdG9fY2xlYW4gPSBuaWMtPmNiczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggYzFhNDJjZi4uMDJkNjdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKQEAgLTIzNyw2ICsyMzcsOCBAQAogCS8qIFNldCBpZiBtYW5hZ2VhYmlsaXR5IGZlYXR1cmVzIGFyZSBlbmFibGVkLiAqLwogCW1hYy0+YXJjX3N1YnN5c3RlbV92YWxpZCA9IChlcjMyKEZXU00pICYgRTEwMDBfRldTTV9NT0RFX01BU0spCiAJICAgICAgICAgICAgICAgID8gdHJ1ZSA6IGZhbHNlOworCS8qIEFkYXB0aXZlIElGUyBzdXBwb3J0ZWQgKi8KKwltYWMtPmFkYXB0aXZlX2lmcyA9IHRydWU7CiAKIAkvKiBjaGVjayBmb3IgbGluayAqLwogCXN3aXRjaCAoaHctPnBoeS5tZWRpYV90eXBlKSB7CkBAIC0xMjkwLDcgKzEyOTIsNiBAQAogc3RhdGljIHMzMiBlMTAwMF9zZXR1cF9jb3BwZXJfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXUzMiBjdHJsOwotCXUzMiBsZWRfY3RybDsKIAlzMzIgcmV0X3ZhbDsKIAogCWN0cmwgPSBlcjMyKENUUkwpOwpAQCAtMTMwNSwxMSArMTMwNiw2IEBACiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfcGh5X2lncF8yOgogCQlyZXRfdmFsID0gZTEwMDBlX2NvcHBlcl9saW5rX3NldHVwX2lncChodyk7Ci0JCS8qIFNldHVwIGFjdGl2aXR5IExFRCAqLwotCQlsZWRfY3RybCA9IGVyMzIoTEVEQ1RMKTsKLQkJbGVkX2N0cmwgJj0gSUdQX0FDVElWSVRZX0xFRF9NQVNLOwotCQlsZWRfY3RybCB8PSAoSUdQX0FDVElWSVRZX0xFRF9FTkFCTEUgfCBJR1BfTEVEM19NT0RFKTsKLQkJZXczMihMRURDVEwsIGxlZF9jdHJsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCmluZGV4IDMwMjhmMjMuLmUyYWEzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKQEAgLTIyNCw2ICsyMjQsOCBAQAogCS8qIFNldCBpZiBtYW5hZ2VhYmlsaXR5IGZlYXR1cmVzIGFyZSBlbmFibGVkLiAqLwogCW1hYy0+YXJjX3N1YnN5c3RlbV92YWxpZCA9IChlcjMyKEZXU00pICYgRTEwMDBfRldTTV9NT0RFX01BU0spCiAgICAgICAgICAgICAgICAgICAgICAgICA/IHRydWUgOiBmYWxzZTsKKwkvKiBBZGFwdGl2ZSBJRlMgbm90IHN1cHBvcnRlZCAqLworCW1hYy0+YWRhcHRpdmVfaWZzID0gZmFsc2U7CiAKIAkvKiBjaGVjayBmb3IgbGluayAqLwogCXN3aXRjaCAoaHctPnBoeS5tZWRpYV90eXBlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCmluZGV4IDI3ODRjZjQuLmVjY2YyOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oCkBAIC04MTgsNiArODE4LDcgQEAKIAogCXU4ICBmb3JjZWRfc3BlZWRfZHVwbGV4OwogCisJYm9vbCBhZGFwdGl2ZV9pZnM7CiAJYm9vbCBhcmNfc3Vic3lzdGVtX3ZhbGlkOwogCWJvb2wgYXV0b25lZzsKIAlib29sIGF1dG9uZWdfZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggOWIwOTI0Ni4uYWQwOGNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC00NTQsNiArNDU0LDggQEAKIAkJbWFjLT5yYXJfZW50cnlfY291bnQtLTsKIAkvKiBTZXQgaWYgbWFuYWdlYWJpbGl0eSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gKi8KIAltYWMtPmFyY19zdWJzeXN0ZW1fdmFsaWQgPSB0cnVlOworCS8qIEFkYXB0aXZlIElGUyBzdXBwb3J0ZWQgKi8KKwltYWMtPmFkYXB0aXZlX2lmcyA9IHRydWU7CiAKIAkvKiBMRUQgb3BlcmF0aW9ucyAqLwogCXN3aXRjaCAobWFjLT50eXBlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggYTg2YzE3NS4uMmZhOWIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwpAQCAtMTI1LDYgKzEyNSw3IEBACiB2b2lkIGUxMDAwZV9pbml0X3J4X2FkZHJzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByYXJfY291bnQpCiB7CiAJdTMyIGk7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dID0gezB9OwogCiAJLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcyAqLwogCWVfZGJnKCJQcm9ncmFtbWluZyBNQUMgQWRkcmVzcyBpbnRvIFJBUlswXVxuIik7CkBAIC0xMzMsMTIgKzEzNCw4IEBACiAKIAkvKiBaZXJvIG91dCB0aGUgb3RoZXIgKHJhcl9lbnRyeV9jb3VudCAtIDEpIHJlY2VpdmUgYWRkcmVzc2VzICovCiAJZV9kYmcoIkNsZWFyaW5nIFJBUlsxLSV1XVxuIiwgcmFyX2NvdW50LTEpOwotCWZvciAoaSA9IDE7IGkgPCByYXJfY291bnQ7IGkrKykgewotCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX1JBLCAoaSA8PCAxKSwgMCk7Ci0JCWUxZV9mbHVzaCgpOwotCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX1JBLCAoKGkgPDwgMSkgKyAxKSwgMCk7Ci0JCWUxZV9mbHVzaCgpOwotCX0KKwlmb3IgKGkgPSAxOyBpIDwgcmFyX2NvdW50OyBpKyspCisJCWUxMDAwZV9yYXJfc2V0KGh3LCBtYWNfYWRkciwgaSk7CiB9CiAKIC8qKgpAQCAtMTY0LDEwICsxNjEsMTkgQEAKIAogCXJhcl9oaWdoID0gKCh1MzIpIGFkZHJbNF0gfCAoKHUzMikgYWRkcls1XSA8PCA4KSk7CiAKLQlyYXJfaGlnaCB8PSBFMTAwMF9SQUhfQVY7CisJLyogSWYgTUFDIGFkZHJlc3MgemVybywgbm8gbmVlZCB0byBzZXQgdGhlIEFWIGJpdCAqLworCWlmIChyYXJfbG93IHx8IHJhcl9oaWdoKQorCQlyYXJfaGlnaCB8PSBFMTAwMF9SQUhfQVY7CiAKLQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX1JBLCAoaW5kZXggPDwgMSksIHJhcl9sb3cpOwotCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfUkEsICgoaW5kZXggPDwgMSkgKyAxKSwgcmFyX2hpZ2gpOworCS8qCisJICogU29tZSBicmlkZ2VzIHdpbGwgY29tYmluZSBjb25zZWN1dGl2ZSAzMi1iaXQgd3JpdGVzIGludG8KKwkgKiBhIHNpbmdsZSBidXJzdCB3cml0ZSwgd2hpY2ggd2lsbCBtYWxmdW5jdGlvbiBvbiBzb21lIHBhcnRzLgorCSAqIFRoZSBmbHVzaGVzIGF2b2lkIHRoaXMuCisJICovCisJZXczMihSQUwoaW5kZXgpLCByYXJfbG93KTsKKwllMWVfZmx1c2goKTsKKwlldzMyKFJBSChpbmRleCksIHJhcl9oaWdoKTsKKwllMWVfZmx1c2goKTsKIH0KIAogLyoqCkBAIC0xNjA5LDYgKzE2MTUsMTEgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCisJaWYgKCFtYWMtPmFkYXB0aXZlX2lmcykgeworCQllX2RiZygiTm90IGluIEFkYXB0aXZlIElGUyBtb2RlIVxuIik7CisJCWdvdG8gb3V0OworCX0KKwogCW1hYy0+Y3VycmVudF9pZnNfdmFsID0gMDsKIAltYWMtPmlmc19taW5fdmFsID0gSUZTX01JTjsKIAltYWMtPmlmc19tYXhfdmFsID0gSUZTX01BWDsKQEAgLTE2MTcsNiArMTYyOCw4IEBACiAKIAltYWMtPmluX2lmc19tb2RlID0gZmFsc2U7CiAJZXczMihBSVQsIDApOworb3V0OgorCXJldHVybjsKIH0KIAogLyoqCkBAIC0xNjMwLDYgKzE2NDMsMTEgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCisJaWYgKCFtYWMtPmFkYXB0aXZlX2lmcykgeworCQllX2RiZygiTm90IGluIEFkYXB0aXZlIElGUyBtb2RlIVxuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWlmICgobWFjLT5jb2xsaXNpb25fZGVsdGEgKiBtYWMtPmlmc19yYXRpbykgPiBtYWMtPnR4X3BhY2tldF9kZWx0YSkgewogCQlpZiAobWFjLT50eF9wYWNrZXRfZGVsdGEgPiBNSU5fTlVNX1hNSVRTKSB7CiAJCQltYWMtPmluX2lmc19tb2RlID0gdHJ1ZTsKQEAgLTE2NTAsNiArMTY2OCw4IEBACiAJCQlldzMyKEFJVCwgMCk7CiAJCX0KIAl9CitvdXQ6CisJcmV0dXJuOwogfQogCiAvKioKQEAgLTIyODcsMTAgKzIzMDcsMTIgQEAKIAlzMzIgcmV0X3ZhbCwgaGRyX2NzdW0sIGNzdW07CiAJdTggaSwgbGVuOwogCisJaHctPm1hYy50eF9wa3RfZmlsdGVyaW5nID0gdHJ1ZTsKKwogCS8qIE5vIG1hbmFnZWFiaWxpdHksIG5vIGZpbHRlcmluZyAqLwogCWlmICghZTEwMDBlX2NoZWNrX21uZ19tb2RlKGh3KSkgewogCQlody0+bWFjLnR4X3BrdF9maWx0ZXJpbmcgPSBmYWxzZTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qCkBAIC0yMjk4LDkgKzIzMjAsOSBAQAogCSAqIHJlYXNvbiwgZGlzYWJsZSBmaWx0ZXJpbmcuCiAJICovCiAJcmV0X3ZhbCA9IGUxMDAwX21uZ19lbmFibGVfaG9zdF9pZihodyk7Ci0JaWYgKHJldF92YWwgIT0gMCkgeworCWlmIChyZXRfdmFsKSB7CiAJCWh3LT5tYWMudHhfcGt0X2ZpbHRlcmluZyA9IGZhbHNlOwotCQlyZXR1cm4gcmV0X3ZhbDsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogUmVhZCBpbiB0aGUgaGVhZGVyLiAgTGVuZ3RoIGFuZCBvZmZzZXQgYXJlIGluIGR3b3Jkcy4gKi8KQEAgLTIzMTksMTcgKzIzNDEsMTcgQEAKIAkgKi8KIAlpZiAoKGhkcl9jc3VtICE9IGNzdW0pIHx8IChoZHItPnNpZ25hdHVyZSAhPSBFMTAwMF9JQU1UX1NJR05BVFVSRSkpIHsKIAkJaHctPm1hYy50eF9wa3RfZmlsdGVyaW5nID0gdHJ1ZTsKLQkJcmV0dXJuIDE7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIENvb2tpZSBhcmVhIGlzIHZhbGlkLCBtYWtlIHRoZSBmaW5hbCBjaGVjayBmb3IgZmlsdGVyaW5nLiAqLwogCWlmICghKGhkci0+c3RhdHVzICYgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19QQVJTSU5HKSkgewogCQlody0+bWFjLnR4X3BrdF9maWx0ZXJpbmcgPSBmYWxzZTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAotCWh3LT5tYWMudHhfcGt0X2ZpbHRlcmluZyA9IHRydWU7Ci0JcmV0dXJuIDE7CitvdXQ6CisJcmV0dXJuIGh3LT5tYWMudHhfcGt0X2ZpbHRlcmluZzsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggNzYyYjY5Ny4uYzQ1OTY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwpAQCAtMzMxNSwyNCArMzMxNSwyNCBAQAogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKIAkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpKSB7CiAJCWUxZV9ycGh5KGh3LCBIVl9TQ0NfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWUxZV9ycGh5KGh3LCBIVl9TQ0NfTE9XRVIsICZwaHlfZGF0YSk7Ci0JCWFkYXB0ZXItPnN0YXRzLnNjYyArPSBwaHlfZGF0YTsKKwkJaWYgKCFlMWVfcnBoeShodywgSFZfU0NDX0xPV0VSLCAmcGh5X2RhdGEpKQorCQkJYWRhcHRlci0+c3RhdHMuc2NjICs9IHBoeV9kYXRhOwogCiAJCWUxZV9ycGh5KGh3LCBIVl9FQ09MX1VQUEVSLCAmcGh5X2RhdGEpOwotCQllMWVfcnBoeShodywgSFZfRUNPTF9MT1dFUiwgJnBoeV9kYXRhKTsKLQkJYWRhcHRlci0+c3RhdHMuZWNvbCArPSBwaHlfZGF0YTsKKwkJaWYgKCFlMWVfcnBoeShodywgSFZfRUNPTF9MT1dFUiwgJnBoeV9kYXRhKSkKKwkJCWFkYXB0ZXItPnN0YXRzLmVjb2wgKz0gcGh5X2RhdGE7CiAKIAkJZTFlX3JwaHkoaHcsIEhWX01DQ19VUFBFUiwgJnBoeV9kYXRhKTsKLQkJZTFlX3JwaHkoaHcsIEhWX01DQ19MT1dFUiwgJnBoeV9kYXRhKTsKLQkJYWRhcHRlci0+c3RhdHMubWNjICs9IHBoeV9kYXRhOworCQlpZiAoIWUxZV9ycGh5KGh3LCBIVl9NQ0NfTE9XRVIsICZwaHlfZGF0YSkpCisJCQlhZGFwdGVyLT5zdGF0cy5tY2MgKz0gcGh5X2RhdGE7CiAKIAkJZTFlX3JwaHkoaHcsIEhWX0xBVEVDT0xfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWUxZV9ycGh5KGh3LCBIVl9MQVRFQ09MX0xPV0VSLCAmcGh5X2RhdGEpOwotCQlhZGFwdGVyLT5zdGF0cy5sYXRlY29sICs9IHBoeV9kYXRhOworCQlpZiAoIWUxZV9ycGh5KGh3LCBIVl9MQVRFQ09MX0xPV0VSLCAmcGh5X2RhdGEpKQorCQkJYWRhcHRlci0+c3RhdHMubGF0ZWNvbCArPSBwaHlfZGF0YTsKIAogCQllMWVfcnBoeShodywgSFZfRENfVVBQRVIsICZwaHlfZGF0YSk7Ci0JCWUxZV9ycGh5KGh3LCBIVl9EQ19MT1dFUiwgJnBoeV9kYXRhKTsKLQkJYWRhcHRlci0+c3RhdHMuZGMgKz0gcGh5X2RhdGE7CisJCWlmICghZTFlX3JwaHkoaHcsIEhWX0RDX0xPV0VSLCAmcGh5X2RhdGEpKQorCQkJYWRhcHRlci0+c3RhdHMuZGMgKz0gcGh5X2RhdGE7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+c3RhdHMuc2NjICs9IGVyMzIoU0NDKTsKIAkJYWRhcHRlci0+c3RhdHMuZWNvbCArPSBlcjMyKEVDT0wpOwpAQCAtMzM2MCw4ICszMzYwLDggQEAKIAlpZiAoKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzgpIHx8CiAJICAgIChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSkgewogCQllMWVfcnBoeShodywgSFZfQ09MQ19VUFBFUiwgJnBoeV9kYXRhKTsKLQkJZTFlX3JwaHkoaHcsIEhWX0NPTENfTE9XRVIsICZwaHlfZGF0YSk7Ci0JCWh3LT5tYWMuY29sbGlzaW9uX2RlbHRhID0gcGh5X2RhdGE7CisJCWlmICghZTFlX3JwaHkoaHcsIEhWX0NPTENfTE9XRVIsICZwaHlfZGF0YSkpCisJCQlody0+bWFjLmNvbGxpc2lvbl9kZWx0YSA9IHBoeV9kYXRhOwogCX0gZWxzZSB7CiAJCWh3LT5tYWMuY29sbGlzaW9uX2RlbHRhID0gZXIzMihDT0xDKTsKIAl9CkBAIC0zMzcyLDggKzMzNzIsOCBAQAogCWlmICgoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgfHwKIAkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzcpKSB7CiAJCWUxZV9ycGh5KGh3LCBIVl9UTkNSU19VUFBFUiwgJnBoeV9kYXRhKTsKLQkJZTFlX3JwaHkoaHcsIEhWX1ROQ1JTX0xPV0VSLCAmcGh5X2RhdGEpOwotCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBwaHlfZGF0YTsKKwkJaWYgKCFlMWVfcnBoeShodywgSFZfVE5DUlNfTE9XRVIsICZwaHlfZGF0YSkpCisJCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBwaHlfZGF0YTsKIAl9IGVsc2UgewogCQlpZiAoKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkgJiYKIAkJICAgIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQpAQCAtNDY3NCw2ICs0Njc0LDcgQEAKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAllMTAwMGVfZGlzYWJsZV9sMWFzcG0ocGRldik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CkBAIC00ODI1LDYgKzQ4MjYsNyBAQAogCX0gZWxzZSB7CiAJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwkJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCmluZGV4IDI1ZmFiYjMuLmQ1MTYwZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtNDYsNiArNDYsMTEgQEAKICNpbmNsdWRlICJnaWFuZmFyLmgiCiAjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKIAorc3RydWN0IGZzbF9wcV9tZGlvX3ByaXYgeworCXZvaWQgX19pb21lbSAqbWFwOworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzOworfTsKKwogLyoKICAqIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKICAqIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQpAQCAtMTA1LDcgKzExMCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqZnNsX3BxX21kaW9fZ2V0X3JlZ3Moc3RydWN0IG1paV9idXMgKmJ1cykKIHsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSBfX2ZvcmNlICopYnVzLT5wcml2OworCXN0cnVjdCBmc2xfcHFfbWRpb19wcml2ICpwcml2ID0gYnVzLT5wcml2OworCisJcmV0dXJuIHByaXYtPnJlZ3M7CiB9CiAKIC8qCkBAIC0yNjYsNiArMjczLDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CiAJc3RydWN0IGRldmljZV9ub2RlICp0Ymk7CisJc3RydWN0IGZzbF9wcV9tZGlvX3ByaXYgKnByaXY7CiAJc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MgPSBOVUxMOwogCXZvaWQgX19pb21lbSAqbWFwOwogCXUzMiBfX2lvbWVtICp0YmlwYTsKQEAgLTI3NCwxNCArMjgyLDE5IEBACiAJdTY0IGFkZHIgPSAwLCBzaXplID0gMDsKIAlpbnQgZXJyID0gMDsKIAorCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwogCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX3ByaXY7CiAKIAluZXdfYnVzLT5uYW1lID0gIkZyZWVzY2FsZSBQb3dlclFVSUNDIE1JSSBCdXMiLAogCW5ld19idXMtPnJlYWQgPSAmZnNsX3BxX21kaW9fcmVhZCwKIAluZXdfYnVzLT53cml0ZSA9ICZmc2xfcHFfbWRpb193cml0ZSwKIAluZXdfYnVzLT5yZXNldCA9ICZmc2xfcHFfbWRpb19yZXNldCwKKwluZXdfYnVzLT5wcml2ID0gcHJpdjsKIAlmc2xfcHFfbWRpb19idXNfbmFtZShuZXdfYnVzLT5pZCwgbnApOwogCiAJLyogU2V0IHRoZSBQSFkgYmFzZSBhZGRyZXNzICovCkBAIC0yOTEsNiArMzA0LDcgQEAKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9idXM7CiAJfQorCXByaXYtPm1hcCA9IG1hcDsKIAogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSB8fAogCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci10YmkiKSB8fApAQCAtMjk4LDggKzMxMiw3IEBACiAJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInVjY19nZXRoX3BoeSIpKQogCQltYXAgLT0gb2Zmc2V0b2Yoc3RydWN0IGZzbF9wcV9tZGlvLCBtaWltY2ZnKTsKIAlyZWdzID0gbWFwOwotCi0JbmV3X2J1cy0+cHJpdiA9ICh2b2lkIF9fZm9yY2UgKilyZWdzOworCXByaXYtPnJlZ3MgPSByZWdzOwogCiAJbmV3X2J1cy0+aXJxID0ga2NhbGxvYyhQSFlfTUFYX0FERFIsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKIApAQCAtMzkyLDEwICs0MDUsMTEgQEAKIGVycl9mcmVlX2lycXM6CiAJa2ZyZWUobmV3X2J1cy0+aXJxKTsKIGVycl91bm1hcF9yZWdzOgotCWlvdW5tYXAocmVncyk7CisJaW91bm1hcChwcml2LT5tYXApOwogZXJyX2ZyZWVfYnVzOgogCWtmcmVlKG5ld19idXMpOwotCitlcnJfZnJlZV9wcml2OgorCWtmcmVlKHByaXYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQwNCwxNCArNDE4LDE2IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7CiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmc2xfcHFfbWRpb19wcml2ICpwcml2ID0gYnVzLT5wcml2OwogCiAJbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKIAotCWlvdW5tYXAoZnNsX3BxX21kaW9fZ2V0X3JlZ3MoYnVzKSk7CisJaW91bm1hcChwcml2LT5tYXApOwogCWJ1cy0+cHJpdiA9IE5VTEw7CiAJbWRpb2J1c19mcmVlKGJ1cyk7CisJa2ZyZWUocHJpdik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCA2ODUwZGMwLi44YmQzYzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0xNDMsNyArMTQzLDYgQEAKIHN0YXRpYyB2b2lkIGdmYXJfY2xlYXJfZXhhY3RfbWF0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX3NldF9tYWNfZm9yX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG51bSwgdTggKmFkZHIpOwogc3RhdGljIGludCBnZmFyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotdTE2IGdmYXJfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdpYW5mYXIgRXRoZXJuZXQgRHJpdmVyIik7CkBAIC0zNTcsOCArMzU2LDExIEBACiAJLyogQ29uZmlndXJlIHRoZSBjb2FsZXNjaW5nIHN1cHBvcnQgKi8KIAlnZmFyX2NvbmZpZ3VyZV9jb2FsZXNjaW5nKHByaXYsIDB4RkYsIDB4RkYpOwogCi0JaWYgKHByaXYtPnJ4X2ZpbGVyX2VuYWJsZSkKKwlpZiAocHJpdi0+cnhfZmlsZXJfZW5hYmxlKSB7CiAJCXJjdHJsIHw9IFJDVFJMX0ZJTFJFTjsKKwkJLyogUHJvZ3JhbSB0aGUgUklSMCByZWcgd2l0aCB0aGUgcmVxdWlyZWQgZGlzdHJpYnV0aW9uICovCisJCWdmYXJfd3JpdGUoJnJlZ3MtPnJpcjAsIERFRkFVTFRfUklSMCk7CisJfQogCiAJaWYgKHByaXYtPnJ4X2NzdW1fZW5hYmxlKQogCQlyY3RybCB8PSBSQ1RSTF9DSEVDS1NVTU1JTkc7CkBAIC00MTQsNiArNDE2LDM2IEBACiAJZ2Zhcl93cml0ZSgmcmVncy0+Zmlmb190eF9zdGFydmVfc2h1dG9mZiwgcHJpdi0+Zmlmb19zdGFydmVfb2ZmKTsKIH0KIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZmFyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKwl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHMgPSAwLCByeF9ieXRlcyA9IDAsIHJ4X2Ryb3BwZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgdHhfcGFja2V0cyA9IDAsIHR4X2J5dGVzID0gMDsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXJ4X3BhY2tldHMgKz0gcHJpdi0+cnhfcXVldWVbaV0tPnN0YXRzLnJ4X3BhY2tldHM7CisJCXJ4X2J5dGVzICs9IHByaXYtPnJ4X3F1ZXVlW2ldLT5zdGF0cy5yeF9ieXRlczsKKwkJcnhfZHJvcHBlZCArPSBwcml2LT5yeF9xdWV1ZVtpXS0+c3RhdHMucnhfZHJvcHBlZDsKKwl9CisKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSByeF9wYWNrZXRzOworCWRldi0+c3RhdHMucnhfYnl0ZXMgPSByeF9ieXRlczsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgPSByeF9kcm9wcGVkOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisJCXR4X2J5dGVzICs9IHR4cS0+dHhfYnl0ZXM7CisJCXR4X3BhY2tldHMgKz0gdHhxLT50eF9wYWNrZXRzOworCX0KKworCWRldi0+c3RhdHMudHhfYnl0ZXMgPSB0eF9ieXRlczsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMgPSB0eF9wYWNrZXRzOworCisJcmV0dXJuICZkZXYtPnN0YXRzOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdmYXJfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gPSBnZmFyX2VuZXRfb3BlbiwKIAkubmRvX3N0YXJ0X3htaXQgPSBnZmFyX3N0YXJ0X3htaXQsCkBAIC00MjIsNyArNDU0LDcgQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGdmYXJfc2V0X211bHRpLAogCS5uZG9fdHhfdGltZW91dCA9IGdmYXJfdGltZW91dCwKIAkubmRvX2RvX2lvY3RsID0gZ2Zhcl9pb2N0bCwKLQkubmRvX3NlbGVjdF9xdWV1ZSA9IGdmYXJfc2VsZWN0X3F1ZXVlLAorCS5uZG9fZ2V0X3N0YXRzID0gZ2Zhcl9nZXRfc3RhdHMsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLApAQCAtNDcyLDEwICs1MDQsNiBAQAogCXJldHVybiBwcml2LT52bGdycCB8fCBwcml2LT5yeF9jc3VtX2VuYWJsZTsKIH0KIAotdTE2IGdmYXJfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotfQogc3RhdGljIHZvaWQgZnJlZV90eF9wb2ludGVycyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KQogewogCWludCBpID0gMDsKQEAgLTEwMjIsNiArMTA1MCw5IEBACiAJCXByaXYtPnJ4X3F1ZXVlW2ldLT5yeGljID0gREVGQVVMVF9SWElDOwogCX0KIAorCS8qIGVuYWJsZSBmaWxlciBpZiB1c2luZyBtdWx0aXBsZSBSWCBxdWV1ZXMqLworCWlmKHByaXYtPm51bV9yeF9xdWV1ZXMgPiAxKQorCQlwcml2LT5yeF9maWxlcl9lbmFibGUgPSAxOwogCS8qIEVuYWJsZSBtb3N0IG1lc3NhZ2VzIGJ5IGRlZmF1bHQgKi8KIAlwcml2LT5tc2dfZW5hYmxlID0gKE5FVElGX01TR19JRlVQIDw8IDEgKSAtIDE7CiAKQEAgLTE5MzcsNyArMTk2OCw4IEBACiAJfQogCiAJLyogVXBkYXRlIHRyYW5zbWl0IHN0YXRzICovCi0JZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwl0eHEtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXR4cS0+dHhfcGFja2V0cyArKzsKIAogCXR4YmRwID0gdHhiZHBfc3RhcnQgPSB0eF9xdWV1ZS0+Y3VyX3R4OwogCkBAIC0yMjk1LDggKzIzMjcsNiBAQAogCXR4X3F1ZXVlLT5za2JfZGlydHl0eCA9IHNrYl9kaXJ0eXR4OwogCXR4X3F1ZXVlLT5kaXJ0eV90eCA9IGJkcDsKIAotCWRldi0+c3RhdHMudHhfcGFja2V0cyArPSBob3dtYW55OwotCiAJcmV0dXJuIGhvd21hbnk7CiB9CiAKQEAgLTI0MzQsMTAgKzI0NjQsMTEgQEAKIAlmY2IgPSAoc3RydWN0IHJ4ZmNiICopc2tiLT5kYXRhOwogCiAJLyogUmVtb3ZlIHRoZSBGQ0IgZnJvbSB0aGUgc2tiICovCi0Jc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgZmNiLT5ycSk7CiAJLyogUmVtb3ZlIHRoZSBwYWRkZWQgYnl0ZXMsIGlmIHRoZXJlIGFyZSBhbnkgKi8KLQlpZiAoYW1vdW50X3B1bGwpCisJaWYgKGFtb3VudF9wdWxsKSB7CisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBmY2ItPnJxKTsKIAkJc2tiX3B1bGwoc2tiLCBhbW91bnRfcHVsbCk7CisJfQogCiAJaWYgKHByaXYtPnJ4X2NzdW1fZW5hYmxlKQogCQlnZmFyX3J4X2NoZWNrc3VtKHNrYiwgZmNiKTsKQEAgLTI1MTAsMjIgKzI1NDEsMjIgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgKi8KLQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJcnhfcXVldWUtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCWhvd21hbnkrKzsKIAogCQkJaWYgKGxpa2VseShza2IpKSB7CiAJCQkJcGt0X2xlbiA9IGJkcC0+bGVuZ3RoIC0gRVRIX0ZDU19MRU47CiAJCQkJLyogUmVtb3ZlIHRoZSBGQ1MgZnJvbSB0aGUgcGFja2V0IGxlbmd0aCAqLwogCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKLQkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47Ci0KKwkJCQlyeF9xdWV1ZS0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcXVldWUtPnFpbmRleCk7CiAJCQkJZ2Zhcl9wcm9jZXNzX2ZyYW1lKGRldiwgc2tiLCBhbW91bnRfcHVsbCk7CiAKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocHJpdikpCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICIlczogTWlzc2luZyBza2IhXG4iLCBkZXYtPm5hbWUpOwotCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCXJ4X3F1ZXVlLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJcHJpdi0+ZXh0cmFfc3RhdHMucnhfc2tibWlzc2luZysrOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggY2JiNDUxMC4uM2Q3MmRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtMzMzLDcgKzMzMyw3IEBACiAjZGVmaW5lIElNQVNLX0JTWSAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgSU1BU0tfRUJFUlIgICAgICAgICAgICAgMHgxMDAwMDAwMAogI2RlZmluZSBJTUFTS19NU1JPCQkweDA0MDAwMDAwCi0jZGVmaW5lIElNQVNLX0dSU0MgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgSU1BU0tfR1RTQyAgICAgICAgICAgICAgMHgwMjAwMDAwMAogI2RlZmluZSBJTUFTS19CQUJUCQkweDAxMDAwMDAwCiAjZGVmaW5lIElNQVNLX1RYQyAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgSU1BU0tfVFhFRU4JCTB4MDA0MDAwMDAKQEAgLTM0NCw3ICszNDQsNyBAQAogI2RlZmluZSBJTUFTS19YRlVOCQkweDAwMDEwMDAwCiAjZGVmaW5lIElNQVNLX1JYQjAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKICNkZWZpbmUgSU1BU0tfTUFHCQkweDAwMDAwODAwCi0jZGVmaW5lIElNQVNLX0dUU0MgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU1BU0tfR1JTQyAgICAgICAgICAgICAgMHgwMDAwMDEwMAogI2RlZmluZSBJTUFTS19SWEZFTjAJCTB4MDAwMDAwODAKICNkZWZpbmUgSU1BU0tfRklSCQkweDAwMDAwMDA4CiAjZGVmaW5lIElNQVNLX0ZJUQkJMHgwMDAwMDAwNApAQCAtNDAxLDYgKzQwMSwxMCBAQAogI2RlZmluZSBGUFJfRklMRVJfTUFTSwkweEZGRkZGRkZGCiAjZGVmaW5lIE1BWF9GSUxFUl9JRFgJMHhGRgogCisvKiBUaGlzIGRlZmF1bHQgUklSIHZhbHVlIGRpcmVjdGx5IGNvcnJlc3BvbmRzCisgKiB0byB0aGUgMy1iaXQgaGFzaCB2YWx1ZSBnZW5lcmF0ZWQgKi8KKyNkZWZpbmUgREVGQVVMVF9SSVIwCTB4MDUzOTc3MDAKKwogLyogUlFGQ1IgcmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBSUUZDUl9HUEkJCTB4ODAwMDAwMDAKICNkZWZpbmUgUlFGQ1JfSEFTSFRCTF9RCQkweDAwMDAwMDAwCkBAIC05MzYsNiArOTQwLDE1IEBACiAJdW5zaWduZWQgc2hvcnQgdHh0aW1lOwogfTsKIAorLyoKKyAqIFBlciBSWCBxdWV1ZSBzdGF0cworICovCitzdHJ1Y3QgcnhfcV9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CisJdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkOworfTsKKwogLyoqCiAgKglzdHJ1Y3QgZ2Zhcl9wcml2X3J4X3EgLSBwZXIgcnggcXVldWUgc3RydWN0dXJlCiAgKglAcnhsb2NrOiBwZXIgcXVldWUgcnggc3BpbiBsb2NrCkBAIC05NTgsNiArOTcxLDcgQEAKIAlzdHJ1Y3QJcnhiZDggKmN1cl9yeDsKIAlzdHJ1Y3QJbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBnZmFyX3ByaXZfZ3JwICpncnA7CisJc3RydWN0IHJ4X3Ffc3RhdHMgc3RhdHM7CiAJdTE2CXNrYl9jdXJyeDsKIAl1MTYJcWluZGV4OwogCXVuc2lnbmVkIGludAlyeF9yaW5nX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCBhZTVmMTFjLi5iZGFkZjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTI0OCw2ICsyNDgsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAlzdHJ1Y3QgYnBxZGV2ICpicHE7CisJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OwogCWludCBzaXplOwogCiAJLyoKQEAgLTI4Miw4ICsyODMsOSBAQAogCiAJYnBxID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCW9yaWdfZGV2ID0gZGV2OwogCWlmICgoZGV2ID0gYnBxX2dldF9ldGhlcl9kZXYoZGV2KSkgPT0gTlVMTCkgewotCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJb3JpZ19kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDA5MGE2ZDMuLjA1MmM3NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKQEAgLTk4OCw3ICs5ODksNyBAQAogCiAJLyogY29weSBvdXQgTUFDIGFkZHJlc3MgKi8KIAotCWZvciAoeiA9IDA7IHogPCBzaXplb2YoZGV2LT5kZXZfYWRkcik7IHorKykKKwlmb3IgKHogPSAwOyB6IDwgRVRIX0FMRU47IHorKykKIAkJZGV2LT5kZXZfYWRkclt6XSA9IGluYihkZXYtPmJhc2VfYWRkciArIE1BQ0FERFJQUk9NICsgeik7CiAKIAkvKiBwcmludCBjb25maWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKaW5kZXggZThlOWU5MS4uYzUwNWI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKQEAgLTEwOTYsOSArMTA5Niw3IEBACiAJCWh3X2RiZygiQ29uZmlndXJpbmcgQXV0b25lZzpQQ1NfTENUTD0weCUwOFhcbiIsIHJlZyk7CiAJfSBlbHNlIHsKIAkJLyogU2V0IFBDUyByZWdpc3RlciBmb3IgZm9yY2VkIGxpbmsgKi8KLQkJcmVnIHw9IEUxMDAwX1BDU19MQ1RMX0ZTRCB8ICAgICAgICAvKiBGb3JjZSBTcGVlZCAqLwotCQkgICAgICAgRTEwMDBfUENTX0xDVExfRk9SQ0VfTElOSyB8IC8qIEZvcmNlIExpbmsgKi8KLQkJICAgICAgIEUxMDAwX1BDU19MQ1RMX0ZMVl9MSU5LX1VQOyAvKiBGb3JjZSBsaW5rIHZhbHVlIHVwICovCisJCXJlZyB8PSBFMTAwMF9QQ1NfTENUTF9GU0Q7ICAgICAgICAvKiBGb3JjZSBTcGVlZCAqLwogCiAJCWh3X2RiZygiQ29uZmlndXJpbmcgRm9yY2VkIExpbms6UENTX0xDVEw9MHglMDhYXG4iLCByZWcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwppbmRleCA1YzlkNzNlLi4zNjcwYTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCkBAIC00NTcsMTUgKzQ1Nyw2IEBACiAJcGh5X2RhdGEgfD0gSTgyNTgwX0NGR19FTkFCTEVfRE9XTlNISUZUOwogCiAJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSTgyNTgwX0NGR19SRUcsIHBoeV9kYXRhKTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBTZXQgbnVtYmVyIG9mIGxpbmsgYXR0ZW1wdHMgYmVmb3JlIGRvd25zaGlmdCAqLwotCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSTgyNTgwX0NUUkxfUkVHLCAmcGh5X2RhdGEpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQlwaHlfZGF0YSAmPSB+STgyNTgwX0NUUkxfRE9XTlNISUZUX01BU0s7Ci0JcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSTgyNTgwX0NUUkxfUkVHLCBwaHlfZGF0YSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKaW5kZXggYWM5ZDUyNy4uZjc3MWE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTE3OTUsNyArMTc5NSw3IEBACiAJCS8qIGR1YWwgcG9ydCBjYXJkcyBvbmx5IHN1cHBvcnQgV29MIG9uIHBvcnQgQSBmcm9tIG5vdyBvbgogCQkgKiB1bmxlc3MgaXQgd2FzIGVuYWJsZWQgaW4gdGhlIGVlcHJvbSBmb3IgcG9ydCBCCiAJCSAqIHNvIGV4Y2x1ZGUgRlVOQ18xIHBvcnRzIGZyb20gaGF2aW5nIFdvTCBlbmFibGVkICovCi0JCWlmIChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xICYmCisJCWlmICgocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfTUFTSykgJiYKIAkJICAgICFhZGFwdGVyLT5lZXByb21fd29sKSB7CiAJCQl3b2wtPnN1cHBvcnRlZCA9IDA7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggNzg5NjNhMC4uOTMzYzY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTEzMDYsMTMgKzEzMDYsOCBAQAogCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAogCQkJKChwYmEgPDwgMTApIC0gMiAqIGFkYXB0ZXItPm1heF9mcmFtZV9zaXplKSk7CiAKLQlpZiAobWFjLT50eXBlIDwgZTEwMDBfODI1NzYpIHsKLQkJZmMtPmhpZ2hfd2F0ZXIgPSBod20gJiAweEZGRjg7CS8qIDgtYnl0ZSBncmFudWxhcml0eSAqLwotCQlmYy0+bG93X3dhdGVyID0gZmMtPmhpZ2hfd2F0ZXIgLSA4OwotCX0gZWxzZSB7Ci0JCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgMHhGRkYwOwkvKiAxNi1ieXRlIGdyYW51bGFyaXR5ICovCi0JCWZjLT5sb3dfd2F0ZXIgPSBmYy0+aGlnaF93YXRlciAtIDE2OwotCX0KKwlmYy0+aGlnaF93YXRlciA9IGh3bSAmIDB4RkZGMDsJLyogMTYtYnl0ZSBncmFudWxhcml0eSAqLworCWZjLT5sb3dfd2F0ZXIgPSBmYy0+aGlnaF93YXRlciAtIDE2OwogCWZjLT5wYXVzZV90aW1lID0gMHhGRkZGOwogCWZjLT5zZW5kX3hvbiA9IDE7CiAJZmMtPmN1cnJlbnRfbW9kZSA9IGZjLT5yZXF1ZXN0ZWRfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggZTlkZDk1Zi4uMGRiZDAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTI3NjMsNyArMjc2Myw4IEBACiAJZXJyID0gaHctPm1hYy5vcHMucmVzZXRfaHcoaHcpOwogCWlmIChlcnIpIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwKLQkJICAgICAgICAgIlBGIHN0aWxsIGluIHJlc2V0IHN0YXRlLCBhc3NpZ25pbmcgbmV3IGFkZHJlc3NcbiIpOworCQkJICJQRiBzdGlsbCBpbiByZXNldCBzdGF0ZSwgYXNzaWduaW5nIG5ldyBhZGRyZXNzLiIKKwkJCSAiIElzIHRoZSBQRiBpbnRlcmZhY2UgdXA/XG4iKTsKIAkJcmFuZG9tX2V0aGVyX2FkZHIoaHctPm1hYy5hZGRyKTsKIAl9IGVsc2UgewogCQllcnIgPSBody0+bWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCBiZDY0Mzg3Li4yYWQ3NTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC0yNjIsMTAgKzI2MiwxMiBAQAogCQlpbnQgcmVnX2lkeCA9IHR4X3JpbmctPnJlZ19pZHg7CiAJCWludCBkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOwogCi0JCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CiAJCQl0YyA9IHJlZ19pZHggPj4gMjsKIAkJCXR4b2ZmID0gSVhHQkVfVEZDU19UWE9GRjA7Ci0JCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgogCQkJdGMgPSAwOwogCQkJdHhvZmYgPSBJWEdCRV9URkNTX1RYT0ZGOwogCQkJaWYgKGRjYl9pID09IDgpIHsKQEAgLTI4NCw2ICsyODYsOSBAQAogCQkJCQkJdGMgKz0gKHJlZ19pZHggLSA5NikgPj4gNDsKIAkJCQl9CiAJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRjID0gMDsKIAkJfQogCQl0eG9mZiA8PD0gdGM7CiAJfQpAQCAtNDM3Myw2ICs0Mzc4LDExIEBACiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJLyoKKwkgKiBwY2lfcmVzdG9yZV9zdGF0ZSBjbGVhcnMgZGV2LT5zdGF0ZV9zYXZlZCBzbyBjYWxsCisJICogcGNpX3NhdmVfc3RhdGUgdG8gcmVzdG9yZSBpdC4KKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKaW5kZXggMzM2ZTdjNy4uYTg1MjJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgaTsKIAotCWxwLT5yeF9za2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikqUlhfQkRfTlVNLCBHRlBfS0VSTkVMKTsKKwlscC0+cnhfc2tiID0ga3phbGxvYyhzaXplb2YoKmxwLT5yeF9za2IpICogUlhfQkRfTlVNLCBHRlBfS0VSTkVMKTsKIAkvKiBhbGxvY2F0ZSB0aGUgdHggYW5kIHJ4IHJpbmcgYnVmZmVyIGRlc2NyaXB0b3JzLiAqLwogCS8qIHJldHVybnMgYSB2aXJ0dWFsIGFkZHJlcyBhbmQgYSBwaHlzaWNhbCBhZGRyZXNzLiAqLwogCWxwLT50eF9iZF92ID0gZG1hX2FsbG9jX2NvaGVyZW50KG5kZXYtPmRldi5wYXJlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDI5MWE1MDUuLjNjZjU2ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC0xMTc0LDcgKzExNzQsNyBAQAogCXJldHVybiAwOwogCiBlcnJfcG9ydDoKLQlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykKKwlmb3IgKC0tcG9ydDsgcG9ydCA+PSAxOyAtLXBvcnQpCiAJCW1seDRfY2xlYW51cF9wb3J0X2luZm8oJnByaXYtPnBvcnRbcG9ydF0pOwogCiAJbWx4NF9jbGVhbnVwX21jZ190YWJsZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggMTQwNWExNy4uYWY2N2FmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC02NTYsNiArNjU2LDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJaW50IHJ4OwogCQlzdHJ1Y3QgcnhfZGVzYyAqcnhfZGVzYzsKKwkJaW50IHNpemU7CiAKIAkJc2tiID0gX19za2JfZGVxdWV1ZSgmbXAtPnJ4X3JlY3ljbGUpOwogCQlpZiAoc2tiID09IE5VTEwpCkBAIC02NzgsMTAgKzY3OSwxMSBAQAogCiAJCXJ4X2Rlc2MgPSByeHEtPnJ4X2Rlc2NfYXJlYSArIHJ4OwogCisJCXNpemUgPSBza2ItPmVuZCAtIHNrYi0+ZGF0YTsKIAkJcnhfZGVzYy0+YnVmX3B0ciA9IGRtYV9tYXBfc2luZ2xlKG1wLT5kZXYtPmRldi5wYXJlbnQsCi0JCQkJCQkgIHNrYi0+ZGF0YSwgbXAtPnNrYl9zaXplLAorCQkJCQkJICBza2ItPmRhdGEsIHNpemUsCiAJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7Ci0JCXJ4X2Rlc2MtPmJ1Zl9zaXplID0gbXAtPnNrYl9zaXplOworCQlyeF9kZXNjLT5idWZfc2l6ZSA9IHNpemU7CiAJCXJ4cS0+cnhfc2tiW3J4XSA9IHNrYjsKIAkJd21iKCk7CiAJCXJ4X2Rlc2MtPmNtZF9zdHMgPSBCVUZGRVJfT1dORURfQllfRE1BIHwgUlhfRU5BQkxFX0lOVEVSUlVQVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IDc2Y2QxZjMuLjliYzViZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTUzLDggKzUzLDggQEAKIAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA0CiAjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiA2NQotI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC42NSIKKyNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiA3MgorI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC43MiIKIAogI2RlZmluZSBORVRYRU5fVkVSU0lPTl9DT0RFKGEsIGIsIGMpCSgoKGEpIDw8IDI0KSArICgoYikgPDwgMTYpICsgKGMpKQogI2RlZmluZSBfbWFqb3IodikJKCgodikgPj4gMjQpICYgMHhmZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwppbmRleCBkZGQ3MDRhLi41NDJmNDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCkBAIC02Niw3ICs2Niw3IEBACiAKICNkZWZpbmUgTkVUWEVOX05JQ19URVNUX0xFTglBUlJBWV9TSVpFKG5ldHhlbl9uaWNfZ3N0cmluZ3NfdGVzdCkKIAotI2RlZmluZSBORVRYRU5fTklDX1JFR1NfQ09VTlQgNDIKKyNkZWZpbmUgTkVUWEVOX05JQ19SRUdTX0NPVU5UIDMwCiAjZGVmaW5lIE5FVFhFTl9OSUNfUkVHU19MRU4gKE5FVFhFTl9OSUNfUkVHU19DT1VOVCAqIHNpemVvZihfX2xlMzIpKQogI2RlZmluZSBORVRYRU5fTUFYX0VFUFJPTV9MRU4gICAxMDI0CiAKQEAgLTMxMiwxNTAgKzMxMiw5MSBAQAogCXJldHVybiBORVRYRU5fTklDX1JFR1NfTEVOOwogfQogCi1zdHJ1Y3QgbmV0eGVuX25pdV9yZWdzIHsKLQlfX3UzMiByZWdbTkVUWEVOX05JQ19SRUdTX0NPVU5UXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0eGVuX25pdV9yZWdzIG5pdV9yZWdpc3RlcnNbXSA9IHsKLQl7Ci0JIC8qIEdCIE1vZGUgKi8KLQkgewotCSAgTkVUWEVOX05JVV9HQl9TRVJERVNfUkVTRVQsCi0JICBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSwKLQkgIE5FVFhFTl9OSVVfR0IxX01JSV9NT0RFLAotCSAgTkVUWEVOX05JVV9HQjJfTUlJX01PREUsCi0JICBORVRYRU5fTklVX0dCM19NSUlfTU9ERSwKLQkgIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSwKLQkgIE5FVFhFTl9OSVVfR0IxX0dNSUlfTU9ERSwKLQkgIE5FVFhFTl9OSVVfR0IyX0dNSUlfTU9ERSwKLQkgIE5FVFhFTl9OSVVfR0IzX0dNSUlfTU9ERSwKLQkgIE5FVFhFTl9OSVVfUkVNT1RFX0xPT1BCQUNLLAotCSAgTkVUWEVOX05JVV9HQjBfSEFMRl9EVVBMRVgsCi0JICBORVRYRU5fTklVX0dCMV9IQUxGX0RVUExFWCwKLQkgIE5FVFhFTl9OSVVfUkVTRVRfU1lTX0ZJRk9TLAotCSAgTkVUWEVOX05JVV9HQl9DUkNfRFJPUCwKLQkgIE5FVFhFTl9OSVVfR0JfRFJPUF9XUk9OR0FERFIsCi0JICBORVRYRU5fTklVX1RFU1RfTVVYX0NUTCwKLQotCSAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksCi0JICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMSgwKSwKLQkgIE5FVFhFTl9OSVVfR0JfSEFMRl9EVVBMRVhfQ1RSTCgwKSwKLQkgIE5FVFhFTl9OSVVfR0JfTUFYX0ZSQU1FX1NJWkUoMCksCi0JICBORVRYRU5fTklVX0dCX1RFU1RfUkVHKDApLAotCSAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcoMCksCi0JICBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTU1BTkQoMCksCi0JICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFIoMCksCi0JICBORVRYRU5fTklVX0dCX01JSV9NR01UX0NUUkwoMCksCi0JICBORVRYRU5fTklVX0dCX01JSV9NR01UX1NUQVRVUygwKSwKLQkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfSU5ESUNBVEUoMCksCi0JICBORVRYRU5fTklVX0dCX0lOVEVSRkFDRV9DVFJMKDApLAotCSAgTkVUWEVOX05JVV9HQl9JTlRFUkZBQ0VfU1RBVFVTKDApLAotCSAgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMCgwKSwKLQkgIE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzEoMCksCi0JICAtMSwKLQkgIH0KLQkgfSwKLQl7Ci0JIC8qIFhHIE1vZGUgKi8KLQkgewotCSAgTkVUWEVOX05JVV9YR19TSU5HTEVfVEVSTSwKLQkgIE5FVFhFTl9OSVVfWEdfRFJJVkVfSEksCi0JICBORVRYRU5fTklVX1hHX0RSSVZFX0xPLAotCSAgTkVUWEVOX05JVV9YR19EVFgsCi0JICBORVRYRU5fTklVX1hHX0RFUSwKLQkgIE5FVFhFTl9OSVVfWEdfV09SRF9BTElHTiwKLQkgIE5FVFhFTl9OSVVfWEdfUkVTRVQsCi0JICBORVRYRU5fTklVX1hHX1BPV0VSX0RPV04sCi0JICBORVRYRU5fTklVX1hHX1JFU0VUX1BMTCwKLQkgIE5FVFhFTl9OSVVfWEdfU0VSREVTX0xPT1BCQUNLLAotCSAgTkVUWEVOX05JVV9YR19ET19CWVRFX0FMSUdOLAotCSAgTkVUWEVOX05JVV9YR19UWF9FTkFCTEUsCi0JICBORVRYRU5fTklVX1hHX1JYX0VOQUJMRSwKLQkgIE5FVFhFTl9OSVVfWEdfU1RBVFVTLAotCSAgTkVUWEVOX05JVV9YR19QQVVTRV9USFJFU0hPTEQsCi0JICBORVRYRU5fTklVX1hHRV9DT05GSUdfMCwKLQkgIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18xLAotCSAgTkVUWEVOX05JVV9YR0VfSVBHLAotCSAgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCi0JICBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAotCSAgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzFfTE8sCi0JICBORVRYRU5fTklVX1hHRV9TVEFUVVMsCi0JICBORVRYRU5fTklVX1hHRV9NQVhfRlJBTUVfU0laRSwKLQkgIE5FVFhFTl9OSVVfWEdFX1BBVVNFX0ZSQU1FX1ZBTFVFLAotCSAgTkVUWEVOX05JVV9YR0VfVFhfQllURV9DTlQsCi0JICBORVRYRU5fTklVX1hHRV9UWF9GUkFNRV9DTlQsCi0JICBORVRYRU5fTklVX1hHRV9SWF9CWVRFX0NOVCwKLQkgIE5FVFhFTl9OSVVfWEdFX1JYX0ZSQU1FX0NOVCwKLQkgIE5FVFhFTl9OSVVfWEdFX0FHR1JfRVJST1JfQ05ULAotCSAgTkVUWEVOX05JVV9YR0VfTVVMVElDQVNUX0ZSQU1FX0NOVCwKLQkgIE5FVFhFTl9OSVVfWEdFX1VOSUNBU1RfRlJBTUVfQ05ULAotCSAgTkVUWEVOX05JVV9YR0VfQ1JDX0VSUk9SX0NOVCwKLQkgIE5FVFhFTl9OSVVfWEdFX09WRVJTSVpFX0ZSQU1FX0VSUiwKLQkgIE5FVFhFTl9OSVVfWEdFX1VOREVSU0laRV9GUkFNRV9FUlIsCi0JICBORVRYRU5fTklVX1hHRV9MT0NBTF9FUlJPUl9DTlQsCi0JICBORVRYRU5fTklVX1hHRV9SRU1PVEVfRVJST1JfQ05ULAotCSAgTkVUWEVOX05JVV9YR0VfQ09OVFJPTF9DSEFSX0NOVCwKLQkgIE5FVFhFTl9OSVVfWEdFX1BBVVNFX0ZSQU1FX0NOVCwKLQkgIC0xLAotCSAgfQotCSB9Ci19OwotCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpwKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JX191MzIgbW9kZSwgKnJlZ3NfYnVmZiA9IHA7Ci0JaW50IGksIHdpbmRvdzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXUzMiAqcmVnc19idWZmID0gcDsKKwlpbnQgcmluZywgaSA9IDA7CisJaW50IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCiAJbWVtc2V0KHAsIDAsIE5FVFhFTl9OSUNfUkVHU19MRU4pOworCiAJcmVncy0+dmVyc2lvbiA9ICgxIDw8IDI0KSB8IChhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPDwgMTYpIHwKIAkgICAgKGFkYXB0ZXItPnBkZXYpLT5kZXZpY2U7Ci0JLyogd2hpY2ggbW9kZSAqLwotCXJlZ3NfYnVmZlswXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX01PREUpOwotCW1vZGUgPSByZWdzX2J1ZmZbMF07CiAKLQkvKiBDb21tb24gcmVnaXN0ZXJzIHRvIGFsbCB0aGUgbW9kZXMgKi8KLQlyZWdzX2J1ZmZbMl0gPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9TVFJBUF9WQUxVRV9TQVZFX0hJR0hFUik7Ci0JLyogR0IvWEdCIE1vZGUgKi8KLQltb2RlID0gKG1vZGUgLyAyKSAtIDE7Ci0Jd2luZG93ID0gMDsKLQlpZiAobW9kZSA8PSAxKSB7Ci0JCWZvciAoaSA9IDM7IG5pdV9yZWdpc3RlcnNbbW9kZV0ucmVnW2kgLSAzXSAhPSAtMTsgaSsrKSB7Ci0JCQkvKiBHQjogcG9ydCBzcGVjaWZpYyByZWdpc3RlcnMgKi8KLQkJCWlmIChtb2RlID09IDAgJiYgaSA+PSAxOSkKLQkJCQl3aW5kb3cgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0ICoKLQkJCQkJTkVUWEVOX05JQ19QT1JUX1dJTkRPVzsKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybjsKIAotCQkJcmVnc19idWZmW2ldID0gTlhSRDMyKGFkYXB0ZXIsCi0JCQkJbml1X3JlZ2lzdGVyc1ttb2RlXS5yZWdbaSAtIDNdICsgd2luZG93KTsKLQkJfQorCXJlZ3NfYnVmZltpKytdID0gTlhSRDMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUpOworCXJlZ3NfYnVmZltpKytdID0gTlhSRDMyKGFkYXB0ZXIsIENSQl9SQ1ZQRUdfU1RBVEUpOworCXJlZ3NfYnVmZltpKytdID0gTlhSRDMyKGFkYXB0ZXIsIENSQl9GV19DQVBBQklMSVRJRVNfMSk7CisJcmVnc19idWZmW2krK10gPSBOWFJESU8oYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcpOworCXJlZ3NfYnVmZltpKytdID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5UKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUEVHX0FMSVZFX0NPVU5URVIpOworCXJlZ3NfYnVmZltpKytdID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMxKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUEVHX0hBTFRfU1RBVFVTMik7CiAKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMCsweDNjKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMSsweDNjKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMisweDNjKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMysweDNjKTsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisKKwkJcmVnc19idWZmW2krK10gPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzQrMHgzYyk7CisJCWkgKz0gMjsKKworCQlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEVfUDMpOworCQlyZWdzX2J1ZmZbaSsrXSA9IGxlMzJfdG9fY3B1KCooYWRhcHRlci0+dHhfcmluZy0+aHdfY29uc3VtZXIpKTsKKworCX0gZWxzZSB7CisJCWkrKzsKKworCQlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLAorCQkJCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMCsoMHgxMDAwMCpwb3J0KSk7CisJCXJlZ3NfYnVmZltpKytdID0gTlhSRDMyKGFkYXB0ZXIsCisJCQkJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18xKygweDEwMDAwKnBvcnQpKTsKKworCQlyZWdzX2J1ZmZbaSsrXSA9IE5YUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOworCQlyZWdzX2J1ZmZbaSsrXSA9IE5YUkRJTyhhZGFwdGVyLAorCQkJCSBhZGFwdGVyLT50eF9yaW5nLT5jcmJfY21kX2NvbnN1bWVyKTsKKwl9CisKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkRJTyhhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyKTsKKworCXJlZ3NfYnVmZltpKytdID0gTlhSRElPKGFkYXB0ZXIsCisJCQkgcmVjdl9jdHgtPnJkc19yaW5nc1swXS5jcmJfcmN2X3Byb2R1Y2VyKTsKKwlyZWdzX2J1ZmZbaSsrXSA9IE5YUkRJTyhhZGFwdGVyLAorCQkJIHJlY3ZfY3R4LT5yZHNfcmluZ3NbMV0uY3JiX3Jjdl9wcm9kdWNlcik7CisKKwlyZWdzX2J1ZmZbaSsrXSA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJihyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddKTsKKwkJcmVnc19idWZmW2krK10gPSBOWFJESU8oYWRhcHRlciwKKwkJCQkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIpOwogCX0KIH0KIAogc3RhdGljIHUzMiBuZXR4ZW5fbmljX3Rlc3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JX191MzIgc3RhdHVzOwotCWludCB2YWw7CisJdTMyIHZhbCwgcG9ydDsKIAotCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7Ci0JCWlmIChhZGFwdGVyLT5waHlfcmVhZCAmJgotCQkgICAgYWRhcHRlci0+cGh5X3JlYWQoYWRhcHRlciwKLQkJCQkgICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCQkgICAgICAmc3RhdHVzKSAhPSAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWVsc2UgewotCQkJdmFsID0gbmV0eGVuX2dldF9waHlfbGluayhzdGF0dXMpOwotCQkJcmV0dXJuICF2YWw7Ci0JCX0KLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJdmFsID0gTlhSRDMyKGFkYXB0ZXIsIENSQl9YR19TVEFURV9QMyk7CisJCXZhbCA9IFhHX0xJTktfU1RBVEVfUDMoYWRhcHRlci0+YWh3LnBjaV9mdW5jLCB2YWwpOworCQlyZXR1cm4gKHZhbCA9PSBYR19MSU5LX1VQX1AzKSA/IDAgOiAxOworCX0gZWxzZSB7CiAJCXZhbCA9IE5YUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOworCQl2YWwgPSAodmFsID4+IHBvcnQqOCkgJiAweGZmOwogCQlyZXR1cm4gKHZhbCA9PSBYR19MSU5LX1VQKSA/IDAgOiAxOwogCX0KLQlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggMmUzNjRmZS4uODVlMjhlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC0zNDUsOCArMzQ1LDcgQEAKIHZvaWQKIG5ldHhlbl9wY2llX3NlbV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgc2VtKQogewotCWludCB2YWw7Ci0JdmFsID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTV9VTkxPQ0soc2VtKSkpOworCU5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU1fVU5MT0NLKHNlbSkpKTsKIH0KIAogaW50IG5ldHhlbl9uaXVfeGdfaW5pdF9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQpCkBAIC02OTEsNiArNjkwLDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCW54X21hY19saXN0X3QgKmN1cjsKIAorCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuOworCiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZhZGFwdGVyLT5tYWNfbGlzdCwgJmRlbF9saXN0KTsKIAogCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyLCAmZGVsX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDAyZjhkNGIuLjY0Y2ZmNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTE4NCw2ICsxODQsOCBAQAogCiAJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJdmZyZWUodHhfcmluZy0+Y21kX2J1Zl9hcnIpOworCWtmcmVlKHR4X3JpbmcpOworCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwogfQogCiBpbnQgbmV0eGVuX2FsbG9jX3N3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC03ODIsNyArNzg0LDcgQEAKIAlpZiAoTlhSRDMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUpID09IFBIQU5fSU5JVElBTElaRV9GQUlMRUQpCiAJCXJldHVybiAxOwogCi0Jb2xkX2NvdW50ID0gY291bnQgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BFR19BTElWRV9DT1VOVEVSKTsKKwlvbGRfY291bnQgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BFR19BTElWRV9DT1VOVEVSKTsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCBmNDk5Njg0Li45ZjlkNjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC01Nyw3ICs1Nyw5IEBACiAKIHN0YXRpYyBpbnQgdXNlX21zaV94ID0gMTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXV0b19md19yZXNldCA9IEFVVE9fRldfUkVTRVRfRU5BQkxFRDsKK3N0YXRpYyBpbnQgYXV0b19md19yZXNldCA9IEFVVE9fRldfUkVTRVRfRU5BQkxFRDsKK21vZHVsZV9wYXJhbShhdXRvX2Z3X3Jlc2V0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvX2Z3X3Jlc2V0LCJBdXRvIGZpcm13YXJlIHJlc2V0ICgwPWRpc2FibGVkLCAxPWVuYWJsZWQiKTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CkBAIC0zMzgsNyArMzQwLDcgQEAKIAkJaWYgKCEoZmlyc3RfYm9vdCAmIDB4NCkpIHsKIAkJCWZpcnN0X2Jvb3QgfD0gMHg0OwogCQkJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRygweDQpLCBmaXJzdF9ib290KTsKLQkJCWZpcnN0X2Jvb3QgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BDSUVfUkVHKDB4NCkpOworCQkJTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRygweDQpKTsKIAkJfQogCiAJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGJvb3QgYWZ0ZXIgcG93ZXIgdXAgKi8KQEAgLTE4OTYsMTIgKzE4OTgsOCBAQAogCQlsaW5rdXAgPSAodmFsID09IFhHX0xJTktfVVBfUDMpOwogCX0gZWxzZSB7CiAJCXZhbCA9IE5YUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOwotCQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKLQkJCWxpbmt1cCA9ICh2YWwgPj4gcG9ydCkgJiAxOwotCQllbHNlIHsKLQkJCXZhbCA9ICh2YWwgPj4gcG9ydCo4KSAmIDB4ZmY7Ci0JCQlsaW5rdXAgPSAodmFsID09IFhHX0xJTktfVVApOwotCQl9CisJCXZhbCA9ICh2YWwgPj4gcG9ydCo4KSAmIDB4ZmY7CisJCWxpbmt1cCA9ICh2YWwgPT0gWEdfTElOS19VUCk7CiAJfQogCiAJbmV0eGVuX2FkdmVydF9saW5rX2NoYW5nZShhZGFwdGVyLCBsaW5rdXApOwpAQCAtMjUzNCw0MiArMjUzMiw2IEBACiAJLndyaXRlID0gbmV0eGVuX3N5c2ZzX3dyaXRlX21lbSwKIH07CiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotc3RhdGljIHNzaXplX3QKLW5ldHhlbl9zdG9yZV9hdXRvX2Z3X3Jlc2V0KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwKLQkJc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLQotewotCXVuc2lnbmVkIGxvbmcgbmV3OwotCi0JaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTYsICZuZXcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgobmV3ID09IEFVVE9fRldfUkVTRVRfRU5BQkxFRCkgfHwgKG5ldyA9PSBBVVRPX0ZXX1JFU0VUX0RJU0FCTEVEKSkgewotCQlhdXRvX2Z3X3Jlc2V0ID0gbmV3OwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1uZXR4ZW5fc2hvd19hdXRvX2Z3X3Jlc2V0KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwKLQkJc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpidWYpCi0KLXsKLQlpZiAoYXV0b19md19yZXNldCA9PSBBVVRPX0ZXX1JFU0VUX0VOQUJMRUQpCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImVuYWJsZWRcbiIpOwotCWVsc2UKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiZGlzYWJsZWRcbiIpOwotfQotCi1zdGF0aWMgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbW9kX2F0dHJfZndfcmVzZXQgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYXV0b19md19yZXNldCIsIC5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKX0sCi0JLnNob3cgPSBuZXR4ZW5fc2hvd19hdXRvX2Z3X3Jlc2V0LAotCS5zdG9yZSA9IG5ldHhlbl9zdG9yZV9hdXRvX2Z3X3Jlc2V0LAotfTsKLSNlbmRpZgogCiBzdGF0aWMgdm9pZAogbmV0eGVuX2NyZWF0ZV9zeXNmc19lbnRyaWVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKQEAgLTI3NzUsMjMgKzI3MzcsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX01PRFVMRVMKLQlzdHJ1Y3QgbW9kdWxlICptb2QgPSBUSElTX01PRFVMRTsKLSNlbmRpZgotCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX3N0cmluZyk7CiAKICNpZmRlZiBDT05GSUdfSU5FVAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmV0eGVuX25ldGRldl9jYik7CiAJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJm5ldHhlbl9pbmV0YWRkcl9jYik7CiAjZW5kaWYKLQotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JaWYgKHN5c2ZzX2NyZWF0ZV9maWxlKCZtb2QtPm1rb2JqLmtvYmosICZtb2RfYXR0cl9md19yZXNldC5hdHRyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGNyZWF0ZSBhdXRvX2Z3X3Jlc2V0ICIKLQkJCQkic3lzZnMgZW50cnkuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0jZW5kaWYKLQogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuZXR4ZW5fZHJpdmVyKTsKIH0KIApAQCAtMjc5OSwxMiArMjc1MCw2IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZXR4ZW5fZXhpdF9tb2R1bGUodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCXN0cnVjdCBtb2R1bGUgKm1vZCA9IFRISVNfTU9EVUxFOwotCi0Jc3lzZnNfcmVtb3ZlX2ZpbGUoJm1vZC0+bWtvYmoua29iaiwgJm1vZF9hdHRyX2Z3X3Jlc2V0LmF0dHIpOwotI2VuZGlmCi0KIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5ldHhlbl9kcml2ZXIpOwogCiAjaWZkZWYgQ09ORklHX0lORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggOGNlNThjNC4uMmFlZDJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTI4NDQsNyArMjg0NCw3IEBACiAJCQlicmVhazsKIAkJdWRlbGF5KDEpOwogCX0KLQlpZiAobGltaXQgPCAwKQorCWlmIChsaW1pdCA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb2N0ZW9uL0tjb25maWcgYi9kcml2ZXJzL25ldC9vY3Rlb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU2YmJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvb2N0ZW9uL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIE9DVEVPTl9NR01UX0VUSEVSTkVUCisJdHJpc3RhdGUgIk9jdGVvbiBNYW5hZ2VtZW50IHBvcnQgZXRoZXJuZXQgZHJpdmVyIChDTjVYWFgsIENONlhYWCkiCisJZGVwZW5kcyBvbiAgQ1BVX0NBVklVTV9PQ1RFT04KKwlzZWxlY3QgUEhZTElCCisJc2VsZWN0IE1ESU9fT0NURU9OCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgbWFuYWdlbWVudAorCSAgcG9ydCBvbiBDYXZpdW0gTmV0d29ya3MnIE9jdGVvbiBDTjU3WFgsIENONTZYWCwgQ041NVhYLAorCSAgQ041NFhYLCBDTjUyWFgsIGFuZCBDTjZYWFggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9vY3Rlb24vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9vY3Rlb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZWRlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9vY3Rlb24vTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACisKK29iai0kKENPTkZJR19PQ1RFT05fTUdNVF9FVEhFUk5FVCkJKz0gb2N0ZW9uX21nbXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMgYi9kcml2ZXJzL25ldC9vY3Rlb24vb2N0ZW9uX21nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTA1MzhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMKQEAgLTAsMCArMSwxMTc2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IENhdml1bSBOZXR3b3JrcworICovCisKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisjaW5jbHVkZSA8YXNtL29jdGVvbi9jdm14LW1peHgtZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1hZ2wtZGVmcy5oPgorCisjZGVmaW5lIERSVl9OQU1FICJvY3Rlb25fbWdtdCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMCIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OIFwKKwkiQ2F2aXVtIE5ldHdvcmtzIE9jdGVvbiBNSUkgKG1hbmFnZW1lbnQpIHBvcnQgTmV0d29yayBEcml2ZXIiCisKKyNkZWZpbmUgT0NURU9OX01HTVRfTkFQSV9XRUlHSFQgMTYKKworLyoKKyAqIFJpbmcgc2l6ZXMgdGhhdCBhcmUgcG93ZXJzIG9mIHR3byBhbGxvdyBmb3IgbW9yZSBlZmZpY2llbnQgbW9kdWxvCisgKiBvcGVydGlvbnMuCisgKi8KKyNkZWZpbmUgT0NURU9OX01HTVRfUlhfUklOR19TSVpFIDUxMgorI2RlZmluZSBPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUgMTI4CisKKy8qIEFsbG93IDggYnl0ZXMgZm9yIHZsYW4gYW5kIEZDUy4gKi8KKyNkZWZpbmUgT0NURU9OX01HTVRfUlhfSEVBRFJPT00gKEVUSF9ITEVOICsgRVRIX0ZDU19MRU4gKyBWTEFOX0hMRU4pCisKK3VuaW9uIG1nbXRfcG9ydF9yaW5nX2VudHJ5IHsKKwl1NjQgZDY0OworCXN0cnVjdCB7CisJCXU2NCAgICByZXNlcnZlZF82Ml82MzoyOworCQkvKiBMZW5ndGggb2YgdGhlIGJ1ZmZlci9wYWNrZXQgaW4gYnl0ZXMgKi8KKwkJdTY0ICAgIGxlbjoxNDsKKwkJLyogRm9yIFRYLCBzaWduYWxzIHRoYXQgdGhlIHBhY2tldCBzaG91bGQgYmUgdGltZXN0YW1wZWQgKi8KKwkJdTY0ICAgIHRzdGFtcDoxOworCQkvKiBUaGUgUlggZXJyb3IgY29kZSAqLworCQl1NjQgICAgY29kZTo3OworI2RlZmluZSBSSU5HX0VOVFJZX0NPREVfRE9ORSAweGYKKyNkZWZpbmUgUklOR19FTlRSWV9DT0RFX01PUkUgMHgxMAorCQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgKi8KKwkJdTY0ICAgIGFkZHI6NDA7CisJfSBzOworfTsKKworc3RydWN0IG9jdGVvbl9tZ210IHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCBwb3J0OworCWludCBpcnE7CisJdTY0ICp0eF9yaW5nOworCWRtYV9hZGRyX3QgdHhfcmluZ19oYW5kbGU7CisJdW5zaWduZWQgaW50IHR4X25leHQ7CisJdW5zaWduZWQgaW50IHR4X25leHRfY2xlYW47CisJdW5zaWduZWQgaW50IHR4X2N1cnJlbnRfZmlsbDsKKwkvKiBUaGUgdHhfbGlzdCBsb2NrIGFsc28gcHJvdGVjdHMgdGhlIHJpbmcgcmVsYXRlZCB2YXJpYWJsZXMgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X2xpc3Q7CisKKwkvKiBSWCB2YXJpYWJsZXMgb25seSB0b3VjaGVkIGluIG5hcGlfcG9sbC4gIE5vIGxvY2tpbmcgbmVjZXNzYXJ5LiAqLworCXU2NCAqcnhfcmluZzsKKwlkbWFfYWRkcl90IHJ4X3JpbmdfaGFuZGxlOworCXVuc2lnbmVkIGludCByeF9uZXh0OworCXVuc2lnbmVkIGludCByeF9uZXh0X2ZpbGw7CisJdW5zaWduZWQgaW50IHJ4X2N1cnJlbnRfZmlsbDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X2xpc3Q7CisKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50IGxhc3RfZHVwbGV4OworCXVuc2lnbmVkIGludCBsYXN0X2xpbms7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF9jbGVhbl90YXNrbGV0OworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Cit9OworCitzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF9zZXRfcnhfaXJxKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJdW5pb24gY3ZteF9taXh4X2ludGVuYSBtaXhfaW50ZW5hOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCW1peF9pbnRlbmEudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSU5URU5BKHBvcnQpKTsKKwltaXhfaW50ZW5hLnMuaXRoZW5hID0gZW5hYmxlID8gMSA6IDA7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0lOVEVOQShwb3J0KSwgbWl4X2ludGVuYS51NjQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfc2V0X3R4X2lycShzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAsIGludCBlbmFibGUpCit7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIGN2bXhfbWl4eF9pbnRlbmEgbWl4X2ludGVuYTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwltaXhfaW50ZW5hLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9NSVhYX0lOVEVOQShwb3J0KSk7CisJbWl4X2ludGVuYS5zLm90aGVuYSA9IGVuYWJsZSA/IDEgOiAwOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9JTlRFTkEocG9ydCksIG1peF9pbnRlbmEudTY0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fbWdtdF9lbmFibGVfcnhfaXJxKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCkKK3sKKwlvY3Rlb25fbWdtdF9zZXRfcnhfaXJxKHAsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX21nbXRfZGlzYWJsZV9yeF9pcnEoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCW9jdGVvbl9tZ210X3NldF9yeF9pcnEocCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY3Rlb25fbWdtdF9lbmFibGVfdHhfaXJxKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCkKK3sKKwlvY3Rlb25fbWdtdF9zZXRfdHhfaXJxKHAsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX21nbXRfZGlzYWJsZV90eF9pcnEoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCW9jdGVvbl9tZ210X3NldF90eF9pcnEocCwgMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmluZ19tYXhfZmlsbCh1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCXJldHVybiByaW5nX3NpemUgLSA4OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJpbmdfc2l6ZV90b19ieXRlcyh1bnNpZ25lZCBpbnQgcmluZ19zaXplKQoreworCXJldHVybiByaW5nX3NpemUgKiBzaXplb2YodW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF9yeF9maWxsX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKworCXdoaWxlIChwLT5yeF9jdXJyZW50X2ZpbGwgPCByaW5nX21heF9maWxsKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSkpIHsKKwkJdW5zaWduZWQgaW50IHNpemU7CisJCXVuaW9uIG1nbXRfcG9ydF9yaW5nX2VudHJ5IHJlOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJCS8qIENONTZYWCBwYXNzIDEgbmVlZHMgOCBieXRlcyBvZiBwYWRkaW5nLiAgKi8KKwkJc2l6ZSA9IG5ldGRldi0+bXR1ICsgT0NURU9OX01HTVRfUlhfSEVBRFJPT00gKyA4ICsgTkVUX0lQX0FMSUdOOworCisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBzaXplKTsKKwkJaWYgKCFza2IpCisJCQlicmVhazsKKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQlfX3NrYl9xdWV1ZV90YWlsKCZwLT5yeF9saXN0LCBza2IpOworCisJCXJlLmQ2NCA9IDA7CisJCXJlLnMubGVuID0gc2l6ZTsKKwkJcmUucy5hZGRyID0gZG1hX21hcF9zaW5nbGUocC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgIHNpemUsCisJCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogUHV0IGl0IGluIHRoZSByaW5nLiAgKi8KKwkJcC0+cnhfcmluZ1twLT5yeF9uZXh0X2ZpbGxdID0gcmUuZDY0OworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwLT5kZXYsIHAtPnJ4X3JpbmdfaGFuZGxlLAorCQkJCQkgICByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfUlhfUklOR19TSVpFKSwKKwkJCQkJICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQlwLT5yeF9uZXh0X2ZpbGwgPQorCQkJKHAtPnJ4X25leHRfZmlsbCArIDEpICUgT0NURU9OX01HTVRfUlhfUklOR19TSVpFOworCQlwLT5yeF9jdXJyZW50X2ZpbGwrKzsKKwkJLyogUmluZyB0aGUgYmVsbC4gICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9JUklORzIocG9ydCksIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfY2xlYW5fdHhfYnVmZmVycyhzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnApCit7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIGN2bXhfbWl4eF9vcmNudCBtaXhfb3JjbnQ7CisJdW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkgcmU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgY2xlYW5lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1peF9vcmNudC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9PUkNOVChwb3J0KSk7CisJd2hpbGUgKG1peF9vcmNudC5zLm9yY250KSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHAtPmRldiwgcC0+dHhfcmluZ19oYW5kbGUsCisJCQkJCXJpbmdfc2l6ZV90b19ieXRlcyhPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUpLAorCQkJCQlETUFfQklESVJFQ1RJT05BTCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJCXJlLmQ2NCA9IHAtPnR4X3JpbmdbcC0+dHhfbmV4dF9jbGVhbl07CisJCXAtPnR4X25leHRfY2xlYW4gPQorCQkJKHAtPnR4X25leHRfY2xlYW4gKyAxKSAlIE9DVEVPTl9NR01UX1RYX1JJTkdfU0laRTsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmcC0+dHhfbGlzdCk7CisKKwkJbWl4X29yY250LnU2NCA9IDA7CisJCW1peF9vcmNudC5zLm9yY250ID0gMTsKKworCQkvKiBBY2tub3dsZWRnZSB0byBoYXJkd2FyZSB0aGF0IHdlIGhhdmUgdGhlIGJ1ZmZlci4gICovCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9PUkNOVChwb3J0KSwgbWl4X29yY250LnU2NCk7CisJCXAtPnR4X2N1cnJlbnRfZmlsbC0tOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJCWRtYV91bm1hcF9zaW5nbGUocC0+ZGV2LCByZS5zLmFkZHIsIHJlLnMubGVuLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJY2xlYW5lZCsrOworCisJCW1peF9vcmNudC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9PUkNOVChwb3J0KSk7CisJfQorCisJaWYgKGNsZWFuZWQgJiYgbmV0aWZfcXVldWVfc3RvcHBlZChwLT5uZXRkZXYpKQorCQluZXRpZl93YWtlX3F1ZXVlKHAtPm5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X2NsZWFuX3R4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gKHN0cnVjdCBvY3Rlb25fbWdtdCAqKWFyZzsKKwlvY3Rlb25fbWdtdF9jbGVhbl90eF9idWZmZXJzKHApOworCW9jdGVvbl9tZ210X2VuYWJsZV90eF9pcnEocCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IGRyb3AsIGJhZDsKKworCS8qIFRoZXNlIHJlYWRzIGFsc28gY2xlYXIgdGhlIGNvdW50IHJlZ2lzdGVycy4gICovCisJZHJvcCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9TVEFUU19QS1RTX0RSUChwb3J0KSk7CisJYmFkID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfQkFEKHBvcnQpKTsKKworCWlmIChkcm9wIHx8IGJhZCkgeworCQkvKiBEbyBhbiBhdG9taWMgdXBkYXRlLiAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCQluZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycyArPSBiYWQ7CisJCW5ldGRldi0+c3RhdHMucnhfZHJvcHBlZCArPSBkcm9wOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBvY3Rlb25fbWdtdF91cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdW5pb24gY3ZteF9hZ2xfZ214X3R4eF9zdGF0MCBzMDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfdHh4X3N0YXQxIHMxOworCisJLyogVGhlc2UgcmVhZHMgYWxzbyBjbGVhciB0aGUgY291bnQgcmVnaXN0ZXJzLiAgKi8KKwlzMC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfQUdMX0dNWF9UWFhfU1RBVDAocG9ydCkpOworCXMxLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX1RYWF9TVEFUMShwb3J0KSk7CisKKwlpZiAoczAucy54c2RlZiB8fCBzMC5zLnhzY29sIHx8IHMxLnMuc2NvbCB8fCBzMS5zLm1jb2wpIHsKKwkJLyogRG8gYW4gYXRvbWljIHVwZGF0ZS4gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKwkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0gczAucy54c2RlZiArIHMwLnMueHNjb2w7CisJCW5ldGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBzMS5zLnNjb2wgKyBzMS5zLm1jb2w7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBEZXF1ZXVlIGEgcmVjZWl2ZSBza2IgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHJpbmcgZW50cnkuICBUaGUgcmluZworICogZW50cnkgaXMgcmV0dXJuZWQsICpwc2tiIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIHNrYi4KKyAqLworc3RhdGljIHU2NCBvY3Rlb25fbWdtdF9kZXF1ZXVlX3J4X2J1ZmZlcihzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAsCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCit7CisJdW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkgcmU7CisKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShwLT5kZXYsIHAtPnJ4X3JpbmdfaGFuZGxlLAorCQkJCXJpbmdfc2l6ZV90b19ieXRlcyhPQ1RFT05fTUdNVF9SWF9SSU5HX1NJWkUpLAorCQkJCURNQV9CSURJUkVDVElPTkFMKTsKKworCXJlLmQ2NCA9IHAtPnJ4X3JpbmdbcC0+cnhfbmV4dF07CisJcC0+cnhfbmV4dCA9IChwLT5yeF9uZXh0ICsgMSkgJSBPQ1RFT05fTUdNVF9SWF9SSU5HX1NJWkU7CisJcC0+cnhfY3VycmVudF9maWxsLS07CisJKnBza2IgPSBfX3NrYl9kZXF1ZXVlKCZwLT5yeF9saXN0KTsKKworCWRtYV91bm1hcF9zaW5nbGUocC0+ZGV2LCByZS5zLmFkZHIsCisJCQkgRVRIX0ZSQU1FX0xFTiArIE9DVEVPTl9NR01UX1JYX0hFQURST09NLAorCQkJIERNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gcmUuZDY0OworfQorCisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfcmVjZWl2ZV9vbmUoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCWludCBwb3J0ID0gcC0+cG9ydDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcC0+bmV0ZGV2OworCXVuaW9uIGN2bXhfbWl4eF9pcmNudCBtaXhfaXJjbnQ7CisJdW5pb24gbWdtdF9wb3J0X3JpbmdfZW50cnkgcmU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldzsKKwl1bmlvbiBtZ210X3BvcnRfcmluZ19lbnRyeSByZTI7CisJaW50IHJjID0gMTsKKworCisJcmUuZDY0ID0gb2N0ZW9uX21nbXRfZGVxdWV1ZV9yeF9idWZmZXIocCwgJnNrYik7CisJaWYgKGxpa2VseShyZS5zLmNvZGUgPT0gUklOR19FTlRSWV9DT0RFX0RPTkUpKSB7CisJCS8qIEEgZ29vZCBwYWNrZXQsIHNlbmQgaXQgdXAuICovCisJCXNrYl9wdXQoc2tiLCByZS5zLmxlbik7Citnb29kOgorCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCQluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJcmMgPSAwOworCX0gZWxzZSBpZiAocmUucy5jb2RlID09IFJJTkdfRU5UUllfQ09ERV9NT1JFKSB7CisJCS8qCisJCSAqIFBhY2tldCBzcGxpdCBhY3Jvc3Mgc2ticy4gIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZQorCQkgKiBpbmNyZWFzZSB0aGUgTVRVLiAgQnVmZmVycyB0aGF0IGFyZSBhbHJlYWR5IGluIHRoZQorCQkgKiByeCByaW5nIGNhbiB0aGVuIGVuZCB1cCBiZWluZyB0b28gc21hbGwuICBBcyB0aGUgcngKKwkJICogcmluZyBpcyByZWZpbGxlZCwgYnVmZmVycyBzaXplZCBmb3IgdGhlIG5ldyBNVFUKKwkJICogd2lsbCBiZSB1c2VkIGFuZCB3ZSBzaG91bGQgZ28gYmFjayB0byB0aGUgbm9ybWFsCisJCSAqIG5vbi1zcGxpdCBjYXNlLgorCQkgKi8KKwkJc2tiX3B1dChza2IsIHJlLnMubGVuKTsKKwkJZG8geworCQkJcmUyLmQ2NCA9IG9jdGVvbl9tZ210X2RlcXVldWVfcnhfYnVmZmVyKHAsICZza2IyKTsKKwkJCWlmIChyZTIucy5jb2RlICE9IFJJTkdfRU5UUllfQ09ERV9NT1JFCisJCQkJJiYgcmUyLnMuY29kZSAhPSBSSU5HX0VOVFJZX0NPREVfRE9ORSkKKwkJCQlnb3RvIHNwbGl0X2Vycm9yOworCQkJc2tiX3B1dChza2IyLCAgcmUyLnMubGVuKTsKKwkJCXNrYl9uZXcgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBza2IyLT5sZW4sCisJCQkJCQkgIEdGUF9BVE9NSUMpOworCQkJaWYgKCFza2JfbmV3KQorCQkJCWdvdG8gc3BsaXRfZXJyb3I7CisJCQlpZiAoc2tiX2NvcHlfYml0cyhza2IyLCAwLCBza2JfdGFpbF9wb2ludGVyKHNrYl9uZXcpLAorCQkJCQkgIHNrYjItPmxlbikpCisJCQkJZ290byBzcGxpdF9lcnJvcjsKKwkJCXNrYl9wdXQoc2tiX25ldywgc2tiMi0+bGVuKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IyKTsKKwkJCXNrYiA9IHNrYl9uZXc7CisJCX0gd2hpbGUgKHJlMi5zLmNvZGUgPT0gUklOR19FTlRSWV9DT0RFX01PUkUpOworCQlnb3RvIGdvb2Q7CisJfSBlbHNlIHsKKwkJLyogU29tZSBvdGhlciBlcnJvciwgZGlzY2FyZCBpdC4gKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJLyoKKwkJICogRXJyb3Igc3RhdGlzdGljcyBhcmUgYWNjdW11bGF0ZWQgaW4KKwkJICogb2N0ZW9uX21nbXRfdXBkYXRlX3J4X3N0YXRzLgorCQkgKi8KKwl9CisJZ290byBkb25lOworc3BsaXRfZXJyb3I6CisJLyogRGlzY2FyZCB0aGUgd2hvbGUgbWVzcy4gKi8KKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWRldl9rZnJlZV9za2JfYW55KHNrYjIpOworCXdoaWxlIChyZTIucy5jb2RlID09IFJJTkdfRU5UUllfQ09ERV9NT1JFKSB7CisJCXJlMi5kNjQgPSBvY3Rlb25fbWdtdF9kZXF1ZXVlX3J4X2J1ZmZlcihwLCAmc2tiMik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYjIpOworCX0KKwluZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCitkb25lOgorCS8qIFRlbGwgdGhlIGhhcmR3YXJlIHdlIHByb2Nlc3NlZCBhIHBhY2tldC4gICovCisJbWl4X2lyY250LnU2NCA9IDA7CisJbWl4X2lyY250LnMuaXJjbnQgPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9JUkNOVChwb3J0KSwgbWl4X2lyY250LnU2NCk7CisJcmV0dXJuIHJjOworCit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfcmVjZWl2ZV9wYWNrZXRzKHN0cnVjdCBvY3Rlb25fbWdtdCAqcCwgaW50IGJ1ZGdldCkKK3sKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJdW5zaWduZWQgaW50IHdvcmtfZG9uZSA9IDA7CisJdW5pb24gY3ZteF9taXh4X2lyY250IG1peF9pcmNudDsKKwlpbnQgcmM7CisKKworCW1peF9pcmNudC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9JUkNOVChwb3J0KSk7CisJd2hpbGUgKHdvcmtfZG9uZSA8IGJ1ZGdldCAmJiBtaXhfaXJjbnQucy5pcmNudCkgeworCisJCXJjID0gb2N0ZW9uX21nbXRfcmVjZWl2ZV9vbmUocCk7CisJCWlmICghcmMpCisJCQl3b3JrX2RvbmUrKzsKKworCQkvKiBDaGVjayBmb3IgbW9yZSBwYWNrZXRzLiAqLworCQltaXhfaXJjbnQudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVJDTlQocG9ydCkpOworCX0KKworCW9jdGVvbl9tZ210X3J4X2ZpbGxfcmluZyhwLT5uZXRkZXYpOworCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworc3RhdGljIGludCBvY3Rlb25fbWdtdF9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3Qgb2N0ZW9uX21nbXQsIG5hcGkpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwLT5uZXRkZXY7CisJdW5zaWduZWQgaW50IHdvcmtfZG9uZSA9IDA7CisKKwl3b3JrX2RvbmUgPSBvY3Rlb25fbWdtdF9yZWNlaXZlX3BhY2tldHMocCwgYnVkZ2V0KTsKKworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJLyogV2Ugc3RvcHBlZCBiZWNhdXNlIG5vIG1vcmUgcGFja2V0cyB3ZXJlIGF2YWlsYWJsZS4gKi8KKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJb2N0ZW9uX21nbXRfZW5hYmxlX3J4X2lycShwKTsKKwl9CisJb2N0ZW9uX21nbXRfdXBkYXRlX3J4X3N0YXRzKG5ldGRldik7CisKKwlyZXR1cm4gd29ya19kb25lOworfQorCisvKiBSZXNldCB0aGUgaGFyZHdhcmUgdG8gY2xlYW4gc3RhdGUuICAqLworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfcmVzZXRfaHcoc3RydWN0IG9jdGVvbl9tZ210ICpwKQoreworCXVuaW9uIGN2bXhfbWl4eF9jdGwgbWl4X2N0bDsKKwl1bmlvbiBjdm14X21peHhfYmlzdCBtaXhfYmlzdDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfYmlzdCBhZ2xfZ214X2Jpc3Q7CisKKwltaXhfY3RsLnU2NCA9IDA7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0NUTChwLT5wb3J0KSwgbWl4X2N0bC51NjQpOworCWRvIHsKKwkJbWl4X2N0bC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9DVEwocC0+cG9ydCkpOworCX0gd2hpbGUgKG1peF9jdGwucy5idXN5KTsKKwltaXhfY3RsLnMucmVzZXQgPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9DVEwocC0+cG9ydCksIG1peF9jdGwudTY0KTsKKwljdm14X3JlYWRfY3NyKENWTVhfTUlYWF9DVEwocC0+cG9ydCkpOworCWN2bXhfd2FpdCg2NCk7CisKKwltaXhfYmlzdC51NjQgPSBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9CSVNUKHAtPnBvcnQpKTsKKwlpZiAobWl4X2Jpc3QudTY0KQorCQlkZXZfd2FybihwLT5kZXYsICJNSVggZmFpbGVkIEJJU1QgKDB4JTAxNmxseClcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKW1peF9iaXN0LnU2NCk7CisKKwlhZ2xfZ214X2Jpc3QudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfQklTVCk7CisJaWYgKGFnbF9nbXhfYmlzdC51NjQpCisJCWRldl93YXJuKHAtPmRldiwgIkFHTCBmYWlsZWQgQklTVCAoMHglMDE2bGx4KVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKWFnbF9nbXhfYmlzdC51NjQpOworfQorCitzdHJ1Y3Qgb2N0ZW9uX21nbXRfY2FtX3N0YXRlIHsKKwl1NjQgY2FtWzZdOworCXU2NCBjYW1fbWFzazsKKwlpbnQgY2FtX2luZGV4OworfTsKKworc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfY2FtX3N0YXRlX2FkZChzdHJ1Y3Qgb2N0ZW9uX21nbXRfY2FtX3N0YXRlICpjcywKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJY3MtPmNhbVtpXSB8PSAodTY0KWFkZHJbaV0gPDwgKDggKiAoY3MtPmNhbV9pbmRleCkpOworCWNzLT5jYW1fbWFzayB8PSAoMVVMTCA8PCBjcy0+Y2FtX2luZGV4KTsKKwljcy0+Y2FtX2luZGV4Kys7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X3NldF9yeF9maWx0ZXJpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKwlpbnQgaTsKKwl1bmlvbiBjdm14X2FnbF9nbXhfcnh4X2Fkcl9jdGwgYWRyX2N0bDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfcHJ0eF9jZmcgYWdsX2dteF9wcnR4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHByZXZfcGFja2V0X2VuYWJsZTsKKwl1bnNpZ25lZCBpbnQgY2FtX21vZGUgPSAxOyAvKiAxIC0gQWNjZXB0IG9uIENBTSBtYXRjaCAqLworCXVuc2lnbmVkIGludCBtdWx0aWNhc3RfbW9kZSA9IDE7IC8qIDEgLSBSZWplY3QgYWxsIG11bHRpY2FzdC4gICovCisJc3RydWN0IG9jdGVvbl9tZ210X2NhbV9zdGF0ZSBjYW1fc3RhdGU7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKmxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWludCBhdmFpbGFibGVfY2FtX2VudHJpZXM7CisKKwltZW1zZXQoJmNhbV9zdGF0ZSwgMCwgc2l6ZW9mKGNhbV9zdGF0ZSkpOworCisJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IG5ldGRldi0+ZGV2X2FkZHJzLmNvdW50ID4gNykgeworCQljYW1fbW9kZSA9IDA7CisJCWF2YWlsYWJsZV9jYW1fZW50cmllcyA9IDg7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT25lIENBTSBlbnRyeSBmb3IgdGhlIHByaW1hcnkgYWRkcmVzcywgbGVhdmVzIHNldmVuCisJCSAqIGZvciB0aGUgc2Vjb25kYXJ5IGFkZHJlc3Nlcy4KKwkJICovCisJCWF2YWlsYWJsZV9jYW1fZW50cmllcyA9IDcgLSBuZXRkZXYtPmRldl9hZGRycy5jb3VudDsKKwl9CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKKwkJaWYgKGNhbV9tb2RlID09IDAgfHwgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCSAgICB8fCBuZXRkZXYtPm1jX2NvdW50ICA+IGF2YWlsYWJsZV9jYW1fZW50cmllcykKKwkJCW11bHRpY2FzdF9tb2RlID0gMjsgLyogMSAtIEFjY2VwdCBhbGwgbXVsdGljYXN0LiAgKi8KKwkJZWxzZQorCQkJbXVsdGljYXN0X21vZGUgPSAwOyAvKiAwIC0gVXNlIENBTS4gICovCisJfQorCisJaWYgKGNhbV9tb2RlID09IDEpIHsKKwkJLyogQWRkIHByaW1hcnkgYWRkcmVzcy4gKi8KKwkJb2N0ZW9uX21nbXRfY2FtX3N0YXRlX2FkZCgmY2FtX3N0YXRlLCBuZXRkZXYtPmRldl9hZGRyKTsKKwkJbGlzdF9mb3JfZWFjaChwb3MsICZuZXRkZXYtPmRldl9hZGRycy5saXN0KSB7CisJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmh3X2FkZHI7CisJCQlod19hZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7CisJCQlvY3Rlb25fbWdtdF9jYW1fc3RhdGVfYWRkKCZjYW1fc3RhdGUsIGh3X2FkZHItPmFkZHIpOworCQkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCX0KKwl9CisJaWYgKG11bHRpY2FzdF9tb2RlID09IDApIHsKKwkJaSA9IG5ldGRldi0+bWNfY291bnQ7CisJCWxpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7CisJCXdoaWxlIChpLS0pIHsKKwkJCW9jdGVvbl9tZ210X2NhbV9zdGF0ZV9hZGQoJmNhbV9zdGF0ZSwgbGlzdC0+ZGFfYWRkcik7CisJCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJfQorCX0KKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgcGFja2V0IEkvTy4gKi8KKwlhZ2xfZ214X3BydHgudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCkpOworCXByZXZfcGFja2V0X2VuYWJsZSA9IGFnbF9nbXhfcHJ0eC5zLmVuOworCWFnbF9nbXhfcHJ0eC5zLmVuID0gMDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCksIGFnbF9nbXhfcHJ0eC51NjQpOworCisKKwlhZHJfY3RsLnU2NCA9IDA7CisJYWRyX2N0bC5zLmNhbV9tb2RlID0gY2FtX21vZGU7CisJYWRyX2N0bC5zLm1jc3QgPSBtdWx0aWNhc3RfbW9kZTsKKwlhZHJfY3RsLnMuYmNzdCA9IDE7ICAgICAvKiBBbGxvdyBicm9hZGNhc3QgKi8KKworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfQURSX0NUTChwb3J0KSwgYWRyX2N0bC51NjQpOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMChwb3J0KSwgY2FtX3N0YXRlLmNhbVswXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMShwb3J0KSwgY2FtX3N0YXRlLmNhbVsxXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMihwb3J0KSwgY2FtX3N0YXRlLmNhbVsyXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNMyhwb3J0KSwgY2FtX3N0YXRlLmNhbVszXSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNNChwb3J0KSwgY2FtX3N0YXRlLmNhbVs0XSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNNShwb3J0KSwgY2FtX3N0YXRlLmNhbVs1XSk7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX1JYWF9BRFJfQ0FNX0VOKHBvcnQpLCBjYW1fc3RhdGUuY2FtX21hc2spOworCisJLyogUmVzdG9yZSBwYWNrZXQgSS9PLiAqLworCWFnbF9nbXhfcHJ0eC5zLmVuID0gcHJldl9wYWNrZXRfZW5hYmxlOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9QUlRYX0NGRyhwb3J0KSwgYWdsX2dteF9wcnR4LnU2NCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IGFkZHI7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoc2EtPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgc2EtPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworCW9jdGVvbl9tZ210X3NldF9yeF9maWx0ZXJpbmcobmV0ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jdGVvbl9tZ210X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJaW50IHNpemVfd2l0aG91dF9mY3MgPSBuZXdfbXR1ICsgT0NURU9OX01HTVRfUlhfSEVBRFJPT007CisKKwkvKgorCSAqIExpbWl0IHRoZSBNVFUgdG8gbWFrZSBzdXJlIHRoZSBldGhlcm5ldCBwYWNrZXRzIGFyZSBiZXR3ZWVuCisJICogNjQgYnl0ZXMgYW5kIDE2MzgzIGJ5dGVzLgorCSAqLworCWlmIChzaXplX3dpdGhvdXRfZmNzIDwgNjQgfHwgc2l6ZV93aXRob3V0X2ZjcyA+IDE2MzgzKSB7CisJCWRldl93YXJuKHAtPmRldiwgIk1UVSBtdXN0IGJlIGJldHdlZW4gJWQgYW5kICVkLlxuIiwKKwkJCSA2NCAtIE9DVEVPTl9NR01UX1JYX0hFQURST09NLAorCQkJIDE2MzgzIC0gT0NURU9OX01HTVRfUlhfSEVBRFJPT00pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUlhYX0ZSTV9NQVgocG9ydCksIHNpemVfd2l0aG91dF9mY3MpOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfSkFCQkVSKHBvcnQpLAorCQkgICAgICAgKHNpemVfd2l0aG91dF9mY3MgKyA3KSAmIDB4ZmZmOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9tZ210X2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldl9pZDsKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBwb3J0ID0gcC0+cG9ydDsKKwl1bmlvbiBjdm14X21peHhfaXNyIG1peHhfaXNyOworCisJbWl4eF9pc3IudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpLAorCQkgICAgICAgY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpKSk7CisJY3ZteF9yZWFkX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpKTsKKworCWlmIChtaXh4X2lzci5zLmlydGhyZXNoKSB7CisJCW9jdGVvbl9tZ210X2Rpc2FibGVfcnhfaXJxKHApOworCQluYXBpX3NjaGVkdWxlKCZwLT5uYXBpKTsKKwl9CisJaWYgKG1peHhfaXNyLnMub3J0aHJlc2gpIHsKKwkJb2N0ZW9uX21nbXRfZGlzYWJsZV90eF9pcnEocCk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnAtPnR4X2NsZWFuX3Rhc2tsZXQpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBvY3Rlb25fbWdtdF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXAtPnBoeWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwLT5waHlkZXYsIGlmX21paShycSksIGNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcG9ydCA9IHAtPnBvcnQ7CisJdW5pb24gY3ZteF9hZ2xfZ214X3BydHhfY2ZnIHBydHhfY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxpbmtfY2hhbmdlZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCWlmIChwLT5waHlkZXYtPmxpbmspIHsKKwkJaWYgKCFwLT5sYXN0X2xpbmspCisJCQlsaW5rX2NoYW5nZWQgPSAxOworCQlpZiAocC0+bGFzdF9kdXBsZXggIT0gcC0+cGh5ZGV2LT5kdXBsZXgpIHsKKwkJCXAtPmxhc3RfZHVwbGV4ID0gcC0+cGh5ZGV2LT5kdXBsZXg7CisJCQlwcnR4X2NmZy51NjQgPQorCQkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX1BSVFhfQ0ZHKHBvcnQpKTsKKwkJCXBydHhfY2ZnLnMuZHVwbGV4ID0gcC0+cGh5ZGV2LT5kdXBsZXg7CisJCQljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCksCisJCQkJICAgICAgIHBydHhfY2ZnLnU2NCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocC0+bGFzdF9saW5rKQorCQkJbGlua19jaGFuZ2VkID0gLTE7CisJfQorCXAtPmxhc3RfbGluayA9IHAtPnBoeWRldi0+bGluazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAobGlua19jaGFuZ2VkICE9IDApIHsKKwkJaWYgKGxpbmtfY2hhbmdlZCA+IDApIHsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCXByX2luZm8oIiVzOiBMaW5rIGlzIHVwIC0gJWQvJXNcbiIsIG5ldGRldi0+bmFtZSwKKwkJCQlwLT5waHlkZXYtPnNwZWVkLAorCQkJCURVUExFWF9GVUxMID09IHAtPnBoeWRldi0+ZHVwbGV4ID8KKwkJCQkiRnVsbCIgOiAiSGFsZiIpOworCQl9IGVsc2UgeworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCXByX2luZm8oIiVzOiBMaW5rIGlzIGRvd25cbiIsIG5ldGRldi0+bmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWNoYXIgcGh5X2lkWzIwXTsKKworCWlmIChvY3Rlb25faXNfc2ltdWxhdGlvbigpKSB7CisJCS8qIE5vIFBIWXMgaW4gdGhlIHNpbXVsYXRvci4gKi8KKwkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbnByaW50ZihwaHlfaWQsIHNpemVvZihwaHlfaWQpLCBQSFlfSURfRk1ULCAiMCIsIHAtPnBvcnQpOworCisJcC0+cGh5ZGV2ID0gcGh5X2Nvbm5lY3QobmV0ZGV2LCBwaHlfaWQsIG9jdGVvbl9tZ210X2FkanVzdF9saW5rLCAwLAorCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCisJaWYgKElTX0VSUihwLT5waHlkZXYpKSB7CisJCXAtPnBoeWRldiA9IE5VTEw7CisJCXJldHVybiAtMTsKKwl9CisKKwlwaHlfc3RhcnRfYW5lZyhwLT5waHlkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIGN2bXhfbWl4eF9jdGwgbWl4X2N0bDsKKwl1bmlvbiBjdm14X2FnbF9nbXhfaW5mX21vZGUgYWdsX2dteF9pbmZfbW9kZTsKKwl1bmlvbiBjdm14X21peHhfb3JpbmcxIG9yaW5nMTsKKwl1bmlvbiBjdm14X21peHhfaXJpbmcxIGlyaW5nMTsKKwl1bmlvbiBjdm14X2FnbF9nbXhfcHJ0eF9jZmcgcHJ0eF9jZmc7CisJdW5pb24gY3ZteF9hZ2xfZ214X3J4eF9mcm1fY3RsIHJ4eF9mcm1fY3RsOworCXVuaW9uIGN2bXhfbWl4eF9pcmh3bSBtaXhfaXJod207CisJdW5pb24gY3ZteF9taXh4X29yaHdtIG1peF9vcmh3bTsKKwl1bmlvbiBjdm14X21peHhfaW50ZW5hIG1peF9pbnRlbmE7CisJc3RydWN0IHNvY2thZGRyIHNhOworCisJLyogQWxsb2NhdGUgcmluZyBidWZmZXJzLiAgKi8KKwlwLT50eF9yaW5nID0ga3phbGxvYyhyaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwLT50eF9yaW5nKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwLT50eF9yaW5nX2hhbmRsZSA9CisJCWRtYV9tYXBfc2luZ2xlKHAtPmRldiwgcC0+dHhfcmluZywKKwkJCSAgICAgICByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCSAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJcC0+dHhfbmV4dCA9IDA7CisJcC0+dHhfbmV4dF9jbGVhbiA9IDA7CisJcC0+dHhfY3VycmVudF9maWxsID0gMDsKKworCisJcC0+cnhfcmluZyA9IGt6YWxsb2MocmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghcC0+cnhfcmluZykKKwkJZ290byBlcnJfbm9tZW07CisJcC0+cnhfcmluZ19oYW5kbGUgPQorCQlkbWFfbWFwX3NpbmdsZShwLT5kZXYsIHAtPnJ4X3JpbmcsCisJCQkgICAgICAgcmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCisJcC0+cnhfbmV4dCA9IDA7CisJcC0+cnhfbmV4dF9maWxsID0gMDsKKwlwLT5yeF9jdXJyZW50X2ZpbGwgPSAwOworCisJb2N0ZW9uX21nbXRfcmVzZXRfaHcocCk7CisKKwltaXhfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9NSVhYX0NUTChwb3J0KSk7CisKKwkvKiBCcmluZyBpdCBvdXQgb2YgcmVzZXQgaWYgbmVlZGVkLiAqLworCWlmIChtaXhfY3RsLnMucmVzZXQpIHsKKwkJbWl4X2N0bC5zLnJlc2V0ID0gMDsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0NUTChwb3J0KSwgbWl4X2N0bC51NjQpOworCQlkbyB7CisJCQltaXhfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9NSVhYX0NUTChwb3J0KSk7CisJCX0gd2hpbGUgKG1peF9jdGwucy5yZXNldCk7CisJfQorCisJYWdsX2dteF9pbmZfbW9kZS51NjQgPSAwOworCWFnbF9nbXhfaW5mX21vZGUucy5lbiA9IDE7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX0lORl9NT0RFLCBhZ2xfZ214X2luZl9tb2RlLnU2NCk7CisKKwlvcmluZzEudTY0ID0gMDsKKwlvcmluZzEucy5vYmFzZSA9IHAtPnR4X3JpbmdfaGFuZGxlID4+IDM7CisJb3JpbmcxLnMub3NpemUgPSBPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX09SSU5HMShwb3J0KSwgb3JpbmcxLnU2NCk7CisKKwlpcmluZzEudTY0ID0gMDsKKwlpcmluZzEucy5pYmFzZSA9IHAtPnJ4X3JpbmdfaGFuZGxlID4+IDM7CisJaXJpbmcxLnMuaXNpemUgPSBPQ1RFT05fTUdNVF9SWF9SSU5HX1NJWkU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX0lSSU5HMShwb3J0KSwgaXJpbmcxLnU2NCk7CisKKwkvKiBEaXNhYmxlIHBhY2tldCBJL08uICovCisJcHJ0eF9jZmcudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCkpOworCXBydHhfY2ZnLnMuZW4gPSAwOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9QUlRYX0NGRyhwb3J0KSwgcHJ0eF9jZmcudTY0KTsKKworCW1lbWNweShzYS5zYV9kYXRhLCBuZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJb2N0ZW9uX21nbXRfc2V0X21hY19hZGRyZXNzKG5ldGRldiwgJnNhKTsKKworCW9jdGVvbl9tZ210X2NoYW5nZV9tdHUobmV0ZGV2LCBuZXRkZXYtPm10dSk7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgcG9ydCBIVy4gUGFja2V0cyBhcmUgbm90IGFsbG93ZWQgdW50aWwKKwkgKiBjdm14X21nbXRfcG9ydF9lbmFibGUoKSBpcyBjYWxsZWQuCisJICovCisJbWl4X2N0bC51NjQgPSAwOworCW1peF9jdGwucy5jcmNfc3RyaXAgPSAxOyAgICAvKiBTdHJpcCB0aGUgZW5kaW5nIENSQyAqLworCW1peF9jdGwucy5lbiA9IDE7ICAgICAgICAgICAvKiBFbmFibGUgdGhlIHBvcnQgKi8KKwltaXhfY3RsLnMubmJ0YXJiID0gMDsgICAgICAgLyogQXJiaXRyYXRpb24gbW9kZSAqLworCS8qIE1JSSBDQi1yZXF1ZXN0IEZJRk8gcHJvZ3JhbW1hYmxlIGhpZ2ggd2F0ZXJtYXJrICovCisJbWl4X2N0bC5zLm1ycV9od20gPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9DVEwocG9ydCksIG1peF9jdGwudTY0KTsKKworCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMV9YKQorCSAgICB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMV9YKSkgeworCQkvKgorCQkgKiBGb3JjZSBjb21wZW5zYXRpb24gdmFsdWVzLCBhcyB0aGV5IGFyZSBub3QKKwkJICogZGV0ZXJtaW5lZCBwcm9wZXJseSBieSBIVworCQkgKi8KKwkJdW5pb24gY3ZteF9hZ2xfZ214X2Rydl9jdGwgZHJ2X2N0bDsKKworCQlkcnZfY3RsLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9BR0xfR01YX0RSVl9DVEwpOworCQlpZiAocG9ydCkgeworCQkJZHJ2X2N0bC5zLmJ5cF9lbjEgPSAxOworCQkJZHJ2X2N0bC5zLm5jdGwxID0gNjsKKwkJCWRydl9jdGwucy5wY3RsMSA9IDY7CisJCX0gZWxzZSB7CisJCQlkcnZfY3RsLnMuYnlwX2VuID0gMTsKKwkJCWRydl9jdGwucy5uY3RsID0gNjsKKwkJCWRydl9jdGwucy5wY3RsID0gNjsKKwkJfQorCQljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfRFJWX0NUTCwgZHJ2X2N0bC51NjQpOworCX0KKworCW9jdGVvbl9tZ210X3J4X2ZpbGxfcmluZyhuZXRkZXYpOworCisJLyogQ2xlYXIgc3RhdGlzdGljcy4gKi8KKwkvKiBDbGVhciBvbiByZWFkLiAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfU1RBVFNfQ1RMKHBvcnQpLCAxKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfRFJQKHBvcnQpLCAwKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfUlhYX1NUQVRTX1BLVFNfQkFEKHBvcnQpLCAwKTsKKworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9UWFhfU1RBVFNfQ1RMKHBvcnQpLCAxKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfVFhYX1NUQVQwKHBvcnQpLCAwKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0FHTF9HTVhfVFhYX1NUQVQxKHBvcnQpLCAwKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSVNSKHBvcnQpLCBjdm14X3JlYWRfY3NyKENWTVhfTUlYWF9JU1IocG9ydCkpKTsKKworCWlmIChyZXF1ZXN0X2lycShwLT5pcnEsIG9jdGVvbl9tZ210X2ludGVycnVwdCwgMCwgbmV0ZGV2LT5uYW1lLAorCQkJbmV0ZGV2KSkgeworCQlkZXZfZXJyKHAtPmRldiwgInJlcXVlc3RfaXJxKCVkKSBmYWlsZWQuXG4iLCBwLT5pcnEpOworCQlnb3RvIGVycl9ub2lycTsKKwl9CisKKwkvKiBJbnRlcnJ1cHQgZXZlcnkgc2luZ2xlIFJYIHBhY2tldCAqLworCW1peF9pcmh3bS51NjQgPSAwOworCW1peF9pcmh3bS5zLmlyaHdtID0gMDsKKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSVJIV00ocG9ydCksIG1peF9pcmh3bS51NjQpOworCisJLyogSW50ZXJydXB0IHdoZW4gd2UgaGF2ZSA1IG9yIG1vcmUgcGFja2V0cyB0byBjbGVhbi4gICovCisJbWl4X29yaHdtLnU2NCA9IDA7CisJbWl4X29yaHdtLnMub3Jod20gPSA1OworCWN2bXhfd3JpdGVfY3NyKENWTVhfTUlYWF9PUkhXTShwb3J0KSwgbWl4X29yaHdtLnU2NCk7CisKKwkvKiBFbmFibGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgaW50ZXJydXB0cyAqLworCW1peF9pbnRlbmEudTY0ID0gMDsKKwltaXhfaW50ZW5hLnMuaXRoZW5hID0gMTsKKwltaXhfaW50ZW5hLnMub3RoZW5hID0gMTsKKwljdm14X3dyaXRlX2NzcihDVk1YX01JWFhfSU5URU5BKHBvcnQpLCBtaXhfaW50ZW5hLnU2NCk7CisKKworCS8qIEVuYWJsZSBwYWNrZXQgSS9PLiAqLworCisJcnh4X2ZybV9jdGwudTY0ID0gMDsKKwlyeHhfZnJtX2N0bC5zLnByZV9hbGlnbiA9IDE7CisJLyoKKwkgKiBXaGVuIHNldCwgZGlzYWJsZXMgdGhlIGxlbmd0aCBjaGVjayBmb3Igbm9uLW1pbiBzaXplZCBwa3RzCisJICogd2l0aCBwYWRkaW5nIGluIHRoZSBjbGllbnQgZGF0YS4KKwkgKi8KKwlyeHhfZnJtX2N0bC5zLnBhZF9sZW4gPSAxOworCS8qIFdoZW4gc2V0LCBkaXNhYmxlcyB0aGUgbGVuZ3RoIGNoZWNrIGZvciBWTEFOIHBrdHMgKi8KKwlyeHhfZnJtX2N0bC5zLnZsYW5fbGVuID0gMTsKKwkvKiBXaGVuIHNldCwgUFJFQU1CTEUgY2hlY2tpbmcgaXMgIGxlc3Mgc3RyaWN0ICovCisJcnh4X2ZybV9jdGwucy5wcmVfZnJlZSA9IDE7CisJLyogQ29udHJvbCBQYXVzZSBGcmFtZXMgY2FuIG1hdGNoIHN0YXRpb24gU01BQyAqLworCXJ4eF9mcm1fY3RsLnMuY3RsX3NtYWMgPSAwOworCS8qIENvbnRyb2wgUGF1c2UgRnJhbWVzIGNhbiBtYXRjaCBnbG9iYWxseSBhc3NpZ24gTXVsdGljYXN0IGFkZHJlc3MgKi8KKwlyeHhfZnJtX2N0bC5zLmN0bF9tY3N0ID0gMTsKKwkvKiBGb3J3YXJkIHBhdXNlIGluZm9ybWF0aW9uIHRvIFRYIGJsb2NrICovCisJcnh4X2ZybV9jdGwucy5jdGxfYmNrID0gMTsKKwkvKiBEcm9wIENvbnRyb2wgUGF1c2UgRnJhbWVzICovCisJcnh4X2ZybV9jdGwucy5jdGxfZHJwID0gMTsKKwkvKiBTdHJpcCBvZmYgdGhlIHByZWFtYmxlICovCisJcnh4X2ZybV9jdGwucy5wcmVfc3RycCA9IDE7CisJLyoKKwkgKiBUaGlzIHBvcnQgaXMgY29uZmlndXJlZCB0byBzZW5kIFBSRUFNQkxFK1NGRCB0byBiZWdpbiBldmVyeQorCSAqIGZyYW1lLiAgR01YIGNoZWNrcyB0aGF0IHRoZSBQUkVBTUJMRSBpcyBzZW50IGNvcnJlY3RseS4KKwkgKi8KKwlyeHhfZnJtX2N0bC5zLnByZV9jaGsgPSAxOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9SWFhfRlJNX0NUTChwb3J0KSwgcnh4X2ZybV9jdGwudTY0KTsKKworCS8qIEVuYWJsZSB0aGUgQUdMIGJsb2NrICovCisJYWdsX2dteF9pbmZfbW9kZS51NjQgPSAwOworCWFnbF9nbXhfaW5mX21vZGUucy5lbiA9IDE7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9BR0xfR01YX0lORl9NT0RFLCBhZ2xfZ214X2luZl9tb2RlLnU2NCk7CisKKwkvKiBDb25maWd1cmUgdGhlIHBvcnQgZHVwbGV4IGFuZCBlbmFibGVzICovCisJcHJ0eF9jZmcudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX0FHTF9HTVhfUFJUWF9DRkcocG9ydCkpOworCXBydHhfY2ZnLnMudHhfZW4gPSAxOworCXBydHhfY2ZnLnMucnhfZW4gPSAxOworCXBydHhfY2ZnLnMuZW4gPSAxOworCXAtPmxhc3RfZHVwbGV4ID0gMTsKKwlwcnR4X2NmZy5zLmR1cGxleCA9IHAtPmxhc3RfZHVwbGV4OworCWN2bXhfd3JpdGVfY3NyKENWTVhfQUdMX0dNWF9QUlRYX0NGRyhwb3J0KSwgcHJ0eF9jZmcudTY0KTsKKworCXAtPmxhc3RfbGluayA9IDA7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKworCWlmIChvY3Rlb25fbWdtdF9pbml0X3BoeShuZXRkZXYpKSB7CisJCWRldl9lcnIocC0+ZGV2LCAiQ2Fubm90IGluaXRpYWxpemUgUEhZLlxuIik7CisJCWdvdG8gZXJyX25vaXJxOworCX0KKworCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwluYXBpX2VuYWJsZSgmcC0+bmFwaSk7CisKKwlyZXR1cm4gMDsKK2Vycl9ub2lycToKKwlvY3Rlb25fbWdtdF9yZXNldF9odyhwKTsKKwlkbWFfdW5tYXBfc2luZ2xlKHAtPmRldiwgcC0+cnhfcmluZ19oYW5kbGUsCisJCQkgcmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWtmcmVlKHAtPnJ4X3JpbmcpOworZXJyX25vbWVtOgorCWRtYV91bm1hcF9zaW5nbGUocC0+ZGV2LCBwLT50eF9yaW5nX2hhbmRsZSwKKwkJCSByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJa2ZyZWUocC0+dHhfcmluZyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluYXBpX2Rpc2FibGUoJnAtPm5hcGkpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWlmIChwLT5waHlkZXYpCisJCXBoeV9kaXNjb25uZWN0KHAtPnBoeWRldik7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCisJb2N0ZW9uX21nbXRfcmVzZXRfaHcocCk7CisKKworCWZyZWVfaXJxKHAtPmlycSwgbmV0ZGV2KTsKKworCS8qIGRtYV91bm1hcCBpcyBhIG5vcCBvbiBPY3Rlb24sIHNvIGp1c3QgZnJlZSBldmVyeXRoaW5nLiAgKi8KKwlza2JfcXVldWVfcHVyZ2UoJnAtPnR4X2xpc3QpOworCXNrYl9xdWV1ZV9wdXJnZSgmcC0+cnhfbGlzdCk7CisKKwlkbWFfdW5tYXBfc2luZ2xlKHAtPmRldiwgcC0+cnhfcmluZ19oYW5kbGUsCisJCQkgcmluZ19zaXplX3RvX2J5dGVzKE9DVEVPTl9NR01UX1JYX1JJTkdfU0laRSksCisJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCWtmcmVlKHAtPnJ4X3JpbmcpOworCisJZG1hX3VubWFwX3NpbmdsZShwLT5kZXYsIHAtPnR4X3JpbmdfaGFuZGxlLAorCQkJIHJpbmdfc2l6ZV90b19ieXRlcyhPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUpLAorCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwlrZnJlZShwLT50eF9yaW5nKTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21nbXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHBvcnQgPSBwLT5wb3J0OworCXVuaW9uIG1nbXRfcG9ydF9yaW5nX2VudHJ5IHJlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZS5kNjQgPSAwOworCXJlLnMubGVuID0gc2tiLT5sZW47CisJcmUucy5hZGRyID0gZG1hX21hcF9zaW5nbGUocC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJICAgc2tiLT5sZW4sCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CisKKwlpZiAodW5saWtlbHkocC0+dHhfY3VycmVudF9maWxsID49CisJCSAgICAgcmluZ19tYXhfZmlsbChPQ1RFT05fTUdNVF9UWF9SSU5HX1NJWkUpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT50eF9saXN0LmxvY2ssIGZsYWdzKTsKKworCQlkbWFfdW5tYXBfc2luZ2xlKHAtPmRldiwgcmUucy5hZGRyLCByZS5zLmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJX19za2JfcXVldWVfdGFpbCgmcC0+dHhfbGlzdCwgc2tiKTsKKworCS8qIFB1dCBpdCBpbiB0aGUgcmluZy4gICovCisJcC0+dHhfcmluZ1twLT50eF9uZXh0XSA9IHJlLmQ2NDsKKwlwLT50eF9uZXh0ID0gKHAtPnR4X25leHQgKyAxKSAlIE9DVEVPTl9NR01UX1RYX1JJTkdfU0laRTsKKwlwLT50eF9jdXJyZW50X2ZpbGwrKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocC0+ZGV2LCBwLT50eF9yaW5nX2hhbmRsZSwKKwkJCQkgICByaW5nX3NpemVfdG9fYnl0ZXMoT0NURU9OX01HTVRfVFhfUklOR19TSVpFKSwKKwkJCQkgICBETUFfQklESVJFQ1RJT05BTCk7CisKKwluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJLyogUmluZyB0aGUgYmVsbC4gICovCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9NSVhYX09SSU5HMihwb3J0KSwgMSk7CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlvY3Rlb25fbWdtdF9jbGVhbl90eF9idWZmZXJzKHApOworCW9jdGVvbl9tZ210X3VwZGF0ZV90eF9zdGF0cyhuZXRkZXYpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgb2N0ZW9uX21nbXRfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW9jdGVvbl9tZ210X3JlY2VpdmVfcGFja2V0cyhwLCAxNik7CisJb2N0ZW9uX21nbXRfdXBkYXRlX3J4X3N0YXRzKG5ldGRldik7CisJcmV0dXJuOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9jdGVvbl9tZ210X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RybmNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKKwlzdHJuY3B5KGluZm8tPmZ3X3ZlcnNpb24sICJOL0EiLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikpOworCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sICJOL0EiLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlpbmZvLT5uX3N0YXRzID0gMDsKKwlpbmZvLT50ZXN0aW5mb19sZW4gPSAwOworCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKKwlpbmZvLT5lZWR1bXBfbGVuID0gMDsKK30KKworc3RhdGljIGludCBvY3Rlb25fbWdtdF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChwLT5waHlkZXYpCisJCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KHAtPnBoeWRldiwgY21kKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG9jdGVvbl9tZ210X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21nbXQgKnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHAtPnBoeWRldikKKwkJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocC0+cGh5ZGV2LCBjbWQpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb2N0ZW9uX21nbXRfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvID0gb2N0ZW9uX21nbXRfZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3NldHRpbmdzID0gb2N0ZW9uX21nbXRfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgPSBvY3Rlb25fbWdtdF9zZXRfc2V0dGluZ3MKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb2N0ZW9uX21nbXRfb3BzID0geworCS5uZG9fb3BlbiA9CQkJb2N0ZW9uX21nbXRfb3BlbiwKKwkubmRvX3N0b3AgPQkJCW9jdGVvbl9tZ210X3N0b3AsCisJLm5kb19zdGFydF94bWl0ID0JCW9jdGVvbl9tZ210X3htaXQsCisJLm5kb19zZXRfcnhfbW9kZSA9IAkJb2N0ZW9uX21nbXRfc2V0X3J4X2ZpbHRlcmluZywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9CW9jdGVvbl9tZ210X3NldF9yeF9maWx0ZXJpbmcsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPQkJb2N0ZW9uX21nbXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwgPSAJCW9jdGVvbl9tZ210X2lvY3RsLAorCS5uZG9fY2hhbmdlX210dSA9CQlvY3Rlb25fbWdtdF9jaGFuZ2VfbXR1LAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPQkJb2N0ZW9uX21nbXRfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fbWdtdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzX2lycTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBvY3Rlb25fbWdtdCAqcDsKKwlpbnQgaTsKKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb2N0ZW9uX21nbXQpKTsKKwlpZiAobmV0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG5ldGRldik7CisJcCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmcC0+bmFwaSwgb2N0ZW9uX21nbXRfbmFwaV9wb2xsLAorCQkgICAgICAgT0NURU9OX01HTVRfTkFQSV9XRUlHSFQpOworCisJcC0+bmV0ZGV2ID0gbmV0ZGV2OworCXAtPmRldiA9ICZwZGV2LT5kZXY7CisKKwlwLT5wb3J0ID0gcGRldi0+aWQ7CisJc25wcmludGYobmV0ZGV2LT5uYW1lLCBJRk5BTVNJWiwgIm1nbXQlZCIsIHAtPnBvcnQpOworCisJcmVzX2lycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXNfaXJxKQorCQlnb3RvIGVycjsKKworCXAtPmlycSA9IHJlc19pcnEtPnN0YXJ0OworCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnAtPnR4X2xpc3QpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnAtPnJ4X2xpc3QpOworCXRhc2tsZXRfaW5pdCgmcC0+dHhfY2xlYW5fdGFza2xldCwKKwkJICAgICBvY3Rlb25fbWdtdF9jbGVhbl90eF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwKTsKKworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZvY3Rlb25fbWdtdF9vcHM7CisJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZvY3Rlb25fbWdtdF9ldGh0b29sX29wczsKKworCisJLyogVGhlIG1nbXQgcG9ydHMgZ2V0IHRoZSBmaXJzdCBOIE1BQ3MuICAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSBvY3Rlb25fYm9vdGluZm8tPm1hY19hZGRyX2Jhc2VbaV07CisJbmV0ZGV2LT5kZXZfYWRkcls1XSArPSBwLT5wb3J0OworCisJaWYgKHAtPnBvcnQgPj0gb2N0ZW9uX2Jvb3RpbmZvLT5tYWNfYWRkcl9jb3VudCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkVycm9yICVzOiBVc2luZyBNQUMgb3V0c2lkZSBvZiB0aGUgYXNzaWduZWQgcmFuZ2U6ICIKKwkJCSIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgbmV0ZGV2LT5uYW1lLAorCQkJbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwKKwkJCW5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCisJCQluZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworCWlmIChyZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkKKwkJZ290byBlcnI7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCXJldHVybiAwOworZXJyOgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG9jdGVvbl9tZ210X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9jdGVvbl9tZ210X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAib2N0ZW9uX21nbXQiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gb2N0ZW9uX21nbXRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChvY3Rlb25fbWdtdF9yZW1vdmUpLAorfTsKKworZXh0ZXJuIHZvaWQgb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3kodm9pZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZ210X21vZF9pbml0KHZvaWQpCit7CisJLyogRm9yY2Ugb3VyIG1kaW9idXMgZHJpdmVyIG1vZHVsZSB0byBiZSBsb2FkZWQgZmlyc3QuICovCisJb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3koKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvY3Rlb25fbWdtdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2N0ZW9uX21nbXRfbW9kX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2N0ZW9uX21nbXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob2N0ZW9uX21nbXRfbW9kX2luaXQpOworbW9kdWxlX2V4aXQob2N0ZW9uX21nbXRfbW9kX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIERhbmV5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggOGE1YWUzYi4uMTJlMzIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMTQwMiw3ICsxNDAyLDYgQEAKICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKICAgICBwcmludGsoS0VSTl9DT05UICIgJTAyWCIsIGxhZHJmW2ldKTsKICAgcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLSAgfQogI2VuZGlmCiB9IC8qIEJ1aWxkTEFGICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggOTJlZDNmYi4uNzc2Y2FkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTE3NDEsNyArMTc0MSw3IEBACiAJUENNQ0lBX01GQ19ERVZJQ0VfQ0lTX1BST0RfSUQ0KDAsICJOU0MgTUYgTEFOL01vZGVtIiwgMHg1OGZjNjA1NiwgImNpcy9EUDgzOTAzLmNpcyIpLAogCVBDTUNJQV9NRkNfREVWSUNFX0NJU19NQU5GX0NBUkQoMCwgMHgwMTc1LCAweDAwMDAsICJjaXMvRFA4MzkwMy5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19NQU5GX0NBUkQoMHhjMDBmLCAweDAwMDIsICJjaXMvTEEtUENNLmNpcyIpLAotCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiS1RJIiwgIlBFNTIwIFBMVVMiLCAweGFkMTgwMzQ1LCAweDlkNThkMzkyLCAiUEU1MjAuY2lzIiksCisJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJLVEkiLCAiUEU1MjAgUExVUyIsIDB4YWQxODAzNDUsIDB4OWQ1OGQzOTIsICJjaXMvUEU1MjAuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJOREMiLCAiRXRoZXJuZXQiLCAweDAxYzQzYWUxLCAweDAwYjJlOTQxLCAiY2lzL05FMksuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJQTVggICAiLCAiUEUtMjAwIiwgMHgzNGYzZjFjOCwgMHgxMGI1OWY4YywgImNpcy9QRS0yMDAuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJUQU1BUkFDSyIsICJFdGhlcm5ldCIsIDB4Y2Y0MzRmYmEsIDB4MDBiMmU5NDEsICJjaXMvdGFtYXJhY2suY2lzIiksCkBAIC0xNzU0LDcgKzE3NTQsNyBAQAogTU9EVUxFX0ZJUk1XQVJFKCJjaXMvUENNTE0yOC5jaXMiKTsKIE1PRFVMRV9GSVJNV0FSRSgiY2lzL0RQODM5MDMuY2lzIik7CiBNT0RVTEVfRklSTVdBUkUoImNpcy9MQS1QQ00uY2lzIik7Ci1NT0RVTEVfRklSTVdBUkUoIlBFNTIwLmNpcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJjaXMvUEU1MjAuY2lzIik7CiBNT0RVTEVfRklSTVdBUkUoImNpcy9ORTJLLmNpcyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJjaXMvUEUtMjAwLmNpcyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJjaXMvdGFtYXJhY2suY2lzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggZGNjNjdhMy4uZTE1NDY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTE3NjUsNyArMTc2Niw3IEBACiAKIAkvKiBpZiB0aGUgZXRoZXJuZXQgYWRkcmVzcyBpcyBub3QgdmFsaWQsIGZvcmNlIHRvIDAwOjAwOjAwOjAwOjAwOjAwICovCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+cGVybV9hZGRyKSkKLQkJbWVtc2V0KGRldi0+ZGV2X2FkZHIsIDAsIHNpemVvZihkZXYtPmRldl9hZGRyKSk7CisJCW1lbXNldChkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CiAKIAlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkgewogCQlwcmludGsoIiAlcE0iLCBkZXYtPmRldl9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggZDVkOGUxYy4uZmM1OTM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTExNSw0ICsxMTUsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1kaW8tZ3Bpby4KIAorY29uZmlnIE1ESU9fT0NURU9OCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE1ESU8gYnVzZXMgb24gT2N0ZW9uIFNPQ3MiCisJZGVwZW5kcyBvbiAgQ1BVX0NBVklVTV9PQ1RFT04KKwlkZWZhdWx0IHkKKwloZWxwCisKKwkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgT2N0ZW9uIE1ESU8gYnVzc2VzLgorCSAgSXQgaXMgcmVxdWlyZWQgYnkgdGhlIE9jdGVvbiBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycy4KKworCSAgSWYgaW4gZG91YnQsIHNheSBZLgorCiBlbmRpZiAjIFBIWUxJQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IGVkZmFhYzQuLjEzNDI1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTIwLDMgKzIwLDQgQEAKIG9iai0kKENPTkZJR19NRElPX0dQSU8pCQkrPSBtZGlvLWdwaW8ubwogb2JqLSQoQ09ORklHX05BVElPTkFMX1BIWSkJKz0gbmF0aW9uYWwubwogb2JqLSQoQ09ORklHX1NURTEwWFApCQkrPSBzdGUxMFhwLm8KK29iai0kKENPTkZJR19NRElPX09DVEVPTikJKz0gbWRpby1vY3Rlb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwppbmRleCBmNjNjOTZhLi4zM2M0YjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYworKysgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwpAQCAtMzI2LDEyICszMjYsMTMgQEAKIAogc3RhdGljIHZvaWQgYmNtNTR4eF9hZGp1c3RfcnhyZWZjbGsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKLQl1MzIgdmFsLCBvcmlnOworCXUzMiBvcmlnOworCWludCB2YWw7CiAJYm9vbCBjbGsxMjVlbiA9IHRydWU7CiAKIAkvKiBBYm9ydCBpZiB3ZSBhcmUgdXNpbmcgYW4gdW50ZXN0ZWQgcGh5LiAqLwotCWlmIChCUkNNX1BIWV9NT0RFTChwaHlkZXYpICE9IFBIWV9JRF9CQ001Nzc4MCB8fAotCSAgICBCUkNNX1BIWV9NT0RFTChwaHlkZXYpICE9IFBIWV9JRF9CQ001MDYxMCB8fAorCWlmIChCUkNNX1BIWV9NT0RFTChwaHlkZXYpICE9IFBIWV9JRF9CQ001Nzc4MCAmJgorCSAgICBCUkNNX1BIWV9NT0RFTChwaHlkZXYpICE9IFBIWV9JRF9CQ001MDYxMCAmJgogCSAgICBCUkNNX1BIWV9NT0RFTChwaHlkZXYpICE9IFBIWV9JRF9CQ001MDYxME0pCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpby1vY3Rlb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE0NDYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ2F2aXVtIE5ldHdvcmtzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisjaW5jbHVkZSA8YXNtL29jdGVvbi9jdm14LXNtaXgtZGVmcy5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjAiCisjZGVmaW5lIERSVl9ERVNDUklQVElPTiAiQ2F2aXVtIE5ldHdvcmtzIE9jdGVvbiBTTUkvTURJTyBkcml2ZXIiCisKK3N0cnVjdCBvY3Rlb25fbWRpb2J1cyB7CisJc3RydWN0IG1paV9idXMgKm1paV9idXM7CisJaW50IHVuaXQ7CisJaW50IHBoeV9pcnFbUEhZX01BWF9BRERSXTsKK307CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKQoreworCXN0cnVjdCBvY3Rlb25fbWRpb2J1cyAqcCA9IGJ1cy0+cHJpdjsKKwl1bmlvbiBjdm14X3NtaXhfY21kIHNtaV9jbWQ7CisJdW5pb24gY3ZteF9zbWl4X3JkX2RhdCBzbWlfcmQ7CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJc21pX2NtZC51NjQgPSAwOworCXNtaV9jbWQucy5waHlfb3AgPSAxOyAvKiBNRElPX0NMQVVTRV8yMl9SRUFEICovCisJc21pX2NtZC5zLnBoeV9hZHIgPSBwaHlfaWQ7CisJc21pX2NtZC5zLnJlZ19hZHIgPSByZWdudW07CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0NNRChwLT51bml0KSwgc21pX2NtZC51NjQpOworCisJZG8geworCQkvKgorCQkgKiBXYWl0IDEwMDAgY2xvY2tzIHNvIHdlIGRvbid0IHNhdHVyYXRlIHRoZSBSU0wgYnVzCisJCSAqIGRvaW5nIHJlYWRzLgorCQkgKi8KKwkJY3ZteF93YWl0KDEwMDApOworCQlzbWlfcmQudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX1NNSVhfUkRfREFUKHAtPnVuaXQpKTsKKwl9IHdoaWxlIChzbWlfcmQucy5wZW5kaW5nICYmIC0tdGltZW91dCk7CisKKwlpZiAoc21pX3JkLnMudmFsKQorCQlyZXR1cm4gc21pX3JkLnMuZGF0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgb2N0ZW9uX21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwKKwkJCQlpbnQgcmVnbnVtLCB1MTYgdmFsKQoreworCXN0cnVjdCBvY3Rlb25fbWRpb2J1cyAqcCA9IGJ1cy0+cHJpdjsKKwl1bmlvbiBjdm14X3NtaXhfY21kIHNtaV9jbWQ7CisJdW5pb24gY3ZteF9zbWl4X3dyX2RhdCBzbWlfd3I7CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJc21pX3dyLnU2NCA9IDA7CisJc21pX3dyLnMuZGF0ID0gdmFsOworCWN2bXhfd3JpdGVfY3NyKENWTVhfU01JWF9XUl9EQVQocC0+dW5pdCksIHNtaV93ci51NjQpOworCisJc21pX2NtZC51NjQgPSAwOworCXNtaV9jbWQucy5waHlfb3AgPSAwOyAvKiBNRElPX0NMQVVTRV8yMl9XUklURSAqLworCXNtaV9jbWQucy5waHlfYWRyID0gcGh5X2lkOworCXNtaV9jbWQucy5yZWdfYWRyID0gcmVnbnVtOworCWN2bXhfd3JpdGVfY3NyKENWTVhfU01JWF9DTUQocC0+dW5pdCksIHNtaV9jbWQudTY0KTsKKworCWRvIHsKKwkJLyoKKwkJICogV2FpdCAxMDAwIGNsb2NrcyBzbyB3ZSBkb24ndCBzYXR1cmF0ZSB0aGUgUlNMIGJ1cworCQkgKiBkb2luZyByZWFkcy4KKwkJICovCisJCWN2bXhfd2FpdCgxMDAwKTsKKwkJc21pX3dyLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9TTUlYX1dSX0RBVChwLT51bml0KSk7CisJfSB3aGlsZSAoc21pX3dyLnMucGVuZGluZyAmJiAtLXRpbWVvdXQpOworCisJaWYgKHRpbWVvdXQgPD0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX21kaW9idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21kaW9idXMgKmJ1czsKKwlpbnQgaTsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCWJ1cyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOworCWlmICghYnVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFRoZSBwbGF0Zm9ybV9kZXZpY2UgaWQgaXMgb3VyIHVuaXQgbnVtYmVyLiAgKi8KKwlidXMtPnVuaXQgPSBwZGV2LT5pZDsKKworCWJ1cy0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKworCWlmICghYnVzLT5taWlfYnVzKQorCQlnb3RvIGVycjsKKworCS8qCisJICogU3RhbmRhcmQgT2N0ZW9uIGV2YWx1YXRpb24gYm9hcmRzIGRvbid0IHN1cHBvcnQgcGh5CisJICogaW50ZXJydXB0cywgd2UgbmVlZCB0byBwb2xsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKKwkJYnVzLT5waHlfaXJxW2ldID0gUEhZX1BPTEw7CisKKwlidXMtPm1paV9idXMtPnByaXYgPSBidXM7CisJYnVzLT5taWlfYnVzLT5pcnEgPSBidXMtPnBoeV9pcnE7CisJYnVzLT5taWlfYnVzLT5uYW1lID0gIm1kaW8tb2N0ZW9uIjsKKwlzbnByaW50ZihidXMtPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGJ1cy0+dW5pdCk7CisJYnVzLT5taWlfYnVzLT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJYnVzLT5taWlfYnVzLT5yZWFkID0gb2N0ZW9uX21kaW9idXNfcmVhZDsKKwlidXMtPm1paV9idXMtPndyaXRlID0gb2N0ZW9uX21kaW9idXNfd3JpdGU7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgYnVzKTsKKworCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYnVzLT5taWlfYnVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZWdpc3RlcjsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJWZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CisKKwlyZXR1cm4gMDsKK2Vycl9yZWdpc3RlcjoKKwltZGlvYnVzX2ZyZWUoYnVzLT5taWlfYnVzKTsKKworZXJyOgorCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgYnVzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBvY3Rlb25fbWRpb2J1c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX21kaW9idXMgKmJ1czsKKworCWJ1cyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCW1kaW9idXNfdW5yZWdpc3RlcihidXMtPm1paV9idXMpOworCW1kaW9idXNfZnJlZShidXMtPm1paV9idXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25fbWRpb2J1c19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gIm1kaW8tb2N0ZW9uIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IG9jdGVvbl9tZGlvYnVzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3Aob2N0ZW9uX21kaW9idXNfcmVtb3ZlKSwKK307CisKK3ZvaWQgb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3kodm9pZCkKK3sKKwkvKiBMZXQgZXRoZXJuZXQgZHJpdmVycyBmb3JjZSB1cyB0byBiZSBsb2FkZWQuICAqLworfQorRVhQT1JUX1NZTUJPTChvY3Rlb25fbWRpb2J1c19mb3JjZV9tb2RfZGVwZW5jZW5jeSk7CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZGlvYnVzX21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2N0ZW9uX21kaW9idXNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9jdGVvbl9tZGlvYnVzX21vZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9jdGVvbl9tZGlvYnVzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9jdGVvbl9tZGlvYnVzX21vZF9pbml0KTsKK21vZHVsZV9leGl0KG9jdGVvbl9tZGlvYnVzX21vZF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBEYW5leSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCBiZDRlOGQ3Li5lMTdiNzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMjY0LDYgKzI2NCw4IEBACiAJCShwaHlkZXYtPnBoeV9pZCAmIHBoeWRydi0+cGh5X2lkX21hc2spKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorCiBzdGF0aWMgYm9vbCBtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gcGh5ZGV2LT5kZXYuZHJpdmVyOwpAQCAtMjk1LDM0ICsyOTcsODggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU3VzcGVuZCBhbmQgcmVzdW1lLiAgQ29waWVkIGZyb20gcGxhdGZvcm1fc3VzcGVuZCBhbmQKLSAqIHBsYXRmb3JtX3Jlc3VtZQotICovCi1zdGF0aWMgaW50IG1kaW9fYnVzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBtZGlvX2J1c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKIAorCS8qCisJICogV2UgbXVzdCBzdG9wIHRoZSBzdGF0ZSBtYWNoaW5lIG1hbnVhbGx5LCBvdGhlcndpc2UgaXQgc3RvcHMgb3V0IG9mCisJICogY29udHJvbCwgcG9zc2libHkgd2l0aCB0aGUgcGh5ZGV2LT5sb2NrIGhlbGQuIFVwb24gcmVzdW1lLCBuZXRkZXYKKwkgKiBtYXkgY2FsbCBwaHkgcm91dGluZXMgdGhhdCB0cnkgdG8gZ3JhYiB0aGUgc2FtZSBsb2NrLCBhbmQgdGhhdCBtYXkKKwkgKiBsZWFkIHRvIGEgZGVhZGxvY2suCisJICovCisJaWYgKHBoeWRldi0+YXR0YWNoZWRfZGV2KQorCQlwaHlfc3RvcF9tYWNoaW5lKHBoeWRldik7CisKIAlpZiAoIW1kaW9fYnVzX3BoeV9tYXlfc3VzcGVuZChwaHlkZXYpKQogCQlyZXR1cm4gMDsKKwogCXJldHVybiBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKIH0KIAotc3RhdGljIGludCBtZGlvX2J1c19yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKK3N0YXRpYyBpbnQgbWRpb19idXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKKwlpbnQgcmV0OwogCiAJaWYgKCFtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQocGh5ZGV2KSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHBoeWRydi0+cmVzdW1lKHBoeWRldik7CisJCWdvdG8gbm9fcmVzdW1lOworCisJcmV0ID0gcGh5ZHJ2LT5yZXN1bWUocGh5ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworbm9fcmVzdW1lOgorCWlmIChwaHlkZXYtPmF0dGFjaGVkX2RldikKKwkJcGh5X3N0YXJ0X21hY2hpbmUocGh5ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1kaW9fYnVzX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi0+YXR0YWNoZWRfZGV2OworCWludCByZXQ7CisKKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBwaHlfaW5pdF9odyhwaHlkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogVGhlIFBIWSBuZWVkcyB0byByZW5lZ290aWF0ZS4gKi8KKwlwaHlkZXYtPmxpbmsgPSAwOworCXBoeWRldi0+c3RhdGUgPSBQSFlfVVA7CisKKwlwaHlfc3RhcnRfbWFjaGluZShwaHlkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBtZGlvX2J1c19wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBtZGlvX2J1c19zdXNwZW5kLAorCS5yZXN1bWUgPSBtZGlvX2J1c19yZXN1bWUsCisJLmZyZWV6ZSA9IG1kaW9fYnVzX3N1c3BlbmQsCisJLnRoYXcgPSBtZGlvX2J1c19yZXN1bWUsCisJLnJlc3RvcmUgPSBtZGlvX2J1c19yZXN0b3JlLAorfTsKKworI2RlZmluZSBNRElPX0JVU19QTV9PUFMgKCZtZGlvX2J1c19wbV9vcHMpCisKKyNlbHNlCisKKyNkZWZpbmUgTURJT19CVVNfUE1fT1BTIE5VTEwKKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiBzdHJ1Y3QgYnVzX3R5cGUgbWRpb19idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAibWRpb19idXMiLAogCS5tYXRjaAkJPSBtZGlvX2J1c19tYXRjaCwKLQkuc3VzcGVuZAk9IG1kaW9fYnVzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBtZGlvX2J1c19yZXN1bWUsCisJLnBtCQk9IE1ESU9fQlVTX1BNX09QUywKIH07CiBFWFBPUlRfU1lNQk9MKG1kaW9fYnVzX3R5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCBiMTBmZWRkLi44MjEyYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTM3OCw2ICszNzgsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGh5X2Rpc2Nvbm5lY3QpOwogCitpbnQgcGh5X2luaXRfaHcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFwaHlkZXYtPmRydiB8fCAhcGh5ZGV2LT5kcnYtPmNvbmZpZ19pbml0KQorCQlyZXR1cm4gMDsKKworCXJldCA9IHBoeV9zY2FuX2ZpeHVwcyhwaHlkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHBoeWRldi0+ZHJ2LT5jb25maWdfaW5pdChwaHlkZXYpOworfQorCiAvKioKICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtNDI1LDIxICs0MzksNyBAQAogCS8qIERvIGluaXRpYWwgY29uZmlndXJhdGlvbiBoZXJlLCBub3cgdGhhdAogCSAqIHdlIGhhdmUgY2VydGFpbiBrZXkgcGFyYW1ldGVycwogCSAqIChkZXZfZmxhZ3MgYW5kIGludGVyZmFjZSkgKi8KLQlpZiAocGh5ZGV2LT5kcnYtPmNvbmZpZ19pbml0KSB7Ci0JCWludCBlcnI7Ci0KLQkJZXJyID0gcGh5X3NjYW5fZml4dXBzKHBoeWRldik7Ci0KLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCWVyciA9IHBoeWRldi0+ZHJ2LT5jb25maWdfaW5pdChwaHlkZXYpOwotCi0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGh5X2luaXRfaHcocGh5ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ycnVubmVyLmMgYi9kcml2ZXJzL25ldC9ycnVubmVyLmMKaW5kZXggMjBhNzE3NC4uMWMyNTcwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcnJ1bm5lci5jCisrKyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuYwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKIAogCXByaW50aygiRXJyb3IgY29kZSAweCV4XG4iLCByZWFkbCgmcmVncy0+RmFpbDEpKTsKIAotCWluZGV4ID0gKCgocmVhZGwoJnJlZ3MtPkV2dFByZCkgPj4gOCkgJiAweGZmICkgLSAxKSAlIEVWVF9SSU5HX0VOVFJJRVM7CisJaW5kZXggPSAoKChyZWFkbCgmcmVncy0+RXZ0UHJkKSA+PiA4KSAmIDB4ZmYpIC0gMSkgJSBUWF9SSU5HX0VOVFJJRVM7CiAJY29ucyA9IHJycHJpdi0+ZGlydHlfdHg7CiAJcHJpbnRrKCJUWCByaW5nIGluZGV4ICVpLCBUWCBjb25zdW1lciAlaVxuIiwKIAkgICAgICAgaW5kZXgsIGNvbnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IGY5ODNlM2IuLjEwM2U4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTc0MSwxNCArNzQxLDE0IEBACiAKIAlFRlhfTE9HKGVmeCwgImNyZWF0ZSBwb3J0XG4iKTsKIAorCWlmIChwaHlfZmxhc2hfY2ZnKQorCQllZngtPnBoeV9tb2RlID0gUEhZX01PREVfU1BFQ0lBTDsKKwogCS8qIENvbm5lY3QgdXAgTUFDL1BIWSBvcGVyYXRpb25zIHRhYmxlICovCiAJcmMgPSBlZngtPnR5cGUtPnByb2JlX3BvcnQoZWZ4KTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHBoeV9mbGFzaF9jZmcpCi0JCWVmeC0+cGh5X21vZGUgPSBQSFlfTU9ERV9TUEVDSUFMOwotCiAJLyogU2FuaXR5IGNoZWNrIE1BQyBhZGRyZXNzICovCiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZWZ4LT5tYWNfYWRkcmVzcykpIHsKIAkJbWVtY3B5KGVmeC0+bmV0X2Rldi0+ZGV2X2FkZHIsIGVmeC0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwppbmRleCAxN2FmY2QyLi45ZDAwOWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCkBAIC05MjUsNiArOTI1LDcgQEAKIAogc3RhdGljIHZvaWQgZmFsY29uX3JlbW92ZV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJZWZ4LT5waHlfb3AtPnJlbW92ZShlZngpOwogCWVmeF9uaWNfZnJlZV9idWZmZXIoZWZ4LCAmZWZ4LT5zdGF0c19idWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCmluZGV4IDNkYTkzM2YuLjhjY2FiMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCkBAIC0xMTEsMTYgKzExMSwxMiBAQAogCWVmeF93cml0ZW8oZWZ4LCAmcmVnLCBGUl9BQl9YTV9NR1RfSU5UX01BU0spOwogfQogCi0vKiBHZXQgc3RhdHVzIG9mIFhBVUkgbGluayAqLwotc3RhdGljIGJvb2wgZmFsY29uX3hhdWlfbGlua19vayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIGJvb2wgZmFsY29uX3hneHNfbGlua19vayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWVmeF9vd29yZF90IHJlZzsKIAlib29sIGFsaWduX2RvbmUsIGxpbmtfb2sgPSBmYWxzZTsKIAlpbnQgc3luY19zdGF0dXM7CiAKLQlpZiAoTE9PUEJBQ0tfSU5URVJOQUwoZWZ4KSkKLQkJcmV0dXJuIHRydWU7Ci0KIAkvKiBSZWFkIGxpbmsgc3RhdHVzICovCiAJZWZ4X3JlYWRvKGVmeCwgJnJlZywgRlJfQUJfWFhfQ09SRV9TVEFUKTsKIApAQCAtMTM1LDE0ICsxMzEsMjQgQEAKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKHJlZywgRlJGX0FCX1hYX0RJU1BFUlIsIEZGRV9BQl9YWF9TVEFUX0FMTF9MQU5FUyk7CiAJZWZ4X3dyaXRlbyhlZngsICZyZWcsIEZSX0FCX1hYX0NPUkVfU1RBVCk7CiAKLQkvKiBJZiB0aGUgbGluayBpcyB1cCwgdGhlbiBjaGVjayB0aGUgcGh5IHNpZGUgb2YgdGhlIHhhdWkgbGluayAqLwotCWlmIChlZngtPmxpbmtfc3RhdGUudXAgJiYgbGlua19vaykKLQkJaWYgKGVmeC0+bWRpby5tbWRzICYgKDEgPDwgTURJT19NTURfUEhZWFMpKQotCQkJbGlua19vayA9IGVmeF9tZGlvX3BoeXhneHNfbGFuZV9zeW5jKGVmeCk7Ci0KIAlyZXR1cm4gbGlua19vazsKIH0KIAorc3RhdGljIGJvb2wgZmFsY29uX3htYWNfbGlua19vayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCS8qCisJICogQ2hlY2sgTUFDJ3MgWEdYUyBsaW5rIHN0YXR1cyBleGNlcHQgd2hlbiB1c2luZyBYR01JSSBsb29wYmFjaworCSAqIHdoaWNoIGJ5cGFzc2VzIHRoZSBYR1hTIGJsb2NrLgorCSAqIElmIHBvc3NpYmxlLCBjaGVjayBQSFkncyBYR1hTIGxpbmsgc3RhdHVzIGV4Y2VwdCB3aGVuIHVzaW5nCisJICogTUFDIGxvb3BiYWNrLgorCSAqLworCXJldHVybiAoZWZ4LT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHTUlJIHx8CisJCWZhbGNvbl94Z3hzX2xpbmtfb2soZWZ4KSkgJiYKKwkJKCEoZWZ4LT5tZGlvLm1tZHMgJiAoMSA8PCBNRElPX01NRF9QSFlYUykpIHx8CisJCSBMT09QQkFDS19JTlRFUk5BTChlZngpIHx8IAorCQkgZWZ4X21kaW9fcGh5eGd4c19sYW5lX3N5bmMoZWZ4KSk7Cit9CisKIHZvaWQgZmFsY29uX3JlY29uZmlndXJlX3htYWNfY29yZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXVuc2lnbmVkIGludCBtYXhfZnJhbWVfbGVuOwpAQCAtMjQ1LDkgKzI1MSw5IEBACiAKIAogLyogVHJ5IHRvIGJyaW5nIHVwIHRoZSBGYWxjb24gc2lkZSBvZiB0aGUgRmFsY29uLVBoeSBYQVVJIGxpbmsgKi8KLXN0YXRpYyBib29sIGZhbGNvbl9jaGVja194YXVpX2xpbmtfdXAoc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IHRyaWVzKQorc3RhdGljIGJvb2wgZmFsY29uX3htYWNfbGlua19va19yZXRyeShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHJpZXMpCiB7Ci0JYm9vbCBtYWNfdXAgPSBmYWxjb25feGF1aV9saW5rX29rKGVmeCk7CisJYm9vbCBtYWNfdXAgPSBmYWxjb25feG1hY19saW5rX29rKGVmeCk7CiAKIAlpZiAoTE9PUEJBQ0tfTUFTSyhlZngpICYgTE9PUEJBQ0tTX0VYVEVSTkFMKGVmeCkgJiBMT09QQkFDS1NfV1MgfHwKIAkgICAgZWZ4X3BoeV9tb2RlX2Rpc2FibGVkKGVmeC0+cGh5X21vZGUpKQpAQCAtMjYxLDcgKzI2Nyw3IEBACiAJCWZhbGNvbl9yZXNldF94YXVpKGVmeCk7CiAJCXVkZWxheSgyMDApOwogCi0JCW1hY191cCA9IGZhbGNvbl94YXVpX2xpbmtfb2soZWZ4KTsKKwkJbWFjX3VwID0gZmFsY29uX3htYWNfbGlua19vayhlZngpOwogCQktLXRyaWVzOwogCX0KIApAQCAtMjcyLDcgKzI3OCw3IEBACiAKIHN0YXRpYyBib29sIGZhbGNvbl94bWFjX2NoZWNrX2ZhdWx0KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JcmV0dXJuICFmYWxjb25fY2hlY2tfeGF1aV9saW5rX3VwKGVmeCwgNSk7CisJcmV0dXJuICFmYWxjb25feG1hY19saW5rX29rX3JldHJ5KGVmeCwgNSk7CiB9CiAKIHN0YXRpYyBpbnQgZmFsY29uX3JlY29uZmlndXJlX3htYWMoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTI4NCw3ICsyOTAsNyBAQAogCiAJZmFsY29uX3JlY29uZmlndXJlX21hY193cmFwcGVyKGVmeCk7CiAKLQllZngtPnhtYWNfcG9sbF9yZXF1aXJlZCA9ICFmYWxjb25fY2hlY2tfeGF1aV9saW5rX3VwKGVmeCwgNSk7CisJZWZ4LT54bWFjX3BvbGxfcmVxdWlyZWQgPSAhZmFsY29uX3htYWNfbGlua19va19yZXRyeShlZngsIDUpOwogCWZhbGNvbl9tYXNrX3N0YXR1c19pbnRyKGVmeCwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTM1Nyw3ICszNjMsNyBAQAogCQlyZXR1cm47CiAKIAlmYWxjb25fbWFza19zdGF0dXNfaW50cihlZngsIGZhbHNlKTsKLQllZngtPnhtYWNfcG9sbF9yZXF1aXJlZCA9ICFmYWxjb25fY2hlY2tfeGF1aV9saW5rX3VwKGVmeCwgMSk7CisJZWZ4LT54bWFjX3BvbGxfcmVxdWlyZWQgPSAhZmFsY29uX3htYWNfbGlua19va19yZXRyeShlZngsIDEpOwogCWZhbGNvbl9tYXNrX3N0YXR1c19pbnRyKGVmeCwgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKaW5kZXggMGUxYmNjNS4uZWI2OTRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKQEAgLTMwNCwzMSArMzA0LDQ3IEBACiAKIHN0YXRpYyBpbnQgZWZ4X21jZGlfcGh5X3Byb2JlKHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0Jc3RydWN0IGVmeF9tY2RpX3BoeV9jZmcgKnBoeV9jZmc7CisJc3RydWN0IGVmeF9tY2RpX3BoeV9jZmcgKnBoeV9kYXRhOworCXU4IG91dGJ1ZltNQ19DTURfR0VUX0xJTktfT1VUX0xFTl07CisJdTMyIGNhcHM7CiAJaW50IHJjOwogCi0JLyogVE9ETzogTW92ZSBwaHlfZGF0YSBpbml0aWFsaXNhdGlvbiB0bwotCSAqIHBoeV9vcC0+cHJvYmUvcmVtb3ZlLCByYXRoZXIgdGhhbiBpbml0L2ZpbmkgKi8KLQlwaHlfY2ZnID0ga3phbGxvYyhzaXplb2YoKnBoeV9jZmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAocGh5X2NmZyA9PSBOVUxMKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2FsbG9jOwotCX0KLQlyYyA9IGVmeF9tY2RpX2dldF9waHlfY2ZnKGVmeCwgcGh5X2NmZyk7CisJLyogSW5pdGlhbGlzZSBhbmQgcG9wdWxhdGUgcGh5X2RhdGEgKi8KKwlwaHlfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChwaHlfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJjID0gZWZ4X21jZGlfZ2V0X3BoeV9jZmcoZWZ4LCBwaHlfZGF0YSk7CiAJaWYgKHJjICE9IDApCiAJCWdvdG8gZmFpbDsKIAotCWVmeC0+cGh5X3R5cGUgPSBwaHlfY2ZnLT50eXBlOworCS8qIFJlYWQgaW5pdGlhbCBsaW5rIGFkdmVydGlzZW1lbnQgKi8KKwlCVUlMRF9CVUdfT04oTUNfQ01EX0dFVF9MSU5LX0lOX0xFTiAhPSAwKTsKKwlyYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9HRVRfTElOSywgTlVMTCwgMCwKKwkJCSAgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwgTlVMTCk7CisJaWYgKHJjKQorCQlnb3RvIGZhaWw7CiAKLQllZngtPm1kaW9fYnVzID0gcGh5X2NmZy0+Y2hhbm5lbDsKLQllZngtPm1kaW8ucHJ0YWQgPSBwaHlfY2ZnLT5wb3J0OwotCWVmeC0+bWRpby5tbWRzID0gcGh5X2NmZy0+bW1kX21hc2sgJiB+KDEgPDwgTUNfQ01EX01NRF9DTEFVU0UyMik7CisJLyogRmlsbCBvdXQgbmljIHN0YXRlICovCisJZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOworCWVmeC0+cGh5X3R5cGUgPSBwaHlfZGF0YS0+dHlwZTsKKworCWVmeC0+bWRpb19idXMgPSBwaHlfZGF0YS0+Y2hhbm5lbDsKKwllZngtPm1kaW8ucHJ0YWQgPSBwaHlfZGF0YS0+cG9ydDsKKwllZngtPm1kaW8ubW1kcyA9IHBoeV9kYXRhLT5tbWRfbWFzayAmIH4oMSA8PCBNQ19DTURfTU1EX0NMQVVTRTIyKTsKIAllZngtPm1kaW8ubW9kZV9zdXBwb3J0ID0gMDsKLQlpZiAocGh5X2NmZy0+bW1kX21hc2sgJiAoMSA8PCBNQ19DTURfTU1EX0NMQVVTRTIyKSkKKwlpZiAocGh5X2RhdGEtPm1tZF9tYXNrICYgKDEgPDwgTUNfQ01EX01NRF9DTEFVU0UyMikpCiAJCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgfD0gTURJT19TVVBQT1JUU19DMjI7Ci0JaWYgKHBoeV9jZmctPm1tZF9tYXNrICYgfigxIDw8IE1DX0NNRF9NTURfQ0xBVVNFMjIpKQorCWlmIChwaHlfZGF0YS0+bW1kX21hc2sgJiB+KDEgPDwgTUNfQ01EX01NRF9DTEFVU0UyMikpCiAJCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgfD0gTURJT19TVVBQT1JUU19DNDUgfCBNRElPX0VNVUxBVEVfQzIyOwogCisJY2FwcyA9IE1DRElfRFdPUkQob3V0YnVmLCBHRVRfTElOS19PVVRfQ0FQKTsKKwlpZiAoY2FwcyAmICgxIDw8IE1DX0NNRF9QSFlfQ0FQX0FOX0xCTikpCisJCWVmeC0+bGlua19hZHZlcnRpc2luZyA9CisJCQltY2RpX3RvX2V0aHRvb2xfY2FwKHBoeV9kYXRhLT5tZWRpYSwgY2Fwcyk7CisJZWxzZQorCQlwaHlfZGF0YS0+Zm9yY2VkX2NhcCA9IGNhcHM7CisKIAkvKiBBc3NlcnQgdGhhdCB3ZSBjYW4gbWFwIGVmeCAtPiBtY2RpIGxvb3BiYWNrIG1vZGVzICovCiAJQlVJTERfQlVHX09OKExPT1BCQUNLX05PTkUgIT0gTUNfQ01EX0xPT1BCQUNLX05PTkUpOwogCUJVSUxEX0JVR19PTihMT09QQkFDS19EQVRBICE9IE1DX0NNRF9MT09QQkFDS19EQVRBKTsKQEAgLTM2NSw0NiArMzgxLDYgQEAKIAkgKiBidXQgYnkgY29udmVudGlvbiB3ZSBkb24ndCAqLwogCWVmeC0+bG9vcGJhY2tfbW9kZXMgJj0gfigxIDw8IExPT1BCQUNLX05PTkUpOwogCi0Ja2ZyZWUocGh5X2NmZyk7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlrZnJlZShwaHlfY2ZnKTsKLWZhaWxfYWxsb2M6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGVmeF9tY2RpX3BoeV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCi17Ci0Jc3RydWN0IGVmeF9tY2RpX3BoeV9jZmcgKnBoeV9kYXRhOwotCXU4IG91dGJ1ZltNQ19DTURfR0VUX0xJTktfT1VUX0xFTl07Ci0JdTMyIGNhcHM7Ci0JaW50IHJjOwotCi0JcGh5X2RhdGEgPSBremFsbG9jKHNpemVvZigqcGh5X2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAocGh5X2RhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyYyA9IGVmeF9tY2RpX2dldF9waHlfY2ZnKGVmeCwgcGh5X2RhdGEpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIGZhaWw7Ci0KLQllZngtPnBoeV9kYXRhID0gcGh5X2RhdGE7Ci0KLQlCVUlMRF9CVUdfT04oTUNfQ01EX0dFVF9MSU5LX0lOX0xFTiAhPSAwKTsKLQlyYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9HRVRfTElOSywgTlVMTCwgMCwKLQkJCSAgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwgTlVMTCk7Ci0JaWYgKHJjKQotCQlnb3RvIGZhaWw7Ci0KLQljYXBzID0gTUNESV9EV09SRChvdXRidWYsIEdFVF9MSU5LX09VVF9DQVApOwotCWlmIChjYXBzICYgKDEgPDwgTUNfQ01EX1BIWV9DQVBfQU5fTEJOKSkKLQkJZWZ4LT5saW5rX2FkdmVydGlzaW5nID0KLQkJCW1jZGlfdG9fZXRodG9vbF9jYXAocGh5X2RhdGEtPm1lZGlhLCBjYXBzKTsKLQllbHNlCi0JCXBoeV9kYXRhLT5mb3JjZWRfY2FwID0gY2FwczsKLQogCXJldHVybiAwOwogCiBmYWlsOgpAQCAtNTA0LDcgKzQ4MCw3IEBACiAJcmV0dXJuICFlZnhfbGlua19zdGF0ZV9lcXVhbCgmZWZ4LT5saW5rX3N0YXRlLCAmb2xkX3N0YXRlKTsKIH0KIAotc3RhdGljIHZvaWQgZWZ4X21jZGlfcGh5X2Zpbmkoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3N0YXRpYyB2b2lkIGVmeF9tY2RpX3BoeV9yZW1vdmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgZWZ4X21jZGlfcGh5X2RhdGEgKnBoeV9kYXRhID0gZWZ4LT5waHlfZGF0YTsKIApAQCAtNTg2LDEwICs1NjIsMTEgQEAKIAogc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBlZnhfbWNkaV9waHlfb3BzID0gewogCS5wcm9iZQkJPSBlZnhfbWNkaV9waHlfcHJvYmUsCi0JLmluaXQgCSAJPSBlZnhfbWNkaV9waHlfaW5pdCwKKwkuaW5pdCAJIAk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKIAkucmVjb25maWd1cmUJPSBlZnhfbWNkaV9waHlfcmVjb25maWd1cmUsCiAJLnBvbGwJCT0gZWZ4X21jZGlfcGh5X3BvbGwsCi0JLmZpbmkJCT0gZWZ4X21jZGlfcGh5X2ZpbmksCisJLmZpbmkJCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKKwkucmVtb3ZlCQk9IGVmeF9tY2RpX3BoeV9yZW1vdmUsCiAJLmdldF9zZXR0aW5ncwk9IGVmeF9tY2RpX3BoeV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IGVmeF9tY2RpX3BoeV9zZXRfc2V0dGluZ3MsCiAJLnJ1bl90ZXN0cwk9IE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCAzNGMzODFmLi5kNWFhYjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTUyNCw2ICs1MjQsNyBAQAogCWludCAoKnByb2JlKSAoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJaW50ICgqaW5pdCkgKHN0cnVjdCBlZnhfbmljICplZngpOwogCXZvaWQgKCpmaW5pKSAoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBlZnhfbmljICplZngpOwogCWludCAoKnJlY29uZmlndXJlKSAoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJYm9vbCAoKnBvbGwpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAl2b2lkICgqZ2V0X3NldHRpbmdzKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwppbmRleCBhNTc3YmUyLi5kYjQ0MjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCkBAIC0xNTc2LDYgKzE1NzYsOCBAQAogCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0FaX1RYX1NPRlRfRVZUX0VOLCAxKTsKIAkvKiBQcmVmZXRjaCB0aHJlc2hvbGQgMiA9PiBmZXRjaCB3aGVuIGRlc2NyaXB0b3IgY2FjaGUgaGFsZiBlbXB0eSAqLwogCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0FaX1RYX1BSRUZfVEhSRVNIT0xELCAyKTsKKwkvKiBEaXNhYmxlIGhhcmR3YXJlIHdhdGNoZG9nIHdoaWNoIGNhbiBtaXNmaXJlICovCisJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfUFJFRl9XRF9UTVIsIDB4M2ZmZmZmKTsKIAkvKiBTcXVhc2ggVFggb2YgcGFja2V0cyBvZiAxNiBieXRlcyBvciBsZXNzICovCiAJaWYgKGVmeF9uaWNfcmV2KGVmeCkgPj0gRUZYX1JFVl9GQUxDT05fQjApCiAJCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0JaX1RYX0ZMVVNIX01JTl9MRU5fRU4sIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKaW5kZXggMzgwMGZjNy4uZmY4ZjBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCkBAIC0zMyw2ICszMyw5IEBACiAjZGVmaW5lIFBDU19GV19IRUFSVEJFQVRfUkVHCTB4ZDdlZQogI2RlZmluZSBQQ1NfRldfSEVBUlRCX0xCTgkwCiAjZGVmaW5lIFBDU19GV19IRUFSVEJfV0lEVEgJOAorI2RlZmluZSBQQ1NfRldfUFJPRFVDVF9DT0RFXzEJMHhkN2YwCisjZGVmaW5lIFBDU19GV19WRVJTSU9OXzEJMHhkN2YzCisjZGVmaW5lIFBDU19GV19CVUlMRF8xCQkweGQ3ZjYKICNkZWZpbmUgUENTX1VDODA1MV9TVEFUVVNfUkVHCTB4ZDdmZAogI2RlZmluZSBQQ1NfVUNfU1RBVFVTX0xCTgkwCiAjZGVmaW5lIFBDU19VQ19TVEFUVVNfV0lEVEgJOApAQCAtNTIsMTQgKzU1LDI0IEBACiAKIHN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgewogCWVudW0gZWZ4X3BoeV9tb2RlIHBoeV9tb2RlOworCWJvb2wgYnVnMTcxOTBfaW5fYmFkX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgYnVnMTcxOTBfdGltZXI7CisJdTMyIGZpcm13YXJlX3ZlcjsKIH07CiAKICNkZWZpbmUgUVQyMDIyQzJfTUFYX1JFU0VUX1RJTUUgNTAwCiAjZGVmaW5lIFFUMjAyMkMyX1JFU0VUX1dBSVQgMTAKIAotc3RhdGljIGludCBxdDIwMjVjX3dhaXRfcmVzZXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKKyNkZWZpbmUgUVQyMDI1Q19NQVhfSEVBUlRCX1RJTUUgKDUgKiBIWikKKyNkZWZpbmUgUVQyMDI1Q19IRUFSVEJfV0FJVCAxMDAKKyNkZWZpbmUgUVQyMDI1Q19NQVhfRldTVEFSVF9USU1FICgyNSAqIEhaIC8gMTApCisjZGVmaW5lIFFUMjAyNUNfRldTVEFSVF9XQUlUIDEwMAorCisjZGVmaW5lIEJVRzE3MTkwX0lOVEVSVkFMICgyICogSFopCisKK3N0YXRpYyBpbnQgcXQyMDI1Y193YWl0X2hlYXJ0YmVhdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBRVDIwMjVDX01BWF9IRUFSVEJfVElNRTsKIAlpbnQgcmVnLCBvbGRfY291bnRlciA9IDA7CiAKIAkvKiBXYWl0IGZvciBmaXJtd2FyZSBoZWFydGJlYXQgdG8gc3RhcnQgKi8KQEAgLTc0LDExICs4NywyNSBAQAogCQkJb2xkX2NvdW50ZXIgPSBjb3VudGVyOwogCQllbHNlIGlmIChjb3VudGVyICE9IG9sZF9jb3VudGVyKQogCQkJYnJlYWs7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJLyogU29tZSBjYWJsZXMgaGF2ZSBFRVBST01zIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGUKKwkJCSAqIFBIWSdzIG9uLWJvYXJkIEVFUFJPTSBzbyBpdCBjYW5ub3QgbG9hZCBmaXJtd2FyZSAqLworCQkJRUZYX0VSUihlZngsICJJZiBhbiBTRlArIGRpcmVjdCBhdHRhY2ggY2FibGUgaXMiCisJCQkJIiBjb25uZWN0ZWQsIHBsZWFzZSBjaGVjayB0aGF0IGl0IGNvbXBsaWVzIgorCQkJCSIgd2l0aCB0aGUgU0ZQKyBzcGVjaWZpY2F0aW9uXG4iKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwotCQltc2xlZXAoMTApOworCQl9CisJCW1zbGVlcChRVDIwMjVDX0hFQVJUQl9XQUlUKTsKIAl9CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdDIwMjVjX3dhaXRfZndfc3RhdHVzX2dvb2Qoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgUVQyMDI1Q19NQVhfRldTVEFSVF9USU1FOworCWludCByZWc7CisKIAkvKiBXYWl0IGZvciBmaXJtd2FyZSBzdGF0dXMgdG8gbG9vayBnb29kICovCiAJZm9yICg7OykgewogCQlyZWcgPSBlZnhfbWRpb19yZWFkKGVmeCwgTURJT19NTURfUENTLCBQQ1NfVUM4MDUxX1NUQVRVU19SRUcpOwpAQCAtOTAsNyArMTE3LDE3OCBAQAogCQkJYnJlYWs7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQogCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCW1zbGVlcChRVDIwMjVDX0ZXU1RBUlRfV0FJVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHF0MjAyNWNfcmVzdGFydF9maXJtd2FyZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCS8qIFJlc3RhcnQgbWljcm9jb250cm9sbGVyIGV4ZWN1dGlvbiBvZiBmaXJtd2FyZSBmcm9tIFJBTSAqLworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMywgMHhlODU0LCAweDAwYzApOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgMywgMHhlODU0LCAweDAwNDApOworCW1zbGVlcCg1MCk7Cit9CisKK3N0YXRpYyBpbnQgcXQyMDI1Y193YWl0X3Jlc2V0KHN0cnVjdCBlZnhfbmljICplZngpCit7CisJaW50IHJjOworCisJcmMgPSBxdDIwMjVjX3dhaXRfaGVhcnRiZWF0KGVmeCk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXJjID0gcXQyMDI1Y193YWl0X2Z3X3N0YXR1c19nb29kKGVmeCk7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJLyogQnVnIDE3Njg5OiBvY2Nhc2lvbmFsbHkgaGVhcnRiZWF0IHN0YXJ0cyBidXQgZmlybXdhcmUgc3RhdHVzCisJCSAqIGNvZGUgbmV2ZXIgcHJvZ3Jlc3NlcyBiZXlvbmQgMHgwMC4gIFRyeSBhZ2Fpbiwgb25jZSwgYWZ0ZXIKKwkJICogcmVzdGFydGluZyBleGVjdXRpb24gb2YgdGhlIGZpcm13YXJlIGltYWdlLiAqLworCQlFRlhfTE9HKGVmeCwgImJhc2hpbmcgUVQyMDI1QyBtaWNyb2NvbnRyb2xsZXJcbiIpOworCQlxdDIwMjVjX3Jlc3RhcnRfZmlybXdhcmUoZWZ4KTsKKwkJcmMgPSBxdDIwMjVjX3dhaXRfaGVhcnRiZWF0KGVmeCk7CisJCWlmIChyYyAhPSAwKQorCQkJcmV0dXJuIHJjOworCQlyYyA9IHF0MjAyNWNfd2FpdF9md19zdGF0dXNfZ29vZChlZngpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcXQyMDI1Y19maXJtd2FyZV9pZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgKnBoeV9kYXRhID0gZWZ4LT5waHlfZGF0YTsKKwl1OCBmaXJtd2FyZV9pZFs5XTsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmlybXdhcmVfaWQpOyBpKyspCisJCWZpcm13YXJlX2lkW2ldID0gZWZ4X21kaW9fcmVhZChlZngsIE1ESU9fTU1EX1BDUywKKwkJCQkJICAgICAgIFBDU19GV19QUk9EVUNUX0NPREVfMSArIGkpOworCUVGWF9JTkZPKGVmeCwgIlFUMjAyNUMgZmlybXdhcmUgJXhyJWQgdiVkLiVkLiVkLiVkIFsyMCUwMmQtJTAyZC0lMDJkXVxuIiwKKwkJIChmaXJtd2FyZV9pZFswXSA8PCA4KSB8IGZpcm13YXJlX2lkWzFdLCBmaXJtd2FyZV9pZFsyXSwKKwkJIGZpcm13YXJlX2lkWzNdID4+IDQsIGZpcm13YXJlX2lkWzNdICYgMHhmLAorCQkgZmlybXdhcmVfaWRbNF0sIGZpcm13YXJlX2lkWzVdLAorCQkgZmlybXdhcmVfaWRbNl0sIGZpcm13YXJlX2lkWzddLCBmaXJtd2FyZV9pZFs4XSk7CisJcGh5X2RhdGEtPmZpcm13YXJlX3ZlciA9ICgoZmlybXdhcmVfaWRbM10gJiAweGYwKSA8PCAyMCkgfAorCQkJCSAoKGZpcm13YXJlX2lkWzNdICYgMHgwZikgPDwgMTYpIHwKKwkJCQkgKGZpcm13YXJlX2lkWzRdIDw8IDgpIHwgZmlybXdhcmVfaWRbNV07Cit9CisKK3N0YXRpYyB2b2lkIHF0MjAyNWNfYnVnMTcxOTBfd29ya2Fyb3VuZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgKnBoeV9kYXRhID0gZWZ4LT5waHlfZGF0YTsKKworCS8qIFRoZSBQSFkgY2FuIGdldCBzdHVjayBpbiBhIHN0YXRlIHdoZXJlIGl0IHJlcG9ydHMgUEhZX1hTIGFuZCBQTUEvUE1ECisJICogbGF5ZXJzIHVwLCBidXQgUENTIGRvd24gKG5vIGJsb2NrX2xvY2spLiAgSWYgd2Ugbm90aWNlIHRoaXMgc3RhdGUKKwkgKiBwZXJzaXN0aW5nIGZvciBhIGNvdXBsZSBvZiBzZWNvbmRzLCB3ZSBzd2l0Y2ggUE1BL1BNRCBsb29wYmFjaworCSAqIGJyaWVmbHkgb24gYW5kIHRoZW4gb2ZmIGFnYWluLCB3aGljaCBpcyBub3JtYWxseSBzdWZmaWNpZW50IHRvCisJICogcmVjb3ZlciBpdC4KKwkgKi8KKwlpZiAoZWZ4LT5saW5rX3N0YXRlLnVwIHx8CisJICAgICFlZnhfbWRpb19saW5rc19vayhlZngsIE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfUEhZWFMpKSB7CisJCXBoeV9kYXRhLT5idWcxNzE5MF9pbl9iYWRfc3RhdGUgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcGh5X2RhdGEtPmJ1ZzE3MTkwX2luX2JhZF9zdGF0ZSkgeworCQlwaHlfZGF0YS0+YnVnMTcxOTBfaW5fYmFkX3N0YXRlID0gdHJ1ZTsKKwkJcGh5X2RhdGEtPmJ1ZzE3MTkwX3RpbWVyID0gamlmZmllcyArIEJVRzE3MTkwX0lOVEVSVkFMOworCQlyZXR1cm47CisJfQorCisJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcGh5X2RhdGEtPmJ1ZzE3MTkwX3RpbWVyKSkgeworCQlFRlhfTE9HKGVmeCwgImJhc2hpbmcgUVQyMDI1QyBQTUEvUE1EXG4iKTsKKwkJZWZ4X21kaW9fc2V0X2ZsYWcoZWZ4LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fQ1RSTDEsCisJCQkJICBNRElPX1BNQV9DVFJMMV9MT09QQkFDSywgdHJ1ZSk7CiAJCW1zbGVlcCgxMDApOworCQllZnhfbWRpb19zZXRfZmxhZyhlZngsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19DVFJMMSwKKwkJCQkgIE1ESU9fUE1BX0NUUkwxX0xPT1BCQUNLLCBmYWxzZSk7CisJCXBoeV9kYXRhLT5idWcxNzE5MF90aW1lciA9IGppZmZpZXMgKyBCVUcxNzE5MF9JTlRFUlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcXQyMDI1Y19zZWxlY3RfcGh5X21vZGUoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlzdHJ1Y3QgcXQyMDJ4X3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7CisJc3RydWN0IGZhbGNvbl9ib2FyZCAqYm9hcmQgPSBmYWxjb25fYm9hcmQoZWZ4KTsKKwlpbnQgcmVnLCByYywgaTsKKwl1aW50MTZfdCBwaHlfb3BfbW9kZTsKKworCS8qIE9ubHkgMi4wLjEuMCsgUEhZIGZpcm13YXJlIHN1cHBvcnRzIHRoZSBtb3JlIG9wdGltYWwgU0ZQKworCSAqIFNlbGYtQ29uZmlndXJlIG1vZGUuICBEb24ndCBhdHRlbXB0IGFueSBzd2l0Y2hpbmcgaWYgd2UgZW5jb3VudGVyCisJICogb2xkZXIgZmlybXdhcmUuICovCisJaWYgKHBoeV9kYXRhLT5maXJtd2FyZV92ZXIgPCAweDAyMDAwMTAwKQorCQlyZXR1cm4gMDsKKworCS8qIEluIGdlbmVyYWwgd2Ugd2lsbCBnZXQgb3B0aW1hbCBiZWhhdmlvdXIgaW4gIlNGUCsgU2VsZi1Db25maWd1cmUiCisJICogbW9kZTsgaG93ZXZlciwgdGhhdCBwb3dlcnMgZG93biBtb3N0IG9mIHRoZSBQSFkgd2hlbiBubyBtb2R1bGUgaXMKKwkgKiBwcmVzZW50LCBzbyB3ZSBtdXN0IHVzZSBhIGRpZmZlcmVudCBtb2RlIChhbnkgZml4ZWQgbW9kZSB3aWxsIGRvKQorCSAqIHRvIGJlIHN1cmUgdGhhdCBsb29wYmFja3Mgd2lsbCB3b3JrLiAqLworCXBoeV9vcF9tb2RlID0gKGVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19OT05FKSA/IDB4MDAzOCA6IDB4MDAyMDsKKworCS8qIE9ubHkgY2hhbmdlIG1vZGUgaWYgcmVhbGx5IG5lY2Vzc2FyeSAqLworCXJlZyA9IGVmeF9tZGlvX3JlYWQoZWZ4LCAxLCAweGMzMTkpOworCWlmICgocmVnICYgMHgwMDM4KSA9PSBwaHlfb3BfbW9kZSkKKwkJcmV0dXJuIDA7CisJRUZYX0xPRyhlZngsICJTd2l0Y2hpbmcgUEhZIHRvIG1vZGUgMHglMDR4XG4iLCBwaHlfb3BfbW9kZSk7CisKKwkvKiBUaGlzIHNlcXVlbmNlIHJlcGxpY2F0ZXMgdGhlIHJlZ2lzdGVyIHdyaXRlcyBjb25maWd1cmVkIGluIHRoZSBib290CisJICogRUVQUk9NIChpbmNsdWRpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYm9hcmQgcmV2aXNpb25zKSwgZXhjZXB0CisJICogdGhhdCB0aGUgb3BlcmF0aW5nIG1vZGUgaXMgY2hhbmdlZCwgYW5kIHRoZSBQSFkgaXMgcHJldmVudGVkIGZyb20KKwkgKiB1bm5lY2Vzc2FyaWx5IHJlbG9hZGluZyB0aGUgbWFpbiBmaXJtd2FyZSBpbWFnZSBhZ2Fpbi4gKi8KKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMCwgMHgwMDAwKTsKKwkvKiAoTm90ZTogdGhpcyBwb3J0aW9uIG9mIHRoZSBib290IEVFUFJPTSBzZXF1ZW5jZSwgd2hpY2ggYml0LWJhc2hlcyA5CisJICogU1RPUHMgb250byB0aGUgZmlybXdhcmUvbW9kdWxlIEkyQyBidXMgdG8gcmVzZXQgaXQsIHZhcmllcyBhY3Jvc3MKKwkgKiBib2FyZCByZXZpc2lvbnMsIGFzIHRoZSBidXMgaXMgY29ubmVjdGVkIHRvIGRpZmZlcmVudCBHUElPL0xFRAorCSAqIG91dHB1dHMgb24gdGhlIFBIWS4pICovCisJaWYgKGJvYXJkLT5tYWpvciA9PSAwICYmIGJvYXJkLT5taW5vciA8IDIpIHsKKwkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4NDQ5OCk7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwkJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAzLCAweDQ0ODgpOworCQkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4NDQ4MCk7CisJCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHg0NDkwKTsKKwkJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhjMzAzLCAweDQ0OTgpOworCQl9CisJfSBlbHNlIHsKKwkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4MDkyMCk7CisJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhkMDA4LCAweDAwMDQpOworCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHgwOTAwKTsKKwkJCWVmeF9tZGlvX3dyaXRlKGVmeCwgMSwgMHhkMDA4LCAweDAwMDUpOworCQkJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4MDkyMCk7CisJCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4ZDAwOCwgMHgwMDA0KTsKKwkJfQorCQllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMywgMHg0OTAwKTsKKwl9CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDMsIDB4NDkwMCk7CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDIsIDB4MDAwNCk7CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMTYsIDB4MDAxMyk7CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMTgsIDB4MDA1NCk7CisJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMTksIHBoeV9vcF9tb2RlKTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMxYSwgMHgwMDk4KTsKKwllZnhfbWRpb193cml0ZShlZngsIDMsIDB4MDAyNiwgMHgwZTAwKTsKKwllZnhfbWRpb193cml0ZShlZngsIDMsIDB4MDAyNywgMHgwMDEzKTsKKwllZnhfbWRpb193cml0ZShlZngsIDMsIDB4MDAyOCwgMHhhNTI4KTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4ZDAwNiwgMHgwMDBhKTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4ZDAwNywgMHgwMDA5KTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4ZDAwOCwgMHgwMDA0KTsKKwkvKiBUaGlzIGFkZGl0aW9uYWwgd3JpdGUgaXMgbm90IHByZXNlbnQgaW4gdGhlIGJvb3QgRUVQUk9NLiAgSXQKKwkgKiBwcmV2ZW50cyB0aGUgUEhZJ3MgaW50ZXJuYWwgYm9vdCBST00gZG9pbmcgYW5vdGhlciBwb2ludGxlc3MgKGFuZAorCSAqIHNsb3cpIHJlbG9hZCBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgKHRoZSBtaWNyb2NvbnRyb2xsZXIncyBjb2RlCisJICogbWVtb3J5IGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgbWljcm9jb250cm9sbGVyIHJlc2V0KS4gKi8KKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMxNywgMHgwMGZmKTsKKwllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMwMCwgMHgwMDAyKTsKKwltc2xlZXAoMjApOworCisJLyogUmVzdGFydCBtaWNyb2NvbnRyb2xsZXIgZXhlY3V0aW9uIG9mIGZpcm13YXJlIGZyb20gUkFNICovCisJcXQyMDI1Y19yZXN0YXJ0X2Zpcm13YXJlKGVmeCk7CisKKwkvKiBXYWl0IGZvciB0aGUgbWljcm9jb250cm9sbGVyIHRvIGJlIHJlYWR5IGFnYWluICovCisJcmMgPSBxdDIwMjVjX3dhaXRfcmVzZXQoZWZ4KTsKKwlpZiAocmMgPCAwKSB7CisJCUVGWF9FUlIoZWZ4LCAiUEhZIG1pY3JvY29udHJvbGxlciByZXNldCBkdXJpbmcgbW9kZSBzd2l0Y2ggIgorCQkJCSJ0aW1lZCBvdXRcbiIpOworCQlyZXR1cm4gcmM7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzcsNiArMzM1LDE2IEBACiAKIHN0YXRpYyBpbnQgcXQyMDJ4X3BoeV9wcm9iZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCXN0cnVjdCBxdDIwMnhfcGh5X2RhdGEgKnBoeV9kYXRhOworCisJcGh5X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXQyMDJ4X3BoeV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaHlfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOworCXBoeV9kYXRhLT5waHlfbW9kZSA9IGVmeC0+cGh5X21vZGU7CisJcGh5X2RhdGEtPmJ1ZzE3MTkwX2luX2JhZF9zdGF0ZSA9IGZhbHNlOworCXBoeV9kYXRhLT5idWcxNzE5MF90aW1lciA9IDA7CisKIAllZngtPm1kaW8ubW1kcyA9IFFUMjAyWF9SRVFVSVJFRF9ERVZTOwogCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgPSBNRElPX1NVUFBPUlRTX0M0NSB8IE1ESU9fRU1VTEFURV9DMjI7CiAJZWZ4LT5sb29wYmFja19tb2RlcyA9IFFUMjAyWF9MT09QQkFDS1MgfCBGQUxDT05fWE1BQ19MT09QQkFDS1M7CkBAIC0xNDUsNyArMzUzLDYgQEAKIAogc3RhdGljIGludCBxdDIwMnhfcGh5X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQlzdHJ1Y3QgcXQyMDJ4X3BoeV9kYXRhICpwaHlfZGF0YTsKIAl1MzIgZGV2aWQ7CiAJaW50IHJjOwogCkBAIC0xNTUsMTcgKzM2MiwxNCBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcGh5X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXQyMDJ4X3BoeV9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwaHlfZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOwotCiAJZGV2aWQgPSBlZnhfbWRpb19yZWFkX2lkKGVmeCwgTURJT19NTURfUEhZWFMpOwogCUVGWF9JTkZPKGVmeCwgIlBIWSBJRCByZWcgJXggKE9VSSAlMDZ4IG1vZGVsICUwMnggcmV2aXNpb24gJXgpXG4iLAogCQkgZGV2aWQsIGVmeF9tZGlvX2lkX291aShkZXZpZCksIGVmeF9tZGlvX2lkX21vZGVsKGRldmlkKSwKIAkJIGVmeF9tZGlvX2lkX3JldihkZXZpZCkpOwogCi0JcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKKwlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9RVDIwMjVDKQorCQlxdDIwMjVjX2Zpcm13YXJlX2lkKGVmeCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgzLDYgKzM4Nyw5IEBACiAJZWZ4LT5saW5rX3N0YXRlLmZkID0gdHJ1ZTsKIAllZngtPmxpbmtfc3RhdGUuZmMgPSBlZngtPndhbnRlZF9mYzsKIAorCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpCisJCXF0MjAyNWNfYnVnMTcxOTBfd29ya2Fyb3VuZChlZngpOworCiAJcmV0dXJuIGVmeC0+bGlua19zdGF0ZS51cCAhPSB3YXNfdXA7CiB9CiAKQEAgLTE5MSw2ICszOTgsMTAgQEAKIAlzdHJ1Y3QgcXQyMDJ4X3BoeV9kYXRhICpwaHlfZGF0YSA9IGVmeC0+cGh5X2RhdGE7CiAKIAlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9RVDIwMjVDKSB7CisJCWludCByYyA9IHF0MjAyNWNfc2VsZWN0X3BoeV9tb2RlKGVmeCk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwogCQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgcmVnaXN0ZXIgYml0cyB3aGljaCBjYW4KIAkJICogZGlzYWJsZSBUWCAoYW5kIHNhdmUgcG93ZXIpIG9uIGRpcmVjdC1hdHRhY2ggY2FibGVzCiAJCSAqIG9yIG9wdGljYWwgdHJhbnNjZWl2ZXJzLCB2YXJ5aW5nIHNvbWV3aGF0IGJldHdlZW4KQEAgLTIyNCw3ICs0MzUsNyBAQAogCW1kaW80NV9ldGh0b29sX2dzZXQoJmVmeC0+bWRpbywgZWNtZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHF0MjAyeF9waHlfZmluaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIHZvaWQgcXQyMDJ4X3BoeV9yZW1vdmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAkvKiBGcmVlIHRoZSBjb250ZXh0IGJsb2NrICovCiAJa2ZyZWUoZWZ4LT5waHlfZGF0YSk7CkBAIC0yMzYsNyArNDQ3LDggQEAKIAkuaW5pdAkJID0gcXQyMDJ4X3BoeV9pbml0LAogCS5yZWNvbmZpZ3VyZQkgPSBxdDIwMnhfcGh5X3JlY29uZmlndXJlLAogCS5wb2xsCSAgICAgCSA9IHF0MjAyeF9waHlfcG9sbCwKLQkuZmluaQkgIAkgPSBxdDIwMnhfcGh5X2ZpbmksCisJLmZpbmkJCSA9IGVmeF9wb3J0X2R1bW15X29wX3ZvaWQsCisJLnJlbW92ZQkgIAkgPSBxdDIwMnhfcGh5X3JlbW92ZSwKIAkuZ2V0X3NldHRpbmdzCSA9IHF0MjAyeF9waHlfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJID0gZWZ4X21kaW9fc2V0X3NldHRpbmdzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKaW5kZXggZGUwN2E0Zi4uZjhjNjc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogCiB2b2lkIHNpZW5hX3JlbW92ZV9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJZWZ4LT5waHlfb3AtPnJlbW92ZShlZngpOwogCWVmeF9uaWNfZnJlZV9idWZmZXIoZWZ4LCAmZWZ4LT5zdGF0c19idWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKaW5kZXggY2ExMTU3Mi4uMzAwOWMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwpAQCAtMjAyLDEwICsyMDIsMTQgQEAKIAlpbnQgcmM7CiAKIAlydG5sX2xvY2soKTsKLQllZnhfbWRpb19zZXRfZmxhZyhlZngsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVFhQV1IsCi0JCQkgIE1ESU9fUE1BXzEwR0JUX1RYUFdSX1NIT1JULAotCQkJICBjb3VudCAhPSAwICYmICpidWYgIT0gJzAnKTsKLQlyYyA9IGVmeF9yZWNvbmZpZ3VyZV9wb3J0KGVmeCk7CisJaWYgKGVmeC0+c3RhdGUgIT0gU1RBVEVfUlVOTklORykgeworCQlyYyA9IC1FQlVTWTsKKwl9IGVsc2UgeworCQllZnhfbWRpb19zZXRfZmxhZyhlZngsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVFhQV1IsCisJCQkJICBNRElPX1BNQV8xMEdCVF9UWFBXUl9TSE9SVCwKKwkJCQkgIGNvdW50ICE9IDAgJiYgKmJ1ZiAhPSAnMCcpOworCQlyYyA9IGVmeF9yZWNvbmZpZ3VyZV9wb3J0KGVmeCk7CisJfQogCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmMgPCAwID8gcmMgOiAoc3NpemVfdCljb3VudDsKQEAgLTI5OCwzNiArMzAyLDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Z4NzEwMV9waHlfcHJvYmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKLXsKLQllZngtPm1kaW8ubW1kcyA9IFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTOwotCWVmeC0+bWRpby5tb2RlX3N1cHBvcnQgPSBNRElPX1NVUFBPUlRTX0M0NSB8IE1ESU9fRU1VTEFURV9DMjI7Ci0JZWZ4LT5sb29wYmFja19tb2RlcyA9IFNGWDcxMDFfTE9PUEJBQ0tTIHwgRkFMQ09OX1hNQUNfTE9PUEJBQ0tTOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNmdDkwMDFfcGh5X3Byb2JlKHN0cnVjdCBlZnhfbmljICplZngpCi17Ci0JZWZ4LT5tZGlvLm1tZHMgPSBURU5YUFJFU1NfUkVRVUlSRURfREVWUzsKLQllZngtPm1kaW8ubW9kZV9zdXBwb3J0ID0gTURJT19TVVBQT1JUU19DNDUgfCBNRElPX0VNVUxBVEVfQzIyOwotCWVmeC0+bG9vcGJhY2tfbW9kZXMgPSAoU0ZUOTAwMV9MT09QQkFDS1MgfCBGQUxDT05fWE1BQ19MT09QQkFDS1MgfAotCQkJICAgICAgIEZBTENPTl9HTUFDX0xPT1BCQUNLUyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCitzdGF0aWMgaW50IHRlbnhwcmVzc19waHlfcHJvYmUoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgdGVueHByZXNzX3BoeV9kYXRhICpwaHlfZGF0YTsKLQlpbnQgcmMgPSAwOworCWludCByYzsKIAotCWZhbGNvbl9ib2FyZChlZngpLT50eXBlLT5pbml0X3BoeShlZngpOwotCisJLyogQWxsb2NhdGUgcGh5IHByaXZhdGUgc3RvcmFnZSAqLwogCXBoeV9kYXRhID0ga3phbGxvYyhzaXplb2YoKnBoeV9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwaHlfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZWZ4LT5waHlfZGF0YSA9IHBoeV9kYXRhOwogCXBoeV9kYXRhLT5waHlfbW9kZSA9IGVmeC0+cGh5X21vZGU7CiAKKwkvKiBDcmVhdGUgYW55IHNwZWNpYWwgZmlsZXMgKi8KKwlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlQ5MDAxQikgeworCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9waHlfc2hvcnRfcmVhY2gpOworCQlpZiAocmMpCisJCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgeworCQllZngtPm1kaW8ubW1kcyA9IFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTOworCQllZngtPm1kaW8ubW9kZV9zdXBwb3J0ID0gTURJT19TVVBQT1JUU19DNDU7CisKKwkJZWZ4LT5sb29wYmFja19tb2RlcyA9IFNGWDcxMDFfTE9PUEJBQ0tTIHwgRkFMQ09OX1hNQUNfTE9PUEJBQ0tTOworCisJCWVmeC0+bGlua19hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEX1RQIHwgQURWRVJUSVNFRF9BdXRvbmVnIHwKKwkJCQkJIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsKTsKKwl9IGVsc2UgeworCQllZngtPm1kaW8ubW1kcyA9IFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTOworCQllZngtPm1kaW8ubW9kZV9zdXBwb3J0ID0gTURJT19TVVBQT1JUU19DNDUgfCBNRElPX0VNVUxBVEVfQzIyOworCisJCWVmeC0+bG9vcGJhY2tfbW9kZXMgPSAoU0ZUOTAwMV9MT09QQkFDS1MgfAorCQkJCSAgICAgICBGQUxDT05fWE1BQ19MT09QQkFDS1MgfCAKKwkJCQkgICAgICAgRkFMQ09OX0dNQUNfTE9PUEJBQ0tTKTsKKworCQllZngtPmxpbmtfYWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF9UUCB8IEFEVkVSVElTRURfQXV0b25lZyB8CisJCQkJCSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCk7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJa2ZyZWUoZWZ4LT5waHlfZGF0YSk7CisJZWZ4LT5waHlfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHRlbnhwcmVzc19waHlfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCWludCByYzsKKworCWZhbGNvbl9ib2FyZChlZngpLT50eXBlLT5pbml0X3BoeShlZngpOworCiAJaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpKSB7CiAJCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1NGVDkwMDFBKSB7CiAJCQlpbnQgcmVnOwpAQCAtMzQxLDQ0ICszNzEsMjcgQEAKIAogCQlyYyA9IGVmeF9tZGlvX3dhaXRfcmVzZXRfbW1kcyhlZngsIFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTKTsKIAkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gZmFpbDsKKwkJCXJldHVybiByYzsKIAogCQlyYyA9IGVmeF9tZGlvX2NoZWNrX21tZHMoZWZ4LCBURU5YUFJFU1NfUkVRVUlSRURfREVWUywgMCk7CiAJCWlmIChyYyA8IDApCi0JCQlnb3RvIGZhaWw7CisJCQlyZXR1cm4gcmM7CiAJfQogCiAJcmMgPSB0ZW54cHJlc3NfaW5pdChlZngpOwogCWlmIChyYyA8IDApCi0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIHJjOwogCi0JLyogSW5pdGlhbGlzZSBhZHZlcnRpc2luZyBmbGFncyAqLwotCWVmeC0+bGlua19hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEX1RQIHwgQURWRVJUSVNFRF9BdXRvbmVnIHwKLQkJCQkgIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsKTsKLQlpZiAoZWZ4LT5waHlfdHlwZSAhPSBQSFlfVFlQRV9TRlg3MTAxKQotCQllZngtPmxpbmtfYWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpOworCS8qIFJlaW5pdGlhbGlzZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KIAllZnhfbGlua19zZXRfd2FudGVkX2ZjKGVmeCwgZWZ4LT53YW50ZWRfZmMpOwogCWVmeF9tZGlvX2FuX3JlY29uZmlndXJlKGVmeCk7CiAKLQlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlQ5MDAxQikgewotCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9waHlfc2hvcnRfcmVhY2gpOwotCQlpZiAocmMpCi0JCQlnb3RvIGZhaWw7Ci0JfQotCiAJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFogLyA1KTsgLyogMjAwbXMgKi8KIAogCS8qIExldCBYR1hTIGFuZCBTZXJEZXMgb3V0IG9mIHJlc2V0ICovCiAJZmFsY29uX3Jlc2V0X3hhdWkoZWZ4KTsKIAogCXJldHVybiAwOwotCi0gZmFpbDoKLQlrZnJlZShlZngtPnBoeV9kYXRhKTsKLQllZngtPnBoeV9kYXRhID0gTlVMTDsKLQlyZXR1cm4gcmM7CiB9CiAKIC8qIFBlcmZvcm0gYSAic3BlY2lhbCBzb2Z0d2FyZSByZXNldCIgb24gdGhlIFBIWS4gVGhlIGNhbGxlciBpcwpAQCAtNTg5LDI1ICs2MDIsMjYgQEAKIAlyZXR1cm4gIWVmeF9saW5rX3N0YXRlX2VxdWFsKCZlZngtPmxpbmtfc3RhdGUsICZvbGRfc3RhdGUpOwogfQogCi1zdGF0aWMgdm9pZCB0ZW54cHJlc3NfcGh5X2Zpbmkoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3N0YXRpYyB2b2lkIHNmeDcxMDFfcGh5X2Zpbmkoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlpbnQgcmVnOwogCisJLyogUG93ZXIgZG93biB0aGUgTE5QR0EgKi8KKwlyZWcgPSAoMSA8PCBQTUFfUE1EX0xOUEdBX1BPV0VSRE9XTl9MQk4pOworCWVmeF9tZGlvX3dyaXRlKGVmeCwgTURJT19NTURfUE1BUE1ELCBQTUFfUE1EX1hDT05UUk9MX1JFRywgcmVnKTsKKworCS8qIFdhaXRpbmcgaGVyZSBlbnN1cmVzIHRoYXQgdGhlIGJvYXJkIGZpbmksIHdoaWNoIGNhbiB0dXJuCisJICogb2ZmIHRoZSBwb3dlciB0byB0aGUgUEhZLCB3b24ndCBnZXQgcnVuIHVudGlsIHRoZSBMTlBHQQorCSAqIHBvd2VyZG93biBoYXMgYmVlbiBnaXZlbiBsb25nIGVub3VnaCB0byBjb21wbGV0ZS4gKi8KKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShMTlBHQV9QRE9XTl9XQUlUKTsgLyogMjAwIG1zICovCit9CisKK3N0YXRpYyB2b2lkIHRlbnhwcmVzc19waHlfcmVtb3ZlKHN0cnVjdCBlZnhfbmljICplZngpCit7CiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZUOTAwMUIpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsCiAJCQkJICAgJmRldl9hdHRyX3BoeV9zaG9ydF9yZWFjaCk7CiAKLQlpZiAoZWZ4LT5waHlfdHlwZSA9PSBQSFlfVFlQRV9TRlg3MTAxKSB7Ci0JCS8qIFBvd2VyIGRvd24gdGhlIExOUEdBICovCi0JCXJlZyA9ICgxIDw8IFBNQV9QTURfTE5QR0FfUE9XRVJET1dOX0xCTik7Ci0JCWVmeF9tZGlvX3dyaXRlKGVmeCwgTURJT19NTURfUE1BUE1ELCBQTUFfUE1EX1hDT05UUk9MX1JFRywgcmVnKTsKLQotCQkvKiBXYWl0aW5nIGhlcmUgZW5zdXJlcyB0aGF0IHRoZSBib2FyZCBmaW5pLCB3aGljaCBjYW4gdHVybgotCQkgKiBvZmYgdGhlIHBvd2VyIHRvIHRoZSBQSFksIHdvbid0IGdldCBydW4gdW50aWwgdGhlIExOUEdBCi0JCSAqIHBvd2VyZG93biBoYXMgYmVlbiBnaXZlbiBsb25nIGVub3VnaCB0byBjb21wbGV0ZS4gKi8KLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoTE5QR0FfUERPV05fV0FJVCk7IC8qIDIwMCBtcyAqLwotCX0KLQogCWtmcmVlKGVmeC0+cGh5X2RhdGEpOwogCWVmeC0+cGh5X2RhdGEgPSBOVUxMOwogfQpAQCAtODE5LDExICs4MzMsMTIgQEAKIH0KIAogc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z4NzEwMV9waHlfb3BzID0gewotCS5wcm9iZQkJICA9IHNmeDcxMDFfcGh5X3Byb2JlLAorCS5wcm9iZQkJICA9IHRlbnhwcmVzc19waHlfcHJvYmUsCiAJLmluaXQgICAgICAgICAgICAgPSB0ZW54cHJlc3NfcGh5X2luaXQsCiAJLnJlY29uZmlndXJlICAgICAgPSB0ZW54cHJlc3NfcGh5X3JlY29uZmlndXJlLAogCS5wb2xsICAgICAgICAgICAgID0gdGVueHByZXNzX3BoeV9wb2xsLAotCS5maW5pICAgICAgICAgICAgID0gdGVueHByZXNzX3BoeV9maW5pLAorCS5maW5pICAgICAgICAgICAgID0gc2Z4NzEwMV9waHlfZmluaSwKKwkucmVtb3ZlCQkgID0gdGVueHByZXNzX3BoeV9yZW1vdmUsCiAJLmdldF9zZXR0aW5ncwkgID0gdGVueHByZXNzX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCSAgPSB0ZW54cHJlc3Nfc2V0X3NldHRpbmdzLAogCS5zZXRfbnBhZ2VfYWR2ICAgID0gc2Z4NzEwMV9zZXRfbnBhZ2VfYWR2LApAQCAtODMyLDExICs4NDcsMTIgQEAKIH07CiAKIHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3NmdDkwMDFfcGh5X29wcyA9IHsKLQkucHJvYmUJCSAgPSBzZnQ5MDAxX3BoeV9wcm9iZSwKKwkucHJvYmUJCSAgPSB0ZW54cHJlc3NfcGh5X3Byb2JlLAogCS5pbml0ICAgICAgICAgICAgID0gdGVueHByZXNzX3BoeV9pbml0LAogCS5yZWNvbmZpZ3VyZSAgICAgID0gdGVueHByZXNzX3BoeV9yZWNvbmZpZ3VyZSwKIAkucG9sbCAgICAgICAgICAgICA9IHRlbnhwcmVzc19waHlfcG9sbCwKLQkuZmluaSAgICAgICAgICAgICA9IHRlbnhwcmVzc19waHlfZmluaSwKKwkuZmluaSAgICAgICAgICAgICA9IGVmeF9wb3J0X2R1bW15X29wX3ZvaWQsCisJLnJlbW92ZQkJICA9IHRlbnhwcmVzc19waHlfcmVtb3ZlLAogCS5nZXRfc2V0dGluZ3MJICA9IHRlbnhwcmVzc19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkgID0gdGVueHByZXNzX3NldF9zZXR0aW5ncywKIAkuc2V0X25wYWdlX2FkdiAgICA9IHNmdDkwMDFfc2V0X25wYWdlX2FkdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy90eC5jIGIvZHJpdmVycy9uZXQvc2ZjL3R4LmMKaW5kZXggZTY2OWY5NC4uYThiNzBlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3R4LmMKQEAgLTgyMSw4ICs4MjEsNiBAQAogCQkJCQkgICBFRlhfVFhRX01BU0tdOwogCQllZnhfdHNvaF9mcmVlKHR4X3F1ZXVlLCBidWZmZXIpOwogCQlFRlhfQlVHX09OX1BBUkFOT0lEKGJ1ZmZlci0+c2tiKTsKLQkJYnVmZmVyLT5sZW4gPSAwOwotCQlidWZmZXItPmNvbnRpbnVhdGlvbiA9IHRydWU7CiAJCWlmIChidWZmZXItPnVubWFwX2xlbikgewogCQkJdW5tYXBfYWRkciA9IChidWZmZXItPmRtYV9hZGRyICsgYnVmZmVyLT5sZW4gLQogCQkJCSAgICAgIGJ1ZmZlci0+dW5tYXBfbGVuKTsKQEAgLTgzNiw2ICs4MzQsOCBAQAogCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlidWZmZXItPnVubWFwX2xlbiA9IDA7CiAJCX0KKwkJYnVmZmVyLT5sZW4gPSAwOworCQlidWZmZXItPmNvbnRpbnVhdGlvbiA9IHRydWU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCmluZGV4IGNhNjI4NTAuLjc0MDJiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJbWRlbGF5KDEpOwogCQljbnQtLTsKIAl9Ci0JaWYgKGNudCA8IDApCisJaWYgKGNudCA9PSAwKQogCQlwcmludGsoS0VSTl9FUlIgIkRldmljZSByZXNldCBmYWlsXG4iKTsKIAogCS8qIFRhYmxlIEluaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAxYzAxYjk2Li4zN2Y0ODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC0xODQ0LDcgKzE4NDQsOCBAQAogCXNreTItPnR4X2NvbnMgPSBpZHg7CiAJc21wX21iKCk7CiAKLQlpZiAodHhfYXZhaWwoc2t5MikgPiBNQVhfU0tCX1RYX0xFICsgNCkKKwkvKiBXYWtlIHVubGVzcyBpdCdzIGRldGFjaGVkLCBhbmQgY2FsbGVkIGUuZy4gZnJvbSBza3kyX2Rvd24oKSAqLworCWlmICh0eF9hdmFpbChza3kyKSA+IE1BWF9TS0JfVFhfTEUgKyA0ICYmIG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIApAQCAtNDY4NCw2ICs0Njg1LDcgQEAKIAlJTklUX1dPUksoJmh3LT5yZXN0YXJ0X3dvcmssIHNreTJfcmVzdGFydCk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOworCXBkZXYtPmQzX2RlbGF5ID0gMTUwOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL0tjb25maWcgYi9kcml2ZXJzL25ldC90dWxpcC9LY29uZmlnCmluZGV4IDFjYzhjZjQuLjUxNjcxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvS2NvbmZpZwpAQCAtMTAxLDYgKzEwMSwxMCBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5IFkuCiAKK2NvbmZpZyBUVUxJUF9ETTkxMFgKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBUVUxJUCAmJiBTUEFSQworCiBjb25maWcgREU0WDUKIAl0cmlzdGF0ZSAiR2VuZXJpYyBERUNjaGlwICYgRElHSVRBTCBFdGhlcldPUktTIFBDSS9FSVNBIgogCWRlcGVuZHMgb24gUENJIHx8IEVJU0EKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCBhZDYzNjIxLi42ZjQ0ZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC05Miw2ICs5MiwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCisjaWZkZWYgQ09ORklHX1RVTElQX0RNOTEwWAorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjZW5kaWYKKwogCiAvKiBCb2FyZC9TeXN0ZW0vRGVidWcgaW5mb3JtYXRpb24vZGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIFBDSV9ETTkxMzJfSUQgICAweDkxMzIxMjgyICAgICAgLyogRGF2aWNvbSBETTkxMzIgSUQgKi8KQEAgLTM3Nyw2ICszODEsMjMgQEAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlwcmludGsodmVyc2lvbik7CiAKKwkvKgorCSAqCVNQQVJDIG9uLWJvYXJkIERNOTEweCBjaGlwcyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgbWFpbgorCSAqCXR1bGlwIGRyaXZlciwgZXhjZXB0IGZvciBlYXJseSBETTkxMDBzLgorCSAqLworI2lmZGVmIENPTkZJR19UVUxJUF9ETTkxMFgKKwlpZiAoKGVudC0+ZHJpdmVyX2RhdGEgPT0gUENJX0RNOTEwMF9JRCAmJiBwZGV2LT5yZXZpc2lvbiA+PSAweDMwKSB8fAorCSAgICBlbnQtPmRyaXZlcl9kYXRhID09IFBDSV9ETTkxMDJfSUQpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKKworCQlpZiAoZHAgJiYgb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQorCQkJICAgICAgICI6IHNraXBwaW5nIG9uLWJvYXJkIERNOTEweCAodXNlIHR1bGlwKVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKyNlbmRpZgorCiAJLyogSW5pdCBuZXR3b3JrIGRldmljZSAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqZGIpKTsKIAlpZiAoZGV2ID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggMGZhMzE0MC4uNTk1Nzc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMTk2LDkgKzE5NiwxMyBAQAogCXwgSEFTX05XQVkgfCBIQVNfUENJX01XSSwgdHVsaXBfdGltZXIsIHR1bGlwX21lZGlhX3Rhc2sgfSwKIAogICAvKiBETTkxMFggKi8KKyNpZmRlZiBDT05GSUdfVFVMSVBfRE05MTBYCiAgIHsgIkRhdmljb20gRE05MTAyL0RNOTEwMkEiLCAxMjgsIDB4MDAwMWViZWYsCiAJSEFTX01JSSB8IEhBU19NRURJQV9UQUJMRSB8IENTUjEyX0lOX1NST00gfCBIQVNfQUNQSSwKIAl0dWxpcF90aW1lciwgdHVsaXBfbWVkaWFfdGFzayB9LAorI2Vsc2UKKyAgeyBOVUxMIH0sCisjZW5kaWYKIAogICAvKiBSUzcxMTIgKi8KICAgeyAiQ29uZXhhbnQgTEFOZmluaXR5IiwgMjU2LCAweDAwMDFlYmVmLApAQCAtMjI4LDggKzIzMiwxMCBAQAogCXsgMHgxMjU5LCAweGExMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENPTUVUIH0sCiAJeyAweDExRjYsIDB4OTg4MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ09NUEVYOTg4MSB9LAogCXsgMHg4MDg2LCAweDAwMzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEkyMTE0NSB9LAorI2lmZGVmIENPTkZJR19UVUxJUF9ETTkxMFgKIAl7IDB4MTI4MiwgMHg5MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBETTkxMFggfSwKIAl7IDB4MTI4MiwgMHg5MTAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBETTkxMFggfSwKKyNlbmRpZgogCXsgMHgxMTEzLCAweDEyMTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENPTUVUIH0sCiAJeyAweDExMTMsIDB4MTIxNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgTVg5ODcxNSB9LAogCXsgMHgxMTEzLCAweDk1MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENPTUVUIH0sCkBAIC0xMjk5LDE4ICsxMzA1LDMwIEBACiAJfQogCiAJLyoKLQkgKglFYXJseSBETTkxMDAncyBuZWVkIHNvZnR3YXJlIENSQyBhbmQgdGhlIERNRkUgZHJpdmVyCisJICoJRE05MTB4IGNoaXBzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkbWZlIGRyaXZlciwgZXhjZXB0CisJICoJb24tYm9hcmQgY2hpcHMgb24gU1BBUkMgc3lzdGVtcy4gIEFsc28sIGVhcmx5IERNOTEwMHMgbmVlZAorCSAqCXNvZnR3YXJlIENSQyB3aGljaCBvbmx5IHRoZSBkbWZlIGRyaXZlciBzdXBwb3J0cy4KIAkgKi8KIAotCWlmIChwZGV2LT52ZW5kb3IgPT0gMHgxMjgyICYmIHBkZXYtPmRldmljZSA9PSAweDkxMDApCi0JewotCQkvKiBSZWFkIENoaXAgcmV2aXNpb24gKi8KLQkJaWYgKHBkZXYtPnJldmlzaW9uIDwgMHgzMCkKLQkJewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAic2tpcHBpbmcgZWFybHkgRE05MTAwIHdpdGggQ3JjIGJ1ZyAodXNlIGRtZmUpXG4iKTsKKyNpZmRlZiBDT05GSUdfVFVMSVBfRE05MTBYCisJaWYgKGNoaXBfaWR4ID09IERNOTEwWCkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOworCisJCWlmIChwZGV2LT52ZW5kb3IgPT0gMHgxMjgyICYmIHBkZXYtPmRldmljZSA9PSAweDkxMDAgJiYKKwkJICAgIHBkZXYtPnJldmlzaW9uIDwgMHgzMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSAgICAgICAic2tpcHBpbmcgZWFybHkgRE05MTAwIHdpdGggQ3JjIGJ1ZyAodXNlIGRtZmUpXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CisJCWlmICghKGRwICYmIG9mX2dldF9wcm9wZXJ0eShkcCwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCkpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJICAgICAgICJza2lwcGluZyBETTkxMHggZXhwYW5zaW9uIGNhcmQgKHVzZSBkbWZlKVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KKyNlbmRpZgogCiAJLyoKIAkgKglMb29rcyBmb3IgZWFybHkgUENJIGNoaXBzZXRzIHdoZXJlIHBlb3BsZSByZXBvcnQgaGFuZ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggMDFlOTlmMi4uMjgzNGEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTg0OSwxMyArODQ5LDEzIEBACiAJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHNrLT5za19zbGVlcCk7CiAKLQl0dW4gPSBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW47CisJdHVuID0gdHVuX3NrKHNrKS0+dHVuOwogCWtpbGxfZmFzeW5jKCZ0dW4tPmZhc3luYywgU0lHSU8sIFBPTExfT1VUKTsKIH0KIAogc3RhdGljIHZvaWQgdHVuX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQogewotCWZyZWVfbmV0ZGV2KGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayktPnR1bi0+ZGV2KTsKKwlmcmVlX25ldGRldih0dW5fc2soc2spLT50dW4tPmRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gdHVuX3Byb3RvID0gewpAQCAtOTkwLDcgKzk5MCw3IEBACiAJCXNrLT5za193cml0ZV9zcGFjZSA9IHR1bl9zb2NrX3dyaXRlX3NwYWNlOwogCQlzay0+c2tfc25kYnVmID0gSU5UX01BWDsKIAotCQljb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spLT50dW4gPSB0dW47CisJCXR1bl9zayhzayktPnR1biA9IHR1bjsKIAogCQlzZWN1cml0eV90dW5fZGV2X3Bvc3RfY3JlYXRlKHNrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKaW5kZXggYWZhZjA4OC4uOTZiZGMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCkBAIC0xNTYzLDcgKzE1NjMsMTAgQEAKIAogc3RhdGljIHZvaWQgdWdldGhfcXVpZXNjZShzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCiB7Ci0JLyogV2FpdCBmb3IgYW5kIHByZXZlbnQgYW55IGZ1cnRoZXIgeG1pdHMuICovCisJLyogUHJldmVudCBhbnkgZnVydGhlciB4bWl0cywgcGx1cyBkZXRhY2ggdGhlIGRldmljZS4gKi8KKwluZXRpZl9kZXZpY2VfZGV0YWNoKHVnZXRoLT5uZGV2KTsKKworCS8qIFdhaXQgZm9yIGFueSBjdXJyZW50IHhtaXRzIHRvIGZpbmlzaC4gKi8KIAluZXRpZl90eF9kaXNhYmxlKHVnZXRoLT5uZGV2KTsKIAogCS8qIERpc2FibGUgdGhlIGludGVycnVwdCB0byBhdm9pZCBOQVBJIHJlc2NoZWR1bGluZy4gKi8KQEAgLTE1NzcsNyArMTU4MCw3IEBACiB7CiAJbmFwaV9lbmFibGUoJnVnZXRoLT5uYXBpKTsKIAllbmFibGVfaXJxKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmlycSk7Ci0JbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHVnZXRoLT5uZGV2KTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKHVnZXRoLT5uZGV2KTsKIH0KIAogLyogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGNvbnRyb2xsZXIgbWlnaHQgbmVlZCB0byBiZSBtYWRlCkBAIC0xNjQ4LDI1ICsxNjUxLDI4IEBACiAJCQl1Z2V0aC0+b2xkc3BlZWQgPSBwaHlkZXYtPnNwZWVkOwogCQl9CiAKLQkJLyoKLQkJICogVG8gY2hhbmdlIHRoZSBNQUMgY29uZmlndXJhdGlvbiB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlCi0JCSAqIGNvbnRyb2xsZXIuIFRvIGRvIHNvLCB3ZSBoYXZlIHRvIGVpdGhlciBncmFiIHVnZXRoLT5sb2NrLAotCQkgKiB3aGljaCBpcyBhIGJhZCBpZGVhIHNpbmNlICdncmFjZWZ1bCBzdG9wJyBjb21tYW5kcyBtaWdodAotCQkgKiB0YWtlIHF1aXRlIGEgd2hpbGUsIG9yIHdlIGNhbiBxdWllc2NlIGRyaXZlcidzIGFjdGl2aXR5LgotCQkgKi8KLQkJdWdldGhfcXVpZXNjZSh1Z2V0aCk7Ci0JCXVnZXRoX2Rpc2FibGUodWdldGgsIENPTU1fRElSX1JYX0FORF9UWCk7Ci0KLQkJb3V0X2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIHRlbXB2YWwpOwotCQlvdXRfYmUzMigmdWZfcmVncy0+dXBzbXIsIHVwc21yKTsKLQotCQl1Z2V0aF9lbmFibGUodWdldGgsIENPTU1fRElSX1JYX0FORF9UWCk7Ci0JCXVnZXRoX2FjdGl2YXRlKHVnZXRoKTsKLQogCQlpZiAoIXVnZXRoLT5vbGRsaW5rKSB7CiAJCQluZXdfc3RhdGUgPSAxOwogCQkJdWdldGgtPm9sZGxpbmsgPSAxOwogCQl9CisKKwkJaWYgKG5ld19zdGF0ZSkgeworCQkJLyoKKwkJCSAqIFRvIGNoYW5nZSB0aGUgTUFDIGNvbmZpZ3VyYXRpb24gd2UgbmVlZCB0byBkaXNhYmxlCisJCQkgKiB0aGUgY29udHJvbGxlci4gVG8gZG8gc28sIHdlIGhhdmUgdG8gZWl0aGVyIGdyYWIKKwkJCSAqIHVnZXRoLT5sb2NrLCB3aGljaCBpcyBhIGJhZCBpZGVhIHNpbmNlICdncmFjZWZ1bAorCQkJICogc3RvcCcgY29tbWFuZHMgbWlnaHQgdGFrZSBxdWl0ZSBhIHdoaWxlLCBvciB3ZSBjYW4KKwkJCSAqIHF1aWVzY2UgZHJpdmVyJ3MgYWN0aXZpdHkuCisJCQkgKi8KKwkJCXVnZXRoX3F1aWVzY2UodWdldGgpOworCQkJdWdldGhfZGlzYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKworCQkJb3V0X2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIHRlbXB2YWwpOworCQkJb3V0X2JlMzIoJnVmX3JlZ3MtPnVwc21yLCB1cHNtcik7CisKKwkJCXVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKwkJCXVnZXRoX2FjdGl2YXRlKHVnZXRoKTsKKwkJfQogCX0gZWxzZSBpZiAodWdldGgtPm9sZGxpbmspIHsKIAkJCW5ld19zdGF0ZSA9IDE7CiAJCQl1Z2V0aC0+b2xkbGluayA9IDA7CkBAIC0zMjczLDcgKzMyNzksNyBAQAogCQkvKiBIYW5kbGUgdGhlIHRyYW5zbWl0dGVkIGJ1ZmZlciBhbmQgcmVsZWFzZSAqLwogCQkvKiB0aGUgQkQgdG8gYmUgdXNlZCB3aXRoIHRoZSBjdXJyZW50IGZyYW1lICAqLwogCi0JCWlmICgoYmQgPT0gdWdldGgtPnR4QmRbdHhRXSkgJiYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSA9PSAwKSkKKwkJaWYgKGJkID09IHVnZXRoLT50eEJkW3R4UV0pIC8qIHF1ZXVlIGVtcHR5PyAqLwogCQkJYnJlYWs7CiAKIAkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0zNjAxLDYgKzM2MDcsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcmV0dXJuIDA7CiAKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOwogCW5hcGlfZGlzYWJsZSgmdWdldGgtPm5hcGkpOwogCiAJLyoKQEAgLTM2NTksNyArMzY2Niw3IEBACiAJcGh5X3N0YXJ0KHVnZXRoLT5waHlkZXYpOwogCiAJbmFwaV9lbmFibGUoJnVnZXRoLT5uYXBpKTsKLQluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCBhMDA3ZTJhLi5lZjFmYmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTgzOCwxMyArODM4LDEzIEBACiAJCQkJCQkJICAgdXNpbmcgdGhlIG1heGltdW0gaXMKIAkJCQkJCQkgICBlYXNpZXIgKi8KICNkZWZpbmUgVUNDX0dFVEhfU0VORF9RVUVVRV9RVUVVRV9ERVNDUklQVE9SX0FMSUdOTUVOVAkzMgotI2RlZmluZSBVQ0NfR0VUSF9TQ0hFRFVMRVJfQUxJR05NRU5UCQk0CS8qIFRoaXMgaXMgYSBndWVzcyAqLworI2RlZmluZSBVQ0NfR0VUSF9TQ0hFRFVMRVJfQUxJR05NRU5UCQk4CS8qIFRoaXMgaXMgYSBndWVzcyAqLwogI2RlZmluZSBVQ0NfR0VUSF9UWF9TVEFUSVNUSUNTX0FMSUdOTUVOVAk0CS8qIFRoaXMgaXMgYSBndWVzcyAqLwogI2RlZmluZSBVQ0NfR0VUSF9SWF9TVEFUSVNUSUNTX0FMSUdOTUVOVAk0CS8qIFRoaXMgaXMgYSBndWVzcyAqLwogI2RlZmluZSBVQ0NfR0VUSF9SWF9JTlRFUlJVUFRfQ09BTEVTQ0lOR19BTElHTk1FTlQJNjQKICNkZWZpbmUgVUNDX0dFVEhfUlhfQkRfUVVFVUVTX0FMSUdOTUVOVAkJOAkvKiBUaGlzIGlzIGEgZ3Vlc3MgKi8KICNkZWZpbmUgVUNDX0dFVEhfUlhfUFJFRkVUQ0hFRF9CRFNfQUxJR05NRU5UCTEyOAkvKiBUaGlzIGlzIGEgZ3Vlc3MgKi8KLSNkZWZpbmUgVUNDX0dFVEhfUlhfRVhURU5ERURfRklMVEVSSU5HX0dMT0JBTF9QQVJBTUVURVJTX0FMSUdOTUVOVCA0CS8qIFRoaXMKKyNkZWZpbmUgVUNDX0dFVEhfUlhfRVhURU5ERURfRklMVEVSSU5HX0dMT0JBTF9QQVJBTUVURVJTX0FMSUdOTUVOVCA4CS8qIFRoaXMKIAkJCQkJCQkJCSAgIGlzIGEKIAkJCQkJCQkJCSAgIGd1ZXNzCiAJCQkJCQkJCQkgKi8KQEAgLTg5OSwxNiArODk5LDE3IEBACiAjZGVmaW5lIFVDQ19HRVRIX1VURlNfSU5JVCAgICAgICAgICAgICAgICAgICAgICA1MTIJLyogVHggdmlydHVhbCBGSUZPIHNpemUKIAkJCQkJCQkgKi8KICNkZWZpbmUgVUNDX0dFVEhfVVRGRVRfSU5JVCAgICAgICAgICAgICAgICAgICAgIDI1NgkvKiAxLzIgdXRmcyAqLwotI2RlZmluZSBVQ0NfR0VUSF9VVEZUVF9JTklUICAgICAgICAgICAgICAgICAgICAgMTI4CisjZGVmaW5lIFVDQ19HRVRIX1VURlRUX0lOSVQgICAgICAgICAgICAgICAgICAgICA1MTIKIC8qIEdpZ2FiaXQgRXRoZXJuZXQgKDEwMDAgTWJwcykgKi8KICNkZWZpbmUgVUNDX0dFVEhfVVJGU19HSUdBX0lOSVQgICAgICAgICAgICAgICAgIDQwOTYvKjIwNDgqLwkvKiBSeCB2aXJ0dWFsCiAJCQkJCQkJCSAgIEZJRk8gc2l6ZSAqLwogI2RlZmluZSBVQ0NfR0VUSF9VUkZFVF9HSUdBX0lOSVQgICAgICAgICAgICAgICAgMjA0OC8qMTAyNCovCS8qIDEvMiB1cmZzICovCiAjZGVmaW5lIFVDQ19HRVRIX1VSRlNFVF9HSUdBX0lOSVQgICAgICAgICAgICAgICAzMDcyLyoxNTM2Ki8JLyogMy80IHVyZnMgKi8KLSNkZWZpbmUgVUNDX0dFVEhfVVRGU19HSUdBX0lOSVQgICAgICAgICAgICAgICAgIDgxOTIvKjIwNDgqLwkvKiBUeCB2aXJ0dWFsCisjZGVmaW5lIFVDQ19HRVRIX1VURlNfR0lHQV9JTklUICAgICAgICAgICAgICAgICA0MDk2LyoyMDQ4Ki8JLyogVHggdmlydHVhbAogCQkJCQkJCQkgICBGSUZPIHNpemUgKi8KLSNkZWZpbmUgVUNDX0dFVEhfVVRGRVRfR0lHQV9JTklUICAgICAgICAgICAgICAgIDQwOTYvKjEwMjQqLwkvKiAxLzIgdXRmcyAqLwotI2RlZmluZSBVQ0NfR0VUSF9VVEZUVF9HSUdBX0lOSVQgICAgICAgICAgICAgICAgMHg0MDAvKjB4NDAqLwkvKiAqLworI2RlZmluZSBVQ0NfR0VUSF9VVEZFVF9HSUdBX0lOSVQgICAgICAgICAgICAgICAgMjA0OC8qMTAyNCovCS8qIDEvMiB1dGZzICovCisjZGVmaW5lIFVDQ19HRVRIX1VURlRUX0dJR0FfSU5JVCAgICAgICAgICAgICAgICA0MDk2LyoweDQwKi8JLyogVHggdmlydHVhbAorCQkJCQkJCQkgICBGSUZPIHNpemUgKi8KIAogI2RlZmluZSBVQ0NfR0VUSF9SRU1PREVSX0lOSVQgICAgICAgICAgICAgICAgICAgMAkvKiBiaXRzIHRoYXQgbXVzdCBiZQogCQkJCQkJCSAgIHNldCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGY3OGYwOTAuLjY4OTVmMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTI4Niw2ICsyODYsNyBAQAogCXU4IHVzYl9nb25lOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBhc3luY19nZXRfaW50ZjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfcHV0X2ludGY7CisJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X2RldmljZTsKIAogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2I7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKQEAgLTMzMiw3ICszMzMsOCBAQAogLyogSGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIGludCBoc29fbXV4X3N1Ym1pdF9pbnRyX3VyYihzdHJ1Y3QgaHNvX3NoYXJlZF9pbnQgKm11eF9pbnQsCiAJCQkJICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgZ2ZwX3QgZ2ZwKTsKLXN0YXRpYyB2b2lkIGxvZ191c2Jfc3RhdHVzKGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV91c2JfZXJyb3IoaW50IHN0YXR1cywgY29uc3QgY2hhciAqZnVuY3Rpb24sCisJCQkgICAgIHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmhzb19nZXRfZXAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkJCQkgIGludCB0eXBlLCBpbnQgZGlyKTsKIHN0YXRpYyBpbnQgaHNvX2dldF9tdXhfcG9ydHMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgKnBvcnRzKTsKQEAgLTM1MCw2ICszNTIsNyBAQAogc3RhdGljIGludCBoc29fcHV0X2FjdGl2aXR5KHN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2KTsKIHN0YXRpYyBpbnQgaHNvX2dldF9hY3Rpdml0eShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2Rldik7CiBzdGF0aWMgdm9pZCB0aW9jbWdldF9pbnRyX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCByZXNldF9kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEhlbHBpbmcgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ2MSwxMCArNDY0LDE3IEBACiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDc1MDEpfSwJCS8qIEdUTSAzODIgKi8KIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzYwMSl9LAkJLyogR0U0MHggKi8KIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzcwMSl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3NzA2KX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDc4MDEpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzkwMSl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3QTAxKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDdBMDUpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4ODIwMCl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg4MjAxKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDgzMDApfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ODMwMil9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg4MzA0KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDg0MDApfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDAzNSl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDU1KX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQxNTUpfSwKQEAgLTQ3Myw2ICs0ODMsOCBAQAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMTU3KX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQyNTcpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDM1Nyl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDU4KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGMxMDApfSwKIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoc29faWRzKTsKQEAgLTY1NSw4ICs2NjcsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcmlhbF90YWJsZV9sb2NrLCBmbGFncyk7CiB9CiAKLS8qIGxvZyBhIG1lYW5pbmdmdWwgZXhwbGFuYXRpb24gb2YgYW4gVVNCIHN0YXR1cyAqLwotc3RhdGljIHZvaWQgbG9nX3VzYl9zdGF0dXMoaW50IHN0YXR1cywgY29uc3QgY2hhciAqZnVuY3Rpb24pCitzdGF0aWMgdm9pZCBoYW5kbGVfdXNiX2Vycm9yKGludCBzdGF0dXMsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorCQkJICAgICBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKIHsKIAljaGFyICpleHBsYW5hdGlvbjsKIApAQCAtNjg1LDEwICs2OTcsMjAgQEAKIAljYXNlIC1FTVNHU0laRToKIAkJZXhwbGFuYXRpb24gPSAiaW50ZXJuYWwgZXJyb3IiOwogCQlicmVhazsKKwljYXNlIC1FSUxTRVE6CisJY2FzZSAtRVBST1RPOgorCWNhc2UgLUVUSU1FOgorCWNhc2UgLUVUSU1FRE9VVDoKKwkJZXhwbGFuYXRpb24gPSAicHJvdG9jb2wgZXJyb3IiOworCQlpZiAoaHNvX2RldikKKwkJCXNjaGVkdWxlX3dvcmsoJmhzb19kZXYtPnJlc2V0X2RldmljZSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWV4cGxhbmF0aW9uID0gInVua25vd24gc3RhdHVzIjsKIAkJYnJlYWs7CiAJfQorCisJLyogbG9nIGEgbWVhbmluZ2Z1bCBleHBsYW5hdGlvbiBvZiBhbiBVU0Igc3RhdHVzICovCiAJRDEoIiVzOiByZWNlaXZlZCBVU0Igc3RhdHVzIC0gJXMgKCVkKSIsIGZ1bmN0aW9uLCBleHBsYW5hdGlvbiwgc3RhdHVzKTsKIH0KIApAQCAtNzYyLDcgKzc4NCw3IEBACiAJLyogbG9nIHN0YXR1cywgYnV0IGRvbid0IGFjdCBvbiBpdCwgd2UgZG9uJ3QgbmVlZCB0byByZXN1Ym1pdCBhbnl0aGluZwogCSAqIGFueWhvdyAqLwogCWlmIChzdGF0dXMpCi0JCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQloYW5kbGVfdXNiX2Vycm9yKHN0YXR1cywgX19mdW5jX18sIG9kZXYtPnBhcmVudCk7CiAKIAloc29fcHV0X2FjdGl2aXR5KG9kZXYtPnBhcmVudCk7CiAKQEAgLTgwNiw3ICs4MjgsNyBAQAogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKG9kZXYtPm11eF9idWxrX3R4X3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfd2Fybigmb2Rldi0+cGFyZW50LT5pbnRlcmZhY2UtPmRldiwKLQkJCSJmYWlsZWQgbXV4X2J1bGtfdHhfdXJiICVkIiwgcmVzdWx0KTsKKwkJCSJmYWlsZWQgbXV4X2J1bGtfdHhfdXJiICVkXG4iLCByZXN1bHQpOwogCQluZXQtPnN0YXRzLnR4X2Vycm9ycysrOwogCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOwogCX0gZWxzZSB7CkBAIC05OTgsNyArMTAyMCw3IEBACiAKIAkvKiBpcyBhbCBvaz8gIChGaWxpcDogV2hvJ3MgQWwgPykgKi8KIAlpZiAoc3RhdHVzKSB7Ci0JCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQloYW5kbGVfdXNiX2Vycm9yKHN0YXR1cywgX19mdW5jX18sIG9kZXYtPnBhcmVudCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMTksNyArMTA0MSw4IEBACiAJaWYgKG9kZXYtPnBhcmVudC0+cG9ydF9zcGVjICYgSFNPX0lORk9fQ1JDX0JVRykgewogCQl1MzIgcmVzdDsKIAkJdTggY3JjX2NoZWNrWzRdID0geyAweERFLCAweEFELCAweEJFLCAweEVGIH07Ci0JCXJlc3QgPSB1cmItPmFjdHVhbF9sZW5ndGggJSBvZGV2LT5pbl9lbmRwLT53TWF4UGFja2V0U2l6ZTsKKwkJcmVzdCA9IHVyYi0+YWN0dWFsX2xlbmd0aCAlCisJCQlsZTE2X3RvX2NwdShvZGV2LT5pbl9lbmRwLT53TWF4UGFja2V0U2l6ZSk7CiAJCWlmICgoKHJlc3QgPT0gNSkgfHwgKHJlc3QgPT0gNikpICYmCiAJCSAgICAhbWVtY21wKCgodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpICsKIAkJCSAgICB1cmItPmFjdHVhbF9sZW5ndGggLSA0LCBjcmNfY2hlY2ssIDQpKSB7CkBAIC0xMDUzLDcgKzEwNzYsNyBAQAogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKIAkJZGV2X3dhcm4oJm9kZXYtPnBhcmVudC0+aW50ZXJmYWNlLT5kZXYsCi0JCQkgIiVzIGZhaWxlZCBzdWJtaXQgbXV4X2J1bGtfcnhfdXJiICVkIiwgX19mdW5jX18sCisJCQkgIiVzIGZhaWxlZCBzdWJtaXQgbXV4X2J1bGtfcnhfdXJiICVkXG4iLCBfX2Z1bmNfXywKIAkJCSByZXN1bHQpOwogfQogCkBAIC0xMjA3LDcgKzEyMzAsNyBAQAogCQlEMSgic2VyaWFsID09IE5VTEwiKTsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoc3RhdHVzKSB7Ci0JCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQloYW5kbGVfdXNiX2Vycm9yKHN0YXR1cywgX19mdW5jX18sIHNlcmlhbC0+cGFyZW50KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIyNSw3ICsxMjQ4LDcgQEAKIAkJCXU4IGNyY19jaGVja1s0XSA9IHsgMHhERSwgMHhBRCwgMHhCRSwgMHhFRiB9OwogCQkJcmVzdCA9CiAJCQkgICAgdXJiLT5hY3R1YWxfbGVuZ3RoICUKLQkJCSAgICBzZXJpYWwtPmluX2VuZHAtPndNYXhQYWNrZXRTaXplOworCQkJICAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+aW5fZW5kcC0+d01heFBhY2tldFNpemUpOwogCQkJaWYgKCgocmVzdCA9PSA1KSB8fCAocmVzdCA9PSA2KSkgJiYKIAkJCSAgICAhbWVtY21wKCgodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpICsKIAkJCQkgICAgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gNCwgY3JjX2NoZWNrLCA0KSkgewpAQCAtMTUxMyw3ICsxNTM2LDcgQEAKIAlpZiAoIXNlcmlhbCkKIAkJcmV0dXJuOwogCWlmIChzdGF0dXMpIHsKLQkJbG9nX3VzYl9zdGF0dXMoc3RhdHVzLCBfX2Z1bmNfXyk7CisJCWhhbmRsZV91c2JfZXJyb3Ioc3RhdHVzLCBfX2Z1bmNfXywgc2VyaWFsLT5wYXJlbnQpOwogCQlyZXR1cm47CiAJfQogCXRpb2NtZ2V0ID0gc2VyaWFsLT50aW9jbWdldDsKQEAgLTE3MDAsNiArMTcyMywxMCBAQAogCQlEMSgibm8gdHR5IHN0cnVjdHVyZXMiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJaWYgKChzZXJpYWwtPnBhcmVudC0+cG9ydF9zcGVjICYgSFNPX1BPUlRfTUFTSykgIT0gSFNPX1BPUlRfTU9ERU0pCisJCXJldHVybiAtRUlOVkFMOworCiAJaWZfbnVtID0gc2VyaWFsLT5wYXJlbnQtPmludGVyZmFjZS0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlhbC0+c2VyaWFsX2xvY2ssIGZsYWdzKTsKQEAgLTE4MzgsNyArMTg2NSw3IEBACiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoY3RybF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpIHsKIAkJZGV2X2VycigmY3RybF91cmItPmRldi0+ZGV2LAotCQkJIiVzIGZhaWxlZCBzdWJtaXQgY3RybF91cmIgJWQgdHlwZSAlZCIsIF9fZnVuY19fLAorCQkJIiVzIGZhaWxlZCBzdWJtaXQgY3RybF91cmIgJWQgdHlwZSAlZFxuIiwgX19mdW5jX18sCiAJCQlyZXN1bHQsIHR5cGUpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KQEAgLTE4ODgsNyArMTkxNSw3IEBACiAKIAkvKiBzdGF0dXMgY2hlY2sgKi8KIAlpZiAoc3RhdHVzKSB7Ci0JCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQloYW5kbGVfdXNiX2Vycm9yKHN0YXR1cywgX19mdW5jX18sIE5VTEwpOwogCQlyZXR1cm47CiAJfQogCUQ0KCJcbi0tLSBHb3QgaW50ciBjYWxsYmFjayAweCUwMlggLS0tIiwgc3RhdHVzKTsKQEAgLTE5MDUsMTggKzE5MzIsMTggQEAKIAkJCWlmIChzZXJpYWwgIT0gTlVMTCkgewogCQkJCUQxKCJQZW5kaW5nIHJlYWQgaW50ZXJydXB0IG9uIHBvcnQgJWRcbiIsIGkpOwogCQkJCXNwaW5fbG9jaygmc2VyaWFsLT5zZXJpYWxfbG9jayk7Ci0JCQkJaWYgKHNlcmlhbC0+cnhfc3RhdGUgPT0gUlhfSURMRSkgeworCQkJCWlmIChzZXJpYWwtPnJ4X3N0YXRlID09IFJYX0lETEUgJiYKKwkJCQkJc2VyaWFsLT5vcGVuX2NvdW50ID4gMCkgewogCQkJCQkvKiBTZXR1cCBhbmQgc2VuZCBhIGN0cmwgcmVxIHJlYWQgb24KIAkJCQkJICogcG9ydCBpICovCi0JCQkJaWYgKCFzZXJpYWwtPnJ4X3VyYl9maWxsZWRbMF0pIHsKKwkJCQkJaWYgKCFzZXJpYWwtPnJ4X3VyYl9maWxsZWRbMF0pIHsKIAkJCQkJCXNlcmlhbC0+cnhfc3RhdGUgPSBSWF9TRU5UOwogCQkJCQkJaHNvX211eF9zZXJpYWxfcmVhZChzZXJpYWwpOwogCQkJCQl9IGVsc2UKIAkJCQkJCXNlcmlhbC0+cnhfc3RhdGUgPSBSWF9QRU5ESU5HOwotCiAJCQkJfSBlbHNlIHsKLQkJCQkJRDEoIkFscmVhZHkgcGVuZGluZyBhIHJlYWQgb24gIgotCQkJCQkgICAicG9ydCAlZFxuIiwgaSk7CisJCQkJCUQxKCJBbHJlYWR5IGEgcmVhZCBwZW5kaW5nIG9uICIKKwkJCQkJICAgInBvcnQgJWQgb3IgcG9ydCBub3Qgb3BlblxuIiwgaSk7CiAJCQkJfQogCQkJCXNwaW5fdW5sb2NrKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKIAkJCX0KQEAgLTE5NTgsNyArMTk4NSw3IEBACiAJdHR5ID0gdHR5X2tyZWZfZ2V0KHNlcmlhbC0+dHR5KTsKIAlzcGluX3VubG9jaygmc2VyaWFsLT5zZXJpYWxfbG9jayk7CiAJaWYgKHN0YXR1cykgewotCQlsb2dfdXNiX3N0YXR1cyhzdGF0dXMsIF9fZnVuY19fKTsKKwkJaGFuZGxlX3VzYl9lcnJvcihzdGF0dXMsIF9fZnVuY19fLCBzZXJpYWwtPnBhcmVudCk7CiAJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQlyZXR1cm47CiAJfQpAQCAtMjAxNCw3ICsyMDQxLDcgQEAKIAl0dHkgPSB0dHlfa3JlZl9nZXQoc2VyaWFsLT50dHkpOwogCXNwaW5fdW5sb2NrKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWxvZ191c2Jfc3RhdHVzKHN0YXR1cywgX19mdW5jX18pOworCQloYW5kbGVfdXNiX2Vycm9yKHN0YXR1cywgX19mdW5jX18sIHNlcmlhbC0+cGFyZW50KTsKIAkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCXJldHVybjsKIAl9CkBAIC0yMzU4LDEyICsyMzg1LDEyIEBACiAJc2VyaWFsLT50eF9kYXRhX2xlbmd0aCA9IHR4X3NpemU7CiAJc2VyaWFsLT50eF9kYXRhID0ga3phbGxvYyhzZXJpYWwtPnR4X2RhdGFfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNlcmlhbC0+dHhfZGF0YSkgewotCQlkZXZfZXJyKGRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBleGl0OwogCX0KIAlzZXJpYWwtPnR4X2J1ZmZlciA9IGt6YWxsb2Moc2VyaWFsLT50eF9kYXRhX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZXJpYWwtPnR4X2J1ZmZlcikgewotCQlkZXZfZXJyKGRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMjM5MSw2ICsyNDE4LDcgQEAKIAogCUlOSVRfV09SSygmaHNvX2Rldi0+YXN5bmNfZ2V0X2ludGYsIGFzeW5jX2dldF9pbnRmKTsKIAlJTklUX1dPUksoJmhzb19kZXYtPmFzeW5jX3B1dF9pbnRmLCBhc3luY19wdXRfaW50Zik7CisJSU5JVF9XT1JLKCZoc29fZGV2LT5yZXNldF9kZXZpY2UsIHJlc2V0X2RldmljZSk7CiAKIAlyZXR1cm4gaHNvX2RldjsKIH0KQEAgLTI4MzEsMTMgKzI4NTksMTQgQEAKIAogCW11eC0+c2hhcmVkX2ludHJfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW11eC0+c2hhcmVkX2ludHJfdXJiKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGludHIgdXJiPyIpOworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnRyIHVyYj9cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQotCW11eC0+c2hhcmVkX2ludHJfYnVmID0ga3phbGxvYyhtdXgtPmludHJfZW5kcC0+d01heFBhY2tldFNpemUsCi0JCQkJICAgICAgIEdGUF9LRVJORUwpOworCW11eC0+c2hhcmVkX2ludHJfYnVmID0KKwkJa3phbGxvYyhsZTE2X3RvX2NwdShtdXgtPmludHJfZW5kcC0+d01heFBhY2tldFNpemUpLAorCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdXgtPnNoYXJlZF9pbnRyX2J1ZikgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnRyIGJ1Zj8iKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgaW50ciBidWY/XG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMzEzMiw2ICszMTYxLDI2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQgcmVzZXRfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaHNvX2RldmljZSwgcmVzZXRfZGV2aWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiID0gaHNvX2Rldi0+dXNiOworCWludCByZXN1bHQ7CisKKwlpZiAoaHNvX2Rldi0+dXNiX2dvbmUpIHsKKwkJRDEoIk5vIHJlc2V0IGR1cmluZyBkaXNjb25uZWN0XG4iKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVzYiwgaHNvX2Rldi0+aW50ZXJmYWNlKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlEMSgidW5hYmxlIHRvIGxvY2sgZGV2aWNlIGZvciByZXNldDogJWRcbiIsIHJlc3VsdCk7CisJCWVsc2UgeworCQkJdXNiX3Jlc2V0X2RldmljZSh1c2IpOworCQkJdXNiX3VubG9ja19kZXZpY2UodXNiKTsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgaHNvX3NlcmlhbF9yZWZfZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKQogewogCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2ID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGhzb19kZXZpY2UsIHJlZik7CkBAIC0zMjMyLDEzICszMjgxLDEzIEBACiAJCQkgdXNiX3JjdmludHBpcGUodXNiLAogCQkJCXNoYXJlZF9pbnQtPmludHJfZW5kcC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4N0YpLAogCQkJIHNoYXJlZF9pbnQtPnNoYXJlZF9pbnRyX2J1ZiwKLQkJCSBzaGFyZWRfaW50LT5pbnRyX2VuZHAtPndNYXhQYWNrZXRTaXplLAorCQkJIDEsCiAJCQkgaW50cl9jYWxsYmFjaywgc2hhcmVkX2ludCwKIAkJCSBzaGFyZWRfaW50LT5pbnRyX2VuZHAtPmJJbnRlcnZhbCk7CiAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihzaGFyZWRfaW50LT5zaGFyZWRfaW50cl91cmIsIGdmcCk7CiAJaWYgKHJlc3VsdCkKLQkJZGV2X3dhcm4oJnVzYi0+ZGV2LCAiJXMgZmFpbGVkIG11eF9pbnRyX3VyYiAlZCIsIF9fZnVuY19fLAorCQlkZXZfd2FybigmdXNiLT5kZXYsICIlcyBmYWlsZWQgbXV4X2ludHJfdXJiICVkXG4iLCBfX2Z1bmNfXywKIAkJCXJlc3VsdCk7CiAKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKaW5kZXggZjE0ZDIyNS4uZmQxOWRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYworKysgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJZ2V0X3JlZ2lzdGVycyhkZXYsIFBIWUNOVCwgMSwgZGF0YSk7CiAJfSB3aGlsZSAoKGRhdGFbMF0gJiBQSFlfR08pICYmIChpKysgPCBNSUlfVElNRU9VVCkpOwogCi0JaWYgKGkgPCBNSUlfVElNRU9VVCkgeworCWlmIChpIDw9IE1JSV9USU1FT1VUKSB7CiAJCWdldF9yZWdpc3RlcnMoZGV2LCBQSFlEQVQsIDIsIGRhdGEpOwogCQkqcmVnID0gZGF0YVswXSB8IChkYXRhWzFdIDw8IDgpOwogCQlyZXR1cm4gMDsKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQlnZXRfcmVnaXN0ZXJzKGRldiwgUEhZQ05ULCAxLCBkYXRhKTsKIAl9IHdoaWxlICgoZGF0YVswXSAmIFBIWV9HTykgJiYgKGkrKyA8IE1JSV9USU1FT1VUKSk7CiAKLQlpZiAoaSA8IE1JSV9USU1FT1VUKQorCWlmIChpIDw9IE1JSV9USU1FT1VUKQogCQlyZXR1cm4gMDsKIAllbHNlCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCA1OTNlMDFmLi42MTFiODA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkvKiBQcm9jZXNzb3IgdHlwZSBmb3IgY2FjaGUgYWxpZ25tZW50LiAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTM4OSw2ICszOTAsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCiAJLyogRnJlcXVlbnRseSB1c2VkIHZhbHVlczoga2VlcCBzb21lIGFkamFjZW50IGZvciBjYWNoZSBlZmZlY3QuICovCiAJdTMyIHF1aXJrczsKQEAgLTQwNyw2ICs0MDksNyBAQAogc3RhdGljIGludCAgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbHVlKTsKIHN0YXRpYyBpbnQgIHJoaW5lX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCByaGluZV9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCByaGluZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIG5ldGRldl90eF90IHJoaW5lX3N0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTc3NSw2ICs3NzgsOCBAQAogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJwLT5sb2NrKTsKKwlJTklUX1dPUksoJnJwLT5yZXNldF90YXNrLCByaGluZV9yZXNldF90YXNrKTsKKwogCXJwLT5taWlfaWYuZGV2ID0gZGV2OwogCXJwLT5taWlfaWYubWRpb19yZWFkID0gbWRpb19yZWFkOwogCXJwLT5taWlfaWYubWRpb193cml0ZSA9IG1kaW9fd3JpdGU7CkBAIC0xMTc5LDIyICsxMTg0LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJoaW5lX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHJoaW5lX3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCByaGluZV9wcml2YXRlICpycCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBycC0+YmFzZTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlNC40eCwgUEhZIHN0YXR1cyAiCi0JICAgICAgICIlNC40eCwgcmVzZXR0aW5nLi4uXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpLAotCSAgICAgICBtZGlvX3JlYWQoZGV2LCBycC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNU1IpKTsKKwlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJoaW5lX3ByaXZhdGUsCisJCQkJCQlyZXNldF90YXNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcnAtPmRldjsKIAogCS8qIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHJ4IGludGVycnVwdHMgKi8KIAlkaXNhYmxlX2lycShycC0+cGRldi0+aXJxKTsKIAogCW5hcGlfZGlzYWJsZSgmcnAtPm5hcGkpOwogCi0Jc3Bpbl9sb2NrKCZycC0+bG9jayk7CisJc3Bpbl9sb2NrX2JoKCZycC0+bG9jayk7CiAKIAkvKiBjbGVhciBhbGwgZGVzY3JpcHRvcnMgKi8KIAlmcmVlX3RidWZzKGRldik7CkBAIC0xMjA2LDcgKzEyMDcsNyBAQAogCXJoaW5lX2NoaXBfcmVzZXQoZGV2KTsKIAlpbml0X3JlZ2lzdGVycyhkZXYpOwogCi0Jc3Bpbl91bmxvY2soJnJwLT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcnAtPmxvY2spOwogCWVuYWJsZV9pcnEocnAtPnBkZXYtPmlycSk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTEyMTQsNiArMTIxNSwxOSBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgcmhpbmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByaGluZV9wcml2YXRlICpycCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBycC0+YmFzZTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlNC40eCwgUEhZIHN0YXR1cyAiCisJICAgICAgICIlNC40eCwgcmVzZXR0aW5nLi4uXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpLAorCSAgICAgICBtZGlvX3JlYWQoZGV2LCBycC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNU1IpKTsKKworCXNjaGVkdWxlX3dvcmsoJnJwLT5yZXNldF90YXNrKTsKK30KKwogc3RhdGljIG5ldGRldl90eF90IHJoaW5lX3N0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTgzMCwxMCArMTg0NCwxMSBAQAogCXN0cnVjdCByaGluZV9wcml2YXRlICpycCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBycC0+YmFzZTsKIAotCXNwaW5fbG9ja19pcnEoJnJwLT5sb2NrKTsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAluYXBpX2Rpc2FibGUoJnJwLT5uYXBpKTsKKwljYW5jZWxfd29ya19zeW5jKCZycC0+cmVzZXRfdGFzayk7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmcnAtPmxvY2spOwogCiAJaWYgKGRlYnVnID4gMSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwppbmRleCA0Y2ViNDQxLi5jOTNmNThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYwpAQCAtMjIzNyw4ICsyMjM3LDYgQEAKIAkvKiBFbnN1cmUgY2hpcCBpcyBydW5uaW5nICovCiAJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDApOwogCi0JdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOwotCiAJdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9DT0xEKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKHZwdHItPnBkZXYtPmlycSwgdmVsb2NpdHlfaW50ciwgSVJRRl9TSEFSRUQsCkBAIC0yMjUwLDYgKzIyNDgsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwl2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3ModnB0cik7CisKIAltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAluYXBpX2VuYWJsZSgmdnB0ci0+bmFwaSk7CkBAIC0yMzM5LDEwICsyMzM5LDEwIEBACiAKIAkJZGV2LT5tdHUgPSBuZXdfbXR1OwogCi0JCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKLQogCQl2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycyh2cHRyLCBWRUxPQ0lUWV9JTklUX0NPTEQpOwogCisJCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKKwogCQltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCmluZGV4IGYxYzRiMmEuLmI5Njg1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCByeF9wcml2LT5za2JfZGF0YSwKIAkJCQlyeF9wcml2LT5kYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQlpZiAoZG1hX2FkZHIgPT0gMCkgeworCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IocmluZy0+cGRldiwgZG1hX2FkZHIpKSkgewogCQlyaW5nLT5zdGF0cy5wY2lfbWFwX2ZhaWwrKzsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNDA4NywyMSArNDA4NywyMSBAQAogCQlnb3RvIF9leGl0MDsKIAl9CiAKLQlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkgeworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkgewogCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAogCQkJIiVzIDogdXNpbmcgNjRiaXQgRE1BIiwgX19mdW5jX18pOwogCiAJCWhpZ2hfZG1hID0gMTsKIAogCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCi0JCQkJCQkweGZmZmZmZmZmZmZmZmZmZmZVTEwpKSB7CisJCQkJCQlETUFfQklUX01BU0soNjQpKSkgewogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJCSIlcyA6IHVuYWJsZSB0byBvYnRhaW4gNjRiaXQgRE1BIGZvciAiCiAJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnMiLCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBfZXhpdDE7CiAJCX0KLQl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZVTCkpIHsKKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CiAJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCiAJCQkiJXMgOiB1c2luZyAzMmJpdCBETUEiLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IGE0YzA4NmYuLmU2M2I3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtMTkwMywxNyArMTkwMyw2IEBACiAJCXJ4cy0+bm9pc2UgPSBzYy0+YWgtPmFoX25vaXNlX2Zsb29yOwogCQlyeHMtPnNpZ25hbCA9IHJ4cy0+bm9pc2UgKyBycy5yc19yc3NpOwogCi0JCS8qIEFuIHJzc2kgb2YgMzUgaW5kaWNhdGVzIHlvdSBzaG91bGQgYmUgYWJsZSB1c2UKLQkJICogNTQgTWJwcyByZWxpYWJseS4gQSBtb3JlIGVsYWJvcmF0ZSBzY2hlbWUgY2FuIGJlIHVzZWQKLQkJICogaGVyZSBidXQgaXQgcmVxdWlyZXMgYSBtYXAgb2YgU05SL3Rocm91Z2hwdXQgZm9yIGVhY2gKLQkJICogcG9zc2libGUgbW9kZSB1c2VkICovCi0JCXJ4cy0+cXVhbCA9IHJzLnJzX3Jzc2kgKiAxMDAgLyAzNTsKLQotCQkvKiByc3NpIGNhbiBiZSBtb3JlIHRoYW4gMzUgdGhvdWdoLCBhbnl0aGluZyBhYm92ZSB0aGF0Ci0JCSAqIHNob3VsZCBiZSBjb25zaWRlcmVkIGF0IDEwMCUgKi8KLQkJaWYgKHJ4cy0+cXVhbCA+IDEwMCkKLQkJCXJ4cy0+cXVhbCA9IDEwMDsKLQogCQlyeHMtPmFudGVubmEgPSBycy5yc19hbnRlbm5hOwogCQlyeHMtPnJhdGVfaWR4ID0gYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzYywgcnMucnNfcmF0ZSk7CiAJCXJ4cy0+ZmxhZyB8PSBhdGg1a19yeF9kZWNyeXB0ZWQoc2MsIGRzLCBza2IsICZycyk7CkBAIC0yMzgxLDYgKzIzNzAsOSBAQAogCSAqLwogCWF0aDVrX3N0b3BfbG9ja2VkKHNjKTsKIAorCS8qIFNldCBQSFkgY2FsaWJyYXRpb24gaW50ZXJ2YWwgKi8KKwlhaC0+YWhfY2FsX2ludHZhbCA9IGF0aDVrX2NhbGludGVydmFsOworCiAJLyoKIAkgKiBUaGUgYmFzaWMgaW50ZXJmYWNlIHRvIHNldHRpbmcgdGhlIGhhcmR3YXJlIGluIGEgZ29vZAogCSAqIHN0YXRlIGlzIGBgcmVzZXQnJy4gIE9uIHJldHVybiB0aGUgaGFyZHdhcmUgaXMga25vd24gdG8KQEAgLTI0MDgsMTAgKzI0MDAsNiBAQAogCiAJLyogU2V0IGFjayB0byBiZSBzZW50IGF0IGxvdyBiaXQtcmF0ZXMgKi8KIAlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgZmFsc2UpOwotCi0JLyogU2V0IFBIWSBjYWxpYnJhdGlvbiBpbnRldmFsICovCi0JYWgtPmFoX2NhbF9pbnR2YWwgPSBhdGg1a19jYWxpbnRlcnZhbDsKLQogCXJldCA9IDA7CiBkb25lOgogCW1taW93YigpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCmluZGV4IDcxYjg0ZDkuLmVmYzQyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCQl3YWl0ID0gd2FpdF90aW1lOwogCQl3aGlsZSAoYXRoOWtfaHdfbnVtdHhwZW5kaW5nKGFoLCBxKSkgewogCQkJaWYgKCgtLXdhaXQpID09IDApIHsKLQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLAorCQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkJCSAgIkZhaWxlZCB0byBzdG9wIFRYIERNQSBpbiAxMDAgIgogCQkJCQkgICJtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKaW5kZXggMGM4Nzc3MS4uZTE4NTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaApAQCAtNzcsNiArNzcsOSBAQAogI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4CiAjZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKICNkZWZpbmUgQVRIOUtfVFhfQUNLRUQJCSAgIDB4MjAKKyNkZWZpbmUgQVRIOUtfVFhFUlJfTUFTSwkJCQkJCVwKKwkoQVRIOUtfVFhFUlJfWFJFVFJZIHwgQVRIOUtfVFhFUlJfRklMVCB8IEFUSDlLX1RYRVJSX0ZJRk8gfAlcCisJIEFUSDlLX1RYRVJSX1hUWE9QIHwgQVRIOUtfVFhFUlJfVElNRVJfRVhQSVJFRCkKIAogI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGM0ODc0MzQuLjk5NmViOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMTk3Myw2ICsxOTczLDkgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlpbnQgcjsKIAorCS8qIFN0b3AgQU5JICovCisJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKKwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKIAlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CkBAIC0yMDE0LDYgKzIwMTcsOSBAQAogCQl9CiAJfQogCisJLyogU3RhcnQgQU5JICovCisJYXRoX3N0YXJ0X2FuaShjb21tb24pOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTI1MDgsNiArMjUxNCw5IEBACiAJCXJldHVybjsgLyogYW5vdGhlciB3aXBoeSBzdGlsbCBpbiB1c2UgKi8KIAl9CiAKKwkvKiBFbnN1cmUgSFcgaXMgYXdha2Ugd2hlbiB3ZSB0cnkgdG8gc2h1dCBpdCBkb3duLiAqLworCWF0aDlrX3BzX3dha2V1cChzYyk7CisKIAlpZiAoYWgtPmJ0Y29leF9ody5lbmFibGVkKSB7CiAJCWF0aDlrX2h3X2J0Y29leF9kaXNhYmxlKGFoKTsKIAkJaWYgKGFoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQpAQCAtMjUyOCw2ICsyNTM3LDkgQEAKIAkvKiBkaXNhYmxlIEhBTCBhbmQgcHV0IGgvdyB0byBzbGVlcCAqLwogCWF0aDlrX2h3X2Rpc2FibGUoYWgpOwogCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMSwgMSk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKKwkvKiBGaW5hbGx5LCBwdXQgdGhlIGNoaXAgaW4gRlVMTCBTTEVFUCBtb2RlICovCiAJYXRoOWtfc2V0cG93ZXIoc2MsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CkBAIC0yNjQxLDggKzI2NTMsMTAgQEAKIAlpZiAoKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB8fAogCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CiAJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGg5a19od19zdG9wdHhkbWEoc2MtPnNjX2FoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCQlhdGhfYmVhY29uX3JldHVybihzYywgYXZwKTsKKwkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwpAQCAtMzA5MSwxNSArMzEwNSwyMSBAQAogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgorCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGhfdHhfYWdncl9zdGFydChzYywgc3RhLCB0aWQsIHNzbik7CiAJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKKwkJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkJYXRoX3R4X2FnZ3Jfc3RvcChzYywgc3RhLCB0aWQpOwogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF90eF9hZ2dyX3Jlc3VtZShzYywgc3RhLCB0aWQpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0ZBVEFMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IDUzMjFmNzMuLmY3YWY1ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgQVRIX1BDSUVfQ0FQX0xJTktfQ1RSTCwgYXNwbSk7CiB9CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX3BjaV9idXNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfcGNpX2J1c19vcHMgPSB7CiAJLnJlYWRfY2FjaGVzaXplID0gYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZSwKIAkuY2xlYW51cCA9IGF0aF9wY2lfY2xlYW51cCwKIAkuZWVwcm9tX3JlYWQgPSBhdGhfcGNpX2VlcHJvbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggMmExMWNjNS4uZmExMmI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0xMTA4LDExICsxMTA4LDExIEBACiAJaWYgKG5wZW5kKSB7CiAJCWludCByOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKIAogCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgdHJ1ZSk7CisJCXIgPSBhdGg5a19od19yZXNldChhaCwgc2MtPnNjX2FoLT5jdXJjaGFuLCBmYWxzZSk7CiAJCWlmIChyKQogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZFxuIiwKQEAgLTE0MTQsMTcgKzE0MTQsOSBAQAogCSAqIEZvciBIVCBjYXBhYmxlIHN0YXRpb25zLCB3ZSBzYXZlIHRpZG5vIGZvciBsYXRlciB1c2UuCiAJICogV2UgYWxzbyBvdmVycmlkZSBzZXFubyBzZXQgYnkgdXBwZXIgbGF5ZXIgd2l0aCB0aGUgb25lCiAJICogaW4gdHggYWdncmVnYXRpb24gc3RhdGUuCi0JICoKLQkgKiBJZiBmcmFnbWVudGF0aW9uIGlzIG9uLCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzCi0JICogbm90IG92ZXJyaWRkZW4sIHNpbmNlIGl0IGhhcyBiZWVuCi0JICogaW5jcmVtZW50ZWQgYnkgdGhlIGZyYWdtZW50YXRpb24gcm91dGluZS4KLQkgKgotCSAqIEZJWE1FOiBjaGVjayBpZiB0aGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgZXhjZWVkcwotCSAqIElFRUU4MDIxMSBtYXguCiAJICovCiAJdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0aWQtPnNlcV9uZXh0IDw8Ci0JCQlJRUVFODAyMTFfU0VRX1NFUV9TSElGVCk7CisJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHRpZC0+c2VxX25leHQgPDwgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOwogCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7CiAJSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7CiB9CkBAIC0xNjM2LDcgKzE2MjgsOCBAQAogCQliZi0+YmZfa2V5aXggPSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7CiAJfQogCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgJiYgYmZfaXNodChiZikgJiYKKwkgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpCiAJCWFzc2lnbl9hZ2dyX3RpZF9zZXFubyhza2IsIGJmKTsKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwpAQCAtMTc4MCw3ICsxNzczLDggQEAKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7Ci0JaW50IGhkcmxlbiwgcGFkc2l6ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlpbnQgcGFkcG9zLCBwYWRzaXplOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAKQEAgLTE3OTIsNyArMTc4Niw2IEBACiAJICogQlNTZXMuCiAJICovCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQogCQkJc2MtPnR4LnNlcV9ubyArPSAweDEwOwogCQloZHItPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwpAQCAtMTgwMCw5ICsxNzkzLDkgQEAKIAl9CiAKIAkvKiBBZGQgdGhlIHBhZGRpbmcgYWZ0ZXIgdGhlIGhlYWRlciBpZiB0aGlzIGlzIG5vdCBhbHJlYWR5IGRvbmUgKi8KLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCWlmIChoZHJsZW4gJiAzKSB7Ci0JCXBhZHNpemUgPSBoZHJsZW4gJSA0OworCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlwYWRzaXplID0gcGFkcG9zICYgMzsKKwlpZiAocGFkc2l6ZSAmJiBza2ItPmxlbj5wYWRwb3MpIHsKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgcGFkc2l6ZSkgewogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULAogCQkJCSAgIlRYIENBQlEgcGFkZGluZyBmYWlsZWRcbiIpOwpAQCAtMTgxMCw3ICsxODAzLDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlza2JfcHVzaChza2IsIHBhZHNpemUpOwotCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgcGFkc2l6ZSwgaGRybGVuKTsKKwkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CiAJfQogCiAJdHhjdGwudHhxID0gc2MtPmJlYWNvbi5jYWJxOwpAQCAtMTgzOCw3ICsxODMxLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwotCWludCBoZHJsZW4sIHBhZHNpemU7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKiBoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJaW50IHBhZHBvcywgcGFkc2l6ZTsKIAogCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGNvbXBsZXRlOiBza2I6ICVwXG4iLCBza2IpOwogCkBAIC0xODUzLDE0ICsxODQ3LDE0IEBACiAJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9CiAKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCXBhZHNpemUgPSBoZHJsZW4gJiAzOwotCWlmIChwYWRzaXplICYmIGhkcmxlbiA+PSAyNCkgeworCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlwYWRzaXplID0gcGFkcG9zICYgMzsKKwlpZiAocGFkc2l6ZSAmJiBza2ItPmxlbj5wYWRwb3MrcGFkc2l6ZSkgewogCQkvKgogCQkgKiBSZW1vdmUgTUFDIGhlYWRlciBwYWRkaW5nIGJlZm9yZSBnaXZpbmcgdGhlIGZyYW1lIGJhY2sgdG8KIAkJICogbWFjODAyMTEuCiAJCSAqLwotCQltZW1tb3ZlKHNrYi0+ZGF0YSArIHBhZHNpemUsIHNrYi0+ZGF0YSwgaGRybGVuKTsKKwkJbWVtbW92ZShza2ItPmRhdGEgKyBwYWRzaXplLCBza2ItPmRhdGEsIHBhZHBvcyk7CiAJCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7CiAJfQogCkBAIC0yMDc4LDcgKzIwNzIsNyBAQAogCQkJCSZ0eHEtPmF4cV9xLCBsYXN0YmYtPmxpc3QucHJldik7CiAKIAkJdHhxLT5heHFfZGVwdGgtLTsKLQkJdHhvayA9ICEoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKTsKKwkJdHhvayA9ICEoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9NQVNLKTsKIAkJdHhxLT5heHFfdHhfaW5wcm9ncmVzcyA9IGZhbHNlOwogCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCAwMjdiZTI3Li44OGQxZmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC0zODMsMTYwICszODMsNDQgQEAKIAl9CiB9CiAKLS8qIENoZWNrIGlmIGEgRE1BIHJlZ2lvbiBmaXRzIHRoZSBkZXZpY2UgY29uc3RyYWludHMuCi0gKiBSZXR1cm5zIHRydWUsIGlmIHRoZSByZWdpb24gaXMgT0sgZm9yIHVzYWdlIHdpdGggdGhpcyBkZXZpY2UuICovCi1zdGF0aWMgaW5saW5lIGJvb2wgYjQzX2RtYV9hZGRyZXNzX29rKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywKLQkJCQkgICAgICBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplKQotewotCXN3aXRjaCAocmluZy0+dHlwZSkgewotCWNhc2UgQjQzX0RNQV8zMEJJVDoKLQkJaWYgKCh1NjQpYWRkciArIHNpemUgPiAoMVVMTCA8PCAzMCkpCi0JCQlyZXR1cm4gMDsKLQkJYnJlYWs7Ci0JY2FzZSBCNDNfRE1BXzMyQklUOgotCQlpZiAoKHU2NClhZGRyICsgc2l6ZSA+ICgxVUxMIDw8IDMyKSkKLQkJCXJldHVybiAwOwotCQlicmVhazsKLQljYXNlIEI0M19ETUFfNjRCSVQ6Ci0JCS8qIEN1cnJlbnRseSB3ZSBjYW4ndCBoYXZlIGFkZHJlc3NlcyBiZXlvbmQKLQkJICogNjRiaXQgaW4gdGhlIGtlcm5lbC4gKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAxOwotfQotCi0jZGVmaW5lIGlzXzRrX2FsaWduZWQoYWRkcikJKCgodTY0KShhZGRyKSAmIDB4MEZGRnVsbCkgPT0gMCkKLSNkZWZpbmUgaXNfOGtfYWxpZ25lZChhZGRyKQkoKCh1NjQpKGFkZHIpICYgMHgxRkZGdWxsKSA9PSAwKQotCi1zdGF0aWMgdm9pZCBiNDNfdW5tYXBfYW5kX2ZyZWVfcmluZ21lbShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcsIHZvaWQgKmJhc2UsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hYWRkciwgc2l6ZV90IHNpemUpCi17Ci0Jc3NiX2RtYV91bm1hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsIGRtYWFkZHIsIHNpemUsIERNQV9UT19ERVZJQ0UpOwotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYmFzZSwgZ2V0X29yZGVyKHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQgKiBfX2I0M19nZXRfYW5kX21hcF9yaW5nbWVtKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywKLQkJCQkJZG1hX2FkZHJfdCAqZG1hYWRkciwgc2l6ZV90IHNpemUsCi0JCQkJCWdmcF90IGdmcF9mbGFncykKLXsKLQl2b2lkICpiYXNlOwotCi0JYmFzZSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhnZnBfZmxhZ3MsIGdldF9vcmRlcihzaXplKSk7Ci0JaWYgKCFiYXNlKQotCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoYmFzZSwgMCwgc2l6ZSk7Ci0JKmRtYWFkZHIgPSBzc2JfZG1hX21hcF9zaW5nbGUocmluZy0+ZGV2LT5kZXYsIGJhc2UsIHNpemUsCi0JCQkJICAgICAgRE1BX1RPX0RFVklDRSk7Ci0JaWYgKHNzYl9kbWFfbWFwcGluZ19lcnJvcihyaW5nLT5kZXYtPmRldiwgKmRtYWFkZHIpKSB7Ci0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYmFzZSwgZ2V0X29yZGVyKHNpemUpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGJhc2U7Ci19Ci0KLXN0YXRpYyB2b2lkICogYjQzX2dldF9hbmRfbWFwX3JpbmdtZW0oc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLAotCQkJCSAgICAgIGRtYV9hZGRyX3QgKmRtYWFkZHIsIHNpemVfdCBzaXplKQotewotCXZvaWQgKmJhc2U7Ci0KLQliYXNlID0gX19iNDNfZ2V0X2FuZF9tYXBfcmluZ21lbShyaW5nLCBkbWFhZGRyLCBzaXplLAotCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiYXNlKSB7Ci0JCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG9yIG1hcCBwYWdlcyAiCi0JCSAgICAgICAiZm9yIERNQSByaW5nbWVtb3J5XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmICghYjQzX2RtYV9hZGRyZXNzX29rKHJpbmcsICpkbWFhZGRyLCBzaXplKSkgewotCQkvKiBUaGUgbWVtb3J5IGRvZXMgbm90IGZpdCBvdXIgZGV2aWNlIGNvbnN0cmFpbnRzLgotCQkgKiBSZXRyeSB3aXRoIEdGUF9ETUEgc2V0IHRvIGdldCBsb3dlciBtZW1vcnkuICovCi0JCWI0M191bm1hcF9hbmRfZnJlZV9yaW5nbWVtKHJpbmcsIGJhc2UsICpkbWFhZGRyLCBzaXplKTsKLQkJYmFzZSA9IF9fYjQzX2dldF9hbmRfbWFwX3JpbmdtZW0ocmluZywgZG1hYWRkciwgc2l6ZSwKLQkJCQkJCSBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmICghYmFzZSkgewotCQkJYjQzZXJyKHJpbmctPmRldi0+d2wsICJGYWlsZWQgdG8gYWxsb2NhdGUgb3IgbWFwIHBhZ2VzICIKLQkJCSAgICAgICAiaW4gdGhlIEdGUF9ETUEgcmVnaW9uIGZvciBETUEgcmluZ21lbW9yeVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoIWI0M19kbWFfYWRkcmVzc19vayhyaW5nLCAqZG1hYWRkciwgc2l6ZSkpIHsKLQkJCWI0M191bm1hcF9hbmRfZnJlZV9yaW5nbWVtKHJpbmcsIGJhc2UsICpkbWFhZGRyLCBzaXplKTsKLQkJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRmFpbGVkIHRvIGFsbG9jYXRlIERNQSAiCi0JCQkgICAgICAgInJpbmdtZW1vcnkgdGhhdCBmaXRzIGRldmljZSBjb25zdHJhaW50c1xuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQkvKiBXZSBleHBlY3QgdGhlIG1lbW9yeSB0byBiZSA0ayBhbGlnbmVkLCBhdCBsZWFzdC4gKi8KLQlpZiAoQjQzX1dBUk5fT04oIWlzXzRrX2FsaWduZWQoKmRtYWFkZHIpKSkgewotCQliNDNfdW5tYXBfYW5kX2ZyZWVfcmluZ21lbShyaW5nLCBiYXNlLCAqZG1hYWRkciwgc2l6ZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBiYXNlOwotfQotCiBzdGF0aWMgaW50IGFsbG9jX3JpbmdtZW1vcnkoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nKQogewotCXVuc2lnbmVkIGludCByZXF1aXJlZDsKLQl2b2lkICpiYXNlOwotCWRtYV9hZGRyX3QgZG1hYWRkcjsKKwlnZnBfdCBmbGFncyA9IEdGUF9LRVJORUw7CiAKLQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCByZXF1aXJlbWVudHMgdG8gdGhlIGRlc2NyaXB0b3IgcmluZyBtZW1vcnk6Ci0JICogLSBUaGUgbWVtb3J5IHJlZ2lvbiBuZWVkcyB0byBmaXQgdGhlIGFkZHJlc3MgY29uc3RyYWludHMgZm9yIHRoZQotCSAqICAgZGV2aWNlIChzYW1lIGFzIGZvciBmcmFtZSBidWZmZXJzKS4KLQkgKiAtIEZvciAzMC8zMmJpdCBETUEgZGV2aWNlcywgdGhlIGRlc2NyaXB0b3IgcmluZyBtdXN0IGJlIDRrIGFsaWduZWQuCi0JICogLSBGb3IgNjRiaXQgRE1BIGRldmljZXMsIHRoZSBkZXNjcmlwdG9yIHJpbmcgbXVzdCBiZSA4ayBhbGlnbmVkLgorCS8qIFRoZSBzcGVjcyBjYWxsIGZvciA0SyBidWZmZXJzIGZvciAzMC0gYW5kIDMyLWJpdCBETUEgd2l0aCA0SworCSAqIGFsaWdubWVudCBhbmQgOEsgYnVmZmVycyBmb3IgNjQtYml0IERNQSB3aXRoIDhLIGFsaWdubWVudC4gVGVzdGluZworCSAqIGhhcyBzaG93biB0aGF0IDRLIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBsYXR0ZXIgYXMgbG9uZyBhcyB0aGUgYnVmZmVyCisJICogZG9lcyBub3QgY3Jvc3MgYW4gOEsgYm91bmRhcnkuCisJICoKKwkgKiBGb3IgdW5rbm93biByZWFzb25zIC0gcG9zc2libHkgYSBoYXJkd2FyZSBlcnJvciAtIHRoZSBCQ000MzExIHJldgorCSAqIDAyLCB3aGljaCB1c2VzIDY0LWJpdCBETUEsIG5lZWRzIHRoZSByaW5nIGJ1ZmZlciBpbiB2ZXJ5IGxvdyBtZW1vcnksCisJICogd2hpY2ggYWNjb3VudHMgZm9yIHRoZSBHRlBfRE1BIGZsYWcgYmVsb3cuCisJICoKKwkgKiBUaGUgZmxhZ3MgaGVyZSBtdXN0IG1hdGNoIHRoZSBmbGFncyBpbiBmcmVlX3JpbmdtZW1vcnkgYmVsb3chCiAJICovCi0KIAlpZiAocmluZy0+dHlwZSA9PSBCNDNfRE1BXzY0QklUKQotCQlyZXF1aXJlZCA9IHJpbmctPm5yX3Nsb3RzICogc2l6ZW9mKHN0cnVjdCBiNDNfZG1hZGVzYzY0KTsKLQllbHNlCi0JCXJlcXVpcmVkID0gcmluZy0+bnJfc2xvdHMgKiBzaXplb2Yoc3RydWN0IGI0M19kbWFkZXNjMzIpOwotCWlmIChCNDNfV0FSTl9PTihyZXF1aXJlZCA+IDB4MTAwMCkpCisJCWZsYWdzIHw9IEdGUF9ETUE7CisJcmluZy0+ZGVzY2Jhc2UgPSBzc2JfZG1hX2FsbG9jX2NvbnNpc3RlbnQocmluZy0+ZGV2LT5kZXYsCisJCQkJCQkgIEI0M19ETUFfUklOR01FTVNJWkUsCisJCQkJCQkgICYocmluZy0+ZG1hYmFzZSksIGZsYWdzKTsKKwlpZiAoIXJpbmctPmRlc2NiYXNlKSB7CisJCWI0M2VycihyaW5nLT5kZXYtPndsLCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKLQotCXJpbmctPmFsbG9jX2Rlc2NzaXplID0gMHgxMDAwOwotCWJhc2UgPSBiNDNfZ2V0X2FuZF9tYXBfcmluZ21lbShyaW5nLCAmZG1hYWRkciwgcmluZy0+YWxsb2NfZGVzY3NpemUpOwotCWlmICghYmFzZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmluZy0+YWxsb2NfZGVzY2Jhc2UgPSBiYXNlOwotCXJpbmctPmFsbG9jX2RtYWJhc2UgPSBkbWFhZGRyOwotCi0JaWYgKChyaW5nLT50eXBlICE9IEI0M19ETUFfNjRCSVQpIHx8IGlzXzhrX2FsaWduZWQoZG1hYWRkcikpIHsKLQkJLyogV2UncmUgb24gPD0zMmJpdCBETUEsIG9yIHdlIGFscmVhZHkgZ290IDhrIGFsaWduZWQgbWVtb3J5LgotCQkgKiBUaGF0J3MgYWxsIHdlIG5lZWQsIHNvIHdlJ3JlIGZpbmUuICovCi0JCXJpbmctPmRlc2NiYXNlID0gYmFzZTsKLQkJcmluZy0+ZG1hYmFzZSA9IGRtYWFkZHI7Ci0JCXJldHVybiAwOwogCX0KLQliNDNfdW5tYXBfYW5kX2ZyZWVfcmluZ21lbShyaW5nLCBiYXNlLCBkbWFhZGRyLCByaW5nLT5hbGxvY19kZXNjc2l6ZSk7Ci0KLQkvKiBPaywgd2UgZmFpbGVkIGF0IHRoZSA4ayBhbGlnbm1lbnQgcmVxdWlyZW1lbnQuCi0JICogVHJ5IHRvIGZvcmNlLWFsaWduIHRoZSBtZW1vcnkgcmVnaW9uIG5vdy4gKi8KLQlyaW5nLT5hbGxvY19kZXNjc2l6ZSA9IDB4MjAwMDsKLQliYXNlID0gYjQzX2dldF9hbmRfbWFwX3JpbmdtZW0ocmluZywgJmRtYWFkZHIsIHJpbmctPmFsbG9jX2Rlc2NzaXplKTsKLQlpZiAoIWJhc2UpCi0JCXJldHVybiAtRU5PTUVNOwotCXJpbmctPmFsbG9jX2Rlc2NiYXNlID0gYmFzZTsKLQlyaW5nLT5hbGxvY19kbWFiYXNlID0gZG1hYWRkcjsKLQotCWlmIChpc184a19hbGlnbmVkKGRtYWFkZHIpKSB7Ci0JCS8qIFdlJ3JlIGFscmVhZHkgOGsgYWxpZ25lZC4gVGhhdCBPaywgdG9vLiAqLwotCQlyaW5nLT5kZXNjYmFzZSA9IGJhc2U7Ci0JCXJpbmctPmRtYWJhc2UgPSBkbWFhZGRyOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogRm9yY2UtYWxpZ24gaXQgdG8gOGsgKi8KLQlyaW5nLT5kZXNjYmFzZSA9ICh2b2lkICopKCh1OCAqKWJhc2UgKyAweDEwMDApOwotCXJpbmctPmRtYWJhc2UgPSBkbWFhZGRyICsgMHgxMDAwOwotCUI0M19XQVJOX09OKCFpc184a19hbGlnbmVkKHJpbmctPmRtYWJhc2UpKTsKKwltZW1zZXQocmluZy0+ZGVzY2Jhc2UsIDAsIEI0M19ETUFfUklOR01FTVNJWkUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfcmluZ21lbW9yeShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0JYjQzX3VubWFwX2FuZF9mcmVlX3JpbmdtZW0ocmluZywgcmluZy0+YWxsb2NfZGVzY2Jhc2UsCi0JCQkJICAgcmluZy0+YWxsb2NfZG1hYmFzZSwgcmluZy0+YWxsb2NfZGVzY3NpemUpOworCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTDsKKworCWlmIChyaW5nLT50eXBlID09IEI0M19ETUFfNjRCSVQpCisJCWZsYWdzIHw9IEdGUF9ETUE7CisKKwlzc2JfZG1hX2ZyZWVfY29uc2lzdGVudChyaW5nLT5kZXYtPmRldiwgQjQzX0RNQV9SSU5HTUVNU0laRSwKKwkJCQlyaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSwgZmxhZ3MpOwogfQogCiAvKiBSZXNldCB0aGUgUlggRE1BIGNoYW5uZWwgKi8KQEAgLTY0NiwxNCArNTMwLDI5IEBACiAJaWYgKHVubGlrZWx5KHNzYl9kbWFfbWFwcGluZ19lcnJvcihyaW5nLT5kZXYtPmRldiwgYWRkcikpKQogCQlyZXR1cm4gMTsKIAotCWlmICghYjQzX2RtYV9hZGRyZXNzX29rKHJpbmcsIGFkZHIsIGJ1ZmZlcnNpemUpKSB7Ci0JCS8qIFdlIGNhbid0IHN1cHBvcnQgdGhpcyBhZGRyZXNzLiBVbm1hcCBpdCBhZ2Fpbi4gKi8KLQkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBhZGRyLCBidWZmZXJzaXplLCBkbWFfdG9fZGV2aWNlKTsKLQkJcmV0dXJuIDE7CisJc3dpdGNoIChyaW5nLT50eXBlKSB7CisJY2FzZSBCNDNfRE1BXzMwQklUOgorCQlpZiAoKHU2NClhZGRyICsgYnVmZmVyc2l6ZSA+ICgxVUxMIDw8IDMwKSkKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRE1BXzMyQklUOgorCQlpZiAoKHU2NClhZGRyICsgYnVmZmVyc2l6ZSA+ICgxVUxMIDw8IDMyKSkKKwkJCWdvdG8gYWRkcmVzc19lcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRE1BXzY0QklUOgorCQkvKiBDdXJyZW50bHkgd2UgY2FuJ3QgaGF2ZSBhZGRyZXNzZXMgYmV5b25kCisJCSAqIDY0Yml0IGluIHRoZSBrZXJuZWwuICovCisJCWJyZWFrOwogCX0KIAogCS8qIFRoZSBhZGRyZXNzIGlzIE9LLiAqLwogCXJldHVybiAwOworCithZGRyZXNzX2Vycm9yOgorCS8qIFdlIGNhbid0IHN1cHBvcnQgdGhpcyBhZGRyZXNzLiBVbm1hcCBpdCBhZ2Fpbi4gKi8KKwl1bm1hcF9kZXNjYnVmZmVyKHJpbmcsIGFkZHIsIGJ1ZmZlcnNpemUsIGRtYV90b19kZXZpY2UpOworCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBib29sIGI0M19yeF9idWZmZXJfaXNfcG9pc29uZWQoc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNzE1LDkgKzYxNCw2IEBACiAJbWV0YS0+ZG1hYWRkciA9IGRtYWFkZHI7CiAJcmluZy0+b3BzLT5maWxsX2Rlc2NyaXB0b3IocmluZywgZGVzYywgZG1hYWRkciwKIAkJCQkgICByaW5nLT5yeF9idWZmZXJzaXplLCAwLCAwLCAwKTsKLQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2RtYWJhc2UsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2Rlc2NzaXplLCBETUFfVE9fREVWSUNFKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM1NCw5ICsxMjUwLDYgQEAKIAl9CiAJLyogTm93IHRyYW5zZmVyIHRoZSB3aG9sZSBmcmFtZS4gKi8KIAl3bWIoKTsKLQlzc2JfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocmluZy0+ZGV2LT5kZXYsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2RtYWJhc2UsCi0JCQkJICAgICAgIHJpbmctPmFsbG9jX2Rlc2NzaXplLCBETUFfVE9fREVWSUNFKTsKIAlvcHMtPnBva2VfdHgocmluZywgbmV4dF9zbG90KHJpbmcsIHNsb3QpKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGU2MDdiMzkuLmY3YWIzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTE1Nyw2ICsxNTcsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiAvKiBNaXNjIERNQSBjb25zdGFudHMgKi8KKyNkZWZpbmUgQjQzX0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCiAjZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCQkzMAogCiAvKiBETUEgZW5naW5lIHR1bmluZyBrbm9icyAqLwpAQCAtMjQ2LDEyICsyNDcsNiBAQAogCS8qIFRoZSBRT1MgcHJpb3JpdHkgYXNzaWduZWQgdG8gdGhpcyByaW5nLiBPbmx5IHVzZWQgZm9yIFRYIHJpbmdzLgogCSAqIFRoaXMgaXMgdGhlIG1hYzgwMjExICJxdWV1ZSIgdmFsdWUuICovCiAJdTggcXVldWVfcHJpbzsKLQkvKiBQb2ludGVycyBhbmQgc2l6ZSBvZiB0aGUgb3JpZ2luYWxseSBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBtZW1vcnkKLQkgKiByZWdpb24gZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmcuICovCi0Jdm9pZCAqYWxsb2NfZGVzY2Jhc2U7Ci0JZG1hX2FkZHJfdCBhbGxvY19kbWFiYXNlOwotCXVuc2lnbmVkIGludCBhbGxvY19kZXNjc2l6ZTsKLQkvKiBQb2ludGVyIHRvIG91ciB3aXJlbGVzcyBkZXZpY2UuICovCiAJc3RydWN0IGI0M193bGRldiAqZGV2OwogI2lmZGVmIENPTkZJR19CNDNfREVCVUcKIAkvKiBNYXhpbXVtIG51bWJlciBvZiB1c2VkIHNsb3RzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDdkYTFkYWIuLjIzNDg5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTY4MSwxOSArNjgxLDEzIEBACiAJCXNuciA9IHJ4X3N0YXRzX3NpZ19hdmcgLyByeF9zdGF0c19ub2lzZV9kaWZmOwogCQlyeF9zdGF0dXMubm9pc2UgPSByeF9zdGF0dXMuc2lnbmFsIC0KIAkJCQkJaXdsMzk0NV9jYWxjX2RiX2Zyb21fcmF0aW8oc25yKTsKLQkJcnhfc3RhdHVzLnF1YWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwKLQkJCQkJCQkgcnhfc3RhdHVzLm5vaXNlKTsKLQotCS8qIElmIG5vaXNlIGluZm8gbm90IGF2YWlsYWJsZSwgY2FsY3VsYXRlIHNpZ25hbCBxdWFsaXR5IGluZGljYXRvciAoJSkKLQkgKiAgIHVzaW5nIGp1c3QgdGhlIGRCbSBzaWduYWwgbGV2ZWwuICovCiAJfSBlbHNlIHsKIAkJcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKLQkJcnhfc3RhdHVzLnF1YWwgPSBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwgMCk7CiAJfQogCiAKLQlJV0xfREVCVUdfU1RBVFMocHJpdiwgIlJzc2kgJWQgbm9pc2UgJWQgcXVhbCAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCi0JCQlyeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMubm9pc2UsIHJ4X3N0YXR1cy5xdWFsLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSAlZCBub2lzZSAlZCBzaWdfYXZnICVkIG5vaXNlX2RpZmYgJWRcbiIsCisJCQlyeF9zdGF0dXMuc2lnbmFsLCByeF9zdGF0dXMubm9pc2UsCiAJCQlyeF9zdGF0c19zaWdfYXZnLCByeF9zdGF0c19ub2lzZV9kaWZmKTsKIAogCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CkBAIC0xODM1LDggKzE4MjksNyBAQAogCQlyYyA9IC1FSU87CiAJfQogCi0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKLQlmcmVlX3BhZ2VzKGNtZC5yZXBseV9wYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjgzNiw2ICsyODI5LDcgQEAKIAkudXNlX2lzcl9sZWdhY3kgPSB0cnVlLAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSBmYWxzZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDY0LAorCS5icm9rZW5fcG93ZXJzYXZlID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CkBAIC0yODUyLDYgKzI4NDYsNyBAQAogCS51c2VfaXNyX2xlZ2FjeSA9IHRydWUsCiAJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IGZhbHNlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNjQsCisJLmJyb2tlbl9wb3dlcnNhdmUgPSB0cnVlLAogfTsKIAogc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCmluZGV4IGVjYzIzZWMuLjUzMWZhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKQEAgLTIyMiw3ICsyMjIsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGV4dGVybiBpbnQgaXdsMzk0NV9jYWxjX2RiX2Zyb21fcmF0aW8oaW50IHNpZ19yYXRpbyk7Ci1leHRlcm4gaW50IGl3bDM5NDVfY2FsY19zaWdfcXVhbChpbnQgcnNzaV9kYm0sIGludCBub2lzZV9kYm0pOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggMzg2NTEzYi4uNDg0YzVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAlpd2w0OTY1X2ludGVycG9sYXRlX2NoYW4ocHJpdiwgY2hhbm5lbCwgJmNoX2VlcHJvbV9pbmZvKTsKIAogCS8qIGNhbGN1bGF0ZSB0eCBnYWluIGFkanVzdG1lbnQgYmFzZWQgb24gcG93ZXIgc3VwcGx5IHZvbHRhZ2UgKi8KLQl2b2x0YWdlID0gcHJpdi0+Y2FsaWJfaW5mby0+dm9sdGFnZTsKKwl2b2x0YWdlID0gbGUxNl90b19jcHUocHJpdi0+Y2FsaWJfaW5mby0+dm9sdGFnZSk7CiAJaW5pdF92b2x0YWdlID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudm9sdGFnZSk7CiAJdm9sdGFnZV9jb21wZW5zYXRpb24gPQogCSAgICBpd2w0OTY1X2dldF92b2x0YWdlX2NvbXBlbnNhdGlvbih2b2x0YWdlLCBpbml0X3ZvbHRhZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCmluZGV4IDRlZjY4MDQuLmJjMDU2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTkyLDExICs5MiwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHMzMiBpd2xfdGVtcF9jYWxpYl90b19vZmZzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXUxNiAqdGVtcF9jYWxpYiA9ICh1MTYgKilpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwKLQkJCQkJCSAgICAgICBFRVBST01fNTAwMF9URU1QRVJBVFVSRSk7Ci0JLyogb2Zmc2V0ID0gIHRlbXBlcmF0dXJlIC0gIHZvbHRhZ2UgLyBjb2VmICovCi0JczMyIG9mZnNldCA9IChzMzIpKHRlbXBfY2FsaWJbMF0gLSB0ZW1wX2NhbGliWzFdIC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRik7Ci0JcmV0dXJuIG9mZnNldDsKKwl1MTYgdGVtcGVyYXR1cmUsIHZvbHRhZ2U7CisJX19sZTE2ICp0ZW1wX2NhbGliID0KKwkJKF9fbGUxNiAqKWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBFRVBST01fNTAwMF9URU1QRVJBVFVSRSk7CisKKwl0ZW1wZXJhdHVyZSA9IGxlMTZfdG9fY3B1KHRlbXBfY2FsaWJbMF0pOworCXZvbHRhZ2UgPSBsZTE2X3RvX2NwdSh0ZW1wX2NhbGliWzFdKTsKKworCS8qIG9mZnNldCA9IHRlbXAgLSB2b2x0IC8gY29lZmYgKi8KKwlyZXR1cm4gKHMzMikodGVtcGVyYXR1cmUgLSB2b2x0YWdlIC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRik7CiB9CiAKIC8qIEZpeGVkIChub24tY29uZmlndXJhYmxlKSByeCBkYXRhIGZyb20gcGh5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggZTJmODYxNS4uMzNhNTg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMzMzLDE0ICszMzMsMTUgQEAKIHN0YXRpYyBpbnQgaXdsNTAwMF9zZXRfWHRhbF9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9jYWxpYl94dGFsX2ZyZXFfY21kIGNtZDsKLQl1MTYgKnh0YWxfY2FsaWIgPSAodTE2ICopaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIEVFUFJPTV81MDAwX1hUQUwpOworCV9fbGUxNiAqeHRhbF9jYWxpYiA9CisJCShfX2xlMTYgKilpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwgRUVQUk9NXzUwMDBfWFRBTCk7CiAKIAljbWQuaGRyLm9wX2NvZGUgPSBJV0xfUEhZX0NBTElCUkFURV9DUllTVEFMX0ZSUV9DTUQ7CiAJY21kLmhkci5maXJzdF9ncm91cCA9IDA7CiAJY21kLmhkci5ncm91cHNfbnVtID0gMTsKIAljbWQuaGRyLmRhdGFfdmFsaWQgPSAxOwotCWNtZC5jYXBfcGluMSA9ICh1OCl4dGFsX2NhbGliWzBdOwotCWNtZC5jYXBfcGluMiA9ICh1OCl4dGFsX2NhbGliWzFdOworCWNtZC5jYXBfcGluMSA9IGxlMTZfdG9fY3B1KHh0YWxfY2FsaWJbMF0pOworCWNtZC5jYXBfcGluMiA9IGxlMTZfdG9fY3B1KHh0YWxfY2FsaWJbMV0pOwogCXJldHVybiBpd2xfY2FsaWJfc2V0KCZwcml2LT5jYWxpYl9yZXN1bHRzW0lXTF9DQUxJQl9YVEFMXSwKIAkJCSAgICAgKHU4ICopJmNtZCwgc2l6ZW9mKGNtZCkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBmZTUxMWNiLi5iOTNlNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiB9OwogCiAvKiBtYnBzLCBtY3MgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgaXdsX3JhdGVfbWNzX2luZm8gaXdsX3JhdGVfbWNzW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3JhdGVfbWNzX2luZm8gaXdsX3JhdGVfbWNzW0lXTF9SQVRFX0NPVU5UXSA9IHsKIAl7ICAiMSIsICJCUFNLIERTU1MifSwKIAl7ICAiMiIsICJRUFNLIERTU1MifSwKIAl7IjUuNSIsICJCUFNLIENDSyJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCBiODM3N2VmLi4xYzk4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmICghKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfRldfRVJST1JTKSkKKwlpZiAoIShpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgJiYgIWZ1bGxfbG9nKQogCQlzaXplID0gKHNpemUgPiBERUZBVUxUX0RVTVBfRVZFTlRfTE9HX0VOVFJJRVMpCiAJCQk/IERFRkFVTFRfRFVNUF9FVkVOVF9MT0dfRU5UUklFUyA6IHNpemU7CiAjZWxzZQpAQCAtMzE3Myw3ICszMTczLDYgQEAKIAogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5oY21kX2xvY2spOwogCkBAIC0zMzYxLDEwICszMzYwLDExIEBACiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfYmFzZSA9ICVwXG4iLCBwcml2LT5od19iYXNlKTsKIAotCS8qIHRoaXMgc3BpbiBsb2NrIHdpbGwgYmUgdXNlZCBpbiBhcG1fb3BzLmluaXQgYW5kIEVFUFJPTSBhY2Nlc3MKKwkvKiB0aGVzZSBzcGluIGxvY2tzIHdpbGwgYmUgdXNlZCBpbiBhcG1fb3BzLmluaXQgYW5kIEVFUFJPTSBhY2Nlc3MKIAkgKiB3ZSBzaG91bGQgaW5pdCBub3cKIAkgKi8KIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cmVnX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAlpd2xfaHdfZGV0ZWN0KHByaXYpOwogCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXMgUkVWPTB4JVhcbiIsCiAJCXByaXYtPmNmZy0+bmFtZSwgcHJpdi0+aHdfcmV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKaW5kZXggYTdiZmFlMC4uMWVjOGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKQEAgLTc3LDggKzc3LDcgQEAKICAqIFRoZSBNQUMgKHVDb2RlIHByb2Nlc3NvciwgZXRjLikgZG9lcyBub3QgbmVlZCB0byBiZSBwb3dlcmVkIHVwIGZvciBhY2Nlc3NpbmcKICAqIHRoZSBDU1IgcmVnaXN0ZXJzLgogICoKLSAqIE5PVEU6ICBOZXdlciBkZXZpY2VzIHVzaW5nIG9uZS10aW1lLXByb2dyYW1tYWJsZSAoT1RQKSBtZW1vcnkKLSAqICAgICAgICByZXF1aXJlIGRldmljZSB0byBiZSBhd2FrZSBpbiBvcmRlciB0byByZWFkIHRoaXMgbWVtb3J5CisgKiBOT1RFOiAgRGV2aWNlIGRvZXMgbmVlZCB0byBiZSBhd2FrZSBpbiBvcmRlciB0byByZWFkIHRoaXMgbWVtb3J5CiAgKiAgICAgICAgdmlhIENTUl9FRVBST00gYW5kIENTUl9PVFAgcmVnaXN0ZXJzCiAgKi8KICNkZWZpbmUgQ1NSX0JBU0UgICAgKDB4MDAwKQpAQCAtMTExLDkgKzExMCw4IEBACiAvKgogICogRUVQUk9NIGFuZCBPVFAgKG9uZS10aW1lLXByb2dyYW1tYWJsZSkgbWVtb3J5IHJlYWRzCiAgKgotICogTk9URTogIEZvciAobmV3ZXIpIGRldmljZXMgdXNpbmcgT1RQLCBkZXZpY2UgbXVzdCBiZSBhd2FrZSwgaW5pdGlhbGl6ZWQgdmlhCi0gKiAgICAgICAgYXBtX29wcy5pbml0KCkgaW4gb3JkZXIgdG8gcmVhZC4gIE9sZGVyIGRldmljZXMgKDM5NDUvNDk2NS81MDAwKQotICogICAgICAgIHVzZSBFRVBST00gYW5kIGRvIG5vdCByZXF1aXJlIHRoaXMuCisgKiBOT1RFOiAgRGV2aWNlIG11c3QgYmUgYXdha2UsIGluaXRpYWxpemVkIHZpYSBhcG1fb3BzLmluaXQoKSwKKyAqICAgICAgICBpbiBvcmRlciB0byByZWFkLgogICovCiAjZGVmaW5lIENTUl9FRVBST01fUkVHICAgICAgICAgIChDU1JfQkFTRSsweDAyYykKICNkZWZpbmUgQ1NSX0VFUFJPTV9HUCAgICAgICAgICAgKENTUl9CQVNFKzB4MDMwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAyNjczZTlhLi4xNjVkMWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMTE2OCw3ICsxMTY4LDcgQEAKIAl1MzIgbGFzdF9iZWFjb25fdGltZTsKIAl1NjQgbGFzdF90c2Y7CiAKLQkvKiBlZXByb20gKi8KKwkvKiBlZXByb20gLS0gdGhpcyBpcyBpbiB0aGUgY2FyZCdzIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlciAqLwogCXU4ICplZXByb207CiAJaW50ICAgIG52bV9kZXZpY2VfdHlwZTsKIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9pbmZvICpjYWxpYl9pbmZvOwpAQCAtMTM1Myw0ICsxMzUzLDE1IEBACiAJcmV0dXJuICgoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpID8gMSA6IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9mcmVlX3BhZ2VzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19mcmVlX3BhZ2VzKHBhZ2UsIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwlwcml2LT5hbGxvY19yeGJfcGFnZS0tOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2ZyZWVfcGFnZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJZnJlZV9wYWdlcyhwYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKK30KICNlbmRpZgkJCQkvKiBfX2l3bF9kZXZfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IDM5NDZlNWMuLjRhMzA5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bF9yZWFkX290cF93b3JkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGFkZHIsIHUxNiAqZWVwcm9tX2RhdGEpCitzdGF0aWMgaW50IGl3bF9yZWFkX290cF93b3JkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGFkZHIsIF9fbGUxNiAqZWVwcm9tX2RhdGEpCiB7CiAJaW50IHJldCA9IDA7CiAJdTMyIHI7CkBAIC00MDQsNyArNDA0LDcgQEAKIAkJCQlDU1JfT1RQX0dQX1JFR19FQ0NfQ09SUl9TVEFUVVNfTVNLKTsKIAkJSVdMX0VSUihwcml2LCAiQ29ycmVjdGFibGUgT1RQIEVDQyBlcnJvciwgY29udGludWUgcmVhZFxuIik7CiAJfQotCSplZXByb21fZGF0YSA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikociA+PiAxNikpOworCSplZXByb21fZGF0YSA9IGNwdV90b19sZTE2KHIgPj4gMTYpOwogCXJldHVybiAwOwogfQogCkBAIC00MTMsNyArNDEzLDggQEAKICAqLwogc3RhdGljIGJvb2wgaXdsX2lzX290cF9lbXB0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JdTE2IG5leHRfbGlua19hZGRyID0gMCwgbGlua192YWx1ZTsKKwl1MTYgbmV4dF9saW5rX2FkZHIgPSAwOworCV9fbGUxNiBsaW5rX3ZhbHVlOwogCWJvb2wgaXNfZW1wdHkgPSBmYWxzZTsKIAogCS8qIGxvY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIE9UUCBsaW5rIGxpc3QgKi8KQEAgLTQ0Myw3ICs0NDQsOCBAQAogc3RhdGljIGludCBpd2xfZmluZF9vdHBfaW1hZ2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQl1MTYgKnZhbGlkYmxvY2thZGRyKQogewotCXUxNiBuZXh0X2xpbmtfYWRkciA9IDAsIGxpbmtfdmFsdWUgPSAwLCB2YWxpZF9hZGRyOworCXUxNiBuZXh0X2xpbmtfYWRkciA9IDAsIHZhbGlkX2FkZHI7CisJX19sZTE2IGxpbmtfdmFsdWUgPSAwOwogCWludCB1c2VkYmxvY2tzID0gMDsKIAogCS8qIHNldCBhZGRyZXNzaW5nIG1vZGUgdG8gYWJzb2x1dGUgdG8gdHJhdmVyc2UgdGhlIGxpbmsgbGlzdCAqLwpAQCAtNDYzLDcgKzQ2NSw3IEBACiAJCSAqIGNoZWNrIGZvciBtb3JlIGJsb2NrIG9uIHRoZSBsaW5rIGxpc3QKIAkJICovCiAJCXZhbGlkX2FkZHIgPSBuZXh0X2xpbmtfYWRkcjsKLQkJbmV4dF9saW5rX2FkZHIgPSBsaW5rX3ZhbHVlICogc2l6ZW9mKHUxNik7CisJCW5leHRfbGlua19hZGRyID0gbGUxNl90b19jcHUobGlua192YWx1ZSkgKiBzaXplb2YodTE2KTsKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk9UUCBibG9ja3MgJWQgYWRkciAweCV4XG4iLAogCQkJICAgICAgIHVzZWRibG9ja3MsIG5leHRfbGlua19hZGRyKTsKIAkJaWYgKGl3bF9yZWFkX290cF93b3JkKHByaXYsIG5leHRfbGlua19hZGRyLCAmbGlua192YWx1ZSkpCkBAIC00OTcsNyArNDk5LDcgQEAKICAqLwogaW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JdTE2ICplOworCV9fbGUxNiAqZTsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWludCBzejsKIAlpbnQgcmV0OwpAQCAtNTE2LDEyICs1MTgsOSBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGFsbG9jX2VycjsKIAl9Ci0JZSA9ICh1MTYgKilwcml2LT5lZXByb207CisJZSA9IChfX2xlMTYgKilwcml2LT5lZXByb207CiAKLQlpZiAocHJpdi0+bnZtX2RldmljZV90eXBlID09IE5WTV9ERVZJQ0VfVFlQRV9PVFApIHsKLQkJLyogT1RQIHJlYWRzIHJlcXVpcmUgcG93ZXJlZC11cCBjaGlwICovCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuaW5pdChwcml2KTsKLQl9CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7CkBAIC01NjIsNyArNTYxLDcgQEAKIAkJfQogCQlmb3IgKGFkZHIgPSB2YWxpZGJsb2NrYWRkcjsgYWRkciA8IHZhbGlkYmxvY2thZGRyICsgc3o7CiAJCSAgICAgYWRkciArPSBzaXplb2YodTE2KSkgewotCQkJdTE2IGVlcHJvbV9kYXRhOworCQkJX19sZTE2IGVlcHJvbV9kYXRhOwogCiAJCQlyZXQgPSBpd2xfcmVhZF9vdHBfd29yZChwcml2LCBhZGRyLCAmZWVwcm9tX2RhdGEpOwogCQkJaWYgKHJldCkKQEAgLTU3MCwxMyArNTY5LDYgQEAKIAkJCWVbY2FjaGVfYWRkciAvIDJdID0gZWVwcm9tX2RhdGE7CiAJCQljYWNoZV9hZGRyICs9IHNpemVvZih1MTYpOwogCQl9Ci0KLQkJLyoKLQkJICogTm93IHRoYXQgT1RQIHJlYWRzIGFyZSBjb21wbGV0ZSwgcmVzZXQgY2hpcCB0byBzYXZlCi0JCSAqICAgcG93ZXIgdW50aWwgd2UgbG9hZCB1Q29kZSBkdXJpbmcgInVwIi4KLQkJICovCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc3RvcChwcml2KTsKLQogCX0gZWxzZSB7CiAJCS8qIGVlcHJvbSBpcyBhbiBhcnJheSBvZiAxNmJpdCB2YWx1ZXMgKi8KIAkJZm9yIChhZGRyID0gMDsgYWRkciA8IHN6OyBhZGRyICs9IHNpemVvZih1MTYpKSB7CkBAIC01OTQsNyArNTg2LDcgQEAKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKLQkJCWVbYWRkciAvIDJdID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7CisJCQllW2FkZHIgLyAyXSA9IGNwdV90b19sZTE2KHIgPj4gMTYpOwogCQl9CiAJfQogCXJldCA9IDA7CkBAIC02MDMsNiArNTk1LDggQEAKIGVycjoKIAlpZiAocmV0KQogCQlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CisJLyogUmVzZXQgY2hpcCB0byBzYXZlIHBvd2VyIHVudGlsIHdlIGxvYWQgdUNvZGUgZHVyaW5nICJ1cCIuICovCisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5zdG9wKHByaXYpOwogYWxsb2NfZXJyOgogCXJldHVybiByZXQ7CiB9CkBAIC03NTUsNyArNzQ5LDggQEAKIAljaF9pbmZvLT5odDQwX2VlcHJvbSA9ICplZXByb21fY2g7CiAJY2hfaW5mby0+aHQ0MF9tYXhfcG93ZXJfYXZnID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwogCWNoX2luZm8tPmh0NDBfZmxhZ3MgPSBlZXByb21fY2gtPmZsYWdzOwotCWNoX2luZm8tPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWwgJj0gfmNsZWFyX2h0NDBfZXh0ZW5zaW9uX2NoYW5uZWw7CisJaWYgKGVlcHJvbV9jaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9WQUxJRCkKKwkJY2hfaW5mby0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbCAmPSB+Y2xlYXJfaHQ0MF9leHRlbnNpb25fY2hhbm5lbDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCA1Y2QyYjY2Li4wY2Q5YzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMTM3LDcgKzEzNyw3IEBACiAgKgogICovCiBzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciB7Ci0JdTE2IGNvbW1vbjsKKwlfX2xlMTYgY29tbW9uOwogCXM4IGNoYWluX2FfbWF4OwogCXM4IGNoYWluX2JfbWF4OwogCXM4IGNoYWluX2NfbWF4OwpAQCAtMzYwLDcgKzM2MCw3IEBACiBzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9pbmZvIHsKIAl1OCBzYXR1cmF0aW9uX3Bvd2VyMjQ7CS8qIGhhbGYtZEJtIChlLmcuICIzNCIgPSAxNyBkQm0pICovCiAJdTggc2F0dXJhdGlvbl9wb3dlcjUyOwkvKiBoYWxmLWRCbSAqLwotCXMxNiB2b2x0YWdlOwkJLyogc2lnbmVkICovCisJX19sZTE2IHZvbHRhZ2U7CQkvKiBzaWduZWQgKi8KIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jYWxpYl9zdWJiYW5kX2luZm8KIAkJYmFuZF9pbmZvW0VFUFJPTV9UWF9QT1dFUl9CQU5EU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwppbmRleCBhMjMxNjU5Li4zMGU5ZWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl9CiBmYWlsOgogCWlmIChjbWQtPnJlcGx5X3BhZ2UpIHsKLQkJZnJlZV9wYWdlcyhjbWQtPnJlcGx5X3BhZ2UsIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwkJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLT5yZXBseV9wYWdlKTsKIAkJY21kLT5yZXBseV9wYWdlID0gMDsKIAl9CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCA2MDkwYmMxLi42ZjM2YjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTM0NSwxMCArMzQ1LDggQEAKIAkJCXBjaV91bm1hcF9wYWdlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5wYWdlX2RtYSwKIAkJCQlQQUdFX1NJWkUgPDwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIsCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCV9fZnJlZV9wYWdlcyhyeHEtPnBvb2xbaV0ucGFnZSwKLQkJCQkgICAgIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwkJCV9faXdsX2ZyZWVfcGFnZXMocHJpdiwgcnhxLT5wb29sW2ldLnBhZ2UpOwogCQkJcnhxLT5wb29sW2ldLnBhZ2UgPSBOVUxMOwotCQkJcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIAkJfQogCX0KIApAQCAtNDE2LDkgKzQxNCw3IEBACiAJCQlwY2lfdW5tYXBfcGFnZShwcml2LT5wY2lfZGV2LCByeHEtPnBvb2xbaV0ucGFnZV9kbWEsCiAJCQkJUEFHRV9TSVpFIDw8IHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyLAogCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwcml2LT5hbGxvY19yeGJfcGFnZS0tOwotCQkJX19mcmVlX3BhZ2VzKHJ4cS0+cG9vbFtpXS5wYWdlLAotCQkJCSAgICAgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIpOworCQkJX19pd2xfZnJlZV9wYWdlcyhwcml2LCByeHEtPnBvb2xbaV0ucGFnZSk7CiAJCQlyeHEtPnBvb2xbaV0ucGFnZSA9IE5VTEw7CiAJCX0KIAkJbGlzdF9hZGRfdGFpbCgmcnhxLT5wb29sW2ldLmxpc3QsICZyeHEtPnJ4X3VzZWQpOwpAQCAtNjU0LDQ3ICs2NTAsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfcmVwbHlfc3RhdGlzdGljcyk7CiAKLSNkZWZpbmUgUEVSRkVDVF9SU1NJICgtMjApIC8qIGRCbSAqLwotI2RlZmluZSBXT1JTVF9SU1NJICgtOTUpICAgLyogZEJtICovCi0jZGVmaW5lIFJTU0lfUkFOR0UgKFBFUkZFQ1RfUlNTSSAtIFdPUlNUX1JTU0kpCi0KLS8qIENhbGN1bGF0ZSBhbiBpbmRpY2F0aW9uIG9mIHJ4IHNpZ25hbCBxdWFsaXR5IChhIHBlcmNlbnRhZ2UsIG5vdCBkQm0hKS4KLSAqIFNlZSBodHRwOi8vd3d3LmNlcy5jbGVtc29uLmVkdS9saW51eC9zaWduYWxfcXVhbGl0eS5zaHRtbCBmb3IgaW5mbwotICogICBhYm91dCBmb3JtdWxhcyB1c2VkIGJlbG93LiAqLwotc3RhdGljIGludCBpd2xfY2FsY19zaWdfcXVhbChpbnQgcnNzaV9kYm0sIGludCBub2lzZV9kYm0pCi17Ci0JaW50IHNpZ19xdWFsOwotCWludCBkZWdyYWRhdGlvbiA9IFBFUkZFQ1RfUlNTSSAtIHJzc2lfZGJtOwotCi0JLyogSWYgd2UgZ2V0IGEgbm9pc2UgbWVhc3VyZW1lbnQsIHVzZSBzaWduYWwtdG8tbm9pc2UgcmF0aW8gKFNOUikKLQkgKiBhcyBpbmRpY2F0b3I7IGZvcm11bGEgaXMgKHNpZ25hbCBkYm0gLSBub2lzZSBkYm0pLgotCSAqIFNOUiBhdCBvciBhYm92ZSA0MCBpcyBhIGdyZWF0IHNpZ25hbCAoMTAwJSkuCi0JICogQmVsb3cgdGhhdCwgc2NhbGUgdG8gZml0IFNOUiBvZiAwIC0gNDAgZEIgd2l0aGluIDAgLSAxMDAlIGluZGljYXRvci4KLQkgKiBXZWFrZXN0IHVzYWJsZSBzaWduYWwgaXMgdXN1YWxseSAxMCAtIDE1IGRCIFNOUi4gKi8KLQlpZiAobm9pc2VfZGJtKSB7Ci0JCWlmIChyc3NpX2RibSAtIG5vaXNlX2RibSA+PSA0MCkKLQkJCXJldHVybiAxMDA7Ci0JCWVsc2UgaWYgKHJzc2lfZGJtIDwgbm9pc2VfZGJtKQotCQkJcmV0dXJuIDA7Ci0JCXNpZ19xdWFsID0gKChyc3NpX2RibSAtIG5vaXNlX2RibSkgKiA1KSAvIDI7Ci0KLQkvKiBFbHNlIHVzZSBqdXN0IHRoZSBzaWduYWwgbGV2ZWwuCi0JICogVGhpcyBmb3JtdWxhIGlzIGEgbGVhc3Qgc3F1YXJlcyBmaXQgb2YgZGF0YSBwb2ludHMgY29sbGVjdGVkIGFuZAotCSAqICAgY29tcGFyZWQgd2l0aCBhIHJlZmVyZW5jZSBzeXN0ZW0gdGhhdCBoYWQgYSBwZXJjZW50YWdlICglKSBkaXNwbGF5Ci0JICogICBmb3Igc2lnbmFsIHF1YWxpdHkuICovCi0JfSBlbHNlCi0JCXNpZ19xdWFsID0gKDEwMCAqIChSU1NJX1JBTkdFICogUlNTSV9SQU5HRSkgLSBkZWdyYWRhdGlvbiAqCi0JCQkgICAgKDE1ICogUlNTSV9SQU5HRSArIDYyICogZGVncmFkYXRpb24pKSAvCi0JCQkgICAoUlNTSV9SQU5HRSAqIFJTU0lfUkFOR0UpOwotCi0JaWYgKHNpZ19xdWFsID4gMTAwKQotCQlzaWdfcXVhbCA9IDEwMDsKLQllbHNlIGlmIChzaWdfcXVhbCA8IDEpCi0JCXNpZ19xdWFsID0gMDsKLQotCXJldHVybiBzaWdfcXVhbDsKLX0KLQogLyogQ2FsYyBtYXggc2lnbmFsIGxldmVsIChkQm0pIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzICovCiBzdGF0aWMgaW5saW5lIGludCBpd2xfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnJ4X3Jlc3ApCkBAIC0xMTA1LDExICsxMDYwLDggQEAKIAlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYKIAkgICAgIXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKIAkJcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bGFzdF9yeF9ub2lzZTsKLQkJcnhfc3RhdHVzLnF1YWwgPSBpd2xfY2FsY19zaWdfcXVhbChyeF9zdGF0dXMuc2lnbmFsLAotCQkJCQkJCSByeF9zdGF0dXMubm9pc2UpOwogCX0gZWxzZSB7CiAJCXJ4X3N0YXR1cy5ub2lzZSA9IElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEU7Ci0JCXJ4X3N0YXR1cy5xdWFsID0gaXdsX2NhbGNfc2lnX3F1YWwocnhfc3RhdHVzLnNpZ25hbCwgMCk7CiAJfQogCiAJLyogUmVzZXQgYmVhY29uIG5vaXNlIGxldmVsIGlmIG5vdCBhc3NvY2lhdGVkLiAqLwpAQCAtMTEyMiw4ICsxMDc0LDggQEAKIAkJaXdsX2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGh5X3JlcywgbGVuLCBoZWFkZXIsIDEpOwogI2VuZGlmCiAJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZW4sIGhlYWRlcik7Ci0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCi0JCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnF1YWwsCisJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgVFNGICVsbHVcbiIsCisJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IGEyYjJiODMuLmZhMWM4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTE0NCw4ICsxNDQsNyBAQAogCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpOwogCX0KIAotCXByaXYtPmFsbG9jX3J4Yl9wYWdlLS07Ci0JZnJlZV9wYWdlcyhjbWQucmVwbHlfcGFnZSwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIpOworCWl3bF9mcmVlX3BhZ2VzKHByaXYsIGNtZC5yZXBseV9wYWdlKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IGNkNmE2OTAuLmNkZTA5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC0xNjQsOSArMTY0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCi0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKLQlmcmVlX3BhZ2VzKGNtZC5yZXBseV9wYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM5MSw5ICszODksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlwcml2LT5hbGxvY19yeGJfcGFnZS0tOwotCWZyZWVfcGFnZXMoY21kLnJlcGx5X3BhZ2UsIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwlpd2xfZnJlZV9wYWdlcyhwcml2LCBjbWQucmVwbHlfcGFnZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKaW5kZXggMDBkYTVlMS4uODdjZTJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC00MDcsMTMgKzQwNywxNCBAQAogCWludCB0eHFfaWQ7CiAKIAkvKiBUeCBxdWV1ZXMgKi8KLQlpZiAocHJpdi0+dHhxKQorCWlmIChwcml2LT50eHEpIHsKIAkJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07CiAJCSAgICAgdHhxX2lkKyspCiAJCQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQogCQkJCWl3bF9jbWRfcXVldWVfZnJlZShwcml2KTsKIAkJCWVsc2UKIAkJCQlpd2xfdHhfcXVldWVfZnJlZShwcml2LCB0eHFfaWQpOworCX0KIAlpd2xfZnJlZV9kbWFfcHRyKHByaXYsICZwcml2LT5rdyk7CiAKIAlpd2xfZnJlZV9kbWFfcHRyKHByaXYsICZwcml2LT5zY2RfYmNfdGJscyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCAyYTI4YTFmLi5mOGU0ZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTU0OCw2ICs1NDgsOSBAQAogCXR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlxID0gJnR4cS0+cTsKIAorCWlmICgoaXdsX3F1ZXVlX3NwYWNlKHEpIDwgcS0+aGlnaF9tYXJrKSkKKwkJZ290byBkcm9wOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCAwKTsKQEAgLTgxMiw3ICs4MTUsNyBAQAogCQlicmVhazsKIAl9CiAKLQlmcmVlX3BhZ2VzKGNtZC5yZXBseV9wYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJaXdsX2ZyZWVfcGFnZXMocHJpdiwgY21kLnJlcGx5X3BhZ2UpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTE5OCw5ICsxMjAxLDcgQEAKIAkJCXBjaV91bm1hcF9wYWdlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5wYWdlX2RtYSwKIAkJCQlQQUdFX1NJWkUgPDwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIsCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXByaXYtPmFsbG9jX3J4Yl9wYWdlLS07Ci0JCQlfX2ZyZWVfcGFnZXMocnhxLT5wb29sW2ldLnBhZ2UsCi0JCQkJICAgICBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7CisJCQlfX2l3bF9mcmVlX3BhZ2VzKHByaXYsIHJ4cS0+cG9vbFtpXS5wYWdlKTsKIAkJCXJ4cS0+cG9vbFtpXS5wYWdlID0gTlVMTDsKIAkJfQogCQlsaXN0X2FkZF90YWlsKCZyeHEtPnBvb2xbaV0ubGlzdCwgJnJ4cS0+cnhfdXNlZCk7CkBAIC0xMjQ3LDEwICsxMjQ4LDggQEAKIAkJCXBjaV91bm1hcF9wYWdlKHByaXYtPnBjaV9kZXYsIHJ4cS0+cG9vbFtpXS5wYWdlX2RtYSwKIAkJCQlQQUdFX1NJWkUgPDwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIsCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCV9fZnJlZV9wYWdlcyhyeHEtPnBvb2xbaV0ucGFnZSwKLQkJCQkgICAgIHByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyKTsKKwkJCV9faXdsX2ZyZWVfcGFnZXMocHJpdiwgcnhxLT5wb29sW2ldLnBhZ2UpOwogCQkJcnhxLT5wb29sW2ldLnBhZ2UgPSBOVUxMOwotCQkJcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIAkJfQogCX0KIApAQCAtMTMwMCw0NyArMTI5OSw2IEBACiAJcmV0dXJuIChpbnQpcmF0aW8yZEJbc2lnX3JhdGlvXTsKIH0KIAotI2RlZmluZSBQRVJGRUNUX1JTU0kgKC0yMCkgLyogZEJtICovCi0jZGVmaW5lIFdPUlNUX1JTU0kgKC05NSkgICAvKiBkQm0gKi8KLSNkZWZpbmUgUlNTSV9SQU5HRSAoUEVSRkVDVF9SU1NJIC0gV09SU1RfUlNTSSkKLQotLyogQ2FsY3VsYXRlIGFuIGluZGljYXRpb24gb2Ygcnggc2lnbmFsIHF1YWxpdHkgKGEgcGVyY2VudGFnZSwgbm90IGRCbSEpLgotICogU2VlIGh0dHA6Ly93d3cuY2VzLmNsZW1zb24uZWR1L2xpbnV4L3NpZ25hbF9xdWFsaXR5LnNodG1sIGZvciBpbmZvCi0gKiAgIGFib3V0IGZvcm11bGFzIHVzZWQgYmVsb3cuICovCi1pbnQgaXdsMzk0NV9jYWxjX3NpZ19xdWFsKGludCByc3NpX2RibSwgaW50IG5vaXNlX2RibSkKLXsKLQlpbnQgc2lnX3F1YWw7Ci0JaW50IGRlZ3JhZGF0aW9uID0gUEVSRkVDVF9SU1NJIC0gcnNzaV9kYm07Ci0KLQkvKiBJZiB3ZSBnZXQgYSBub2lzZSBtZWFzdXJlbWVudCwgdXNlIHNpZ25hbC10by1ub2lzZSByYXRpbyAoU05SKQotCSAqIGFzIGluZGljYXRvcjsgZm9ybXVsYSBpcyAoc2lnbmFsIGRibSAtIG5vaXNlIGRibSkuCi0JICogU05SIGF0IG9yIGFib3ZlIDQwIGlzIGEgZ3JlYXQgc2lnbmFsICgxMDAlKS4KLQkgKiBCZWxvdyB0aGF0LCBzY2FsZSB0byBmaXQgU05SIG9mIDAgLSA0MCBkQiB3aXRoaW4gMCAtIDEwMCUgaW5kaWNhdG9yLgotCSAqIFdlYWtlc3QgdXNhYmxlIHNpZ25hbCBpcyB1c3VhbGx5IDEwIC0gMTUgZEIgU05SLiAqLwotCWlmIChub2lzZV9kYm0pIHsKLQkJaWYgKHJzc2lfZGJtIC0gbm9pc2VfZGJtID49IDQwKQotCQkJcmV0dXJuIDEwMDsKLQkJZWxzZSBpZiAocnNzaV9kYm0gPCBub2lzZV9kYm0pCi0JCQlyZXR1cm4gMDsKLQkJc2lnX3F1YWwgPSAoKHJzc2lfZGJtIC0gbm9pc2VfZGJtKSAqIDUpIC8gMjsKLQotCS8qIEVsc2UgdXNlIGp1c3QgdGhlIHNpZ25hbCBsZXZlbC4KLQkgKiBUaGlzIGZvcm11bGEgaXMgYSBsZWFzdCBzcXVhcmVzIGZpdCBvZiBkYXRhIHBvaW50cyBjb2xsZWN0ZWQgYW5kCi0JICogICBjb21wYXJlZCB3aXRoIGEgcmVmZXJlbmNlIHN5c3RlbSB0aGF0IGhhZCBhIHBlcmNlbnRhZ2UgKCUpIGRpc3BsYXkKLQkgKiAgIGZvciBzaWduYWwgcXVhbGl0eS4gKi8KLQl9IGVsc2UKLQkJc2lnX3F1YWwgPSAoMTAwICogKFJTU0lfUkFOR0UgKiBSU1NJX1JBTkdFKSAtIGRlZ3JhZGF0aW9uICoKLQkJCSAgICAoMTUgKiBSU1NJX1JBTkdFICsgNjIgKiBkZWdyYWRhdGlvbikpIC8KLQkJCSAgIChSU1NJX1JBTkdFICogUlNTSV9SQU5HRSk7Ci0KLQlpZiAoc2lnX3F1YWwgPiAxMDApCi0JCXNpZ19xdWFsID0gMTAwOwotCWVsc2UgaWYgKHNpZ19xdWFsIDwgMSkKLQkJc2lnX3F1YWwgPSAwOwotCi0JcmV0dXJuIHNpZ19xdWFsOwotfQotCiAvKioKICAqIGl3bDM5NDVfcnhfaGFuZGxlIC0gTWFpbiBlbnRyeSBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIHJlc3BvbnNlcyBmcm9tIHVDb2RlCiAgKgpAQCAtMTY4OCw3ICsxNjQ2LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmICghKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfRldfRVJST1JTKSkKKwlpZiAoIShpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgJiYgIWZ1bGxfbG9nKQogCQlzaXplID0gKHNpemUgPiBERUZBVUxUX0lXTDM5NDVfRFVNUF9FVkVOVF9MT0dfRU5UUklFUykKIAkJCT8gREVGQVVMVF9JV0wzOTQ1X0RVTVBfRVZFTlRfTE9HX0VOVFJJRVMgOiBzaXplOwogI2Vsc2UKQEAgLTM4NjcsNyArMzgyNSw2IEBACiAJcHJpdi0+cmV0cnlfcmF0ZSA9IDE7CiAJcHJpdi0+aWJzc19iZWFjb24gPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5zdGFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmhjbWRfbG9jayk7CiAKQEAgLTM5MzYsOSArMzg5MywxMSBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQgfAotCQkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTOworCQkgICAgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoIXByaXYtPmNmZy0+YnJva2VuX3Bvd2Vyc2F2ZSkKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCQkgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTOwogCiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfApAQCAtNDA1NywxMCArNDAxNiwxMSBAQAogCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMHgwMCk7CiAKLQkvKiB0aGlzIHNwaW4gbG9jayB3aWxsIGJlIHVzZWQgaW4gYXBtX29wcy5pbml0IGFuZCBFRVBST00gYWNjZXNzCisJLyogdGhlc2Ugc3BpbiBsb2NrcyB3aWxsIGJlIHVzZWQgaW4gYXBtX29wcy5pbml0IGFuZCBFRVBST00gYWNjZXNzCiAJICogd2Ugc2hvdWxkIGluaXQgbm93CiAJICovCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJlZ19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA0LiBSZWFkIEVFUFJPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCmluZGV4IDVhMjZiYjAuLjg0MjgxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgcnhfdGlja2V0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3BhY2tldHNbSVdNX1JYX0lEX0hBU0hdOworCXN0cnVjdCBsaXN0X2hlYWQgcnhfcGFja2V0c1tJV01fUlhfSURfSEFTSCArIDFdOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyeF93cTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfd29ya2VyOwogCkBAIC0zNDksNyArMzQ5LDcgQEAKIGludCBpd21fZG93bihzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CiAKIC8qIFRYIEFQSSAqLwotdTE2IGl3bV90aWRfdG9fcXVldWUodTE2IHRpZCk7CitpbnQgaXdtX3RpZF90b19xdWV1ZSh1MTYgdGlkKTsKIHZvaWQgaXdtX3R4X2NyZWRpdF9pbmMoc3RydWN0IGl3bV9wcml2ICppd20sIGludCBpZCwgaW50IHRvdGFsX2ZyZWVkX3BhZ2VzKTsKIHZvaWQgaXdtX3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogaW50IGl3bV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jCmluZGV4IGU0ZjBmODcuLmM0YzBkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbmV0ZGV2LmMKQEAgLTc2LDcgKzc2LDcgQEAKICAqLwogc3RhdGljIGNvbnN0IHUxNiBpd21fMWRfdG9fcXVldWVbOF0gPSB7IDEsIDAsIDAsIDEsIDIsIDIsIDMsIDMgfTsKIAotdTE2IGl3bV90aWRfdG9fcXVldWUodTE2IHRpZCkKK2ludCBpd21fdGlkX3RvX3F1ZXVlKHUxNiB0aWQpCiB7CiAJaWYgKHRpZCA+IElXTV9VTUFDX1RJRF9OUiAtIDIpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCAxYzU3YzFmLi42ZDZlZDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAogCQlpZiAoIXN0b3ApIHsKIAkJCXN0cnVjdCBpd21fdHhfcXVldWUgKnR4cTsKLQkJCXUxNiBxdWV1ZSA9IGl3bV90aWRfdG9fcXVldWUoYml0KTsKKwkJCWludCBxdWV1ZSA9IGl3bV90aWRfdG9fcXVldWUoYml0KTsKIAogCQkJaWYgKHF1ZXVlIDwgMCkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggYjliMzcxYi4uNDI2MTFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTEzNjUsNyArMTM2NSw3IEBACiAJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9SRVNfUkVDRUlWRUQ7CiAKIAkvKiBJZiBub3RoaW5nIHRvIGRvLCBnbyBiYWNrIHRvIHNsZWVwICg/KSAqLwotCWlmICghX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykgJiYgIXByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkKKwlpZiAoIWtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykgJiYgIXByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkKIAkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX1NMRUVQOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTE0MzksNyArMTQzOSw3IEBACiAJfQogCiAJLyogUGVuZGluZyBldmVudHMgb3IgY29tbWFuZCByZXNwb25zZXM/ICovCi0JaWYgKF9fa2ZpZm9fbGVuKHByaXYtPmV2ZW50X2ZpZm8pIHx8IHByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkgeworCWlmIChrZmlmb19sZW4oJnByaXYtPmV2ZW50X2ZpZm8pIHx8IHByaXYtPnJlc3BfbGVuW3ByaXYtPnJlc3BfaWR4XSkgewogCQlhbGxvd2VkID0gMDsKIAkJbGJzX2RlYl9ob3N0KCJwZW5kaW5nIGV2ZW50cyBvciBjb21tYW5kIHJlc3BvbnNlc1xuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAppbmRleCA2YThkMmIyLi4wNWJiMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgInNjYW4uaCIKICNpbmNsdWRlICJhc3NvYy5oIgogCi0KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAvKiogc2xlZXBfcGFyYW1zICovCiBzdHJ1Y3Qgc2xlZXBfcGFyYW1zIHsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXUzMiByZXNwX2xlblsyXTsKIAogCS8qIEV2ZW50cyBzZW50IGZyb20gaGFyZHdhcmUgdG8gZHJpdmVyICovCi0Jc3RydWN0IGtmaWZvICpldmVudF9maWZvOworCXN0cnVjdCBrZmlmbyBldmVudF9maWZvOwogCiAJLyoqIHRocmVhZCB0byBzZXJ2aWNlIGludGVycnVwdHMgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1haW5fdGhyZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGRiMzhhNWEuLmMyOTc1YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQllbHNlIGlmICghbGlzdF9lbXB0eSgmcHJpdi0+Y21kcGVuZGluZ3EpICYmCiAJCQkJCSEocHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCkpCiAJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYSBjb21tYW5kIHRvIHNlbmQgKi8KLQkJZWxzZSBpZiAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykpCisJCWVsc2UgaWYgKGtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykpCiAJCQlzaG91bGRzbGVlcCA9IDA7CS8qIFdlIGhhdmUgYW4gZXZlbnQgdG8gcHJvY2VzcyAqLwogCQllbHNlCiAJCQlzaG91bGRzbGVlcCA9IDE7CS8qIE5vIGNvbW1hbmQgKi8KQEAgLTUxMSwxMCArNTExLDEzIEBACiAKIAkJLyogUHJvY2VzcyBoYXJkd2FyZSBldmVudHMsIGUuZy4gY2FyZCByZW1vdmVkLCBsaW5rIGxvc3QgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOwotCQl3aGlsZSAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykpIHsKKwkJd2hpbGUgKGtmaWZvX2xlbigmcHJpdi0+ZXZlbnRfZmlmbykpIHsKIAkJCXUzMiBldmVudDsKLQkJCV9fa2ZpZm9fZ2V0KHByaXYtPmV2ZW50X2ZpZm8sICh1bnNpZ25lZCBjaGFyICopICZldmVudCwKLQkJCQlzaXplb2YoZXZlbnQpKTsKKworCQkJaWYgKGtmaWZvX291dCgmcHJpdi0+ZXZlbnRfZmlmbywKKwkJCQkodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsIHNpemVvZihldmVudCkpICE9CisJCQkJc2l6ZW9mKGV2ZW50KSkKKwkJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKIAkJCWxic19wcm9jZXNzX2V2ZW50KHByaXYsIGV2ZW50KTsKIAkJCXNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsKQEAgLTg4MywxMCArODg2LDkgQEAKIAlwcml2LT5yZXNwX2xlblswXSA9IHByaXYtPnJlc3BfbGVuWzFdID0gMDsKIAogCS8qIENyZWF0ZSB0aGUgZXZlbnQgRklGTyAqLwotCXByaXYtPmV2ZW50X2ZpZm8gPSBrZmlmb19hbGxvYyhzaXplb2YodTMyKSAqIDE2LCBHRlBfS0VSTkVMLCBOVUxMKTsKLQlpZiAoSVNfRVJSKHByaXYtPmV2ZW50X2ZpZm8pKSB7CisJcmV0ID0ga2ZpZm9fYWxsb2MoJnByaXYtPmV2ZW50X2ZpZm8sIHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKIAkJbGJzX3ByX2VycigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGV2ZW50IEZJRk8gYnVmZmVyXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC05MDEsOCArOTAzLDcgQEAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7CiAKIAlsYnNfZnJlZV9jbWRfYnVmZmVyKHByaXYpOwotCWlmIChwcml2LT5ldmVudF9maWZvKQotCQlrZmlmb19mcmVlKHByaXYtPmV2ZW50X2ZpZm8pOworCWtmaWZvX2ZyZWUoJnByaXYtPmV2ZW50X2ZpZm8pOwogCWRlbF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lcik7CiAJZGVsX3RpbWVyKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lcik7CiAJa2ZyZWUocHJpdi0+bmV0d29ya3MpOwpAQCAtMTE3Nyw3ICsxMTc4LDcgQEAKIAlpZiAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9TTEVFUCkKIAkJcHJpdi0+cHNzdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOwogCi0JX19rZmlmb19wdXQocHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LCBzaXplb2YodTMyKSk7CisJa2ZpZm9faW4oJnByaXYtPmV2ZW50X2ZpZm8sICh1bnNpZ25lZCBjaGFyICopICZldmVudCwgc2l6ZW9mKHUzMikpOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0cSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYwppbmRleCAyZjkxYzliLi45MmI3YTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgpAQCAtMzUxLDggKzM1Miw3IEBACiAKIAltZXNoX2Rldi0+bmV0ZGV2X29wcyA9ICZtZXNoX25ldGRldl9vcHM7CiAJbWVzaF9kZXYtPmV0aHRvb2xfb3BzID0gJmxic19ldGh0b29sX29wczsKLQltZW1jcHkobWVzaF9kZXYtPmRldl9hZGRyLCBwcml2LT5kZXYtPmRldl9hZGRyLAotCQkJc2l6ZW9mKHByaXYtPmRldi0+ZGV2X2FkZHIpKTsKKwltZW1jcHkobWVzaF9kZXYtPmRldl9hZGRyLCBwcml2LT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKIAlTRVRfTkVUREVWX0RFVihwcml2LT5tZXNoX2RldiwgcHJpdi0+ZGV2LT5kZXYucGFyZW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCmluZGV4IGM2YTZjMDQuLmIwYjFjNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKQEAgLTU2NywxMSArNTY3LDggQEAKIAljaGFuX2NvdW50ID0gbGJzX3NjYW5fY3JlYXRlX2NoYW5uZWxfbGlzdChwcml2LCBjaGFuX2xpc3QpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPmRldik7Ci0JaWYgKHByaXYtPm1lc2hfZGV2KSB7CisJaWYgKHByaXYtPm1lc2hfZGV2KQogCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKLQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bWVzaF9kZXYpOwotCX0KIAogCS8qIFByZXBhcmUgdG8gY29udGludWUgYW4gaW50ZXJydXB0ZWQgc2NhbiAqLwogCWxic19kZWJfc2NhbigiY2hhbl9jb3VudCAlZCwgc2Nhbl9jaGFubmVsICVkXG4iLApAQCAtNjM1LDE2ICs2MzIsMTMgQEAKIAlwcml2LT5zY2FuX2NoYW5uZWwgPSAwOwogCiBvdXQ6Ci0JaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5kZXYpOwotCQlpZiAoIXByaXYtPnR4X3BlbmRpbmdfbGVuKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwotCX0KLQlpZiAocHJpdi0+bWVzaF9kZXYgJiYgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5tZXNoX2Rldik7Ci0JCWlmICghcHJpdi0+dHhfcGVuZGluZ19sZW4pCi0JCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKLQl9CisJaWYgKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQgJiYgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CisKKwlpZiAocHJpdi0+bWVzaF9kZXYgJiYgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgJiYKKwkgICAgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKKwogCWtmcmVlKGNoYW5fbGlzdCk7CiAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TQ0FOLCAicmV0ICVkIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCBhOGViOWUxLi40YjFhYWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCkBAIC0yMDI1LDEwICsyMDI1LDggQEAKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkgewogCQltZW1jcHkoZXh0cmEsIHByaXYtPmN1cmJzc3BhcmFtcy5zc2lkLAogCQkgICAgICAgcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuKTsKLQkJZXh0cmFbcHJpdi0+Y3VyYnNzcGFyYW1zLnNzaWRfbGVuXSA9ICdcMCc7CiAJfSBlbHNlIHsKIAkJbWVtc2V0KGV4dHJhLCAwLCAzMik7Ci0JCWV4dHJhW3ByaXYtPmN1cmJzc3BhcmFtcy5zc2lkX2xlbl0gPSAnXDAnOwogCX0KIAkvKgogCSAqIElmIG5vbmUsIHdlIG1heSB3YW50IHRvIGdldCB0aGUgb25lIHRoYXQgd2FzIHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCmluZGV4IDAxOTQzMWQuLjI2YTFhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKQEAgLTQ5NSw3ICs0OTUsNiBAQAogCXN0YXRzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCXN0YXRzLnNpZ25hbCA9IHByeHBkLT5zbnI7CiAJc3RhdHMubm9pc2UgPSBwcnhwZC0+bmY7Ci0Jc3RhdHMucXVhbCA9IHByeHBkLT5zbnIgLSBwcnhwZC0+bmY7CiAJLyogTWFydmVsbCByYXRlIGluZGV4IGhhcyBhIGhvbGUgYXQgdmFsdWUgNCAqLwogCWlmIChwcnhwZC0+cnhfcmF0ZSA+IDQpCiAJCS0tcHJ4cGQtPnJ4X3JhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCmluZGV4IDc2OThmZGQuLjMxY2EyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKIAogLyogSGVscGVyIHJvdXRpbmUgdG8gcmVjb3JkIGtleXMKLSAqIERvIG5vdCBjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKyAqIEl0IGlzIGNhbGxlZCB1bmRlciBvcmlub2NvX2xvY2sgc28gaXQgbWF5IG5vdCBzbGVlcCAqLwogc3RhdGljIGludCBvcmlub2NvX3NldF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGluZGV4LAogCQkJICAgZW51bSBvcmlub2NvX2FsZyBhbGcsIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLAogCQkJICAgY29uc3QgdTggKnNlcSwgaW50IHNlcV9sZW4pCkBAIC0zMiwxNCArMzIsMTQgQEAKIAlremZyZWUocHJpdi0+a2V5c1tpbmRleF0uc2VxKTsKIAogCWlmIChrZXlfbGVuKSB7Ci0JCXByaXYtPmtleXNbaW5kZXhdLmtleSA9IGt6YWxsb2Moa2V5X2xlbiwgR0ZQX0tFUk5FTCk7CisJCXByaXYtPmtleXNbaW5kZXhdLmtleSA9IGt6YWxsb2Moa2V5X2xlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghcHJpdi0+a2V5c1tpbmRleF0ua2V5KQogCQkJZ290byBub21lbTsKIAl9IGVsc2UKIAkJcHJpdi0+a2V5c1tpbmRleF0ua2V5ID0gTlVMTDsKIAogCWlmIChzZXFfbGVuKSB7Ci0JCXByaXYtPmtleXNbaW5kZXhdLnNlcSA9IGt6YWxsb2Moc2VxX2xlbiwgR0ZQX0tFUk5FTCk7CisJCXByaXYtPmtleXNbaW5kZXhdLnNlcSA9IGt6YWxsb2Moc2VxX2xlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghcHJpdi0+a2V5c1tpbmRleF0uc2VxKQogCQkJZ290byBmcmVlX2tleTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAppbmRleCBjNWZlODY3Li4xYTdlYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCkBAIC0xMzIzLDcgKzEzMjMsNyBAQAogI2RlZmluZSBQQUlSV0lTRV9LRVlfRU5UUlkoX19pZHgpIFwKIAkoIFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2Yoc3RydWN0IGh3X2tleV9lbnRyeSkpICkKICNkZWZpbmUgTUFDX0lWRUlWX0VOVFJZKF9faWR4KSBcCi0JKCBNQUNfSVZFSVZfVEFCTEVfQkFTRSArICgoX19pZHgpICYgc2l6ZW9mKHN0cnVjdCBtYWNfaXZlaXZfZW50cnkpKSApCisJKCBNQUNfSVZFSVZfVEFCTEVfQkFTRSArICgoX19pZHgpICogc2l6ZW9mKHN0cnVjdCBtYWNfaXZlaXZfZW50cnkpKSApCiAjZGVmaW5lIE1BQ19XQ0lEX0FUVFJfRU5UUlkoX19pZHgpIFwKIAkoIE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2YodTMyKSkgKQogI2RlZmluZSBTSEFSRURfS0VZX0VOVFJZKF9faWR4KSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggZWIxZTFkMC4uMjdiZjg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCi0jaWZkZWYgQ09ORklHX1JUMjgwMFVTQgorI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKICNpbmNsdWRlICJydDJ4MDB1c2IuaCIKICNlbmRpZgogI2luY2x1ZGUgInJ0MjgwMGxpYi5oIgpAQCAtMTEyMSw3ICsxMTIxLDcgQEAKIAogCWlmIChydDJ4MDBfaW50Zl9pc191c2IocnQyeDAwZGV2KSkgewogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7Ci0jaWZkZWYgQ09ORklHX1JUMjgwMFVTQgorI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKIAkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAogCQkJCQkgICAgVVNCX01PREVfUkVTRVQsIFJFR0lTVEVSX1RJTUVPVVQpOwogI2VuZGlmCkBAIC0yMDIyLDYgKzIwMjIsMTIgQEAKIAl1MTYgZWVwcm9tOwogCiAJLyoKKwkgKiBEaXNhYmxlIHBvd2Vyc2F2aW5nIGFzIGRlZmF1bHQgb24gUENJIGRldmljZXMuCisJICovCisJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCQlydDJ4MDBkZXYtPmh3LT53aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDsKKworCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgaHcgZmllbGRzLgogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KQEAgLTIwNzQsOCArMjA4MCw3IEBACiAJICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwKIAkgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAogCSAgICBJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkMgfAotCSAgICBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkMgfAotCSAgICBJRUVFODAyMTFfSFRfQ0FQX1BTTVBfU1VQUE9SVDsKKwkgICAgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDOwogCXNwZWMtPmh0LmFtcGR1X2ZhY3RvciA9IDM7CiAJc3BlYy0+aHQuYW1wZHVfZGVuc2l0eSA9IDQ7CiAJc3BlYy0+aHQubWNzLnR4X3BhcmFtcyA9CkBAIC0yMTQwLDggKzIxNDUsOCBAQAogCXJ0MjgwMF9yZWdpc3Rlcl9tdWx0aXJlYWQocnQyeDAwZGV2LCBvZmZzZXQsCiAJCQkJICAgICAgJml2ZWl2X2VudHJ5LCBzaXplb2YoaXZlaXZfZW50cnkpKTsKIAotCW1lbWNweSgmaXZlaXZfZW50cnkuaXZbMF0sIGl2MTYsIHNpemVvZihpdjE2KSk7Ci0JbWVtY3B5KCZpdmVpdl9lbnRyeS5pdls0XSwgaXYzMiwgc2l6ZW9mKGl2MzIpKTsKKwltZW1jcHkoaXYxNiwgJml2ZWl2X2VudHJ5Lml2WzBdLCBzaXplb2YoKml2MTYpKTsKKwltZW1jcHkoaXYzMiwgJml2ZWl2X2VudHJ5Lml2WzRdLCBzaXplb2YoKml2MzIpKTsKIH0KIAogc3RhdGljIGludCBydDI4MDBfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwppbmRleCBhZjg1ZDE4Li5hYjk1MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCkBAIC05MjIsNiArOTIyLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTG9naXRlYyAqLwogCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA2ODdlMTdkLi4wY2E1ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTI1MzksNiArMjUzOSwxMSBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJLyoKKwkgKiBEaXNhYmxlIHBvd2Vyc2F2aW5nIGFzIGRlZmF1bHQuCisJICovCisJcnQyeDAwZGV2LT5ody0+d2lwaHktPmZsYWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CisKKwkvKgogCSAqIEluaXRpYWxpemUgYWxsIGh3IGZpZWxkcy4KIAkgKi8KIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKaW5kZXggYTFhM2RkMS4uOGE0MGExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYwpAQCAtMTMyLDcgKzEzMiw2IEBACiAKIAkJCXJ4X3N0YXR1cy5hbnRlbm5hID0gKGZsYWdzMiA+PiAxNSkgJiAxOwogCQkJLyogVE9ETzogaW1wcm92ZSBzaWduYWwvcnNzaSByZXBvcnRpbmcgKi8KLQkJCXJ4X3N0YXR1cy5xdWFsID0gZmxhZ3MyICYgMHhGRjsKIAkJCXJ4X3N0YXR1cy5zaWduYWwgPSAoZmxhZ3MyID4+IDgpICYgMHg3RjsKIAkJCS8qIFhYWDogaXMgdGhpcyBjb3JyZWN0PyAqLwogCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gKGZsYWdzID4+IDIwKSAmIDB4RjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYm9vdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMKaW5kZXggMmU3MzNlNy4uMjhhODA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQl9CiAJfQogCi0JaWYgKGxvb3AgPj0gSU5JVF9MT09QKSB7CisJaWYgKGxvb3AgPiBJTklUX0xPT1ApIHsKIAkJd2wxMjUxX2Vycm9yKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSBoYXJkd2FyZSB0byAiCiAJCQkgICAgICJjb21wbGV0ZSBpbml0aWFsaXphdGlvbiIpOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCmluZGV4IDg4NmE5YmMuLmMzMzg1YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMsIHU4IGJhbmQpCitzdGF0aWMgaW50IHdsMTI3MV9idWlsZF9iYXNpY19yYXRlcyh1OCAqcmF0ZXMsIHU4IGJhbmQpCiB7CiAJdTggaW5kZXggPSAwOwogCkBAIC04MDQsNyArODA0LDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjcxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzLCB1OCBiYW5kKQorc3RhdGljIGludCB3bDEyNzFfYnVpbGRfZXh0ZW5kZWRfcmF0ZXModTggKnJhdGVzLCB1OCBiYW5kKQogewogCXU4IGluZGV4ID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGRmYTFiOWJjLi43Y2E5NWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCkBAIC0xMzI1LDE1MSArMTMyNSwxMSBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IG9mZG1fcXVhbF9kYih1OCBzdGF0dXNfcXVhbGl0eSwgdTggemRfcmF0ZSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0Jc3RhdGljIGNvbnN0IHUxNiBjb25zdGFudHNbXSA9IHsKLQkJNzE1LCA2NTUsIDU4NSwgNTQwLCA0NzAsIDQxMCwgMzYwLCAzMTUsCi0JCTI3MCwgMjM1LCAyMDUsIDE3NSwgMTUwLCAxMjUsIDEwNSwgIDg1LAotCQkgNjUsICA1MCwgIDQwLCAgMjUsICAxNQotCX07Ci0KLQlpbnQgaTsKLQl1MzIgeDsKLQotCS8qIEl0IHNlZW1zIHRoYXQgdGhlaXIgcXVhbGl0eSBwYXJhbWV0ZXIgaXMgc29tZWhvdyBwZXIgc2lnbmFsCi0JICogYW5kIGlzIG5vdyB0cmFuc2ZlcnJlZCBwZXIgYml0LgotCSAqLwotCXN3aXRjaCAoemRfcmF0ZSkgewotCWNhc2UgWkRfT0ZETV9SQVRFXzZNOgotCWNhc2UgWkRfT0ZETV9SQVRFXzEyTToKLQljYXNlIFpEX09GRE1fUkFURV8yNE06Ci0JCXNpemUgKj0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBaRF9PRkRNX1JBVEVfOU06Ci0JY2FzZSBaRF9PRkRNX1JBVEVfMThNOgotCWNhc2UgWkRfT0ZETV9SQVRFXzM2TToKLQljYXNlIFpEX09GRE1fUkFURV81NE06Ci0JCXNpemUgKj0gNDsKLQkJc2l6ZSAvPSAzOwotCQlicmVhazsKLQljYXNlIFpEX09GRE1fUkFURV80OE06Ci0JCXNpemUgKj0gMzsKLQkJc2l6ZSAvPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl4ID0gKDEwMDAwICogc3RhdHVzX3F1YWxpdHkpL3NpemU7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29uc3RhbnRzKTsgaSsrKSB7Ci0JCWlmICh4ID4gY29uc3RhbnRzW2ldKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoICh6ZF9yYXRlKSB7Ci0JY2FzZSBaRF9PRkRNX1JBVEVfNk06Ci0JY2FzZSBaRF9PRkRNX1JBVEVfOU06Ci0JCWkgKz0gMzsKLQkJYnJlYWs7Ci0JY2FzZSBaRF9PRkRNX1JBVEVfMTJNOgotCWNhc2UgWkRfT0ZETV9SQVRFXzE4TToKLQkJaSArPSA1OwotCQlicmVhazsKLQljYXNlIFpEX09GRE1fUkFURV8yNE06Ci0JY2FzZSBaRF9PRkRNX1JBVEVfMzZNOgotCQlpICs9IDk7Ci0JCWJyZWFrOwotCWNhc2UgWkRfT0ZETV9SQVRFXzQ4TToKLQljYXNlIFpEX09GRE1fUkFURV81NE06Ci0JCWkgKz0gMTU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBpOwotfQotCi1zdGF0aWMgaW50IG9mZG1fcXVhbF9wZXJjZW50KHU4IHN0YXR1c19xdWFsaXR5LCB1OCB6ZF9yYXRlLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlpbnQgcjsKLQotCXIgPSBvZmRtX3F1YWxfZGIoc3RhdHVzX3F1YWxpdHksIHpkX3JhdGUsIHNpemUpOwotCVpEX0FTU0VSVChyID49IDApOwotCWlmIChyIDwgMCkKLQkJciA9IDA7Ci0KLQlyID0gKHIgKiAxMDApLzI5OwotCXJldHVybiByIDw9IDEwMCA/IHIgOiAxMDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9nMTB0aW1lczEwMCh1bnNpZ25lZCBpbnQgeCkKLXsKLQlzdGF0aWMgY29uc3QgdTggbG9nMTBbXSA9IHsKLQkJICAwLAotCQkgIDAsICAgMzAsICAgNDcsICAgNjAsICAgNjksICAgNzcsICAgODQsICAgOTAsICAgOTUsICAxMDAsCi0JCTEwNCwgIDEwNywgIDExMSwgIDExNCwgIDExNywgIDEyMCwgIDEyMywgIDEyNSwgIDEyNywgIDEzMCwKLQkJMTMyLCAgMTM0LCAgMTM2LCAgMTM4LCAgMTM5LCAgMTQxLCAgMTQzLCAgMTQ0LCAgMTQ2LCAgMTQ3LAotCQkxNDksICAxNTAsICAxNTEsICAxNTMsICAxNTQsICAxNTUsICAxNTYsICAxNTcsICAxNTksICAxNjAsCi0JCTE2MSwgIDE2MiwgIDE2MywgIDE2NCwgIDE2NSwgIDE2NiwgIDE2NywgIDE2OCwgIDE2OSwgIDE2OSwKLQkJMTcwLCAgMTcxLCAgMTcyLCAgMTczLCAgMTc0LCAgMTc0LCAgMTc1LCAgMTc2LCAgMTc3LCAgMTc3LAotCQkxNzgsICAxNzksICAxNzksICAxODAsICAxODEsICAxODEsICAxODIsICAxODMsICAxODMsICAxODQsCi0JCTE4NSwgIDE4NSwgIDE4NiwgIDE4NiwgIDE4NywgIDE4OCwgIDE4OCwgIDE4OSwgIDE4OSwgIDE5MCwKLQkJMTkwLCAgMTkxLCAgMTkxLCAgMTkyLCAgMTkyLCAgMTkzLCAgMTkzLCAgMTk0LCAgMTk0LCAgMTk1LAotCQkxOTUsICAxOTYsICAxOTYsICAxOTcsICAxOTcsICAxOTgsICAxOTgsICAxOTksICAxOTksICAyMDAsCi0JCTIwMCwgIDIwMCwgIDIwMSwgIDIwMSwgIDIwMiwgIDIwMiwgIDIwMiwgIDIwMywgIDIwMywgIDIwNCwKLQkJMjA0LCAgMjA0LCAgMjA1LCAgMjA1LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LAotCQkyMDgsICAyMDgsICAyMDgsICAyMDksICAyMDksICAyMTAsICAyMTAsICAyMTAsICAyMTEsICAyMTEsCi0JCTIxMSwgIDIxMiwgIDIxMiwgIDIxMiwgIDIxMywgIDIxMywgIDIxMywgIDIxMywgIDIxNCwgIDIxNCwKLQkJMjE0LCAgMjE1LCAgMjE1LCAgMjE1LCAgMjE2LCAgMjE2LCAgMjE2LCAgMjE3LCAgMjE3LCAgMjE3LAotCQkyMTcsICAyMTgsICAyMTgsICAyMTgsICAyMTksICAyMTksICAyMTksICAyMTksICAyMjAsICAyMjAsCi0JCTIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMywKLQkJMjIzLCAgMjIzLCAgMjIzLCAgMjI0LCAgMjI0LCAgMjI0LCAgMjI0LAotCX07Ci0KLQlyZXR1cm4geCA8IEFSUkFZX1NJWkUobG9nMTApID8gbG9nMTBbeF0gOiAyMjU7Ci19Ci0KLWVudW0gewotCU1BWF9DQ0tfRVZNX0RCID0gNDUsCi19OwotCi1zdGF0aWMgaW50IGNja19ldm1fZGIodTggc3RhdHVzX3F1YWxpdHkpCi17Ci0JcmV0dXJuICgyMCAqIGxvZzEwdGltZXMxMDAoc3RhdHVzX3F1YWxpdHkpKSAvIDEwMDsKLX0KLQotc3RhdGljIGludCBjY2tfc25yX2RiKHU4IHN0YXR1c19xdWFsaXR5KQotewotCWludCByID0gTUFYX0NDS19FVk1fREIgLSBjY2tfZXZtX2RiKHN0YXR1c19xdWFsaXR5KTsKLQlaRF9BU1NFUlQociA+PSAwKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBjY2tfcXVhbF9wZXJjZW50KHU4IHN0YXR1c19xdWFsaXR5KQotewotCWludCByOwotCi0JciA9IGNja19zbnJfZGIoc3RhdHVzX3F1YWxpdHkpOwotCXIgPSAoMTAwKnIpLzE3OwotCXJldHVybiByIDw9IDEwMCA/IHIgOiAxMDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTggemRfcmF0ZV9mcm9tX29mZG1fcGxjcF9oZWFkZXIoY29uc3Qgdm9pZCAqcnhfZnJhbWUpCiB7CiAJcmV0dXJuIFpEX09GRE0gfCB6ZF9vZmRtX3BsY3BfaGVhZGVyX3JhdGUocnhfZnJhbWUpOwogfQogCi11OCB6ZF9yeF9xdWFsX3BlcmNlbnQoY29uc3Qgdm9pZCAqcnhfZnJhbWUsIHVuc2lnbmVkIGludCBzaXplLAotCSAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKQotewotCXJldHVybiAoc3RhdHVzLT5mcmFtZV9zdGF0dXMmWkRfUlhfT0ZETSkgPwotCQlvZmRtX3F1YWxfcGVyY2VudChzdGF0dXMtPnNpZ25hbF9xdWFsaXR5X29mZG0sCi0JCQkJICB6ZF9yYXRlX2Zyb21fb2ZkbV9wbGNwX2hlYWRlcihyeF9mcmFtZSksCi0JCQkgICAgICAgICAgc2l6ZSkgOgotCQljY2tfcXVhbF9wZXJjZW50KHN0YXR1cy0+c2lnbmFsX3F1YWxpdHlfY2NrKTsKLX0KLQogLyoqCiAgKiB6ZF9yeF9yYXRlIC0gcmVwb3J0IHpkLXJhdGUKICAqIEByeF9mcmFtZSAtIHJlY2VpdmVkIGZyYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKaW5kZXggOWZkOGYzNS4uZjhiYmY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaApAQCAtOTI5LDkgKzkyOSw2IEBACiAKIHN0cnVjdCByeF9zdGF0dXM7CiAKLXU4IHpkX3J4X3F1YWxfcGVyY2VudChjb25zdCB2b2lkICpyeF9mcmFtZSwgdW5zaWduZWQgaW50IHNpemUsCi0JICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKTsKLQogdTggemRfcnhfcmF0ZShjb25zdCB2b2lkICpyeF9mcmFtZSwgY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKTsKIAogc3RydWN0IHpkX21jX2hhc2ggewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwppbmRleCBjZjUxZThmLi44ZWJmNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwpAQCAtODI4LDkgKzgyOCw2IEBACiAJc3RhdHMuZnJlcSA9IHpkX2NoYW5uZWxzW196ZF9jaGlwX2dldF9jaGFubmVsKCZtYWMtPmNoaXApIC0gMV0uY2VudGVyX2ZyZXE7CiAJc3RhdHMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJc3RhdHMuc2lnbmFsID0gc3RhdHVzLT5zaWduYWxfc3RyZW5ndGg7Ci0Jc3RhdHMucXVhbCA9IHpkX3J4X3F1YWxfcGVyY2VudChidWZmZXIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CiAKIAlyYXRlID0gemRfcnhfcmF0ZShidWZmZXIsIHN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCmluZGV4IGJkNTg4ZWIuLjhlMjEwY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9HT0xBTV83NDUwCTB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9QT0dPXzc0NTgJMHg3NDU4CiAKLS8qIEFNRCBQQ0lYIGJyaWRnZSByZWdpc3RlcnMgKi8KKy8qIEFNRCBQQ0ktWCBicmlkZ2UgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSVhfTUVNX0JBU0VfTElNSVRfT0ZGU0VUCTB4MUMKICNkZWZpbmUgUENJWF9NSVNDSUlfT0ZGU0VUCQkweDQ4CiAjZGVmaW5lIFBDSVhfTUlTQ19CUklER0VfRVJST1JTX09GRlNFVAkweDgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBlNTZmOWJlLi40MTczMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCWludCBzZWdtZW50OwkJLyogUENJIGRvbWFpbiAqLwogCXU4IGJ1czsJCQkvKiBQQ0kgYnVzIG51bWJlciAqLwogCXU4IGRldmZuOwkJLyogUENJIGRldmZuIG51bWJlciAqLwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7IC8qIGl0J3MgTlVMTCBmb3IgUENJRS10by1QQ0kgYnJpZGdlICovCisJc3RydWN0IHBjaV9kZXYgKmRldjsgLyogaXQncyBOVUxMIGZvciBQQ0llLXRvLVBDSSBicmlkZ2UgKi8KIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OyAvKiBJT01NVSB1c2VkIGJ5IHRoaXMgZGV2aWNlICovCiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47IC8qIHBvaW50ZXIgdG8gZG9tYWluICovCiB9OwpAQCAtMTYwNCw3ICsxNjA0LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJCXBhcmVudCA9IHBhcmVudC0+YnVzLT5zZWxmOwogCX0KLQlpZiAocGNpX2lzX3BjaWUodG1wKSkgLyogdGhpcyBpcyBhIFBDSUUtdG8tUENJIGJyaWRnZSAqLworCWlmIChwY2lfaXNfcGNpZSh0bXApKSAvKiB0aGlzIGlzIGEgUENJZS10by1QQ0kgYnJpZGdlICovCiAJCXJldHVybiBkb21haW5fY29udGV4dF9tYXBwaW5nX29uZShkb21haW4sCiAJCQkJCXBjaV9kb21haW5fbnIodG1wLT5zdWJvcmRpbmF0ZSksCiAJCQkJCXRtcC0+c3Vib3JkaW5hdGUtPm51bWJlciwgMCwKQEAgLTMzMjUsNyArMzMyNSw3IEBACiAJCQkJCSBwYXJlbnQtPmRldmZuKTsKIAkJCXBhcmVudCA9IHBhcmVudC0+YnVzLT5zZWxmOwogCQl9Ci0JCWlmIChwY2lfaXNfcGNpZSh0bXApKSAvKiB0aGlzIGlzIGEgUENJRS10by1QQ0kgYnJpZGdlICovCisJCWlmIChwY2lfaXNfcGNpZSh0bXApKSAvKiB0aGlzIGlzIGEgUENJZS10by1QQ0kgYnJpZGdlICovCiAJCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LAogCQkJCXRtcC0+c3Vib3JkaW5hdGUtPm51bWJlciwgMCk7CiAJCWVsc2UgLyogdGhpcyBpcyBhIGxlZ2FjeSBQQ0kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA4YjY1YTQ4Li45NWI4NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiAJYnJpZGdlID0gcGNpX2ZpbmRfdXBzdHJlYW1fcGNpZV9icmlkZ2UoZGV2KTsKIAlpZiAoYnJpZGdlKSB7Ci0JCWlmIChwY2lfaXNfcGNpZShicmlkZ2UpKS8qIHRoaXMgaXMgYSBQQ0lFLXRvLVBDSS9QQ0lYIGJyaWRnZSAqLworCQlpZiAocGNpX2lzX3BjaWUoYnJpZGdlKSkvKiB0aGlzIGlzIGEgUENJZS10by1QQ0kvUENJWCBicmlkZ2UgKi8KIAkJCXNldF9pcnRlX3NpZChpcnRlLCBTVlRfVkVSSUZZX0JVUywgU1FfQUxMXzE2LAogCQkJCShicmlkZ2UtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgZGV2LT5idXMtPm51bWJlcik7CiAJCWVsc2UgLyogdGhpcyBpcyBhIGxlZ2FjeSBQQ0kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCBjYzYxN2RkLi43ZTI4Mjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTExMiwxMSArMTEyLDcgQEAKIHN0YXRpYyB2b2lkIGFjcGlfcGNpX3Byb3BhZ2F0ZV93YWtldXBfZW5hYmxlKHN0cnVjdCBwY2lfYnVzICpidXMsIGJvb2wgZW5hYmxlKQogewogCXdoaWxlIChidXMtPnBhcmVudCkgewotCQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwotCQlpbnQgcmV0OwotCi0JCXJldCA9IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3dha2UoJmJyaWRnZS0+ZGV2LCBlbmFibGUpOwotCQlpZiAoIXJldCB8fCBwY2lfaXNfcGNpZShicmlkZ2UpKQorCQlpZiAoIWFjcGlfcG1fZGV2aWNlX3NsZWVwX3dha2UoJmJ1cy0+c2VsZi0+ZGV2LCBlbmFibGUpKQogCQkJcmV0dXJuOwogCQlidXMgPSBidXMtPnBhcmVudDsKIAl9CkBAIC0xMzEsOSArMTI3LDcgQEAKIAlpZiAoYWNwaV9wY2lfY2FuX3dha2V1cChkZXYpKQogCQlyZXR1cm4gYWNwaV9wbV9kZXZpY2Vfc2xlZXBfd2FrZSgmZGV2LT5kZXYsIGVuYWJsZSk7CiAKLQlpZiAoIXBjaV9pc19wY2llKGRldikpCi0JCWFjcGlfcGNpX3Byb3BhZ2F0ZV93YWtldXBfZW5hYmxlKGRldi0+YnVzLCBlbmFibGUpOwotCisJYWNwaV9wY2lfcHJvcGFnYXRlX3dha2V1cF9lbmFibGUoZGV2LT5idXMsIGVuYWJsZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggYzVkZjk0ZS4uODA3MjI0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTc1LDcgKzc1LDggQEAKIAlpbnQgbGVuOwogCiAjaWZkZWYgQ09ORklHX05VTUEKLQltYXNrID0gY3B1bWFza19vZl9ub2RlKGRldl90b19ub2RlKGRldikpOworCW1hc2sgPSAoZGV2X3RvX25vZGUoZGV2KSA9PSAtMSkgPyBjcHVfb25saW5lX21hc2sgOgorCQkJCQkgIGNwdW1hc2tfb2Zfbm9kZShkZXZfdG9fbm9kZShkZXYpKTsKICNlbHNlCiAJbWFzayA9IGNwdW1hc2tfb2ZfcGNpYnVzKHRvX3BjaV9kZXYoZGV2KS0+YnVzKTsKICNlbmRpZgpAQCAtOTMsNyArOTQsOCBAQAogCWludCBsZW47CiAKICNpZmRlZiBDT05GSUdfTlVNQQotCW1hc2sgPSBjcHVtYXNrX29mX25vZGUoZGV2X3RvX25vZGUoZGV2KSk7CisJbWFzayA9IChkZXZfdG9fbm9kZShkZXYpID09IC0xKSA/IGNwdV9vbmxpbmVfbWFzayA6CisJCQkJCSAgY3B1bWFza19vZl9ub2RlKGRldl90b19ub2RlKGRldikpOwogI2Vsc2UKIAltYXNrID0gY3B1bWFza19vZl9wY2lidXModG9fcGNpX2RldihkZXYpLT5idXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDBiYzI3ZTAuLjMxNWZlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0yOSw3ICsyOSwxNyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wb3dlcl9uYW1lcyk7CiAKLXVuc2lnbmVkIGludCBwY2lfcG1fZDNfZGVsYXkgPSBQQ0lfUE1fRDNfV0FJVDsKK3Vuc2lnbmVkIGludCBwY2lfcG1fZDNfZGVsYXk7CisKK3N0YXRpYyB2b2lkIHBjaV9kZXZfZDNfc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgZGVsYXkgPSBkZXYtPmQzX2RlbGF5OworCisJaWYgKGRlbGF5IDwgcGNpX3BtX2QzX2RlbGF5KQorCQlkZWxheSA9IHBjaV9wbV9kM19kZWxheTsKKworCW1zbGVlcChkZWxheSk7Cit9CiAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxOwpAQCAtNTIyLDcgKzUzMiw3IEBACiAJLyogTWFuZGF0b3J5IHBvd2VyIG1hbmFnZW1lbnQgdHJhbnNpdGlvbiBkZWxheXMgKi8KIAkvKiBzZWUgUENJIFBNIDEuMSA1LjYuMSB0YWJsZSAxOCAqLwogCWlmIChzdGF0ZSA9PSBQQ0lfRDNob3QgfHwgZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9EM2hvdCkKLQkJbXNsZWVwKHBjaV9wbV9kM19kZWxheSk7CisJCXBjaV9kZXZfZDNfc2xlZXAoZGV2KTsKIAllbHNlIGlmIChzdGF0ZSA9PSBQQ0lfRDIgfHwgZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9EMikKIAkJdWRlbGF5KFBDSV9QTV9EMl9ERUxBWSk7CiAKQEAgLTExNTMsMTEgKzExNjMsMTEgQEAKIAogLyoqCiAgKiBwY2liaW9zX3NldF9wY2llX3Jlc2V0X3N0YXRlIC0gc2V0IHJlc2V0IHN0YXRlIGZvciBkZXZpY2UgZGV2Ci0gKiBAZGV2OiB0aGUgUENJLUUgZGV2aWNlIHJlc2V0CisgKiBAZGV2OiB0aGUgUENJZSBkZXZpY2UgcmVzZXQKICAqIEBzdGF0ZTogUmVzZXQgc3RhdGUgdG8gZW50ZXIgaW50bwogICoKICAqCi0gKiBTZXRzIHRoZSBQQ0ktRSByZXNldCBzdGF0ZSBmb3IgdGhlIGRldmljZS4gVGhpcyBpcyB0aGUgZGVmYXVsdAorICogU2V0cyB0aGUgUENJZSByZXNldCBzdGF0ZSBmb3IgdGhlIGRldmljZS4gVGhpcyBpcyB0aGUgZGVmYXVsdAogICogaW1wbGVtZW50YXRpb24uIEFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbnMgY2FuIG92ZXJyaWRlIHRoaXMuCiAgKi8KIGludCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIHBjaWJpb3Nfc2V0X3BjaWVfcmVzZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTExNjgsNyArMTE3OCw3IEBACiAKIC8qKgogICogcGNpX3NldF9wY2llX3Jlc2V0X3N0YXRlIC0gc2V0IHJlc2V0IHN0YXRlIGZvciBkZXZpY2UgZGV2Ci0gKiBAZGV2OiB0aGUgUENJLUUgZGV2aWNlIHJlc2V0CisgKiBAZGV2OiB0aGUgUENJZSBkZXZpY2UgcmVzZXQKICAqIEBzdGF0ZTogUmVzZXQgc3RhdGUgdG8gZW50ZXIgaW50bwogICoKICAqCkBAIC0xNDA5LDYgKzE0MTksNyBAQAogCX0KIAogCWRldi0+cG1fY2FwID0gcG07CisJZGV2LT5kM19kZWxheSA9IFBDSV9QTV9EM19XQUlUOwogCiAJZGV2LT5kMV9zdXBwb3J0ID0gZmFsc2U7CiAJZGV2LT5kMl9zdXBwb3J0ID0gZmFsc2U7CkBAIC0yMjQ3LDEyICsyMjU4LDEyIEBACiAJY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwogCWNzciB8PSBQQ0lfRDNob3Q7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgY3NyKTsKLQltc2xlZXAocGNpX3BtX2QzX2RlbGF5KTsKKwlwY2lfZGV2X2QzX3NsZWVwKGRldik7CiAKIAljc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CiAJY3NyIHw9IFBDSV9EMDsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCBjc3IpOwotCW1zbGVlcChwY2lfcG1fZDNfZGVsYXkpOworCXBjaV9kZXZfZDNfc2xlZXAoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI5Niw2ICsyMzA3LDEwIEBACiAJCWRvd24oJmRldi0+ZGV2LnNlbSk7CiAJfQogCisJcmMgPSBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KGRldiwgcHJvYmUpOworCWlmIChyYyAhPSAtRU5PVFRZKQorCQlnb3RvIGRvbmU7CisKIAlyYyA9IHBjaWVfZmxyKGRldiwgcHJvYmUpOwogCWlmIChyYyAhPSAtRU5PVFRZKQogCQlnb3RvIGRvbmU7CkBAIC0yNzc5LDYgKzI3OTQsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAordm9pZCBfX3dlYWsgcGNpX2ZpeHVwX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKK30KK0VYUE9SVF9TWU1CT0wocGNpX2ZpeHVwX2NhcmRidXMpOworCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoY2hhciAqc3RyKQogewogCXdoaWxlIChzdHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMzNlZDhlMC4uZmJkMGUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTMxMyw0ICszMTMsMTIgQEAKIAogZXh0ZXJuIHZvaWQgcGNpX2VuYWJsZV9hY3Moc3RydWN0IHBjaV9kZXYgKmRldik7CiAKK3N0cnVjdCBwY2lfZGV2X3Jlc2V0X21ldGhvZHMgeworCXUxNiB2ZW5kb3I7CisJdTE2IGRldmljZTsKKwlpbnQgKCpyZXNldCkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKTsKK307CisKK2V4dGVybiBpbnQgcGNpX2Rldl9zcGVjaWZpY19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpOworCiAjZW5kaWYgLyogRFJJVkVSU19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvS2NvbmZpZy5kZWJ1ZyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL0tjb25maWcuZGVidWcKaW5kZXggYjhjOTI1Yy4uOTE0Mjk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvS2NvbmZpZy5kZWJ1ZworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9LY29uZmlnLmRlYnVnCkBAIC0zLDE0ICszLDE0IEBACiAjCiAKIGNvbmZpZyBQQ0lFQUVSX0lOSkVDVAotCXRyaXN0YXRlICJQQ0lFIEFFUiBlcnJvciBpbmplY3RvciBzdXBwb3J0IgorCXRyaXN0YXRlICJQQ0llIEFFUiBlcnJvciBpbmplY3RvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJRUFFUgogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBQQ0kgRXhwcmVzcyBSb290IFBvcnQgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCiAJICAoQUVSKSBzb2Z0d2FyZSBlcnJvciBpbmplY3Rvci4KIAotCSAgRGVidWdpbmcgUENJRSBBRVIgY29kZSBpcyBxdWl0ZSBkaWZmaWN1bHQgYmVjYXVzZSBpdCBpcyBoYXJkCisJICBEZWJ1Z2dpbmcgUENJZSBBRVIgY29kZSBpcyBxdWl0ZSBkaWZmaWN1bHQgYmVjYXVzZSBpdCBpcyBoYXJkCiAJICB0byB0cmlnZ2VyIHZhcmlvdXMgcmVhbCBoYXJkd2FyZSBlcnJvcnMuIFNvZnR3YXJlIGJhc2VkCiAJICBlcnJvciBpbmplY3Rpb24gY2FuIGZha2UgYWxtb3N0IGFsbCBraW5kcyBvZiBlcnJvcnMgd2l0aCB0aGUKIAkgIGhlbHAgb2YgYSB1c2VyIHNwYWNlIGhlbHBlciB0b29sIGFlci1pbmplY3QsIHdoaWNoIGNhbiBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jCmluZGV4IDdmY2Q1MzMxLi44YzMwYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJfaW5qZWN0LmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyX2luamVjdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIFBDSUUgQUVSIHNvZnR3YXJlIGVycm9yIGluamVjdGlvbiBzdXBwb3J0LgorICogUENJZSBBRVIgc29mdHdhcmUgZXJyb3IgaW5qZWN0aW9uIHN1cHBvcnQuCiAgKgotICogRGVidWdpbmcgUENJRSBBRVIgY29kZSBpcyBxdWl0ZSBkaWZmaWN1bHQgYmVjYXVzZSBpdCBpcyBoYXJkIHRvCisgKiBEZWJ1Z2luZyBQQ0llIEFFUiBjb2RlIGlzIHF1aXRlIGRpZmZpY3VsdCBiZWNhdXNlIGl0IGlzIGhhcmQgdG8KICAqIHRyaWdnZXIgdmFyaW91cyByZWFsIGhhcmR3YXJlIGVycm9ycy4gU29mdHdhcmUgYmFzZWQgZXJyb3IKICAqIGluamVjdGlvbiBjYW4gZmFrZSBhbG1vc3QgYWxsIGtpbmRzIG9mIGVycm9ycyB3aXRoIHRoZSBoZWxwIG9mIGEKICAqIHVzZXIgc3BhY2UgaGVscGVyIHRvb2wgYWVyLWluamVjdCwgd2hpY2ggY2FuIGJlIGdvdHRlbiBmcm9tOgpAQCAtMzIxLDcgKzMyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oZWluai0+ZGV2LCBlaW5qLT5mbik7CiAJaW50IHBvc19jYXBfZXJyLCBycF9wb3NfY2FwX2VycjsKLQl1MzIgc2V2ZXI7CisJdTMyIHNldmVyLCBtYXNrOwogCWludCByZXQgPSAwOwogCiAJZGV2ID0gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KChpbnQpZWluai0+ZG9tYWluLCBlaW5qLT5idXMsIGRldmZuKTsKQEAgLTM3NCw2ICszNzQsMjQgQEAKIAllcnItPmhlYWRlcl9sb2cyID0gZWluai0+aGVhZGVyX2xvZzI7CiAJZXJyLT5oZWFkZXJfbG9nMyA9IGVpbmotPmhlYWRlcl9sb2czOwogCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zX2NhcF9lcnIgKyBQQ0lfRVJSX0NPUl9NQVNLLCAmbWFzayk7CisJaWYgKGVpbmotPmNvcl9zdGF0dXMgJiYgIShlaW5qLT5jb3Jfc3RhdHVzICYgfm1hc2spKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoZSBjb3JyZWN0YWJsZSBlcnJvcihzKSBpcyBtYXNrZWQgIgorCQkJCSJieSBkZXZpY2VcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmplY3RfbG9jaywgZmxhZ3MpOworCQlnb3RvIG91dF9wdXQ7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zX2NhcF9lcnIgKyBQQ0lfRVJSX1VOQ09SX01BU0ssICZtYXNrKTsKKwlpZiAoZWluai0+dW5jb3Jfc3RhdHVzICYmICEoZWluai0+dW5jb3Jfc3RhdHVzICYgfm1hc2spKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoZSB1bmNvcnJlY3RhYmxlIGVycm9yKHMpIGlzIG1hc2tlZCAiCisJCQkJImJ5IGRldmljZVxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluamVjdF9sb2NrLCBmbGFncyk7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisKIAlycGVyciA9IF9fZmluZF9hZXJfZXJyb3JfYnlfZGV2KHJwZGV2KTsKIAlpZiAoIXJwZXJyKSB7CiAJCXJwZXJyID0gcnBlcnJfYWxsb2M7CkBAIC00MTMsOCArNDMxLDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0OwogCi0JaWYgKGZpbmRfYWVyX2RldmljZShycGRldiwgJmVkZXYpKQorCWlmIChmaW5kX2Flcl9kZXZpY2UocnBkZXYsICZlZGV2KSkgeworCQlpZiAoIWdldF9zZXJ2aWNlX2RhdGEoZWRldikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFFUiBzZXJ2aWNlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfcHV0OworCQl9CiAJCWFlcl9pcnEoLTEsIGVkZXYpOworCX0KIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiBvdXRfcHV0OgpAQCAtNDg0LDUgKzUwOCw1IEBACiBtb2R1bGVfaW5pdChhZXJfaW5qZWN0X2luaXQpOwogbW9kdWxlX2V4aXQoYWVyX2luamVjdF9leGl0KTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0lFIEFFUiBzb2Z0d2FyZSBlcnJvciBpbmplY3RvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0llIEFFUiBzb2Z0d2FyZSBlcnJvciBpbmplY3RvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCA5N2EzNDU5Li4yMWYyMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJbXV0ZXhfaW5pdCgmcnBjLT5ycGNfbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwYy0+d2FpdF9yZWxlYXNlKTsKIAotCS8qIFVzZSBQQ0lFIGJ1cyBmdW5jdGlvbiB0byBzdG9yZSBycGMgaW50byBQQ0lFIGRldmljZSAqLworCS8qIFVzZSBQQ0llIGJ1cyBmdW5jdGlvbiB0byBzdG9yZSBycGMgaW50byBQQ0llIGRldmljZSAqLwogCXNldF9zZXJ2aWNlX2RhdGEoZGV2LCBycGMpOwogCiAJcmV0dXJuIHJwYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCmluZGV4IDhlZGIyZjMuLjA0ODE0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2FjcGkuYwpAQCAtMjQsNyArMjQsNyBAQAogICoKICAqIEByZXR1cm46IFplcm8gb24gc3VjY2Vzcy4gTm9uemVybyBvdGhlcndpc2UuCiAgKgotICogSW52b2tlZCB3aGVuIFBDSUUgYnVzIGxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4gVG8gYXZvaWQgY29uZmxpY3Qgd2l0aAorICogSW52b2tlZCB3aGVuIFBDSWUgYnVzIGxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4gVG8gYXZvaWQgY29uZmxpY3Qgd2l0aAogICogQklPUyBBRVIgc3VwcG9ydCByZXF1aXJlcyBCSU9TIHRvIHlpZWxkIEFFUiBjb250cm9sIHRvIE9TIG5hdGl2ZSBkcml2ZXIuCiAgKiovCiBpbnQgYWVyX29zY19zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnBjaWVkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwppbmRleCBhZTY3MmNhLi5jODQzYTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICogYWVyX2VuYWJsZV9yb290cG9ydCAtIGVuYWJsZSBSb290IFBvcnQncyBpbnRlcnJ1cHRzIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2VzCiAgKiBAcnBjOiBwb2ludGVyIHRvIGEgUm9vdCBQb3J0IGRhdGEgc3RydWN0dXJlCiAgKgotICogSW52b2tlZCB3aGVuIFBDSUUgYnVzIGxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4KKyAqIEludm9rZWQgd2hlbiBQQ0llIGJ1cyBsb2FkcyBBRVIgc2VydmljZSBkcml2ZXIuCiAgKi8KIHZvaWQgYWVyX2VuYWJsZV9yb290cG9ydChzdHJ1Y3QgYWVyX3JwYyAqcnBjKQogewpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJdTMyIHJlZzMyOwogCiAJcG9zID0gcGNpX3BjaWVfY2FwKHBkZXYpOwotCS8qIENsZWFyIFBDSUUgQ2FwYWJpbGl0eSdzIERldmljZSBTdGF0dXMgKi8KKwkvKiBDbGVhciBQQ0llIENhcGFiaWxpdHkncyBEZXZpY2UgU3RhdHVzICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zK1BDSV9FWFBfREVWU1RBLCAmcmVnMTYpOwogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MrUENJX0VYUF9ERVZTVEEsIHJlZzE2KTsKIApAQCAtNjMxLDcgKzYzMSw3IEBACiAgKiBkaXNhYmxlX3Jvb3RfYWVyIC0gZGlzYWJsZSBSb290IFBvcnQncyBpbnRlcnJ1cHRzIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2VzCiAgKiBAcnBjOiBwb2ludGVyIHRvIGEgUm9vdCBQb3J0IGRhdGEgc3RydWN0dXJlCiAgKgotICogSW52b2tlZCB3aGVuIFBDSUUgYnVzIHVubG9hZHMgQUVSIHNlcnZpY2UgZHJpdmVyLgorICogSW52b2tlZCB3aGVuIFBDSWUgYnVzIHVubG9hZHMgQUVSIHNlcnZpY2UgZHJpdmVyLgogICovCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3Jvb3RfYWVyKHN0cnVjdCBhZXJfcnBjICpycGMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfZXJycHJpbnQuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCmluZGV4IDQ0YWNkZTcuLjlkM2U0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAogCWlmIChpbmZvLT5zdGF0dXMgPT0gMCkgewogCQlBRVJfUFIoaW5mbywgZGV2LAotCQkJIlBDSUUgQnVzIEVycm9yOiBzZXZlcml0eT0lcywgdHlwZT1VbmFjY2Vzc2libGUsICIKKwkJCSJQQ0llIEJ1cyBFcnJvcjogc2V2ZXJpdHk9JXMsIHR5cGU9VW5hY2Nlc3NpYmxlLCAiCiAJCQkiaWQ9JTA0eChVbnJlZ2lzdGVyZWQgQWdlbnQgSUQpXG4iLAogCQkJYWVyX2Vycm9yX3NldmVyaXR5X3N0cmluZ1tpbmZvLT5zZXZlcml0eV0sIGlkKTsKIAl9IGVsc2UgewpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCWFnZW50ID0gQUVSX0dFVF9BR0VOVChpbmZvLT5zZXZlcml0eSwgaW5mby0+c3RhdHVzKTsKIAogCQlBRVJfUFIoaW5mbywgZGV2LAotCQkJIlBDSUUgQnVzIEVycm9yOiBzZXZlcml0eT0lcywgdHlwZT0lcywgaWQ9JTA0eCglcylcbiIsCisJCQkiUENJZSBCdXMgRXJyb3I6IHNldmVyaXR5PSVzLCB0eXBlPSVzLCBpZD0lMDR4KCVzKVxuIiwKIAkJCWFlcl9lcnJvcl9zZXZlcml0eV9zdHJpbmdbaW5mby0+c2V2ZXJpdHldLAogCQkJYWVyX2Vycm9yX2xheWVyW2xheWVyXSwgaWQsIGFlcl9hZ2VudF9zdHJpbmdbYWdlbnRdKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMgYi9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYwppbmRleCA1YTAxZmM3Li5iZTUzZDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBGaWxlOglkcml2ZXJzL3BjaS9wY2llL2FzcG0uYwotICogRW5hYmxpbmcgUENJRSBsaW5rIEwwcy9MMSBzdGF0ZSBhbmQgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudAorICogRW5hYmxpbmcgUENJZSBsaW5rIEwwcy9MMSBzdGF0ZSBhbmQgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBJbnRlbAogICogQ29weXJpZ2h0IChDKSBaaGFuZyBZYW5taW4gKHlhbm1pbi56aGFuZ0BpbnRlbC5jb20pCkBAIC00OTksNyArNDk5LDcgQEAKIAlpbnQgcG9zOwogCXUzMiByZWczMjsKIAkvKgotCSAqIFNvbWUgZnVuY3Rpb25zIGluIGEgc2xvdCBtaWdodCBub3QgYWxsIGJlIFBDSUUgZnVuY3Rpb25zLAorCSAqIFNvbWUgZnVuY3Rpb25zIGluIGEgc2xvdCBtaWdodCBub3QgYWxsIGJlIFBDSWUgZnVuY3Rpb25zLAogCSAqIHZlcnkgc3RyYW5nZS4gRGlzYWJsZSBBU1BNIGZvciB0aGUgd2hvbGUgc2xvdAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZwZGV2LT5zdWJvcmRpbmF0ZS0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IDQxMzI2MmUuLmIxNzQxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMjcsNyArMjcsNyBAQAogICovCiBzdGF0aWMgdm9pZCByZWxlYXNlX3BjaWVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlrZnJlZSh0b19wY2llX2RldmljZShkZXYpKTsJCQkKKwlrZnJlZSh0b19wY2llX2RldmljZShkZXYpKTsKIH0KIAogLyoqCkBAIC0zNDYsMTIgKzM0NiwxMSBAQAogewogCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKnNlcnZpY2VfZHJpdmVyOwogCi0gCWlmICgoZGV2LT5idXMgPT0gJnBjaWVfcG9ydF9idXNfdHlwZSkgJiYKLSAJICAgIChkZXYtPmRyaXZlcikpIHsKLSAJCXNlcnZpY2VfZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotIAkJaWYgKHNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKQotIAkJCXNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKHRvX3BjaWVfZGV2aWNlKGRldikpOwotICAJfQorCWlmICgoZGV2LT5idXMgPT0gJnBjaWVfcG9ydF9idXNfdHlwZSkgJiYgZGV2LT5kcml2ZXIpIHsKKwkJc2VydmljZV9kcml2ZXIgPSB0b19zZXJ2aWNlX2RyaXZlcihkZXYtPmRyaXZlcik7CisJCWlmIChzZXJ2aWNlX2RyaXZlci0+c3VzcGVuZCkKKwkJCXNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKHRvX3BjaWVfZGV2aWNlKGRldikpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk0LDYgKzQ5Myw3IEBACiAKIAlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZuZXctPmRyaXZlcik7CiB9CitFWFBPUlRfU1lNQk9MKHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCiAgKiBwY2llX3BvcnRfc2VydmljZV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBQQ0kgRXhwcmVzcyBwb3J0IHNlcnZpY2UgZHJpdmVyCkBAIC01MDMsNiArNTAzLDQgQEAKIHsKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogfQotCi1FWFBPUlRfU1lNQk9MKHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0wocGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggYTQ5NDUyZS4uMTNjODk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4wIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJ0b20ubC5uZ3V5ZW5AaW50ZWwuY29tIgotI2RlZmluZSBEUklWRVJfREVTQyAiUENJRSBQb3J0IEJ1cyBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9ERVNDICJQQ0llIFBvcnQgQnVzIERyaXZlciIKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNjMsNyArNjMsNyBAQAogICogcGNpZV9wb3J0ZHJ2X3Byb2JlIC0gUHJvYmUgUENJLUV4cHJlc3MgcG9ydCBkZXZpY2VzCiAgKiBAZGV2OiBQQ0ktRXhwcmVzcyBwb3J0IGRldmljZSBiZWluZyBwcm9iZWQKICAqCi0gKiBJZiBkZXRlY3RlZCBpbnZva2VzIHRoZSBwY2llX3BvcnRfZGV2aWNlX3JlZ2lzdGVyKCkgbWV0aG9kIGZvciAKKyAqIElmIGRldGVjdGVkIGludm9rZXMgdGhlIHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoKSBtZXRob2QgZm9yCiAgKiB0aGlzIHBvcnQgZGV2aWNlLgogICoKICAqLwpAQCAtNzgsNyArNzgsNyBAQAogCSAgICAgKGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNKSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0gICAgICAgIGlmICghZGV2LT5pcnEgJiYgZGV2LT5waW4pIHsKKwlpZiAoIWRldi0+aXJxICYmIGRldi0+cGluKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgImRldmljZSBbJTA0eDolMDR4XSBoYXMgaW52YWxpZCBJUlE7ICIKIAkJCSAiY2hlY2sgdmVuZG9yIEJJT1NcbiIsIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSk7CiAJfQpAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwY2llX3BvcnRkcnZfcmVtb3ZlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcGNpZV9wb3J0ZHJ2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CkBAIC0xMjksMTQgKzEyOSwxMyBAQAogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcGNpZV9wb3J0ZHJ2X2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCWVudW0gcGNpX2NoYW5uZWxfc3RhdGUgZXJyb3IpCiB7Ci0Jc3RydWN0IGFlcl9icm9hZGNhc3RfZGF0YSByZXN1bHRfZGF0YSA9Ci0JCQl7ZXJyb3IsIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSfTsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCBhZXJfYnJvYWRjYXN0X2RhdGEgZGF0YSA9IHtlcnJvciwgUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVJ9OworCWludCByZXQ7CiAKIAkvKiBjYW4gbm90IGZhaWwgKi8KLQlyZXR2YWwgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAmcmVzdWx0X2RhdGEsIGVycm9yX2RldGVjdGVkX2l0ZXIpOworCXJldCA9IGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZkYXRhLCBlcnJvcl9kZXRlY3RlZF9pdGVyKTsKIAotCXJldHVybiByZXN1bHRfZGF0YS5yZXN1bHQ7CisJcmV0dXJuIGRhdGEucmVzdWx0OwogfQogCiBzdGF0aWMgaW50IG1taW9fZW5hYmxlZF9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqZGF0YSkKQEAgLTI5MCw3ICsyODksNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBwY2llX3BvcnRkcnZfZXhpdCh2b2lkKSAKK3N0YXRpYyB2b2lkIF9fZXhpdCBwY2llX3BvcnRkcnZfZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNpZV9wb3J0ZHJpdmVyKTsKIAlwY2llX3BvcnRfYnVzX3VucmVnaXN0ZXIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggN2NmYTdjMy4uYzc0Njk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTI2MjksMTQgKzI2MjksODYgQEAKIAlpZiAoIXBjaV9jYWNoZV9saW5lX3NpemUpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogQ0xTICV1IGJ5dGVzLCBkZWZhdWx0ICV1XG4iLAogCQkgICAgICAgY2xzIDw8IDIsIHBjaV9kZmxfY2FjaGVfbGluZV9zaXplIDw8IDIpOwotCQlwY2lfY2FjaGVfbGluZV9zaXplID0gY2xzOworCQlwY2lfY2FjaGVfbGluZV9zaXplID0gY2xzID8gY2xzIDogcGNpX2RmbF9jYWNoZV9saW5lX3NpemU7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIGZzX2luaXRjYWxsX3N5bmMocGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyk7CisKKy8qCisgKiBGb2xsb3dpbmdzIGFyZSBkZXZpY2Utc3BlY2lmaWMgcmVzZXQgbWV0aG9kcyB3aGljaCBjYW4gYmUgdXNlZCB0bworICogcmVzZXQgYSBzaW5nbGUgZnVuY3Rpb24gaWYgb3RoZXIgbWV0aG9kcyAoZS5nLiBGTFIsIFBNIEQwLT5EMykgYXJlCisgKiBub3QgYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW50IHJlc2V0X2ludGVsX2dlbmVyaWNfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkKK3sKKwlpbnQgcG9zOworCisJLyogb25seSBpbXBsZW1lbnQgUENJX0NMQVNTX1NFUklBTF9VU0IgYXQgcHJlc2VudCAqLworCWlmIChkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCKSB7CisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOworCQlpZiAoIXBvcykKKwkJCXJldHVybiAtRU5PVFRZOworCisJCWlmIChwcm9iZSkKKwkJCXJldHVybiAwOworCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcyArIDB4NCwgMSk7CisJCW1zbGVlcCgxMDApOworCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworc3RhdGljIGludCByZXNldF9pbnRlbF84MjU5OV9zZnBfdmlydGZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkKK3sKKwlpbnQgcG9zOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwlpZiAocHJvYmUpCisJCXJldHVybiAwOworCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZDVEwsCisJCQkJUENJX0VYUF9ERVZDVExfQkNSX0ZMUik7CisJbXNsZWVwKDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTk5X1NGUF9WRiAgIDB4MTBlZAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZfcmVzZXRfbWV0aG9kcyBwY2lfZGV2X3Jlc2V0X21ldGhvZHNbXSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1OTlfU0ZQX1ZGLAorCQkgcmVzZXRfaW50ZWxfODI1OTlfc2ZwX3ZpcnRmbiB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCwKKwkJcmVzZXRfaW50ZWxfZ2VuZXJpY19kZXYgfSwKKwl7IDAgfQorfTsKKworaW50IHBjaV9kZXZfc3BlY2lmaWNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKQoreworCWNvbnN0IHN0cnVjdCBwY2lfZGV2X3Jlc2V0X21ldGhvZHMgKmk7CisKKwlmb3IgKGkgPSBwY2lfZGV2X3Jlc2V0X21ldGhvZHM7IGktPnJlc2V0OyBpKyspIHsKKwkJaWYgKChpLT52ZW5kb3IgPT0gZGV2LT52ZW5kb3IgfHwKKwkJICAgICBpLT52ZW5kb3IgPT0gKHUxNilQQ0lfQU5ZX0lEKSAmJgorCQkgICAgKGktPmRldmljZSA9PSBkZXYtPmRldmljZSB8fAorCQkgICAgIGktPmRldmljZSA9PSAodTE2KVBDSV9BTllfSUQpKQorCQkJcmV0dXJuIGktPnJlc2V0KGRldiwgcHJvYmUpOworCX0KKworCXJldHVybiAtRU5PVFRZOworfQorCiAjZWxzZQogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KK2ludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkgeyByZXR1cm4gLUVOT1RUWTsgfQogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwppbmRleCA2ZGFlODcxLi40YTQ3MWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYworKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMTUsOSArMTUsOSBAQAogCiBERUNMQVJFX1JXU0VNKHBjaV9idXNfc2VtKTsKIC8qCi0gKiBmaW5kIHRoZSB1cHN0cmVhbSBQQ0lFLXRvLVBDSSBicmlkZ2Ugb2YgYSBQQ0kgZGV2aWNlCisgKiBmaW5kIHRoZSB1cHN0cmVhbSBQQ0llLXRvLVBDSSBicmlkZ2Ugb2YgYSBQQ0kgZGV2aWNlCiAgKiBpZiB0aGUgZGV2aWNlIGlzIFBDSUUsIHJldHVybiBOVUxMCi0gKiBpZiB0aGUgZGV2aWNlIGlzbid0IGNvbm5lY3RlZCB0byBhIFBDSUUgYnJpZGdlICh0aGF0IGlzIGl0cyBwYXJlbnQgaXMgYQorICogaWYgdGhlIGRldmljZSBpc24ndCBjb25uZWN0ZWQgdG8gYSBQQ0llIGJyaWRnZSAodGhhdCBpcyBpdHMgcGFyZW50IGlzIGEKICAqIGxlZ2FjeSBQQ0kgYnJpZGdlIGFuZCB0aGUgYnJpZGdlIGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBidXMgMCksIHJldHVybiBpdHMKICAqIHBhcmVudAogICovCkBAIC0zNyw3ICszNyw3IEBACiAJCQl0bXAgPSBwZGV2OwogCQkJY29udGludWU7CiAJCX0KLQkJLyogUENJIGRldmljZSBzaG91bGQgY29ubmVjdCB0byBhIFBDSUUgYnJpZGdlICovCisJCS8qIFBDSSBkZXZpY2Ugc2hvdWxkIGNvbm5lY3QgdG8gYSBQQ0llIGJyaWRnZSAqLwogCQlpZiAocGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9QQ0lfQlJJREdFKSB7CiAJCQkvKiBCdXN0ZWQgaGFyZHdhcmU/ICovCiAJCQlXQVJOX09OX09OQ0UoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKaW5kZXggY2RmNTBmMy4uZDk5Zjg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJdW5zaWduZWQgaW50IG1heCwgcGFzczsKIAogCXMtPmZ1bmN0aW9ucyA9IHBjaV9zY2FuX3Nsb3QoYnVzLCBQQ0lfREVWRk4oMCwgMCkpOwotLyoJcGNpYmlvc19maXh1cF9idXMoYnVzKTsgKi8KKwlwY2lfZml4dXBfY2FyZGJ1cyhidXMpOyAKIAogCW1heCA9IGJ1cy0+c2Vjb25kYXJ5OwogCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCAzYWFiZjFlLi43NmU2NDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQlza3QtPm5yID0gb3BzLT5maXJzdCArIGk7CiAJCXNrdC0+b3BzID0gb3BzOwogCQlza3QtPnNvY2tldC5vd25lciA9IG9wcy0+b3duZXI7Ci0JCXNrdC0+c29ja2V0LmRldi5wYXJlbnQgPSBkZXY7CisJCXNrdC0+c29ja2V0LmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAJCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBOT19JUlE7CiAKIAkJcmV0ID0gcHhhMnh4X2Rydl9wY21jaWFfYWRkX29uZShza3QpOwpAQCAtMzA0LDggKzMwNCw4IEBACiAJCQlzb2NfcGNtY2lhX3JlbW92ZV9vbmUoJnNpbmZvLT5za3RbaV0pOwogCQlrZnJlZShzaW5mbyk7CiAJfSBlbHNlIHsKLQkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKGRldik7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNpbmZvKTsKKwkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZkZXYtPmRldik7CisJCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIHNpbmZvKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZmM1YmY5ZC4uZGIzMmMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0yMzEsOCArMjMxLDM2IEBACiAKIAkgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBrbm93biBhcyBpYm0tYWNwaS4KIAorCSAgRXh0cmEgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGF2YWlsYWJsZSBpZiB0aGUgcmZraWxsIChDT05GSUdfUkZLSUxMKQorCSAgYW5kL29yIEFMU0EgKENPTkZJR19TTkQpIHN1YnN5c3RlbXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLgorCSAgTm90ZSB0aGF0IGlmIHlvdSB3YW50IFRoaW5rUGFkLUFDUEkgdG8gYmUgYnVpbHQtaW4gaW5zdGVhZCBvZgorCSAgbW9kdWxhciwgQUxTQSBhbmQgcmZraWxsIHdpbGwgYWxzbyBoYXZlIHRvIGJlIGJ1aWx0LWluLgorCiAJICBJZiB5b3UgaGF2ZSBhbiBJQk0gb3IgTGVub3ZvIFRoaW5rUGFkIGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgogCitjb25maWcgVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQKKwlib29sICJDb25zb2xlIGF1ZGlvIGNvbnRyb2wgQUxTQSBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBUSElOS1BBRF9BQ1BJCisJZGVwZW5kcyBvbiBTTkQKKwlkZXBlbmRzIG9uIFNORCA9IHkgfHwgVEhJTktQQURfQUNQSSA9IFNORAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZXMgbW9uaXRvcmluZyBvZiB0aGUgYnVpbHQtaW4gY29uc29sZSBhdWRpbyBvdXRwdXQgY29udHJvbAorCSAgKGhlYWRwaG9uZSBhbmQgc3BlYWtlcnMpLCB3aGljaCBpcyBvcGVyYXRlZCBieSB0aGUgbXV0ZSBhbmQgKGluCisJICBzb21lIFRoaW5rUGFkIG1vZGVscykgdm9sdW1lIGhvdGtleXMuCisKKwkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIFRoaW5rUGFkLUFDUEkgd2lsbCBleHBvcnQgYW4gQUxTQSBjYXJkCisJICB3aXRoIGEgc2luZ2xlIHJlYWQtb25seSBtaXhlciBjb250cm9sLCB3aGljaCBzaG91bGQgYmUgdXNlZCBmb3IKKwkgIG9uLXNjcmVlbi1kaXNwbGF5IGZlZWRiYWNrIHB1cnBvc2VzIGJ5IHRoZSBEZXNrdG9wIEVudmlyb25tZW50LgorCisJICBPcHRpb25hbGx5LCB0aGUgZHJpdmVyIHdpbGwgYWxzbyBhbGxvdyBzb2Z0d2FyZSBjb250cm9sICh0aGUKKwkgIEFMU0EgbWl4ZXIgd2lsbCBiZSBtYWRlIHJlYWQtd3JpdGUpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkcml2ZXIKKwkgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKKwkgIEFsbCBJQk0gbW9kZWxzIGhhdmUgYm90aCB2b2x1bWUgYW5kIG11dGUgY29udHJvbC4gIE5ld2VyIExlbm92bworCSAgbW9kZWxzIG9ubHkgaGF2ZSBtdXRlIGNvbnRyb2wgKHRoZSB2b2x1bWUgaG90a2V5cyBhcmUganVzdCBub3JtYWwKKwkgIGtleXMgYW5kIHZvbHVtZSBjb250cm9sIGlzIGRvbmUgdGhyb3VnaCB0aGUgbWFpbiBIREEgbWl4ZXIpLgorCiBjb25maWcgVEhJTktQQURfQUNQSV9ERUJVR0ZBQ0lMSVRJRVMKIAlib29sICJNYWludGFpbmVyIGRlYnVnIGZhY2lsaXRpZXMiCiAJZGVwZW5kcyBvbiBUSElOS1BBRF9BQ1BJCkBAIC00NjQsNCArNDkyLDE2IEBACiAKIAkgIElmIHlvdSBoYXZlIGEgbW9kZXJuIFRvc2hpYmEgbGFwdG9wIHdpdGggYSBCbHVldG9vdGggYW5kIGFuCiAJICBSRktpbGwgc3dpdGNoIChzdWNoIGFzIHRoZSBQb3J0ZWdlIFI1MDApLCBzYXkgWS4KKworY29uZmlnIEFDUElfQ01QQworCXRyaXN0YXRlICJDTVBDIExhcHRvcCBFeHRyYXMiCisJZGVwZW5kcyBvbiBYODYgJiYgQUNQSQorCXNlbGVjdCBJTlBVVAorCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVmYXVsdCBuCisJaGVscAorCSAgU3VwcG9ydCBmb3IgSW50ZWwgQ2xhc3NtYXRlIFBDIEFDUEkgZGV2aWNlcywgaW5jbHVkaW5nIHNvbWUKKwkgIGtleXMgYXMgaW5wdXQgZGV2aWNlLCBiYWNrbGlnaHQgZGV2aWNlLCB0YWJsZXQgYW5kIGFjY2VsZXJvbWV0ZXIKKwkgIGRldmljZXMuCisKIGVuZGlmICMgWDg2X1BMQVRGT1JNX0RFVklDRVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKaW5kZXggYjc0NzRiNi4uOWNkOWZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmotJChDT05GSUdfQVNVU19MQVBUT1ApCSs9IGFzdXMtbGFwdG9wLm8KIG9iai0kKENPTkZJR19FRUVQQ19MQVBUT1ApCSs9IGVlZXBjLWxhcHRvcC5vCiBvYmotJChDT05GSUdfTVNJX0xBUFRPUCkJKz0gbXNpLWxhcHRvcC5vCitvYmotJChDT05GSUdfQUNQSV9DTVBDKQkJKz0gY2xhc3NtYXRlLWxhcHRvcC5vCiBvYmotJChDT05GSUdfQ09NUEFMX0xBUFRPUCkJKz0gY29tcGFsLWxhcHRvcC5vCiBvYmotJChDT05GSUdfREVMTF9MQVBUT1ApCSs9IGRlbGwtbGFwdG9wLm8KIG9iai0kKENPTkZJR19ERUxMX1dNSSkJCSs9IGRlbGwtd21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IDQ1NDk3MGQuLjA3ZDE0ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtOTYsOSArOTYsNiBAQAogTU9EVUxFX0FMSUFTKCJ3bWk6NjdDMzM3MUQtOTVBMy00QzM3LUJCNjEtREQ0N0I0OTFEQUFCIik7CiBNT0RVTEVfQUxJQVMoIndtaTo2QUY0RjI1OC1CNDAxLTQyZmQtQkU5MS0zRDRBQzJEN0MwRDMiKTsKIAotLyogVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhlIFdNSSBzeXNmcyBpbnRlcmZhY2UgZ29lcyBpbiAqLwotTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6KjoiKTsKLQogLyoKICAqIEludGVyZmFjZSBjYXBhYmlsaXR5IGZsYWdzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwppbmRleCA3OWIxNWI5Li43YjIzODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCkBAIC01Miw3ICs1Miw3IEBACiAgKi8KICN1bmRlZiBTVEFSVF9JTl9LRVJORUxfTU9ERQogCi0jZGVmaW5lIERSVl9WRVIgIjAuNS4yMCIKKyNkZWZpbmUgRFJWX1ZFUiAiMC41LjIyIgogCiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBBdG9tIE4yNzAgZGF0YXNoZWV0LApAQCAtMTU2LDE5ICsxNTYsMjUgQEAKIAl7IkFjZXIiLCAiQU9BMTUwIiwgInYwLjMzMTAiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKIAkvKiBBY2VyIDE0MTAgKi8KIAl7IkFjZXIiLCAiQXNwaXJlIDE0MTAiLCAidjAuMzEyMCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAotCS8qIHNwZWNpYWwgQklPUyAvIG90aGVyICovCisJeyJBY2VyIiwgIkFzcGlyZSAxNDEwIiwgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwkvKiBBY2VyIDE4MTB4eCAqLworCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgInYxLjMzMDMiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKKwl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUWiIsICJ2MS4zMzAzIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4OWUsIDB4MDB9IH0sCisJLyogR2F0ZXdheSAqLwogCXsiR2F0ZXdheSIsICJBT0ExMTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDIxLCAweDAwfSB9LAogCXsiR2F0ZXdheSIsICJBT0ExNTAiLCAidjAuMzEwMyIsIDB4NTUsIDB4NTgsIHsweDIwLCAweDIwLCAweDAwfSB9LAotCXsiR2F0ZXdheSAgICAgICAgICIsICJMVDMxICAgICAgICAgICAgIiwgInYxLjMxMDMgIiwgMHg1NSwgMHg1OCwKLQkJezB4MTAsIDB4MGYsIDB4MDB9IH0sCi0JeyJHYXRld2F5ICAgICAgICAgIiwgIkxUMzEgICAgICAgICAgICAiLCAidjEuMzIwMSAiLCAweDU1LCAweDU4LAotCQl7MHgxMCwgMHgwZiwgMHgwMH0gfSwKLQl7IkdhdGV3YXkgICAgICAgICAiLCAiTFQzMSAgICAgICAgICAgICIsICJ2MS4zMzAyICIsIDB4NTUsIDB4NTgsCi0JCXsweDEwLCAweDBmLCAweDAwfSB9LAorCXsiR2F0ZXdheSIsICJMVDMxIiwgInYxLjMxMDMiLCAweDU1LCAweDU4LCB7MHgxMCwgMHgwZiwgMHgwMH0gfSwKKwl7IkdhdGV3YXkiLCAiTFQzMSIsICJ2MS4zMjAxIiwgMHg1NSwgMHg1OCwgezB4MTAsIDB4MGYsIDB4MDB9IH0sCisJeyJHYXRld2F5IiwgIkxUMzEiLCAidjEuMzMwMiIsIDB4NTUsIDB4NTgsIHsweDEwLCAweDBmLCAweDAwfSB9LAorCS8qIFBhY2thcmQgQmVsbCAqLwogCXsiUGFja2FyZCBCZWxsIiwgIkRPQTE1MCIsICJ2MC4zMTA0IiwgMHg1NSwgMHg1OCwgezB4MjEsIDB4MjEsIDB4MDB9IH0sCiAJeyJQYWNrYXJkIEJlbGwiLCAiRE9BMTUwIiwgInYwLjMxMDUiLCAweDU1LCAweDU4LCB7MHgyMCwgMHgyMCwgMHgwMH0gfSwKIAl7IlBhY2thcmQgQmVsbCIsICJBT0ExMTAiLCAidjAuMzEwNSIsIDB4NTUsIDB4NTgsIHsweDIxLCAweDIxLCAweDAwfSB9LAogCXsiUGFja2FyZCBCZWxsIiwgIkFPQTE1MCIsICJ2MC4zMTA1IiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MjAsIDB4MDB9IH0sCisJeyJQYWNrYXJkIEJlbGwiLCAiRE9UTVUiLCAidjEuMzMwMyIsIDB4NTUsIDB4NTgsIHsweDllLCAweDllLCAweDAwfSB9LAorCXsiUGFja2FyZCBCZWxsIiwgIkRPVE1VIiwgInYwLjMxMjAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHg5ZSwgMHgwMH0gfSwKIAkvKiBwZXdwZXctdGVybWluYXRvciAqLwogCXsiIiwgIiIsICIiLCAwLCAwLCB7MCwgMCwgMH0gfQogfTsKQEAgLTQ4NiwxMyArNDkyLDI2IEBACiAJLnJlbW92ZSA9IGFjZXJoZGZfcmVtb3ZlLAogfTsKIAorLyogY2hlY2tzIGlmIHN0ciBiZWdpbnMgd2l0aCBzdGFydCAqLworc3RhdGljIGludCBzdHJfc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpzdGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0cl9sZW4gPSAwLCBzdGFydF9sZW4gPSAwOworCisJc3RyX2xlbiA9IHN0cmxlbihzdHIpOworCXN0YXJ0X2xlbiA9IHN0cmxlbihzdGFydCk7CisKKwlpZiAoc3RyX2xlbiA+PSBzdGFydF9sZW4gJiYKKwkJCSFzdHJuY21wKHN0ciwgc3RhcnQsIHN0YXJ0X2xlbikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CiAKIC8qIGNoZWNrIGhhcmR3YXJlICovCiBzdGF0aWMgaW50IGFjZXJoZGZfY2hlY2tfaGFyZHdhcmUodm9pZCkKIHsKIAljaGFyIGNvbnN0ICp2ZW5kb3IsICp2ZXJzaW9uLCAqcHJvZHVjdDsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIHByb2RfbGVuID0gMDsKKwljb25zdCBzdHJ1Y3QgYmlvc19zZXR0aW5nc190ICpidCA9IE5VTEw7CiAKIAkvKiBnZXQgQklPUyBkYXRhICovCiAJdmVuZG9yICA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpOwpAQCAtNTE0LDIwICs1MzMsMjAgQEAKIAkJa2VybmVsbW9kZSA9IDA7CiAJfQogCi0JcHJvZF9sZW4gPSBzdHJsZW4ocHJvZHVjdCk7Ci0KIAlpZiAodmVyYm9zZSkKIAkJcHJfaW5mbygiQklPUyBpbmZvOiAlcyAlcywgcHJvZHVjdDogJXNcbiIsCiAJCQl2ZW5kb3IsIHZlcnNpb24sIHByb2R1Y3QpOwogCiAJLyogc2VhcmNoIEJJT1MgdmVyc2lvbiBhbmQgdmVuZG9yIGluIEJJT1Mgc2V0dGluZ3MgdGFibGUgKi8KLQlmb3IgKGkgPSAwOyBiaW9zX3RibFtpXS52ZXJzaW9uWzBdOyBpKyspIHsKLQkJaWYgKHN0cmxlbihiaW9zX3RibFtpXS5wcm9kdWN0KSA+PSBwcm9kX2xlbiAmJgotCQkgICAgIXN0cm5jbXAoYmlvc190YmxbaV0ucHJvZHVjdCwgcHJvZHVjdCwKLQkJCSAgIHN0cmxlbihiaW9zX3RibFtpXS5wcm9kdWN0KSkgJiYKLQkJICAgICFzdHJjbXAoYmlvc190YmxbaV0udmVuZG9yLCB2ZW5kb3IpICYmCi0JCSAgICAhc3RyY21wKGJpb3NfdGJsW2ldLnZlcnNpb24sIHZlcnNpb24pKSB7Ci0JCQliaW9zX2NmZyA9ICZiaW9zX3RibFtpXTsKKwlmb3IgKGJ0ID0gYmlvc190Ymw7IGJ0LT52ZW5kb3JbMF07IGJ0KyspIHsKKwkJLyoKKwkJICogY2hlY2sgaWYgYWN0dWFsIGhhcmR3YXJlIEJJT1MgdmVuZG9yLCBwcm9kdWN0IGFuZCB2ZXJzaW9uCisJCSAqIElEcyBzdGFydCB3aXRoIHRoZSBzdHJpbmdzIG9mIEJJT1MgdGFibGUgZW50cnkKKwkJICovCisJCWlmIChzdHJfc3RhcnRzX3dpdGgodmVuZG9yLCBidC0+dmVuZG9yKSAmJgorCQkJCXN0cl9zdGFydHNfd2l0aChwcm9kdWN0LCBidC0+cHJvZHVjdCkgJiYKKwkJCQlzdHJfc3RhcnRzX3dpdGgodmVyc2lvbiwgYnQtPnZlcnNpb24pKSB7CisJCQliaW9zX2NmZyA9IGJ0OwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC02NDAsOSArNjU5LDE0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJQZXRlciBGZXVlcmVyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFzcGlyZSBPbmUgdGVtcGVyYXR1cmUgYW5kIGZhbiBkcml2ZXIiKTsKLU1PRFVMRV9BTElBUygiZG1pOio6KkFjZXIqOio6Iik7Ci1NT0RVTEVfQUxJQVMoImRtaToqOipHYXRld2F5KjoqOiIpOwotTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjoqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5BT0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5Bc3BpcmUgMTQxMCo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFzcGlyZSAxODEwKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOnBuQU9BKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOnBuTFQzMSo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOnBuQU9BKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQgQmVsbCo6cG5ET0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjpwbkRPVE1VKjoiKTsKIAogbW9kdWxlX2luaXQoYWNlcmhkZl9pbml0KTsKIG1vZHVsZV9leGl0KGFjZXJoZGZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCmluZGV4IDBjOWM1MzEuLmMxZDJhZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CkBAIC01MTMsMjYgKzUxNCwxMiBAQAogCXJldHVybiAoc3RhdHVzID09IEFFX09LKSAmJiAob3V0X29iai50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKTsKIH0KIAotLyoKLSAqIFdlIHdyaXRlIG91ciBpbmZvIGluIHBhZ2UsIHdlIGJlZ2luIGF0IG9mZnNldCBvZmYgYW5kIGNhbm5vdCB3cml0ZSBtb3JlCi0gKiB0aGFuIGNvdW50IGJ5dGVzLiBXZSBzZXQgZW9mIHRvIDEgaWYgd2UgaGFuZGxlIHRob3NlIDIgdmFsdWVzLiBXZSByZXR1cm4gdGhlCi0gKiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbiBwYWdlCi0gKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9pbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBhc3VzX2luZm9fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMDsKIAlpbnQgdGVtcDsKLQljaGFyIGJ1ZlsxNl07CQkvKiBlbm91Z2ggZm9yIGFsbCBpbmZvICovCi0JLyoKLQkgKiBXZSB1c2UgdGhlIGVhc3kgd2F5LCB3ZSBkb24ndCBjYXJlIG9mIG9mZiBhbmQgY291bnQsCi0JICogc28gd2UgZG9uJ3Qgc2V0IGVvZiB0byAxCi0JICovCiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlLCBBQ1BJX0hPVEtfTkFNRSAiICIgQVNVU19BQ1BJX1ZFUlNJT04gIlxuIik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1vZGVsIHJlZmVyZW5jZSAgICA6ICVzXG4iLAotCQkgICAgICAgaG90ay0+bWV0aG9kcy0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCBBQ1BJX0hPVEtfTkFNRSAiICIgQVNVU19BQ1BJX1ZFUlNJT04gIlxuIik7CisJc2VxX3ByaW50ZihtLCAiTW9kZWwgcmVmZXJlbmNlICAgIDogJXNcbiIsIGhvdGstPm1ldGhvZHMtPm5hbWUpOwogCS8qCiAJICogVGhlIFNGVU4gbWV0aG9kIHByb2JhYmx5IGFsbG93cyB0aGUgb3JpZ2luYWwgZHJpdmVyIHRvIGdldCB0aGUgbGlzdAogCSAqIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIG1vZGVsLiBGb3Igbm93LCAweDAxMDAgb3IgMHgwODAwCkBAIC01NDAsOCArNTI3LDcgQEAKIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICovCiAJaWYgKHJlYWRfYWNwaV9pbnQoaG90ay0+aGFuZGxlLCAiU0ZVTiIsICZ0ZW1wKSkKLQkJbGVuICs9Ci0JCSAgICBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTRlVOIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsIHRlbXApOworCQlzZXFfcHJpbnRmKG0sICJTRlVOIHZhbHVlICAgICAgICAgOiAweCUwNHhcbiIsIHRlbXApOwogCS8qCiAJICogQW5vdGhlciB2YWx1ZSBmb3IgdXNlcnNwYWNlOiB0aGUgQVNZTSBtZXRob2QgcmV0dXJucyAweDAyIGZvcgogCSAqIGJhdHRlcnkgbG93IGFuZCAweDA0IGZvciBiYXR0ZXJ5IGNyaXRpY2FsLCBpdHMgcmVhZGluZ3MgdGVuZCB0byBiZQpAQCAtNTUwLDMwICs1MzYsMzQgQEAKIAkgKiBzaWxlbnRseSBpZ25vcmVkLgogCSAqLwogCWlmIChyZWFkX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgIkFTWU0iLCAmdGVtcCkpCi0JCWxlbiArPQotCQkgICAgc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogMHglMDR4XG4iLCB0ZW1wKTsKKwkJc2VxX3ByaW50ZihtLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogMHglMDR4XG4iLCB0ZW1wKTsKIAlpZiAoYXN1c19pbmZvKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+bGVuZ3RoKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgbGVuZ3RoICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJWQiLCBhc3VzX2luZm8tPmNoZWNrc3VtKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgY2hlY2tzdW0gICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJWQiLCBhc3VzX2luZm8tPnJldmlzaW9uKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgcmV2aXNpb24gICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDcsICIlcyIsIGFzdXNfaW5mby0+b2VtX2lkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSBpZCAgICAgICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDksICIlcyIsIGFzdXNfaW5mby0+b2VtX3RhYmxlX2lkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSB0YWJsZSBpZCAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzX2luZm8tPm9lbV9yZXZpc2lvbik7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJPRU0gcmV2aXNpb24gICAgICAgOiAweCVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDUsICIlcyIsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX2lkKTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkFTTCBjb21wIHZlbmRvciBpZCA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzX2luZm8tPmFzbF9jb21waWxlcl9yZXZpc2lvbik7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU0wgY29tcCByZXZpc2lvbiAgOiAweCVzXG4iLCBidWYpOworCQlzZXFfcHJpbnRmKG0sICJEU0RUIGxlbmd0aCAgICAgICAgOiAlZFxuIiwgYXN1c19pbmZvLT5sZW5ndGgpOworCQlzZXFfcHJpbnRmKG0sICJEU0RUIGNoZWNrc3VtICAgICAgOiAlZFxuIiwgYXN1c19pbmZvLT5jaGVja3N1bSk7CisJCXNlcV9wcmludGYobSwgIkRTRFQgcmV2aXNpb24gICAgICA6ICVkXG4iLCBhc3VzX2luZm8tPnJldmlzaW9uKTsKKwkJc2VxX3ByaW50ZihtLCAiT0VNIGlkICAgICAgICAgICAgIDogJS4qc1xuIiwgQUNQSV9PRU1fSURfU0laRSwgYXN1c19pbmZvLT5vZW1faWQpOworCQlzZXFfcHJpbnRmKG0sICJPRU0gdGFibGUgaWQgICAgICAgOiAlLipzXG4iLCBBQ1BJX09FTV9UQUJMRV9JRF9TSVpFLCBhc3VzX2luZm8tPm9lbV90YWJsZV9pZCk7CisJCXNlcV9wcmludGYobSwgIk9FTSByZXZpc2lvbiAgICAgICA6IDB4JXhcbiIsIGFzdXNfaW5mby0+b2VtX3JldmlzaW9uKTsKKwkJc2VxX3ByaW50ZihtLCAiQVNMIGNvbXAgdmVuZG9yIGlkIDogJS4qc1xuIiwgQUNQSV9OQU1FX1NJWkUsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX2lkKTsKKwkJc2VxX3ByaW50ZihtLCAiQVNMIGNvbXAgcmV2aXNpb24gIDogMHgleFxuIiwgYXN1c19pbmZvLT5hc2xfY29tcGlsZXJfcmV2aXNpb24pOwogCX0KIAotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXN1c19pbmZvX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYXN1c19pbmZvX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzdXNfaW5mb19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGFzdXNfaW5mb19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qCiAgKiAvcHJvYyBoYW5kbGVycwogICogV2Ugd3JpdGUgb3VyIGluZm8gaW4gcGFnZSwgd2UgYmVnaW4gYXQgb2Zmc2V0IG9mZiBhbmQgY2Fubm90IHdyaXRlIG1vcmUKQEAgLTYzOSwzNCArNjI5LDQ4IEBACiAvKgogICogUHJvYyBoYW5kbGVycyBmb3IgTUxFRAogICovCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfbWxlZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWxlZF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwKLQkJICAgICAgIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPm1sZWRfc3RhdHVzLCBNTEVEX09OKSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHJlYWRfbGVkKGhvdGstPm1ldGhvZHMtPm1sZWRfc3RhdHVzLCBNTEVEX09OKSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfbWxlZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWxlZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1sZWRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbWxlZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCXJldHVybiB3cml0ZV9sZWQoYnVmZmVyLCBjb3VudCwgaG90ay0+bWV0aG9kcy0+bXRfbWxlZCwgTUxFRF9PTiwgMSk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1sZWRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtbGVkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBtbGVkX3Byb2Nfd3JpdGUsCit9OworCiAvKgogICogUHJvYyBoYW5kbGVycyBmb3IgTEVEIGRpc3BsYXkKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX2xlZGQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGxlZGRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiMHglMDh4XG4iLCBob3RrLT5sZWRkX3N0YXR1cyk7CisJc2VxX3ByaW50ZihtLCAiMHglMDh4XG4iLCBob3RrLT5sZWRkX3N0YXR1cyk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfbGVkZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGVkZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxlZGRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgbGVkZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCBydiwgdmFsdWU7CiAKQEAgLTY4Miw2MSArNjg2LDEwNCBAQAogCXJldHVybiBydjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGVkZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGxlZGRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGxlZGRfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBQcm9jIGhhbmRsZXJzIGZvciBXTEVECiAgKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF93bGVkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCB3bGVkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLAotCQkgICAgICAgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+d2xlZF9zdGF0dXMsIFdMRURfT04pKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+d2xlZF9zdGF0dXMsIFdMRURfT04pKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV93bGVkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCB3bGVkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgd2xlZF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCB3bGVkX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJcmV0dXJuIHdyaXRlX2xlZChidWZmZXIsIGNvdW50LCBob3RrLT5tZXRob2RzLT5tdF93bGVkLCBXTEVEX09OLCAwKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2xlZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHdsZWRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHdsZWRfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBQcm9jIGhhbmRsZXJzIGZvciBCbHVldG9vdGgKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX2JsdWV0b290aChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkJICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJsdWV0b290aF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgcmVhZF9sZWQoaG90ay0+bWV0aG9kcy0+YnRfc3RhdHVzLCBCVF9PTikpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCByZWFkX2xlZChob3RrLT5tZXRob2RzLT5idF9zdGF0dXMsIEJUX09OKSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2Nfd3JpdGVfYmx1ZXRvb3RoKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJsdWV0b290aF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJsdWV0b290aF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBibHVldG9vdGhfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAkvKiBOb3RlOiBtdF9idF9zd2l0Y2ggY29udHJvbHMgYm90aCBpbnRlcm5hbCBCbHVldG9vdGggYWRhcHRlcidzCiAJICAgcHJlc2VuY2UgYW5kIGl0cyBMRUQgKi8KIAlyZXR1cm4gd3JpdGVfbGVkKGJ1ZmZlciwgY291bnQsIGhvdGstPm1ldGhvZHMtPm10X2J0X3N3aXRjaCwgQlRfT04sIDApOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibHVldG9vdGhfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBibHVldG9vdGhfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGJsdWV0b290aF9wcm9jX3dyaXRlLAorfTsKKwogLyoKICAqIFByb2MgaGFuZGxlcnMgZm9yIFRMRUQKICAqLwotc3RhdGljIGludAotcHJvY19yZWFkX3RsZWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHRsZWRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsCi0JCSAgICAgICByZWFkX2xlZChob3RrLT5tZXRob2RzLT50bGVkX3N0YXR1cywgVExFRF9PTikpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCByZWFkX2xlZChob3RrLT5tZXRob2RzLT50bGVkX3N0YXR1cywgVExFRF9PTikpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX3RsZWQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHRsZWRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0bGVkX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRsZWRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlyZXR1cm4gd3JpdGVfbGVkKGJ1ZmZlciwgY291bnQsIGhvdGstPm1ldGhvZHMtPm10X3RsZWQsIFRMRURfT04sIDApOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0bGVkX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdGxlZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gdGxlZF9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIGludCBnZXRfbGNkX3N0YXRlKHZvaWQpCiB7CiAJaW50IGxjZCA9IDA7CkBAIC04MjksMTYgKzg3NiwxOSBAQAogCiB9CiAKLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9sY2QoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGNkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCBnZXRfbGNkX3N0YXRlKCkpOworCXNlcV9wcmludGYobSwgIiVkXG4iLCBnZXRfbGNkX3N0YXRlKCkpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX2xjZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbGNkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbGNkX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxjZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQogewogCWludCBydiwgdmFsdWU7CiAKQEAgLTg0OCw2ICs4OTgsMTUgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGxjZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gbGNkX3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJaW50IHZhbHVlOwpAQCAtOTA3LDE2ICs5NjYsMTkgQEAKIAlyZXR1cm4gc2V0X2JyaWdodG5lc3MoYmQtPnByb3BzLmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgaW50Ci1wcm9jX3JlYWRfYnJuKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJybl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgcmVhZF9icmlnaHRuZXNzKE5VTEwpKTsKKwlzZXFfcHJpbnRmKG0sICIlZFxuIiwgcmVhZF9icmlnaHRuZXNzKE5VTEwpKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcHJvY193cml0ZV9icm4oc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGJybl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJybl9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBicm5fcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlpbnQgcnYsIHZhbHVlOwogCkBAIC05MjksNiArOTkxLDE1IEBACiAJcmV0dXJuIHJ2OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicm5fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBicm5fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGJybl9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIHZvaWQgc2V0X2Rpc3BsYXkoaW50IHZhbHVlKQogewogCS8qIG5vIHNhbml0eSBjaGVjayBuZWVkZWQgZm9yIG5vdyAqLwpAQCAtOTQyLDkgKzEwMTMsNyBAQAogICogTm93LCAqdGhpcyogb25lIGNvdWxkIGJlIG1vcmUgdXNlci1mcmllbmRseSwgYnV0IHNvIGZhciwgbm8tb25lIGhhcwogICogY29tcGxhaW5lZC4gVGhlIHNpZ25pZmljYW5jZSBvZiBiaXRzIGlzIHRoZSBzYW1lIGFzIGluIHByb2Nfd3JpdGVfZGlzcCgpCiAgKi8KLXN0YXRpYyBpbnQKLXByb2NfcmVhZF9kaXNwKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAotCSAgICAgICB2b2lkICpkYXRhKQorc3RhdGljIGludCBkaXNwX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IHZhbHVlID0gMDsKIApAQCAtOTUyLDcgKzEwMjEsMTMgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIkFzdXMgQUNQSTogRXJyb3IgcmVhZGluZyBkaXNwbGF5IHN0YXR1c1xuIik7CiAJdmFsdWUgJj0gMHgwNzsJLyogbmVlZGVkIGZvciBzb21lIG1vZGVscywgc2hvdWxkbid0IGh1cnQgb3RoZXJzICovCi0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCB2YWx1ZSk7CisJc2VxX3ByaW50ZihtLCAiJWRcbiIsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGlzcF9wcm9jX3Nob3csIE5VTEwpOwogfQogCiAvKgpAQCAtOTYxLDkgKzEwMzYsOCBAQAogICogKGJpdHdpc2UpIG9mIHRoZXNlIHdpbGwgc3VmZmljZS4gSSBuZXZlciBhY3R1YWxseSB0ZXN0ZWQgMyBkaXNwbGF5cyBob29rZWQKICAqIHVwIHNpbXVsdGFuZW91c2x5LCBzbyBiZSB3YXJuZWQuIFNlZSB0aGUgYWNwaTRhc3VzIFJFQURNRSBmb3IgbW9yZSBpbmZvLgogICovCi1zdGF0aWMgaW50Ci1wcm9jX3dyaXRlX2Rpc3Aoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCXVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdCBkaXNwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJaW50IHJ2LCB2YWx1ZTsKIApAQCAtOTczLDI1ICsxMDQ3LDI3IEBACiAJcmV0dXJuIHJ2OwogfQogCi10eXBlZGVmIGludCAocHJvY19yZWFkZnVuYykgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXR5cGVkZWYgaW50IChwcm9jX3dyaXRlZnVuYykgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaXNwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGlzcF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZGlzcF9wcm9jX3dyaXRlLAorfTsKIAogc3RhdGljIGludAotYXN1c19wcm9jX2FkZChjaGFyICpuYW1lLCBwcm9jX3dyaXRlZnVuYyAqd3JpdGVmdW5jLAotCQkgICAgIHByb2NfcmVhZGZ1bmMgKnJlYWRmdW5jLCBtb2RlX3QgbW9kZSwKK2FzdXNfcHJvY19hZGQoY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqcHJvY19mb3BzLCBtb2RlX3QgbW9kZSwKIAkJICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2MgPQotCSAgICBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBtb2RlLCBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOworCisJcHJvYyA9IHByb2NfY3JlYXRlX2RhdGEobmFtZSwgbW9kZSwgYWNwaV9kZXZpY2VfZGlyKGRldmljZSksCisJCQkJcHJvY19mb3BzLCBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpOwogCWlmICghcHJvYykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIFVuYWJsZSB0byBjcmVhdGUgJXMgZnMgZW50cnlcbiIsIG5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQotCXByb2MtPndyaXRlX3Byb2MgPSB3cml0ZWZ1bmM7Ci0JcHJvYy0+cmVhZF9wcm9jID0gcmVhZGZ1bmM7Ci0JcHJvYy0+ZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAlwcm9jLT5naWQgPSBhc3VzX2dpZDsKIAlyZXR1cm4gMDsKQEAgLTEwMjAsMTAgKzEwOTYsOSBAQAogCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfSU5GTywgbW9kZSwgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOworCXByb2MgPSBwcm9jX2NyZWF0ZShQUk9DX0lORk8sIG1vZGUsIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLAorCQkJICAgJmFzdXNfaW5mb19wcm9jX2ZvcHMpOwogCWlmIChwcm9jKSB7Ci0JCXByb2MtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9pbmZvOwotCQlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCQlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAkJcHJvYy0+Z2lkID0gYXN1c19naWQ7CiAJfSBlbHNlIHsKQEAgLTEwMzIsMjggKzExMDcsMjMgQEAKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfd2xlZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfV0xFRCwgJnByb2Nfd3JpdGVfd2xlZCwgJnByb2NfcmVhZF93bGVkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX1dMRUQsICZ3bGVkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfbGVkZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfTEVERCwgJnByb2Nfd3JpdGVfbGVkZCwgJnByb2NfcmVhZF9sZWRkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0xFREQsICZsZWRkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfbWxlZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfTUxFRCwgJnByb2Nfd3JpdGVfbWxlZCwgJnByb2NfcmVhZF9tbGVkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX01MRUQsICZtbGVkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfdGxlZCkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfVExFRCwgJnByb2Nfd3JpdGVfdGxlZCwgJnByb2NfcmVhZF90bGVkLAotCQkJICAgICAgbW9kZSwgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX1RMRUQsICZ0bGVkX3Byb2NfZm9wcywgbW9kZSwgZGV2aWNlKTsKIAl9CiAKIAlpZiAoaG90ay0+bWV0aG9kcy0+bXRfYnRfc3dpdGNoKSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19CVCwgJnByb2Nfd3JpdGVfYmx1ZXRvb3RoLAotCQkJICAgICAgJnByb2NfcmVhZF9ibHVldG9vdGgsIG1vZGUsIGRldmljZSk7CisJCWFzdXNfcHJvY19hZGQoUFJPQ19CVCwgJmJsdWV0b290aF9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJLyoKQEAgLTEwNjEsMTkgKzExMzEsMTYgQEAKIAkgKiBhY2Nlc3NpYmxlIGZyb20gdGhlIGtleWJvYXJkCiAJICovCiAJaWYgKGhvdGstPm1ldGhvZHMtPm10X2xjZF9zd2l0Y2ggJiYgaG90ay0+bWV0aG9kcy0+bGNkX3N0YXR1cykgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfTENELCAmcHJvY193cml0ZV9sY2QsICZwcm9jX3JlYWRfbGNkLCBtb2RlLAotCQkJICAgICAgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0xDRCwgJmxjZF9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJaWYgKChob3RrLT5tZXRob2RzLT5icmlnaHRuZXNzX3VwICYmIGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3NfZG93bikgfHwKIAkgICAgKGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3NfZ2V0ICYmIGhvdGstPm1ldGhvZHMtPmJyaWdodG5lc3Nfc2V0KSkgewotCQlhc3VzX3Byb2NfYWRkKFBST0NfQlJOLCAmcHJvY193cml0ZV9icm4sICZwcm9jX3JlYWRfYnJuLCBtb2RlLAotCQkJICAgICAgZGV2aWNlKTsKKwkJYXN1c19wcm9jX2FkZChQUk9DX0JSTiwgJmJybl9wcm9jX2ZvcHMsIG1vZGUsIGRldmljZSk7CiAJfQogCiAJaWYgKGhvdGstPm1ldGhvZHMtPmRpc3BsYXlfc2V0KSB7Ci0JCWFzdXNfcHJvY19hZGQoUFJPQ19ESVNQLCAmcHJvY193cml0ZV9kaXNwLCAmcHJvY19yZWFkX2Rpc3AsCi0JCQkgICAgICBtb2RlLCBkZXZpY2UpOworCQlhc3VzX3Byb2NfYWRkKFBST0NfRElTUCwgJmRpc3BfcHJvY19mb3BzLCBtb2RlLCBkZXZpY2UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTAwODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBUaGFkZXUgTGltYSBkZSBTb3V6YSBDYXNjYXJkbyA8Y2FzY2FyZG9AaG9sb3Njb3Bpby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworCitzdHJ1Y3QgY21wY19hY2NlbCB7CisJaW50IHNlbnNpdGl2aXR5OworfTsKKworI2RlZmluZSBDTVBDX0FDQ0VMX1NFTlNJVElWSVRZX0RFRkFVTFQJCTUKKworCisvKgorICogR2VuZXJpYyBpbnB1dCBkZXZpY2UgY29kZS4KKyAqLworCit0eXBlZGVmIHZvaWQgKCppbnB1dF9kZXZpY2VfaW5pdCkoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKKworc3RhdGljIGludCBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpLCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBpbnB1dF9kZXZpY2VfaW5pdCBpZGV2X2luaXQpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJaW50IGVycm9yOworCisJaW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlpbnB1dGRldi0+bmFtZSA9IG5hbWU7CisJaW5wdXRkZXYtPmRldi5wYXJlbnQgPSAmYWNwaS0+ZGV2OworCWlkZXZfaW5pdChpbnB1dGRldik7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRkZXYpOworCWlmIChlcnJvcikgeworCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dGRldik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZhY3BpLT5kZXYsIGlucHV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbXBjX3JlbW92ZV9hY3BpX25vdGlmeV9kZXZpY2Uoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZhY3BpLT5kZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFjY2VsZXJvbWV0ZXIgY29kZS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfc3RhcnRfYWNjZWwoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtWzJdOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHgzOworCXBhcmFtWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFDTUQiLCAmaW5wdXQsIE5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX3N0b3BfYWNjZWwoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXVuaW9uIGFjcGlfb2JqZWN0IHBhcmFtWzJdOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHg0OworCXBhcmFtWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIkFDTUQiLCAmaW5wdXQsIE5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX2FjY2VsX3NldF9zZW5zaXRpdml0eShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB2YWwpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisKKwlwYXJhbVswXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1bMF0uaW50ZWdlci52YWx1ZSA9IDB4MDI7CisJcGFyYW1bMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzFdLmludGVnZXIudmFsdWUgPSB2YWw7CisJaW5wdXQuY291bnQgPSAyOworCWlucHV0LnBvaW50ZXIgPSBwYXJhbTsKKwlyZXR1cm4gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiQUNNRCIsICZpbnB1dCwgTlVMTCk7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX2dldF9hY2NlbChhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICB1bnNpZ25lZCBjaGFyICp4LAorCQkJCSAgdW5zaWduZWQgY2hhciAqeSwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKnopCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIDAgfTsKKwl1bnNpZ25lZCBjaGFyICpsb2NzOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbVswXS5pbnRlZ2VyLnZhbHVlID0gMHgwMTsKKwlwYXJhbVsxXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5wdXQuY291bnQgPSAyOworCWlucHV0LnBvaW50ZXIgPSBwYXJhbTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJBQ01EIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwkJb2JqID0gb3V0cHV0LnBvaW50ZXI7CisJCWxvY3MgPSBvYmotPmJ1ZmZlci5wb2ludGVyOworCQkqeCA9IGxvY3NbMF07CisJCSp5ID0gbG9jc1sxXTsKKwkJKnogPSBsb2NzWzJdOworCQlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGNtcGNfYWNjZWxfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgdTMyIGV2ZW50KQoreworCWlmIChldmVudCA9PSAweDgxKSB7CisJCXVuc2lnbmVkIGNoYXIgeCwgeSwgejsKKwkJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJCXN0YXR1cyA9IGNtcGNfZ2V0X2FjY2VsKGRldi0+aGFuZGxlLCAmeCwgJnksICZ6KTsKKwkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWSwgeSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWiwgeik7CisJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJfQorCX0KK30KKworc3RhdGljIHNzaXplX3QgY21wY19hY2NlbF9zZW5zaXRpdml0eV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGNtcGNfYWNjZWwgKmFjY2VsOworCisJYWNwaSA9IHRvX2FjcGlfZGV2aWNlKGRldik7CisJaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJYWNjZWwgPSBkZXZfZ2V0X2RydmRhdGEoJmlucHV0ZGV2LT5kZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFjY2VsLT5zZW5zaXRpdml0eSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGNtcGNfYWNjZWwgKmFjY2VsOworCXVuc2lnbmVkIGxvbmcgc2Vuc2l0aXZpdHk7CisJaW50IHI7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKKwlpbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwlhY2NlbCA9IGRldl9nZXRfZHJ2ZGF0YSgmaW5wdXRkZXYtPmRldik7CisKKwlyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmc2Vuc2l0aXZpdHkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWFjY2VsLT5zZW5zaXRpdml0eSA9IHNlbnNpdGl2aXR5OworCWNtcGNfYWNjZWxfc2V0X3NlbnNpdGl2aXR5KGFjcGktPmhhbmRsZSwgc2Vuc2l0aXZpdHkpOworCisJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7Cit9CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfYXR0ciA9IHsKKwkuYXR0ciA9IHsgLm5hbWUgPSAic2Vuc2l0aXZpdHkiLCAubW9kZSA9IDA2NjAgfSwKKwkuc2hvdyA9IGNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfc2hvdywKKwkuc3RvcmUgPSBjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X3N0b3JlCit9OworCitzdGF0aWMgaW50IGNtcGNfYWNjZWxfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGk7CisKKwlhY3BpID0gdG9fYWNwaV9kZXZpY2UoaW5wdXQtPmRldi5wYXJlbnQpOworCWlmIChBQ1BJX1NVQ0NFU1MoY21wY19zdGFydF9hY2NlbChhY3BpLT5oYW5kbGUpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGNtcGNfYWNjZWxfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphY3BpOworCisJYWNwaSA9IHRvX2FjcGlfZGV2aWNlKGlucHV0LT5kZXYucGFyZW50KTsKKwljbXBjX3N0b3BfYWNjZWwoYWNwaS0+aGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQgY21wY19hY2NlbF9pZGV2X2luaXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpCit7CisJc2V0X2JpdChFVl9BQlMsIGlucHV0ZGV2LT5ldmJpdCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRkZXYsIEFCU19YLCAwLCAyNTUsIDgsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0ZGV2LCBBQlNfWSwgMCwgMjU1LCA4LCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dGRldiwgQUJTX1osIDAsIDI1NSwgOCwgMCk7CisJaW5wdXRkZXYtPm9wZW4gPSBjbXBjX2FjY2VsX29wZW47CisJaW5wdXRkZXYtPmNsb3NlID0gY21wY19hY2NlbF9jbG9zZTsKK30KKworc3RhdGljIGludCBjbXBjX2FjY2VsX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBjbXBjX2FjY2VsICphY2NlbDsKKworCWFjY2VsID0ga21hbGxvYyhzaXplb2YoKmFjY2VsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY2NlbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhY2NlbC0+c2Vuc2l0aXZpdHkgPSBDTVBDX0FDQ0VMX1NFTlNJVElWSVRZX0RFRkFVTFQ7CisJY21wY19hY2NlbF9zZXRfc2Vuc2l0aXZpdHkoYWNwaS0+aGFuZGxlLCBhY2NlbC0+c2Vuc2l0aXZpdHkpOworCisJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFjcGktPmRldiwgJmNtcGNfYWNjZWxfc2Vuc2l0aXZpdHlfYXR0cik7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWxlZF9maWxlOworCisJZXJyb3IgPSBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSwgImNtcGNfYWNjZWwiLAorCQkJCQkgICAgY21wY19hY2NlbF9pZGV2X2luaXQpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsZWRfaW5wdXQ7CisKKwlpbnB1dGRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWNwaS0+ZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoJmlucHV0ZGV2LT5kZXYsIGFjY2VsKTsKKworCXJldHVybiAwOworCitmYWlsZWRfaW5wdXQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZhY3BpLT5kZXYsICZjbXBjX2FjY2VsX3NlbnNpdGl2aXR5X2F0dHIpOworZmFpbGVkX2ZpbGU6CisJa2ZyZWUoYWNjZWwpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjbXBjX2FjY2VsX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGksIGludCB0eXBlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBjbXBjX2FjY2VsICphY2NlbDsKKworCWlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZhY3BpLT5kZXYpOworCWFjY2VsID0gZGV2X2dldF9kcnZkYXRhKCZpbnB1dGRldi0+ZGV2KTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmYWNwaS0+ZGV2LCAmY21wY19hY2NlbF9zZW5zaXRpdml0eV9hdHRyKTsKKwlyZXR1cm4gY21wY19yZW1vdmVfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfYWNjZWxfZGV2aWNlX2lkc1tdID0geworCXsiQUNDRTAwMDAiLCAwfSwKKwl7IiIsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2FjY2VsX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYWNjZWxfYWNwaV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiY21wY19hY2NlbCIsCisJLmNsYXNzID0gImNtcGNfYWNjZWwiLAorCS5pZHMgPSBjbXBjX2FjY2VsX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGNtcGNfYWNjZWxfYWRkLAorCQkucmVtb3ZlID0gY21wY19hY2NlbF9yZW1vdmUsCisJCS5ub3RpZnkgPSBjbXBjX2FjY2VsX2hhbmRsZXIsCisJfQorfTsKKworCisvKgorICogVGFibGV0IG1vZGUgY29kZS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfZ2V0X3RhYmxldChhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nICp2YWx1ZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgb3V0cHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbS5pbnRlZ2VyLnZhbHVlID0gMHgwMTsKKwlpbnB1dC5jb3VudCA9IDE7CisJaW5wdXQucG9pbnRlciA9ICZwYXJhbTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiVENNRCIsICZpbnB1dCwgJm91dHB1dCk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQkqdmFsdWUgPSBvdXRwdXQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgY21wY190YWJsZXRfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgdTMyIGV2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSAwOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisKKwlpZiAoZXZlbnQgPT0gMHg4MSkgeworCQlpZiAoQUNQSV9TVUNDRVNTKGNtcGNfZ2V0X3RhYmxldChkZXYtPmhhbmRsZSwgJnZhbCkpKQorCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChpbnB1dGRldiwgU1dfVEFCTEVUX01PREUsICF2YWwpOworCX0KK30KKworc3RhdGljIHZvaWQgY21wY190YWJsZXRfaWRldl9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSAwOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaTsKKworCXNldF9iaXQoRVZfU1csIGlucHV0ZGV2LT5ldmJpdCk7CisJc2V0X2JpdChTV19UQUJMRVRfTU9ERSwgaW5wdXRkZXYtPnN3Yml0KTsKKworCWFjcGkgPSB0b19hY3BpX2RldmljZShpbnB1dGRldi0+ZGV2LnBhcmVudCk7CisJaWYgKEFDUElfU1VDQ0VTUyhjbXBjX2dldF90YWJsZXQoYWNwaS0+aGFuZGxlLCAmdmFsKSkpCisJCWlucHV0X3JlcG9ydF9zd2l0Y2goaW5wdXRkZXYsIFNXX1RBQkxFVF9NT0RFLCAhdmFsKTsKK30KKworc3RhdGljIGludCBjbXBjX3RhYmxldF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpKQoreworCXJldHVybiBjbXBjX2FkZF9hY3BpX25vdGlmeV9kZXZpY2UoYWNwaSwgImNtcGNfdGFibGV0IiwKKwkJCQkJICAgY21wY190YWJsZXRfaWRldl9pbml0KTsKK30KKworc3RhdGljIGludCBjbXBjX3RhYmxldF9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICphY3BpLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4gY21wY19yZW1vdmVfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGkpOworfQorCitzdGF0aWMgaW50IGNtcGNfdGFibGV0X3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IDA7CisJaWYgKEFDUElfU1VDQ0VTUyhjbXBjX2dldF90YWJsZXQoYWNwaS0+aGFuZGxlLCAmdmFsKSkpCisJCWlucHV0X3JlcG9ydF9zd2l0Y2goaW5wdXRkZXYsIFNXX1RBQkxFVF9NT0RFLCAhdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX3RhYmxldF9kZXZpY2VfaWRzW10gPSB7CisJeyJUQkxUMDAwMCIsIDB9LAorCXsiIiwgMH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfdGFibGV0X2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfdGFibGV0X2FjcGlfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImNtcGNfdGFibGV0IiwKKwkuY2xhc3MgPSAiY21wY190YWJsZXQiLAorCS5pZHMgPSBjbXBjX3RhYmxldF9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBjbXBjX3RhYmxldF9hZGQsCisJCS5yZW1vdmUgPSBjbXBjX3RhYmxldF9yZW1vdmUsCisJCS5yZXN1bWUgPSBjbXBjX3RhYmxldF9yZXN1bWUsCisJCS5ub3RpZnkgPSBjbXBjX3RhYmxldF9oYW5kbGVyLAorCX0KK307CisKKworLyoKKyAqIEJhY2tsaWdodCBjb2RlLgorICovCisKK3N0YXRpYyBhY3BpX3N0YXR1cyBjbXBjX2dldF9icmlnaHRuZXNzKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICp2YWx1ZSkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgb3V0cHV0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXBhcmFtLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlwYXJhbS5pbnRlZ2VyLnZhbHVlID0gMHhDMDsKKwlpbnB1dC5jb3VudCA9IDE7CisJaW5wdXQucG9pbnRlciA9ICZwYXJhbTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiR1JESSIsICZpbnB1dCwgJm91dHB1dCk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQkqdmFsdWUgPSBvdXRwdXQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGNtcGNfc2V0X2JyaWdodG5lc3MoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1bMl07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBvdXRwdXQ7CisKKwlwYXJhbVswXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJcGFyYW1bMF0uaW50ZWdlci52YWx1ZSA9IDB4QzA7CisJcGFyYW1bMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCXBhcmFtWzFdLmludGVnZXIudmFsdWUgPSB2YWx1ZTsKKwlpbnB1dC5jb3VudCA9IDI7CisJaW5wdXQucG9pbnRlciA9IHBhcmFtOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJHV1JJIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGNtcGNfYmxfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJdW5zaWduZWQgbG9uZyBsb25nIGJyaWdodG5lc3M7CisKKwloYW5kbGUgPSBibF9nZXRfZGF0YShiZCk7CisJc3RhdHVzID0gY21wY19nZXRfYnJpZ2h0bmVzcyhoYW5kbGUsICZicmlnaHRuZXNzKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBicmlnaHRuZXNzOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGNtcGNfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKworCWhhbmRsZSA9IGJsX2dldF9kYXRhKGJkKTsKKwlzdGF0dXMgPSBjbXBjX3NldF9icmlnaHRuZXNzKGhhbmRsZSwgYmQtPnByb3BzLmJyaWdodG5lc3MpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjbXBjX2JsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBjbXBjX2JsX2dldF9icmlnaHRuZXNzLAorCS51cGRhdGVfc3RhdHVzID0gY21wY19ibF91cGRhdGVfc3RhdHVzCit9OworCitzdGF0aWMgaW50IGNtcGNfYmxfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSkKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7CisKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImNtcGNfYmwiLCAmYWNwaS0+ZGV2LAorCQkJCSAgICAgICBhY3BpLT5oYW5kbGUsICZjbXBjX2JsX29wcyk7CisJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gNzsKKwlkZXZfc2V0X2RydmRhdGEoJmFjcGktPmRldiwgYmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtcGNfYmxfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSwgaW50IHR5cGUpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOworCisJYmQgPSBkZXZfZ2V0X2RydmRhdGEoJmFjcGktPmRldik7CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKKwl7IklQTUwyMDAiLCAwfSwKKwl7IiIsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2RldmljZV9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYmxfYWNwaV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiY21wYyIsCisJLmNsYXNzID0gImNtcGMiLAorCS5pZHMgPSBjbXBjX2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGNtcGNfYmxfYWRkLAorCQkucmVtb3ZlID0gY21wY19ibF9yZW1vdmUKKwl9Cit9OworCisKKy8qCisgKiBFeHRyYSBrZXlzIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgY21wY19rZXlzX2NvZGVzW10gPSB7CisJS0VZX1VOS05PV04sCisJS0VZX1dMQU4sCisJS0VZX1NXSVRDSFZJREVPTU9ERSwKKwlLRVlfQlJJR0hUTkVTU0RPV04sCisJS0VZX0JSSUdIVE5FU1NVUCwKKwlLRVlfVkVORE9SLAorCUtFWV9NQVgKK307CisKK3N0YXRpYyB2b2lkIGNtcGNfa2V5c19oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJaW50IGNvZGUgPSBLRVlfTUFYOworCisJaWYgKChldmVudCAmIDB4MEYpIDwgQVJSQVlfU0laRShjbXBjX2tleXNfY29kZXMpKQorCQljb2RlID0gY21wY19rZXlzX2NvZGVzW2V2ZW50ICYgMHgwRl07CisJaW5wdXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTs7CisJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgY29kZSwgIShldmVudCAmIDB4MTApKTsKK30KKworc3RhdGljIHZvaWQgY21wY19rZXlzX2lkZXZfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlpbnQgaTsKKworCXNldF9iaXQoRVZfS0VZLCBpbnB1dGRldi0+ZXZiaXQpOworCWZvciAoaSA9IDA7IGNtcGNfa2V5c19jb2Rlc1tpXSAhPSBLRVlfTUFYOyBpKyspCisJCXNldF9iaXQoY21wY19rZXlzX2NvZGVzW2ldLCBpbnB1dGRldi0+a2V5Yml0KTsKK30KKworc3RhdGljIGludCBjbXBjX2tleXNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSkKK3sKKwlyZXR1cm4gY21wY19hZGRfYWNwaV9ub3RpZnlfZGV2aWNlKGFjcGksICJjbXBjX2tleXMiLAorCQkJCQkgICBjbXBjX2tleXNfaWRldl9pbml0KTsKK30KKworc3RhdGljIGludCBjbXBjX2tleXNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSwgaW50IHR5cGUpCit7CisJcmV0dXJuIGNtcGNfcmVtb3ZlX2FjcGlfbm90aWZ5X2RldmljZShhY3BpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2tleXNfZGV2aWNlX2lkc1tdID0geworCXsiRm5CVDAwMDAiLCAwfSwKKwl7IiIsIDB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2tleXNfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19rZXlzX2FjcGlfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImNtcGNfa2V5cyIsCisJLmNsYXNzID0gImNtcGNfa2V5cyIsCisJLmlkcyA9IGNtcGNfa2V5c19kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBjbXBjX2tleXNfYWRkLAorCQkucmVtb3ZlID0gY21wY19rZXlzX3JlbW92ZSwKKwkJLm5vdGlmeSA9IGNtcGNfa2V5c19oYW5kbGVyLAorCX0KK307CisKKworLyoKKyAqIEdlbmVyYWwgaW5pdC9leGl0IGNvZGUuCisgKi8KKworc3RhdGljIGludCBjbXBjX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfa2V5c19hY3BpX2RyaXZlcik7CisJaWYgKHIpCisJCWdvdG8gZmFpbGVkX2tleXM7CisKKwlyID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2JsX2FjcGlfZHJpdmVyKTsKKwlpZiAocikKKwkJZ290byBmYWlsZWRfYmw7CisKKwlyID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZjbXBjX3RhYmxldF9hY3BpX2RyaXZlcik7CisJaWYgKHIpCisJCWdvdG8gZmFpbGVkX3RhYmxldDsKKworCXIgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfYWNjZWxfYWNwaV9kcml2ZXIpOworCWlmIChyKQorCQlnb3RvIGZhaWxlZF9hY2NlbDsKKworCXJldHVybiByOworCitmYWlsZWRfYWNjZWw6CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtcGNfdGFibGV0X2FjcGlfZHJpdmVyKTsKKworZmFpbGVkX3RhYmxldDoKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY19ibF9hY3BpX2RyaXZlcik7CisKK2ZhaWxlZF9ibDoKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY19rZXlzX2FjcGlfZHJpdmVyKTsKKworZmFpbGVkX2tleXM6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGNtcGNfZXhpdCh2b2lkKQoreworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2FjY2VsX2FjcGlfZHJpdmVyKTsKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY190YWJsZXRfYWNwaV9kcml2ZXIpOworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZjbXBjX2JsX2FjcGlfZHJpdmVyKTsKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmY21wY19rZXlzX2FjcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY21wY19pbml0KTsKK21vZHVsZV9leGl0KGNtcGNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwppbmRleCA2N2YzZmU3Li4xYjFkZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMKQEAgLTIwMiw4ICsyMDIsMTMgQEAKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgcmVzcG9uc2UgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCXdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKwlzdGF0dXMgPSB3bWlfZ2V0X2V2ZW50X2RhdGEodmFsdWUsICZyZXNwb25zZSk7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLXdtaTogYmFkIGV2ZW50IHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCQlyZXR1cm47CisJfQogCiAJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopcmVzcG9uc2UucG9pbnRlcjsKIApAQCAtMjM4LDYgKzI0Myw3IEBACiAJCQlpbnB1dF9zeW5jKGRlbGxfd21pX2lucHV0X2Rldik7CiAJCX0KIAl9CisJa2ZyZWUob2JqKTsKIH0KIAogCkBAIC0zMjIsMzkgKzMyOCwzNyBAQAogc3RhdGljIGludCBfX2luaXQgZGVsbF93bWlfaW5pdCh2b2lkKQogewogCWludCBlcnI7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JaWYgKHdtaV9oYXNfZ3VpZChERUxMX0VWRU5UX0dVSUQpKSB7Ci0KLQkJZG1pX3dhbGsoZmluZF9oa190eXBlLCBOVUxMKTsKLQotCQllcnIgPSBkZWxsX3dtaV9pbnB1dF9zZXR1cCgpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWVyciA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCwKLQkJCQkJCSBkZWxsX3dtaV9ub3RpZnksIE5VTEwpOwotCQlpZiAoZXJyKSB7Ci0JCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJkZWxsLXdtaTogVW5hYmxlIHRvIHJlZ2lzdGVyIgotCQkJICAgICAgICIgbm90aWZ5IGhhbmRsZXIgLSAlZFxuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlhY3BpX3ZpZGVvID0gYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpOwotCi0JfSBlbHNlCisJaWYgKCF3bWlfaGFzX2d1aWQoREVMTF9FVkVOVF9HVUlEKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJkZWxsLXdtaTogTm8ga25vd24gV01JIEdVSUQgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkbWlfd2FsayhmaW5kX2hrX3R5cGUsIE5VTEwpOworCWFjcGlfdmlkZW8gPSBhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCk7CisKKwllcnIgPSBkZWxsX3dtaV9pbnB1dF9zZXR1cCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzdGF0dXMgPSB3bWlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihERUxMX0VWRU5UX0dVSUQsCisJCQkJCSBkZWxsX3dtaV9ub3RpZnksIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJkZWxsLXdtaTogVW5hYmxlIHRvIHJlZ2lzdGVyIG5vdGlmeSBoYW5kbGVyIC0gJWRcbiIsCisJCQlzdGF0dXMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRlbGxfd21pX2V4aXQodm9pZCkKIHsKLQlpZiAod21pX2hhc19ndWlkKERFTExfRVZFTlRfR1VJRCkpIHsKLQkJd21pX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihERUxMX0VWRU5UX0dVSUQpOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZWxsX3dtaV9pbnB1dF9kZXYpOwotCX0KKwl3bWlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGVsbF93bWlfaW5wdXRfZGV2KTsKIH0KIAogbW9kdWxlX2luaXQoZGVsbF93bWlfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwppbmRleCBiY2Q0YmE4Li41ZjMzMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCWNoYXIgcGh5c1szMl07CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGZfZGV2aWNlOwotCXN0cnVjdCBrZmlmbyAqZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gZmlmbzsKIAlzcGlubG9ja190IGZpZm9fbG9jazsKIAlpbnQgcmZraWxsX3N1cHBvcnRlZDsKIAlpbnQgcmZraWxsX3N0YXRlOwpAQCAtMzc2LDggKzM3Niw4IEBACiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZnVqaXRzdS0+YWNwaV9oYW5kbGUsICJHQkxMIiwgTlVMTCwgJnN0YXRlKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAwOwogCiAJZnVqaXRzdS0+YnJpZ2h0bmVzc19sZXZlbCA9IHN0YXRlICYgMHgwZmZmZmZmZjsKIApAQCAtMzk4LDggKzM5OCw4IEBACiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZnVqaXRzdS0+YWNwaV9oYW5kbGUsICJSQkxMIiwgTlVMTCwgJnN0YXRlKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIHN0YXR1czsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtMTsKIAogCWZ1aml0c3UtPm1heF9icmlnaHRuZXNzID0gc3RhdGU7CiAKQEAgLTgyNCwxMiArODI0LDEwIEBACiAKIAkvKiBrZmlmbyAqLwogCXNwaW5fbG9ja19pbml0KCZmdWppdHN1X2hvdGtleS0+Zmlmb19sb2NrKTsKLQlmdWppdHN1X2hvdGtleS0+ZmlmbyA9Ci0JICAgIGtmaWZvX2FsbG9jKFJJTkdCVUZGRVJTSVpFICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwsCi0JCQkmZnVqaXRzdV9ob3RrZXktPmZpZm9fbG9jayk7Ci0JaWYgKElTX0VSUihmdWppdHN1X2hvdGtleS0+ZmlmbykpIHsKKwllcnJvciA9IGtmaWZvX2FsbG9jKCZmdWppdHN1X2hvdGtleS0+ZmlmbywgUklOR0JVRkZFUlNJWkUgKiBzaXplb2YoaW50KSwKKwkJCUdGUF9LRVJORUwpOworCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCWVycm9yID0gUFRSX0VSUihmdWppdHN1X2hvdGtleS0+Zmlmbyk7CiAJCWdvdG8gZXJyX3N0b3A7CiAJfQogCkBAIC05MzQsNyArOTMyLDcgQEAKIGVycl9mcmVlX2lucHV0X2RldjoKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7CiBlcnJfZnJlZV9maWZvOgotCWtmaWZvX2ZyZWUoZnVqaXRzdV9ob3RrZXktPmZpZm8pOworCWtmaWZvX2ZyZWUoJmZ1aml0c3VfaG90a2V5LT5maWZvKTsKIGVycl9zdG9wOgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC05NTYsNyArOTU0LDcgQEAKIAogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKIAotCWtmaWZvX2ZyZWUoZnVqaXRzdV9ob3RrZXktPmZpZm8pOworCWtmaWZvX2ZyZWUoJmZ1aml0c3VfaG90a2V5LT5maWZvKTsKIAogCWZ1aml0c3VfaG90a2V5LT5hY3BpX2hhbmRsZSA9IE5VTEw7CiAKQEAgLTEwMDgsOSArMTAwNiwxMCBAQAogCQkJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfVFJBQ0UsCiAJCQkJCSJQdXNoIGtleWNvZGUgaW50byByaW5nYnVmZmVyIFslZF1cbiIsCiAJCQkJCWtleWNvZGUpOwotCQkJCXN0YXR1cyA9IGtmaWZvX3B1dChmdWppdHN1X2hvdGtleS0+ZmlmbywKKwkJCQlzdGF0dXMgPSBrZmlmb19pbl9sb2NrZWQoJmZ1aml0c3VfaG90a2V5LT5maWZvLAogCQkJCQkJICAgKHVuc2lnbmVkIGNoYXIgKikma2V5Y29kZSwKLQkJCQkJCSAgIHNpemVvZihrZXljb2RlKSk7CisJCQkJCQkgICBzaXplb2Yoa2V5Y29kZSksCisJCQkJCQkgICAmZnVqaXRzdV9ob3RrZXktPmZpZm9fbG9jayk7CiAJCQkJaWYgKHN0YXR1cyAhPSBzaXplb2Yoa2V5Y29kZSkpIHsKIAkJCQkJdmRiZ19wcmludGsoRlVKTEFQVE9QX0RCR19XQVJOLAogCQkJCQkgICAgIkNvdWxkIG5vdCBwdXNoIGtleWNvZGUgWzB4JXhdXG4iLApAQCAtMTAyMSwxMSArMTAyMCwxMiBAQAogCQkJCX0KIAkJCX0gZWxzZSBpZiAoa2V5Y29kZSA9PSAwKSB7CiAJCQkJd2hpbGUgKChzdGF0dXMgPQotCQkJCQlrZmlmb19nZXQKLQkJCQkJKGZ1aml0c3VfaG90a2V5LT5maWZvLCAodW5zaWduZWQgY2hhciAqKQotCQkJCQkgJmtleWNvZGVfciwKLQkJCQkJIHNpemVvZgotCQkJCQkgKGtleWNvZGVfcikpKSA9PSBzaXplb2Yoa2V5Y29kZV9yKSkgeworCQkJCQlrZmlmb19vdXRfbG9ja2VkKAorCQkJCQkgJmZ1aml0c3VfaG90a2V5LT5maWZvLAorCQkJCQkgKHVuc2lnbmVkIGNoYXIgKikgJmtleWNvZGVfciwKKwkJCQkJIHNpemVvZihrZXljb2RlX3IpLAorCQkJCQkgJmZ1aml0c3VfaG90a2V5LT5maWZvX2xvY2spKQorCQkJCQkgPT0gc2l6ZW9mKGtleWNvZGVfcikpIHsKIAkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZV9yLCAwKTsKIAkJCQkJaW5wdXRfc3luYyhpbnB1dCk7CiAJCQkJCXZkYmdfcHJpbnRrKEZVSkxBUFRPUF9EQkdfVFJBQ0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCmluZGV4IDYzYzNlNjUuLmFkNGM0MTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwpAQCAtMTM0LDEwICsxMzQsMTUgQEAKIAogCW9iaiA9IG91dHB1dC5wb2ludGVyOwogCi0JaWYgKCFvYmogfHwgb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpCisJaWYgKCFvYmopCiAJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWJpb3NfcmV0dXJuID0gKigoc3RydWN0IGJpb3NfcmV0dXJuICopb2JqLT5idWZmZXIucG9pbnRlcik7CisJa2ZyZWUob2JqKTsKIAlpZiAoYmlvc19yZXR1cm4ucmV0dXJuX2NvZGUgPiAwKQogCQlyZXR1cm4gYmlvc19yZXR1cm4ucmV0dXJuX2NvZGUgKiAtMTsKIAllbHNlCkBAIC0zMzMsMTcgKzMzOCwyNCBAQAogCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CiAJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKIAlpbnQgZXZlbnRjb2RlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCXdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKwlzdGF0dXMgPSB3bWlfZ2V0X2V2ZW50X2RhdGEodmFsdWUsICZyZXNwb25zZSk7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlwcmludGsoS0VSTl9JTkZPICJocC13bWk6IGJhZCBldmVudCBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KIAogCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKXJlc3BvbnNlLnBvaW50ZXI7CiAKIAlpZiAoIW9iaiB8fCBvYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUiB8fCBvYmotPmJ1ZmZlci5sZW5ndGggIT0gOCkgewogCQlwcmludGsoS0VSTl9JTkZPICJIUCBXTUk6IFVua25vd24gcmVzcG9uc2UgcmVjZWl2ZWRcbiIpOworCQlrZnJlZShvYmopOwogCQlyZXR1cm47CiAJfQogCiAJZXZlbnRjb2RlID0gKigodTggKikgb2JqLT5idWZmZXIucG9pbnRlcik7CisJa2ZyZWUob2JqKTsKIAlpZiAoZXZlbnRjb2RlID09IDB4NCkKIAkJZXZlbnRjb2RlID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfSE9US0VZX1FVRVJZLCAwLAogCQkJCQkJMCk7CkBAIC01NzIsNyArNTg0LDcgQEAKIAlpZiAod21pX2hhc19ndWlkKEhQV01JX0VWRU5UX0dVSUQpKSB7CiAJCWVyciA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKEhQV01JX0VWRU5UX0dVSUQsCiAJCQkJCQkgaHBfd21pX25vdGlmeSwgTlVMTCk7Ci0JCWlmICghZXJyKQorCQlpZiAoQUNQSV9TVUNDRVNTKGVycikpCiAJCQlocF93bWlfaW5wdXRfc2V0dXAoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwppbmRleCAwYzhmZTE0Li5mNWY3MGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCkBAIC0zNCwxNiArMzQsNiBAQAogTU9EVUxFX0FMSUFTKCJ3bWk6NTUxQTFGODQtRkJERC00MTI1LTkxREItM0VBOEY0NEYxRDQ1Iik7CiBNT0RVTEVfQUxJQVMoIndtaTpCNkYzRUVGMi0zRDJGLTQ5REMtOURFMy04NUJDRTE4QzYyRjIiKTsKIAotLyogVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhlIFdNSSBzeXNmcyBpbnRlcmZhY2UgZ29lcyBpbgotCQl7ICJzdm4iLCBETUlfU1lTX1ZFTkRPUiB9LAotCQl7ICJwbiIsICBETUlfUFJPRFVDVF9OQU1FIH0sCi0JCXsgInB2ciIsIERNSV9QUk9EVUNUX1ZFUlNJT04gfSwKLQkJeyAicnZuIiwgRE1JX0JPQVJEX1ZFTkRPUiB9LAotCQl7ICJybiIsICBETUlfQk9BUkRfTkFNRSB9LAotKi8KLQotTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5NSUNSTy1TVEFSSU5URVJOQVRJT05BTCo6cG5NUy02NjM4OioiKTsKLQogI2RlZmluZSBEUlZfTkFNRSAibXNpLXdtaSIKICNkZWZpbmUgRFJWX1BGWCBEUlZfTkFNRSAiOiAiCiAKQEAgLTE1OSw4ICsxNDksMTMgQEAKIAlzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqa2V5OwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAJa3RpbWVfdCBjdXI7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0Jd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOworCXN0YXR1cyA9IHdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX1BGWCAiYmFkIGV2ZW50IHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCQlyZXR1cm47CisJfQogCiAJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopcmVzcG9uc2UucG9pbnRlcjsKIApAQCAtMjQ2LDcgKzI0MSw3IEBACiAJfQogCWVyciA9IHdtaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKE1TSVdNSV9FVkVOVF9HVUlELAogCQkJbXNpX3dtaV9ub3RpZnksIE5VTEwpOwotCWlmIChlcnIpCisJaWYgKEFDUElfRkFJTFVSRShlcnIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IG1zaV93bWlfaW5wdXRfc2V0dXAoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IDdhMmNjOGEuLjVhZjUzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtMTMxLDYgKzEzMSw3IEBACiAJTl9TT05ZX1JGS0lMTCwKIH07CiAKK3N0YXRpYyBpbnQgc29ueV9yZmtpbGxfaGFuZGxlOwogc3RhdGljIHN0cnVjdCByZmtpbGwgKnNvbnlfcmZraWxsX2RldmljZXNbTl9TT05ZX1JGS0lMTF07CiBzdGF0aWMgaW50IHNvbnlfcmZraWxsX2FkZHJlc3NbTl9TT05ZX1JGS0lMTF0gPSB7MHgzMDAsIDB4NTAwLCAweDcwMCwgMHg5MDB9Owogc3RhdGljIHZvaWQgc29ueV9uY19yZmtpbGxfdXBkYXRlKHZvaWQpOwpAQCAtMTQyLDcgKzE0Myw3IEBACiAJYXRvbWljX3QJCXVzZXJzOwogCXN0cnVjdCBpbnB1dF9kZXYJKmpvZ19kZXY7CiAJc3RydWN0IGlucHV0X2Rldgkqa2V5X2RldjsKLQlzdHJ1Y3Qga2ZpZm8JCSpmaWZvOworCXN0cnVjdCBrZmlmbwkJZmlmbzsKIAlzcGlubG9ja190CQlmaWZvX2xvY2s7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndxOwogfTsKQEAgLTIzMiw2ICsyMzMsNyBAQAogCTU2LAkvKiA2OSBTT05ZUElfRVZFTlRfVk9MVU1FX0lOQ19QUkVTU0VEICovCiAJNTcsCS8qIDcwIFNPTllQSV9FVkVOVF9WT0xVTUVfREVDX1BSRVNTRUQgKi8KIAktMSwJLyogNzEgU09OWVBJX0VWRU5UX0JSSUdIVE5FU1NfUFJFU1NFRCAqLworCTU4LAkvKiA3MiBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRCAqLwogfTsKIAogc3RhdGljIGludCBzb255X2xhcHRvcF9pbnB1dF9rZXljb2RlX21hcFtdID0gewpAQCAtMjkzLDYgKzI5NSw3IEBACiAJS0VZX0YxNSwJLyogNTUgU09OWVBJX0VWRU5UX1NFVFRJTkdLRVlfUFJFU1NFRCAqLwogCUtFWV9WT0xVTUVVUCwJLyogNTYgU09OWVBJX0VWRU5UX1ZPTFVNRV9JTkNfUFJFU1NFRCAqLwogCUtFWV9WT0xVTUVET1dOLAkvKiA1NyBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VEICovCisJS0VZX01FRElBLAkvKiA1OCBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRCAqLwogfTsKIAogLyogcmVsZWFzZSBidXR0b25zIGFmdGVyIGEgc2hvcnQgZGVsYXkgaWYgcHJlc3NlZCAqLwpAQCAtMzAwLDggKzMwMyw5IEBACiB7CiAJc3RydWN0IHNvbnlfbGFwdG9wX2tleXByZXNzIGtwOwogCi0Jd2hpbGUgKGtmaWZvX2dldChzb255X2xhcHRvcF9pbnB1dC5maWZvLCAodW5zaWduZWQgY2hhciAqKSZrcCwKLQkJCSBzaXplb2Yoa3ApKSA9PSBzaXplb2Yoa3ApKSB7CisJd2hpbGUgKGtmaWZvX291dF9sb2NrZWQoJnNvbnlfbGFwdG9wX2lucHV0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmtwLAorCQkJc2l6ZW9mKGtwKSwgJnNvbnlfbGFwdG9wX2lucHV0LmZpZm9fbG9jaykKKwkJCT09IHNpemVvZihrcCkpIHsKIAkJbXNsZWVwKDEwKTsKIAkJaW5wdXRfcmVwb3J0X2tleShrcC5kZXYsIGtwLmtleSwgMCk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKQEAgLTM2Miw4ICszNjYsOSBAQAogCQkvKiB3ZSBlbWl0IHRoZSBzY2FuY29kZSBzbyB3ZSBjYW4gYWx3YXlzIHJlbWFwIHRoZSBrZXkgKi8KIAkJaW5wdXRfZXZlbnQoa3AuZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBldmVudCk7CiAJCWlucHV0X3N5bmMoa3AuZGV2KTsKLQkJa2ZpZm9fcHV0KHNvbnlfbGFwdG9wX2lucHV0LmZpZm8sCi0JCQkgICh1bnNpZ25lZCBjaGFyICopJmtwLCBzaXplb2Yoa3ApKTsKKwkJa2ZpZm9faW5fbG9ja2VkKCZzb255X2xhcHRvcF9pbnB1dC5maWZvLAorCQkJICAodW5zaWduZWQgY2hhciAqKSZrcCwgc2l6ZW9mKGtwKSwKKwkJCSAgJnNvbnlfbGFwdG9wX2lucHV0LmZpZm9fbG9jayk7CiAKIAkJaWYgKCF3b3JrX3BlbmRpbmcoJnNvbnlfbGFwdG9wX3JlbGVhc2Vfa2V5X3dvcmspKQogCQkJcXVldWVfd29yayhzb255X2xhcHRvcF9pbnB1dC53cSwKQEAgLTM4NSwxMiArMzkwLDEwIEBACiAKIAkvKiBrZmlmbyAqLwogCXNwaW5fbG9ja19pbml0KCZzb255X2xhcHRvcF9pbnB1dC5maWZvX2xvY2spOwotCXNvbnlfbGFwdG9wX2lucHV0LmZpZm8gPQotCQlrZmlmb19hbGxvYyhTT05ZX0xBUFRPUF9CVUZfU0laRSwgR0ZQX0tFUk5FTCwKLQkJCSAgICAmc29ueV9sYXB0b3BfaW5wdXQuZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHNvbnlfbGFwdG9wX2lucHV0LmZpZm8pKSB7CisJZXJyb3IgPQorCSBrZmlmb19hbGxvYygmc29ueV9sYXB0b3BfaW5wdXQuZmlmbywgU09OWV9MQVBUT1BfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWCAia2ZpZm9fYWxsb2MgZmFpbGVkXG4iKTsKLQkJZXJyb3IgPSBQVFJfRVJSKHNvbnlfbGFwdG9wX2lucHV0LmZpZm8pOwogCQlnb3RvIGVycl9kZWNfdXNlcnM7CiAJfQogCkBAIC00NzQsNyArNDc3LDcgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShzb255X2xhcHRvcF9pbnB1dC53cSk7CiAKIGVycl9mcmVlX2tmaWZvOgotCWtmaWZvX2ZyZWUoc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CiAKIGVycl9kZWNfdXNlcnM6CiAJYXRvbWljX2RlYygmc29ueV9sYXB0b3BfaW5wdXQudXNlcnMpOwpAQCAtNTAwLDcgKzUwMyw3IEBACiAJfQogCiAJZGVzdHJveV93b3JrcXVldWUoc29ueV9sYXB0b3BfaW5wdXQud3EpOwotCWtmaWZvX2ZyZWUoc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CisJa2ZpZm9fZnJlZSgmc29ueV9sYXB0b3BfaW5wdXQuZmlmbyk7CiB9CiAKIC8qKioqKioqKioqKiBQbGF0Zm9ybSBEZXZpY2UgKioqKioqKioqKiovCkBAIC04OTAsNiArODkzLDggQEAKIAl7IDB4MEMsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAogCXsgMHg5ZiwgU09OWVBJX0VWRU5UX0NEX0VKRUNUX1BSRVNTRUQgfSwKIAl7IDB4MWYsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4YTEsIFNPTllQSV9FVkVOVF9NRURJQV9QUkVTU0VEIH0sCisJeyAweDIxLCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCiAJeyAwLCAwIH0sCiB9OwogCkBAIC05NjEsNyArOTY2LDcgQEAKIAkJCQllbHNlCiAJCQkJCXNvbnlfbGFwdG9wX3JlcG9ydF9pbnB1dF9ldmVudChldik7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMjQpID09IGV2KSB7CisJCX0gZWxzZSBpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoc29ueV9yZmtpbGxfaGFuZGxlKSA9PSBldikgewogCQkJc29ueV9uY19yZmtpbGxfdXBkYXRlKCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTEwNjcsNyArMTA3Miw3IEBACiAJaWYgKCFibG9ja2VkKQogCQlhcmd1bWVudCB8PSAweGZmMDAwMDsKIAotCXJldHVybiBzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgYXJndW1lbnQsICZyZXN1bHQpOworCXJldHVybiBzb255X2NhbGxfc25jX2hhbmRsZShzb255X3Jma2lsbF9oYW5kbGUsIGFyZ3VtZW50LCAmcmVzdWx0KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIHNvbnlfcmZraWxsX29wcyA9IHsKQEAgLTExMTAsNyArMTExNSw3IEBACiAJaWYgKCFyZmspCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIDB4MjAwLCAmcmVzdWx0KTsKKwlzb255X2NhbGxfc25jX2hhbmRsZShzb255X3Jma2lsbF9oYW5kbGUsIDB4MjAwLCAmcmVzdWx0KTsKIAlod2Jsb2NrID0gIShyZXN1bHQgJiAweDEpOwogCXJma2lsbF9zZXRfaHdfc3RhdGUocmZrLCBod2Jsb2NrKTsKIApAQCAtMTEyOSw3ICsxMTM0LDcgQEAKIAlpbnQgcmVzdWx0OwogCWJvb2wgaHdibG9jazsKIAotCXNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCAweDIwMCwgJnJlc3VsdCk7CisJc29ueV9jYWxsX3NuY19oYW5kbGUoc29ueV9yZmtpbGxfaGFuZGxlLCAweDIwMCwgJnJlc3VsdCk7CiAJaHdibG9jayA9ICEocmVzdWx0ICYgMHgxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOX1NPTllfUkZLSUxMOyBpKyspIHsKQEAgLTExNDUsMzYgKzExNTAsNzkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIGFyZ3VtZW50LCAmcmVzdWx0KTsKKwkJc29ueV9jYWxsX3NuY19oYW5kbGUoc29ueV9yZmtpbGxfaGFuZGxlLCBhcmd1bWVudCwgJnJlc3VsdCk7CiAJCXJma2lsbF9zZXRfc3RhdGVzKHNvbnlfcmZraWxsX2RldmljZXNbaV0sCiAJCQkJICAhKHJlc3VsdCAmIDB4ZiksIGZhbHNlKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc29ueV9uY19yZmtpbGxfc2V0dXAoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBzb255X25jX3Jma2lsbF9zZXR1cChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlpbnQgcmVzdWx0LCByZXQ7CisJaW50IG9mZnNldDsKKwl1OCBkZXZfY29kZSwgaTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IGluX29iajsKKwl1bmlvbiBhY3BpX29iamVjdCAqZGV2aWNlX2VudW07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAotCWlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyNCkgPT0gLTEpCi0JCXJldHVybiAtMTsKKwlvZmZzZXQgPSBzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyNCk7CisJaWYgKG9mZnNldCA9PSAtMSkgeworCQlvZmZzZXQgPSBzb255X2ZpbmRfc25jX2hhbmRsZSgweDEzNSk7CisJCWlmIChvZmZzZXQgPT0gLTEpCisJCQlyZXR1cm47CisJCWVsc2UKKwkJCXNvbnlfcmZraWxsX2hhbmRsZSA9IDB4MTM1OworCX0gZWxzZQorCQlzb255X3Jma2lsbF9oYW5kbGUgPSAweDEyNDsKKwlkcHJpbnRrKCJGb3VuZCBya2ZpbGwgaGFuZGxlOiAweCUuNHhcbiIsIHNvbnlfcmZraWxsX2hhbmRsZSk7CiAKLQlyZXQgPSBzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgMHhiMDAsICZyZXN1bHQpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYCi0JCSAgICAgICAiVW5hYmxlIHRvIGVudW1lcmF0ZSByZmtpbGwgZGV2aWNlczogJXhcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJLyogbmVlZCB0byByZWFkIHRoZSB3aG9sZSBidWZmZXIgcmV0dXJuZWQgYnkgdGhlIGFjcGkgY2FsbCB0byBTTjA2CisJICogaGVyZSBvdGhlcndpc2Ugd2UgbWF5IG1pc3Mgc29tZSBmZWF0dXJlcworCSAqLworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAmaW5fb2JqOworCWluX29iai50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fb2JqLmludGVnZXIudmFsdWUgPSBvZmZzZXQ7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDYiLCAmcGFyYW1zLAorCQkJJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWRwcmludGsoIlJhZGlvIGRldmljZSBlbnVtZXJhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm47CiAJfQogCi0JaWYgKHJlc3VsdCAmIDB4MSkKLQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX1dJRkkpOwotCWlmIChyZXN1bHQgJiAweDIpCi0JCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9CTFVFVE9PVEgpOwotCWlmIChyZXN1bHQgJiAweDFjKQotCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfV1dBTik7Ci0JaWYgKHJlc3VsdCAmIDB4MjApCi0JCXNvbnlfbmNfc2V0dXBfcmZraWxsKGRldmljZSwgU09OWV9XSU1BWCk7CisJZGV2aWNlX2VudW0gPSAodW5pb24gYWNwaV9vYmplY3QgKikgYnVmZmVyLnBvaW50ZXI7CisJaWYgKCFkZXZpY2VfZW51bSB8fCBkZXZpY2VfZW51bS0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBTTjA2IHJldHVybiBvYmplY3QgMHglLjJ4XG4iLAorCQkJCWRldmljZV9lbnVtLT50eXBlKTsKKwkJZ290byBvdXRfbm9fZW51bTsKKwl9CiAKLQlyZXR1cm4gMDsKKwkvKiB0aGUgYnVmZmVyIGlzIGZpbGxlZCB3aXRoIG1hZ2ljIG51bWJlcnMgZGVzY3JpYmluZyB0aGUgZGV2aWNlcworCSAqIGF2YWlsYWJsZSwgMHhmZiB0ZXJtaW5hdGVzIHRoZSBlbnVtZXJhdGlvbgorCSAqLworCXdoaWxlICgoZGV2X2NvZGUgPSAqKGRldmljZV9lbnVtLT5idWZmZXIucG9pbnRlciArIGkpKSAhPSAweGZmICYmCisJCQlpIDwgZGV2aWNlX2VudW0tPmJ1ZmZlci5sZW5ndGgpIHsKKwkJaSsrOworCQlkcHJpbnRrKCJSYWRpbyBkZXZpY2VzLCBsb29raW5nIGF0IDB4JS4yeFxuIiwgZGV2X2NvZGUpOworCisJCWlmIChkZXZfY29kZSA9PSAwICYmICFzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfV0lGSV0pCisJCQlzb255X25jX3NldHVwX3Jma2lsbChkZXZpY2UsIFNPTllfV0lGSSk7CisKKwkJaWYgKGRldl9jb2RlID09IDB4MTAgJiYgIXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9CTFVFVE9PVEhdKQorCQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX0JMVUVUT09USCk7CisKKwkJaWYgKCgweGYwICYgZGV2X2NvZGUpID09IDB4MjAgJiYKKwkJCQkhc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX1dXQU5dKQorCQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX1dXQU4pOworCisJCWlmIChkZXZfY29kZSA9PSAweDMwICYmICFzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfV0lNQVhdKQorCQkJc29ueV9uY19zZXR1cF9yZmtpbGwoZGV2aWNlLCBTT05ZX1dJTUFYKTsKKwl9CisKK291dF9ub19lbnVtOgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgc29ueV9uY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC0yMDc5LDcgKzIxMjcsNyBAQAogCiBzdHJ1Y3Qgc29ueXBpX2NvbXBhdF9zIHsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmlmb19hc3luYzsKLQlzdHJ1Y3Qga2ZpZm8JCSpmaWZvOworCXN0cnVjdCBrZmlmbwkJZmlmbzsKIAlzcGlubG9ja190CQlmaWZvX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJZmlmb19wcm9jX2xpc3Q7CiAJYXRvbWljX3QJCW9wZW5fY291bnQ7CkBAIC0yMTA0LDEyICsyMTUyLDEyIEBACiAJLyogRmx1c2ggaW5wdXQgcXVldWUgb24gZmlyc3Qgb3BlbiAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShzb255cGlfY29tcGF0LmZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29ueXBpX2NvbXBhdC5maWZvX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmc29ueXBpX2NvbXBhdC5vcGVuX2NvdW50KSA9PSAxKQotCQlfX2tmaWZvX3Jlc2V0KHNvbnlwaV9jb21wYXQuZmlmbyk7CisJCWtmaWZvX3Jlc2V0KCZzb255cGlfY29tcGF0LmZpZm8pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzb255cGlfY29tcGF0LmZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb255cGlfY29tcGF0LmZpZm9fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTIwLDE3ICsyMTY4LDE4IEBACiAJc3NpemVfdCByZXQ7CiAJdW5zaWduZWQgY2hhciBjOwogCi0JaWYgKChrZmlmb19sZW4oc29ueXBpX2NvbXBhdC5maWZvKSA9PSAwKSAmJgorCWlmICgoa2ZpZm9fbGVuKCZzb255cGlfY29tcGF0LmZpZm8pID09IDApICYmCiAJICAgIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvbnlwaV9jb21wYXQuZmlmb19wcm9jX2xpc3QsCi0JCQkJICAgICAgIGtmaWZvX2xlbihzb255cGlfY29tcGF0LmZpZm8pICE9IDApOworCQkJCSAgICAgICBrZmlmb19sZW4oJnNvbnlwaV9jb21wYXQuZmlmbykgIT0gMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXdoaWxlIChyZXQgPCBjb3VudCAmJgotCSAgICAgICAoa2ZpZm9fZ2V0KHNvbnlwaV9jb21wYXQuZmlmbywgJmMsIHNpemVvZihjKSkgPT0gc2l6ZW9mKGMpKSkgeworCSAgICAgICAoa2ZpZm9fb3V0X2xvY2tlZCgmc29ueXBpX2NvbXBhdC5maWZvLCAmYywgc2l6ZW9mKGMpLAorCQkJICAmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spID09IHNpemVvZihjKSkpIHsKIAkJaWYgKHB1dF91c2VyKGMsIGJ1ZisrKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXQrKzsKQEAgLTIxNDcsNyArMjE5Niw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNvbnlwaV9taXNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJcG9sbF93YWl0KGZpbGUsICZzb255cGlfY29tcGF0LmZpZm9fcHJvY19saXN0LCB3YWl0KTsKLQlpZiAoa2ZpZm9fbGVuKHNvbnlwaV9jb21wYXQuZmlmbykpCisJaWYgKGtmaWZvX2xlbigmc29ueXBpX2NvbXBhdC5maWZvKSkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzA5LDcgKzIzNTgsOCBAQAogCiBzdGF0aWMgdm9pZCBzb255cGlfY29tcGF0X3JlcG9ydF9ldmVudCh1OCBldmVudCkKIHsKLQlrZmlmb19wdXQoc29ueXBpX2NvbXBhdC5maWZvLCAodW5zaWduZWQgY2hhciAqKSZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisJa2ZpZm9faW5fbG9ja2VkKCZzb255cGlfY29tcGF0LmZpZm8sICh1bnNpZ25lZCBjaGFyICopJmV2ZW50LAorCQkJc2l6ZW9mKGV2ZW50KSwgJnNvbnlwaV9jb21wYXQuZmlmb19sb2NrKTsKIAlraWxsX2Zhc3luYygmc29ueXBpX2NvbXBhdC5maWZvX2FzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzb255cGlfY29tcGF0LmZpZm9fcHJvY19saXN0KTsKIH0KQEAgLTIzMTksMTEgKzIzNjksMTEgQEAKIAlpbnQgZXJyb3I7CiAKIAlzcGluX2xvY2tfaW5pdCgmc29ueXBpX2NvbXBhdC5maWZvX2xvY2spOwotCXNvbnlwaV9jb21wYXQuZmlmbyA9IGtmaWZvX2FsbG9jKFNPTllfTEFQVE9QX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAotCQkJCQkgJnNvbnlwaV9jb21wYXQuZmlmb19sb2NrKTsKLQlpZiAoSVNfRVJSKHNvbnlwaV9jb21wYXQuZmlmbykpIHsKKwllcnJvciA9CisJIGtmaWZvX2FsbG9jKCZzb255cGlfY29tcGF0LmZpZm8sIFNPTllfTEFQVE9QX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlggImtmaWZvX2FsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNvbnlwaV9jb21wYXQuZmlmbyk7CisJCXJldHVybiBlcnJvcjsKIAl9CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzb255cGlfY29tcGF0LmZpZm9fcHJvY19saXN0KTsKQEAgLTIzNDIsMTQgKzIzOTIsMTQgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfa2ZpZm86Ci0Ja2ZpZm9fZnJlZShzb255cGlfY29tcGF0LmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9jb21wYXQuZmlmbyk7CiAJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBzb255cGlfY29tcGF0X2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJnNvbnlwaV9taXNjX2RldmljZSk7Ci0Ja2ZpZm9fZnJlZShzb255cGlfY29tcGF0LmZpZm8pOworCWtmaWZvX2ZyZWUoJnNvbnlwaV9jb21wYXQuZmlmbyk7CiB9CiAjZWxzZQogc3RhdGljIGludCBzb255cGlfY29tcGF0X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IDQ0MTY2MDAuLmRkMzNiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTQ3LDIyICs0Nyw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoIndtaTpDMzY0QUM3MS0zNkRCLTQ5NUEtODQ5NC1CNDM5RDQ3MkE1MDUiKTsKIAotc3RhdGljIGludCB0YzExMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgdGMxMTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCB0YzExMDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IHRjMTEwMF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGMxMTAwX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ0YzExMDAtd21pIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSB0YzExMDBfcHJvYmUsCi0JLnJlbW92ZSA9IHRjMTEwMF9yZW1vdmUsCi0JLnN1c3BlbmQgPSB0YzExMDBfc3VzcGVuZCwKLQkucmVzdW1lID0gdGMxMTAwX3Jlc3VtZSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0YzExMDBfZGV2aWNlOwogCiBzdHJ1Y3QgdGMxMTAwX2RhdGEgewpAQCAtMTgzLDUxICsxNjcsMzUgQEAKIHNob3dfc2V0X2Jvb2wod2lyZWxlc3MsIFRDMTEwMF9JTlNUQU5DRV9XSVJFTEVTUyk7CiBzaG93X3NldF9ib29sKGpvZ2RpYWwsIFRDMTEwMF9JTlNUQU5DRV9KT0dESUFMKTsKIAotc3RhdGljIHZvaWQgcmVtb3ZlX2ZzKHZvaWQpCi17Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ0YzExMDBfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93aXJlbGVzcyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZ0YzExMDBfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9qb2dkaWFsKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0YzExMDBfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl93aXJlbGVzcy5hdHRyLAorCSZkZXZfYXR0cl9qb2dkaWFsLmF0dHIsCisJTlVMTAorfTsKIAotc3RhdGljIGludCBhZGRfZnModm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ0YzExMDBfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93aXJlbGVzcyk7Ci0JaWYgKHJldCkKLQkJZ290byBhZGRfc3lzZnNfZXJyb3I7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnRjMTEwMF9kZXZpY2UtPmRldiwgJmRldl9hdHRyX2pvZ2RpYWwpOwotCWlmIChyZXQpCi0JCWdvdG8gYWRkX3N5c2ZzX2Vycm9yOwotCi0JcmV0dXJuIHJldDsKLQotYWRkX3N5c2ZzX2Vycm9yOgotCXJlbW92ZV9mcygpOwotCXJldHVybiByZXQ7Ci19CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0YzExMDBfYXR0cmlidXRlX2dyb3VwID0geworCS5hdHRycwk9IHRjMTEwMF9hdHRyaWJ1dGVzLAorfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJCQlEcml2ZXIgTW9kZWwKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgdGMxMTAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHRjMTEwMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlyZXN1bHQgPSBhZGRfZnMoKTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldmljZS0+ZGV2LmtvYmosICZ0YzExMDBfYXR0cmlidXRlX2dyb3VwKTsKIH0KIAogCi1zdGF0aWMgaW50IHRjMTEwMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmV4aXQgdGMxMTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0JcmVtb3ZlX2ZzKCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXZpY2UtPmRldi5rb2JqLCAmdGMxMTAwX2F0dHJpYnV0ZV9ncm91cCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YzExMDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdGMxMTAwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTIzOSwxMCArMjA3LDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGMxMTAwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRjMTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTI1NCwzNCArMjIyLDYxIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0YzExMDBfcG1fb3BzID0geworCS5zdXNwZW5kCT0gdGMxMTAwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0YzExMDBfcmVzdW1lLAorCS5mcmVlemUJCT0gdGMxMTAwX3N1c3BlbmQsCisJLnJlc3RvcmUJPSB0YzExMDBfcmVzdW1lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YzExMDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRjMTEwMC13bWkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtID0gJnRjMTEwMF9wbV9vcHMsCisjZW5kaWYKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0YzExMDBfcmVtb3ZlKSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHRjMTEwMF9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdCA9IDA7CisJaW50IGVycm9yOwogCiAJaWYgKCF3bWlfaGFzX2d1aWQoR1VJRCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmVzdWx0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0YzExMDBfZHJpdmVyKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OwotCiAJdGMxMTAwX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidGMxMTAwLXdtaSIsIC0xKTsKLQlwbGF0Zm9ybV9kZXZpY2VfYWRkKHRjMTEwMF9kZXZpY2UpOworCWlmICghdGMxMTAwX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnJvciA9IHBsYXRmb3JtX2RldmljZV9hZGQodGMxMTAwX2RldmljZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9kZXZpY2VfcHV0OworCisJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnRjMTEwMF9kcml2ZXIsIHRjMTEwMF9wcm9iZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9kZXZpY2VfZGVsOwogCiAJcHJpbnRrKFRDMTEwMF9JTkZPICJIUCBDb21wYXEgVEMxMTAwIFRhYmxldCBXTUkgRXh0cmFzIGxvYWRlZFxuIik7CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmVzdWx0OworIGVycl9kZXZpY2VfZGVsOgorCXBsYXRmb3JtX2RldmljZV9kZWwodGMxMTAwX2RldmljZSk7CisgZXJyX2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dCh0YzExMDBfZGV2aWNlKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0YzExMDBfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV9kZWwodGMxMTAwX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGMxMTAwX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjMTEwMF9kcml2ZXIpOwotCi0JcHJpbnRrKFRDMTEwMF9JTkZPICJIUCBDb21wYXEgVEMxMTAwIFRhYmxldCBXTUkgRXh0cmFzIHVubG9hZGVkXG4iKTsKIH0KIAogbW9kdWxlX2luaXQodGMxMTAwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IDQ0OGM4YWUuLmU2N2U0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTYzODQsMTEgKzYzODQsMTMgQEAKICAqIGFuZCB3ZSBsZWF2ZSB0aGVtIHVuY2hhbmdlZC4KICAqLwogCisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfQUxTQV9TVVBQT1JUCisKICNkZWZpbmUgVFBBQ1BJX0FMU0FfRFJWTkFNRSAgIlRoaW5rUGFkIEVDIgogI2RlZmluZSBUUEFDUElfQUxTQV9TSFJUTkFNRSAiVGhpbmtQYWQgQ29uc29sZSBBdWRpbyBDb250cm9sIgogI2RlZmluZSBUUEFDUElfQUxTQV9NSVhFUk5BTUUgVFBBQ1BJX0FMU0FfU0hSVE5BTUUKIAotc3RhdGljIGludCBhbHNhX2luZGV4ID0gU05EUlZfREVGQVVMVF9JRFgxOworc3RhdGljIGludCBhbHNhX2luZGV4ID0gfigoMSA8PCAoU05EUlZfQ0FSRFMgLSAzKSkgLSAxKTsgLyogbGFzdCB0aHJlZSBzbG90cyAqLwogc3RhdGljIGNoYXIgKmFsc2FfaWQgPSAiVGhpbmtQYWRFQyI7CiBzdGF0aWMgaW50IGFsc2FfZW5hYmxlID0gU05EUlZfREVGQVVMVF9FTkFCTEUxOwogCkBAIC02NzA1LDEwICs2NzA3LDExIEBACiAKIAlyYyA9IHNuZF9jYXJkX2NyZWF0ZShhbHNhX2luZGV4LCBhbHNhX2lkLCBUSElTX01PRFVMRSwKIAkJCSAgICBzaXplb2Yoc3RydWN0IHRwYWNwaV9hbHNhX2RhdGEpLCAmY2FyZCk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHJjIDwgMCB8fCAhY2FyZCkgeworCQlwcmludGsoVFBBQ1BJX0VSUgorCQkJIkZhaWxlZCB0byBjcmVhdGUgQUxTQSBjYXJkIHN0cnVjdHVyZXM6ICVkXG4iLCByYyk7CisJCXJldHVybiAxOworCX0KIAogCUJVR19PTighY2FyZC0+cHJpdmF0ZV9kYXRhKTsKIAlkYXRhID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpAQCAtNjc0MSw4ICs2NzQ0LDkgQEAKIAkJcmMgPSBzbmRfY3RsX2FkZChjYXJkLCBjdGxfdm9sKTsKIAkJaWYgKHJjIDwgMCkgewogCQkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJCQkiRmFpbGVkIHRvIGNyZWF0ZSBBTFNBIHZvbHVtZSBjb250cm9sXG4iKTsKLQkJCWdvdG8gZXJyX291dDsKKwkJCQkiRmFpbGVkIHRvIGNyZWF0ZSBBTFNBIHZvbHVtZSBjb250cm9sOiAlZFxuIiwKKwkJCQlyYyk7CisJCQlnb3RvIGVycl9leGl0OwogCQl9CiAJCWRhdGEtPmN0bF92b2xfaWQgPSAmY3RsX3ZvbC0+aWQ7CiAJfQpAQCAtNjc1MCwyMiArNjc1NCwyNSBAQAogCWN0bF9tdXRlID0gc25kX2N0bF9uZXcxKCZ2b2x1bWVfYWxzYV9jb250cm9sX211dGUsIE5VTEwpOwogCXJjID0gc25kX2N0bF9hZGQoY2FyZCwgY3RsX211dGUpOwogCWlmIChyYyA8IDApIHsKLQkJcHJpbnRrKFRQQUNQSV9FUlIgIkZhaWxlZCB0byBjcmVhdGUgQUxTQSBtdXRlIGNvbnRyb2xcbiIpOwotCQlnb3RvIGVycl9vdXQ7CisJCXByaW50ayhUUEFDUElfRVJSICJGYWlsZWQgdG8gY3JlYXRlIEFMU0EgbXV0ZSBjb250cm9sOiAlZFxuIiwKKwkJCXJjKTsKKwkJZ290byBlcnJfZXhpdDsKIAl9CiAJZGF0YS0+Y3RsX211dGVfaWQgPSAmY3RsX211dGUtPmlkOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmdHBhY3BpX3BkZXYtPmRldik7CiAJcmMgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKLQotZXJyX291dDoKIAlpZiAocmMgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCWNhcmQgPSBOVUxMOworCQlwcmludGsoVFBBQ1BJX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIEFMU0EgY2FyZDogJWRcbiIsIHJjKTsKKwkJZ290byBlcnJfZXhpdDsKIAl9CiAKIAlhbHNhX2NhcmQgPSBjYXJkOwotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKKworZXJyX2V4aXQ6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gMTsKIH0KIAogI2RlZmluZSBUUEFDUElfVk9MX1FfTVVURU9OTFkJMHgwMDAxCS8qIE11dGUtb25seSBjb250cm9sIGF2YWlsYWJsZSAqLwpAQCAtNzAxNiw2ICs3MDIzLDI4IEBACiAJLnNodXRkb3duID0gdm9sdW1lX3NodXRkb3duLAogfTsKIAorI2Vsc2UgLyogIUNPTkZJR19USElOS1BBRF9BQ1BJX0FMU0FfU1VQUE9SVCAqLworCisjZGVmaW5lIGFsc2FfY2FyZCBOVUxMCisKK3N0YXRpYyB2b2lkIGlubGluZSB2b2x1bWVfYWxzYV9ub3RpZnlfY2hhbmdlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHZvbHVtZV9pbml0KHN0cnVjdCBpYm1faW5pdF9zdHJ1Y3QgKmlpYm0pCit7CisJcHJpbnRrKFRQQUNQSV9JTkZPCisJCSJ2b2x1bWU6IGRpc2FibGVkIGFzIHRoZXJlIGlzIG5vIEFMU0Egc3VwcG9ydCBpbiB0aGlzIGtlcm5lbFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBpYm1fc3RydWN0IHZvbHVtZV9kcml2ZXJfZGF0YSA9IHsKKwkubmFtZSA9ICJ2b2x1bWUiLAorfTsKKworI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0FMU0FfU1VQUE9SVCAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRmFuIHN1YmRyaXZlcgogICovCkBAIC04NzM4LDYgKzg3NjcsNyBAQAogCQkgInVzZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdXNlcnNwYWNlLCAiCiAJCSAic2VlIGRvY3VtZW50YXRpb24iKTsKIAorI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0FMU0FfU1VQUE9SVAogbW9kdWxlX3BhcmFtX25hbWVkKHZvbHVtZV9tb2RlLCB2b2x1bWVfbW9kZSwgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZvbHVtZV9tb2RlLAogCQkgIlNlbGVjdHMgdm9sdW1lIGNvbnRyb2wgc3RyYXRlZ3k6ICIKQEAgLTg3NjAsNiArODc5MCw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlkLCAiQUxTQSBpZCBmb3IgdGhlIEFDUEkgRUMgTWl4ZXIiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChlbmFibGUsIGFsc2FfZW5hYmxlLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIHRoZSBBTFNBIGludGVyZmFjZSBmb3IgdGhlIEFDUEkgRUMgTWl4ZXIiKTsKKyNlbmRpZiAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQgKi8KIAogI2RlZmluZSBUUEFDUElfUEFSQU0oZmVhdHVyZSkgXAogCW1vZHVsZV9wYXJhbV9jYWxsKGZlYXR1cmUsIHNldF9pYm1fcGFyYW0sIE5VTEwsIE5VTEwsIDApOyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCmluZGV4IDUxYzBhOGIuLjc3YmY1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CkBAIC0zNTcsNjMgKzM1OCw2IEBACiBzdGF0aWMgaW50IGxhc3Rfa2V5X2V2ZW50Owogc3RhdGljIGludCBrZXlfZXZlbnRfdmFsaWQ7CiAKLXR5cGVkZWYgc3RydWN0IF9Qcm9jSXRlbSB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljaGFyICooKnJlYWRfZnVuYykgKGNoYXIgKik7Ci0JdW5zaWduZWQgbG9uZyAoKndyaXRlX2Z1bmMpIChjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwotfSBQcm9jSXRlbTsKLQotLyogcHJvYyBmaWxlIGhhbmRsZXJzCi0gKi8KLQotc3RhdGljIGludAotZGlzcGF0Y2hfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgICBQcm9jSXRlbSAqIGl0ZW0pCi17Ci0JY2hhciAqcCA9IHBhZ2U7Ci0JaW50IGxlbjsKLQotCWlmIChvZmYgPT0gMCkKLQkJcCA9IGl0ZW0tPnJlYWRfZnVuYyhwKTsKLQotCS8qIElTU1VFOiBJIGRvbid0IHVuZGVyc3RhbmQgdGhpcyBjb2RlICovCi0JbGVuID0gKHAgLSBwYWdlKTsKLQlpZiAobGVuIDw9IG9mZiArIGNvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCWxlbiAtPSBvZmY7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50Ci1kaXNwYXRjaF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIFByb2NJdGVtICogaXRlbSkKLXsKLQlpbnQgcmVzdWx0OwotCWNoYXIgKnRtcF9idWZmZXI7Ci0KLQkvKiBBcmcgYnVmZmVyIHBvaW50cyB0byB1c2Vyc3BhY2UgbWVtb3J5LCB3aGljaCBjYW4ndCBiZSBhY2Nlc3NlZAotCSAqIGRpcmVjdGx5LiAgU2luY2Ugd2UncmUgbWFraW5nIGEgY29weSwgemVyby10ZXJtaW5hdGUgdGhlCi0JICogZGVzdGluYXRpb24gc28gdGhhdCBzc2NhbmYgY2FuIGJlIHVzZWQgb24gaXQgc2FmZWx5LgotCSAqLwotCXRtcF9idWZmZXIgPSBrbWFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0bXBfYnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcih0bXBfYnVmZmVyLCBidWZmZXIsIGNvdW50KSkgewotCQlyZXN1bHQgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCXRtcF9idWZmZXJbY291bnRdID0gMDsKLQkJcmVzdWx0ID0gaXRlbS0+d3JpdGVfZnVuYyh0bXBfYnVmZmVyLCBjb3VudCk7Ci0JfQotCWtmcmVlKHRtcF9idWZmZXIpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X2xjZChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJdTMyIGhjaV9yZXN1bHQ7CkBAIC00MjYsMTkgKzM3MCwyNCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIH0KIAotc3RhdGljIGNoYXIgKnJlYWRfbGNkKGNoYXIgKnApCitzdGF0aWMgaW50IGxjZF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWludCB2YWx1ZSA9IGdldF9sY2QoTlVMTCk7CiAKIAlpZiAodmFsdWUgPj0gMCkgewotCQlwICs9IHNwcmludGYocCwgImJyaWdodG5lc3M6ICAgICAgICAgICAgICAlZFxuIiwgdmFsdWUpOwotCQlwICs9IHNwcmludGYocCwgImJyaWdodG5lc3NfbGV2ZWxzOiAgICAgICAlZFxuIiwKKwkJc2VxX3ByaW50ZihtLCAiYnJpZ2h0bmVzczogICAgICAgICAgICAgICVkXG4iLCB2YWx1ZSk7CisJCXNlcV9wcmludGYobSwgImJyaWdodG5lc3NfbGV2ZWxzOiAgICAgICAlZFxuIiwKIAkJCSAgICAgSENJX0xDRF9CUklHSFRORVNTX0xFVkVMUyk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKE1ZX0VSUiAiRXJyb3IgcmVhZGluZyBMQ0QgYnJpZ2h0bmVzc1xuIik7CiAJfQogCi0JcmV0dXJuIHA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGNkX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbGNkX3Byb2Nfc2hvdywgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgc2V0X2xjZChpbnQgdmFsdWUpCkBAIC00NTgsMTIgKzQwNywyMCBAQAogCXJldHVybiBzZXRfbGNkKGJkLT5wcm9wcy5icmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfbGNkKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGxjZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKKwljaGFyIGNtZFs0Ml07CisJc2l6ZV90IGxlbjsKIAlpbnQgdmFsdWU7CiAJaW50IHJldDsKIAotCWlmIChzc2NhbmYoYnVmZmVyLCAiIGJyaWdodG5lc3MgOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJgorCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGNtZCkgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoY21kLCBidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWNtZFtsZW5dID0gJ1wwJzsKKworCWlmIChzc2NhbmYoY21kLCAiIGJyaWdodG5lc3MgOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJgogCSAgICB2YWx1ZSA+PSAwICYmIHZhbHVlIDwgSENJX0xDRF9CUklHSFRORVNTX0xFVkVMUykgewogCQlyZXQgPSBzZXRfbGNkKHZhbHVlKTsKIAkJaWYgKHJldCA9PSAwKQpAQCAtNDc0LDcgKzQzMSwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjaGFyICpyZWFkX3ZpZGVvKGNoYXIgKnApCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsY2RfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBsY2RfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGxjZF9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIGludCB2aWRlb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXUzMiBoY2lfcmVzdWx0OwogCXUzMiB2YWx1ZTsKQEAgLTQ4NCwxOCArNDUwLDI1IEBACiAJCWludCBpc19sY2QgPSAodmFsdWUgJiBIQ0lfVklERU9fT1VUX0xDRCkgPyAxIDogMDsKIAkJaW50IGlzX2NydCA9ICh2YWx1ZSAmIEhDSV9WSURFT19PVVRfQ1JUKSA/IDEgOiAwOwogCQlpbnQgaXNfdHYgPSAodmFsdWUgJiBIQ0lfVklERU9fT1VUX1RWKSA/IDEgOiAwOwotCQlwICs9IHNwcmludGYocCwgImxjZF9vdXQ6ICAgICAgICAgICAgICAgICAlZFxuIiwgaXNfbGNkKTsKLQkJcCArPSBzcHJpbnRmKHAsICJjcnRfb3V0OiAgICAgICAgICAgICAgICAgJWRcbiIsIGlzX2NydCk7Ci0JCXAgKz0gc3ByaW50ZihwLCAidHZfb3V0OiAgICAgICAgICAgICAgICAgICVkXG4iLCBpc190dik7CisJCXNlcV9wcmludGYobSwgImxjZF9vdXQ6ICAgICAgICAgICAgICAgICAlZFxuIiwgaXNfbGNkKTsKKwkJc2VxX3ByaW50ZihtLCAiY3J0X291dDogICAgICAgICAgICAgICAgICVkXG4iLCBpc19jcnQpOworCQlzZXFfcHJpbnRmKG0sICJ0dl9vdXQ6ICAgICAgICAgICAgICAgICAgJWRcbiIsIGlzX3R2KTsKIAl9IGVsc2UgewogCQlwcmludGsoTVlfRVJSICJFcnJvciByZWFkaW5nIHZpZGVvIG91dCBzdGF0dXNcbiIpOwogCX0KIAotCXJldHVybiBwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV92aWRlbyhjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCitzdGF0aWMgaW50IHZpZGVvX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdmlkZW9fcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgdmlkZW9fcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWNoYXIgKmNtZCwgKmJ1ZmZlcjsKIAlpbnQgdmFsdWU7CiAJaW50IHJlbWFpbiA9IGNvdW50OwogCWludCBsY2Rfb3V0ID0gLTE7CkBAIC01MDQsNiArNDc3LDE3IEBACiAJdTMyIGhjaV9yZXN1bHQ7CiAJdTMyIHZpZGVvX291dDsKIAorCWNtZCA9IGttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGNvcHlfZnJvbV91c2VyKGNtZCwgYnVmLCBjb3VudCkpIHsKKwkJa2ZyZWUoY21kKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWNtZFtjb3VudF0gPSAnXDAnOworCisJYnVmZmVyID0gY21kOworCiAJLyogc2NhbiBleHByZXNzaW9uLiAgTXVsdGlwbGUgZXhwcmVzc2lvbnMgbWF5IGJlIGRlbGltaXRlZCB3aXRoIDsKIAkgKgogCSAqICBOT1RFOiB0byBrZWVwIHNjYW5uaW5nIHNpbXBsZSwgaW52YWxpZCBmaWVsZHMgYXJlIGlnbm9yZWQKQEAgLTUyMyw2ICs1MDcsOCBAQAogCQl3aGlsZSAocmVtYWluICYmICooYnVmZmVyIC0gMSkgIT0gJzsnKTsKIAl9CiAKKwlrZnJlZShjbWQpOworCiAJaGNpX3JlYWQxKEhDSV9WSURFT19PVVQsICZ2aWRlb19vdXQsICZoY2lfcmVzdWx0KTsKIAlpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfU1VDQ0VTUykgewogCQl1bnNpZ25lZCBpbnQgbmV3X3ZpZGVvX291dCA9IHZpZGVvX291dDsKQEAgLTU0MywyOCArNTI5LDUwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgY2hhciAqcmVhZF9mYW4oY2hhciAqcCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpZGVvX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmlkZW9fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHZpZGVvX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IGZhbl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXUzMiBoY2lfcmVzdWx0OwogCXUzMiB2YWx1ZTsKIAogCWhjaV9yZWFkMShIQ0lfRkFOLCAmdmFsdWUsICZoY2lfcmVzdWx0KTsKIAlpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfU1VDQ0VTUykgewotCQlwICs9IHNwcmludGYocCwgInJ1bm5pbmc6ICAgICAgICAgICAgICAgICAlZFxuIiwgKHZhbHVlID4gMCkpOwotCQlwICs9IHNwcmludGYocCwgImZvcmNlX29uOiAgICAgICAgICAgICAgICAlZFxuIiwgZm9yY2VfZmFuKTsKKwkJc2VxX3ByaW50ZihtLCAicnVubmluZzogICAgICAgICAgICAgICAgICVkXG4iLCAodmFsdWUgPiAwKSk7CisJCXNlcV9wcmludGYobSwgImZvcmNlX29uOiAgICAgICAgICAgICAgICAlZFxuIiwgZm9yY2VfZmFuKTsKIAl9IGVsc2UgewogCQlwcmludGsoTVlfRVJSICJFcnJvciByZWFkaW5nIGZhbiBzdGF0dXNcbiIpOwogCX0KIAotCXJldHVybiBwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9mYW4oY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KQorc3RhdGljIGludCBmYW5fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBmYW5fcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgZmFuX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWNoYXIgY21kWzQyXTsKKwlzaXplX3QgbGVuOwogCWludCB2YWx1ZTsKIAl1MzIgaGNpX3Jlc3VsdDsKIAotCWlmIChzc2NhbmYoYnVmZmVyLCAiIGZvcmNlX29uIDogJWkiLCAmdmFsdWUpID09IDEgJiYKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihjbWQpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGNtZCwgYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljbWRbbGVuXSA9ICdcMCc7CisKKwlpZiAoc3NjYW5mKGNtZCwgIiBmb3JjZV9vbiA6ICVpIiwgJnZhbHVlKSA9PSAxICYmCiAJICAgIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMSkgewogCQloY2lfd3JpdGUxKEhDSV9GQU4sIHZhbHVlLCAmaGNpX3Jlc3VsdCk7CiAJCWlmIChoY2lfcmVzdWx0ICE9IEhDSV9TVUNDRVNTKQpAQCAtNTc4LDcgKzU4NiwxNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGNoYXIgKnJlYWRfa2V5cyhjaGFyICpwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFuX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZmFuX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBmYW5fcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQga2V5c19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXUzMiBoY2lfcmVzdWx0OwogCXUzMiB2YWx1ZTsKQEAgLTYwMiwxOCArNjE5LDMwIEBACiAJCX0KIAl9CiAKLQlwICs9IHNwcmludGYocCwgImhvdGtleV9yZWFkeTogICAgICAgICAgICAlZFxuIiwga2V5X2V2ZW50X3ZhbGlkKTsKLQlwICs9IHNwcmludGYocCwgImhvdGtleTogICAgICAgICAgICAgICAgICAweCUwNHhcbiIsIGxhc3Rfa2V5X2V2ZW50KTsKLQotICAgICAgZW5kOgotCXJldHVybiBwOworCXNlcV9wcmludGYobSwgImhvdGtleV9yZWFkeTogICAgICAgICAgICAlZFxuIiwga2V5X2V2ZW50X3ZhbGlkKTsKKwlzZXFfcHJpbnRmKG0sICJob3RrZXk6ICAgICAgICAgICAgICAgICAgMHglMDR4XG4iLCBsYXN0X2tleV9ldmVudCk7CitlbmQ6CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2tleXMoY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KQorc3RhdGljIGludCBrZXlzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwga2V5c19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBrZXlzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwljaGFyIGNtZFs0Ml07CisJc2l6ZV90IGxlbjsKIAlpbnQgdmFsdWU7CiAKLQlpZiAoc3NjYW5mKGJ1ZmZlciwgIiBob3RrZXlfcmVhZHkgOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJiB2YWx1ZSA9PSAwKSB7CisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoY21kKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihjbWQsIGJ1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJY21kW2xlbl0gPSAnXDAnOworCisJaWYgKHNzY2FuZihjbWQsICIgaG90a2V5X3JlYWR5IDogJWkiLCAmdmFsdWUpID09IDEgJiYgdmFsdWUgPT0gMCkgewogCQlrZXlfZXZlbnRfdmFsaWQgPSAwOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjIyLDUyICs2NTEsNTggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBjaGFyICpyZWFkX3ZlcnNpb24oY2hhciAqcCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtleXNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBrZXlzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBrZXlzX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IHZlcnNpb25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlwICs9IHNwcmludGYocCwgImRyaXZlcjogICAgICAgICAgICAgICAgICAlc1xuIiwgVE9TSElCQV9BQ1BJX1ZFUlNJT04pOwotCXAgKz0gc3ByaW50ZihwLCAicHJvY19pbnRlcmZhY2U6ICAgICAgICAgICVkXG4iLAotCQkgICAgIFBST0NfSU5URVJGQUNFX1ZFUlNJT04pOwotCXJldHVybiBwOworCXNlcV9wcmludGYobSwgImRyaXZlcjogICAgICAgICAgICAgICAgICAlc1xuIiwgVE9TSElCQV9BQ1BJX1ZFUlNJT04pOworCXNlcV9wcmludGYobSwgInByb2NfaW50ZXJmYWNlOiAgICAgICAgICAlZFxuIiwgUFJPQ19JTlRFUkZBQ0VfVkVSU0lPTik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmVyc2lvbl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZlcnNpb25fcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmVyc2lvbl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHZlcnNpb25fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKiBwcm9jIGFuZCBtb2R1bGUgaW5pdAogICovCiAKICNkZWZpbmUgUFJPQ19UT1NISUJBCQkidG9zaGliYSIKIAotc3RhdGljIFByb2NJdGVtIHByb2NfaXRlbXNbXSA9IHsKLQl7ImxjZCIsIHJlYWRfbGNkLCB3cml0ZV9sY2R9LAotCXsidmlkZW8iLCByZWFkX3ZpZGVvLCB3cml0ZV92aWRlb30sCi0JeyJmYW4iLCByZWFkX2Zhbiwgd3JpdGVfZmFufSwKLQl7ImtleXMiLCByZWFkX2tleXMsIHdyaXRlX2tleXN9LAotCXsidmVyc2lvbiIsIHJlYWRfdmVyc2lvbiwgTlVMTH0sCi0Je05VTEx9Ci19OwotCiBzdGF0aWMgYWNwaV9zdGF0dXMgX19pbml0IGFkZF9kZXZpY2Uodm9pZCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7Ci0JUHJvY0l0ZW0gKml0ZW07Ci0KLQlmb3IgKGl0ZW0gPSBwcm9jX2l0ZW1zOyBpdGVtLT5uYW1lOyArK2l0ZW0pIHsKLQkJcHJvYyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoaXRlbS0+bmFtZSwKLQkJCQkJICAgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAotCQkJCQkgICAgICB0b3NoaWJhX3Byb2NfZGlyLAotCQkJCQkgICAgICAocmVhZF9wcm9jX3QgKikgZGlzcGF0Y2hfcmVhZCwKLQkJCQkJICAgICAgaXRlbSk7Ci0JCWlmIChwcm9jICYmIGl0ZW0tPndyaXRlX2Z1bmMpCi0JCQlwcm9jLT53cml0ZV9wcm9jID0gKHdyaXRlX3Byb2NfdCAqKSBkaXNwYXRjaF93cml0ZTsKLQl9CisJcHJvY19jcmVhdGUoImxjZCIsIFNfSVJVR08gfCBTX0lXVVNSLCB0b3NoaWJhX3Byb2NfZGlyLCAmbGNkX3Byb2NfZm9wcyk7CisJcHJvY19jcmVhdGUoInZpZGVvIiwgU19JUlVHTyB8IFNfSVdVU1IsIHRvc2hpYmFfcHJvY19kaXIsICZ2aWRlb19wcm9jX2ZvcHMpOworCXByb2NfY3JlYXRlKCJmYW4iLCBTX0lSVUdPIHwgU19JV1VTUiwgdG9zaGliYV9wcm9jX2RpciwgJmZhbl9wcm9jX2ZvcHMpOworCXByb2NfY3JlYXRlKCJrZXlzIiwgU19JUlVHTyB8IFNfSVdVU1IsIHRvc2hpYmFfcHJvY19kaXIsICZrZXlzX3Byb2NfZm9wcyk7CisJcHJvY19jcmVhdGUoInZlcnNpb24iLCBTX0lSVUdPLCB0b3NoaWJhX3Byb2NfZGlyLCAmdmVyc2lvbl9wcm9jX2ZvcHMpOwogCiAJcmV0dXJuIEFFX09LOwogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMgcmVtb3ZlX2RldmljZSh2b2lkKQogewotCVByb2NJdGVtICppdGVtOwotCi0JZm9yIChpdGVtID0gcHJvY19pdGVtczsgaXRlbS0+bmFtZTsgKytpdGVtKQotCQlyZW1vdmVfcHJvY19lbnRyeShpdGVtLT5uYW1lLCB0b3NoaWJhX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgibGNkIiwgdG9zaGliYV9wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoInZpZGVvIiwgdG9zaGliYV9wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImZhbiIsIHRvc2hpYmFfcHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJrZXlzIiwgdG9zaGliYV9wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoInZlcnNpb24iLCB0b3NoaWJhX3Byb2NfZGlyKTsKIAlyZXR1cm4gQUVfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKaW5kZXggZTQyNWE4Ni4uYjEwNDMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKQEAgLTQ5Miw4ICs0OTIsNyBAQAogCWlmICghZ3VpZCB8fCAhaGFuZGxlcikKIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKLQlmaW5kX2d1aWQoZ3VpZCwgJmJsb2NrKTsKLQlpZiAoIWJsb2NrKQorCWlmICghZmluZF9ndWlkKGd1aWQsICZibG9jaykpCiAJCXJldHVybiBBRV9OT1RfRVhJU1Q7CiAKIAlpZiAoYmxvY2stPmhhbmRsZXIpCkBAIC01MjEsOCArNTIwLDcgQEAKIAlpZiAoIWd1aWQpCiAJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOwogCi0JZmluZF9ndWlkKGd1aWQsICZibG9jayk7Ci0JaWYgKCFibG9jaykKKwlpZiAoIWZpbmRfZ3VpZChndWlkLCAmYmxvY2spKQogCQlyZXR1cm4gQUVfTk9UX0VYSVNUOwogCiAJaWYgKCFibG9jay0+aGFuZGxlcikKQEAgLTU0MCw4ICs1MzgsOCBAQAogLyoqCiAgKiB3bWlfZ2V0X2V2ZW50X2RhdGEgLSBHZXQgV01JIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGV2ZW50CiAgKgotICogQGV2ZW50IC0gRXZlbnQgdG8gZmluZAotICogJm91dCAtIEJ1ZmZlciB0byBob2xkIGV2ZW50IGRhdGEKKyAqIEBldmVudDogRXZlbnQgdG8gZmluZAorICogQG91dDogQnVmZmVyIHRvIGhvbGQgZXZlbnQgZGF0YS4gb3V0LT5wb2ludGVyIHNob3VsZCBiZSBmcmVlZCB3aXRoIGtmcmVlKCkKICAqCiAgKiBSZXR1cm5zIGV4dHJhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIGV2ZW50IGluIFdNSS4KICAqLwpAQCAtNzE2LDYgKzcxNCwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBib29sIGd1aWRfYWxyZWFkeV9wYXJzZWQoY29uc3QgY2hhciAqZ3VpZF9zdHJpbmcpCit7CisJc3RydWN0IGd1aWRfYmxvY2sgKmdibG9jazsKKwlzdHJ1Y3Qgd21pX2Jsb2NrICp3YmxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKworCWxpc3RfZm9yX2VhY2gocCwgJndtaV9ibG9ja3MubGlzdCkgeworCQl3YmxvY2sgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCB3bWlfYmxvY2ssIGxpc3QpOworCQlnYmxvY2sgPSAmd2Jsb2NrLT5nYmxvY2s7CisKKwkJaWYgKHN0cm5jbXAoZ2Jsb2NrLT5ndWlkLCBndWlkX3N0cmluZywgMTYpID09IDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogUGFyc2UgdGhlIF9XREcgbWV0aG9kIGZvciB0aGUgR1VJRCBkYXRhIGJsb2NrcwogICovCkBAIC03MjUsNiArNzM5LDcgQEAKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOwogCXN0cnVjdCBndWlkX2Jsb2NrICpnYmxvY2s7CiAJc3RydWN0IHdtaV9ibG9jayAqd2Jsb2NrOworCWNoYXIgZ3VpZF9zdHJpbmdbMzddOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAl1MzIgaSwgdG90YWw7CiAKQEAgLTc0Nyw2ICs3NjIsMTkgQEAKIAltZW1jcHkoZ2Jsb2NrLCBvYmotPmJ1ZmZlci5wb2ludGVyLCBvYmotPmJ1ZmZlci5sZW5ndGgpOwogCiAJZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHsKKwkJLyoKKwkJICBTb21lIFdNSSBkZXZpY2VzLCBsaWtlIHRob3NlIGZvciBuVmlkaWEgaG9va3MsIGhhdmUgYQorCQkgIGR1cGxpY2F0ZSBHVUlELiBJdCdzIG5vdCBjbGVhciB3aGF0IHdlIHNob3VsZCBkbyBpbiB0aGlzCisJCSAgY2FzZSB5ZXQsIHNvIGZvciBub3csIHdlJ2xsIGp1c3QgaWdub3JlIHRoZSBkdXBsaWNhdGUuCisJCSAgQW55b25lIHdobyB3YW50cyB0byBhZGQgc3VwcG9ydCBmb3IgdGhhdCBkZXZpY2UgY2FuIGNvbWUKKwkJICB1cCB3aXRoIGEgYmV0dGVyIHdvcmthcm91bmQgZm9yIHRoZSBtZXNzIHRoZW4uCisJCSovCisJCWlmIChndWlkX2FscmVhZHlfcGFyc2VkKGdibG9ja1tpXS5ndWlkKSA9PSB0cnVlKSB7CisJCQl3bWlfZ3RvYShnYmxvY2tbaV0uZ3VpZCwgZ3VpZF9zdHJpbmcpOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIlNraXBwaW5nIGR1cGxpY2F0ZSBHVUlEICVzXG4iLAorCQkJCWd1aWRfc3RyaW5nKTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXdibG9jayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bWlfYmxvY2spLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF3YmxvY2spCiAJCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNtb3MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKaW5kZXggZWIxNTRkYy4uZTlhYTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWNtb3MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCkBAIC02ODYsNyArNjg2LDggQEAKIAkgKi8KICNpZglkZWZpbmVkKENPTkZJR19BVEFSSSkKIAlhZGRyZXNzX3NwYWNlID0gNjQ7Ci0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX3NwYXJjX18pCisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykgXAorCQkJfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19taXBzX18pCiAJYWRkcmVzc19zcGFjZSA9IDEyODsKICNlbHNlCiAjd2FybmluZyBBc3N1bWluZyAxMjggYnl0ZXMgb2YgUlRDK05WUkFNIGFkZHJlc3Mgc3BhY2UsIG5vdCA2NCBieXRlcy4KQEAgLTEwOTUsOSArMTA5Niw5IEBACiAjZGVmaW5lCWNtb3NfcG5wX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGNtb3NfcG5wX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKnBkZXYpCitzdGF0aWMgdm9pZCBjbW9zX3BucF9zaHV0ZG93bihzdHJ1Y3QgcG5wX2RldiAqcG5wKQogewotCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRiAmJiAhY21vc19wb3dlcm9mZihwZGV2KSkKKwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYgJiYgIWNtb3NfcG93ZXJvZmYoJnBucC0+ZGV2KSkKIAkJcmV0dXJuOwogCiAJY21vc19kb19zaHV0ZG93bigpOwpAQCAtMTExNiwxNSArMTExNywxMiBAQAogCS5pZF90YWJsZQk9IHJ0Y19pZHMsCiAJLnByb2JlCQk9IGNtb3NfcG5wX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3AoY21vc19wbnBfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBjbW9zX3BucF9zaHV0ZG93biwKIAogCS8qIGZsYWcgZW5zdXJlcyByZXN1bWUoKSBnZXRzIGNhbGxlZCwgYW5kIHN0b3BzIHN5c2xvZyBzcGFtICovCiAJLmZsYWdzCQk9IFBOUF9EUklWRVJfUkVTX0RPX05PVF9DSEFOR0UsCiAJLnN1c3BlbmQJPSBjbW9zX3BucF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY21vc19wbnBfcmVzdW1lLAotCS5kcml2ZXIJCT0gewotCQkubmFtZQkgID0gKGNoYXIgKilkcml2ZXJfbmFtZSwKLQkJLnNodXRkb3duID0gY21vc19wbnBfc2h1dGRvd24sCi0JfQogfTsKIAogI2VuZGlmCS8qIENPTkZJR19QTlAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwppbmRleCAyNTlkYjdmLi45NjMwZTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCkBAIC03NzgsNiArNzc4LDggQEAKIAkJCQkJc3BpLT5pcnEsIHN0YXR1cyk7CiAJCQlnb3RvIGZhaWwxOwogCQl9CisKKwkJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZSgmc3BpLT5kZXYsIDEpOwogCX0KIAogCS8qIGV4cG9ydCBOVlJBTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDhhOTlkYTYuLmM0ZWM1YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTg4MSw2ICs4ODEsOCBAQAogCQkJCSJ1bmFibGUgdG8gcmVxdWVzdCBJUlEhXG4iKTsKIAkJCWdvdG8gZXhpdF9pcnE7CiAJCX0KKworCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZjbGllbnQtPmRldiwgMSk7CiAJCXNldF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncyk7CiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZ290IElSUSAlZFxuIiwgY2xpZW50LT5pcnEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwppbmRleCA3MTNmN2JmLi41MzE3YmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCkBAIC0zODMsNiArMzgzLDggQEAKIAkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRXG4iKTsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KKworCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZjbGllbnQtPmRldiwgMSk7CiAJfQogCiAJZHMxMzc0LT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGNsaWVudC0+bmFtZSwgJmNsaWVudC0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKaW5kZXggZmQxMjMxNy4uMTQ4YjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWxpYXN0cmVlLmxvY2ssIGZsYWdzKTsKIAkJbmV3bGN1ID0gX2FsbG9jYXRlX2xjdSh1aWQpOwogCQlpZiAoSVNfRVJSKG5ld2xjdSkpCi0JCQlyZXR1cm4gUFRSX0VSUihsY3UpOworCQkJcmV0dXJuIFBUUl9FUlIobmV3bGN1KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFsaWFzdHJlZS5sb2NrLCBmbGFncyk7CiAJCWxjdSA9IF9maW5kX2xjdShzZXJ2ZXIsIHVpZCk7CiAJCWlmICghbGN1KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggZjY0ZDBkYi4uNmUxNDg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKi8KIAotI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1kaWFnIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTQ2LDE2ICsxNDYsMTYgQEAKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGRldmljZS0+YmxvY2stPmJwX2Jsb2NrLCAwLCBOVUxMKTsKIAlpZiAocmMgPT0gNCkgewogCQlpZiAoIShkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZKSkgewotCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAotCQkJCSAiVGhlIGFjY2VzcyBtb2RlIG9mIGEgRElBRyBkZXZpY2UgY2hhbmdlZCIKLQkJCQkgIiB0byByZWFkLW9ubHkiKTsKKwkJCXByX3dhcm5pbmcoIiVzOiBUaGUgYWNjZXNzIG1vZGUgb2YgYSBESUFHIGRldmljZSAiCisJCQkJICAgImNoYW5nZWQgdG8gcmVhZC1vbmx5XG4iLAorCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJCX0KIAkJcmMgPSAwOwogCX0KIAlpZiAocmMpCi0JCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRJQUcgRVJQIGZhaWxlZCB3aXRoICIKLQkJCSAgICAicmM9JWRcbiIsIHJjKTsKKwkJcHJfd2FybmluZygiJXM6IERJQUcgRVJQIGZhaWxlZCB3aXRoICIKKwkJCSAgICAicmM9JWRcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKIH0KIAogLyogU3RhcnQgYSBnaXZlbiByZXF1ZXN0IGF0IHRoZSBkZXZpY2UuIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvCkBAIC0zNzEsOCArMzcxLDkgQEAKIAkJcHJpdmF0ZS0+cHRfYmxvY2sgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXZpY2UgdHlwZSAlZCBpcyBub3Qgc3VwcG9ydGVkICIKLQkJCSAgICAiaW4gRElBRyBtb2RlXG4iLCBwcml2YXRlLT5yZGNfZGF0YS52ZGV2X2NsYXNzKTsKKwkJcHJfd2FybmluZygiJXM6IERldmljZSB0eXBlICVkIGlzIG5vdCBzdXBwb3J0ZWQgIgorCQkJICAgImluIERJQUcgbW9kZVxuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJCSAgIHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpOwogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTMsOCArNDE0LDggQEAKIAkJcHJpdmF0ZS0+aW9iLmZsYWdhID0gREFTRF9ESUFHX0ZMQUdBX0RFRkFVTFQ7CiAJCXJjID0gZGlhMjUwKCZwcml2YXRlLT5pb2IsIFJXX0JJTyk7CiAJCWlmIChyYyA9PSAzKSB7Ci0JCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCi0JCQkJIkEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIpOworCQkJcHJfd2FybmluZygiJXM6IEEgNjQtYml0IERJQUcgY2FsbCBmYWlsZWRcbiIsCisJCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfbGFiZWw7CiAJCX0KQEAgLTQyMyw4ICs0MjQsOSBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChic2l6ZSA+IFBBR0VfU0laRSkgewotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UiCi0JCQkgIiBvZiBhbiBpbmNvcnJlY3QgZm9ybWF0IChyYz0lZClcbiIsIHJjKTsKKwkJcHJfd2FybmluZygiJXM6IEFjY2Vzc2luZyB0aGUgREFTRCBmYWlsZWQgYmVjYXVzZSBvZiBhbiAiCisJCQkgICAiaW5jb3JyZWN0IGZvcm1hdCAocmM9JWQpXG4iLAorCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgcmMpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0X2xhYmVsOwogCX0KQEAgLTQ0MiwxOCArNDQ0LDE4IEBACiAJCWJsb2NrLT5zMmJfc2hpZnQrKzsKIAlyYyA9IG1kc2tfaW5pdF9pbyhkZXZpY2UsIGJsb2NrLT5icF9ibG9jaywgMCwgTlVMTCk7CiAJaWYgKHJjICYmIChyYyAhPSA0KSkgewotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJESUFHIGluaXRpYWxpemF0aW9uICIKLQkJCSJmYWlsZWQgd2l0aCByYz0lZFxuIiwgcmMpOworCQlwcl93YXJuaW5nKCIlczogRElBRyBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCByYz0lZFxuIiwKKwkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHJjKTsKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7CiAJCWlmIChyYyA9PSA0KQogCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7Ci0JCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwKLQkJCSAiTmV3IERBU0Qgd2l0aCAlbGQgYnl0ZS9ibG9jaywgdG90YWwgc2l6ZSAlbGQgS0Ilc1xuIiwKLQkJCSAodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLAotCQkJICh1bnNpZ25lZCBsb25nKSAoYmxvY2stPmJsb2NrcyA8PAotCQkJCQkgIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEsCi0JCQkgKHJjID09IDQpID8gIiwgcmVhZC1vbmx5IGRldmljZSIgOiAiIik7CisJCXByX2luZm8oIiVzOiBOZXcgREFTRCB3aXRoICVsZCBieXRlL2Jsb2NrLCB0b3RhbCBzaXplICVsZCAiCisJCQkiS0Ilc1xuIiwgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKKwkJCSh1bnNpZ25lZCBsb25nKSBibG9jay0+YnBfYmxvY2ssCisJCQkodW5zaWduZWQgbG9uZykgKGJsb2NrLT5ibG9ja3MgPDwKKwkJCQkJIGJsb2NrLT5zMmJfc2hpZnQpID4+IDEsCisJCQkocmMgPT0gNCkgPyAiLCByZWFkLW9ubHkgZGV2aWNlIiA6ICIiKTsKIAkJcmMgPSAwOwogCX0KIG91dF9sYWJlbDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKaW5kZXggMjhlNDY0OS4uMjQ3YjJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCWlmIChJU19FUlIoaWIpKSB7CiAJCXJhdzMyNzBfcHV0X3ZpZXcoJmZwLT52aWV3KTsKIAkJcmF3MzI3MF9kZWxfdmlldygmZnAtPnZpZXcpOwotCQlyYyA9IFBUUl9FUlIoZnApOworCQlyYyA9IFBUUl9FUlIoaWIpOwogCQlnb3RvIG91dDsKIAl9CiAJZnAtPnJkYnVmID0gaWI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IDM2NTdmZTEuLmNiNzBmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC05LDYgKzksNyBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGVfMzR4eCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggMGM3MmFhZC4uOTgyMWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZV8zNTkwIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTM2LDcgKzEzNyw3IEBACiAJCW91dC0+dHlwZV9vbl90YXBlID0gVEFQRTM5MF9LRUtMX1RZUEVfTEFCRUw7CiAJbWVtY3B5KG91dC0+bGFiZWwsIGluLT5sYWJlbCwgc2l6ZW9mKGluLT5sYWJlbCkpOwogCUVCQ0FTQyhvdXQtPmxhYmVsLCBzaXplb2YoaW4tPmxhYmVsKSk7Ci0Jc3Ryc3RyaXAob3V0LT5sYWJlbCk7CisJc3RyaW0ob3V0LT5sYWJlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludF90b19leHRfa2VrbF9wYWlyKHN0cnVjdCB0YXBlMzU5Ml9rZWtsX3BhaXIgKmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDQ3OTljYzIuLjk2ODE2MTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCmluZGV4IDIzZDc3M2EuLjIxMjVlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCkBAIC0xMCw2ICsxMCw5IEBACiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggZGRjOTE0Y2MuLmIyODY0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKQEAgLTcsNiArNywxMCBAQAogICogQXV0aG9yOiBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KICAqIEJhc2VkIG9uIHNpbXBsZSBjbGFzcyBkZXZpY2UgY29kZSBieSBHcmVnIEstSAogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlICJ0YXBlX2NsYXNzLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwppbmRleCBmNWQ2ODAyLi44MWIwOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwpAQCAtMTIsNiArMTIsOCBAQAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CSAgICAgLy8gZm9yIGtlcm5lbCBwYXJhbWV0ZXJzCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgkgICAgIC8vIGZvciByZXF1ZXN0aW5nIG1vZHVsZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKaW5kZXggZWJkODIwYy4uMGNlYjM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9wcm9jLmMKQEAgLTExLDYgKzExLDkgQEAKICAqIFBST0NGUyBGdW5jdGlvbnMKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwppbmRleCA3NTAzNTRhLi4wM2YwN2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTExLDYgKzExLDkgQEAKICAqCQkgU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKaW5kZXggZDAzMzQxNC4uZTFiNzAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCkBAIC0xMCw1ICsxMCw1IEBACiBvYmotJChDT05GSUdfQ0hTQ19TQ0gpICs9IGNoc2Nfc2NoLm8KIG9iai0kKENPTkZJR19DQ1dHUk9VUCkgKz0gY2N3Z3JvdXAubwogCi1xZGlvLW9ianMgOj0gcWRpb19tYWluLm8gcWRpb190aGluaW50Lm8gcWRpb19kZWJ1Zy5vIHFkaW9fcGVyZi5vIHFkaW9fc2V0dXAubworcWRpby1vYmpzIDo9IHFkaW9fbWFpbi5vIHFkaW9fdGhpbmludC5vIHFkaW9fZGVidWcubyBxZGlvX3NldHVwLm8KIG9iai0kKENPTkZJR19RRElPKSArPSBxZGlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCmluZGV4IDk1MDllMzguLjdhMjhhMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYwpAQCAtNDksNyArNDksNiBAQAogICovCiBzdGF0aWMgdm9pZCBjY3dyZXFfc3RvcChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IHJjKQogewotCXN0cnVjdCBzdWJjaGFubmVsICpzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gJmNkZXYtPnByaXZhdGUtPnJlcTsKIAogCWlmIChyZXEtPmRvbmUpCkBAIC01Nyw3ICs1Niw2IEBACiAJcmVxLT5kb25lID0gMTsKIAljY3dfZGV2aWNlX3NldF90aW1lb3V0KGNkZXYsIDApOwogCW1lbXNldCgmY2Rldi0+cHJpdmF0ZS0+aXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpOwotCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAlpZiAocmMgJiYgcmMgIT0gLUVOT0RFViAmJiByZXEtPmRyYykKIAkJcmMgPSByZXEtPmRyYzsKIAlyZXEtPmNhbGxiYWNrKGNkZXYsIHJlcS0+ZGF0YSwgcmMpOwpAQCAtODAsNyArNzgsNiBAQAogCQkJY29udGludWU7CiAJCX0KIAkJLyogUGVyZm9ybSBzdGFydCBmdW5jdGlvbi4gKi8KLQkJc2NoLT5scG0gPSAweGZmOwogCQltZW1zZXQoJmNkZXYtPnByaXZhdGUtPmlyYiwgMCwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKIAkJcmMgPSBjaW9fc3RhcnQoc2NoLCBjcCwgKHU4KSByZXEtPm1hc2spOwogCQlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggNzM5MDFjOS4uYTZjN2Q1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xNTE5LDYgKzE1MTksNyBAQAogCXNjaC0+ZHJpdmVyID0gJmlvX3N1YmNoYW5uZWxfZHJpdmVyOwogCS8qIEluaXRpYWxpemUgdGhlIGNjd19kZXZpY2Ugc3RydWN0dXJlLiAqLwogCWNkZXYtPmRldi5wYXJlbnQ9ICZzY2gtPmRldjsKKwlzY2hfc2V0X2NkZXYoc2NoLCBjZGV2KTsKIAlpb19zdWJjaGFubmVsX3JlY29nKGNkZXYsIHNjaCk7CiAJLyogTm93IHdhaXQgZm9yIHRoZSBhc3luYy4gcmVjb2duaXRpb24gdG8gY29tZSB0byBhbiBlbmQuICovCiAJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYwppbmRleCBhYWQxODhlLi42ZmFjYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl1OCBmbjsKIAogCS8qIFVzZSBuZXh0IGF2YWlsYWJsZSBwYXRoIHRoYXQgaXMgbm90IGFscmVhZHkgaW4gY29ycmVjdCBzdGF0ZS4gKi8KLQlyZXEtPmxwbSA9IGxwbV9hZGp1c3QocmVxLT5scG0sIHNjaC0+c2NoaWIucG1jdy5wYW0gJiB+c2NoLT52cG0pOworCXJlcS0+bHBtID0gbHBtX2FkanVzdChyZXEtPmxwbSwgY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2spOwogCWlmICghcmVxLT5scG0pCiAJCWdvdG8gb3V0X25vcGF0aDsKIAkvKiBDaGFubmVsIHByb2dyYW0gc2V0dXAuICovCkBAIC0yNTQsMTUgKzI1NCwxNSBAQAogCSpwID0gZmlyc3Q7CiB9CiAKLXN0YXRpYyB1OCBwZ2lkX3RvX3ZwbShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3N0YXRpYyB1OCBwZ2lkX3RvX2RvbmVwbShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcGdpZCAqcGdpZDsKIAlpbnQgaTsKIAlpbnQgbHBtOwotCXU4IHZwbSA9IDA7CisJdTggZG9uZXBtID0gMDsKIAotCS8qIFNldCBWUE0gYml0cyBmb3IgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZS4gKi8KKwkvKiBTZXQgYml0cyBmb3IgcGF0aHMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWxwbSA9IDB4ODAgPj4gaTsKIAkJaWYgKChjZGV2LT5wcml2YXRlLT5wZ2lkX3ZhbGlkX21hc2sgJiBscG0pID09IDApCkBAIC0yODIsMTAgKzI4MiwxMCBAQAogCQkJaWYgKHBnaWQtPmluZi5wcy5zdGF0ZTMgIT0gU05JRF9TVEFURTNfU0lOR0xFX1BBVEgpCiAJCQkJY29udGludWU7CiAJCX0KLQkJdnBtIHw9IGxwbTsKKwkJZG9uZXBtIHw9IGxwbTsKIAl9CiAKLQlyZXR1cm4gdnBtOworCXJldHVybiBkb25lcG07CiB9CiAKIHN0YXRpYyB2b2lkIHBnaWRfZmlsbChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldiwgc3RydWN0IHBnaWQgKnBnaWQpCkBAIC0zMDcsNiArMzA3LDcgQEAKIAlpbnQgbWlzbWF0Y2ggPSAwOwogCWludCByZXNlcnZlZCA9IDA7CiAJaW50IHJlc2V0ID0gMDsKKwl1OCBkb25lcG07CiAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtMzE2LDE4ICszMTcsMjAgQEAKIAllbHNlIGlmIChtaXNtYXRjaCkKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAllbHNlIHsKLQkJc2NoLT52cG0gPSBwZ2lkX3RvX3ZwbShjZGV2KTsKKwkJZG9uZXBtID0gcGdpZF90b19kb25lcG0oY2Rldik7CisJCXNjaC0+dnBtID0gZG9uZXBtICYgc2NoLT5vcG07CisJCWNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrICY9IH5kb25lcG07CiAJCXBnaWRfZmlsbChjZGV2LCBwZ2lkKTsKIAl9CiBvdXQ6CiAJQ0lPX01TR19FVkVOVCgyLCAic25pZDogZGV2aWNlIDAuJXguJTA0eDogcmM9JWQgcHZtPSUwMnggdnBtPSUwMnggIgotCQkgICAgICAibWlzbT0lZCByc3ZkPSVkIHJlc2V0PSVkXG4iLCBpZC0+c3NpZCwgaWQtPmRldm5vLCByYywKLQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrLCBzY2gtPnZwbSwgbWlzbWF0Y2gsCi0JCSAgICAgIHJlc2VydmVkLCByZXNldCk7CisJCSAgICAgICJ0b2RvPSUwMnggbWlzbT0lZCByc3ZkPSVkIHJlc2V0PSVkXG4iLCBpZC0+c3NpZCwKKwkJICAgICAgaWQtPmRldm5vLCByYywgY2Rldi0+cHJpdmF0ZS0+cGdpZF92YWxpZF9tYXNrLCBzY2gtPnZwbSwKKwkJICAgICAgY2Rldi0+cHJpdmF0ZS0+cGdpZF90b2RvX21hc2ssIG1pc21hdGNoLCByZXNlcnZlZCwgcmVzZXQpOwogCXN3aXRjaCAocmMpIHsKIAljYXNlIDA6CiAJCS8qIEFueXRoaW5nIGxlZnQgdG8gZG8/ICovCi0JCWlmIChzY2gtPnZwbSA9PSBzY2gtPnNjaGliLnBtY3cucGFtKSB7CisJCWlmIChjZGV2LT5wcml2YXRlLT5wZ2lkX3RvZG9fbWFzayA9PSAwKSB7CiAJCQl2ZXJpZnlfZG9uZShjZGV2LCBzY2gtPnZwbSA9PSAwID8gLUVBQ0NFUyA6IDApOwogCQkJcmV0dXJuOwogCQl9CkBAIC00MTEsNiArNDE0LDcgQEAKIAlzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2aWQgPSAmY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkOwogCiAJc2NoLT52cG0gPSAwOworCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAkvKiBJbml0aWFsaXplIHJlcXVlc3QgZGF0YS4gKi8KIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCXJlcS0+dGltZW91dAk9IFBHSURfVElNRU9VVDsKQEAgLTQ0MiwxMSArNDQ2LDE0IEBACiAgKi8KIHZvaWQgY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisKIAlDSU9fVFJBQ0VfRVZFTlQoNCwgInZyZnkiKTsKIAlDSU9fSEVYX0VWRU5UKDQsICZjZGV2LT5wcml2YXRlLT5kZXZfaWQsIHNpemVvZihjZGV2LT5wcml2YXRlLT5kZXZfaWQpKTsKIAkvKiBJbml0aWFsaXplIFBHSUQgZGF0YS4gKi8KIAltZW1zZXQoY2Rldi0+cHJpdmF0ZS0+cGdpZCwgMCwgc2l6ZW9mKGNkZXYtPnByaXZhdGUtPnBnaWQpKTsKIAljZGV2LT5wcml2YXRlLT5wZ2lkX3ZhbGlkX21hc2sgPSAwOworCWNkZXYtPnByaXZhdGUtPnBnaWRfdG9kb19tYXNrID0gc2NoLT5zY2hpYi5wbWN3LnBhbTsKIAkvKgogCSAqIEluaXRpYWxpemUgcGF0aGdyb3VwIGFuZCBtdWx0aXBhdGggc3RhdGUgd2l0aCB0YXJnZXQgdmFsdWVzLgogCSAqIFRoZXkgbWF5IGNoYW5nZSBpbiB0aGUgY291cnNlIG9mIHBhdGggdmVyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9mY3guYyBiL2RyaXZlcnMvczM5MC9jaW8vZmN4LmMKaW5kZXggNjE2NzdkZi4uY2E1ZTliYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9mY3guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2ZjeC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkvKiBBZGQgdGNhdCB0byB0Y2NiLiAqLwogCXRjY2IgPSB0Y3dfZ2V0X3RjY2IodGN3KTsKIAl0Y2F0ID0gKHN0cnVjdCB0Y2NiX3RjYXQgKikgJnRjY2ItPnRjYVt0Y2Ffc2l6ZSh0Y2NiKV07Ci0JbWVtc2V0KHRjYXQsIDAsIHNpemVvZih0Y2F0KSk7CisJbWVtc2V0KHRjYXQsIDAsIHNpemVvZigqdGNhdCkpOwogCS8qIENhbGN1bGF0ZSB0Y3cgaW5wdXQvb3V0cHV0IGNvdW50IGFuZCB0Y2F0IHRyYW5zcG9ydCBjb3VudC4gKi8KIAljb3VudCA9IGNhbGNfZGN3X2NvdW50KHRjY2IpOwogCWlmICh0Y3ctPncgJiYgKHRjdy0+ZmxhZ3MgJiBUQ1dfRkxBR1NfT1VUUFVUX1RJREEpKQpAQCAtMjY5LDcgKzI2OSw3IEBACiAgKi8KIHZvaWQgdHNiX2luaXQoc3RydWN0IHRzYiAqdHNiKQogewotCW1lbXNldCh0c2IsIDAsIHNpemVvZih0c2IpKTsKKwltZW1zZXQodHNiLCAwLCBzaXplb2YoKnRzYikpOwogfQogRVhQT1JUX1NZTUJPTCh0c2JfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmggYi9kcml2ZXJzL3MzOTAvY2lvL2lvX3NjaC5oCmluZGV4IGQ3MmFlNGMuLmI5Y2U3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9pb19zY2guaApAQCAtMTUwLDYgKzE1MCw3IEBACiAJc3RydWN0IGNjd19yZXF1ZXN0IHJlcTsJCS8qIGludGVybmFsIEkvTyByZXF1ZXN0ICovCiAJaW50IGlyZXRyeTsKIAl1OCBwZ2lkX3ZhbGlkX21hc2s7CQkvKiBtYXNrIG9mIHZhbGlkIFBHSURzICovCisJdTggcGdpZF90b2RvX21hc2s7CQkvKiBtYXNrIG9mIFBHSURzIHRvIGJlIGFkanVzdGVkICovCiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50IGZhc3Q6MTsJLyogcG9zdCB3aXRoICJjaGFubmVsIGVuZCIgKi8KIAkJdW5zaWduZWQgaW50IHJlcGFsbDoxOwkvKiByZXBvcnQgZXZlcnkgaW50ZXJydXB0IHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCBmZjc3NDhhLi40NGYyZjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMTgyLDYgKzE4MiwzNCBAQAogCXUzMjozMjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgcWRpb19kZXZfcGVyZl9zdGF0IHsKKwl1bnNpZ25lZCBpbnQgYWRhcHRlcl9pbnQ7CisJdW5zaWduZWQgaW50IHFkaW9faW50OworCXVuc2lnbmVkIGludCBwY2lfcmVxdWVzdF9pbnQ7CisKKwl1bnNpZ25lZCBpbnQgdGFza2xldF9pbmJvdW5kOworCXVuc2lnbmVkIGludCB0YXNrbGV0X2luYm91bmRfcmVzY2hlZDsKKwl1bnNpZ25lZCBpbnQgdGFza2xldF9pbmJvdW5kX3Jlc2NoZWQyOworCXVuc2lnbmVkIGludCB0YXNrbGV0X291dGJvdW5kOworCisJdW5zaWduZWQgaW50IHNpZ2FfcmVhZDsKKwl1bnNpZ25lZCBpbnQgc2lnYV93cml0ZTsKKwl1bnNpZ25lZCBpbnQgc2lnYV9zeW5jOworCisJdW5zaWduZWQgaW50IGluYm91bmRfY2FsbDsKKwl1bnNpZ25lZCBpbnQgaW5ib3VuZF9oYW5kbGVyOworCXVuc2lnbmVkIGludCBzdG9wX3BvbGxpbmc7CisJdW5zaWduZWQgaW50IGluYm91bmRfcXVldWVfZnVsbDsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfY2FsbDsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfaGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQgZmFzdF9yZXF1ZXVlOworCXVuc2lnbmVkIGludCB0YXJnZXRfZnVsbDsKKwl1bnNpZ25lZCBpbnQgZXFiczsKKwl1bnNpZ25lZCBpbnQgZXFic19wYXJ0aWFsOworCXVuc2lnbmVkIGludCBzcWJzOworCXVuc2lnbmVkIGludCBzcWJzX3BhcnRpYWw7Cit9OworCiBzdHJ1Y3QgcWRpb19pbnB1dF9xIHsKIAkvKiBpbnB1dCBidWZmZXIgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KIAlpbnQgcG9sbGluZzsKQEAgLTI2OSw2ICsyOTcsNyBAQAogCXUzMiAqZHNjaTsJCS8qIGFkZHJlc3Mgb2YgZGV2aWNlIHN0YXRlIGNoYW5nZSBpbmRpY2F0b3IgKi8KIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RldjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BlcmY7CiAKIAl1bnNpZ25lZCBsb25nIGludF9wYXJtOwogCXN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkOwpAQCAtMjg2LDkgKzMxNSwxMCBAQAogCXN0cnVjdCBjaXcgYXF1ZXVlOwogCiAJc3RydWN0IHFkaW9fc3NxZF9kZXNjIHNzcWRfZGVzYzsKLQogCXZvaWQgKCpvcmlnX2hhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgaXJiICopOwogCisJc3RydWN0IHFkaW9fZGV2X3BlcmZfc3RhdCBwZXJmX3N0YXQ7CisJaW50IHBlcmZfc3RhdF9lbmFibGVkOwogCS8qCiAJICogV2FybmluZzogTGVhdmUgdGhlc2UgbWVtYmVycyB0b2dldGhlciBhdCB0aGUgZW5kIHNvIHRoZXkgd29uJ3QgYmUKIAkgKiBjbGVhcmVkIGluIHFkaW9fc2V0dXBfaXJxLgpAQCAtMzExLDYgKzM0MSwxMCBAQAogCShpcnEtPnFpYi5xZm10ID09IFFESU9fSVFESU9fUUZNVCB8fCBcCiAJIGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5haWZfb3NhKQogCisjZGVmaW5lIHFwZXJmKHFkZXYsYXR0cikJcWRldi0+cGVyZl9zdGF0LmF0dHIKKyNkZWZpbmUgcXBlcmZfaW5jKHEsYXR0cikJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSBcCisJCQkJCXEtPmlycV9wdHItPnBlcmZfc3RhdC5hdHRyKysKKwogLyogdGhlIGhpZ2hlc3QgaXFkaW8gcXVldWUgaXMgdXNlZCBmb3IgbXVsdGljYXN0ICovCiBzdGF0aWMgaW5saW5lIGludCBtdWx0aWNhc3Rfb3V0Ym91bmQoc3RydWN0IHFkaW9fcSAqcSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggNzY3Njk5Ny4uZjQ5NzYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTU1LDEzICs1NSwxMSBAQAogCWlmICghcSkKIAkJcmV0dXJuIDA7CiAKLQlzZXFfcHJpbnRmKG0sICJkZXZpY2Ugc3RhdGUgaW5kaWNhdG9yOiAlZFxuIiwgKih1MzIgKilxLT5pcnFfcHRyLT5kc2NpKTsKLQlzZXFfcHJpbnRmKG0sICJucl91c2VkOiAlZFxuIiwgYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSk7Ci0Jc2VxX3ByaW50ZihtLCAiZnRjOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2spOwotCXNlcV9wcmludGYobSwgImxhc3RfbW92ZTogJWRcbiIsIHEtPmxhc3RfbW92ZSk7Ci0Jc2VxX3ByaW50ZihtLCAicG9sbGluZzogJWRcbiIsIHEtPnUuaW4ucG9sbGluZyk7Ci0Jc2VxX3ByaW50ZihtLCAiYWNrIHN0YXJ0OiAlZFxuIiwgcS0+dS5pbi5hY2tfc3RhcnQpOwotCXNlcV9wcmludGYobSwgImFjayBjb3VudDogJWRcbiIsIHEtPnUuaW4uYWNrX2NvdW50KTsKKwlzZXFfcHJpbnRmKG0sICJEU0NJOiAlZCAgIG5yX3VzZWQ6ICVkXG4iLAorCQkgICAqKHUzMiAqKXEtPmlycV9wdHItPmRzY2ksIGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpOworCXNlcV9wcmludGYobSwgImZ0YzogJWQgIGxhc3RfbW92ZTogJWRcbiIsIHEtPmZpcnN0X3RvX2NoZWNrLCBxLT5sYXN0X21vdmUpOworCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkICBhY2sgc3RhcnQ6ICVkICBhY2sgY291bnQ6ICVkXG4iLAorCQkgICBxLT51LmluLnBvbGxpbmcsIHEtPnUuaW4uYWNrX3N0YXJ0LCBxLT51LmluLmFja19jb3VudCk7CiAJc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDAgICAgICB8OCAgICAgIHwxNiAgICAgfDI0ICAgICB8MzIgICAgIHw0MCAgICAgfDQ4ICAgICB8NTYgIDYzfFxuIik7CiAKQEAgLTExMCw3ICsxMDgsNiBAQAogCiAJaWYgKCFxKQogCQlyZXR1cm4gMDsKLQogCWlmIChxLT5pc19pbnB1dF9xKQogCQl4Y2hnKHEtPmlycV9wdHItPmRzY2ksIDEpOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKQEAgLTEzNCw2ICsxMzEsOTggQEAKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAorc3RhdGljIGNoYXIgKnFwZXJmX25hbWVzW10gPSB7CisJIkFzc3VtZWQgYWRhcHRlciBpbnRlcnJ1cHRzIiwKKwkiUURJTyBpbnRlcnJ1cHRzIiwKKwkiUmVxdWVzdGVkIFBDSXMiLAorCSJJbmJvdW5kIHRhc2tsZXQgcnVucyIsCisJIkluYm91bmQgdGFza2xldCByZXNjaGVkIiwKKwkiSW5ib3VuZCB0YXNrbGV0IHJlc2NoZWQyIiwKKwkiT3V0Ym91bmQgdGFza2xldCBydW5zIiwKKwkiU0lHQSByZWFkIiwKKwkiU0lHQSB3cml0ZSIsCisJIlNJR0Egc3luYyIsCisJIkluYm91bmQgY2FsbHMiLAorCSJJbmJvdW5kIGhhbmRsZXIiLAorCSJJbmJvdW5kIHN0b3BfcG9sbGluZyIsCisJIkluYm91bmQgcXVldWUgZnVsbCIsCisJIk91dGJvdW5kIGNhbGxzIiwKKwkiT3V0Ym91bmQgaGFuZGxlciIsCisJIk91dGJvdW5kIGZhc3RfcmVxdWV1ZSIsCisJIk91dGJvdW5kIHRhcmdldF9mdWxsIiwKKwkiUUVCU00gZXFicyIsCisJIlFFQlNNIGVxYnMgcGFydGlhbCIsCisJIlFFQlNNIHNxYnMiLAorCSJRRUJTTSBzcWJzIHBhcnRpYWwiCit9OworCitzdGF0aWMgaW50IHFwZXJmX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciA9IG0tPnByaXZhdGU7CisJdW5zaWduZWQgaW50ICpzdGF0OworCWludCBpOworCisJaWYgKCFpcnFfcHRyKQorCQlyZXR1cm4gMDsKKwlpZiAoIWlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSB7CisJCXNlcV9wcmludGYobSwgImRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXN0YXQgPSAodW5zaWduZWQgaW50ICopJmlycV9wdHItPnBlcmZfc3RhdDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFwZXJmX25hbWVzKTsgaSsrKQorCQlzZXFfcHJpbnRmKG0sICIlMjZzOlx0JXVcbiIsCisJCQkgICBxcGVyZl9uYW1lc1tpXSwgKihzdGF0ICsgaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBxcGVyZl9zZXFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHFkaW9faXJxICppcnFfcHRyID0gc2VxLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWNoYXIgYnVmWzhdOworCWludCByZXQ7CisKKwlpZiAoIWlycV9wdHIpCisJCXJldHVybiAwOworCWlmIChjb3VudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2NvdW50XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQlpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDA7CisJCW1lbXNldCgmaXJxX3B0ci0+cGVyZl9zdGF0LCAwLCBzaXplb2YoaXJxX3B0ci0+cGVyZl9zdGF0KSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQgPSAxOworCQlicmVhazsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHFwZXJmX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBxcGVyZl9zaG93LAorCQkJICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19wZXJmX2ZvcHMgPSB7CisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuCSA9IHFwZXJmX3NlcV9vcGVuLAorCS5yZWFkCSA9IHNlcV9yZWFkLAorCS53cml0ZQkgPSBxcGVyZl9zZXFfd3JpdGUsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CiBzdGF0aWMgdm9pZCBzZXR1cF9kZWJ1Z2ZzX2VudHJ5KHN0cnVjdCBxZGlvX3EgKnEsIHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWNoYXIgbmFtZVtRRElPX0RFQlVHRlNfTkFNRV9MRU5dOwpAQCAtMTU2LDYgKzI0NSwxNCBAQAogCQkJCQkJICBkZWJ1Z2ZzX3Jvb3QpOwogCWlmIChJU19FUlIoaXJxX3B0ci0+ZGVidWdmc19kZXYpKQogCQlpcnFfcHRyLT5kZWJ1Z2ZzX2RldiA9IE5VTEw7CisKKwlpcnFfcHRyLT5kZWJ1Z2ZzX3BlcmYgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aXN0aWNzIiwKKwkJCQlTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJaXJxX3B0ci0+ZGVidWdmc19kZXYsIGlycV9wdHIsCisJCQkJJmRlYnVnZnNfcGVyZl9mb3BzKTsKKwlpZiAoSVNfRVJSKGlycV9wdHItPmRlYnVnZnNfcGVyZikpCisJCWlycV9wdHItPmRlYnVnZnNfcGVyZiA9IE5VTEw7CisKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQogCQlzZXR1cF9kZWJ1Z2ZzX2VudHJ5KHEsIGNkZXYpOwogCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQpAQCAtMTcxLDYgKzI2OCw3IEBACiAJCWRlYnVnZnNfcmVtb3ZlKHEtPmRlYnVnZnNfcSk7CiAJZm9yX2VhY2hfb3V0cHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCWRlYnVnZnNfcmVtb3ZlKHEtPmRlYnVnZnNfcSk7CisJZGVidWdmc19yZW1vdmUoaXJxX3B0ci0+ZGVidWdmc19wZXJmKTsKIAlkZWJ1Z2ZzX3JlbW92ZShpcnFfcHRyLT5kZWJ1Z2ZzX2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDRiZTZlODQuLjk5OWZlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgInFkaW8uaCIKICNpbmNsdWRlICJxZGlvX2RlYnVnLmgiCi0jaW5jbHVkZSAicWRpb19wZXJmLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4sIlwKIAkiSmFuIEdsYXViZXIgPGphbmdAbGludXgudm5ldC5pYm0uY29tPiIpOwpAQCAtMTI2LDcgKzEyNSw3IEBACiAJaW50IHJjOwogCiAJQlVHX09OKCFxLT5pcnFfcHRyLT5zY2hfdG9rZW4pOwotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z19lcWJzX2FsbCk7CisJcXBlcmZfaW5jKHEsIGVxYnMpOwogCiAJaWYgKCFxLT5pc19pbnB1dF9xKQogCQluciArPSBxLT5pcnFfcHRyLT5ucl9pbnB1dF9xczsKQEAgLTEzOSw3ICsxMzgsNyBAQAogCSAqIGJ1ZmZlcnMgbGF0ZXIuCiAJICovCiAJaWYgKChjY3EgPT0gOTYpICYmIChjb3VudCAhPSB0bXBfY291bnQpKSB7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z19lcWJzX2luY29tcGxldGUpOworCQlxcGVyZl9pbmMocSwgZXFic19wYXJ0aWFsKTsKIAkJcmV0dXJuIChjb3VudCAtIHRtcF9jb3VudCk7CiAJfQogCkBAIC0xODIsNyArMTgxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlCVUdfT04oIXEtPmlycV9wdHItPnNjaF90b2tlbik7Ci0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmRlYnVnX3NxYnNfYWxsKTsKKwlxcGVyZl9pbmMocSwgc3Ficyk7CiAKIAlpZiAoIXEtPmlzX2lucHV0X3EpCiAJCW5yICs9IHEtPmlycV9wdHItPm5yX2lucHV0X3FzOwpAQCAtMTkxLDcgKzE5MCw3IEBACiAJcmMgPSBxZGlvX2NoZWNrX2NjcShxLCBjY3EpOwogCWlmIChyYyA9PSAxKSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJTUUJTIGFnYWluOiUyZCIsIGNjcSk7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5kZWJ1Z19zcWJzX2luY29tcGxldGUpOworCQlxcGVyZl9pbmMocSwgc3Fic19wYXJ0aWFsKTsKIAkJZ290byBhZ2FpbjsKIAl9CiAJaWYgKHJjIDwgMCkgewpAQCAtMjg1LDcgKzI4NCw3IEBACiAJCXJldHVybiAwOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtczolMWQiLCBxLT5ucik7Ci0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnNpZ2Ffc3luYyk7CisJcXBlcmZfaW5jKHEsIHNpZ2Ffc3luYyk7CiAKIAljYyA9IGRvX3NpZ2Ffc3luYyhxLT5pcnFfcHRyLT5zY2hpZCwgb3V0cHV0LCBpbnB1dCk7CiAJaWYgKGNjKQpAQCAtMzUwLDcgKzM0OSw3IEBACiAJaW50IGNjOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtcjolMWQiLCBxLT5ucik7Ci0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnNpZ2FfaW4pOworCXFwZXJmX2luYyhxLCBzaWdhX3JlYWQpOwogCiAJY2MgPSBkb19zaWdhX2lucHV0KHEtPmlycV9wdHItPnNjaGlkLCBxLT5tYXNrKTsKIAlpZiAoY2MpCkBAIC0zODIsNyArMzgxLDcgQEAKIAkJcmV0dXJuOwogCiAJcS0+dS5pbi5wb2xsaW5nID0gMDsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZGVidWdfc3RvcF9wb2xsaW5nKTsKKwlxcGVyZl9pbmMocSwgc3RvcF9wb2xsaW5nKTsKIAogCS8qIHNob3cgdGhlIGNhcmQgdGhhdCB3ZSBhcmUgbm90IHBvbGxpbmcgYW55bW9yZSAqLwogCWlmIChpc19xZWJzbShxKSkgewpAQCAtNDAwLDcgKzM5OSw3IEBACiAJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igbm8gdGFyZ2V0IGJ1ZmZlciBlbXB0eSAqLwogCWlmICgoIXEtPmlzX2lucHV0X3EgJiYKIAkgICAgKHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpID09IDB4MTApKSB7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5vdXRib3VuZF90YXJnZXRfZnVsbCk7CisJCXFwZXJmX2luYyhxLCB0YXJnZXRfZnVsbCk7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJPVVRGVUxMIEZUQzolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKIAkJcmV0dXJuOwpAQCAtNDg2LDcgKzQ4NSw4IEBACiAJY2FzZSBTTFNCX1BfSU5QVVRfUFJJTUVEOgogCQlpbmJvdW5kX3ByaW1lZChxLCBjb3VudCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwotCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOworCQlpZiAoYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKSA9PSAwKQorCQkJcXBlcmZfaW5jKHEsIGluYm91bmRfcXVldWVfZnVsbCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX0lOUFVUX0VSUk9SOgogCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwpAQCAtNTY2LDkgKzU2NiwxMCBAQAogCWNvdW50ID0gc3ViX2J1ZihlbmQsIHN0YXJ0KTsKIAogCWlmIChxLT5pc19pbnB1dF9xKSB7Ci0JCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5pbmJvdW5kX2hhbmRsZXIpOworCQlxcGVyZl9pbmMocSwgaW5ib3VuZF9oYW5kbGVyKTsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUwMnggYzolMDJ4Iiwgc3RhcnQsIGNvdW50KTsKIAl9IGVsc2UKKwkJcXBlcmZfaW5jKHEsIG91dGJvdW5kX2hhbmRsZXIpOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia29oOiBzOiUwMnggYzolMDJ4IiwKIAkJCSAgICAgIHN0YXJ0LCBjb3VudCk7CiAKQEAgLTU4MiwyNCArNTgzLDI4IEBACiAKIHN0YXRpYyB2b2lkIF9fcWRpb19pbmJvdW5kX3Byb2Nlc3Npbmcoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGFza2xldF9pbmJvdW5kKTsKKwlxcGVyZl9pbmMocSwgdGFza2xldF9pbmJvdW5kKTsKIGFnYWluOgogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCiAJCXJldHVybjsKIAogCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCi0JaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKQorCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewogCQkvKiBtZWFucyBwb2xsIHRpbWUgaXMgbm90IHlldCBvdmVyICovCisJCXFwZXJmX2luYyhxLCB0YXNrbGV0X2luYm91bmRfcmVzY2hlZCk7CiAJCWdvdG8gYWdhaW47CisJfQogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIHRvIG5vdCBsb3NlIGluaXRpYXRpdmUgYWZ0ZXIKIAkgKiByZXNldHRpbmcgdGhlIEFDSyBzdGF0ZS4KIAkgKi8KLQlpZiAoIXFkaW9faW5ib3VuZF9xX2RvbmUocSkpCisJaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CisJCXFwZXJmX2luYyhxLCB0YXNrbGV0X2luYm91bmRfcmVzY2hlZDIpOwogCQlnb3RvIGFnYWluOworCX0KIH0KIAogdm9pZCBxZGlvX2luYm91bmRfcHJvY2Vzc2luZyh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC02ODcsNyArNjkyLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13OiUxZCIsIHEtPm5yKTsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuc2lnYV9vdXQpOworCXFwZXJmX2luYyhxLCBzaWdhX3dyaXRlKTsKIAogCWNjID0gcWRpb19zaWdhX291dHB1dChxLCAmYnVzeV9iaXQpOwogCXN3aXRjaCAoY2MpIHsKQEAgLTcxMCw3ICs3MTUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX3FkaW9fb3V0Ym91bmRfcHJvY2Vzc2luZyhzdHJ1Y3QgcWRpb19xICpxKQogewotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50YXNrbGV0X291dGJvdW5kKTsKKwlxcGVyZl9pbmMocSwgdGFza2xldF9vdXRib3VuZCk7CiAJQlVHX09OKGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkgPCAwKTsKIAogCWlmIChxZGlvX291dGJvdW5kX3FfbW92ZWQocSkpCkBAIC03MzgsMTIgKzc0Myw5IEBACiAJICovCiAJaWYgKHFkaW9fb3V0Ym91bmRfcV9kb25lKHEpKQogCQlkZWxfdGltZXIoJnEtPnUub3V0LnRpbWVyKTsKLQllbHNlIHsKLQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZxLT51Lm91dC50aW1lcikpIHsKKwllbHNlCisJCWlmICghdGltZXJfcGVuZGluZygmcS0+dS5vdXQudGltZXIpKQogCQkJbW9kX3RpbWVyKCZxLT51Lm91dC50aW1lciwgamlmZmllcyArIDEwICogSFopOwotCQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmRlYnVnX3RsX291dF90aW1lcik7Ci0JCX0KLQl9CiAJcmV0dXJuOwogCiBzY2hlZDoKQEAgLTc4Myw3ICs3ODUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX3RpcWRpb19pbmJvdW5kX3Byb2Nlc3Npbmcoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kKTsKKwlxcGVyZl9pbmMocSwgdGFza2xldF9pbmJvdW5kKTsKIAlxZGlvX3N5bmNfYWZ0ZXJfdGhpbmludChxKTsKIAogCS8qCkBAIC03OTgsNyArODAwLDcgQEAKIAlxZGlvX2tpY2tfaGFuZGxlcihxKTsKIAogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewotCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3ApOworCQlxcGVyZl9pbmMocSwgdGFza2xldF9pbmJvdW5kX3Jlc2NoZWQpOwogCQlpZiAobGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKSB7CiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAkJCXJldHVybjsKQEAgLTgxMSw3ICs4MTMsNyBAQAogCSAqIHJlc2V0dGluZyB0aGUgQUNLIHN0YXRlLgogCSAqLwogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkgewotCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKTsKKwkJcXBlcmZfaW5jKHEsIHRhc2tsZXRfaW5ib3VuZF9yZXNjaGVkMik7CiAJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CkBAIC04NTAsOCArODUyLDYgQEAKIAlpZiAodW5saWtlbHkoaXJxX3B0ci0+c3RhdGUgPT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCiAJCXJldHVybjsKIAotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5wY2lfaW50KTsKLQogCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCkBAIC05MjIsOCArOTIyLDYgQEAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIgPSBjZGV2LT5wcml2YXRlLT5xZGlvX2RhdGE7CiAJaW50IGNzdGF0LCBkc3RhdDsKIAotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5xZGlvX2ludCk7Ci0KIAlpZiAoIWludHBhcm0gfHwgIWlycV9wdHIpIHsKIAkJREJGX0VSUk9SKCJxaW50OiU0eCIsIGNkZXYtPnByaXZhdGUtPnNjaGlkLnNjaF9ubyk7CiAJCXJldHVybjsKQEAgLTEzODIsNiArMTM4MCw4IEBACiB7CiAJaW50IHVzZWQsIGRpZmY7CiAKKwlxcGVyZl9pbmMocSwgaW5ib3VuZF9jYWxsKTsKKwogCWlmICghcS0+dS5pbi5wb2xsaW5nKQogCQlnb3RvIHNldDsKIApAQCAtMTQzNywxNCArMTQzNywxNiBAQAogCXVuc2lnbmVkIGNoYXIgc3RhdGU7CiAJaW50IHVzZWQsIHJjID0gMDsKIAotCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyKTsKKwlxcGVyZl9pbmMocSwgb3V0Ym91bmRfY2FsbCk7CiAKIAljb3VudCA9IHNldF9idWZfc3RhdGVzKHEsIGJ1Zm5yLCBTTFNCX0NVX09VVFBVVF9QUklNRUQsIGNvdW50KTsKIAl1c2VkID0gYXRvbWljX2FkZF9yZXR1cm4oY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJQlVHX09OKHVzZWQgPiBRRElPX01BWF9CVUZGRVJTX1BFUl9RKTsKIAotCWlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfUENJX09VVCkKKwlpZiAoY2FsbGZsYWdzICYgUURJT19GTEFHX1BDSV9PVVQpIHsKIAkJcS0+dS5vdXQucGNpX291dF9lbmFibGVkID0gMTsKKwkJcXBlcmZfaW5jKHEsIHBjaV9yZXF1ZXN0X2ludCk7CisJfQogCWVsc2UKIAkJcS0+dS5vdXQucGNpX291dF9lbmFibGVkID0gMDsKIApAQCAtMTQ4Myw3ICsxNDg1LDcgQEAKIAlpZiAoc3RhdGUgIT0gU0xTQl9DVV9PVVRQVVRfUFJJTUVEKQogCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCWVsc2UKLQkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmZhc3RfcmVxdWV1ZSk7CisJCXFwZXJmX2luYyhxLCBmYXN0X3JlcXVldWUpOwogCiBvdXQ6CiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CkBAIC0xNTM5LDE2ICsxNTQxLDExIEBACiAJcmMgPSBxZGlvX2RlYnVnX2luaXQoKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X3RpOwotCXJjID0gcWRpb19zZXR1cF9wZXJmX3N0YXRzKCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9kZWJ1ZzsKIAlyYyA9IHRpcWRpb19yZWdpc3Rlcl90aGluaW50cygpOwogCWlmIChyYykKLQkJZ290byBvdXRfcGVyZjsKKwkJZ290byBvdXRfZGVidWc7CiAJcmV0dXJuIDA7CiAKLW91dF9wZXJmOgotCXFkaW9fcmVtb3ZlX3BlcmZfc3RhdHMoKTsKIG91dF9kZWJ1ZzoKIAlxZGlvX2RlYnVnX2V4aXQoKTsKIG91dF90aToKQEAgLTE1NjIsNyArMTU1OSw2IEBACiB7CiAJdGlxZGlvX3VucmVnaXN0ZXJfdGhpbmludHMoKTsKIAl0aXFkaW9fZnJlZV9tZW1vcnkoKTsKLQlxZGlvX3JlbW92ZV9wZXJmX3N0YXRzKCk7CiAJcWRpb19kZWJ1Z19leGl0KCk7CiAJcWRpb19zZXR1cF9leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4ZTNjNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKLSAqCi0gKiAgQXV0aG9yOiBKYW4gR2xhdWJlciAoamFuZ0BsaW51eC52bmV0LmlibS5jb20pCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+Ci0KLSNpbmNsdWRlICJjaW8uaCIKLSNpbmNsdWRlICJjc3MuaCIKLSNpbmNsdWRlICJkZXZpY2UuaCIKLSNpbmNsdWRlICJpb2FzbS5oIgotI2luY2x1ZGUgImNoc2MuaCIKLSNpbmNsdWRlICJxZGlvX2RlYnVnLmgiCi0jaW5jbHVkZSAicWRpb19wZXJmLmgiCi0KLWludCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzOwotc3RydWN0IHFkaW9fcGVyZl9zdGF0cyBwZXJmX3N0YXRzOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnFkaW9fcGVyZl9wZGU7Ci0jZW5kaWYKLQotLyoKLSAqIHByb2NmcyBmdW5jdGlvbnMKLSAqLwotc3RhdGljIGludCBxZGlvX3BlcmZfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgcWRpbyBpbnRlcnJ1cHRzXHRcdFx0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMucWRpb19pbnQpKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgUENJIGludGVycnVwdHNcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5wY2lfaW50KSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIGFkYXB0ZXIgaW50ZXJydXB0c1x0XHRcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnRoaW5faW50KSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJJbmJvdW5kIHRhc2tsZXQgcnVuc1x0XHRcdFx0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMudGFza2xldF9pbmJvdW5kKSk7Ci0Jc2VxX3ByaW50ZihtLCAiT3V0Ym91bmQgdGFza2xldCBydW5zXHRcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy50YXNrbGV0X291dGJvdW5kKSk7Ci0Jc2VxX3ByaW50ZihtLCAiQWRhcHRlciBpbnRlcnJ1cHQgdGFza2xldCBydW5zL2xvb3BzXHRcdDogJWxpLyVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy50YXNrbGV0X3RoaW5pbnQpLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnRhc2tsZXRfdGhpbmludF9sb29wKSk7Ci0Jc2VxX3ByaW50ZihtLCAiQWRhcHRlciBpbnRlcnJ1cHQgaW5ib3VuZCB0YXNrbGV0IHJ1bnMvbG9vcHNcdDogJWxpLyVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmQpLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnRoaW5pbnRfaW5ib3VuZF9sb29wKSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgU0lHQSBJbiBpc3N1ZWRcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5zaWdhX2luKSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIFNJR0EgT3V0IGlzc3VlZFx0XHRcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLnNpZ2Ffb3V0KSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIFNJR0EgU3luYyBpc3N1ZWRcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5zaWdhX3N5bmMpKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBpbmJvdW5kIHRyYW5zZmVyc1x0XHRcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcikpOwotCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBvdXRib3VuZCB0cmFuc2ZlcnNcdFx0XHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyKSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2YgZmFzdCByZXF1ZXVlcyAob3V0Zy4gU0JBTCB3L28gU0lHQSlcdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmZhc3RfcmVxdWV1ZSkpOwotCXNlcV9wcmludGYobSwgIk51bWJlciBvZiBvdXRib3VuZCB0YXJnZXQgZnVsbCBjb25kaXRpb25cdDogJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLm91dGJvdW5kX3RhcmdldF9mdWxsKSk7Ci0Jc2VxX3ByaW50ZihtLCAiTnVtYmVyIG9mIG91dGJvdW5kIHRhc2tsZXQgbW9kX3RpbWVyIGNhbGxzXHQ6ICVsaVxuIiwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5kZWJ1Z190bF9vdXRfdGltZXIpKTsKLQlzZXFfcHJpbnRmKG0sICJOdW1iZXIgb2Ygc3RvcCBwb2xsaW5nIGNhbGxzXHRcdFx0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMuZGVidWdfc3RvcF9wb2xsaW5nKSk7Ci0Jc2VxX3ByaW50ZihtLCAiQUkgaW5ib3VuZCB0YXNrbGV0IGxvb3BzIGFmdGVyIHN0b3AgcG9sbGluZ1x0OiAlbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMudGhpbmludF9pbmJvdW5kX2xvb3AyKSk7Ci0Jc2VxX3ByaW50ZihtLCAiUUVCU00gRVFCUyB0b3RhbC9pbmNvbXBsZXRlXHRcdFx0OiAlbGkvJWxpXG4iLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmRlYnVnX2VxYnNfYWxsKSwKLQkJICAgKGxvbmcpYXRvbWljX2xvbmdfcmVhZCgmcGVyZl9zdGF0cy5kZWJ1Z19lcWJzX2luY29tcGxldGUpKTsKLQlzZXFfcHJpbnRmKG0sICJRRUJTTSBTUUJTIHRvdGFsL2luY29tcGxldGVcdFx0XHQ6ICVsaS8lbGlcbiIsCi0JCSAgIChsb25nKWF0b21pY19sb25nX3JlYWQoJnBlcmZfc3RhdHMuZGVidWdfc3Fic19hbGwpLAotCQkgICAobG9uZylhdG9taWNfbG9uZ19yZWFkKCZwZXJmX3N0YXRzLmRlYnVnX3NxYnNfaW5jb21wbGV0ZSkpOwotCXNlcV9wcmludGYobSwgIlxuIik7Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHFkaW9fcGVyZl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgcWRpb19wZXJmX3Byb2Nfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFkaW9fcGVyZl9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHFkaW9fcGVyZl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIHN5c2ZzIGZ1bmN0aW9ucwotICovCi1zdGF0aWMgc3NpemVfdCBxZGlvX3BlcmZfc3RhdHNfc2hvdyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzID8gMSA6IDApOwotfQotCi1zdGF0aWMgc3NpemVfdCBxZGlvX3BlcmZfc3RhdHNfc3RvcmUoc3RydWN0IGJ1c190eXBlICpidXMsCi0JCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxNiwgJmkpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgoaSAhPSAwKSAmJiAoaSAhPSAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGkgPT0gcWRpb19wZXJmb3JtYW5jZV9zdGF0cykKLQkJcmV0dXJuIGNvdW50OwotCi0JcWRpb19wZXJmb3JtYW5jZV9zdGF0cyA9IGk7Ci0JLyogcmVzZXQgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcyAqLwotCWlmIChpID09IDApCi0JCW1lbXNldCgmcGVyZl9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX3BlcmZfc3RhdHMpKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBCVVNfQVRUUihxZGlvX3BlcmZvcm1hbmNlX3N0YXRzLCAwNjQ0LCBxZGlvX3BlcmZfc3RhdHNfc2hvdywKLQkJcWRpb19wZXJmX3N0YXRzX3N0b3JlKTsKLQotaW50IF9faW5pdCBxZGlvX3NldHVwX3BlcmZfc3RhdHModm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGJ1c19jcmVhdGVfZmlsZSgmY2N3X2J1c190eXBlLCAmYnVzX2F0dHJfcWRpb19wZXJmb3JtYW5jZV9zdGF0cyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCW1lbXNldCgmcGVyZl9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX3BlcmZfc3RhdHMpKTsKLQlxZGlvX3BlcmZfcGRlID0gcHJvY19jcmVhdGUoInFkaW9fcGVyZiIsIFNfSUZSRUcgfCBTX0lSVUdPLAotCQkJCSAgICBOVUxMLCAmcWRpb19wZXJmX3Byb2NfZm9wcyk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBxZGlvX3JlbW92ZV9wZXJmX3N0YXRzKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgicWRpb19wZXJmIiwgTlVMTCk7Ci0jZW5kaWYKLQlidXNfcmVtb3ZlX2ZpbGUoJmNjd19idXNfdHlwZSwgJmJ1c19hdHRyX3FkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDUwNGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuaAotICoKLSAqICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKLSAqCi0gKiAgQXV0aG9yOiBKYW4gR2xhdWJlciAoamFuZ0BsaW51eC52bmV0LmlibS5jb20pCi0gKi8KLSNpZm5kZWYgUURJT19QRVJGX0gKLSNkZWZpbmUgUURJT19QRVJGX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi1zdHJ1Y3QgcWRpb19wZXJmX3N0YXRzIHsKLQkvKiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxscyAqLwotCWF0b21pY19sb25nX3QgcWRpb19pbnQ7Ci0JYXRvbWljX2xvbmdfdCBwY2lfaW50OwotCWF0b21pY19sb25nX3QgdGhpbl9pbnQ7Ci0KLQkvKiB0YXNrbGV0IHJ1bnMgKi8KLQlhdG9taWNfbG9uZ190IHRhc2tsZXRfaW5ib3VuZDsKLQlhdG9taWNfbG9uZ190IHRhc2tsZXRfb3V0Ym91bmQ7Ci0JYXRvbWljX2xvbmdfdCB0YXNrbGV0X3RoaW5pbnQ7Ci0JYXRvbWljX2xvbmdfdCB0YXNrbGV0X3RoaW5pbnRfbG9vcDsKLQlhdG9taWNfbG9uZ190IHRoaW5pbnRfaW5ib3VuZDsKLQlhdG9taWNfbG9uZ190IHRoaW5pbnRfaW5ib3VuZF9sb29wOwotCWF0b21pY19sb25nX3QgdGhpbmludF9pbmJvdW5kX2xvb3AyOwotCi0JLyogc2lnbmFsIGFkYXB0ZXIgY2FsbHMgKi8KLQlhdG9taWNfbG9uZ190IHNpZ2Ffb3V0OwotCWF0b21pY19sb25nX3Qgc2lnYV9pbjsKLQlhdG9taWNfbG9uZ190IHNpZ2Ffc3luYzsKLQotCS8qIG1pc2MgKi8KLQlhdG9taWNfbG9uZ190IGluYm91bmRfaGFuZGxlcjsKLQlhdG9taWNfbG9uZ190IG91dGJvdW5kX2hhbmRsZXI7Ci0JYXRvbWljX2xvbmdfdCBmYXN0X3JlcXVldWU7Ci0JYXRvbWljX2xvbmdfdCBvdXRib3VuZF90YXJnZXRfZnVsbDsKLQotCS8qIGZvciBkZWJ1Z2dpbmcgKi8KLQlhdG9taWNfbG9uZ190IGRlYnVnX3RsX291dF90aW1lcjsKLQlhdG9taWNfbG9uZ190IGRlYnVnX3N0b3BfcG9sbGluZzsKLQlhdG9taWNfbG9uZ190IGRlYnVnX2VxYnNfYWxsOwotCWF0b21pY19sb25nX3QgZGVidWdfZXFic19pbmNvbXBsZXRlOwotCWF0b21pY19sb25nX3QgZGVidWdfc3Fic19hbGw7Ci0JYXRvbWljX2xvbmdfdCBkZWJ1Z19zcWJzX2luY29tcGxldGU7Ci19OwotCi1leHRlcm4gc3RydWN0IHFkaW9fcGVyZl9zdGF0cyBwZXJmX3N0YXRzOwotZXh0ZXJuIGludCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcWRpb19wZXJmX3N0YXRfaW5jKGF0b21pY19sb25nX3QgKmNvdW50KQotewotCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQotCQlhdG9taWNfbG9uZ19pbmMoY291bnQpOwotfQotCi1pbnQgcWRpb19zZXR1cF9wZXJmX3N0YXRzKHZvaWQpOwotdm9pZCBxZGlvX3JlbW92ZV9wZXJmX3N0YXRzKHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggMThkNTRmYy4uOGMyZGVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybjsKIAotCVdBUk5fT04oKHVuc2lnbmVkIGxvbmcpJmlycV9wdHItPnFpYiAmIDB4ZmYpOwogCWlycV9wdHItPnFpYi5wZm10ID0gcWliX3BhcmFtX2ZpZWxkX2Zvcm1hdDsKIAlpZiAocWliX3BhcmFtX2ZpZWxkKQogCQltZW1jcHkoaXJxX3B0ci0+cWliLnBhcm0sIHFpYl9wYXJhbV9maWVsZCwKQEAgLTgyLDE0ICs4MSwxMiBAQAogCQlxID0ga21lbV9jYWNoZV9hbGxvYyhxZGlvX3FfY2FjaGUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXEpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJV0FSTl9PTigodW5zaWduZWQgbG9uZylxICYgMHhmZik7CiAKIAkJcS0+c2xpYiA9IChzdHJ1Y3Qgc2xpYiAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICghcS0+c2xpYikgewogCQkJa21lbV9jYWNoZV9mcmVlKHFkaW9fcV9jYWNoZSwgcSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKXEtPnNsaWIgJiAweDdmZik7CiAJCWlycV9wdHJfcXNbaV0gPSBxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEzMSw3ICsxMjgsNyBAQAogCS8qIGZpbGwgaW4gc2JhbCAqLwogCWZvciAoaiA9IDA7IGogPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBqKyspIHsKIAkJcS0+c2JhbFtqXSA9ICpzYmFsc19hcnJheSsrOwotCQlXQVJOX09OKCh1bnNpZ25lZCBsb25nKXEtPnNiYWxbal0gJiAweGZmKTsKKwkJQlVHX09OKCh1bnNpZ25lZCBsb25nKXEtPnNiYWxbal0gJiAweGZmKTsKIAl9CiAKIAkvKiBmaWxsIGluIHNsaWIgKi8KQEAgLTE0NywxMSArMTQ0LDYgQEAKIAkvKiBmaWxsIGluIHNsICovCiAJZm9yIChqID0gMDsgaiA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGorKykKIAkJcS0+c2wtPmVsZW1lbnRbal0uc2JhbCA9ICh1bnNpZ25lZCBsb25nKXEtPnNiYWxbal07Ci0KLQlEQkZfRVZFTlQoInNsLXNsc2Itc2JhbCIpOwotCURCRl9IRVgocS0+c2wsIHNpemVvZih2b2lkICopKTsKLQlEQkZfSEVYKCZxLT5zbHNiLCBzaXplb2Yodm9pZCAqKSk7Ci0JREJGX0hFWChxLT5zYmFsLCBzaXplb2Yodm9pZCAqKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3F1ZXVlcyhzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwppbmRleCA5ODFhNzdlLi4wOTFkOTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKQEAgLTEsOSArMSw3IEBACiAvKgogICogbGludXgvZHJpdmVycy9zMzkwL2Npby90aGluaW50X3FkaW8uYwogICoKLSAqIHRoaW4gaW50ZXJydXB0IHN1cHBvcnQgZm9yIHFkaW8KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMC0yMDA4IElCTSBDb3JwLgorICogQ29weXJpZ2h0IDIwMDAsMjAwOSBJQk0gQ29ycC4KICAqIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPgogICoJICAgICAgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgogICoJICAgICAgSmFuIEdsYXViZXIgPGphbmdAbGludXgudm5ldC5pYm0uY29tPgpAQCAtMTksNyArMTcsNiBAQAogI2luY2x1ZGUgImlvYXNtLmgiCiAjaW5jbHVkZSAicWRpby5oIgogI2luY2x1ZGUgInFkaW9fZGVidWcuaCIKLSNpbmNsdWRlICJxZGlvX3BlcmYuaCIKIAogLyoKICAqIFJlc3RyaWN0aW9uOiBvbmx5IDYzIGlxZGlvIHN1YmNoYW5uZWxzIHdvdWxkIGhhdmUgaXRzIG93biBpbmRpY2F0b3IsCkBAIC0xMzIsOCArMTI5LDYgQEAKIHsKIAlzdHJ1Y3QgcWRpb19xICpxOwogCi0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRoaW5faW50KTsKLQogCS8qCiAJICogU1ZTIG9ubHkgd2hlbiBuZWVkZWQ6IGlzc3VlIFNWUyB0byBiZW5lZml0IGZyb20gaXFkaW8gaW50ZXJydXB0CiAJICogYXZvaWRhbmNlIChTVlMgY2xlYXJzIGFkYXB0ZXIgaW50ZXJydXB0IHN1cHByZXNzaW9uIG92ZXJ3cml0ZSkKQEAgLTE1NCw2ICsxNDksNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHEsICZ0aXFfbGlzdCwgZW50cnkpCiAJCS8qIG9ubHkgcHJvY2VzcyBxdWV1ZXMgZnJvbSBjaGFuZ2VkIHNldHMgKi8KIAkJaWYgKCpxLT5pcnFfcHRyLT5kc2NpKSB7CisJCQlxcGVyZl9pbmMocSwgYWRhcHRlcl9pbnQpOwogCiAJCQkvKiBvbmx5IGNsZWFyIGl0IGlmIHRoZSBpbmRpY2F0b3IgaXMgbm9uLXNoYXJlZCAqLwogCQkJaWYgKCFzaGFyZWRfaW5kKHEtPmlycV9wdHIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCAzYzc3YmZlLi4xNDdiYjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtMzM5OCw3ICszMzk4LDcgQEAKIAkJZ290byBvdXRfZXJyOwogCX0KIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9tb2QiKTsKLQljbGF3X3Jvb3RfZGV2ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoInFldGgiKTsKKwljbGF3X3Jvb3RfZGV2ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoImNsYXciKTsKIAlyZXQgPSBJU19FUlIoY2xhd19yb290X2RldikgPyBQVFJfRVJSKGNsYXdfcm9vdF9kZXYpIDogMDsKIAlpZiAocmV0KQogCQlnb3RvIHJlZ2lzdGVyX2VycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19lbnZjdHJsLmMgYi9kcml2ZXJzL3NidXMvY2hhci9iYmNfZW52Y3RybC5jCmluZGV4IDdjODE1ZDMuLjI4ZDg2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19lbnZjdHJsLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2VudmN0cmwuYwpAQCAtNTIyLDYgKzUyMiw0MCBAQAogCXNldF9mYW5fc3BlZWRzKGZwKTsKIH0KIAorc3RhdGljIHZvaWQgZGVzdHJveV9vbmVfdGVtcChzdHJ1Y3QgYmJjX2NwdV90ZW1wZXJhdHVyZSAqdHApCit7CisJYmJjX2kyY19kZXRhY2godHAtPmNsaWVudCk7CisJa2ZyZWUodHApOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FsbF90ZW1wcyhzdHJ1Y3QgYmJjX2kyY19idXMgKmJwKQoreworCXN0cnVjdCBiYmNfY3B1X3RlbXBlcmF0dXJlICp0cCwgKnRwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHAsIHRwb3MsICZicC0+dGVtcHMsIGJwX2xpc3QpIHsKKwkJbGlzdF9kZWwoJnRwLT5icF9saXN0KTsKKwkJbGlzdF9kZWwoJnRwLT5nbG9iX2xpc3QpOworCQlkZXN0cm95X29uZV90ZW1wKHRwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfb25lX2ZhbihzdHJ1Y3QgYmJjX2Zhbl9jb250cm9sICpmcCkKK3sKKwliYmNfaTJjX2RldGFjaChmcC0+Y2xpZW50KTsKKwlrZnJlZShmcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX2ZhbnMoc3RydWN0IGJiY19pMmNfYnVzICpicCkKK3sKKwlzdHJ1Y3QgYmJjX2Zhbl9jb250cm9sICpmcCwgKmZwb3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnAsIGZwb3MsICZicC0+ZmFucywgYnBfbGlzdCkgeworCQlsaXN0X2RlbCgmZnAtPmJwX2xpc3QpOworCQlsaXN0X2RlbCgmZnAtPmdsb2JfbGlzdCk7CisJCWRlc3Ryb3lfb25lX2ZhbihmcCk7CisJfQorfQorCiBpbnQgYmJjX2VudmN0cmxfaW5pdChzdHJ1Y3QgYmJjX2kyY19idXMgKmJwKQogewogCXN0cnVjdCBvZl9kZXZpY2UgKm9wOwpAQCAtNTQxLDYgKzU3NSw4IEBACiAJCQlpbnQgZXJyID0gUFRSX0VSUihrZW52Y3RybGRfdGFzayk7CiAKIAkJCWtlbnZjdHJsZF90YXNrID0gTlVMTDsKKwkJCWRlc3Ryb3lfYWxsX3RlbXBzKGJwKTsKKwkJCWRlc3Ryb3lfYWxsX2ZhbnMoYnApOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KQEAgLTU0OCwzNSArNTg0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRlc3Ryb3lfb25lX3RlbXAoc3RydWN0IGJiY19jcHVfdGVtcGVyYXR1cmUgKnRwKQotewotCWJiY19pMmNfZGV0YWNoKHRwLT5jbGllbnQpOwotCWtmcmVlKHRwKTsKLX0KLQotc3RhdGljIHZvaWQgZGVzdHJveV9vbmVfZmFuKHN0cnVjdCBiYmNfZmFuX2NvbnRyb2wgKmZwKQotewotCWJiY19pMmNfZGV0YWNoKGZwLT5jbGllbnQpOwotCWtmcmVlKGZwKTsKLX0KLQogdm9pZCBiYmNfZW52Y3RybF9jbGVhbnVwKHN0cnVjdCBiYmNfaTJjX2J1cyAqYnApCiB7Ci0Jc3RydWN0IGJiY19jcHVfdGVtcGVyYXR1cmUgKnRwLCAqdHBvczsKLQlzdHJ1Y3QgYmJjX2Zhbl9jb250cm9sICpmcCwgKmZwb3M7Ci0KIAlpZiAoa2VudmN0cmxkX3Rhc2spCiAJCWt0aHJlYWRfc3RvcChrZW52Y3RybGRfdGFzayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHAsIHRwb3MsICZicC0+dGVtcHMsIGJwX2xpc3QpIHsKLQkJbGlzdF9kZWwoJnRwLT5icF9saXN0KTsKLQkJbGlzdF9kZWwoJnRwLT5nbG9iX2xpc3QpOwotCQlkZXN0cm95X29uZV90ZW1wKHRwKTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnAsIGZwb3MsICZicC0+ZmFucywgYnBfbGlzdCkgewotCQlsaXN0X2RlbCgmZnAtPmJwX2xpc3QpOwotCQlsaXN0X2RlbCgmZnAtPmdsb2JfbGlzdCk7Ci0JCWRlc3Ryb3lfb25lX2ZhbihmcCk7Ci0JfQorCWRlc3Ryb3lfYWxsX3RlbXBzKGJwKTsKKwlkZXN0cm95X2FsbF9mYW5zKGJwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IDNiZjc1OTIuLjg0ZDNiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICBGaXggYnVnIGluIHR3YV9nZXRfcGFyYW0oKSBvbiA0R0IrLgogICAgICAgICAgICAgICAgICBVc2UgcGNpX3Jlc291cmNlX2xlbigpIGZvciBpb3JlbWFwKCkuCiAgICAyLjI2LjAyLjAxMiAtIEFkZCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQuCisgICAyLjI2LjAyLjAxMyAtIEZpeCBidWcgaW4gdHdhX2xvYWRfc2dsKCkuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMDAsNyArMTAxLDcgQEAKICNpbmNsdWRlICIzdy05eHh4LmgiCiAKIC8qIEdsb2JhbHMgKi8KLSNkZWZpbmUgVFdfRFJJVkVSX1ZFUlNJT04gIjIuMjYuMDIuMDEyIgorI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMTMiCiBzdGF0aWMgVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdhX2RldmljZV9leHRlbnNpb25fbGlzdFtUV19NQVhfU0xPVF07CiBzdGF0aWMgdW5zaWduZWQgaW50IHR3YV9kZXZpY2VfZXh0ZW5zaW9uX2NvdW50Owogc3RhdGljIGludCB0d2FfbWFqb3IgPSAtMTsKQEAgLTEzODIsMTAgKzEzODMsMTIgQEAKIAkJbmV3Y29tbWFuZCA9ICZmdWxsX2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm5ld2NvbW1hbmQ7CiAJCW5ld2NvbW1hbmQtPnJlcXVlc3RfaWRfX2x1bmwgPQogCQkJY3B1X3RvX2xlMTYoVFdfUkVRX0xVTl9JTihUV19MVU5fT1VUKG5ld2NvbW1hbmQtPnJlcXVlc3RfaWRfX2x1bmwpLCByZXF1ZXN0X2lkKSk7Ci0JCW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woZG1hX2hhbmRsZSArIHNpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDEpOwotCQluZXdjb21tYW5kLT5zZ19saXN0WzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCk7CisJCWlmIChsZW5ndGgpIHsKKwkJCW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woZG1hX2hhbmRsZSArIHNpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDEpOworCQkJbmV3Y29tbWFuZC0+c2dfbGlzdFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCQl9CiAJCW5ld2NvbW1hbmQtPnNnbF9lbnRyaWVzX19sdW5oID0KLQkJCWNwdV90b19sZTE2KFRXX1JFUV9MVU5fSU4oVFdfTFVOX09VVChuZXdjb21tYW5kLT5zZ2xfZW50cmllc19fbHVuaCksIDEpKTsKKwkJCWNwdV90b19sZTE2KFRXX1JFUV9MVU5fSU4oVFdfTFVOX09VVChuZXdjb21tYW5kLT5zZ2xfZW50cmllc19fbHVuaCksIGxlbmd0aCA/IDEgOiAwKSk7CiAJfSBlbHNlIHsKIAkJb2xkY29tbWFuZCA9ICZmdWxsX2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm9sZGNvbW1hbmQ7CiAJCW9sZGNvbW1hbmQtPnJlcXVlc3RfaWQgPSByZXF1ZXN0X2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCAzNjkwMGM3Li45MTkxZDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMzg4LDYgKzM4OCwxNiBAQAogCSAgUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YKIAkgIDxmaWxlOmRyaXZlcnMvc2NzaS8zdy14eHh4LmM+LgogCitjb25maWcgU0NTSV9IUFNBCisJdHJpc3RhdGUgIkhQIFNtYXJ0IEFycmF5IFNDU0kgZHJpdmVyIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBIUCBTbWFydCBBcnJheSBDb250cm9sbGVycyAoY2lyY2EgMjAwOSkuCisJICBJdCBpcyBhIFNDU0kgYWx0ZXJuYXRpdmUgdG8gdGhlIGNjaXNzIGRyaXZlciwgd2hpY2ggaXMgYSBibG9jaworCSAgZHJpdmVyLiAgQW55b25lIHdpc2hpbmcgdG8gdXNlIEhQIFNtYXJ0IEFycmF5IGNvbnRyb2xsZXJzIHdobworCSAgd291bGQgcHJlZmVyIHRoZSBkZXZpY2VzIGJlIHByZXNlbnRlZCB0byBsaW51eCBhcyBTQ1NJIGRldmljZXMsCisJICByYXRoZXIgdGhhbiBhcyBnZW5lcmljIGJsb2NrIGRldmljZXMgc2hvdWxkIHNheSBZIGhlcmUuCisKIGNvbmZpZyBTQ1NJXzNXXzlYWFgKIAl0cmlzdGF0ZSAiM3dhcmUgOXh4eCBTQVRBLVJBSUQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggMjgwZDNjNi4uOTJhOGM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtOTEsNiArOTEsNyBAQAogb2JqLSQoQ09ORklHX1NDU0lfUEFTMTYpCSs9IHBhczE2Lm8KIG9iai0kKENPTkZJR19TQ1NJX1QxMjgpCQkrPSB0MTI4Lm8KIG9iai0kKENPTkZJR19TQ1NJX0RNWDMxOTFEKQkrPSBkbXgzMTkxZC5vCitvYmotJChDT05GSUdfU0NTSV9IUFNBKQkJKz0gaHBzYS5vCiBvYmotJChDT05GSUdfU0NTSV9EVEMzMjgwKQkrPSBkdGMubwogb2JqLSQoQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIpCSs9IHN5bTUzYzh4eF8yLwogb2JqLSQoQ09ORklHX1NDU0lfWkFMT04pCSs9IHphbG9uN3h4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCmluZGV4IDY5OGE1MjcuLmYwMDg3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwpAQCAtMTM1LDExICsxMzUsMTUgQEAKIAl3aGlsZSAoKGNvbXBsID0gYmVfbWNjX2NvbXBsX2dldChwaGJhKSkpIHsKIAkJaWYgKGNvbXBsLT5mbGFncyAmIENRRV9GTEFHU19BU1lOQ19NQVNLKSB7CiAJCQkvKiBJbnRlcnByZXQgZmxhZ3MgYXMgYW4gYXN5bmMgdHJhaWxlciAqLwotCQkJQlVHX09OKCFpc19saW5rX3N0YXRlX2V2dChjb21wbC0+ZmxhZ3MpKTsKKwkJCWlmIChpc19saW5rX3N0YXRlX2V2dChjb21wbC0+ZmxhZ3MpKQorCQkJCS8qIEludGVycHJldCBjb21wbCBhcyBhIGFzeW5jIGxpbmsgZXZ0ICovCisJCQkJYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3MocGhiYSwKKwkJCQkgICAoc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKikgY29tcGwpOworCQkJZWxzZQorCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCQkJICIgVW5zdXBwb3J0ZWQgQXN5bmMgRXZlbnQsIGZsYWdzIgorCQkJCQkgIiA9IDB4JTA4eCBcbiIsIGNvbXBsLT5mbGFncyk7CiAKLQkJCS8qIEludGVycHJldCBjb21wbCBhcyBhIGFzeW5jIGxpbmsgZXZ0ICovCi0JCQliZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhwaGJhLAotCQkJCShzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqKSBjb21wbCk7CiAJCX0gZWxzZSBpZiAoY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0NPTVBMRVRFRF9NQVNLKSB7CiAJCQkJc3RhdHVzID0gYmVfbWNjX2NvbXBsX3Byb2Nlc3MoY3RybCwgY29tcGwpOwogCQkJCWF0b21pY19kZWMoJnBoYmEtPmN0cmwubWNjX29iai5xLnVzZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmggYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAppbmRleCAyYjk3M2YzLi42Y2Y5ZGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaAorKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaApAQCAtNjg0LDYgKzY4NCw3IEBACiBleHRlcm4gdTY0IGlzY3NpX2Vycm9yX21hc2s7CiBleHRlcm4gdW5zaWduZWQgaW50IGVuX3RjcF9kYWNrOwogZXh0ZXJuIHVuc2lnbmVkIGludCBldmVudF9jb2FsX2RpdjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZXZlbnRfY29hbF9taW47CiAKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKmJueDJpX3Njc2lfeHBvcnRfdGVtcGxhdGU7CiBleHRlcm4gc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBibngyaV9pc2NzaV90cmFuc3BvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKaW5kZXggNWM4ZDc2My4uMWFmNTc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwpAQCAtMTMzLDIwICsxMzMsMzggQEAKIHsKIAlzdHJ1Y3QgYm54MmlfNTc3MXhfY3FfZGIgKmNxX2RiOwogCXUxNiBjcV9pbmRleDsKKwl1MTYgbmV4dF9pbmRleDsKKwl1MzIgbnVtX2FjdGl2ZV9jbWRzOwogCisKKwkvKiBDb2FsZXNjZSBDUSBlbnRyaWVzIG9ubHkgb24gMTBHIGRldmljZXMgKi8KIAlpZiAoIXRlc3RfYml0KEJOWDJJX05YMl9ERVZfNTc3MTAsICZlcC0+aGJhLT5jbmljX2Rldl90eXBlKSkKIAkJcmV0dXJuOwogCisJLyogRG8gbm90IHVwZGF0ZSBDUSBEQiBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgZmlybXdhcmUgd3JpdGVzCisJICogJzB4RkZGRicgdG8gQ1FEQi0+U1FOIGZpZWxkLiBEZXZpYXRpb24gbWF5IGNhdXNlIHNwdXJpb3VzCisJICogaW50ZXJydXB0cyBhbmQgb3RoZXIgdW53YW50ZWQgcmVzdWx0cworCSAqLworCWNxX2RiID0gKHN0cnVjdCBibngyaV81NzcxeF9jcV9kYiAqKSBlcC0+cXAuY3FfcGd0YmxfdmlydDsKKwlpZiAoY3FfZGItPnNxblswXSAmJiBjcV9kYi0+c3FuWzBdICE9IDB4RkZGRikKKwkJcmV0dXJuOworCiAJaWYgKGFjdGlvbiA9PSBDTklDX0FSTV9DUUUpIHsKLQkJY3FfaW5kZXggPSBlcC0+cXAuY3FlX2V4cF9zZXFfc24gKwotCQkJICAgZXAtPm51bV9hY3RpdmVfY21kcyAvIGV2ZW50X2NvYWxfZGl2OwotCQljcV9pbmRleCAlPSAoZXAtPnFwLmNxZV9zaXplICogMiArIDEpOwotCQlpZiAoIWNxX2luZGV4KSB7CisJCW51bV9hY3RpdmVfY21kcyA9IGVwLT5udW1fYWN0aXZlX2NtZHM7CisJCWlmIChudW1fYWN0aXZlX2NtZHMgPD0gZXZlbnRfY29hbF9taW4pCisJCQluZXh0X2luZGV4ID0gMTsKKwkJZWxzZQorCQkJbmV4dF9pbmRleCA9IGV2ZW50X2NvYWxfbWluICsKKwkJCQkobnVtX2FjdGl2ZV9jbWRzIC0gZXZlbnRfY29hbF9taW4pIC8gZXZlbnRfY29hbF9kaXY7CisJCWlmICghbmV4dF9pbmRleCkKKwkJCW5leHRfaW5kZXggPSAxOworCQljcV9pbmRleCA9IGVwLT5xcC5jcWVfZXhwX3NlcV9zbiArIG5leHRfaW5kZXggLSAxOworCQlpZiAoY3FfaW5kZXggPiBlcC0+cXAuY3FlX3NpemUgKiAyKQorCQkJY3FfaW5kZXggLT0gZXAtPnFwLmNxZV9zaXplICogMjsKKwkJaWYgKCFjcV9pbmRleCkKIAkJCWNxX2luZGV4ID0gMTsKLQkJCWNxX2RiID0gKHN0cnVjdCBibngyaV81NzcxeF9jcV9kYiAqKQotCQkJCQllcC0+cXAuY3FfcGd0YmxfdmlydDsKLQkJCWNxX2RiLT5zcW5bMF0gPSBjcV9pbmRleDsKLQkJfQorCisJCWNxX2RiLT5zcW5bMF0gPSBjcV9pbmRleDsKIAl9CiB9CiAKQEAgLTM2Niw2ICszODQsNyBAQAogCXN0cnVjdCBibngyaV9jbWQgKmJueDJpX2NtZDsKIAlzdHJ1Y3QgYm54MmlfdG1mX3JlcXVlc3QgKnRtZmFib3J0X3dxZTsKIAl1MzIgZHdvcmQ7CisJdTMyIHNjc2lfbHVuWzJdOwogCiAJYm54MmlfY21kID0gKHN0cnVjdCBibngyaV9jbWQgKiltdGFzay0+ZGRfZGF0YTsKIAl0bWZhYm9ydF9oZHIgPSAoc3RydWN0IGlzY3NpX3RtICopbXRhc2stPmhkcjsKQEAgLTM3NiwyNyArMzk1LDM1IEBACiAJdG1mYWJvcnRfd3FlLT5vcF9hdHRyID0gMDsKIAl0bWZhYm9ydF93cWUtPm9wX2F0dHIgPQogCQlJU0NTSV9UTUZfUkVRVUVTVF9BTFdBWVNfT05FIHwgSVNDU0lfVE1fRlVOQ19BQk9SVF9UQVNLOwotCXRtZmFib3J0X3dxZS0+bHVuWzBdID0gYmUzMl90b19jcHUodG1mYWJvcnRfaGRyLT5sdW5bMF0pOwotCXRtZmFib3J0X3dxZS0+bHVuWzFdID0gYmUzMl90b19jcHUodG1mYWJvcnRfaGRyLT5sdW5bMV0pOwogCiAJdG1mYWJvcnRfd3FlLT5pdHQgPSAobXRhc2stPml0dCB8IChJU0NTSV9UQVNLX1RZUEVfTVBBVEggPDwgMTQpKTsKIAl0bWZhYm9ydF93cWUtPnJlc2VydmVkMiA9IDA7CiAJdG1mYWJvcnRfd3FlLT5jbWRfc24gPSBiZTMyX3RvX2NwdSh0bWZhYm9ydF9oZHItPmNtZHNuKTsKIAogCWN0YXNrID0gaXNjc2lfaXR0X3RvX3Rhc2soY29ubiwgdG1mYWJvcnRfaGRyLT5ydHQpOwotCWlmICghY3Rhc2sgfHwgY3Rhc2stPnNjKQorCWlmICghY3Rhc2sgfHwgIWN0YXNrLT5zYykKIAkJLyoKIAkJICogdGhlIGlzY3NpIGxheWVyIG11c3QgaGF2ZSBjb21wbGV0ZWQgdGhlIGNtZCB3aGlsZSB0aGlzCiAJCSAqIHdhcyBzdGFydGluZyB1cC4KKwkJICoKKwkJICogTm90ZTogSW4gdGhlIGNhc2Ugb2YgYSBTQ1NJIGNtZCB0aW1lb3V0LCB0aGUgdGFzaydzIHNjCisJCSAqICAgICAgIGlzIHN0aWxsIGFjdGl2ZTsgaGVuY2UgY3Rhc2stPnNjICE9IDAKKwkJICogICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgdGFzayBtdXN0IGJlIGFib3J0ZWQKIAkJICovCiAJCXJldHVybiAwOworCiAJcmVmX3NjID0gY3Rhc2stPnNjOwogCisJLyogUmV0cmlldmUgTFVOIGRpcmVjdGx5IGZyb20gdGhlIHJlZl9zYyAqLworCWludF90b19zY3NpbHVuKHJlZl9zYy0+ZGV2aWNlLT5sdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKikgc2NzaV9sdW4pOworCXRtZmFib3J0X3dxZS0+bHVuWzBdID0gYmUzMl90b19jcHUoc2NzaV9sdW5bMF0pOworCXRtZmFib3J0X3dxZS0+bHVuWzFdID0gYmUzMl90b19jcHUoc2NzaV9sdW5bMV0pOworCiAJaWYgKHJlZl9zYy0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKIAkJZHdvcmQgPSAoSVNDU0lfVEFTS19UWVBFX1dSSVRFIDw8IElTQ1NJX0NNRF9SRVFVRVNUX1RZUEVfU0hJRlQpOwogCWVsc2UKIAkJZHdvcmQgPSAoSVNDU0lfVEFTS19UWVBFX1JFQUQgPDwgSVNDU0lfQ01EX1JFUVVFU1RfVFlQRV9TSElGVCk7Ci0JdG1mYWJvcnRfd3FlLT5yZWZfaXR0ID0gKGR3b3JkIHwgdG1mYWJvcnRfaGRyLT5ydHQpOworCXRtZmFib3J0X3dxZS0+cmVmX2l0dCA9IChkd29yZCB8ICh0bWZhYm9ydF9oZHItPnJ0dCAmIElTQ1NJX0lUVF9NQVNLKSk7CiAJdG1mYWJvcnRfd3FlLT5yZWZfY21kX3NuID0gYmUzMl90b19jcHUodG1mYWJvcnRfaGRyLT5yZWZjbWRzbik7CiAKIAl0bWZhYm9ydF93cWUtPmJkX2xpc3RfYWRkcl9sbyA9ICh1MzIpIGJueDJpX2Nvbm4tPmhiYS0+bXBfYmRfZG1hOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMKaW5kZXggMGM0MjEwZC4uNmQ4MTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCkBAIC0xNyw4ICsxNyw4IEBACiBzdGF0aWMgdTMyIGFkYXB0ZXJfY291bnQ7CiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MmkiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjFlIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bmUgMjIsIDIwMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4xLjAiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRGVjIDA2LCAyMDA5IgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJCSJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgaVNDU0kgRHJpdmVyICIgRFJWX01PRFVMRV9OQU1FIFwKQEAgLTMyLDYgKzMyLDEwIEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYm54MmlfZGV2X2xvY2spOwogCit1bnNpZ25lZCBpbnQgZXZlbnRfY29hbF9taW4gPSAyNDsKK21vZHVsZV9wYXJhbShldmVudF9jb2FsX21pbiwgaW50LCAwNjY0KTsKK01PRFVMRV9QQVJNX0RFU0MoZXZlbnRfY29hbF9taW4sICJFdmVudCBDb2FsZXNjaW5nIE1pbmltdW0gQ29tbWFuZHMiKTsKKwogdW5zaWduZWQgaW50IGV2ZW50X2NvYWxfZGl2ID0gMTsKIG1vZHVsZV9wYXJhbShldmVudF9jb2FsX2RpdiwgaW50LCAwNjY0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZXZlbnRfY29hbF9kaXYsICJFdmVudCBDb2FsZXNjaW5nIERpdmlkZSBGYWN0b3IiKTsKQEAgLTgzLDggKzg3LDEyIEBACiAJCXNldF9iaXQoQk5YMklfTlgyX0RFVl81NzA5LCAmaGJhLT5jbmljX2Rldl90eXBlKTsKIAkJaGJhLT5tYWlsX3F1ZXVlX2FjY2VzcyA9IEJOWDJJX01RX0JJTl9NT0RFOwogCX0gZWxzZSBpZiAoaGJhLT5wY2lfZGlkID09IFBDSV9ERVZJQ0VfSURfTlgyXzU3NzEwIHx8Ci0JCSAgIGhiYS0+cGNpX2RpZCA9PSBQQ0lfREVWSUNFX0lEX05YMl81NzcxMSkKKwkJICAgaGJhLT5wY2lfZGlkID09IFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExIHx8CisJCSAgIGhiYS0+cGNpX2RpZCA9PSBQQ0lfREVWSUNFX0lEX05YMl81NzcxMUUpCiAJCXNldF9iaXQoQk5YMklfTlgyX0RFVl81NzcxMCwgJmhiYS0+Y25pY19kZXZfdHlwZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9BTEVSVCAiYm54Mmk6IHVua25vd24gZGV2aWNlLCAweCV4XG4iLAorCQkJCSAgaGJhLT5wY2lfZGlkKTsKIH0KIAogCkBAIC0zNjMsNyArMzcxLDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CiAKLQlpZiAoIWlzX3Bvd2VyX29mXzIoc3Ffc2l6ZSkpCisJaWYgKHNxX3NpemUgJiYgIWlzX3Bvd2VyX29mXzIoc3Ffc2l6ZSkpCiAJCXNxX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oc3Ffc2l6ZSk7CiAKIAltdXRleF9pbml0KCZibngyaV9kZXZfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IDEzMjg5OGMuLjMzYjIyOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC00ODUsNyArNDg1LDYgQEAKIAkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBzZXNzaW9uLT5jbWRzW2ldOwogCQlzdHJ1Y3QgYm54MmlfY21kICpjbWQgPSB0YXNrLT5kZF9kYXRhOwogCi0JCS8qIEFuaWwgKi8KIAkJdGFzay0+aGRyID0gJmNtZC0+aGRyOwogCQl0YXNrLT5oZHJfbWF4ID0gc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpOwogCkBAIC03NjUsNyArNzY0LDYgQEAKIAloYmEtPnBjaV9zdmlkID0gaGJhLT5wY2lkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CiAJaGJhLT5wY2lfZnVuYyA9IFBDSV9GVU5DKGhiYS0+cGNpZGV2LT5kZXZmbik7CiAJaGJhLT5wY2lfZGV2bm8gPSBQQ0lfU0xPVChoYmEtPnBjaWRldi0+ZGV2Zm4pOwotCWJueDJpX2lkZW50aWZ5X2RldmljZShoYmEpOwogCiAJYm54MmlfaWRlbnRpZnlfZGV2aWNlKGhiYSk7CiAJYm54Mmlfc2V0dXBfaG9zdF9xdWV1ZV9zaXplKGhiYSwgc2hvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCmluZGV4IGMxZDViZTQuLjE1YTAwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKQEAgLTI5MSw3ICsyOTEsNyBAQAogCWMzY25faG9sZChjM2NuKTsKIAlzcGluX2xvY2tfYmgoJmMzY24tPmxvY2spOwogCWlmIChjM2NuLT5zdGF0ZSA9PSBDM0NOX1NUQVRFX0NPTk5FQ1RJTkcpCi0JCWZhaWxfYWN0X29wZW4oYzNjbiwgRUhPU1RVTlJFQUNIKTsKKwkJZmFpbF9hY3Rfb3BlbihjM2NuLCAtRUhPU1RVTlJFQUNIKTsKIAlzcGluX3VubG9ja19iaCgmYzNjbi0+bG9jayk7CiAJYzNjbl9wdXQoYzNjbik7CiAJX19rZnJlZV9za2Ioc2tiKTsKQEAgLTc5MiwxOCArNzkyLDE4IEBACiB7CiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIENQTF9FUlJfQ09OTl9SRVNFVDoKLQkJcmV0dXJuIEVDT05OUkVGVVNFRDsKKwkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CiAJY2FzZSBDUExfRVJSX0FSUF9NSVNTOgotCQlyZXR1cm4gRUhPU1RVTlJFQUNIOworCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKIAljYXNlIENQTF9FUlJfQ09OTl9USU1FRE9VVDoKLQkJcmV0dXJuIEVUSU1FRE9VVDsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAJY2FzZSBDUExfRVJSX1RDQU1fRlVMTDoKLQkJcmV0dXJuIEVOT01FTTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJY2FzZSBDUExfRVJSX0NPTk5fRVhJU1Q6CiAJCWN4Z2IzaV9sb2dfZXJyb3IoIkFDVElWRV9PUEVOX1JQTDogNC10dXBsZSBpbiB1c2VcbiIpOwotCQlyZXR1cm4gRUFERFJJTlVTRTsKKwkJcmV0dXJuIC1FQUREUklOVVNFOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBFSU87CisJCXJldHVybiAtRUlPOwogCX0KIH0KIApAQCAtODE3LDcgKzgxNyw3IEBACiAJc3Bpbl9sb2NrX2JoKCZjM2NuLT5sb2NrKTsKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBjcGxfYWN0X29wZW5fcmVxKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCi0JCWZhaWxfYWN0X29wZW4oYzNjbiwgRU5PTUVNKTsKKwkJZmFpbF9hY3Rfb3BlbihjM2NuLCAtRU5PTUVNKTsKIAllbHNlIHsKIAkJc2tiLT5zayA9IChzdHJ1Y3Qgc29jayAqKWMzY247CiAJCXNldF9hcnBfZmFpbHVyZV9oYW5kbGVyKHNrYiwgYWN0X29wZW5fcmVxX2FycF9mYWlsdXJlKTsKQEAgLTk2NiwxNCArOTY2LDE0IEBACiAJY2FzZSBDUExfRVJSX0JBRF9TWU46IC8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ1BMX0VSUl9DT05OX1JFU0VUOgogCQlyZXR1cm4gYzNjbi0+c3RhdGUgPiBDM0NOX1NUQVRFX0VTVEFCTElTSEVEID8KLQkJCUVQSVBFIDogRUNPTk5SRVNFVDsKKwkJCS1FUElQRSA6IC1FQ09OTlJFU0VUOwogCWNhc2UgQ1BMX0VSUl9YTUlUX1RJTUVET1VUOgogCWNhc2UgQ1BMX0VSUl9QRVJTSVNUX1RJTUVET1VUOgogCWNhc2UgQ1BMX0VSUl9GSU5XQUlUMl9USU1FRE9VVDoKIAljYXNlIENQTF9FUlJfS0VFUEFMSVZFX1RJTUVET1VUOgotCQlyZXR1cm4gRVRJTUVET1VUOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAlkZWZhdWx0OgotCQlyZXR1cm4gRUlPOworCQlyZXR1cm4gLUVJTzsKIAl9CiB9CiAKQEAgLTE0NDAsNiArMTQ0MCwxMCBAQAogc3RhdGljIGludCBpc19jeGdiM19kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY3hnYjNpX3NkZXZfZGF0YSAqY2RhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXY7CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQorCQluZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKIAogCXdyaXRlX2xvY2soJmNkYXRhX3J3bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGF0YSwgJmNkYXRhX2xpc3QsIGxpc3QpIHsKQEAgLTE0NDcsNyArMTQ1MSw3IEBACiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBwb3J0cy0+bnBvcnRzOyBpKyspCi0JCQlpZiAoZGV2ID09IHBvcnRzLT5sbGRldnNbaV0pIHsKKwkJCWlmIChuZGV2ID09IHBvcnRzLT5sbGRldnNbaV0pIHsKIAkJCQl3cml0ZV91bmxvY2soJmNkYXRhX3J3bG9jayk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CkBAIC0xNTYzLDkgKzE1NjcsMjkgQEAKIAlzM19mcmVlX2F0aWQoY2RldiwgYzNjbi0+dGlkKTsKIAljM2NuLT50aWQgPSAwOwogb3V0X2VycjoKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKy8qKgorICogY3hnYjNpX2ZpbmRfZGV2IC0gZmluZCB0aGUgaW50ZXJmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcworICogQGlwYWRkcjogaXAgYWRkcmVzcworICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKgorY3hnYjNpX2ZpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IGZsb3dpIGZsOworCWludCBlcnI7CisJc3RydWN0IHJ0YWJsZSAqcnQ7CisKKwltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKwlmbC5ubF91LmlwNF91LmRhZGRyID0gaXBhZGRyOworCisJZXJyID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXYgPyBkZXZfbmV0KGRldikgOiAmaW5pdF9uZXQsICZydCwgJmZsKTsKKwlpZiAoIWVycikKKwkJcmV0dXJuICgmcnQtPnUuZHN0KS0+ZGV2OworCisJcmV0dXJuIE5VTEw7Cit9CiAKIC8qKgogICogY3hnYjNpX2MzY25fY29ubmVjdCAtIGluaXRpYXRlcyBhbiBpc2NzaSB0Y3AgY29ubmVjdGlvbiB0byBhIGdpdmVuIGFkZHJlc3MKQEAgLTE1ODEsNiArMTYwNSw3IEBACiAJc3RydWN0IGN4Z2IzaV9zZGV2X2RhdGEgKmNkYXRhOwogCXN0cnVjdCB0M2NkZXYgKmNkZXY7CiAJX19iZTMyIHNpcHY0OworCXN0cnVjdCBuZXRfZGV2aWNlICpkc3RkZXY7CiAJaW50IGVycjsKIAogCWMzY25fY29ubl9kZWJ1ZygiYzNjbiAweCVwLCBkZXYgMHglcC5cbiIsIGMzY24sIGRldik7CkBAIC0xNTkxLDYgKzE2MTYsMTMgQEAKIAljM2NuLT5kYWRkci5zaW5fcG9ydCA9IHVzaW4tPnNpbl9wb3J0OwogCWMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHVzaW4tPnNpbl9hZGRyLnNfYWRkcjsKIAorCWRzdGRldiA9IGN4Z2IzaV9maW5kX2RldihkZXYsIHVzaW4tPnNpbl9hZGRyLnNfYWRkcik7CisJaWYgKCFkc3RkZXYgfHwgIWlzX2N4Z2IzX2Rldihkc3RkZXYpKQorCQlyZXR1cm4gLUVORVRVTlJFQUNIOworCisJaWYgKGRzdGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKKwkJZGV2ID0gZHN0ZGV2OworCiAJcnQgPSBmaW5kX3JvdXRlKGRldiwgYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyLAogCQkJYzNjbi0+ZGFkZHIuc2luX2FkZHIuc19hZGRyLAogCQkJYzNjbi0+c2FkZHIuc2luX3BvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCmluZGV4IDcwOTEwNTAuLjFmZTNiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jCkBAIC0zODgsOCArMzg4LDggQEAKIAlpZiAoZXJyID4gMCkgewogCQlpbnQgcGR1bGVuID0gZXJyOwogCi0JY3hnYjNpX3R4X2RlYnVnKCJ0YXNrIDB4JXAsIHNrYiAweCVwLCBsZW4gJXUvJXUsIHJ2ICVkLlxuIiwKLQkJCXRhc2ssIHNrYiwgc2tiLT5sZW4sIHNrYi0+ZGF0YV9sZW4sIGVycik7CisJCWN4Z2IzaV90eF9kZWJ1ZygidGFzayAweCVwLCBza2IgMHglcCwgbGVuICV1LyV1LCBydiAlZC5cbiIsCisJCQkJdGFzaywgc2tiLCBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwgZXJyKTsKIAogCQlpZiAodGFzay0+Y29ubi0+aGRyZGdzdF9lbikKIAkJCXBkdWxlbiArPSBJU0NTSV9ESUdFU1RfU0laRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwppbmRleCA0N2NmZTFjLi4xYTY2MDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCkBAIC03NDgsNiArNzQ4LDggQEAKIAl7IklCTSIsICIxNzI0In0sCiAJeyJJQk0iLCAiMTcyNiJ9LAogCXsiSUJNIiwgIjE3NDIifSwKKwl7IklCTSIsICIxNzQ1In0sCisJeyJJQk0iLCAiMTc0NiJ9LAogCXsiSUJNIiwgIjE4MTQifSwKIAl7IklCTSIsICIxODE1In0sCiAJeyJJQk0iLCAiMTgxOCJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCmluZGV4IGEzMGZmYWEuLjEwYmU5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKQEAgLTEwMSw2ICsxMDEsOCBAQAogCiBzdGF0aWMgaW50IGZjb2VfY3JlYXRlKGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTsKIHN0YXRpYyBpbnQgZmNvZV9kZXN0cm95KGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqKTsKK3N0YXRpYyBpbnQgZmNvZV9lbmFibGUoY29uc3QgY2hhciAqLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopOworc3RhdGljIGludCBmY29lX2Rpc2FibGUoY29uc3QgY2hhciAqLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICopOwogCiBzdGF0aWMgc3RydWN0IGZjX3NlcSAqZmNvZV9lbHNjdF9zZW5kKHN0cnVjdCBmY19scG9ydCAqLAogCQkJCSAgICAgIHUzMiBkaWQsIHN0cnVjdCBmY19mcmFtZSAqLApAQCAtMTE1LDEwICsxMTcsMTYgQEAKIAogbW9kdWxlX3BhcmFtX2NhbGwoY3JlYXRlLCBmY29lX2NyZWF0ZSwgTlVMTCwgTlVMTCwgU19JV1VTUik7CiBfX01PRFVMRV9QQVJNX1RZUEUoY3JlYXRlLCAic3RyaW5nIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGNyZWF0ZSwgIkNyZWF0ZSBmY29lIGZjb2UgdXNpbmcgbmV0IGRldmljZSBwYXNzZWQgaW4uIik7CitNT0RVTEVfUEFSTV9ERVNDKGNyZWF0ZSwgIiBDcmVhdGVzIGZjb2UgaW5zdGFuY2Ugb24gYSBldGhlcm5ldCBpbnRlcmZhY2UiKTsKIG1vZHVsZV9wYXJhbV9jYWxsKGRlc3Ryb3ksIGZjb2VfZGVzdHJveSwgTlVMTCwgTlVMTCwgU19JV1VTUik7CiBfX01PRFVMRV9QQVJNX1RZUEUoZGVzdHJveSwgInN0cmluZyIpOwotTU9EVUxFX1BBUk1fREVTQyhkZXN0cm95LCAiRGVzdHJveSBmY29lIGZjb2UiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVzdHJveSwgIiBEZXN0cm95cyBmY29lIGluc3RhbmNlIG9uIGEgZXRoZXJuZXQgaW50ZXJmYWNlIik7Cittb2R1bGVfcGFyYW1fY2FsbChlbmFibGUsIGZjb2VfZW5hYmxlLCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKK19fTU9EVUxFX1BBUk1fVFlQRShlbmFibGUsICJzdHJpbmciKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiIEVuYWJsZXMgZmNvZSBvbiBhIGV0aGVybmV0IGludGVyZmFjZS4iKTsKK21vZHVsZV9wYXJhbV9jYWxsKGRpc2FibGUsIGZjb2VfZGlzYWJsZSwgTlVMTCwgTlVMTCwgU19JV1VTUik7CitfX01PRFVMRV9QQVJNX1RZUEUoZGlzYWJsZSwgInN0cmluZyIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlLCAiIERpc2FibGVzIGZjb2Ugb24gYSBldGhlcm5ldCBpbnRlcmZhY2UuIik7CiAKIC8qIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmb3IgcGFja2V0cyBmcm9tIG5ldCBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmNvZV9ub3RpZmllciA9IHsKQEAgLTU0NSw2ICs1NTMsMjMgQEAKIH0KIAogLyoqCisgKiBmY29lX2dldF93d24oKSAtIEdldCB0aGUgd29ybGQgd2lkZSBuYW1lIGZyb20gTExEIGlmIGl0IHN1cHBvcnRzIGl0CisgKiBAbmV0ZGV2OiB0aGUgYXNzb2NpYXRlZCBuZXQgZGV2aWNlCisgKiBAd3duOiB0aGUgb3V0cHV0IFdXTgorICogQHR5cGU6IHRoZSB0eXBlIG9mIFdXTiAoV1dQTiBvciBXV05OKQorICoKKyAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBmY29lX2dldF93d24oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICp3d24sIGludCB0eXBlKQoreworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LT5uZXRkZXZfb3BzOworCisJaWYgKG9wcy0+bmRvX2Zjb2VfZ2V0X3d3bikKKwkJcmV0dXJuIG9wcy0+bmRvX2Zjb2VfZ2V0X3d3bihuZXRkZXYsIHd3biwgdHlwZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgogICogZmNvZV9uZXRkZXZfY29uZmlnKCkgLSBTZXQgdXAgbmV0IGRldml2ZSBmb3IgU1cgRkNvRQogICogQGxwb3J0OiAgVGhlIGxvY2FsIHBvcnQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldCBkZXZpY2UKICAqIEBuZXRkZXY6IFRoZSBhc3NvY2lhdGVkIG5ldCBkZXZpY2UKQEAgLTYxMSw5ICs2MzYsMTMgQEAKIAkJICovCiAJCWlmIChuZXRkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pCiAJCQl2aWQgPSB2bGFuX2Rldl92bGFuX2lkKG5ldGRldik7Ci0JCXd3bm4gPSBmY29lX3d3bl9mcm9tX21hYyhmY29lLT5jdGxyLmN0bF9zcmNfYWRkciwgMSwgMCk7CisKKwkJaWYgKGZjb2VfZ2V0X3d3bihuZXRkZXYsICZ3d25uLCBORVRERVZfRkNPRV9XV05OKSkKKwkJCXd3bm4gPSBmY29lX3d3bl9mcm9tX21hYyhmY29lLT5jdGxyLmN0bF9zcmNfYWRkciwgMSwgMCk7CiAJCWZjX3NldF93d25uKGxwb3J0LCB3d25uKTsKLQkJd3dwbiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLCAyLCB2aWQpOworCQlpZiAoZmNvZV9nZXRfd3duKG5ldGRldiwgJnd3cG4sIE5FVERFVl9GQ09FX1dXUE4pKQorCQkJd3dwbiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLAorCQkJCQkJIDIsIHZpZCk7CiAJCWZjX3NldF93d3BuKGxwb3J0LCB3d3BuKTsKIAl9CiAKQEAgLTEyMzEsNyArMTI2MCw3IEBACiAJCQkJIkNQVS5cbiIpOwogCiAJCXNwaW5fdW5sb2NrX2JoKCZmcHMtPmZjb2VfcnhfbGlzdC5sb2NrKTsKLQkJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKKwkJY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOwogCQlmcHMgPSAmcGVyX2NwdShmY29lX3BlcmNwdSwgY3B1KTsKIAkJc3Bpbl9sb2NrX2JoKCZmcHMtPmZjb2VfcnhfbGlzdC5sb2NrKTsKIAkJaWYgKCFmcHMtPnRocmVhZCkgewpAQCAtMTgzOCw2ICsxODY3LDEwNCBAQAogfQogCiAvKioKKyAqIGZjb2VfZGlzYWJsZSgpIC0gRGlzYWJsZXMgYSBGQ29FIGludGVyZmFjZQorICogQGJ1ZmZlcjogVGhlIG5hbWUgb2YgdGhlIEV0aGVybmV0IGludGVyZmFjZSB0byBiZSBkaXNhYmxlZAorICogQGtwOgkgICAgVGhlIGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcgorICoKKyAqIENhbGxlZCBmcm9tIHN5c2ZzLgorICoKKyAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBmY29lX2Rpc2FibGUoY29uc3QgY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlpbnQgcmMgPSAwOworCisJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOworI2lmZGVmIENPTkZJR19GQ09FX01PRFVMRQorCS8qCisJICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKKwkgKiByZW1vdmVkLiAgTW9kdWxlIHBhcmFtdGVyIHN5c2ZzIGZpbGVzIGFyZSB3cml0YWJsZSBiZWZvcmUgdGhlCisJICogbW9kdWxlX2luaXQgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCBhZnRlciBtb2R1bGVfZXhpdC4KKwkgKi8KKwlpZiAoVEhJU19NT0RVTEUtPnN0YXRlICE9IE1PRFVMRV9TVEFURV9MSVZFKSB7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfbm9kZXY7CisJfQorI2VuZGlmCisKKwluZXRkZXYgPSBmY29lX2lmX3RvX25ldGRldihidWZmZXIpOworCWlmICghbmV0ZGV2KSB7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfbm9kZXY7CisJfQorCisJcnRubF9sb2NrKCk7CisJZmNvZSA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQobmV0ZGV2KTsKKwlydG5sX3VubG9jaygpOworCisJaWYgKGZjb2UpCisJCWZjX2ZhYnJpY19sb2dvZmYoZmNvZS0+Y3Rsci5scCk7CisJZWxzZQorCQlyYyA9IC1FTk9ERVY7CisKKwlkZXZfcHV0KG5ldGRldik7CitvdXRfbm9kZXY6CisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGZjb2VfZW5hYmxlKCkgLSBFbmFibGVzIGEgRkNvRSBpbnRlcmZhY2UKKyAqIEBidWZmZXI6IFRoZSBuYW1lIG9mIHRoZSBFdGhlcm5ldCBpbnRlcmZhY2UgdG8gYmUgZW5hYmxlZAorICogQGtwOiAgICAgVGhlIGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcgorICoKKyAqIENhbGxlZCBmcm9tIHN5c2ZzLgorICoKKyAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBmY29lX2VuYWJsZShjb25zdCBjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCByYyA9IDA7CisKKwltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisjaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQorCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKKwkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgorCSAqLworCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisjZW5kaWYKKworCW5ldGRldiA9IGZjb2VfaWZfdG9fbmV0ZGV2KGJ1ZmZlcik7CisJaWYgKCFuZXRkZXYpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisKKwlydG5sX2xvY2soKTsKKwlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisKKwlpZiAoZmNvZSkKKwkJcmMgPSBmY19mYWJyaWNfbG9naW4oZmNvZS0+Y3Rsci5scCk7CisJZWxzZQorCQlyYyA9IC1FTk9ERVY7CisKKwlkZXZfcHV0KG5ldGRldik7CitvdXRfbm9kZXY6CisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisJcmV0dXJuIHJjOworfQorCisvKioKICAqIGZjb2VfZGVzdHJveSgpIC0gRGVzdHJveSBhIEZDb0UgaW50ZXJmYWNlCiAgKiBAYnVmZmVyOiBUaGUgbmFtZSBvZiB0aGUgRXRoZXJuZXQgaW50ZXJmYWNlIHRvIGJlIGRlc3Ryb3llZAogICogQGtwOgkgICAgVGhlIGFzc29jaWF0ZWQga2VybmVsIHBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5NmZkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKQEAgLTAsMCArMSwzNTMxIEBACisvKgorICogICAgRGlzayBBcnJheSBkcml2ZXIgZm9yIEhQIFNtYXJ0IEFycmF5IFNBUyBjb250cm9sbGVycworICogICAgQ29weXJpZ2h0IDIwMDAsIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgICBRdWVzdGlvbnMvQ29tbWVudHMvQnVnZml4ZXMgdG8gaXNzX3N0b3JhZ2VkZXZAaHAuY29tCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NjaXNzX2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlICJocHNhX2NtZC5oIgorI2luY2x1ZGUgImhwc2EuaCIKKworLyogSFBTQV9EUklWRVJfVkVSU0lPTiBtdXN0IGJlIDMgYnl0ZSB2YWx1ZXMgKDAtMjU1KSBzZXBhcmF0ZWQgYnkgJy4nICovCisjZGVmaW5lIEhQU0FfRFJJVkVSX1ZFUlNJT04gIjEuMC4wIgorI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgSFBTQSBEcml2ZXIgKHYgIiBIUFNBX0RSSVZFUl9WRVJTSU9OICIpIgorCisvKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCisjZGVmaW5lIE1BWF9DT05GSUdfV0FJVCAzMDAwMAorI2RlZmluZSBNQVhfSU9DVExfQ09ORklHX1dBSVQgMTAwMAorCisvKmRlZmluZSBob3cgbWFueSB0aW1lcyB3ZSB3aWxsIHRyeSBhIGNvbW1hbmQgYmVjYXVzZSBvZiBidXMgcmVzZXRzICovCisjZGVmaW5lIE1BWF9DTURfUkVUUklFUyAzCisKKy8qIEVtYmVkZGVkIG1vZHVsZSBkb2N1bWVudGF0aW9uIG1hY3JvcyAtIHNlZSBtb2R1bGVzLmggKi8KK01PRFVMRV9BVVRIT1IoIkhld2xldHQtUGFja2FyZCBDb21wYW55Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgSFAgU21hcnQgQXJyYXkgQ29udHJvbGxlciB2ZXJzaW9uICIgXAorCUhQU0FfRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkhQIFNtYXJ0IEFycmF5IENvbnRyb2xsZXJzIik7CitNT0RVTEVfVkVSU0lPTihIUFNBX0RSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBocHNhX2FsbG93X2FueTsKK21vZHVsZV9wYXJhbShocHNhX2FsbG93X2FueSwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhocHNhX2FsbG93X2FueSwKKwkJIkFsbG93IGhwc2EgZHJpdmVyIHRvIGFjY2VzcyB1bmtub3duIEhQIFNtYXJ0IEFycmF5IGhhcmR3YXJlIik7CisKKy8qIGRlZmluZSB0aGUgUENJIGluZm8gZm9yIHRoZSBjYXJkcyB3ZSBjYW4gY29udHJvbCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwc2FfcGNpX2RldmljZV9pZFtdID0geworCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTQywgICAgIDB4MTAzQywgMHgzMjIzfSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsICAgICAweDEwM0MsIDB4MzIzNH0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyM0R9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQxfSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0M30sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDV9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ3fSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0OX0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGF9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRifSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9BTllfSUQsICAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCVBDSV9DTEFTU19TVE9SQUdFX1JBSUQgPDwgOCwgMHhmZmZmIDw8IDgsIDB9LAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBocHNhX3BjaV9kZXZpY2VfaWQpOworCisvKiAgYm9hcmRfaWQgPSBTdWJzeXN0ZW0gRGV2aWNlIElEICYgVmVuZG9yIElECisgKiAgcHJvZHVjdCA9IE1hcmtldGluZyBOYW1lIGZvciB0aGUgYm9hcmQKKyAqICBhY2Nlc3MgPSBBZGRyZXNzIG9mIHRoZSBzdHJ1Y3Qgb2YgZnVuY3Rpb24gcG9pbnRlcnMKKyAqLworc3RhdGljIHN0cnVjdCBib2FyZF90eXBlIHByb2R1Y3RzW10gPSB7CisJezB4MzIyMzEwM0MsICJTbWFydCBBcnJheSBQODAwIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyMzQxMDNDLCAiU21hcnQgQXJyYXkgUDQwMCIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjNkMTAzYywgIlNtYXJ0IEFycmF5IFA3MDBNIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNDExMDNDLCAiU21hcnQgQXJyYXkgUDIxMiIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjQzMTAzQywgIlNtYXJ0IEFycmF5IFA0MTAiLCAmU0E1X2FjY2Vzc30sCisJezB4MzI0NTEwM0MsICJTbWFydCBBcnJheSBQNDEwaSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjQ3MTAzQywgIlNtYXJ0IEFycmF5IFA0MTEiLCAmU0E1X2FjY2Vzc30sCisJezB4MzI0OTEwM0MsICJTbWFydCBBcnJheSBQODEyIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNGExMDNDLCAiU21hcnQgQXJyYXkgUDcxMm0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzI0YjEwM0MsICJTbWFydCBBcnJheSBQNzExbSIsICZTQTVfYWNjZXNzfSwKKwl7MHhGRkZGMTAzQywgIlVua25vd24gU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCit9OworCitzdGF0aWMgaW50IG51bWJlcl9vZl9jb250cm9sbGVyczsKKworc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGludCBocHNhX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpOworc3RhdGljIHZvaWQgc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCk7CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNtZF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CitzdGF0aWMgdm9pZCBjbWRfc3BlY2lhbF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CitzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCk7CitzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfc3BlY2lhbF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKK3N0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgX191OCBjbWQsIHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsIF9fdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCisJaW50IGNtZF90eXBlKTsKKworc3RhdGljIGludCBocHNhX3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCisJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKKworc3RhdGljIGludCBocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQpOworc3RhdGljIGludCBocHNhX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdGF0aWMgdm9pZCBocHNhX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKKworc3RhdGljIHNzaXplX3QgcmFpZF9sZXZlbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGx1bmlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgdW5pcXVlX2lkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHZvaWQgaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8pOworc3RhdGljIHNzaXplX3QgaG9zdF9zdG9yZV9yZXNjYW4oc3RydWN0IGRldmljZSAqZGV2LAorCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworc3RhdGljIGludCBjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOworc3RhdGljIHZvaWQgY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOworCitzdGF0aWMgREVWSUNFX0FUVFIocmFpZF9sZXZlbCwgU19JUlVHTywgcmFpZF9sZXZlbF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsdW5pZCwgU19JUlVHTywgbHVuaWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodW5pcXVlX2lkLCBTX0lSVUdPLCB1bmlxdWVfaWRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmVzY2FuLCBTX0lXVVNSLCBOVUxMLCBob3N0X3N0b3JlX3Jlc2Nhbik7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaHBzYV9zZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3JhaWRfbGV2ZWwsCisJJmRldl9hdHRyX2x1bmlkLAorCSZkZXZfYXR0cl91bmlxdWVfaWQsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaHBzYV9zaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9yZXNjYW4sCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGhwc2FfZHJpdmVyX3RlbXBsYXRlID0geworCS5tb2R1bGUJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiaHBzYSIsCisJLnByb2NfbmFtZQkJPSAiaHBzYSIsCisJLnF1ZXVlY29tbWFuZAkJPSBocHNhX3Njc2lfcXVldWVfY29tbWFuZCwKKwkuY2FuX3F1ZXVlCQk9IDUxMiwKKwkudGhpc19pZAkJPSAtMSwKKwkuc2dfdGFibGVzaXplCQk9IE1BWFNHRU5UUklFUywKKwkuY21kX3Blcl9sdW4JCT0gNTEyLAorCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyLAorCS5pb2N0bAkJCT0gaHBzYV9pb2N0bCwKKwkuc2xhdmVfYWxsb2MJCT0gaHBzYV9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfZGVzdHJveQkJPSBocHNhX3NsYXZlX2Rlc3Ryb3ksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJCT0gaHBzYV9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkuc2Rldl9hdHRycyA9IGhwc2Ffc2Rldl9hdHRycywKKwkuc2hvc3RfYXR0cnMgPSBocHNhX3Nob3N0X2F0dHJzLAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3Rscl9pbmZvICpzZGV2X3RvX2hiYShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyAqcHJpdiA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CisJcmV0dXJuIChzdHJ1Y3QgY3Rscl9pbmZvICopICpwcml2OworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpocHNhX3NjYW5fdGhyZWFkOworc3RhdGljIERFRklORV9NVVRFWChocHNhX3NjYW5fbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChocHNhX3NjYW5fcSk7CitzdGF0aWMgaW50IGhwc2Ffc2Nhbl9mdW5jKHZvaWQgKmRhdGEpOworCisvKioKKyAqIGFkZF90b19zY2FuX2xpc3QoKSAtIGFkZCBjb250cm9sbGVyIHRvIHJlc2NhbiBxdWV1ZQorICogQGg6CQkgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIEFkZHMgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIHJlc2NhbiBxdWV1ZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgcXVldWUuCisgKgorICogcmV0dXJucyAxIGlmIGFkZGVkIHRvIHRoZSBxdWV1ZSwgMCBpZiBza2lwcGVkIChjb3VsZCBiZSBvbiB0aGUKKyAqIHF1ZXVlIGFscmVhZHksIG9yIHRoZSBjb250cm9sbGVyIGNvdWxkIGJlIGluaXRpYWxpemluZyBvciBzaHV0dGluZworICogZG93bikuCisgKiovCitzdGF0aWMgaW50IGFkZF90b19zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICp0ZXN0X2g7CisJaW50IGZvdW5kID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChoLT5idXN5X2luaXRpYWxpemluZykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGdldCB0aGUgbG9jaywgaXQgbWVhbnMgdGhlIGRyaXZlciBpcyB1bmxvYWRpbmcKKwkgKiBhbmQgdGhlcmUncyBubyBwb2ludCBpbiBzY2hlZHVsaW5nIGEgbmV3IHNjYW4uCisJICovCisJaWYgKCFtdXRleF90cnlsb2NrKCZoLT5idXN5X3NodXR0aW5nX2Rvd24pKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0X2gsICZocHNhX3NjYW5fcSwgc2Nhbl9saXN0KSB7CisJCWlmICh0ZXN0X2ggPT0gaCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmb3VuZCAmJiAhaC0+YnVzeV9zY2FubmluZykgeworCQlJTklUX0NPTVBMRVRJT04oaC0+c2Nhbl93YWl0KTsKKwkJbGlzdF9hZGRfdGFpbCgmaC0+c2Nhbl9saXN0LCAmaHBzYV9zY2FuX3EpOworCQlyZXQgPSAxOworCX0KKwltdXRleF91bmxvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiByZW1vdmVfZnJvbV9zY2FuX2xpc3QoKSAtIHJlbW92ZSBjb250cm9sbGVyIGZyb20gcmVzY2FuIHF1ZXVlCisgKiBAaDoJCQkgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyLgorICoKKyAqIFJlbW92ZXMgdGhlIGNvbnRyb2xsZXIgZnJvbSB0aGUgcmVzY2FuIHF1ZXVlIGlmIHByZXNlbnQuIEJsb2NrcyBpZgorICogdGhlIGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IGNvbmR1Y3RpbmcgYSByZXNjYW4uICBUaGUgY29udHJvbGxlcgorICogY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6CisgKiAxLiBEb2Vzbid0IG5lZWQgYSBzY2FuCisgKiAyLiBPbiB0aGUgc2NhbiBsaXN0LCBidXQgbm90IHNjYW5uaW5nIHlldCAod2UgcmVtb3ZlIGl0KQorICogMy4gQnVzeSBzY2FubmluZyAoYW5kIG5vdCBvbiB0aGUgbGlzdCkuIEluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIHdhaXQgZm9yCisgKiAgICB0aGUgc2NhbiB0byBjb21wbGV0ZSB0byBtYWtlIHN1cmUgdGhlIHNjYW5uaW5nIHRocmVhZCBmb3IgdGhpcworICogICAgY29udHJvbGxlciBpcyBjb21wbGV0ZWx5IGlkbGUuCisgKiovCitzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9zY2FuX2xpc3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICp0ZXN0X2gsICp0bXBfaDsKKworCW11dGV4X2xvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRlc3RfaCwgdG1wX2gsICZocHNhX3NjYW5fcSwgc2Nhbl9saXN0KSB7CisJCWlmICh0ZXN0X2ggPT0gaCkgeyAvKiBzdGF0ZSAyLiAqLworCQkJbGlzdF9kZWwoJmgtPnNjYW5fbGlzdCk7CisJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CisJCQltdXRleF91bmxvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaWYgKGgtPmJ1c3lfc2Nhbm5pbmcpIHsgLyogc3RhdGUgMy4gKi8KKwkJbXV0ZXhfdW5sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZoLT5zY2FuX3dhaXQpOworCX0gZWxzZSB7IC8qIHN0YXRlIDEsIG5vdGhpbmcgdG8gZG8uICovCisJCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwl9Cit9CisKKy8qIGhwc2Ffc2Nhbl9mdW5jKCkgLSBrZXJuZWwgdGhyZWFkIHVzZWQgdG8gcmVzY2FuIGNvbnRyb2xsZXJzCisgKiBAZGF0YToJIElnbm9yZWQuCisgKgorICogQSBrZXJuZWwgdGhyZWFkIHVzZWQgc2NhbiBmb3IgZHJpdmUgdG9wb2xvZ3kgY2hhbmdlcyBvbgorICogY29udHJvbGxlcnMuIFRoZSB0aHJlYWQgcHJvY2Vzc2VzIG9ubHkgb25lIGNvbnRyb2xsZXIgYXQgYSB0aW1lCisgKiB1c2luZyBhIHF1ZXVlLiAgQ29udHJvbGxlcnMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSB1c2luZworICogYWRkX3RvX3NjYW5fbGlzdCgpIGFuZCByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIGVpdGhlciBhZnRlciBkb25lCisgKiBwcm9jZXNzaW5nIG9yIHVzaW5nIHJlbW92ZV9mcm9tX3NjYW5fbGlzdCgpLgorICoKKyAqIHJldHVybnMgMC4KKyAqKi8KK3N0YXRpYyBpbnQgaHBzYV9zY2FuX2Z1bmMoX19hdHRyaWJ1dGVfXygodW51c2VkKSkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCWludCBob3N0X25vOworCisJd2hpbGUgKDEpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGUoKTsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCisJCXdoaWxlICgxKSB7CisJCQltdXRleF9sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOworCQkJaWYgKGxpc3RfZW1wdHkoJmhwc2Ffc2Nhbl9xKSkgeworCQkJCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWggPSBsaXN0X2VudHJ5KGhwc2Ffc2Nhbl9xLm5leHQsIHN0cnVjdCBjdGxyX2luZm8sCisJCQkJCXNjYW5fbGlzdCk7CisJCQlsaXN0X2RlbCgmaC0+c2Nhbl9saXN0KTsKKwkJCWgtPmJ1c3lfc2Nhbm5pbmcgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOworCQkJaG9zdF9ubyA9IGgtPnNjc2lfaG9zdCA/ICBoLT5zY3NpX2hvc3QtPmhvc3Rfbm8gOiAtMTsKKwkJCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCBob3N0X25vKTsKKwkJCWNvbXBsZXRlX2FsbCgmaC0+c2Nhbl93YWl0KTsKKwkJCW11dGV4X2xvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CisJCQloLT5idXN5X3NjYW5uaW5nID0gMDsKKwkJCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJaWYgKGMtPmVycl9pbmZvLT5TZW5zZUluZm9bMl0gIT0gVU5JVF9BVFRFTlRJT04pCisJCXJldHVybiAwOworCisJc3dpdGNoIChjLT5lcnJfaW5mby0+U2Vuc2VJbmZvWzEyXSkgeworCWNhc2UgU1RBVEVfQ0hBTkdFRDoKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImhwc2ElZDogYSBzdGF0ZSBjaGFuZ2UgIgorCQkJImRldGVjdGVkLCBjb21tYW5kIHJldHJpZWRcbiIsIGgtPmN0bHIpOworCQlicmVhazsKKwljYXNlIExVTl9GQUlMRUQ6CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJocHNhJWQ6IExVTiBmYWlsdXJlICIKKwkJCSJkZXRlY3RlZCwgYWN0aW9uIHJlcXVpcmVkXG4iLCBoLT5jdGxyKTsKKwkJYnJlYWs7CisJY2FzZSBSRVBPUlRfTFVOU19DSEFOR0VEOgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiaHBzYSVkOiByZXBvcnQgTFVOIGRhdGEgIgorCQkJImNoYW5nZWRcbiIsIGgtPmN0bHIpOworCS8qCisJICogSGVyZSwgd2UgY291bGQgY2FsbCBhZGRfdG9fc2Nhbl9saXN0IGFuZCB3YWtlIHVwIHRoZSBzY2FuIHRocmVhZCwKKwkgKiBleGNlcHQgdGhhdCBpdCdzIHF1aXRlIGxpa2VseSB0aGF0IHdlIHdpbGwgZ2V0IG1vcmUgdGhhbiBvbmUKKwkgKiBSRVBPUlRfTFVOU19DSEFOR0VEIGNvbmRpdGlvbiBpbiBxdWljayBzdWNjZXNzaW9uLCB3aGljaCBtZWFucworCSAqIHRoYXQgdGhvc2Ugd2hpY2ggb2NjdXIgYWZ0ZXIgdGhlIGZpcnN0IG9uZSB3aWxsIGxpa2VseSBoYXBwZW4KKwkgKiAqZHVyaW5nKiB0aGUgaHBzYV9zY2FuX3RocmVhZCdzIHJlc2Nhbi4gIEFuZCB0aGUgcmVzY2FuIGNvZGUgaXMgbm90CisJICogcm9idXN0IGVub3VnaCB0byByZXN0YXJ0IGluIHRoZSBtaWRkbGUsIHVuZG9pbmcgd2hhdCBpdCBoYXMgYWxyZWFkeQorCSAqIGRvbmUsIGFuZCBpdCdzIG5vdCBjbGVhciB0aGF0IGl0J3MgZXZlbiBwb3NzaWJsZSB0byBkbyB0aGlzLCBzaW5jZQorCSAqIHBhcnQgb2Ygd2hhdCBpdCBkb2VzIGlzIG5vdGlmeSB0aGUgU0NTSSBtaWQgbGF5ZXIsIHdoaWNoIHN0YXJ0cworCSAqIGRvaW5nIGl0J3Mgb3duIGkvbyB0byByZWFkIHBhcnRpdGlvbiB0YWJsZXMgYW5kIHNvIG9uLCBhbmQgdGhlCisJICogZHJpdmVyIGRvZXNuJ3QgaGF2ZSB2aXNpYmlsaXR5IHRvIGtub3cgd2hhdCBtaWdodCBuZWVkIHVuZG9pbmcuCisJICogSW4gYW55IGV2ZW50LCBpZiBwb3NzaWJsZSwgaXQgaXMgaG9ycmlibHkgY29tcGxpY2F0ZWQgdG8gZ2V0IHJpZ2h0CisJICogc28gd2UganVzdCBkb24ndCBkbyBpdCBmb3Igbm93LgorCSAqCisJICogTm90ZTogdGhpcyBSRVBPUlRfTFVOU19DSEFOR0VEIGNvbmRpdGlvbiBvbmx5IG9jY3VycyBvbiB0aGUgTVNBMjAxMi4KKwkgKi8KKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9PUl9SRVNFVDoKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImhwc2ElZDogYSBwb3dlciBvbiAiCisJCQkib3IgZGV2aWNlIHJlc2V0IGRldGVjdGVkXG4iLCBoLT5jdGxyKTsKKwkJYnJlYWs7CisJY2FzZSBVTklUX0FUVEVOVElPTl9DTEVBUkVEOgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiaHBzYSVkOiB1bml0IGF0dGVudGlvbiAiCisJCSAgICAiY2xlYXJlZCBieSBhbm90aGVyIGluaXRpYXRvclxuIiwgaC0+Y3Rscik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJocHNhJWQ6IHVua25vd24gIgorCQkJInVuaXQgYXR0ZW50aW9uIGRldGVjdGVkXG4iLCBoLT5jdGxyKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCBob3N0X3N0b3JlX3Jlc2NhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwl1bnNpZ25lZCBsb25nICpwcml2ID0gc2hvc3RfcHJpdihzaG9zdCk7CisJaCA9IChzdHJ1Y3QgY3Rscl9pbmZvICopICpwcml2OworCWlmIChhZGRfdG9fc2Nhbl9saXN0KGgpKSB7CisJCXdha2VfdXBfcHJvY2VzcyhocHNhX3NjYW5fdGhyZWFkKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZoLT5zY2FuX3dhaXQpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIEVucXVldWluZyBhbmQgZGVxdWV1aW5nIGZ1bmN0aW9ucyBmb3IgY21kbGlzdHMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUShzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCWhsaXN0X2FkZF9oZWFkKCZjLT5saXN0LCBsaXN0KTsKK30KKworc3RhdGljIHZvaWQgZW5xdWV1ZV9jbWRfYW5kX3N0YXJ0X2lvKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlhZGRRKCZoLT5yZXFRLCBjKTsKKwloLT5RZGVwdGgrKzsKKwlzdGFydF9pbyhoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVRKHN0cnVjdCBDb21tYW5kTGlzdCAqYykKK3sKKwlpZiAoV0FSTl9PTihobGlzdF91bmhhc2hlZCgmYy0+bGlzdCkpKQorCQlyZXR1cm47CisJaGxpc3RfZGVsX2luaXQoJmMtPmxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19oYmFfbHVuaWQodW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSkKK3sKKwlyZXR1cm4gbWVtY21wKHNjc2kzYWRkciwgUkFJRF9DVExSX0xVTklELCA4KSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUodW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSkKK3sKKwlyZXR1cm4gKHNjc2kzYWRkclszXSAmIDB4QzApID09IDB4NDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCisJIlVOS05PV04iCit9OworI2RlZmluZSBSQUlEX1VOS05PV04gKEFSUkFZX1NJWkUocmFpZF9sYWJlbCkgLSAxKQorCitzdGF0aWMgc3NpemVfdCByYWlkX2xldmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IGwgPSAwOworCWludCBybGV2ZWw7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqaGRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJaCA9IHNkZXZfdG9faGJhKHNkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJaGRldiA9IHNkZXYtPmhvc3RkYXRhOworCWlmICghaGRldikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIElzIHRoaXMgZXZlbiBhIGxvZ2ljYWwgZHJpdmU/ICovCisJaWYgKCFpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUoaGRldi0+c2NzaTNhZGRyKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIk4vQVxuIik7CisJCXJldHVybiBsOworCX0KKworCXJsZXZlbCA9IGhkZXYtPnJhaWRfbGV2ZWw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCWlmIChybGV2ZWwgPCAwIHx8IHJsZXZlbCA+IFJBSURfVU5LTk9XTikKKwkJcmxldmVsID0gUkFJRF9VTktOT1dOOworCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlJBSUQgJXNcbiIsIHJhaWRfbGFiZWxbcmxldmVsXSk7CisJcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGx1bmlkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpoZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBsdW5pZFs4XTsKKworCXNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCWggPSBzZGV2X3RvX2hiYShzZGV2KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCWhkZXYgPSBzZGV2LT5ob3N0ZGF0YTsKKwlpZiAoIWhkZXYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbWVtY3B5KGx1bmlkLCBoZGV2LT5zY3NpM2FkZHIsIHNpemVvZihsdW5pZCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIjB4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCWx1bmlkWzBdLCBsdW5pZFsxXSwgbHVuaWRbMl0sIGx1bmlkWzNdLAorCQlsdW5pZFs0XSwgbHVuaWRbNV0sIGx1bmlkWzZdLCBsdW5pZFs3XSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVuaXF1ZV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqaGRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgc25bMTZdOworCisJc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJaCA9IHNkZXZfdG9faGJhKHNkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJaGRldiA9IHNkZXYtPmhvc3RkYXRhOworCWlmICghaGRldikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwltZW1jcHkoc24sIGhkZXYtPmRldmljZV9pZCwgc2l6ZW9mKHNuKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBzbnByaW50ZihidWYsIDE2ICogMiArIDIsCisJCQkiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgiCisJCQkiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCisJCQlzblswXSwgc25bMV0sIHNuWzJdLCBzblszXSwKKwkJCXNuWzRdLCBzbls1XSwgc25bNl0sIHNuWzddLAorCQkJc25bOF0sIHNuWzldLCBzblsxMF0sIHNuWzExXSwKKwkJCXNuWzEyXSwgc25bMTNdLCBzblsxNF0sIHNuWzE1XSk7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9maW5kX3RhcmdldF9sdW4oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCBpbnQgYnVzLCBpbnQgKnRhcmdldCwgaW50ICpsdW4pCit7CisJLyogZmluZHMgYW4gdW51c2VkIGJ1cywgdGFyZ2V0LCBsdW4gZm9yIGEgbmV3IHBoeXNpY2FsIGRldmljZQorCSAqIGFzc3VtZXMgaC0+ZGV2bG9jayBpcyBoZWxkCisJICovCisJaW50IGksIGZvdW5kID0gMDsKKwlERUNMQVJFX0JJVE1BUChsdW5fdGFrZW4sIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKTsKKworCW1lbXNldCgmbHVuX3Rha2VuWzBdLCAwLCBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSA+PiAzKTsKKworCWZvciAoaSA9IDA7IGkgPCBoLT5uZGV2aWNlczsgaSsrKSB7CisJCWlmIChoLT5kZXZbaV0tPmJ1cyA9PSBidXMgJiYgaC0+ZGV2W2ldLT50YXJnZXQgIT0gLTEpCisJCQlzZXRfYml0KGgtPmRldltpXS0+dGFyZ2V0LCBsdW5fdGFrZW4pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQTsgaSsrKSB7CisJCWlmICghdGVzdF9iaXQoaSwgbHVuX3Rha2VuKSkgeworCQkJLyogKmJ1cyA9IDE7ICovCisJCQkqdGFyZ2V0ID0gaTsKKwkJCSpsdW4gPSAwOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuICFmb3VuZDsKK30KKworLyogQWRkIGFuIGVudHJ5IGludG8gaC0+ZGV2W10gYXJyYXkuICovCitzdGF0aWMgaW50IGhwc2Ffc2NzaV9hZGRfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubywKKwkJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2aWNlLAorCQlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICphZGRlZFtdLCBpbnQgKm5hZGRlZCkKK3sKKwkvKiBhc3N1bWVzIGgtPmRldmxvY2sgaXMgaGVsZCAqLworCWludCBuID0gaC0+bmRldmljZXM7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBhZGRyMVs4XSwgYWRkcjJbOF07CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2Q7CisKKwlpZiAobiA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJ0b28gbWFueSBkZXZpY2VzLCBzb21lIHdpbGwgYmUgIgorCQkJImluYWNjZXNzaWJsZS5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogcGh5c2ljYWwgZGV2aWNlcyBkbyBub3QgaGF2ZSBsdW4gb3IgdGFyZ2V0IGFzc2lnbmVkIHVudGlsIG5vdy4gKi8KKwlpZiAoZGV2aWNlLT5sdW4gIT0gLTEpCisJCS8qIExvZ2ljYWwgZGV2aWNlLCBsdW4gaXMgYWxyZWFkeSBhc3NpZ25lZC4gKi8KKwkJZ290byBsdW5fYXNzaWduZWQ7CisKKwkvKiBJZiB0aGlzIGRldmljZSBhIG5vbi16ZXJvIGx1biBvZiBhIG11bHRpLWx1biBkZXZpY2UKKwkgKiBieXRlIDQgb2YgdGhlIDgtYnl0ZSBMVU4gYWRkciB3aWxsIGNvbnRhaW4gdGhlIGxvZ2ljYWwKKwkgKiB1bml0IG5vLCB6ZXJvIG90aGVyaXNlLgorCSAqLworCWlmIChkZXZpY2UtPnNjc2kzYWRkcls0XSA9PSAwKSB7CisJCS8qIFRoaXMgaXMgbm90IGEgbm9uLXplcm8gbHVuIG9mIGEgbXVsdGktbHVuIGRldmljZSAqLworCQlpZiAoaHBzYV9maW5kX3RhcmdldF9sdW4oaCwgZGV2aWNlLT5zY3NpM2FkZHIsCisJCQlkZXZpY2UtPmJ1cywgJmRldmljZS0+dGFyZ2V0LCAmZGV2aWNlLT5sdW4pICE9IDApCisJCQlyZXR1cm4gLTE7CisJCWdvdG8gbHVuX2Fzc2lnbmVkOworCX0KKworCS8qIFRoaXMgaXMgYSBub24temVybyBsdW4gb2YgYSBtdWx0aS1sdW4gZGV2aWNlLgorCSAqIFNlYXJjaCB0aHJvdWdoIG91ciBsaXN0IGFuZCBmaW5kIHRoZSBkZXZpY2Ugd2hpY2gKKwkgKiBoYXMgdGhlIHNhbWUgOCBieXRlIExVTiBhZGRyZXNzLCBleGNlcHRpbmcgYnl0ZSA0LgorCSAqIEFzc2lnbiB0aGUgc2FtZSBidXMgYW5kIHRhcmdldCBmb3IgdGhpcyBuZXcgTFVOLgorCSAqIFVzZSB0aGUgbG9naWNhbCB1bml0IG51bWJlciBmcm9tIHRoZSBmaXJtd2FyZS4KKwkgKi8KKwltZW1jcHkoYWRkcjEsIGRldmljZS0+c2NzaTNhZGRyLCA4KTsKKwlhZGRyMVs0XSA9IDA7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzZCA9IGgtPmRldltpXTsKKwkJbWVtY3B5KGFkZHIyLCBzZC0+c2NzaTNhZGRyLCA4KTsKKwkJYWRkcjJbNF0gPSAwOworCQkvKiBkaWZmZXIgb25seSBpbiBieXRlIDQ/ICovCisJCWlmIChtZW1jbXAoYWRkcjEsIGFkZHIyLCA4KSA9PSAwKSB7CisJCQlkZXZpY2UtPmJ1cyA9IHNkLT5idXM7CisJCQlkZXZpY2UtPnRhcmdldCA9IHNkLT50YXJnZXQ7CisJCQlkZXZpY2UtPmx1biA9IGRldmljZS0+c2NzaTNhZGRyWzRdOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGRldmljZS0+bHVuID09IC0xKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJwaHlzaWNhbCBkZXZpY2Ugd2l0aCBubyBMVU49MCwiCisJCQkiIHN1c3BlY3QgZmlybXdhcmUgYnVnIG9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlICIKKwkJCSJjb25maWd1cmF0aW9uLlxuIik7CisJCQlyZXR1cm4gLTE7CisJfQorCitsdW5fYXNzaWduZWQ6CisKKwloLT5kZXZbbl0gPSBkZXZpY2U7CisJaC0+bmRldmljZXMrKzsKKwlhZGRlZFsqbmFkZGVkXSA9IGRldmljZTsKKwkoKm5hZGRlZCkrKzsKKworCS8qIGluaXRpYWxseSwgKGJlZm9yZSByZWdpc3RlcmluZyB3aXRoIHNjc2kgbGF5ZXIpIHdlIGRvbid0CisJICoga25vdyBvdXIgaG9zdG5vIGFuZCB3ZSBkb24ndCB3YW50IHRvIHByaW50IGFueXRoaW5nIGZpcnN0CisJICogdGltZSBhbnl3YXkgKHRoZSBzY3NpIGxheWVyJ3MgaW5xdWlyaWVzIHdpbGwgc2hvdyB0aGF0IGluZm8pCisJICovCisJLyogaWYgKGhvc3RubyAhPSAtMSkgKi8KKwkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIiVzIGRldmljZSBjJWRiJWR0JWRsJWQgYWRkZWQuXG4iLAorCQkJc2NzaV9kZXZpY2VfdHlwZShkZXZpY2UtPmRldnR5cGUpLCBob3N0bm8sCisJCQlkZXZpY2UtPmJ1cywgZGV2aWNlLT50YXJnZXQsIGRldmljZS0+bHVuKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVtb3ZlIGFuIGVudHJ5IGZyb20gaC0+ZGV2W10gYXJyYXkuICovCitzdGF0aWMgdm9pZCBocHNhX3Njc2lfcmVtb3ZlX2VudHJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sIGludCBlbnRyeSwKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpyZW1vdmVkW10sIGludCAqbnJlbW92ZWQpCit7CisJLyogYXNzdW1lcyBoLT5kZXZsb2NrIGlzIGhlbGQgKi8KKwlpbnQgaTsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpzZDsKKworCWlmIChlbnRyeSA8IDAgfHwgZW50cnkgPj0gSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEpCisJCUJVRygpOworCisJc2QgPSBoLT5kZXZbZW50cnldOworCXJlbW92ZWRbKm5yZW1vdmVkXSA9IGgtPmRldltlbnRyeV07CisJKCpucmVtb3ZlZCkrKzsKKworCWZvciAoaSA9IGVudHJ5OyBpIDwgaC0+bmRldmljZXMtMTsgaSsrKQorCQloLT5kZXZbaV0gPSBoLT5kZXZbaSsxXTsKKwloLT5uZGV2aWNlcy0tOworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlcyBkZXZpY2UgYyVkYiVkdCVkbCVkIHJlbW92ZWQuXG4iLAorCQlzY3NpX2RldmljZV90eXBlKHNkLT5kZXZ0eXBlKSwgaG9zdG5vLCBzZC0+YnVzLCBzZC0+dGFyZ2V0LAorCQlzZC0+bHVuKTsKK30KKworI2RlZmluZSBTQ1NJM0FERFJfRVEoYSwgYikgKCBcCisJKGEpWzddID09IChiKVs3XSAmJiBcCisJKGEpWzZdID09IChiKVs2XSAmJiBcCisJKGEpWzVdID09IChiKVs1XSAmJiBcCisJKGEpWzRdID09IChiKVs0XSAmJiBcCisJKGEpWzNdID09IChiKVszXSAmJiBcCisJKGEpWzJdID09IChiKVsyXSAmJiBcCisJKGEpWzFdID09IChiKVsxXSAmJiBcCisJKGEpWzBdID09IChiKVswXSkKKworc3RhdGljIHZvaWQgZml4dXBfYm90Y2hlZF9hZGQoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICphZGRlZCkKK3sKKwkvKiBjYWxsZWQgd2hlbiBzY3NpX2FkZF9kZXZpY2UgZmFpbHMgaW4gb3JkZXIgdG8gcmUtYWRqdXN0CisJICogaC0+ZGV2W10gdG8gbWF0Y2ggdGhlIG1pZCBsYXllcidzIHZpZXcuCisJICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgajsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IGgtPm5kZXZpY2VzOyBpKyspIHsKKwkJaWYgKGgtPmRldltpXSA9PSBhZGRlZCkgeworCQkJZm9yIChqID0gaTsgaiA8IGgtPm5kZXZpY2VzLTE7IGorKykKKwkJCQloLT5kZXZbal0gPSBoLT5kZXZbaisxXTsKKwkJCWgtPm5kZXZpY2VzLS07CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJa2ZyZWUoYWRkZWQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfaXNfdGhlX3NhbWUoc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2MSwKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXYyKQoreworCWlmICgoaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGRldjEtPnNjc2kzYWRkcikgfHwKKwkJKGRldjEtPmx1biAhPSAtMSAmJiBkZXYyLT5sdW4gIT0gLTEpKSAmJgorCQlkZXYxLT5kZXZ0eXBlICE9IDB4MEMpCisJCXJldHVybiAobWVtY21wKGRldjEsIGRldjIsIHNpemVvZigqZGV2MSkpID09IDApOworCisJLyogd2UgY29tcGFyZSBldmVyeXRoaW5nIGV4Y2VwdCBsdW4gYW5kIHRhcmdldCBhcyB0aGVzZQorCSAqIGFyZSBub3QgeWV0IGFzc2lnbmVkLiAgQ29tcGFyZSBwYXJ0cyBsaWtlbHkKKwkgKiB0byBkaWZmZXIgZmlyc3QKKwkgKi8KKwlpZiAobWVtY21wKGRldjEtPnNjc2kzYWRkciwgZGV2Mi0+c2NzaTNhZGRyLAorCQlzaXplb2YoZGV2MS0+c2NzaTNhZGRyKSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKG1lbWNtcChkZXYxLT5kZXZpY2VfaWQsIGRldjItPmRldmljZV9pZCwKKwkJc2l6ZW9mKGRldjEtPmRldmljZV9pZCkpICE9IDApCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoZGV2MS0+bW9kZWwsIGRldjItPm1vZGVsLCBzaXplb2YoZGV2MS0+bW9kZWwpKSAhPSAwKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGRldjEtPnZlbmRvciwgZGV2Mi0+dmVuZG9yLCBzaXplb2YoZGV2MS0+dmVuZG9yKSkgIT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKG1lbWNtcChkZXYxLT5yZXZpc2lvbiwgZGV2Mi0+cmV2aXNpb24sIHNpemVvZihkZXYxLT5yZXZpc2lvbikpICE9IDApCisJCXJldHVybiAwOworCWlmIChkZXYxLT5kZXZ0eXBlICE9IGRldjItPmRldnR5cGUpCisJCXJldHVybiAwOworCWlmIChkZXYxLT5yYWlkX2xldmVsICE9IGRldjItPnJhaWRfbGV2ZWwpCisJCXJldHVybiAwOworCWlmIChkZXYxLT5idXMgIT0gZGV2Mi0+YnVzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogRmluZCBuZWVkbGUgaW4gaGF5c3RhY2suICBJZiBleGFjdCBtYXRjaCBmb3VuZCwgcmV0dXJuIERFVklDRV9TQU1FLAorICogYW5kIHJldHVybiBuZWVkbGUgbG9jYXRpb24gaW4gKmluZGV4LiAgSWYgc2NzaTNhZGRyIG1hdGNoZXMsIGJ1dCBub3QKKyAqIHZlbmRvciwgbW9kZWwsIHNlcmlhbCBudW0sIGV0Yy4gcmV0dXJuIERFVklDRV9DSEFOR0VELCBhbmQgcmV0dXJuIG5lZWRsZQorICogbG9jYXRpb24gaW4gKmluZGV4LiAgSWYgbmVlZGxlIG5vdCBmb3VuZCwgcmV0dXJuIERFVklDRV9OT1RfRk9VTkQuCisgKi8KK3N0YXRpYyBpbnQgaHBzYV9zY3NpX2ZpbmRfZW50cnkoc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqbmVlZGxlLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmhheXN0YWNrW10sIGludCBoYXlzdGFja19zaXplLAorCWludCAqaW5kZXgpCit7CisJaW50IGk7CisjZGVmaW5lIERFVklDRV9OT1RfRk9VTkQgMAorI2RlZmluZSBERVZJQ0VfQ0hBTkdFRCAxCisjZGVmaW5lIERFVklDRV9TQU1FIDIKKwlmb3IgKGkgPSAwOyBpIDwgaGF5c3RhY2tfc2l6ZTsgaSsrKSB7CisJCWlmIChTQ1NJM0FERFJfRVEobmVlZGxlLT5zY3NpM2FkZHIsIGhheXN0YWNrW2ldLT5zY3NpM2FkZHIpKSB7CisJCQkqaW5kZXggPSBpOworCQkJaWYgKGRldmljZV9pc190aGVfc2FtZShuZWVkbGUsIGhheXN0YWNrW2ldKSkKKwkJCQlyZXR1cm4gREVWSUNFX1NBTUU7CisJCQllbHNlCisJCQkJcmV0dXJuIERFVklDRV9DSEFOR0VEOworCQl9CisJfQorCSppbmRleCA9IC0xOworCXJldHVybiBERVZJQ0VfTk9UX0ZPVU5EOworfQorCitzdGF0aWMgaW50IGFkanVzdF9ocHNhX3Njc2lfdGFibGUoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubywKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpzZFtdLCBpbnQgbnNkcykKK3sKKwkvKiBzZCBjb250YWlucyBzY3NpMyBhZGRyZXNzZXMgYW5kIGRldnR5cGVzLCBhbmQgaW5xdWlyeQorCSAqIGRhdGEuICBUaGlzIGZ1bmN0aW9uIHRha2VzIHdoYXQncyBpbiBzZCB0byBiZSB0aGUgY3VycmVudAorCSAqIHJlYWxpdHkgYW5kIHVwZGF0ZXMgaC0+ZGV2W10gdG8gcmVmbGVjdCB0aGF0IHJlYWxpdHkuCisJICovCisJaW50IGksIGVudHJ5LCBkZXZpY2VfY2hhbmdlLCBjaGFuZ2VzID0gMDsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpjc2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICoqYWRkZWQsICoqcmVtb3ZlZDsKKwlpbnQgbmFkZGVkLCBucmVtb3ZlZDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCA9IE5VTEw7CisKKwlhZGRlZCA9IGt6YWxsb2Moc2l6ZW9mKCphZGRlZCkgKiBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSwKKwkJR0ZQX0tFUk5FTCk7CisJcmVtb3ZlZCA9IGt6YWxsb2Moc2l6ZW9mKCpyZW1vdmVkKSAqIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBLAorCQlHRlBfS0VSTkVMKTsKKworCWlmICghYWRkZWQgfHwgIXJlbW92ZWQpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gIgorCQkJImFkanVzdF9ocHNhX3Njc2lfdGFibGVcbiIpOworCQlnb3RvIGZyZWVfYW5kX291dDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+ZGV2bG9jaywgZmxhZ3MpOworCisJLyogZmluZCBhbnkgZGV2aWNlcyBpbiBoLT5kZXZbXSB0aGF0IGFyZSBub3QgaW4KKwkgKiBzZFtdIGFuZCByZW1vdmUgdGhlbSBmcm9tIGgtPmRldltdLCBhbmQgZm9yIGFueQorCSAqIGRldmljZXMgd2hpY2ggaGF2ZSBjaGFuZ2VkLCByZW1vdmUgdGhlIG9sZCBkZXZpY2UKKwkgKiBpbmZvIGFuZCBhZGQgdGhlIG5ldyBkZXZpY2UgaW5mby4KKwkgKi8KKwlpID0gMDsKKwlucmVtb3ZlZCA9IDA7CisJbmFkZGVkID0gMDsKKwl3aGlsZSAoaSA8IGgtPm5kZXZpY2VzKSB7CisJCWNzZCA9IGgtPmRldltpXTsKKwkJZGV2aWNlX2NoYW5nZSA9IGhwc2Ffc2NzaV9maW5kX2VudHJ5KGNzZCwgc2QsIG5zZHMsICZlbnRyeSk7CisJCWlmIChkZXZpY2VfY2hhbmdlID09IERFVklDRV9OT1RfRk9VTkQpIHsKKwkJCWNoYW5nZXMrKzsKKwkJCWhwc2Ffc2NzaV9yZW1vdmVfZW50cnkoaCwgaG9zdG5vLCBpLAorCQkJCXJlbW92ZWQsICZucmVtb3ZlZCk7CisJCQljb250aW51ZTsgLyogcmVtb3ZlIF5eXiwgaGVuY2UgaSBub3QgaW5jcmVtZW50ZWQgKi8KKwkJfSBlbHNlIGlmIChkZXZpY2VfY2hhbmdlID09IERFVklDRV9DSEFOR0VEKSB7CisJCQljaGFuZ2VzKys7CisJCQlocHNhX3Njc2lfcmVtb3ZlX2VudHJ5KGgsIGhvc3RubywgaSwKKwkJCQlyZW1vdmVkLCAmbnJlbW92ZWQpOworCQkJKHZvaWQpIGhwc2Ffc2NzaV9hZGRfZW50cnkoaCwgaG9zdG5vLCBzZFtlbnRyeV0sCisJCQkJYWRkZWQsICZuYWRkZWQpOworCQkJLyogYWRkIGNhbid0IGZhaWwsIHdlIGp1c3QgcmVtb3ZlZCBvbmUuICovCisJCQlzZFtlbnRyeV0gPSBOVUxMOyAvKiBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgKi8KKwkJfQorCQlpKys7CisJfQorCisJLyogTm93LCBtYWtlIHN1cmUgZXZlcnkgZGV2aWNlIGxpc3RlZCBpbiBzZFtdIGlzIGFsc28KKwkgKiBsaXN0ZWQgaW4gaC0+ZGV2W10sIGFkZGluZyB0aGVtIGlmIHRoZXkgYXJlbid0IGZvdW5kCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbnNkczsgaSsrKSB7CisJCWlmICghc2RbaV0pIC8qIGlmIGFscmVhZHkgYWRkZWQgYWJvdmUuICovCisJCQljb250aW51ZTsKKwkJZGV2aWNlX2NoYW5nZSA9IGhwc2Ffc2NzaV9maW5kX2VudHJ5KHNkW2ldLCBoLT5kZXYsCisJCQkJCWgtPm5kZXZpY2VzLCAmZW50cnkpOworCQlpZiAoZGV2aWNlX2NoYW5nZSA9PSBERVZJQ0VfTk9UX0ZPVU5EKSB7CisJCQljaGFuZ2VzKys7CisJCQlpZiAoaHBzYV9zY3NpX2FkZF9lbnRyeShoLCBob3N0bm8sIHNkW2ldLAorCQkJCWFkZGVkLCAmbmFkZGVkKSAhPSAwKQorCQkJCWJyZWFrOworCQkJc2RbaV0gPSBOVUxMOyAvKiBwcmV2ZW50IGZyb20gYmVpbmcgZnJlZWQgbGF0ZXIuICovCisJCX0gZWxzZSBpZiAoZGV2aWNlX2NoYW5nZSA9PSBERVZJQ0VfQ0hBTkdFRCkgeworCQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLworCQkJY2hhbmdlcysrOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkiZGV2aWNlIHVuZXhwZWN0ZWRseSBjaGFuZ2VkLlxuIik7CisJCQkvKiBidXQgaWYgaXQgZG9lcyBoYXBwZW4sIHdlIGp1c3QgaWdub3JlIHRoYXQgZGV2aWNlICovCisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+ZGV2bG9jaywgZmxhZ3MpOworCisJLyogRG9uJ3Qgbm90aWZ5IHNjc2kgbWlkIGxheWVyIG9mIGFueSBjaGFuZ2VzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gKKwkgKiAob3IgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMpIHNjc2lfc2Nhbl9ob3N0IHdpbGwgZG8gaXQgbGF0ZXIgdGhlCisJICogZmlyc3QgdGltZSB0aHJvdWdoLgorCSAqLworCWlmIChob3N0bm8gPT0gLTEgfHwgIWNoYW5nZXMpCisJCWdvdG8gZnJlZV9hbmRfb3V0OworCisJc2ggPSBoLT5zY3NpX2hvc3Q7CisJLyogTm90aWZ5IHNjc2kgbWlkIGxheWVyIG9mIGFueSByZW1vdmVkIGRldmljZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJlbW92ZWQ7IGkrKykgeworCQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPQorCQkJc2NzaV9kZXZpY2VfbG9va3VwKHNoLCByZW1vdmVkW2ldLT5idXMsCisJCQkJcmVtb3ZlZFtpXS0+dGFyZ2V0LCByZW1vdmVkW2ldLT5sdW4pOworCQlpZiAoc2RldiAhPSBOVUxMKSB7CisJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CisJCQlzY3NpX2RldmljZV9wdXQoc2Rldik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBkb24ndCBleHBlY3QgdG8gZ2V0IGhlcmUuCisJCQkgKiBmdXR1cmUgY21kcyB0byB0aGlzIGRldmljZSB3aWxsIGdldCBzZWxlY3Rpb24KKwkJCSAqIHRpbWVvdXQgYXMgaWYgdGhlIGRldmljZSB3YXMgZ29uZS4KKwkJCSAqLworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImRpZG4ndCBmaW5kIGMlZGIlZHQlZGwlZCAiCisJCQkJIiBmb3IgcmVtb3ZhbC4iLCBob3N0bm8sIHJlbW92ZWRbaV0tPmJ1cywKKwkJCQlyZW1vdmVkW2ldLT50YXJnZXQsIHJlbW92ZWRbaV0tPmx1bik7CisJCX0KKwkJa2ZyZWUocmVtb3ZlZFtpXSk7CisJCXJlbW92ZWRbaV0gPSBOVUxMOworCX0KKworCS8qIE5vdGlmeSBzY3NpIG1pZCBsYXllciBvZiBhbnkgYWRkZWQgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuYWRkZWQ7IGkrKykgeworCQlpZiAoc2NzaV9hZGRfZGV2aWNlKHNoLCBhZGRlZFtpXS0+YnVzLAorCQkJYWRkZWRbaV0tPnRhcmdldCwgYWRkZWRbaV0tPmx1bikgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAic2NzaV9hZGRfZGV2aWNlIGMlZGIlZHQlZGwlZCBmYWlsZWQsICIKKwkJCSJkZXZpY2Ugbm90IGFkZGVkLlxuIiwgaG9zdG5vLCBhZGRlZFtpXS0+YnVzLAorCQkJYWRkZWRbaV0tPnRhcmdldCwgYWRkZWRbaV0tPmx1bik7CisJCS8qIG5vdyB3ZSBoYXZlIHRvIHJlbW92ZSBpdCBmcm9tIGgtPmRldiwKKwkJICogc2luY2UgaXQgZGlkbid0IGdldCBhZGRlZCB0byBzY3NpIG1pZCBsYXllcgorCQkgKi8KKwkJZml4dXBfYm90Y2hlZF9hZGQoaCwgYWRkZWRbaV0pOworCX0KKworZnJlZV9hbmRfb3V0OgorCWtmcmVlKGFkZGVkKTsKKwlrZnJlZShyZW1vdmVkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvb2t1cCBidXMvdGFyZ2V0L2x1biBhbmQgcmV0cnVuIGNvcnJlc3BvbmRpbmcgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqCisgKiBBc3N1bWUncyBoLT5kZXZsb2NrIGlzIGhlbGQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpsb29rdXBfaHBzYV9zY3NpX2RldihzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCWludCBidXMsIGludCB0YXJnZXQsIGludCBsdW4pCit7CisJaW50IGk7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgaC0+bmRldmljZXM7IGkrKykgeworCQlzZCA9IGgtPmRldltpXTsKKwkJaWYgKHNkLT5idXMgPT0gYnVzICYmIHNkLT50YXJnZXQgPT0gdGFyZ2V0ICYmIHNkLT5sdW4gPT0gbHVuKQorCQkJcmV0dXJuIHNkOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogbGluayBzZGV2LT5ob3N0ZGF0YSB0byBvdXIgcGVyLWRldmljZSBzdHJ1Y3R1cmUuICovCitzdGF0aWMgaW50IGhwc2Ffc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKworCWggPSBzZGV2X3RvX2hiYShzZGV2KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+ZGV2bG9jaywgZmxhZ3MpOworCXNkID0gbG9va3VwX2hwc2Ffc2NzaV9kZXYoaCwgc2Rldl9jaGFubmVsKHNkZXYpLAorCQlzZGV2X2lkKHNkZXYpLCBzZGV2LT5sdW4pOworCWlmIChzZCAhPSBOVUxMKQorCQlzZGV2LT5ob3N0ZGF0YSA9IHNkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmRldmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHBzYV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlyZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8uICovCit9CisKK3N0YXRpYyB2b2lkIGhwc2Ffc2NzaV9zZXR1cChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWgtPm5kZXZpY2VzID0gMDsKKwloLT5zY3NpX2hvc3QgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZoLT5kZXZsb2NrKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3Njc2lfY29tbWFuZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwLAorCWludCB0aW1lb3V0LCBfX3UzMiB0YWcpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21kOworCXN0cnVjdCBjdGxyX2luZm8gKmg7CisJc3RydWN0IEVycm9ySW5mbyAqZWk7CisKKwl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBjaGFyIGFzYzsgICAgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBjaGFyIGFzY3E7ICAgICAvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCisKKwllaSA9IGNwLT5lcnJfaW5mbzsKKwljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjcC0+c2NzaV9jbWQ7CisJaCA9IGNwLT5oOworCisJc2NzaV9kbWFfdW5tYXAoY21kKTsgLyogdW5kbyB0aGUgRE1BIG1hcHBpbmdzICovCisKKwljbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpOyAJCS8qIGhvc3QgYnl0ZSAqLworCWNtZC0+cmVzdWx0IHw9IChDT01NQU5EX0NPTVBMRVRFIDw8IDgpOwkvKiBtc2cgYnl0ZSAqLworCWNtZC0+cmVzdWx0IHw9IChlaS0+U2NzaVN0YXR1cyA8PCAxKTsKKworCS8qIGNvcHkgdGhlIHNlbnNlIGRhdGEgd2hldGhlciB3ZSBuZWVkIHRvIG9yIG5vdC4gKi8KKwltZW1jcHkoY21kLT5zZW5zZV9idWZmZXIsIGVpLT5TZW5zZUluZm8sCisJCWVpLT5TZW5zZUxlbiA+IFNDU0lfU0VOU0VfQlVGRkVSU0laRSA/CisJCQlTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgOgorCQkJZWktPlNlbnNlTGVuKTsKKwlzY3NpX3NldF9yZXNpZChjbWQsIGVpLT5SZXNpZHVhbENudCk7CisKKwlpZiAoZWktPkNvbW1hbmRTdGF0dXMgPT0gMCkgeworCQljbWQtPnNjc2lfZG9uZShjbWQpOworCQljbWRfZnJlZShoLCBjcCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBhbiBlcnJvciBoYXMgb2NjdXJyZWQgKi8KKwlzd2l0Y2ggKGVpLT5Db21tYW5kU3RhdHVzKSB7CisKKwljYXNlIENNRF9UQVJHRVRfU1RBVFVTOgorCQlpZiAoZWktPlNjc2lTdGF0dXMpIHsKKwkJCS8qIEdldCBzZW5zZSBrZXkgKi8KKwkJCXNlbnNlX2tleSA9IDB4ZiAmIGVpLT5TZW5zZUluZm9bMl07CisJCQkvKiBHZXQgYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCisJCQlhc2MgPSBlaS0+U2Vuc2VJbmZvWzEyXTsKKwkJCS8qIEdldCBhZGRpdGlvbiBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworCQkJYXNjcSA9IGVpLT5TZW5zZUluZm9bMTNdOworCQl9CisKKwkJaWYgKGVpLT5TY3NpU3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgeworCQkJaWYgKGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjcCkpIHsKKwkJCQljbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHNlbnNlX2tleSA9PSBJTExFR0FMX1JFUVVFU1QpIHsKKwkJCQkvKgorCQkJCSAqIFNDU0kgUkVQT1JUX0xVTlMgaXMgY29tbW9ubHkgdW5zdXBwb3J0ZWQgb24KKwkJCQkgKiBTbWFydCBBcnJheS4gIFN1cHByZXNzIG5vaXN5IGNvbXBsYWludC4KKwkJCQkgKi8KKwkJCQlpZiAoY3AtPlJlcXVlc3QuQ0RCWzBdID09IFJFUE9SVF9MVU5TKQorCQkJCQlicmVhazsKKworCQkJCS8qIElmIEFTQy9BU0NRIGluZGljYXRlIExvZ2ljYWwgVW5pdAorCQkJCSAqIE5vdCBTdXBwb3J0ZWQgY29uZGl0aW9uLAorCQkJCSAqLworCQkJCWlmICgoYXNjID09IDB4MjUpICYmIChhc2NxID09IDB4MCkpIHsKKwkJCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKKwkJCQkJCSJoYXMgY2hlY2sgY29uZGl0aW9uXG4iLCBjcCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHNlbnNlX2tleSA9PSBOT1RfUkVBRFkpIHsKKwkJCQkvKiBJZiBTZW5zZSBpcyBOb3QgUmVhZHksIExvZ2ljYWwgVW5pdAorCQkJCSAqIE5vdCByZWFkeSwgTWFudWFsIEludGVydmVudGlvbgorCQkJCSAqIHJlcXVpcmVkCisJCQkJICovCisJCQkJaWYgKChhc2MgPT0gMHgwNCkgJiYgKGFzY3EgPT0gMHgwMykpIHsKKwkJCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKKwkJCQkJCSJoYXMgY2hlY2sgY29uZGl0aW9uOiB1bml0ICIKKwkJCQkJCSJub3QgcmVhZHksIG1hbnVhbCAiCisJCQkJCQkiaW50ZXJ2ZW50aW9uIHJlcXVpcmVkXG4iLCBjcCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCisJCQkvKiBNdXN0IGJlIHNvbWUgb3RoZXIgdHlwZSBvZiBjaGVjayBjb25kaXRpb24gKi8KKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYXMgY2hlY2sgY29uZGl0aW9uOiAiCisJCQkJCSJ1bmtub3duIHR5cGU6ICIKKwkJCQkJIlNlbnNlOiAweCV4LCBBU0M6IDB4JXgsIEFTQ1E6IDB4JXgsICIKKwkJCQkJIlJldHVybmluZyByZXN1bHQ6IDB4JXgsICIKKwkJCQkJImNtZD1bJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKKwkJCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeF1cbiIsCisJCQkJCWNwLCBzZW5zZV9rZXksIGFzYywgYXNjcSwKKwkJCQkJY21kLT5yZXN1bHQsCisJCQkJCWNtZC0+Y21uZFswXSwgY21kLT5jbW5kWzFdLAorCQkJCQljbWQtPmNtbmRbMl0sIGNtZC0+Y21uZFszXSwKKwkJCQkJY21kLT5jbW5kWzRdLCBjbWQtPmNtbmRbNV0sCisJCQkJCWNtZC0+Y21uZFs2XSwgY21kLT5jbW5kWzddLAorCQkJCQljbWQtPmNtbmRbOF0sIGNtZC0+Y21uZFs5XSk7CisJCQlicmVhazsKKwkJfQorCisKKwkJLyogUHJvYmxlbSB3YXMgbm90IGEgY2hlY2sgY29uZGl0aW9uCisJCSAqIFBhc3MgaXQgdXAgdG8gdGhlIHVwcGVyIGxheWVycy4uLgorCQkgKi8KKwkJaWYgKGVpLT5TY3NpU3RhdHVzKSB7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIHN0YXR1cyAweCV4ICIKKwkJCQkiU2Vuc2U6IDB4JXgsIEFTQzogMHgleCwgQVNDUTogMHgleCwgIgorCQkJCSJSZXR1cm5pbmcgcmVzdWx0OiAweCV4XG4iLAorCQkJCWNwLCBlaS0+U2NzaVN0YXR1cywKKwkJCQlzZW5zZV9rZXksIGFzYywgYXNjcSwKKwkJCQljbWQtPnJlc3VsdCk7CisJCX0gZWxzZSB7ICAvKiBzY3NpIHN0YXR1cyBpcyB6ZXJvPz8/IEhvdz8/PyAqLworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIFNDU0kgc3RhdHVzIHdhcyAwLiAiCisJCQkJIlJldHVybmluZyBubyBjb25uZWN0aW9uLlxuIiwgY3ApLAorCisJCQkvKiBPcmRpbmFyaWx5LCB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGhhcHBlbiwKKwkJCSAqIGJ1dCB0aGVyZSBpcyBhIGJ1ZyBpbiBzb21lIHJlbGVhc2VkIGZpcm13YXJlCisJCQkgKiByZXZpc2lvbnMgdGhhdCBhbGxvd3MgaXQgdG8gaGFwcGVuIGlmLCBmb3IKKwkJCSAqIGV4YW1wbGUsIGEgNDEwMCBiYWNrcGxhbmUgbG9zZXMgcG93ZXIgYW5kCisJCQkgKiB0aGUgdGFwZSBkcml2ZSBpcyBpbiBpdC4gIFdlIGFzc3VtZSB0aGF0CisJCQkgKiBpdCdzIGEgZmF0YWwgZXJyb3Igb2Ygc29tZSBraW5kIGJlY2F1c2Ugd2UKKwkJCSAqIGNhbid0IHNob3cgdGhhdCBpdCB3YXNuJ3QuIFdlIHdpbGwgbWFrZSBpdAorCQkJICogbG9vayBsaWtlIHNlbGVjdGlvbiB0aW1lb3V0IHNpbmNlIHRoYXQgaXMKKwkJCSAqIHRoZSBtb3N0IGNvbW1vbiByZWFzb24gZm9yIHRoaXMgdG8gb2NjdXIsCisJCQkgKiBhbmQgaXQncyBzZXZlcmUgZW5vdWdoLgorCQkJICovCisKKwkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENNRF9EQVRBX1VOREVSUlVOOiAvKiBsZXQgbWlkIGxheWVyIGhhbmRsZSBpdC4gKi8KKwkJYnJlYWs7CisJY2FzZSBDTURfREFUQV9PVkVSUlVOOgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIgorCQkJIiBjb21wbGV0ZWQgd2l0aCBkYXRhIG92ZXJydW4gIgorCQkJInJlcG9ydGVkXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0lOVkFMSUQ6IHsKKwkJLyogcHJpbnRfYnl0ZXMoY3AsIHNpemVvZigqY3ApLCAxLCAwKTsKKwkJcHJpbnRfY21kKGNwKTsgKi8KKwkJLyogV2UgZ2V0IENNRF9JTlZBTElEIGlmIHlvdSBhZGRyZXNzIGEgbm9uLWV4aXN0ZW50IGRldmljZQorCQkgKiBpbnN0ZWFkIG9mIGEgc2VsZWN0aW9uIHRpbWVvdXQgKG5vIHJlc3BvbnNlKS4gIFlvdSB3aWxsCisJCSAqIHNlZSB0aGlzIGlmIHlvdSB5YW5rIG91dCBhIGRyaXZlLCB0aGVuIHRyeSB0byBhY2Nlc3MgaXQuCisJCSAqIFRoaXMgaXMga2luZCBvZiBhIHNoYW1lIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBhbnkgb3RoZXIKKwkJICogQ01EX0lOVkFMSUQgKGUuZy4gZHJpdmVyIGJ1Zykgd2lsbCBnZXQgaW50ZXJwcmV0ZWQgYXMgYQorCQkgKiBtaXNzaW5nIHRhcmdldC4gKi8KKwkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwl9CisJCWJyZWFrOworCWNhc2UgQ01EX1BST1RPQ09MX0VSUjoKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGhhcyAiCisJCQkicHJvdG9jb2wgZXJyb3IgXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0hBUkRXQVJFX0VSUjoKKwkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYWQgIGhhcmR3YXJlIGVycm9yXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0NPTk5FQ1RJT05fTE9TVDoKKwkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYWQgY29ubmVjdGlvbiBsb3N0XG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0FCT1JURUQ6CisJCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgd2FzIGFib3J0ZWQgd2l0aCBzdGF0dXMgMHgleFxuIiwKKwkJCQljcCwgZWktPlNjc2lTdGF0dXMpOworCQlicmVhazsKKwljYXNlIENNRF9BQk9SVF9GQUlMRUQ6CisJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgcmVwb3J0cyBhYm9ydCBmYWlsZWRcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6CisJCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgYWJvcnRlZCBkbyB0byBhbiB1bnNvbGljaXRlZCAiCisJCQkiYWJvcnRcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfVElNRU9VVDoKKwkJY21kLT5yZXN1bHQgPSBESURfVElNRV9PVVQgPDwgMTY7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCB0aW1lZG91dFxuIiwgY3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIHJldHVybmVkIHVua25vd24gc3RhdHVzICV4XG4iLAorCQkJCWNwLCBlaS0+Q29tbWFuZFN0YXR1cyk7CisJfQorCWNtZC0+c2NzaV9kb25lKGNtZCk7CisJY21kX2ZyZWUoaCwgY3ApOworfQorCitzdGF0aWMgaW50IGhwc2Ffc2NzaV9kZXRlY3Qoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaDsKKwlpbnQgZXJyb3I7CisKKwlzaCA9IHNjc2lfaG9zdF9hbGxvYygmaHBzYV9kcml2ZXJfdGVtcGxhdGUsIHNpemVvZihoKSk7CisJaWYgKHNoID09IE5VTEwpCisJCWdvdG8gZmFpbDsKKworCXNoLT5pb19wb3J0ID0gMDsKKwlzaC0+bl9pb19wb3J0ID0gMDsKKwlzaC0+dGhpc19pZCA9IC0xOworCXNoLT5tYXhfY2hhbm5lbCA9IDM7CisJc2gtPm1heF9jbWRfbGVuID0gTUFYX0NPTU1BTkRfU0laRTsKKwlzaC0+bWF4X2x1biA9IEhQU0FfTUFYX0xVTjsKKwlzaC0+bWF4X2lkID0gSFBTQV9NQVhfTFVOOworCWgtPnNjc2lfaG9zdCA9IHNoOworCXNoLT5ob3N0ZGF0YVswXSA9ICh1bnNpZ25lZCBsb25nKSBoOworCXNoLT5pcnEgPSBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF07CisJc2gtPnVuaXF1ZV9pZCA9IHNoLT5pcnE7CisJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNoLCAmaC0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9ob3N0X3B1dDsKKwlzY3NpX3NjYW5faG9zdChzaCk7CisJcmV0dXJuIDA7CisKKyBmYWlsX2hvc3RfcHV0OgorCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2Ffc2NzaV9kZXRlY3Q6IHNjc2lfYWRkX2hvc3QiCisJCSIgZmFpbGVkIGZvciBjb250cm9sbGVyICVkXG4iLCBoLT5jdGxyKTsKKwlzY3NpX2hvc3RfcHV0KHNoKTsKKwlyZXR1cm4gLTE7CisgZmFpbDoKKwlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3Njc2lfZGV0ZWN0OiBzY3NpX2hvc3RfYWxsb2MiCisJCSIgZmFpbGVkIGZvciBjb250cm9sbGVyICVkXG4iLCBoLT5jdGxyKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfcGNpX3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYywgaW50IHNnX3VzZWQsIGludCBkYXRhX2RpcmVjdGlvbikKK3sKKwlpbnQgaTsKKwl1bmlvbiB1NjRiaXQgYWRkcjY0OworCisJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykgeworCQlhZGRyNjQudmFsMzIubG93ZXIgPSBjLT5TR1tpXS5BZGRyLmxvd2VyOworCQlhZGRyNjQudmFsMzIudXBwZXIgPSBjLT5TR1tpXS5BZGRyLnVwcGVyOworCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIChkbWFfYWRkcl90KSBhZGRyNjQudmFsLCBjLT5TR1tpXS5MZW4sCisJCQlkYXRhX2RpcmVjdGlvbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBocHNhX21hcF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBDb21tYW5kTGlzdCAqY3AsCisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGJ1ZmxlbiwKKwkJaW50IGRhdGFfZGlyZWN0aW9uKQoreworCV9fdTY0IGFkZHI2NDsKKworCWlmIChidWZsZW4gPT0gMCB8fCBkYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpIHsKKwkJY3AtPkhlYWRlci5TR0xpc3QgPSAwOworCQljcC0+SGVhZGVyLlNHVG90YWwgPSAwOworCQlyZXR1cm47CisJfQorCisJYWRkcjY0ID0gKF9fdTY0KSBwY2lfbWFwX3NpbmdsZShwZGV2LCBidWYsIGJ1ZmxlbiwgZGF0YV9kaXJlY3Rpb24pOworCWNwLT5TR1swXS5BZGRyLmxvd2VyID0KKwkgIChfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwljcC0+U0dbMF0uQWRkci51cHBlciA9CisJICAoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwljcC0+U0dbMF0uTGVuID0gYnVmbGVuOworCWNwLT5IZWFkZXIuU0dMaXN0ID0gKF9fdTgpIDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIDE7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOworCisJYy0+d2FpdGluZyA9ICZ3YWl0OworCWVucXVldWVfY21kX2FuZF9zdGFydF9pbyhoLCBjKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKK30KKworc3RhdGljIHZvaWQgaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfd2l0aF9yZXRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYywgaW50IGRhdGFfZGlyZWN0aW9uKQoreworCWludCByZXRyeV9jb3VudCA9IDA7CisKKwlkbyB7CisJCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKGMtPmVycl9pbmZvKSk7CisJCWhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoaCwgYyk7CisJCXJldHJ5X2NvdW50Kys7CisJfSB3aGlsZSAoY2hlY2tfZm9yX3VuaXRfYXR0ZW50aW9uKGgsIGMpICYmIHJldHJ5X2NvdW50IDw9IDMpOworCWhwc2FfcGNpX3VubWFwKGgtPnBkZXYsIGMsIDEsIGRhdGFfZGlyZWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgaHBzYV9zY3NpX2ludGVycHJldF9lcnJvcihzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwKQoreworCXN0cnVjdCBFcnJvckluZm8gKmVpOworCXN0cnVjdCBkZXZpY2UgKmQgPSAmY3AtPmgtPnBkZXYtPmRldjsKKworCWVpID0gY3AtPmVycl9pbmZvOworCXN3aXRjaCAoZWktPkNvbW1hbmRTdGF0dXMpIHsKKwljYXNlIENNRF9UQVJHRVRfU1RBVFVTOgorCQlkZXZfd2FybihkLCAiY21kICVwIGhhcyBjb21wbGV0ZWQgd2l0aCBlcnJvcnNcbiIsIGNwKTsKKwkJZGV2X3dhcm4oZCwgImNtZCAlcCBoYXMgU0NTSSBTdGF0dXMgPSAleFxuIiwgY3AsCisJCQkJZWktPlNjc2lTdGF0dXMpOworCQlpZiAoZWktPlNjc2lTdGF0dXMgPT0gMCkKKwkJCWRldl93YXJuKGQsICJTQ1NJIHN0YXR1cyBpcyBhYm5vcm1hbGx5IHplcm8uICAiCisJCQkiKHByb2JhYmx5IGluZGljYXRlcyBzZWxlY3Rpb24gdGltZW91dCAiCisJCQkicmVwb3J0ZWQgaW5jb3JyZWN0bHkgZHVlIHRvIGEga25vd24gIgorCQkJImZpcm13YXJlIGJ1ZywgY2lyY2EgSnVseSwgMjAwMS4pXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfREFUQV9VTkRFUlJVTjogLyogbGV0IG1pZCBsYXllciBoYW5kbGUgaXQuICovCisJCQlkZXZfaW5mbyhkLCAiVU5ERVJSVU5cbiIpOworCQlicmVhazsKKwljYXNlIENNRF9EQVRBX09WRVJSVU46CisJCWRldl93YXJuKGQsICJjcCAlcCBoYXMgY29tcGxldGVkIHdpdGggZGF0YSBvdmVycnVuXG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0lOVkFMSUQ6IHsKKwkJLyogY29udHJvbGxlciB1bmZvcnR1bmF0ZWx5IHJlcG9ydHMgU0NTSSBwYXNzdGhydSdzCisJCSAqIHRvIG5vbi1leGlzdGVudCB0YXJnZXRzIGFzIGludmFsaWQgY29tbWFuZHMuCisJCSAqLworCQlkZXZfd2FybihkLCAiY3AgJXAgaXMgcmVwb3J0ZWQgaW52YWxpZCAocHJvYmFibHkgbWVhbnMgIgorCQkJInRhcmdldCBkZXZpY2Ugbm8gbG9uZ2VyIHByZXNlbnQpXG4iLCBjcCk7CisJCS8qIHByaW50X2J5dGVzKCh1bnNpZ25lZCBjaGFyICopIGNwLCBzaXplb2YoKmNwKSwgMSwgMCk7CisJCXByaW50X2NtZChjcCk7ICAqLworCQl9CisJCWJyZWFrOworCWNhc2UgQ01EX1BST1RPQ09MX0VSUjoKKwkJZGV2X3dhcm4oZCwgImNwICVwIGhhcyBwcm90b2NvbCBlcnJvciBcbiIsIGNwKTsKKwkJYnJlYWs7CisJY2FzZSBDTURfSEFSRFdBUkVfRVJSOgorCQkvKiBjbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsgKi8KKwkJZGV2X3dhcm4oZCwgImNwICVwIGhhZCBoYXJkd2FyZSBlcnJvclxuIiwgY3ApOworCQlicmVhazsKKwljYXNlIENNRF9DT05ORUNUSU9OX0xPU1Q6CisJCWRldl93YXJuKGQsICJjcCAlcCBoYWQgY29ubmVjdGlvbiBsb3N0XG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX0FCT1JURUQ6CisJCWRldl93YXJuKGQsICJjcCAlcCB3YXMgYWJvcnRlZFxuIiwgY3ApOworCQlicmVhazsKKwljYXNlIENNRF9BQk9SVF9GQUlMRUQ6CisJCWRldl93YXJuKGQsICJjcCAlcCByZXBvcnRzIGFib3J0IGZhaWxlZFxuIiwgY3ApOworCQlicmVhazsKKwljYXNlIENNRF9VTlNPTElDSVRFRF9BQk9SVDoKKwkJZGV2X3dhcm4oZCwgImNwICVwIGFib3J0ZWQgZHVlIHRvIGFuIHVuc29saWNpdGVkIGFib3J0XG4iLCBjcCk7CisJCWJyZWFrOworCWNhc2UgQ01EX1RJTUVPVVQ6CisJCWRldl93YXJuKGQsICJjcCAlcCB0aW1lZCBvdXRcbiIsIGNwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oZCwgImNwICVwIHJldHVybmVkIHVua25vd24gc3RhdHVzICV4XG4iLCBjcCwKKwkJCQllaS0+Q29tbWFuZFN0YXR1cyk7CisJfQorfQorCitzdGF0aWMgaW50IGhwc2Ffc2NzaV9kb19pbnF1aXJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKKwkJCXVuc2lnbmVkIGNoYXIgcGFnZSwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJdW5zaWduZWQgY2hhciBidWZzaXplKQoreworCWludCByYyA9IElPX09LOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKwlzdHJ1Y3QgRXJyb3JJbmZvICplaTsKKworCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKworCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmaWxsX2NtZChjLCBIUFNBX0lOUVVJUlksIGgsIGJ1ZiwgYnVmc2l6ZSwgcGFnZSwgc2NzaTNhZGRyLCBUWVBFX0NNRCk7CisJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfd2l0aF9yZXRyeShoLCBjLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWVpID0gYy0+ZXJyX2luZm87CisJaWYgKGVpLT5Db21tYW5kU3RhdHVzICE9IDAgJiYgZWktPkNvbW1hbmRTdGF0dXMgIT0gQ01EX0RBVEFfVU5ERVJSVU4pIHsKKwkJaHBzYV9zY3NpX2ludGVycHJldF9lcnJvcihjKTsKKwkJcmMgPSAtMTsKKwl9CisJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9zZW5kX3Jlc2V0KHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkcikKK3sKKwlpbnQgcmMgPSBJT19PSzsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJc3RydWN0IEVycm9ySW5mbyAqZWk7CisKKwljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisKKwlpZiAoYyA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZmlsbF9jbWQoYywgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHLCBoLCBOVUxMLCAwLCAwLCBzY3NpM2FkZHIsIFRZUEVfTVNHKTsKKwlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlKGgsIGMpOworCS8qIG5vIHVubWFwIG5lZWRlZCBoZXJlIGJlY2F1c2Ugbm8gZGF0YSB4ZmVyLiAqLworCisJZWkgPSBjLT5lcnJfaW5mbzsKKwlpZiAoZWktPkNvbW1hbmRTdGF0dXMgIT0gMCkgeworCQlocHNhX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGMpOworCQlyYyA9IC0xOworCX0KKwljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgaHBzYV9nZXRfcmFpZF9sZXZlbChzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwgdW5zaWduZWQgY2hhciAqcmFpZF9sZXZlbCkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciAqYnVmOworCisJKnJhaWRfbGV2ZWwgPSBSQUlEX1VOS05PV047CisJYnVmID0ga3phbGxvYyg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKwlyYyA9IGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIHNjc2kzYWRkciwgMHhDMSwgYnVmLCA2NCk7CisJaWYgKHJjID09IDApCisJCSpyYWlkX2xldmVsID0gYnVmWzhdOworCWlmICgqcmFpZF9sZXZlbCA+IFJBSURfVU5LTk9XTikKKwkJKnJhaWRfbGV2ZWwgPSBSQUlEX1VOS05PV047CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm47Cit9CisKKy8qIEdldCB0aGUgZGV2aWNlIGlkIGZyb20gaW5xdWlyeSBwYWdlIDB4ODMgKi8KK3N0YXRpYyBpbnQgaHBzYV9nZXRfZGV2aWNlX2lkKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKKwl1bnNpZ25lZCBjaGFyICpkZXZpY2VfaWQsIGludCBidWZsZW4pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWlmIChidWZsZW4gPiAxNikKKwkJYnVmbGVuID0gMTY7CisJYnVmID0ga3phbGxvYyg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtMTsKKwlyYyA9IGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIHNjc2kzYWRkciwgMHg4MywgYnVmLCA2NCk7CisJaWYgKHJjID09IDApCisJCW1lbWNweShkZXZpY2VfaWQsICZidWZbOF0sIGJ1Zmxlbik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmMgIT0gMDsKK30KKworc3RhdGljIGludCBocHNhX3Njc2lfZG9fcmVwb3J0X2x1bnMoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGxvZ2ljYWwsCisJCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpidWYsIGludCBidWZzaXplLAorCQlpbnQgZXh0ZW5kZWRfcmVzcG9uc2UpCit7CisJaW50IHJjID0gSU9fT0s7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyWzhdOworCXN0cnVjdCBFcnJvckluZm8gKmVpOworCisJYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbXNldCgmc2NzaTNhZGRyWzBdLCAwLCA4KTsgLyogYWRkcmVzcyB0aGUgY29udHJvbGxlciAqLworCisJZmlsbF9jbWQoYywgbG9naWNhbCA/IEhQU0FfUkVQT1JUX0xPRyA6IEhQU0FfUkVQT1JUX1BIWVMsIGgsCisJCWJ1ZiwgYnVmc2l6ZSwgMCwgc2NzaTNhZGRyLCBUWVBFX0NNRCk7CisJaWYgKGV4dGVuZGVkX3Jlc3BvbnNlKQorCQljLT5SZXF1ZXN0LkNEQlsxXSA9IGV4dGVuZGVkX3Jlc3BvbnNlOworCWhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX3dpdGhfcmV0cnkoaCwgYywgUENJX0RNQV9GUk9NREVWSUNFKTsKKwllaSA9IGMtPmVycl9pbmZvOworCWlmIChlaS0+Q29tbWFuZFN0YXR1cyAhPSAwICYmCisJICAgIGVpLT5Db21tYW5kU3RhdHVzICE9IENNRF9EQVRBX1VOREVSUlVOKSB7CisJCWhwc2Ffc2NzaV9pbnRlcnByZXRfZXJyb3IoYyk7CisJCXJjID0gLTE7CisJfQorCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGludCBocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCQlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqYnVmLAorCQlpbnQgYnVmc2l6ZSwgaW50IGV4dGVuZGVkX3Jlc3BvbnNlKQoreworCXJldHVybiBocHNhX3Njc2lfZG9fcmVwb3J0X2x1bnMoaCwgMCwgYnVmLCBidWZzaXplLCBleHRlbmRlZF9yZXNwb25zZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhwc2Ffc2NzaV9kb19yZXBvcnRfbG9nX2x1bnMoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwkJc3RydWN0IFJlcG9ydExVTmRhdGEgKmJ1ZiwgaW50IGJ1ZnNpemUpCit7CisJcmV0dXJuIGhwc2Ffc2NzaV9kb19yZXBvcnRfbHVucyhoLCAxLCBidWYsIGJ1ZnNpemUsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHBzYV9zZXRfYnVzX3RhcmdldF9sdW4oc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2aWNlLAorCWludCBidXMsIGludCB0YXJnZXQsIGludCBsdW4pCit7CisJZGV2aWNlLT5idXMgPSBidXM7CisJZGV2aWNlLT50YXJnZXQgPSB0YXJnZXQ7CisJZGV2aWNlLT5sdW4gPSBsdW47Cit9CisKK3N0YXRpYyBpbnQgaHBzYV91cGRhdGVfZGV2aWNlX2luZm8oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSkKK3sKKyNkZWZpbmUgT0JEUl9UQVBFX0lOUV9TSVpFIDQ5CisJdW5zaWduZWQgY2hhciAqaW5xX2J1ZmYgPSBOVUxMOworCisJaW5xX2J1ZmYgPSBrbWFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnFfYnVmZikKKwkJZ290byBiYWlsX291dDsKKworCW1lbXNldChpbnFfYnVmZiwgMCwgT0JEUl9UQVBFX0lOUV9TSVpFKTsKKwkvKiBEbyBhbiBpbnF1aXJ5IHRvIHRoZSBkZXZpY2UgdG8gc2VlIHdoYXQgaXQgaXMuICovCisJaWYgKGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIHNjc2kzYWRkciwgMCwgaW5xX2J1ZmYsCisJCSh1bnNpZ25lZCBjaGFyKSBPQkRSX1RBUEVfSU5RX1NJWkUpICE9IDApIHsKKwkJLyogSW5xdWlyeSBmYWlsZWQgKG1zZyBwcmludGVkIGFscmVhZHkpICovCisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwKKwkJCSJocHNhX3VwZGF0ZV9kZXZpY2VfaW5mbzogaW5xdWlyeSBmYWlsZWRcbiIpOworCQlnb3RvIGJhaWxfb3V0OworCX0KKworCS8qIEFzIGEgc2lkZSBlZmZlY3QsIHJlY29yZCB0aGUgZmlybXdhcmUgdmVyc2lvbiBudW1iZXIKKwkgKiBpZiB3ZSBoYXBwZW4gdG8gYmUgdGFsa2luZyB0byB0aGUgUkFJRCBjb250cm9sbGVyLgorCSAqLworCWlmIChpc19oYmFfbHVuaWQoc2NzaTNhZGRyKSkKKwkJbWVtY3B5KGgtPmZpcm1fdmVyLCAmaW5xX2J1ZmZbMzJdLCA0KTsKKworCXRoaXNfZGV2aWNlLT5kZXZ0eXBlID0gKGlucV9idWZmWzBdICYgMHgxZik7CisJbWVtY3B5KHRoaXNfZGV2aWNlLT5zY3NpM2FkZHIsIHNjc2kzYWRkciwgOCk7CisJbWVtY3B5KHRoaXNfZGV2aWNlLT52ZW5kb3IsICZpbnFfYnVmZls4XSwKKwkJc2l6ZW9mKHRoaXNfZGV2aWNlLT52ZW5kb3IpKTsKKwltZW1jcHkodGhpc19kZXZpY2UtPm1vZGVsLCAmaW5xX2J1ZmZbMTZdLAorCQlzaXplb2YodGhpc19kZXZpY2UtPm1vZGVsKSk7CisJbWVtY3B5KHRoaXNfZGV2aWNlLT5yZXZpc2lvbiwgJmlucV9idWZmWzMyXSwKKwkJc2l6ZW9mKHRoaXNfZGV2aWNlLT5yZXZpc2lvbikpOworCW1lbXNldCh0aGlzX2RldmljZS0+ZGV2aWNlX2lkLCAwLAorCQlzaXplb2YodGhpc19kZXZpY2UtPmRldmljZV9pZCkpOworCWhwc2FfZ2V0X2RldmljZV9pZChoLCBzY3NpM2FkZHIsIHRoaXNfZGV2aWNlLT5kZXZpY2VfaWQsCisJCXNpemVvZih0aGlzX2RldmljZS0+ZGV2aWNlX2lkKSk7CisKKwlpZiAodGhpc19kZXZpY2UtPmRldnR5cGUgPT0gVFlQRV9ESVNLICYmCisJCWlzX2xvZ2ljYWxfZGV2X2FkZHJfbW9kZShzY3NpM2FkZHIpKQorCQlocHNhX2dldF9yYWlkX2xldmVsKGgsIHNjc2kzYWRkciwgJnRoaXNfZGV2aWNlLT5yYWlkX2xldmVsKTsKKwllbHNlCisJCXRoaXNfZGV2aWNlLT5yYWlkX2xldmVsID0gUkFJRF9VTktOT1dOOworCisJa2ZyZWUoaW5xX2J1ZmYpOworCXJldHVybiAwOworCitiYWlsX291dDoKKwlrZnJlZShpbnFfYnVmZik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICptc2EyeHh4X21vZGVsW10gPSB7CisJIk1TQTIwMTIiLAorCSJNU0EyMDI0IiwKKwkiTVNBMjMxMiIsCisJIk1TQTIzMjQiLAorCU5VTEwsCit9OworCitzdGF0aWMgaW50IGlzX21zYTJ4eHgoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2aWNlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgbXNhMnh4eF9tb2RlbFtpXTsgaSsrKQorCQlpZiAoc3RybmNtcChkZXZpY2UtPm1vZGVsLCBtc2EyeHh4X21vZGVsW2ldLAorCQkJc3RybGVuKG1zYTJ4eHhfbW9kZWxbaV0pKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBhc3NpZ24gYnVzLCB0YXJnZXQsIGx1biBtYXBwaW5nIG9mIGRldmljZXMuCisgKiBQdXRzIG5vbi1tc2EyeHh4IGxvZ2ljYWwgdm9sdW1lcyBvbiBidXMgMCwgbXNhMnh4eCBsb2dpY2FsCisgKiB2b2x1bWVzIG9uIGJ1cyAxLCBwaHlzaWNhbCBkZXZpY2VzIG9uIGJ1cyAyLiBhbmQgdGhlIGhiYSBvbiBidXMgMy4KKyAqIExvZ2ljYWwgZHJpdmUgdGFyZ2V0IGFuZCBsdW4gYXJlIGFzc2lnbmVkIGF0IHRoaXMgdGltZSwgYnV0CisgKiBwaHlzaWNhbCBkZXZpY2UgbHVuIGFuZCB0YXJnZXQgYXNzaWdubWVudCBhcmUgZGVmZXJyZWQgKGFzc2lnbmVkCisgKiBpbiBocHNhX2ZpbmRfdGFyZ2V0X2x1biwgY2FsbGVkIGJ5IGhwc2Ffc2NzaV9hZGRfZW50cnkuKQorICovCitzdGF0aWMgdm9pZCBmaWd1cmVfYnVzX3RhcmdldF9sdW4oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlfX3U4ICpsdW5hZGRyYnl0ZXMsIGludCAqYnVzLCBpbnQgKnRhcmdldCwgaW50ICpsdW4sCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2aWNlKQoreworCisJX191MzIgbHVuaWQ7CisKKwlpZiAoaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGx1bmFkZHJieXRlcykpIHsKKwkJLyogbG9naWNhbCBkZXZpY2UgKi8KKwkJbWVtY3B5KCZsdW5pZCwgbHVuYWRkcmJ5dGVzLCBzaXplb2YobHVuaWQpKTsKKwkJbHVuaWQgPSBsZTMyX3RvX2NwdShsdW5pZCk7CisKKwkJaWYgKGlzX21zYTJ4eHgoaCwgZGV2aWNlKSkgeworCQkJKmJ1cyA9IDE7CisJCQkqdGFyZ2V0ID0gKGx1bmlkID4+IDE2KSAmIDB4M2ZmZjsKKwkJCSpsdW4gPSBsdW5pZCAmIDB4MDBmZjsKKwkJfSBlbHNlIHsKKwkJCSpidXMgPSAwOworCQkJKmx1biA9IDA7CisJCQkqdGFyZ2V0ID0gbHVuaWQgJiAweDNmZmY7CisJCX0KKwl9IGVsc2UgeworCQkvKiBwaHlzaWNhbCBkZXZpY2UgKi8KKwkJaWYgKGlzX2hiYV9sdW5pZChsdW5hZGRyYnl0ZXMpKQorCQkJKmJ1cyA9IDM7CisJCWVsc2UKKwkJCSpidXMgPSAyOworCQkqdGFyZ2V0ID0gLTE7CisJCSpsdW4gPSAtMTsgLyogd2Ugd2lsbCBmaWxsIHRoZXNlIGluIGxhdGVyLiAqLworCX0KK30KKworLyoKKyAqIElmIHRoZXJlIGlzIG5vIGx1biAwIG9uIGEgdGFyZ2V0LCBsaW51eCB3b24ndCBmaW5kIGFueSBkZXZpY2VzLgorICogRm9yIHRoZSBNU0EyeHh4IGJveGVzLCB3ZSBoYXZlIHRvIG1hbnVhbGx5IGRldGVjdCB0aGUgZW5jbG9zdXJlCisgKiB3aGljaCBpcyBhdCBsdW4gemVybywgYXMgQ0NJU1NfUkVQT1JUX1BIWVNJQ0FMX0xVTlMgZG9lc24ndCByZXBvcnQKKyAqIGl0IGZvciBzb21lIHJlYXNvbi4gICp0bXBkZXZpY2UgaXMgdGhlIHRhcmdldCB3ZSdyZSBhZGRpbmcsCisgKiB0aGlzX2RldmljZSBpcyBhIHBvaW50ZXIgaW50byB0aGUgY3VycmVudCBlbGVtZW50IG9mIGN1cnJlbnRzZFtdCisgKiB0aGF0IHdlJ3JlIGJ1aWxkaW5nIHVwIGluIHVwZGF0ZV9zY3NpX2RldmljZXMoKSwgYmVsb3cuCisgKiBsdW56ZXJvYml0cyBpcyBhIGJpdG1hcCB0aGF0IHRyYWNrcyB3aGljaCB0YXJnZXRzIGFscmVhZHkgaGF2ZSBhCisgKiBsdW4gMCBhc3NpZ25lZC4KKyAqIFJldHVybnMgMSBpZiBhbiBlbmNsb3N1cmUgd2FzIGFkZGVkLCAwIGlmIG5vdC4KKyAqLworc3RhdGljIGludCBhZGRfbXNhMnh4eF9lbmNsb3N1cmVfZGV2aWNlKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqdG1wZGV2aWNlLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRoaXNfZGV2aWNlLCBfX3U4ICpsdW5hZGRyYnl0ZXMsCisJaW50IGJ1cywgaW50IHRhcmdldCwgaW50IGx1biwgdW5zaWduZWQgbG9uZyBsdW56ZXJvYml0c1tdLAorCWludCAqbm1zYTJ4eHhfZW5jbG9zdXJlcykKK3sKKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsKKworCWlmICh0ZXN0X2JpdCh0YXJnZXQsIGx1bnplcm9iaXRzKSkKKwkJcmV0dXJuIDA7IC8qIFRoZXJlIGlzIGFscmVhZHkgYSBsdW4gMCBvbiB0aGlzIHRhcmdldC4gKi8KKworCWlmICghaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGx1bmFkZHJieXRlcykpCisJCXJldHVybiAwOyAvKiBJdCdzIHRoZSBsb2dpY2FsIHRhcmdldHMgdGhhdCBtYXkgbGFjayBsdW4gMC4gKi8KKworCWlmICghaXNfbXNhMnh4eChoLCB0bXBkZXZpY2UpKQorCQlyZXR1cm4gMDsgLyogSXQncyBvbmx5IHRoZSBNU0EyeHh4IHRoYXQgaGF2ZSB0aGlzIHByb2JsZW0uICovCisKKwlpZiAobHVuID09IDApIC8qIGlmIGx1biBpcyAwLCB0aGVuIG9idmlvdXNseSB3ZSBoYXZlIGEgbHVuIDAuICovCisJCXJldHVybiAwOworCisJaWYgKGlzX2hiYV9sdW5pZChzY3NpM2FkZHIpKQorCQlyZXR1cm4gMDsgLyogRG9uJ3QgYWRkIHRoZSBSQUlEIGNvbnRyb2xsZXIgaGVyZS4gKi8KKworI2RlZmluZSBNQVhfTVNBMlhYWF9FTkNMT1NVUkVTIDMyCisJaWYgKCpubXNhMnh4eF9lbmNsb3N1cmVzID49IE1BWF9NU0EyWFhYX0VOQ0xPU1VSRVMpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIk1heGltdW0gbnVtYmVyIG9mIE1TQTJYWFggIgorCQkJImVuY2xvc3VyZXMgZXhjZWVkZWQuICBDaGVjayB5b3VyIGhhcmR3YXJlICIKKwkJCSJjb25maWd1cmF0aW9uLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoc2NzaTNhZGRyLCAwLCA4KTsKKwlzY3NpM2FkZHJbM10gPSB0YXJnZXQ7CisJaWYgKGhwc2FfdXBkYXRlX2RldmljZV9pbmZvKGgsIHNjc2kzYWRkciwgdGhpc19kZXZpY2UpKQorCQlyZXR1cm4gMDsKKwkoKm5tc2EyeHh4X2VuY2xvc3VyZXMpKys7CisJaHBzYV9zZXRfYnVzX3RhcmdldF9sdW4odGhpc19kZXZpY2UsIGJ1cywgdGFyZ2V0LCAwKTsKKwlzZXRfYml0KHRhcmdldCwgbHVuemVyb2JpdHMpOworCXJldHVybiAxOworfQorCisvKgorICogRG8gQ0lTU19SRVBPUlRfUEhZUyBhbmQgQ0lTU19SRVBPUlRfTE9HLiAgRGF0YSBpcyByZXR1cm5lZCBpbiBwaHlzZGV2LAorICogbG9nZGV2LiAgVGhlIG51bWJlciBvZiBsdW5zIGluIHBoeXNkZXYgYW5kIGxvZ2RldiBhcmUgcmV0dXJuZWQgaW4KKyAqICpucGh5c2ljYWxzIGFuZCAqbmxvZ2ljYWxzLCByZXNwZWN0aXZlbHkuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGhwc2FfZ2F0aGVyX2x1bl9pbmZvKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJaW50IHJlcG9ydGx1bnNpemUsCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIF9fdTMyICpucGh5c2ljYWxzLAorCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIF9fdTMyICpubG9naWNhbHMpCit7CisJaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKGgsIHBoeXNkZXYsIHJlcG9ydGx1bnNpemUsIDApKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInJlcG9ydCBwaHlzaWNhbCBMVU5zIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbWNweShucGh5c2ljYWxzLCAmcGh5c2Rldi0+TFVOTGlzdExlbmd0aFswXSwgc2l6ZW9mKCpucGh5c2ljYWxzKSk7CisJKm5waHlzaWNhbHMgPSBiZTMyX3RvX2NwdSgqbnBoeXNpY2FscykgLyA4OworI2lmZGVmIERFQlVHCisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIm51bWJlciBvZiBwaHlzaWNhbCBsdW5zIGlzICVkXG4iLCAqbnBoeXNpY2Fscyk7CisjZW5kaWYKKwlpZiAoKm5waHlzaWNhbHMgPiBIUFNBX01BWF9QSFlTX0xVTikgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAibWF4aW11bSBwaHlzaWNhbCBMVU5zICglZCkgZXhjZWVkZWQuIgorCQkJIiAgJWQgTFVOcyBpZ25vcmVkLlxuIiwgSFBTQV9NQVhfUEhZU19MVU4sCisJCQkqbnBoeXNpY2FscyAtIEhQU0FfTUFYX1BIWVNfTFVOKTsKKwkJKm5waHlzaWNhbHMgPSBIUFNBX01BWF9QSFlTX0xVTjsKKwl9CisJaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfbG9nX2x1bnMoaCwgbG9nZGV2LCByZXBvcnRsdW5zaXplKSkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJyZXBvcnQgbG9naWNhbCBMVU5zIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbWNweShubG9naWNhbHMsICZsb2dkZXYtPkxVTkxpc3RMZW5ndGhbMF0sIHNpemVvZigqbmxvZ2ljYWxzKSk7CisJKm5sb2dpY2FscyA9IGJlMzJfdG9fY3B1KCpubG9naWNhbHMpIC8gODsKKyNpZmRlZiBERUJVRworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJudW1iZXIgb2YgbG9naWNhbCBsdW5zIGlzICVkXG4iLCAqbmxvZ2ljYWxzKTsKKyNlbmRpZgorCS8qIFJlamVjdCBMb2dpY2FscyBpbiBleGNlc3Mgb2Ygb3VyIG1heCBjYXBhYmlsaXR5LiAqLworCWlmICgqbmxvZ2ljYWxzID4gSFBTQV9NQVhfTFVOKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkibWF4aW11bSBsb2dpY2FsIExVTnMgKCVkKSBleGNlZWRlZC4gICIKKwkJCSIlZCBMVU5zIGlnbm9yZWQuXG4iLCBIUFNBX01BWF9MVU4sCisJCQkqbmxvZ2ljYWxzIC0gSFBTQV9NQVhfTFVOKTsKKwkJCSpubG9naWNhbHMgPSBIUFNBX01BWF9MVU47CisJfQorCWlmICgqbmxvZ2ljYWxzICsgKm5waHlzaWNhbHMgPiBIUFNBX01BWF9QSFlTX0xVTikgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJIm1heGltdW0gbG9naWNhbCArIHBoeXNpY2FsIExVTnMgKCVkKSBleGNlZWRlZC4gIgorCQkJIiVkIExVTnMgaWdub3JlZC5cbiIsIEhQU0FfTUFYX1BIWVNfTFVOLAorCQkJKm5waHlzaWNhbHMgKyAqbmxvZ2ljYWxzIC0gSFBTQV9NQVhfUEhZU19MVU4pOworCQkqbmxvZ2ljYWxzID0gSFBTQV9NQVhfUEhZU19MVU4gLSAqbnBoeXNpY2FsczsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vKQoreworCS8qIHRoZSBpZGVhIGhlcmUgaXMgd2UgY291bGQgZ2V0IG5vdGlmaWVkCisJICogdGhhdCBzb21lIGRldmljZXMgaGF2ZSBjaGFuZ2VkLCBzbyB3ZSBkbyBhIHJlcG9ydAorCSAqIHBoeXNpY2FsIGx1bnMgYW5kIHJlcG9ydCBsb2dpY2FsIGx1bnMgY21kLCBhbmQgYWRqdXN0CisJICogb3VyIGxpc3Qgb2YgZGV2aWNlcyBhY2NvcmRpbmdseS4KKwkgKgorCSAqIFRoZSBzY3NpM2FkZHIncyBvZiBkZXZpY2VzIHdvbid0IGNoYW5nZSBzbyBsb25nIGFzIHRoZQorCSAqIGFkYXB0ZXIgaXMgbm90IHJlc2V0LiAgVGhhdCBtZWFucyB3ZSBjYW4gcmVzY2FuIGFuZAorCSAqIHRlbGwgd2hpY2ggZGV2aWNlcyB3ZSBhbHJlYWR5IGtub3cgYWJvdXQsIHZzLiBuZXcKKwkgKiBkZXZpY2VzLCB2cy4gIGRpc2FwcGVhcmluZyBkZXZpY2VzLgorCSAqLworCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2X2xpc3QgPSBOVUxMOworCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXZfbGlzdCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqaW5xX2J1ZmYgPSBOVUxMOworCV9fdTMyIG5waHlzaWNhbHMgPSAwOworCV9fdTMyIG5sb2dpY2FscyA9IDA7CisJX191MzIgbmRldl9hbGxvY2F0ZWQgPSAwOworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKipjdXJyZW50c2QsICp0aGlzX2RldmljZSwgKnRtcGRldmljZTsKKwlpbnQgbmN1cnJlbnQgPSAwOworCWludCByZXBvcnRsdW5zaXplID0gc2l6ZW9mKCpwaHlzZGV2X2xpc3QpICsgSFBTQV9NQVhfUEhZU19MVU4gKiA4OworCWludCBpLCBubXNhMnh4eF9lbmNsb3N1cmVzLCBuZGV2c190b19hbGxvY2F0ZTsKKwlpbnQgYnVzLCB0YXJnZXQsIGx1bjsKKwlERUNMQVJFX0JJVE1BUChsdW56ZXJvYml0cywgSFBTQV9NQVhfVEFSR0VUU19QRVJfQ1RMUik7CisKKwljdXJyZW50c2QgPSBremFsbG9jKHNpemVvZigqY3VycmVudHNkKSAqIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBLAorCQlHRlBfS0VSTkVMKTsKKwlwaHlzZGV2X2xpc3QgPSBremFsbG9jKHJlcG9ydGx1bnNpemUsIEdGUF9LRVJORUwpOworCWxvZ2Rldl9saXN0ID0ga3phbGxvYyhyZXBvcnRsdW5zaXplLCBHRlBfS0VSTkVMKTsKKwlpbnFfYnVmZiA9IGttYWxsb2MoT0JEUl9UQVBFX0lOUV9TSVpFLCBHRlBfS0VSTkVMKTsKKwl0bXBkZXZpY2UgPSBremFsbG9jKHNpemVvZigqdG1wZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWN1cnJlbnRzZCB8fCAhcGh5c2Rldl9saXN0IHx8ICFsb2dkZXZfbGlzdCB8fAorCQkhaW5xX2J1ZmYgfHwgIXRtcGRldmljZSkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldChsdW56ZXJvYml0cywgMCwgc2l6ZW9mKGx1bnplcm9iaXRzKSk7CisKKwlpZiAoaHBzYV9nYXRoZXJfbHVuX2luZm8oaCwgcmVwb3J0bHVuc2l6ZSwgcGh5c2Rldl9saXN0LCAmbnBoeXNpY2FscywKKwkJCWxvZ2Rldl9saXN0LCAmbmxvZ2ljYWxzKSkKKwkJZ290byBvdXQ7CisKKwkvKiBXZSBtaWdodCBzZWUgdXAgdG8gMzIgTVNBMnh4eCBlbmNsb3N1cmVzLCBhY3R1YWxseSA4IG9mIHRoZW0KKwkgKiBidXQgZWFjaCBvZiB0aGVtIDQgdGltZXMgdGhyb3VnaCBkaWZmZXJlbnQgcGF0aHMuICBUaGUgcGx1cyAxCisJICogaXMgZm9yIHRoZSBSQUlEIGNvbnRyb2xsZXIuCisJICovCisJbmRldnNfdG9fYWxsb2NhdGUgPSBucGh5c2ljYWxzICsgbmxvZ2ljYWxzICsgTUFYX01TQTJYWFhfRU5DTE9TVVJFUyArIDE7CisKKwkvKiBBbGxvY2F0ZSB0aGUgcGVyIGRldmljZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IG5kZXZzX3RvX2FsbG9jYXRlOyBpKyspIHsKKwkJY3VycmVudHNkW2ldID0ga3phbGxvYyhzaXplb2YoKmN1cnJlbnRzZFtpXSksIEdGUF9LRVJORUwpOworCQlpZiAoIWN1cnJlbnRzZFtpXSkgeworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkgYXQgJXM6JWRcbiIsCisJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW5kZXZfYWxsb2NhdGVkKys7CisJfQorCisJLyogYWRqdXN0IG91ciB0YWJsZSBvZiBkZXZpY2VzICovCisJbm1zYTJ4eHhfZW5jbG9zdXJlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5waHlzaWNhbHMgKyBubG9naWNhbHMgKyAxOyBpKyspIHsKKwkJX191OCAqbHVuYWRkcmJ5dGVzOworCisJCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIExVTiBJRCBpbmZvIGlzIGNvbWluZyBmcm9tICovCisJCWlmIChpIDwgbnBoeXNpY2FscykKKwkJCWx1bmFkZHJieXRlcyA9ICZwaHlzZGV2X2xpc3QtPkxVTltpXVswXTsKKwkJZWxzZQorCQkJaWYgKGkgPCBucGh5c2ljYWxzICsgbmxvZ2ljYWxzKQorCQkJCWx1bmFkZHJieXRlcyA9CisJCQkJCSZsb2dkZXZfbGlzdC0+TFVOW2ktbnBoeXNpY2Fsc11bMF07CisJCQllbHNlIC8qIGphbSBpbiB0aGUgUkFJRCBjb250cm9sbGVyIGF0IHRoZSBlbmQgKi8KKwkJCQlsdW5hZGRyYnl0ZXMgPSBSQUlEX0NUTFJfTFVOSUQ7CisKKwkJLyogc2tpcCBtYXNrZWQgcGh5c2ljYWwgZGV2aWNlcy4gKi8KKwkJaWYgKGx1bmFkZHJieXRlc1szXSAmIDB4QzAgJiYgaSA8IG5waHlzaWNhbHMpCisJCQljb250aW51ZTsKKworCQkvKiBHZXQgZGV2aWNlIHR5cGUsIHZlbmRvciwgbW9kZWwsIGRldmljZSBpZCAqLworCQlpZiAoaHBzYV91cGRhdGVfZGV2aWNlX2luZm8oaCwgbHVuYWRkcmJ5dGVzLCB0bXBkZXZpY2UpKQorCQkJY29udGludWU7IC8qIHNraXAgaXQgaWYgd2UgY2FuJ3QgdGFsayB0byBpdC4gKi8KKwkJZmlndXJlX2J1c190YXJnZXRfbHVuKGgsIGx1bmFkZHJieXRlcywgJmJ1cywgJnRhcmdldCwgJmx1biwKKwkJCXRtcGRldmljZSk7CisJCXRoaXNfZGV2aWNlID0gY3VycmVudHNkW25jdXJyZW50XTsKKworCQkvKgorCQkgKiBGb3IgdGhlIG1zYTJ4eHggYm94ZXMsIHdlIGhhdmUgdG8gaW5zZXJ0IGEgTFVOIDAgd2hpY2gKKwkJICogZG9lc24ndCBzaG93IHVwIGluIENDSVNTX1JFUE9SVF9QSFlTSUNBTCBkYXRhLCBidXQgdGhlcmUKKwkJICogaXMgbm9uZXRoZWxlc3MgYW4gZW5jbG9zdXJlIGRldmljZSB0aGVyZS4gIFdlIGhhdmUgdG8KKwkJICogcHJlc2VudCB0aGF0IG90aGVyd2lzZSBsaW51eCB3b24ndCBmaW5kIGFueXRoaW5nIGlmCisJCSAqIHRoZXJlIGlzIG5vIGx1biAwLgorCQkgKi8KKwkJaWYgKGFkZF9tc2EyeHh4X2VuY2xvc3VyZV9kZXZpY2UoaCwgdG1wZGV2aWNlLCB0aGlzX2RldmljZSwKKwkJCQlsdW5hZGRyYnl0ZXMsIGJ1cywgdGFyZ2V0LCBsdW4sIGx1bnplcm9iaXRzLAorCQkJCSZubXNhMnh4eF9lbmNsb3N1cmVzKSkgeworCQkJbmN1cnJlbnQrKzsKKwkJCXRoaXNfZGV2aWNlID0gY3VycmVudHNkW25jdXJyZW50XTsKKwkJfQorCisJCSp0aGlzX2RldmljZSA9ICp0bXBkZXZpY2U7CisJCWhwc2Ffc2V0X2J1c190YXJnZXRfbHVuKHRoaXNfZGV2aWNlLCBidXMsIHRhcmdldCwgbHVuKTsKKworCQlzd2l0Y2ggKHRoaXNfZGV2aWNlLT5kZXZ0eXBlKSB7CisJCWNhc2UgVFlQRV9ST006IHsKKwkJCS8qIFdlIGRvbid0ICpyZWFsbHkqIHN1cHBvcnQgYWN0dWFsIENELVJPTSBkZXZpY2VzLAorCQkJICoganVzdCAiT25lIEJ1dHRvbiBEaXNhc3RlciBSZWNvdmVyeSIgdGFwZSBkcml2ZQorCQkJICogd2hpY2ggdGVtcG9yYXJpbHkgcHJldGVuZHMgdG8gYmUgYSBDRC1ST00gZHJpdmUuCisJCQkgKiBTbyB3ZSBjaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMgcmVhbGx5IGFuIE9CRFIgdGFwZQorCQkJICogZGV2aWNlIGJ5IGNoZWNraW5nIGZvciAiJERSLTEwIiBpbiBieXRlcyA0My00OCBvZgorCQkJICogdGhlIGlucXVpcnkgZGF0YS4KKwkJCSAqLworCQkJCWNoYXIgb2Jkcl9zaWdbN107CisjZGVmaW5lIE9CRFJfVEFQRV9TSUcgIiREUi0xMCIKKwkJCQlzdHJuY3B5KG9iZHJfc2lnLCAmaW5xX2J1ZmZbNDNdLCA2KTsKKwkJCQlvYmRyX3NpZ1s2XSA9ICdcMCc7CisJCQkJaWYgKHN0cm5jbXAob2Jkcl9zaWcsIE9CRFJfVEFQRV9TSUcsIDYpICE9IDApCisJCQkJCS8qIE5vdCBPQkRSIGRldmljZSwgaWdub3JlIGl0LiAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJCW5jdXJyZW50Kys7CisJCQlicmVhazsKKwkJY2FzZSBUWVBFX0RJU0s6CisJCQlpZiAoaSA8IG5waHlzaWNhbHMpCisJCQkJYnJlYWs7CisJCQluY3VycmVudCsrOworCQkJYnJlYWs7CisJCWNhc2UgVFlQRV9UQVBFOgorCQljYXNlIFRZUEVfTUVESVVNX0NIQU5HRVI6CisJCQluY3VycmVudCsrOworCQkJYnJlYWs7CisJCWNhc2UgVFlQRV9SQUlEOgorCQkJLyogT25seSBwcmVzZW50IHRoZSBTbWFydGFycmF5IEhCQSBhcyBhIFJBSUQgY29udHJvbGxlci4KKwkJCSAqIElmIGl0J3MgYSBSQUlEIGNvbnRyb2xsZXIgb3RoZXIgdGhhbiB0aGUgSEJBIGl0c2VsZgorCQkJICogKGFuIGV4dGVybmFsIFJBSUQgY29udHJvbGxlciwgTVNBNTAwIG9yIHNpbWlsYXIpCisJCQkgKiBkb24ndCBwcmVzZW50IGl0LgorCQkJICovCisJCQlpZiAoIWlzX2hiYV9sdW5pZChsdW5hZGRyYnl0ZXMpKQorCQkJCWJyZWFrOworCQkJbmN1cnJlbnQrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKG5jdXJyZW50ID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKQorCQkJYnJlYWs7CisJfQorCWFkanVzdF9ocHNhX3Njc2lfdGFibGUoaCwgaG9zdG5vLCBjdXJyZW50c2QsIG5jdXJyZW50KTsKK291dDoKKwlrZnJlZSh0bXBkZXZpY2UpOworCWZvciAoaSA9IDA7IGkgPCBuZGV2X2FsbG9jYXRlZDsgaSsrKQorCQlrZnJlZShjdXJyZW50c2RbaV0pOworCWtmcmVlKGN1cnJlbnRzZCk7CisJa2ZyZWUoaW5xX2J1ZmYpOworCWtmcmVlKHBoeXNkZXZfbGlzdCk7CisJa2ZyZWUobG9nZGV2X2xpc3QpOworCXJldHVybjsKK30KKworLyogaHBzYV9zY2F0dGVyX2dhdGhlciB0YWtlcyBhIHN0cnVjdCBzY3NpX2NtbmQsIChjbWQpLCBhbmQgZG9lcyB0aGUgcGNpCisgKiBkbWEgbWFwcGluZyAgYW5kIGZpbGxzIGluIHRoZSBzY2F0dGVyIGdhdGhlciBlbnRyaWVzIG9mIHRoZQorICogaHBzYSBjb21tYW5kLCBjcC4KKyAqLworc3RhdGljIGludCBocHNhX3NjYXR0ZXJfZ2F0aGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwLAorCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCV9fdTY0IGFkZHI2NDsKKwlpbnQgdXNlX3NnLCBpOworCisJQlVHX09OKHNjc2lfc2dfY291bnQoY21kKSA+IE1BWFNHRU5UUklFUyk7CisKKwl1c2Vfc2cgPSBzY3NpX2RtYV9tYXAoY21kKTsKKwlpZiAodXNlX3NnIDwgMCkKKwkJcmV0dXJuIHVzZV9zZzsKKworCWlmICghdXNlX3NnKQorCQlnb3RvIHNnbGlzdF9maW5pc2hlZDsKKworCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgdXNlX3NnLCBpKSB7CisJCWFkZHI2NCA9IChfX3U2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQlsZW4gID0gc2dfZG1hX2xlbihzZyk7CisJCWNwLT5TR1tpXS5BZGRyLmxvd2VyID0KKwkJCShfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkJY3AtPlNHW2ldLkFkZHIudXBwZXIgPQorCQkJKF9fdTMyKSAoKGFkZHI2NCA+PiAzMikgJiAoX191NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJCWNwLT5TR1tpXS5MZW4gPSBsZW47CisJCWNwLT5TR1tpXS5FeHQgPSAwOyAgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLworCX0KKworc2dsaXN0X2ZpbmlzaGVkOgorCisJY3AtPkhlYWRlci5TR0xpc3QgPSAoX191OCkgdXNlX3NnOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBocHNhX3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCisJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXY7CisJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbOF07CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBHZXQgdGhlIHB0ciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUgb3V0IG9mIGNtZC0+aG9zdC4gKi8KKwloID0gc2Rldl90b19oYmEoY21kLT5kZXZpY2UpOworCWRldiA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpZiAoIWRldikgeworCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlkb25lKGNtZCk7CisJCXJldHVybiAwOworCX0KKwltZW1jcHkoc2NzaTNhZGRyLCBkZXYtPnNjc2kzYWRkciwgc2l6ZW9mKHNjc2kzYWRkcikpOworCisJLyogTmVlZCBhIGxvY2sgYXMgdGhpcyBpcyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgcG9vbCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJYyA9IGNtZF9hbGxvYyhoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCisJLyogRmlsbCBpbiB0aGUgY29tbWFuZCBsaXN0IGhlYWRlciAqLworCisJY21kLT5zY3NpX2RvbmUgPSBkb25lOyAgICAvKiBzYXZlIHRoaXMgZm9yIHVzZSBieSBjb21wbGV0aW9uIGNvZGUgKi8KKworCS8qIHNhdmUgYyBpbiBjYXNlIHdlIGhhdmUgdG8gYWJvcnQgaXQgICovCisJY21kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgYzsKKworCWMtPmNtZF90eXBlID0gQ01EX1NDU0k7CisJYy0+c2NzaV9jbWQgPSBjbWQ7CisJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgLyogdW51c2VkIGluIHNpbXBsZSBtb2RlICovCisJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlc1swXSwgJnNjc2kzYWRkclswXSwgOCk7CisJYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1c2FkZHI7ICAvKiBVc2Ugay4gYWRkcmVzcyBvZiBjbWQgYXMgdGFnICovCisKKwkvKiBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uICovCisKKwljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOworCW1lbXNldChjLT5SZXF1ZXN0LkNEQiwgMCwgc2l6ZW9mKGMtPlJlcXVlc3QuQ0RCKSk7CisJQlVHX09OKGNtZC0+Y21kX2xlbiA+IHNpemVvZihjLT5SZXF1ZXN0LkNEQikpOworCWMtPlJlcXVlc3QuQ0RCTGVuID0gY21kLT5jbWRfbGVuOworCW1lbWNweShjLT5SZXF1ZXN0LkNEQiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOworCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9DTUQ7CisJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCXN3aXRjaCAoY21kLT5zY19kYXRhX2RpcmVjdGlvbikgeworCWNhc2UgRE1BX1RPX0RFVklDRToKKwkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfV1JJVEU7CisJCWJyZWFrOworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOworCQlicmVhazsKKwljYXNlIERNQV9OT05FOgorCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCQlicmVhazsKKwljYXNlIERNQV9CSURJUkVDVElPTkFMOgorCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBidWdneSBhcHBsaWNhdGlvbiBkb2VzIGEgc2NzaSBwYXNzdGhydQorCQkgKiBhbmQgc2V0cyBib3RoIGlubGVuIGFuZCBvdXRsZW4gdG8gbm9uLXplcm8uICggc2VlCisJCSAqIC4uL3Njc2kvc2NzaV9pb2N0bC5jOnNjc2lfaW9jdGxfc2VuZF9jb21tYW5kKCkgKQorCQkgKi8KKworCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SU1ZEOworCQkvKiBUaGlzIGlzIHRlY2huaWNhbGx5IHdyb25nLCBhbmQgaHBzYSBjb250cm9sbGVycyBzaG91bGQKKwkJICogcmVqZWN0IGl0IHdpdGggQ01EX0lOVkFMSUQsIHdoaWNoIGlzIHRoZSBtb3N0IGNvcnJlY3QKKwkJICogcmVzcG9uc2UsIGJ1dCBub24tZmlicmUgYmFja2VuZHMgYXBwZWFyIHRvIGxldCBpdAorCQkgKiBzbGlkZSBieSwgYW5kIGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBhcyBpZiB0aGlzIGZpZWxkCisJCSAqIHdlcmUgc2V0IGNvcnJlY3RseS4gIEVpdGhlciB3YXkgaXMgYWNjZXB0YWJsZSBmb3IKKwkJICogb3VyIHB1cnBvc2VzIGhlcmUuCisJCSAqLworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAidW5rbm93biBkYXRhIGRpcmVjdGlvbjogJWRcbiIsCisJCQljbWQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKworCWlmIChocHNhX3NjYXR0ZXJfZ2F0aGVyKGgtPnBkZXYsIGMsIGNtZCkgPCAwKSB7IC8qIEZpbGwgU0cgbGlzdCAqLworCQljbWRfZnJlZShoLCBjKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCWVucXVldWVfY21kX2FuZF9zdGFydF9pbyhoLCBjKTsKKwkvKiB0aGUgY21kJ2xsIGNvbWUgYmFjayB2aWEgaW50ciBoYW5kbGVyIGluIGNvbXBsZXRlX3Njc2lfY29tbWFuZCgpICAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBocHNhX3VucmVnaXN0ZXJfc2NzaShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCS8qIHdlIGFyZSBiZWluZyBmb3JjaWJseSB1bmxvYWRlZCwgYW5kIG1heSBub3QgcmVmdXNlLiAqLworCXNjc2lfcmVtb3ZlX2hvc3QoaC0+c2NzaV9ob3N0KTsKKwlzY3NpX2hvc3RfcHV0KGgtPnNjc2lfaG9zdCk7CisJaC0+c2NzaV9ob3N0ID0gTlVMTDsKK30KKworc3RhdGljIGludCBocHNhX3JlZ2lzdGVyX3Njc2koc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpbnQgcmM7CisKKwlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgLTEpOworCXJjID0gaHBzYV9zY3NpX2RldGVjdChoKTsKKwlpZiAocmMgIT0gMCkKKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiaHBzYV9yZWdpc3Rlcl9zY3NpOiBmYWlsZWQiCisJCQkiIGhwc2Ffc2NzaV9kZXRlY3QoKSwgcmMgaXMgJWRcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeShzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXVuc2lnbmVkIGNoYXIgbHVuYWRkcltdKQoreworCWludCByYyA9IDA7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgd2FpdHRpbWUgPSAxOyAvKiBzZWNvbmRzICovCisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCisJYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCWlmICghYykgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAiCisJCQkid2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeS5cbiIpOworCQlyZXR1cm4gSU9fRVJST1I7CisJfQorCisJLyogU2VuZCB0ZXN0IHVuaXQgcmVhZHkgdW50aWwgZGV2aWNlIHJlYWR5LCBvciBnaXZlIHVwLiAqLworCXdoaWxlIChjb3VudCA8IEhQU0FfVFVSX1JFVFJZX0xJTUlUKSB7CisKKwkJLyogV2FpdCBmb3IgYSBiaXQuICBkbyB0aGlzIGZpcnN0LCBiZWNhdXNlIGlmIHdlIHNlbmQKKwkJICogdGhlIFRVUiByaWdodCBhd2F5LCB0aGUgcmVzZXQgd2lsbCBqdXN0IGFib3J0IGl0LgorCQkgKi8KKwkJbXNsZWVwKDEwMDAgKiB3YWl0dGltZSk7CisJCWNvdW50Kys7CisKKwkJLyogSW5jcmVhc2Ugd2FpdCB0aW1lIHdpdGggZWFjaCB0cnksIHVwIHRvIGEgcG9pbnQuICovCisJCWlmICh3YWl0dGltZSA8IEhQU0FfTUFYX1dBSVRfSU5URVJWQUxfU0VDUykKKwkJCXdhaXR0aW1lID0gd2FpdHRpbWUgKiAyOworCisJCS8qIFNlbmQgdGhlIFRlc3QgVW5pdCBSZWFkeSAqLworCQlmaWxsX2NtZChjLCBURVNUX1VOSVRfUkVBRFksIGgsIE5VTEwsIDAsIDAsIGx1bmFkZHIsIFRZUEVfQ01EKTsKKwkJaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZShoLCBjKTsKKwkJLyogbm8gdW5tYXAgbmVlZGVkIGhlcmUgYmVjYXVzZSBubyBkYXRhIHhmZXIuICovCisKKwkJaWYgKGMtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzID09IENNRF9TVUNDRVNTKQorCQkJYnJlYWs7CisKKwkJaWYgKGMtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzID09IENNRF9UQVJHRVRfU1RBVFVTICYmCisJCQljLT5lcnJfaW5mby0+U2NzaVN0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04gJiYKKwkJCShjLT5lcnJfaW5mby0+U2Vuc2VJbmZvWzJdID09IE5PX1NFTlNFIHx8CisJCQljLT5lcnJfaW5mby0+U2Vuc2VJbmZvWzJdID09IFVOSVRfQVRURU5USU9OKSkKKwkJCWJyZWFrOworCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJ3YWl0aW5nICVkIHNlY3MgIgorCQkJImZvciBkZXZpY2UgdG8gYmVjb21lIHJlYWR5LlxuIiwgd2FpdHRpbWUpOworCQlyYyA9IDE7IC8qIGRldmljZSBub3QgcmVhZHkuICovCisJfQorCisJaWYgKHJjKQorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiZ2l2aW5nIHVwIG9uIGRldmljZS5cbiIpOworCWVsc2UKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImRldmljZSBpcyByZWFkeS5cbiIpOworCisJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIE5lZWQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGVycm9yIGhhbmRsZXJzIHRvIGtlZXAgLi4vc2NzaS9ob3N0cy5jIGZyb20KKyAqIGNvbXBsYWluaW5nLiAgRG9pbmcgYSBob3N0LSBvciBidXMtcmVzZXQgY2FuJ3QgZG8gYW55dGhpbmcgZ29vZCBoZXJlLgorICovCitzdGF0aWMgaW50IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaWNtZCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXY7CisKKwkvKiBmaW5kIHRoZSBjb250cm9sbGVyIHRvIHdoaWNoIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgd2FzIHNlbnQgKi8KKwloID0gc2Rldl90b19oYmEoc2NzaWNtZC0+ZGV2aWNlKTsKKwlpZiAoaCA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLworCQlyZXR1cm4gRkFJTEVEOworCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJyZXNldHRpbmcgZHJpdmVcbiIpOworCisJZGV2ID0gc2NzaWNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpZiAoIWRldikgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyOiAiCisJCQkiZGV2aWNlIGxvb2t1cCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisJLyogc2VuZCBhIHJlc2V0IHRvIHRoZSBTQ1NJIExVTiB3aGljaCB0aGUgY29tbWFuZCB3YXMgc2VudCB0byAqLworCXJjID0gaHBzYV9zZW5kX3Jlc2V0KGgsIGRldi0+c2NzaTNhZGRyKTsKKwlpZiAocmMgPT0gMCAmJiB3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5KGgsIGRldi0+c2NzaTNhZGRyKSA9PSAwKQorCQlyZXR1cm4gU1VDQ0VTUzsKKworCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJyZXNldHRpbmcgZGV2aWNlIGZhaWxlZC5cbiIpOworCXJldHVybiBGQUlMRUQ7Cit9CisKKy8qCisgKiBGb3Igb3BlcmF0aW9ucyB0aGF0IGNhbm5vdCBzbGVlcCwgYSBjb21tYW5kIGJsb2NrIGlzIGFsbG9jYXRlZCBhdCBpbml0LAorICogYW5kIG1hbmFnZWQgYnkgY21kX2FsbG9jKCkgYW5kIGNtZF9mcmVlKCkgdXNpbmcgYSBzaW1wbGUgYml0bWFwIHRvIHRyYWNrCisgKiB3aGljaCBvbmVzIGFyZSBmcmVlIG9yIGluIHVzZS4gIExvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzLgorICogY21kX2ZyZWUoKSBpcyB0aGUgY29tcGxlbWVudC4KKyAqLworc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCWludCBpOworCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJZG1hX2FkZHJfdCBjbWRfZG1hX2hhbmRsZSwgZXJyX2RtYV9oYW5kbGU7CisKKwlkbyB7CisJCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGgtPmNtZF9wb29sX2JpdHMsIGgtPm5yX2NtZHMpOworCQlpZiAoaSA9PSBoLT5ucl9jbWRzKQorCQkJcmV0dXJuIE5VTEw7CisJfSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdAorCQkgKGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAorCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKSAhPSAwKTsKKwljID0gaC0+Y21kX3Bvb2wgKyBpOworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwljbWRfZG1hX2hhbmRsZSA9IGgtPmNtZF9wb29sX2RoYW5kbGUKKwkgICAgKyBpICogc2l6ZW9mKCpjKTsKKwljLT5lcnJfaW5mbyA9IGgtPmVycmluZm9fcG9vbCArIGk7CisJbWVtc2V0KGMtPmVycl9pbmZvLCAwLCBzaXplb2YoKmMtPmVycl9pbmZvKSk7CisJZXJyX2RtYV9oYW5kbGUgPSBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZQorCSAgICArIGkgKiBzaXplb2YoKmMtPmVycl9pbmZvKTsKKwloLT5ucl9hbGxvY3MrKzsKKworCWMtPmNtZGluZGV4ID0gaTsKKworCUlOSVRfSExJU1RfTk9ERSgmYy0+bGlzdCk7CisJYy0+YnVzYWRkciA9IChfX3UzMikgY21kX2RtYV9oYW5kbGU7CisJdGVtcDY0LnZhbCA9IChfX3U2NCkgZXJyX2RtYV9oYW5kbGU7CisJYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOworCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKKwljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOworCisJYy0+aCA9IGg7CisJcmV0dXJuIGM7Cit9CisKKy8qIEZvciBvcGVyYXRpb25zIHRoYXQgY2FuIHdhaXQgZm9yIGttYWxsb2MgdG8gcG9zc2libHkgc2xlZXAsCisgKiB0aGlzIHJvdXRpbmUgY2FuIGJlIGNhbGxlZC4gTG9jayBuZWVkIG5vdCBiZSBoZWxkIHRvIGNhbGwKKyAqIGNtZF9zcGVjaWFsX2FsbG9jLiBjbWRfc3BlY2lhbF9mcmVlKCkgaXMgdGhlIGNvbXBsZW1lbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9zcGVjaWFsX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisJZG1hX2FkZHJfdCBjbWRfZG1hX2hhbmRsZSwgZXJyX2RtYV9oYW5kbGU7CisKKwljID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjKSwgJmNtZF9kbWFfaGFuZGxlKTsKKwlpZiAoYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisKKwljLT5jbWRpbmRleCA9IC0xOworCisJYy0+ZXJyX2luZm8gPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoKmMtPmVycl9pbmZvKSwKKwkJICAgICZlcnJfZG1hX2hhbmRsZSk7CisKKwlpZiAoYy0+ZXJyX2luZm8gPT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCQlzaXplb2YoKmMpLCBjLCBjbWRfZG1hX2hhbmRsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZigqYy0+ZXJyX2luZm8pKTsKKworCUlOSVRfSExJU1RfTk9ERSgmYy0+bGlzdCk7CisJYy0+YnVzYWRkciA9IChfX3UzMikgY21kX2RtYV9oYW5kbGU7CisJdGVtcDY0LnZhbCA9IChfX3U2NCkgZXJyX2RtYV9oYW5kbGU7CisJYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOworCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKKwljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOworCisJYy0+aCA9IGg7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkIGNtZF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYykKK3sKKwlpbnQgaTsKKworCWkgPSBjIC0gaC0+Y21kX3Bvb2w7CisJY2xlYXJfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAorCQkgIGgtPmNtZF9wb29sX2JpdHMgKyAoaSAvIEJJVFNfUEVSX0xPTkcpKTsKKwloLT5ucl9mcmVlcysrOworfQorCitzdGF0aWMgdm9pZCBjbWRfc3BlY2lhbF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYykKK3sKKwl1bmlvbiB1NjRiaXQgdGVtcDY0OworCisJdGVtcDY0LnZhbDMyLmxvd2VyID0gYy0+RXJyRGVzYy5BZGRyLmxvd2VyOworCXRlbXA2NC52YWwzMi51cHBlciA9IGMtPkVyckRlc2MuQWRkci51cHBlcjsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZigqYy0+ZXJyX2luZm8pLAorCQkJICAgIGMtPmVycl9pbmZvLCAoZG1hX2FkZHJfdCkgdGVtcDY0LnZhbCk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoKmMpLAorCQkJICAgIGMsIChkbWFfYWRkcl90KSBjLT5idXNhZGRyKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKKworc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGhwc2FfaW9jdGwoZGV2LCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpOworc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAorCWludCBjbWQsIHZvaWQgKmFyZyk7CisKK3N0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKKwljYXNlIENDSVNTX0dFVElOVElORk86CisJY2FzZSBDQ0lTU19TRVRJTlRJTkZPOgorCWNhc2UgQ0NJU1NfR0VUTk9ERU5BTUU6CisJY2FzZSBDQ0lTU19TRVROT0RFTkFNRToKKwljYXNlIENDSVNTX0dFVEhFQVJUQkVBVDoKKwljYXNlIENDSVNTX0dFVEJVU1RZUEVTOgorCWNhc2UgQ0NJU1NfR0VURklSTVZFUjoKKwljYXNlIENDSVNTX0dFVERSSVZWRVI6CisJY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKKwljYXNlIENDSVNTX0RFUkVHRElTSzoKKwljYXNlIENDSVNTX1JFR05FV0RJU0s6CisJY2FzZSBDQ0lTU19SRUdORVdEOgorCWNhc2UgQ0NJU1NfUkVTQ0FORElTSzoKKwljYXNlIENDSVNTX0dFVExVTklORk86CisJCXJldHVybiBkb19pb2N0bChkZXYsIGNtZCwgYXJnKTsKKworCWNhc2UgQ0NJU1NfUEFTU1RIUlUzMjoKKwkJcmV0dXJuIGhwc2FfaW9jdGwzMl9wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKKwljYXNlIENDSVNTX0JJR19QQVNTVEhSVTMyOgorCQlyZXR1cm4gaHBzYV9pb2N0bDMyX2JpZ19wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorCitzdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCUlPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICphcmczMiA9CisJICAgIChJT0NUTDMyX0NvbW1hbmRfc3RydWN0IF9fdXNlciAqKSBhcmc7CisJSU9DVExfQ29tbWFuZF9zdHJ1Y3QgYXJnNjQ7CisJSU9DVExfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKGFyZzY0KSk7CisJaW50IGVycjsKKwl1MzIgY3A7CisKKwllcnIgPSAwOworCWVyciB8PSBjb3B5X2Zyb21fdXNlcigmYXJnNjQuTFVOX2luZm8sICZhcmczMi0+TFVOX2luZm8sCisJCQkgICBzaXplb2YoYXJnNjQuTFVOX2luZm8pKTsKKwllcnIgfD0gY29weV9mcm9tX3VzZXIoJmFyZzY0LlJlcXVlc3QsICZhcmczMi0+UmVxdWVzdCwKKwkJCSAgIHNpemVvZihhcmc2NC5SZXF1ZXN0KSk7CisJZXJyIHw9IGNvcHlfZnJvbV91c2VyKCZhcmc2NC5lcnJvcl9pbmZvLCAmYXJnMzItPmVycm9yX2luZm8sCisJCQkgICBzaXplb2YoYXJnNjQuZXJyb3JfaW5mbykpOworCWVyciB8PSBnZXRfdXNlcihhcmc2NC5idWZfc2l6ZSwgJmFyZzMyLT5idWZfc2l6ZSk7CisJZXJyIHw9IGdldF91c2VyKGNwLCAmYXJnMzItPmJ1Zik7CisJYXJnNjQuYnVmID0gY29tcGF0X3B0cihjcCk7CisJZXJyIHw9IGNvcHlfdG9fdXNlcihwLCAmYXJnNjQsIHNpemVvZihhcmc2NCkpOworCisJaWYgKGVycikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwllcnIgPSBkb19pb2N0bChkZXYsIENDSVNTX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLAorCQkJIHNpemVvZihhcmczMi0+ZXJyb3JfaW5mbykpOworCWlmIChlcnIpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX2JpZ19wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwKKwlpbnQgY21kLCB2b2lkICphcmcpCit7CisJQklHX0lPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICphcmczMiA9CisJICAgIChCSUdfSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKikgYXJnOworCUJJR19JT0NUTF9Db21tYW5kX3N0cnVjdCBhcmc2NDsKKwlCSUdfSU9DVExfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICpwID0KKwkgICAgY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKGFyZzY0KSk7CisJaW50IGVycjsKKwl1MzIgY3A7CisKKwllcnIgPSAwOworCWVyciB8PSBjb3B5X2Zyb21fdXNlcigmYXJnNjQuTFVOX2luZm8sICZhcmczMi0+TFVOX2luZm8sCisJCQkgICBzaXplb2YoYXJnNjQuTFVOX2luZm8pKTsKKwllcnIgfD0gY29weV9mcm9tX3VzZXIoJmFyZzY0LlJlcXVlc3QsICZhcmczMi0+UmVxdWVzdCwKKwkJCSAgIHNpemVvZihhcmc2NC5SZXF1ZXN0KSk7CisJZXJyIHw9IGNvcHlfZnJvbV91c2VyKCZhcmc2NC5lcnJvcl9pbmZvLCAmYXJnMzItPmVycm9yX2luZm8sCisJCQkgICBzaXplb2YoYXJnNjQuZXJyb3JfaW5mbykpOworCWVyciB8PSBnZXRfdXNlcihhcmc2NC5idWZfc2l6ZSwgJmFyZzMyLT5idWZfc2l6ZSk7CisJZXJyIHw9IGdldF91c2VyKGFyZzY0Lm1hbGxvY19zaXplLCAmYXJnMzItPm1hbGxvY19zaXplKTsKKwllcnIgfD0gZ2V0X3VzZXIoY3AsICZhcmczMi0+YnVmKTsKKwlhcmc2NC5idWYgPSBjb21wYXRfcHRyKGNwKTsKKwllcnIgfD0gY29weV90b191c2VyKHAsICZhcmc2NCwgc2l6ZW9mKGFyZzY0KSk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IGRvX2lvY3RsKGRldiwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLAorCQkJIHNpemVvZihhcmczMi0+ZXJyb3JfaW5mbykpOworCWlmIChlcnIpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBocHNhX2dldHBjaWluZm9faW9jdGwoc3RydWN0IGN0bHJfaW5mbyAqaCwgdm9pZCBfX3VzZXIgKmFyZ3ApCit7CisJc3RydWN0IGhwc2FfcGNpX2luZm8gcGNpaW5mbzsKKworCWlmICghYXJncCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGNpaW5mby5kb21haW4gPSBwY2lfZG9tYWluX25yKGgtPnBkZXYtPmJ1cyk7CisJcGNpaW5mby5idXMgPSBoLT5wZGV2LT5idXMtPm51bWJlcjsKKwlwY2lpbmZvLmRldl9mbiA9IGgtPnBkZXYtPmRldmZuOworCXBjaWluZm8uYm9hcmRfaWQgPSBoLT5ib2FyZF9pZDsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZwY2lpbmZvLCBzaXplb2YocGNpaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocHNhX2dldGRyaXZ2ZXJfaW9jdGwoc3RydWN0IGN0bHJfaW5mbyAqaCwgdm9pZCBfX3VzZXIgKmFyZ3ApCit7CisJRHJpdmVyVmVyX3R5cGUgRHJpdmVyVmVyOworCXVuc2lnbmVkIGNoYXIgdm1haiwgdm1pbiwgdnN1Ym1pbjsKKwlpbnQgcmM7CisKKwlyYyA9IHNzY2FuZihIUFNBX0RSSVZFUl9WRVJTSU9OLCAiJWhodS4laGh1LiVoaHUiLAorCQkmdm1haiwgJnZtaW4sICZ2c3VibWluKTsKKwlpZiAocmMgIT0gMykgeworCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiZHJpdmVyIHZlcnNpb24gc3RyaW5nICclcycgIgorCQkJInVucmVjb2duaXplZC4iLCBIUFNBX0RSSVZFUl9WRVJTSU9OKTsKKwkJdm1haiA9IDA7CisJCXZtaW4gPSAwOworCQl2c3VibWluID0gMDsKKwl9CisJRHJpdmVyVmVyID0gKHZtYWogPDwgMTYpIHwgKHZtaW4gPDwgOCkgfCB2c3VibWluOworCWlmICghYXJncCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmRHJpdmVyVmVyLCBzaXplb2YoRHJpdmVyVmVyX3R5cGUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9wYXNzdGhydV9pb2N0bChzdHJ1Y3QgY3Rscl9pbmZvICpoLCB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlJT0NUTF9Db21tYW5kX3N0cnVjdCBpb2NvbW1hbmQ7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCWNoYXIgKmJ1ZmYgPSBOVUxMOworCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CisKKwlpZiAoIWFyZ3ApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmlvY29tbWFuZCwgYXJncCwgc2l6ZW9mKGlvY29tbWFuZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKGlvY29tbWFuZC5idWZfc2l6ZSA8IDEpICYmCisJICAgIChpb2NvbW1hbmQuUmVxdWVzdC5UeXBlLkRpcmVjdGlvbiAhPSBYRkVSX05PTkUpKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaW9jb21tYW5kLmJ1Zl9zaXplID4gMCkgeworCQlidWZmID0ga21hbGxvYyhpb2NvbW1hbmQuYnVmX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChpb2NvbW1hbmQuUmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9PSBYRkVSX1dSSVRFKSB7CisJCS8qIENvcHkgdGhlIGRhdGEgaW50byB0aGUgYnVmZmVyIHdlIGNyZWF0ZWQgKi8KKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmYsIGlvY29tbWFuZC5idWYsIGlvY29tbWFuZC5idWZfc2l6ZSkpIHsKKwkJCWtmcmVlKGJ1ZmYpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJbWVtc2V0KGJ1ZmYsIDAsIGlvY29tbWFuZC5idWZfc2l6ZSk7CisJYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCWlmIChjID09IE5VTEwpIHsKKwkJa2ZyZWUoYnVmZik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKiBGaWxsIGluIHRoZSBjb21tYW5kIHR5cGUgKi8KKwljLT5jbWRfdHlwZSA9IENNRF9JT0NUTF9QRU5EOworCS8qIEZpbGwgaW4gQ29tbWFuZCBIZWFkZXIgKi8KKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7IC8qIHVudXNlZCBpbiBzaW1wbGUgbW9kZSAqLworCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKSB7CS8qIGJ1ZmZlciB0byBmaWxsICovCisJCWMtPkhlYWRlci5TR0xpc3QgPSAxOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IDE7CisJfSBlbHNlCXsgLyogbm8gYnVmZmVycyB0byBmaWxsICovCisJCWMtPkhlYWRlci5TR0xpc3QgPSAwOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IDA7CisJfQorCW1lbWNweSgmYy0+SGVhZGVyLkxVTiwgJmlvY29tbWFuZC5MVU5faW5mbywgc2l6ZW9mKGMtPkhlYWRlci5MVU4pKTsKKwkvKiB1c2UgdGhlIGtlcm5lbCBhZGRyZXNzIHRoZSBjbWQgYmxvY2sgZm9yIHRhZyAqLworCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOworCisJLyogRmlsbCBpbiBSZXF1ZXN0IGJsb2NrICovCisJbWVtY3B5KCZjLT5SZXF1ZXN0LCAmaW9jb21tYW5kLlJlcXVlc3QsCisJCXNpemVvZihjLT5SZXF1ZXN0KSk7CisKKwkvKiBGaWxsIGluIHRoZSBzY2F0dGVyIGdhdGhlciBpbmZvcm1hdGlvbiAqLworCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKSB7CisJCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShoLT5wZGV2LCBidWZmLAorCQkJaW9jb21tYW5kLmJ1Zl9zaXplLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQljLT5TR1swXS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOworCQljLT5TR1swXS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOworCQljLT5TR1swXS5MZW4gPSBpb2NvbW1hbmQuYnVmX3NpemU7CisJCWMtPlNHWzBdLkV4dCA9IDA7IC8qIHdlIGFyZSBub3QgY2hhaW5pbmcqLworCX0KKwlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlKGgsIGMpOworCWhwc2FfcGNpX3VubWFwKGgtPnBkZXYsIGMsIDEsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oaCwgYyk7CisKKwkvKiBDb3B5IHRoZSBlcnJvciBpbmZvcm1hdGlvbiBvdXQgKi8KKwltZW1jcHkoJmlvY29tbWFuZC5lcnJvcl9pbmZvLCBjLT5lcnJfaW5mbywKKwkJc2l6ZW9mKGlvY29tbWFuZC5lcnJvcl9pbmZvKSk7CisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW9jb21tYW5kLCBzaXplb2YoaW9jb21tYW5kKSkpIHsKKwkJa2ZyZWUoYnVmZik7CisJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmIChpb2NvbW1hbmQuUmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9PSBYRkVSX1JFQUQpIHsKKwkJLyogQ29weSB0aGUgZGF0YSBvdXQgb2YgdGhlIGJ1ZmZlciB3ZSBjcmVhdGVkICovCisJCWlmIChjb3B5X3RvX3VzZXIoaW9jb21tYW5kLmJ1ZiwgYnVmZiwgaW9jb21tYW5kLmJ1Zl9zaXplKSkgeworCQkJa2ZyZWUoYnVmZik7CisJCQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisJa2ZyZWUoYnVmZik7CisJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocHNhX2JpZ19wYXNzdGhydV9pb2N0bChzdHJ1Y3QgY3Rscl9pbmZvICpoLCB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlCSUdfSU9DVExfQ29tbWFuZF9zdHJ1Y3QgKmlvYzsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisJdW5zaWduZWQgY2hhciAqKmJ1ZmYgPSBOVUxMOworCWludCAqYnVmZl9zaXplID0gTlVMTDsKKwl1bmlvbiB1NjRiaXQgdGVtcDY0OworCUJZVEUgc2dfdXNlZCA9IDA7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGk7CisJX191MzIgbGVmdDsKKwlfX3UzMiBzejsKKwlCWVRFIF9fdXNlciAqZGF0YV9wdHI7CisKKwlpZiAoIWFyZ3ApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpb2MgPSAoQklHX0lPQ1RMX0NvbW1hbmRfc3RydWN0ICopCisJICAgIGttYWxsb2Moc2l6ZW9mKCppb2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYykgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXAxOworCX0KKwlpZiAoY29weV9mcm9tX3VzZXIoaW9jLCBhcmdwLCBzaXplb2YoKmlvYykpKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWlmICgoaW9jLT5idWZfc2l6ZSA8IDEpICYmCisJICAgIChpb2MtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gIT0gWEZFUl9OT05FKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXAxOworCX0KKwkvKiBDaGVjayBrbWFsbG9jIGxpbWl0cyAgdXNpbmcgYWxsIFNHcyAqLworCWlmIChpb2MtPm1hbGxvY19zaXplID4gTUFYX0tNQUxMT0NfU0laRSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGNsZWFudXAxOworCX0KKwlpZiAoaW9jLT5idWZfc2l6ZSA+IGlvYy0+bWFsbG9jX3NpemUgKiBNQVhTR0VOVFJJRVMpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisJYnVmZiA9IGt6YWxsb2MoTUFYU0dFTlRSSUVTICogc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOworCWlmICghYnVmZikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXAxOworCX0KKwlidWZmX3NpemUgPSBrbWFsbG9jKE1BWFNHRU5UUklFUyAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZfc2l6ZSkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXAxOworCX0KKwlsZWZ0ID0gaW9jLT5idWZfc2l6ZTsKKwlkYXRhX3B0ciA9IGlvYy0+YnVmOworCXdoaWxlIChsZWZ0KSB7CisJCXN6ID0gKGxlZnQgPiBpb2MtPm1hbGxvY19zaXplKSA/IGlvYy0+bWFsbG9jX3NpemUgOiBsZWZ0OworCQlidWZmX3NpemVbc2dfdXNlZF0gPSBzejsKKwkJYnVmZltzZ191c2VkXSA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZltzZ191c2VkXSA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBjbGVhbnVwMTsKKwkJfQorCQlpZiAoaW9jLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfV1JJVEUpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihidWZmW3NnX3VzZWRdLCBkYXRhX3B0ciwgc3opKSB7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQlnb3RvIGNsZWFudXAxOworCQkJfQorCQl9IGVsc2UKKwkJCW1lbXNldChidWZmW3NnX3VzZWRdLCAwLCBzeik7CisJCWxlZnQgLT0gc3o7CisJCWRhdGFfcHRyICs9IHN6OworCQlzZ191c2VkKys7CisJfQorCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwlpZiAoYyA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDE7CisJfQorCWMtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7CisJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOworCisJaWYgKGlvYy0+YnVmX3NpemUgPiAwKSB7CisJCWMtPkhlYWRlci5TR0xpc3QgPSBzZ191c2VkOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IHNnX3VzZWQ7CisJfSBlbHNlIHsKKwkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKKwl9CisJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCAmaW9jLT5MVU5faW5mbywgc2l6ZW9mKGMtPkhlYWRlci5MVU4pKTsKKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsKKwltZW1jcHkoJmMtPlJlcXVlc3QsICZpb2MtPlJlcXVlc3QsIHNpemVvZihjLT5SZXF1ZXN0KSk7CisJaWYgKGlvYy0+YnVmX3NpemUgPiAwKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7CisJCQl0ZW1wNjQudmFsID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwgYnVmZltpXSwKKwkJCQkgICAgYnVmZl9zaXplW2ldLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJYy0+U0dbaV0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKKwkJCWMtPlNHW2ldLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7CisJCQljLT5TR1tpXS5MZW4gPSBidWZmX3NpemVbaV07CisJCQkvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCisJCQljLT5TR1tpXS5FeHQgPSAwOworCQl9CisJfQorCWhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoaCwgYyk7CisJaHBzYV9wY2lfdW5tYXAoaC0+cGRldiwgYywgc2dfdXNlZCwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwljaGVja19pb2N0bF91bml0X2F0dGVudGlvbihoLCBjKTsKKwkvKiBDb3B5IHRoZSBlcnJvciBpbmZvcm1hdGlvbiBvdXQgKi8KKwltZW1jcHkoJmlvYy0+ZXJyb3JfaW5mbywgYy0+ZXJyX2luZm8sIHNpemVvZihpb2MtPmVycm9yX2luZm8pKTsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsIGlvYywgc2l6ZW9mKCppb2MpKSkgeworCQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGNsZWFudXAxOworCX0KKwlpZiAoaW9jLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfUkVBRCkgeworCQkvKiBDb3B5IHRoZSBkYXRhIG91dCBvZiB0aGUgYnVmZmVyIHdlIGNyZWF0ZWQgKi8KKwkJQllURSBfX3VzZXIgKnB0ciA9IGlvYy0+YnVmOworCQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7CisJCQlpZiAoY29weV90b191c2VyKHB0ciwgYnVmZltpXSwgYnVmZl9zaXplW2ldKSkgeworCQkJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCQlnb3RvIGNsZWFudXAxOworCQkJfQorCQkJcHRyICs9IGJ1ZmZfc2l6ZVtpXTsKKwkJfQorCX0KKwljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCXN0YXR1cyA9IDA7CitjbGVhbnVwMToKKwlpZiAoYnVmZikgeworCQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKQorCQkJa2ZyZWUoYnVmZltpXSk7CisJCWtmcmVlKGJ1ZmYpOworCX0KKwlrZnJlZShidWZmX3NpemUpOworCWtmcmVlKGlvYyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJaWYgKGMtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzID09IENNRF9UQVJHRVRfU1RBVFVTICYmCisJCQljLT5lcnJfaW5mby0+U2NzaVN0YXR1cyAhPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pCisJCSh2b2lkKSBjaGVja19mb3JfdW5pdF9hdHRlbnRpb24oaCwgYyk7Cit9CisvKgorICogaW9jdGwKKyAqLworc3RhdGljIGludCBocHNhX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKworCWggPSBzZGV2X3RvX2hiYShkZXYpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENDSVNTX0RFUkVHRElTSzoKKwljYXNlIENDSVNTX1JFR05FV0RJU0s6CisJY2FzZSBDQ0lTU19SRUdORVdEOgorCQlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgZGV2LT5ob3N0LT5ob3N0X25vKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgorCQlyZXR1cm4gaHBzYV9nZXRwY2lpbmZvX2lvY3RsKGgsIGFyZ3ApOworCWNhc2UgQ0NJU1NfR0VURFJJVlZFUjoKKwkJcmV0dXJuIGhwc2FfZ2V0ZHJpdnZlcl9pb2N0bChoLCBhcmdwKTsKKwljYXNlIENDSVNTX1BBU1NUSFJVOgorCQlyZXR1cm4gaHBzYV9wYXNzdGhydV9pb2N0bChoLCBhcmdwKTsKKwljYXNlIENDSVNTX0JJR19QQVNTVEhSVToKKwkJcmV0dXJuIGhwc2FfYmlnX3Bhc3N0aHJ1X2lvY3RsKGgsIGFyZ3ApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3U4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKKwlpbnQgY21kX3R5cGUpCit7CisJaW50IHBjaV9kaXIgPSBYRkVSX05PTkU7CisKKwljLT5jbWRfdHlwZSA9IENNRF9JT0NUTF9QRU5EOworCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsKKwlpZiAoYnVmZiAhPSBOVUxMICYmIHNpemUgPiAwKSB7CisJCWMtPkhlYWRlci5TR0xpc3QgPSAxOworCQljLT5IZWFkZXIuU0dUb3RhbCA9IDE7CisJfSBlbHNlIHsKKwkJYy0+SGVhZGVyLlNHTGlzdCA9IDA7CisJCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKKwl9CisJYy0+SGVhZGVyLlRhZy5sb3dlciA9IGMtPmJ1c2FkZHI7CisJbWVtY3B5KGMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzLCBzY3NpM2FkZHIsIDgpOworCisJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBjbWRfdHlwZTsKKwlpZiAoY21kX3R5cGUgPT0gVFlQRV9DTUQpIHsKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBIUFNBX0lOUVVJUlk6CisJCQkvKiBhcmUgd2UgdHJ5aW5nIHRvIHJlYWQgYSB2aXRhbCBwcm9kdWN0IHBhZ2UgKi8KKwkJCWlmIChwYWdlX2NvZGUgIT0gMCkgeworCQkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gMHgwMTsKKwkJCQljLT5SZXF1ZXN0LkNEQlsyXSA9IHBhZ2VfY29kZTsKKwkJCX0KKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gNjsKKwkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKKwkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBIUFNBX0lOUVVJUlk7CisJCQljLT5SZXF1ZXN0LkNEQls0XSA9IHNpemUgJiAweEZGOworCQkJYnJlYWs7CisJCWNhc2UgSFBTQV9SRVBPUlRfTE9HOgorCQljYXNlIEhQU0FfUkVQT1JUX1BIWVM6CisJCQkvKiBUYWxraW5nIHRvIGNvbnRyb2xsZXIgc28gSXQncyBhIHBoeXNpY2FsIGNvbW1hbmQKKwkJCSAgIG1vZGUgPSAwMCB0YXJnZXQgPSAwLiAgTm90aGluZyB0byB3cml0ZS4KKwkJCSAqLworCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxMjsKKwkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKKwkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7CisJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBjbWQ7CisJCQljLT5SZXF1ZXN0LkNEQls2XSA9IChzaXplID4+IDI0KSAmIDB4RkY7IC8qIE1TQiAqLworCQkJYy0+UmVxdWVzdC5DREJbN10gPSAoc2l6ZSA+PiAxNikgJiAweEZGOworCQkJYy0+UmVxdWVzdC5DREJbOF0gPSAoc2l6ZSA+PiA4KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQls5XSA9IHNpemUgJiAweEZGOworCQkJYnJlYWs7CisKKwkJY2FzZSBIUFNBX1JFQURfQ0FQQUNJVFk6CisJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKKwkJCWJyZWFrOworCQljYXNlIEhQU0FfQ0FDSEVfRkxVU0g6CisJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEyOworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfV1JJVEU7CisJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSBCTUlDX1dSSVRFOworCQkJYy0+UmVxdWVzdC5DREJbNl0gPSBCTUlDX0NBQ0hFX0ZMVVNIOworCQkJYnJlYWs7CisJCWNhc2UgVEVTVF9VTklUX1JFQURZOgorCQkJYy0+UmVxdWVzdC5DREJMZW4gPSA2OworCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOworCQkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfTk9ORTsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJ1bmtub3duIGNvbW1hbmQgMHglY1xuIiwgY21kKTsKKwkJCUJVRygpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmIChjbWRfdHlwZSA9PSBUWVBFX01TRykgeworCQlzd2l0Y2ggKGNtZCkgeworCisJCWNhc2UgIEhQU0FfREVWSUNFX1JFU0VUX01TRzoKKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTY7CisJCQljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9ICAxOyAvKiBJdCBpcyBhIE1TRyBub3QgYSBDTUQgKi8KKwkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKKwkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX05PTkU7CisJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSAgMHgwMTsgLyogUkVTRVRfTVNHIGlzIDB4MDEgKi8KKwkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gMHgwMzsgIC8qIFJlc2V0IHRhcmdldCBhYm92ZSAqLworCQkJLyogSWYgYnl0ZXMgNC03IGFyZSB6ZXJvLCBpdCBtZWFucyByZXNldCB0aGUgKi8KKwkJCS8qIEx1bklEIGRldmljZSAqLworCQkJYy0+UmVxdWVzdC5DREJbNF0gPSAweDAwOworCQkJYy0+UmVxdWVzdC5DREJbNV0gPSAweDAwOworCQkJYy0+UmVxdWVzdC5DREJbNl0gPSAweDAwOworCQkJYy0+UmVxdWVzdC5DREJbN10gPSAweDAwOworCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVua25vd24gbWVzc2FnZSB0eXBlICVkXG4iLAorCQkJCWNtZCk7CisJCQlCVUcoKTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJ1bmtub3duIGNvbW1hbmQgdHlwZSAlZFxuIiwgY21kX3R5cGUpOworCQlCVUcoKTsKKwl9CisKKwlzd2l0Y2ggKGMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24pIHsKKwljYXNlIFhGRVJfUkVBRDoKKwkJcGNpX2RpciA9IFBDSV9ETUFfRlJPTURFVklDRTsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX1dSSVRFOgorCQlwY2lfZGlyID0gUENJX0RNQV9UT0RFVklDRTsKKwkJYnJlYWs7CisJY2FzZSBYRkVSX05PTkU6CisJCXBjaV9kaXIgPSBQQ0lfRE1BX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBjaV9kaXIgPSBQQ0lfRE1BX0JJRElSRUNUSU9OQUw7CisJfQorCisJaHBzYV9tYXBfb25lKGgtPnBkZXYsIGMsIGJ1ZmYsIHNpemUsIHBjaV9kaXIpOworCisJcmV0dXJuOworfQorCisvKgorICogTWFwIChwaHlzaWNhbCkgUENJIG1lbSBpbnRvICh2aXJ0dWFsKSBrZXJuZWwgc3BhY2UKKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqcmVtYXBfcGNpX21lbSh1bG9uZyBiYXNlLCB1bG9uZyBzaXplKQoreworCXVsb25nIHBhZ2VfYmFzZSA9ICgodWxvbmcpIGJhc2UpICYgUEFHRV9NQVNLOworCXVsb25nIHBhZ2Vfb2ZmcyA9ICgodWxvbmcpIGJhc2UpIC0gcGFnZV9iYXNlOworCXZvaWQgX19pb21lbSAqcGFnZV9yZW1hcHBlZCA9IGlvcmVtYXAocGFnZV9iYXNlLCBwYWdlX29mZnMgKyBzaXplKTsKKworCXJldHVybiBwYWdlX3JlbWFwcGVkID8gKHBhZ2VfcmVtYXBwZWQgKyBwYWdlX29mZnMpIDogTlVMTDsKK30KKworLyogVGFrZXMgY21kcyBvZmYgdGhlIHN1Ym1pc3Npb24gcXVldWUgYW5kIHNlbmRzIHRoZW0gdG8gdGhlIGhhcmR3YXJlLAorICogdGhlbiBwdXRzIHRoZW0gb24gdGhlIHF1ZXVlIG9mIGNtZHMgd2FpdGluZyBmb3IgY29tcGxldGlvbi4KKyAqLworc3RhdGljIHZvaWQgc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisKKwl3aGlsZSAoIWhsaXN0X2VtcHR5KCZoLT5yZXFRKSkgeworCQljID0gaGxpc3RfZW50cnkoaC0+cmVxUS5maXJzdCwgc3RydWN0IENvbW1hbmRMaXN0LCBsaXN0KTsKKwkJLyogY2FuJ3QgZG8gYW55dGhpbmcgaWYgZmlmbyBpcyBmdWxsICovCisJCWlmICgoaC0+YWNjZXNzLmZpZm9fZnVsbChoKSkpIHsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJmaWZvIGZ1bGxcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBHZXQgdGhlIGZpcnN0IGVudHJ5IGZyb20gdGhlIFJlcXVlc3QgUSAqLworCQlyZW1vdmVRKGMpOworCQloLT5RZGVwdGgtLTsKKworCQkvKiBUZWxsIHRoZSBjb250cm9sbGVyIGV4ZWN1dGUgY29tbWFuZCAqLworCQloLT5hY2Nlc3Muc3VibWl0X2NvbW1hbmQoaCwgYyk7CisKKwkJLyogUHV0IGpvYiBvbnRvIHRoZSBjb21wbGV0ZWQgUSAqLworCQlhZGRRKCZoLT5jbXBRLCBjKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbmV4dF9jb21wbGV0aW9uKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW50ZXJydXB0X3BlbmRpbmcoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlyZXR1cm4gaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGludGVycnVwdF9ub3RfZm9yX3VzKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJcmV0dXJuICgoaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSA9PSAwKSB8fAorCQkgKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJhZF90YWcoc3RydWN0IGN0bHJfaW5mbyAqaCwgX191MzIgdGFnX2luZGV4LAorCV9fdTMyIHJhd190YWcpCit7CisJaWYgKHVubGlrZWx5KHRhZ19pbmRleCA+PSBoLT5ucl9jbWRzKSkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiYmFkIHRhZyAweCUwOHggaWdub3JlZC5cbiIsIHJhd190YWcpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW5pc2hfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgX191MzIgcmF3X3RhZykKK3sKKwlyZW1vdmVRKGMpOworCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX1NDU0kpKQorCQljb21wbGV0ZV9zY3NpX2NvbW1hbmQoYywgMCwgcmF3X3RhZyk7CisJZWxzZSBpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQ1RMX1BFTkQpCisJCWNvbXBsZXRlKGMtPndhaXRpbmcpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9faHBzYV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gZGV2X2lkOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTMyIHJhd190YWcsIHRhZywgdGFnX2luZGV4OworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisKKwlpZiAoaW50ZXJydXB0X25vdF9mb3JfdXMoaCkpCisJCXJldHVybiBJUlFfTk9ORTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCXdoaWxlIChpbnRlcnJ1cHRfcGVuZGluZyhoKSkgeworCQl3aGlsZSAoKHJhd190YWcgPSBnZXRfbmV4dF9jb21wbGV0aW9uKGgpKSAhPSBGSUZPX0VNUFRZKSB7CisJCQlpZiAobGlrZWx5KEhQU0FfVEFHX0NPTlRBSU5TX0lOREVYKHJhd190YWcpKSkgeworCQkJCXRhZ19pbmRleCA9IEhQU0FfVEFHX1RPX0lOREVYKHJhd190YWcpOworCQkJCWlmIChiYWRfdGFnKGgsIHRhZ19pbmRleCwgcmF3X3RhZykpCisJCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCQljID0gaC0+Y21kX3Bvb2wgKyB0YWdfaW5kZXg7CisJCQkJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXRhZyA9IEhQU0FfVEFHX0RJU0NBUkRfRVJST1JfQklUUyhyYXdfdGFnKTsKKwkJCWMgPSBOVUxMOworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoYywgdG1wLCAmaC0+Y21wUSwgbGlzdCkgeworCQkJCWlmIChjLT5idXNhZGRyID09IHRhZykgeworCQkJCQlmaW5pc2hfY21kKGMsIHJhd190YWcpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogU2VuZCBhIG1lc3NhZ2UgQ0RCIHRvIHRoZSBmaXJtd2FyZS4gKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IGhwc2FfbWVzc2FnZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgY2hhciBvcGNvZGUsCisJCQkJCQl1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJc3RydWN0IENvbW1hbmQgeworCQlzdHJ1Y3QgQ29tbWFuZExpc3RIZWFkZXIgQ29tbWFuZEhlYWRlcjsKKwkJc3RydWN0IFJlcXVlc3RCbG9jayBSZXF1ZXN0OworCQlzdHJ1Y3QgRXJyRGVzY3JpcHRvciBFcnJvckRlc2NyaXB0b3I7CisJfTsKKwlzdHJ1Y3QgQ29tbWFuZCAqY21kOworCXN0YXRpYyBjb25zdCBzaXplX3QgY21kX3N6ID0gc2l6ZW9mKCpjbWQpICsKKwkJCQkJc2l6ZW9mKGNtZC0+RXJyb3JEZXNjcmlwdG9yKTsKKwlkbWFfYWRkcl90IHBhZGRyNjQ7CisJdWludDMyX3QgcGFkZHIzMiwgdGFnOworCXZvaWQgX19pb21lbSAqdmFkZHI7CisJaW50IGksIGVycjsKKworCXZhZGRyID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCWlmICh2YWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFRoZSBJbmJvdW5kIFBvc3QgUXVldWUgb25seSBhY2NlcHRzIDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzZXMgZm9yIHRoZQorCSAqIENDSVNTIGNvbW1hbmRzLCBzbyB0aGV5IG11c3QgYmUgYWxsb2NhdGVkIGZyb20gdGhlIGxvd2VyIDRHaUIgb2YKKwkgKiBtZW1vcnkuCisJICovCisJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChlcnIpIHsKKwkJaW91bm1hcCh2YWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIGNtZF9zeiwgJnBhZGRyNjQpOworCWlmIChjbWQgPT0gTlVMTCkgeworCQlpb3VubWFwKHZhZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVGhpcyBtdXN0IGZpdCwgYmVjYXVzZSBvZiB0aGUgMzItYml0IGNvbnNpc3RlbnQgRE1BIG1hc2suICBBbHNvLAorCSAqIGFsdGhvdWdoIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgYWRkcmVzcyBpcyBhdAorCSAqIGxlYXN0IDQtYnl0ZSBhbGlnbmVkIChtb3N0IGxpa2VseSwgaXQncyBwYWdlLWFsaWduZWQpLgorCSAqLworCXBhZGRyMzIgPSBwYWRkcjY0OworCisJY21kLT5Db21tYW5kSGVhZGVyLlJlcGx5UXVldWUgPSAwOworCWNtZC0+Q29tbWFuZEhlYWRlci5TR0xpc3QgPSAwOworCWNtZC0+Q29tbWFuZEhlYWRlci5TR1RvdGFsID0gMDsKKwljbWQtPkNvbW1hbmRIZWFkZXIuVGFnLmxvd2VyID0gcGFkZHIzMjsKKwljbWQtPkNvbW1hbmRIZWFkZXIuVGFnLnVwcGVyID0gMDsKKwltZW1zZXQoJmNtZC0+Q29tbWFuZEhlYWRlci5MVU4uTHVuQWRkckJ5dGVzLCAwLCA4KTsKKworCWNtZC0+UmVxdWVzdC5DREJMZW4gPSAxNjsKKwljbWQtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9NU0c7CisJY21kLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9IRUFET0ZRVUVVRTsKKwljbWQtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX05PTkU7CisJY21kLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLworCWNtZC0+UmVxdWVzdC5DREJbMF0gPSBvcGNvZGU7CisJY21kLT5SZXF1ZXN0LkNEQlsxXSA9IHR5cGU7CisJbWVtc2V0KCZjbWQtPlJlcXVlc3QuQ0RCWzJdLCAwLCAxNCk7IC8qIHJlc3Qgb2YgdGhlIENEQiBpcyByZXNlcnZlZCAqLworCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIubG93ZXIgPSBwYWRkcjMyICsgc2l6ZW9mKCpjbWQpOworCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkFkZHIudXBwZXIgPSAwOworCWNtZC0+RXJyb3JEZXNjcmlwdG9yLkxlbiA9IHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKTsKKworCXdyaXRlbChwYWRkcjMyLCB2YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKKworCWZvciAoaSA9IDA7IGkgPCBIUFNBX01TR19TRU5EX1JFVFJZX0xJTUlUOyBpKyspIHsKKwkJdGFnID0gcmVhZGwodmFkZHIgKyBTQTVfUkVQTFlfUE9SVF9PRkZTRVQpOworCQlpZiAoSFBTQV9UQUdfRElTQ0FSRF9FUlJPUl9CSVRTKHRhZykgPT0gcGFkZHIzMikKKwkJCWJyZWFrOworCQltc2xlZXAoSFBTQV9NU0dfU0VORF9SRVRSWV9JTlRFUlZBTF9NU0VDUyk7CisJfQorCisJaW91bm1hcCh2YWRkcik7CisKKwkvKiB3ZSBsZWFrIHRoZSBETUEgYnVmZmVyIGhlcmUgLi4uIG5vIGNob2ljZSBzaW5jZSB0aGUgY29udHJvbGxlciBjb3VsZAorCSAqICBzdGlsbCBjb21wbGV0ZSB0aGUgY29tbWFuZC4KKwkgKi8KKwlpZiAoaSA9PSBIUFNBX01TR19TRU5EX1JFVFJZX0xJTUlUKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvbnRyb2xsZXIgbWVzc2FnZSAlMDJ4OiUwMnggdGltZWQgb3V0XG4iLAorCQkJb3Bjb2RlLCB0eXBlKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBjbWRfc3osIGNtZCwgcGFkZHI2NCk7CisKKwlpZiAodGFnICYgSFBTQV9FUlJPUl9CSVQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCBmYWlsZWRcbiIsCisJCQlvcGNvZGUsIHR5cGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCBzdWNjZWVkZWRcbiIsCisJCW9wY29kZSwgdHlwZSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgaHBzYV9zb2Z0X3Jlc2V0X2NvbnRyb2xsZXIocCkgaHBzYV9tZXNzYWdlKHAsIDEsIDApCisjZGVmaW5lIGhwc2Ffbm9vcChwKSBocHNhX21lc3NhZ2UocCwgMywgMCkKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgaHBzYV9yZXNldF9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisvKiB0aGUgI2RlZmluZXMgYXJlIHN0b2xlbiBmcm9tIGRyaXZlcnMvcGNpL21zaS5oLiAqLworI2RlZmluZSBtc2lfY29udHJvbF9yZWcoYmFzZSkJCShiYXNlICsgUENJX01TSV9GTEFHUykKKyNkZWZpbmUgUENJX01TSVhfRkxBR1NfRU5BQkxFCQkoMSA8PCAxNSkKKworCWludCBwb3M7CisJdTE2IGNvbnRyb2wgPSAwOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJaWYgKHBvcykgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOworCQlpZiAoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfRU5BQkxFKSB7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVzZXR0aW5nIE1TSVxuIik7CisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksCisJCQkJCWNvbnRyb2wgJiB+UENJX01TSV9GTEFHU19FTkFCTEUpOworCQl9CisJfQorCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmIChwb3MpIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKKwkJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJWF9GTEFHU19FTkFCTEUpIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZXNldHRpbmcgTVNJLVhcbiIpOworCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLAorCQkJCQljb250cm9sICYgflBDSV9NU0lYX0ZMQUdTX0VOQUJMRSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBkb2VzIGEgaGFyZCByZXNldCBvZiB0aGUgY29udHJvbGxlciB1c2luZyBQQ0kgcG93ZXIgbWFuYWdlbWVudAorICogc3RhdGVzLgorICovCitzdGF0aWMgX19kZXZpbml0IGludCBocHNhX2hhcmRfcmVzZXRfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1MTYgcG1jc3IsIHNhdmVkX2NvbmZpZ19zcGFjZVszMl07CisJaW50IGksIHBvczsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBQQ0kgUE0gdG8gcmVzZXQgY29udHJvbGxlclxuIik7CisKKwkvKiBUaGlzIGlzIHZlcnkgbmVhcmx5IHRoZSBzYW1lIHRoaW5nIGFzCisJICoKKwkgKiBwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKwkgKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EM2hvdCk7CisJICogcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOworCSAqIHBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOworCSAqCisJICogYnV0IHdlIGNhbid0IHVzZSB0aGVzZSBuaWNlIGNhbm5lZCBrZXJuZWwgcm91dGluZXMgb24KKwkgKiBrZXhlYywgYmVjYXVzZSB0aGV5IGFsc28gY2hlY2sgdGhlIE1TSS9NU0ktWCBzdGF0ZSBpbiBQQ0kKKwkgKiBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBkbyB0aGUgd3JvbmcgdGhpbmcgd2hlbiBpdCBpcworCSAqIHNldC9jbGVhcmVkLiAgQWxzbywgdGhlIHBjaV9zYXZlL3Jlc3RvcmVfc3RhdGUgZnVuY3Rpb25zCisJICogdmlvbGF0ZSB0aGUgb3JkZXJpbmcgcmVxdWlyZW1lbnRzIGZvciByZXN0b3JpbmcgdGhlCisJICogY29uZmlndXJhdGlvbiBzcGFjZSBmcm9tIHRoZSBDQ0lTUyBkb2N1bWVudCAoc2VlIHRoZQorCSAqIGNvbW1lbnQgYmVsb3cpLiAgU28gd2Ugcm9sbCBvdXIgb3duIC4uLi4KKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAyKmksICZzYXZlZF9jb25maWdfc3BhY2VbaV0pOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwlpZiAocG9zID09IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImhwc2FfcmVzZXRfY29udHJvbGxlcjogUENJIFBNIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBRdW90aW5nIGZyb20gdGhlIE9wZW4gQ0lTUyBTcGVjaWZpY2F0aW9uOiAiVGhlIFBvd2VyCisJICogTWFuYWdlbWVudCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAoQ1NSKSBjb250cm9scyB0aGUgcG93ZXIKKwkgKiBzdGF0ZSBvZiB0aGUgZGV2aWNlLiAgVGhlIG5vcm1hbCBvcGVyYXRpbmcgc3RhdGUgaXMgRDAsCisJICogQ1NSPTAwaC4gIFRoZSBzb2Z0d2FyZSBvZmYgc3RhdGUgaXMgRDMsIENTUj0wM2guICBUbyByZXNldAorCSAqIHRoZSBjb250cm9sbGVyLCBwbGFjZSB0aGUgaW50ZXJmYWNlIGRldmljZSBpbiBEMyB0aGVuIHRvCisJICogRDAsIHRoaXMgY2F1c2VzIGEgc2Vjb25kYXJ5IFBDSSByZXNldCB3aGljaCB3aWxsIHJlc2V0IHRoZQorCSAqIGNvbnRyb2xsZXIuIgorCSAqLworCisJLyogZW50ZXIgdGhlIEQzaG90IHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKwlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKKwlwbWNzciB8PSBQQ0lfRDNob3Q7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCBwbWNzcik7CisKKwltc2xlZXAoNTAwKTsKKworCS8qIGVudGVyIHRoZSBEMCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlICovCisJcG1jc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CisJcG1jc3IgfD0gUENJX0QwOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOworCisJbXNsZWVwKDUwMCk7CisKKwkvKiBSZXN0b3JlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gIFRoZSBPcGVuIENJU1MKKwkgKiBTcGVjaWZpY2F0aW9uIHNheXMsICJSZXN0b3JlIHRoZSBQQ0kgQ29uZmlndXJhdGlvbgorCSAqIFJlZ2lzdGVycywgb2Zmc2V0cyAwMGggdGhyb3VnaCA2MGguIEl0IGlzIGltcG9ydGFudCB0bworCSAqIHJlc3RvcmUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIsIDE2LWJpdHMgYXQgb2Zmc2V0IDA0aCwKKwkgKiBsYXN0LiBEbyBub3QgcmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgcmVnaXN0ZXIsCisJICogMTYtYml0cyBhdCBvZmZzZXQgMDZoLiIgIE5vdGUgdGhhdCB0aGUgb2Zmc2V0IGlzIDIqaS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoaSA9PSAyIHx8IGkgPT0gMykKKwkJCWNvbnRpbnVlOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgMippLCBzYXZlZF9jb25maWdfc3BhY2VbaV0pOworCX0KKwl3bWIoKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgNCwgc2F2ZWRfY29uZmlnX3NwYWNlWzJdKTsKKworCXJldHVybiAwOworfQorCisvKgorICogIFdlIGNhbm5vdCByZWFkIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHksIGZvciBwb3J0YWJpbGl0eSB3ZSBtdXN0IHVzZQorICogICB0aGUgaW8gZnVuY3Rpb25zLgorICogICBUaGlzIGlzIGZvciBkZWJ1ZyBvbmx5LgorICovCisjaWZkZWYgSFBTQV9ERUJVRworc3RhdGljIHZvaWQgcHJpbnRfY2ZnX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IENmZ1RhYmxlICp0YikKK3sKKwlpbnQgaTsKKwljaGFyIHRlbXBfbmFtZVsxN107CisKKwlkZXZfaW5mbyhkZXYsICJDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiIpOworCWRldl9pbmZvKGRldiwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJdGVtcF9uYW1lW2ldID0gcmVhZGIoJih0Yi0+U2lnbmF0dXJlW2ldKSk7CisJdGVtcF9uYW1lWzRdID0gJ1wwJzsKKwlkZXZfaW5mbyhkZXYsICIgICBTaWduYXR1cmUgPSAlc1xuIiwgdGVtcF9uYW1lKTsKKwlkZXZfaW5mbyhkZXYsICIgICBTcGVjIE51bWJlciA9ICVkXG4iLCByZWFkbCgmKHRiLT5TcGVjVmFsZW5jZSkpKTsKKwlkZXZfaW5mbyhkZXYsICIgICBUcmFuc3BvcnQgbWV0aG9kcyBzdXBwb3J0ZWQgPSAweCV4XG4iLAorCSAgICAgICByZWFkbCgmKHRiLT5UcmFuc3BvcnRTdXBwb3J0KSkpOworCWRldl9pbmZvKGRldiwgIiAgIFRyYW5zcG9ydCBtZXRob2RzIGFjdGl2ZSA9IDB4JXhcbiIsCisJICAgICAgIHJlYWRsKCYodGItPlRyYW5zcG9ydEFjdGl2ZSkpKTsKKwlkZXZfaW5mbyhkZXYsICIgICBSZXF1ZXN0ZWQgdHJhbnNwb3J0IE1ldGhvZCA9IDB4JXhcbiIsCisJICAgICAgIHJlYWRsKCYodGItPkhvc3RXcml0ZS5UcmFuc3BvcnRSZXF1ZXN0KSkpOworCWRldl9pbmZvKGRldiwgIiAgIENvYWxlc2NlIEludGVycnVwdCBEZWxheSA9IDB4JXhcbiIsCisJICAgICAgIHJlYWRsKCYodGItPkhvc3RXcml0ZS5Db2FsSW50RGVsYXkpKSk7CisJZGV2X2luZm8oZGV2LCAiICAgQ29hbGVzY2UgSW50ZXJydXB0IENvdW50ID0gMHgleFxuIiwKKwkgICAgICAgcmVhZGwoJih0Yi0+SG9zdFdyaXRlLkNvYWxJbnRDb3VudCkpKTsKKwlkZXZfaW5mbyhkZXYsICIgICBNYXggb3V0c3RhbmRpbmcgY29tbWFuZHMgPSAweCVkXG4iLAorCSAgICAgICByZWFkbCgmKHRiLT5DbWRzT3V0TWF4KSkpOworCWRldl9pbmZvKGRldiwgIiAgIEJ1cyBUeXBlcyA9IDB4JXhcbiIsIHJlYWRsKCYodGItPkJ1c1R5cGVzKSkpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQl0ZW1wX25hbWVbaV0gPSByZWFkYigmKHRiLT5TZXJ2ZXJOYW1lW2ldKSk7CisJdGVtcF9uYW1lWzE2XSA9ICdcMCc7CisJZGV2X2luZm8oZGV2LCAiICAgU2VydmVyIE5hbWUgPSAlc1xuIiwgdGVtcF9uYW1lKTsKKwlkZXZfaW5mbyhkZXYsICIgICBIZWFydGJlYXQgQ291bnRlciA9IDB4JXhcblxuXG4iLAorCQlyZWFkbCgmKHRiLT5IZWFydEJlYXQpKSk7Cit9CisjZW5kaWYJCQkJLyogSFBTQV9ERUJVRyAqLworCitzdGF0aWMgaW50IGZpbmRfUENJX0JBUl9pbmRleChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBwY2lfYmFyX2FkZHIpCit7CisJaW50IGksIG9mZnNldCwgbWVtX3R5cGUsIGJhcl90eXBlOworCisJaWYgKHBjaV9iYXJfYWRkciA9PSBQQ0lfQkFTRV9BRERSRVNTXzApCS8qIGxvb2tpbmcgZm9yIEJBUiB6ZXJvPyAqLworCQlyZXR1cm4gMDsKKwlvZmZzZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgeworCQliYXJfdHlwZSA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0U7CisJCWlmIChiYXJfdHlwZSA9PSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKQorCQkJb2Zmc2V0ICs9IDQ7CisJCWVsc2UgeworCQkJbWVtX3R5cGUgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJgorCQkJICAgIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfTUFTSzsKKwkJCXN3aXRjaCAobWVtX3R5cGUpIHsKKwkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKKwkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTToKKwkJCQlvZmZzZXQgKz0gNDsJLyogMzIgYml0ICovCisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQ6CisJCQkJb2Zmc2V0ICs9IDg7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgkvKiByZXNlcnZlZCBpbiBQQ0kgMi4yICovCisJCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgICAgICAgImJhc2UgYWRkcmVzcyBpcyBpbnZhbGlkXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKG9mZnNldCA9PSBwY2lfYmFyX2FkZHIgLSBQQ0lfQkFTRV9BRERSRVNTXzApCisJCQlyZXR1cm4gaSArIDE7CisJfQorCXJldHVybiAtMTsKK30KKworLyogSWYgTVNJL01TSS1YIGlzIHN1cHBvcnRlZCBieSB0aGUga2VybmVsIHdlIHdpbGwgdHJ5IHRvIGVuYWJsZSBpdCBvbgorICogY29udHJvbGxlcnMgdGhhdCBhcmUgY2FwYWJsZS4gSWYgbm90LCB3ZSB1c2UgSU8tQVBJQyBtb2RlLgorICovCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2ludGVycnVwdF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBfX3UzMiBib2FyZF9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWludCBlcnI7CisJc3RydWN0IG1zaXhfZW50cnkgaHBzYV9tc2l4X2VudHJpZXNbNF0gPSB7IHswLCAwfSwgezAsIDF9LAorCXswLCAyfSwgezAsIDN9CisJfTsKKworCS8qIFNvbWUgYm9hcmRzIGFkdmVydGlzZSBNU0kgYnV0IGRvbid0IHJlYWxseSBzdXBwb3J0IGl0ICovCisJaWYgKChib2FyZF9pZCA9PSAweDQwNzAwRTExKSB8fAorCSAgICAoYm9hcmRfaWQgPT0gMHg0MDgwMEUxMSkgfHwKKwkgICAgKGJvYXJkX2lkID09IDB4NDA4MjBFMTEpIHx8IChib2FyZF9pZCA9PSAweDQwODMwRTExKSkKKwkJZ290byBkZWZhdWx0X2ludF9tb2RlOworCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1TSVhcbiIpOworCQllcnIgPSBwY2lfZW5hYmxlX21zaXgocGRldiwgaHBzYV9tc2l4X2VudHJpZXMsIDQpOworCQlpZiAoIWVycikgeworCQkJaC0+aW50clswXSA9IGhwc2FfbXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKKwkJCWgtPmludHJbMV0gPSBocHNhX21zaXhfZW50cmllc1sxXS52ZWN0b3I7CisJCQloLT5pbnRyWzJdID0gaHBzYV9tc2l4X2VudHJpZXNbMl0udmVjdG9yOworCQkJaC0+aW50clszXSA9IGhwc2FfbXNpeF9lbnRyaWVzWzNdLnZlY3RvcjsKKwkJCWgtPm1zaXhfdmVjdG9yID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoZXJyID4gMCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm9ubHkgJWQgTVNJLVggdmVjdG9ycyAiCisJCQkgICAgICAgImF2YWlsYWJsZVxuIiwgZXJyKTsKKwkJCWdvdG8gZGVmYXVsdF9pbnRfbW9kZTsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJNU0ktWCBpbml0IGZhaWxlZCAlZFxuIiwKKwkJCSAgICAgICBlcnIpOworCQkJZ290byBkZWZhdWx0X2ludF9tb2RlOworCQl9CisJfQorCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJKSkgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTVNJXG4iKTsKKwkJaWYgKCFwY2lfZW5hYmxlX21zaShwZGV2KSkKKwkJCWgtPm1zaV92ZWN0b3IgPSAxOworCQllbHNlCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiTVNJIGluaXQgZmFpbGVkXG4iKTsKKwl9CitkZWZhdWx0X2ludF9tb2RlOgorI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTVNJICovCisJLyogaWYgd2UgZ2V0IGhlcmUgd2UncmUgZ29pbmcgdG8gdXNlIHRoZSBkZWZhdWx0IGludGVycnVwdCBtb2RlICovCisJaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdID0gcGRldi0+aXJxOworCXJldHVybjsKK30KKworc3RhdGljIGludCBocHNhX3BjaV9pbml0KHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXVzaG9ydCBzdWJzeXN0ZW1fdmVuZG9yX2lkLCBzdWJzeXN0ZW1fZGV2aWNlX2lkLCBjb21tYW5kOworCV9fdTMyIGJvYXJkX2lkLCBzY3JhdGNocGFkID0gMDsKKwlfX3U2NCBjZmdfb2Zmc2V0OworCV9fdTMyIGNmZ19iYXNlX2FkZHI7CisJX191NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKKwlpbnQgaSwgcHJvZF9pbmRleCwgZXJyOworCisJc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAorCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9kdWN0cyk7IGkrKykKKwkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKQorCQkJYnJlYWs7CisKKwlwcm9kX2luZGV4ID0gaTsKKworCWlmIChwcm9kX2luZGV4ID09IEFSUkFZX1NJWkUocHJvZHVjdHMpKSB7CisJCXByb2RfaW5kZXgtLTsKKwkJaWYgKHN1YnN5c3RlbV92ZW5kb3JfaWQgIT0gUENJX1ZFTkRPUl9JRF9IUCB8fAorCQkJCSFocHNhX2FsbG93X2FueSkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInVucmVjb2duaXplZCBib2FyZCBJRDoiCisJCQkJIiAweCUwOGx4LCBpZ25vcmluZy5cbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpIGJvYXJkX2lkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCS8qIGNoZWNrIHRvIHNlZSBpZiBjb250cm9sbGVyIGhhcyBiZWVuIGRpc2FibGVkCisJICogQkVGT1JFIHRyeWluZyB0byBlbmFibGUgaXQKKwkgKi8KKwkodm9pZClwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCWlmICghKGNvbW1hbmQgJiAweDAyKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY29udHJvbGxlciBhcHBlYXJzIHRvIGJlIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJocHNhIik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBJZiB0aGUga2VybmVsIHN1cHBvcnRzIE1TSS9NU0ktWCB3ZSB3aWxsIHRyeSB0byBlbmFibGUgdGhhdCwKKwkgKiBlbHNlIHdlIHVzZSB0aGUgSU8tQVBJQyBpbnRlcnJ1cHQgYXNzaWduZWQgdG8gdXMgYnkgc3lzdGVtIFJPTS4KKwkgKi8KKwlocHNhX2ludGVycnVwdF9tb2RlKGgsIHBkZXYsIGJvYXJkX2lkKTsKKworCS8qIGZpbmQgdGhlIG1lbW9yeSBCQVIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfTUVNKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IERFVklDRV9DT1VOVF9SRVNPVVJDRSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IEJBUiBmb3VuZFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwl9CisKKwloLT5wYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsgLyogYWRkcmVzc2luZyBtb2RlIGJpdHMKKwkJCQkJCSAqIGFscmVhZHkgcmVtb3ZlZAorCQkJCQkJICovCisKKwloLT52YWRkciA9IHJlbWFwX3BjaV9tZW0oaC0+cGFkZHIsIDB4MjUwKTsKKworCS8qIFdhaXQgZm9yIHRoZSBib2FyZCB0byBiZWNvbWUgcmVhZHkuICAqLworCWZvciAoaSA9IDA7IGkgPCBIUFNBX0JPQVJEX1JFQURZX0lURVJBVElPTlM7IGkrKykgeworCQlzY3JhdGNocGFkID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfU0NSQVRDSFBBRF9PRkZTRVQpOworCQlpZiAoc2NyYXRjaHBhZCA9PSBIUFNBX0ZJUk1XQVJFX1JFQURZKQorCQkJYnJlYWs7CisJCW1zbGVlcChIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MpOworCX0KKwlpZiAoc2NyYXRjaHBhZCAhPSBIUFNBX0ZJUk1XQVJFX1JFQURZKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJib2FyZCBub3QgcmVhZHksIHRpbWVkIG91dC5cbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJfQorCisJLyogZ2V0IHRoZSBhZGRyZXNzIGluZGV4IG51bWJlciAqLworCWNmZ19iYXNlX2FkZHIgPSByZWFkbChoLT52YWRkciArIFNBNV9DVENGR19PRkZTRVQpOworCWNmZ19iYXNlX2FkZHIgJj0gKF9fdTMyKSAweDAwMDBmZmZmOworCWNmZ19iYXNlX2FkZHJfaW5kZXggPSBmaW5kX1BDSV9CQVJfaW5kZXgocGRldiwgY2ZnX2Jhc2VfYWRkcik7CisJaWYgKGNmZ19iYXNlX2FkZHJfaW5kZXggPT0gLTEpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIGNmZ19iYXNlX2FkZHJfaW5kZXhcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJfQorCisJY2ZnX29mZnNldCA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X0NUTUVNX09GRlNFVCk7CisJaC0+Y2ZndGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAorCQkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsgY2ZnX29mZnNldCwKKwkJCQlzaXplb2YoaC0+Y2ZndGFibGUpKTsKKwloLT5ib2FyZF9pZCA9IGJvYXJkX2lkOworCisJLyogUXVlcnkgY29udHJvbGxlciBmb3IgbWF4IHN1cHBvcnRlZCBjb21tYW5kczogKi8KKwloLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5DbWRzT3V0TWF4KSk7CisKKwloLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1twcm9kX2luZGV4XS5wcm9kdWN0X25hbWU7CisJaC0+YWNjZXNzID0gKihwcm9kdWN0c1twcm9kX2luZGV4XS5hY2Nlc3MpOworCS8qIEFsbG93IHJvb20gZm9yIHNvbWUgaW9jdGxzICovCisJaC0+bnJfY21kcyA9IGgtPm1heF9jb21tYW5kcyAtIDQ7CisKKwlpZiAoKHJlYWRiKCZoLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzBdKSAhPSAnQycpIHx8CisJICAgIChyZWFkYigmaC0+Y2ZndGFibGUtPlNpZ25hdHVyZVsxXSkgIT0gJ0knKSB8fAorCSAgICAocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMl0pICE9ICdTJykgfHwKKwkgICAgKHJlYWRiKCZoLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzNdKSAhPSAnUycpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJub3QgYSB2YWxpZCBDSVNTIGNvbmZpZyB0YWJsZVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwl9CisjaWZkZWYgQ09ORklHX1g4NgorCXsKKwkJLyogTmVlZCB0byBlbmFibGUgcHJlZmV0Y2ggaW4gdGhlIFNDU0kgY29yZSBmb3IgNjQwMCBpbiB4ODYgKi8KKwkJX191MzIgcHJlZmV0Y2g7CisJCXByZWZldGNoID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOworCQlwcmVmZXRjaCB8PSAweDEwMDsKKwkJd3JpdGVsKHByZWZldGNoLCAmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CisJfQorI2VuZGlmCisKKwkvKiBEaXNhYmxpbmcgRE1BIHByZWZldGNoIGZvciB0aGUgUDYwMAorCSAqIEFuIEFTSUMgYnVnIG1heSByZXN1bHQgaW4gYSBwcmVmZXRjaCBiZXlvbmQKKwkgKiBwaHlzaWNhbCBtZW1vcnkuCisJICovCisJaWYgKGJvYXJkX2lkID09IDB4MzIyNTEwM0MpIHsKKwkJX191MzIgZG1hX3ByZWZldGNoOworCQlkbWFfcHJlZmV0Y2ggPSByZWFkbChoLT52YWRkciArIEkyT19ETUExX0NGRyk7CisJCWRtYV9wcmVmZXRjaCB8PSAweDgwMDA7CisJCXdyaXRlbChkbWFfcHJlZmV0Y2gsIGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKKwl9CisKKwloLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5DbWRzT3V0TWF4KSk7CisJLyogVXBkYXRlIHRoZSBmaWVsZCwgYW5kIHRoZW4gcmluZyB0aGUgZG9vcmJlbGwgKi8KKwl3cml0ZWwoQ0ZHVEJMX1RyYW5zX1NpbXBsZSwgJihoLT5jZmd0YWJsZS0+SG9zdFdyaXRlLlRyYW5zcG9ydFJlcXVlc3QpKTsKKwl3cml0ZWwoQ0ZHVEJMX0NoYW5nZVJlcSwgaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOworCisJLyogdW5kZXIgY2VydGFpbiB2ZXJ5IHJhcmUgY29uZGl0aW9ucywgdGhpcyBjYW4gdGFrZSBhd2hpbGUuCisJICogKGUuZy46IGhvdCByZXBsYWNlIGEgZmFpbGVkIDE0NEdCIGRyaXZlIGluIGEgUkFJRCA1IHNldCByaWdodAorCSAqIGFzIHdlIGVudGVyIHRoaXMgY29kZS4pCisJICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9DT05GSUdfV0FJVDsgaSsrKSB7CisJCWlmICghKHJlYWRsKGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKSAmIENGR1RCTF9DaGFuZ2VSZXEpKQorCQkJYnJlYWs7CisJCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KKwkJbXNsZWVwKDEwKTsKKwl9CisKKyNpZmRlZiBIUFNBX0RFQlVHCisJcHJpbnRfY2ZnX3RhYmxlKCZwZGV2LT5kZXYsIGgtPmNmZ3RhYmxlKTsKKyNlbmRpZgkJCQkvKiBIUFNBX0RFQlVHICovCisKKwlpZiAoIShyZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc3BvcnRBY3RpdmUpKSAmIENGR1RCTF9UcmFuc19TaW1wbGUpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGJvYXJkIGludG8gc2ltcGxlIG1vZGVcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJfQorCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcmVzOgorCS8qCisJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCisJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCisJICovCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCBpOworCWludCBkYWM7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKworCWlmIChudW1iZXJfb2ZfY29udHJvbGxlcnMgPT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiXG4iKTsKKwlpZiAocmVzZXRfZGV2aWNlcykgeworCQkvKiBSZXNldCB0aGUgY29udHJvbGxlciB3aXRoIGEgUENJIHBvd2VyLWN5Y2xlICovCisJCWlmIChocHNhX2hhcmRfcmVzZXRfY29udHJvbGxlcihwZGV2KSB8fCBocHNhX3Jlc2V0X21zaShwZGV2KSkKKwkJCXJldHVybiAtRU5PREVWOworCisJCS8qIFNvbWUgZGV2aWNlcyAobm90YWJseSB0aGUgSFAgU21hcnQgQXJyYXkgNWkgQ29udHJvbGxlcikKKwkJICAgbmVlZCBhIGxpdHRsZSBwYXVzZSBoZXJlICovCisJCW1zbGVlcChIUFNBX1BPU1RfUkVTRVRfUEFVU0VfTVNFQ1MpOworCisJCS8qIE5vdyB0cnkgdG8gZ2V0IHRoZSBjb250cm9sbGVyIHRvIHJlc3BvbmQgdG8gYSBuby1vcCAqLworCQlmb3IgKGkgPSAwOyBpIDwgSFBTQV9QT1NUX1JFU0VUX05PT1BfUkVUUklFUzsgaSsrKSB7CisJCQlpZiAoaHBzYV9ub29wKHBkZXYpID09IDApCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vLW9wIGZhaWxlZCVzXG4iLAorCQkJCQkJKGkgPCAxMSA/ICI7IHJlLXRyeWluZyIgOiAiIikpOworCQl9CisJfQorCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgQ29tbWFuZExpc3QpICUgOCk7CisJaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoKQorCQlyZXR1cm4gLTE7CisKKwloLT5idXN5X2luaXRpYWxpemluZyA9IDE7CisJSU5JVF9ITElTVF9IRUFEKCZoLT5jbXBRKTsKKwlJTklUX0hMSVNUX0hFQUQoJmgtPnJlcVEpOworCW11dGV4X2luaXQoJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CisJaW5pdF9jb21wbGV0aW9uKCZoLT5zY2FuX3dhaXQpOworCWlmIChocHNhX3BjaV9pbml0KGgsIHBkZXYpICE9IDApCisJCWdvdG8gY2xlYW4xOworCisJc3ByaW50ZihoLT5kZXZuYW1lLCAiaHBzYSVkIiwgbnVtYmVyX29mX2NvbnRyb2xsZXJzKTsKKwloLT5jdGxyID0gbnVtYmVyX29mX2NvbnRyb2xsZXJzOworCW51bWJlcl9vZl9jb250cm9sbGVycysrOworCWgtPnBkZXYgPSBwZGV2OworCisJLyogY29uZmlndXJlIFBDSSBETUEgc3R1ZmYgKi8KKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCisJCWRhYyA9IDE7CisJZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpCisJCWRhYyA9IDA7CisJZWxzZSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIpOworCQlnb3RvIGNsZWFuMTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgdGhlIGJvYXJkIGludGVycnVwdHMgYXJlIG9mZiAqLworCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOworCWlmIChyZXF1ZXN0X2lycShoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGRvX2hwc2FfaW50ciwKKwkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgaC0+ZGV2bmFtZSwgaCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVzXG4iLAorCQkgICAgICAgaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoLT5kZXZuYW1lKTsKKwkJZ290byBjbGVhbjI7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiA8MHgleD4gYXQgUENJICVzIElSUSAlZCVzIHVzaW5nIERBQ1xuIiwKKwkgICAgICAgaC0+ZGV2bmFtZSwgcGRldi0+ZGV2aWNlLCBwY2lfbmFtZShwZGV2KSwKKwkgICAgICAgaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBkYWMgPyAiIiA6ICIgbm90Iik7CisKKwloLT5jbWRfcG9vbF9iaXRzID0KKwkgICAga21hbGxvYygoKGgtPm5yX2NtZHMgKyBCSVRTX1BFUl9MT05HIC0KKwkJICAgICAgMSkgLyBCSVRTX1BFUl9MT05HKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisJaC0+Y21kX3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LAorCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZigqaC0+Y21kX3Bvb2wpLAorCQkgICAgJihoLT5jbWRfcG9vbF9kaGFuZGxlKSk7CisJaC0+ZXJyaW5mb19wb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2YoKmgtPmVycmluZm9fcG9vbCksCisJCSAgICAmKGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKSk7CisJaWYgKChoLT5jbWRfcG9vbF9iaXRzID09IE5VTEwpCisJICAgIHx8IChoLT5jbWRfcG9vbCA9PSBOVUxMKQorCSAgICB8fCAoaC0+ZXJyaW5mb19wb29sID09IE5VTEwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBjbGVhbjQ7CisJfQorCXNwaW5fbG9ja19pbml0KCZoLT5sb2NrKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBoKTsKKwltZW1zZXQoaC0+Y21kX3Bvb2xfYml0cywgMCwKKwkgICAgICAgKChoLT5ucl9jbWRzICsgQklUU19QRVJfTE9ORyAtCisJCSAxKSAvIEJJVFNfUEVSX0xPTkcpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWhwc2Ffc2NzaV9zZXR1cChoKTsKKworCS8qIFR1cm4gdGhlIGludGVycnVwdHMgb24gc28gd2UgY2FuIHNlcnZpY2UgcmVxdWVzdHMgKi8KKwloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT04pOworCisJaHBzYV9yZWdpc3Rlcl9zY3NpKGgpOwkvKiBob29rIG91cnNlbHZlcyBpbnRvIFNDU0kgc3Vic3lzdGVtICovCisJaC0+YnVzeV9pbml0aWFsaXppbmcgPSAwOworCXJldHVybiAxOworCitjbGVhbjQ6CisJa2ZyZWUoaC0+Y21kX3Bvb2xfYml0cyk7CisJaWYgKGgtPmNtZF9wb29sKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZihzdHJ1Y3QgQ29tbWFuZExpc3QpLAorCQkJICAgIGgtPmNtZF9wb29sLCBoLT5jbWRfcG9vbF9kaGFuZGxlKTsKKwlpZiAoaC0+ZXJyaW5mb19wb29sKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZihzdHJ1Y3QgRXJyb3JJbmZvKSwKKwkJCSAgICBoLT5lcnJpbmZvX3Bvb2wsCisJCQkgICAgaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpOworCWZyZWVfaXJxKGgtPmludHJbU0lNUExFX01PREVfSU5UXSwgaCk7CitjbGVhbjI6CitjbGVhbjE6CisJaC0+YnVzeV9pbml0aWFsaXppbmcgPSAwOworCWtmcmVlKGgpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgaHBzYV9mbHVzaF9jYWNoZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWNoYXIgKmZsdXNoX2J1ZjsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisKKwlmbHVzaF9idWYgPSBremFsbG9jKDQsIEdGUF9LRVJORUwpOworCWlmICghZmx1c2hfYnVmKQorCQlyZXR1cm47CisKKwljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJaWYgKCFjKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CisJCWdvdG8gb3V0X29mX21lbW9yeTsKKwl9CisJZmlsbF9jbWQoYywgSFBTQV9DQUNIRV9GTFVTSCwgaCwgZmx1c2hfYnVmLCA0LCAwLAorCQlSQUlEX0NUTFJfTFVOSUQsIFRZUEVfQ01EKTsKKwlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF93aXRoX3JldHJ5KGgsIGMsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChjLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyAhPSAwKQorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJImVycm9yIGZsdXNoaW5nIGNhY2hlIG9uIGNvbnRyb2xsZXJcbiIpOworCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CitvdXRfb2ZfbWVtb3J5OgorCWtmcmVlKGZsdXNoX2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGhwc2Ffc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaDsKKworCWggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJLyogVHVybiBib2FyZCBpbnRlcnJ1cHRzIG9mZiAgYW5kIHNlbmQgdGhlIGZsdXNoIGNhY2hlIGNvbW1hbmQKKwkgKiBzZW5kY21kIHdpbGwgdHVybiBvZmYgaW50ZXJydXB0LCBhbmQgc2VuZCB0aGUgZmx1c2guLi4KKwkgKiBUbyB3cml0ZSBhbGwgZGF0YSBpbiB0aGUgYmF0dGVyeSBiYWNrZWQgY2FjaGUgdG8gZGlza3MKKwkgKi8KKwlocHNhX2ZsdXNoX2NhY2hlKGgpOworCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOworCWZyZWVfaXJxKGgtPmludHJbMl0sIGgpOworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKGgtPm1zaXhfdmVjdG9yKQorCQlwY2lfZGlzYWJsZV9tc2l4KGgtPnBkZXYpOworCWVsc2UgaWYgKGgtPm1zaV92ZWN0b3IpCisJCXBjaV9kaXNhYmxlX21zaShoLT5wZGV2KTsKKyNlbmRpZgkJCQkvKiBDT05GSUdfUENJX01TSSAqLworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaHBzYV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBjdGxyX2luZm8gKmg7CisKKwlpZiAocGNpX2dldF9kcnZkYXRhKHBkZXYpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlbW92ZSBkZXZpY2UgXG4iKTsKKwkJcmV0dXJuOworCX0KKwloID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCW11dGV4X2xvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CisJcmVtb3ZlX2Zyb21fc2Nhbl9saXN0KGgpOworCWhwc2FfdW5yZWdpc3Rlcl9zY3NpKGgpOwkvKiB1bmhvb2sgZnJvbSBTQ1NJIHN1YnN5c3RlbSAqLworCWhwc2Ffc2h1dGRvd24ocGRldik7CisJaW91bm1hcChoLT52YWRkcik7CisJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LAorCQloLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCksCisJCWgtPmNtZF9wb29sLCBoLT5jbWRfcG9vbF9kaGFuZGxlKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCWgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyksCisJCWgtPmVycmluZm9fcG9vbCwgaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpOworCWtmcmVlKGgtPmNtZF9wb29sX2JpdHMpOworCS8qCisJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCisJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCisJICovCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOworCWtmcmVlKGgpOworfQorCitzdGF0aWMgaW50IGhwc2Ffc3VzcGVuZChfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwlfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9yZXN1bWUoX19hdHRyaWJ1dGVfXygodW51c2VkKSkgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBocHNhX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiaHBzYSIsCisJLnByb2JlID0gaHBzYV9pbml0X29uZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaHBzYV9yZW1vdmVfb25lKSwKKwkuaWRfdGFibGUgPSBocHNhX3BjaV9kZXZpY2VfaWQsCS8qIGlkX3RhYmxlICovCisJLnNodXRkb3duID0gaHBzYV9zaHV0ZG93biwKKwkuc3VzcGVuZCA9IGhwc2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gaHBzYV9yZXN1bWUsCit9OworCisvKgorICogIFRoaXMgaXMgaXQuICBSZWdpc3RlciB0aGUgUENJIGRyaXZlciBpbmZvcm1hdGlvbiBmb3IgdGhlIGNhcmRzIHdlIGNvbnRyb2wKKyAqICB0aGUgT1Mgd2lsbCBjYWxsIG91ciByZWdpc3RlcmVkIHJvdXRpbmVzIHdoZW4gaXQgZmluZHMgb25lIG9mIG91ciBjYXJkcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgaHBzYV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKwkvKiBTdGFydCB0aGUgc2NhbiB0aHJlYWQgKi8KKwlocHNhX3NjYW5fdGhyZWFkID0ga3RocmVhZF9ydW4oaHBzYV9zY2FuX2Z1bmMsIE5VTEwsICJocHNhX3NjYW4iKTsKKwlpZiAoSVNfRVJSKGhwc2Ffc2Nhbl90aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIoaHBzYV9zY2FuX3RocmVhZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZocHNhX3BjaV9kcml2ZXIpOworCWlmIChlcnIpCisJCWt0aHJlYWRfc3RvcChocHNhX3NjYW5fdGhyZWFkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaHBzYV9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZocHNhX3BjaV9kcml2ZXIpOworCWt0aHJlYWRfc3RvcChocHNhX3NjYW5fdGhyZWFkKTsKK30KKworbW9kdWxlX2luaXQoaHBzYV9pbml0KTsKK21vZHVsZV9leGl0KGhwc2FfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmQxOTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuaApAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqICAgIERpc2sgQXJyYXkgZHJpdmVyIGZvciBIUCBTbWFydCBBcnJheSBTQVMgY29udHJvbGxlcnMKKyAqICAgIENvcHlyaWdodCAyMDAwLCAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogICAgUXVlc3Rpb25zL0NvbW1lbnRzL0J1Z2ZpeGVzIHRvIGlzc19zdG9yYWdlZGV2QGhwLmNvbQorICoKKyAqLworI2lmbmRlZiBIUFNBX0gKKyNkZWZpbmUgSFBTQV9ICisKKyNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KKworI2RlZmluZSBJT19PSwkJMAorI2RlZmluZSBJT19FUlJPUgkxCisKK3N0cnVjdCBjdGxyX2luZm87CisKK3N0cnVjdCBhY2Nlc3NfbWV0aG9kIHsKKwl2b2lkICgqc3VibWl0X2NvbW1hbmQpKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CisJdm9pZCAoKnNldF9pbnRyX21hc2spKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKwl1bnNpZ25lZCBsb25nICgqZmlmb19mdWxsKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKKwl1bnNpZ25lZCBsb25nICgqaW50cl9wZW5kaW5nKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKKwl1bnNpZ25lZCBsb25nICgqY29tbWFuZF9jb21wbGV0ZWQpKHN0cnVjdCBjdGxyX2luZm8gKmgpOworfTsKKworc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCB7CisJaW50IGRldnR5cGU7CisJaW50IGJ1cywgdGFyZ2V0LCBsdW47CQkvKiBhcyBwcmVzZW50ZWQgdG8gdGhlIE9TICovCisJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbOF07CS8qIGFzIHByZXNlbnRlZCB0byB0aGUgSFcgKi8KKyNkZWZpbmUgUkFJRF9DVExSX0xVTklEICJcMFwwXDBcMFwwXDBcMFwwIgorCXVuc2lnbmVkIGNoYXIgZGV2aWNlX2lkWzE2XTsgICAgLyogZnJvbSBpbnF1aXJ5IHBnLiAweDgzICovCisJdW5zaWduZWQgY2hhciB2ZW5kb3JbOF07ICAgICAgICAvKiBieXRlcyA4LTE1IG9mIGlucXVpcnkgZGF0YSAqLworCXVuc2lnbmVkIGNoYXIgbW9kZWxbMTZdOyAgICAgICAgLyogYnl0ZXMgMTYtMzEgb2YgaW5xdWlyeSBkYXRhICovCisJdW5zaWduZWQgY2hhciByZXZpc2lvbls0XTsgICAgICAvKiBieXRlcyAzMi0zNSBvZiBpbnF1aXJ5IGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIHJhaWRfbGV2ZWw7CS8qIGZyb20gaW5xdWlyeSBwYWdlIDB4QzEgKi8KK307CisKK3N0cnVjdCBjdGxyX2luZm8geworCWludAljdGxyOworCWNoYXIJZGV2bmFtZVs4XTsKKwljaGFyICAgICpwcm9kdWN0X25hbWU7CisJY2hhcglmaXJtX3Zlcls0XTsgLyogRmlybXdhcmUgdmVyc2lvbiAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCV9fdTMyCWJvYXJkX2lkOworCXZvaWQgX19pb21lbSAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwlpbnQgCW5yX2NtZHM7IC8qIE51bWJlciBvZiBjb21tYW5kcyBhbGxvd2VkIG9uIHRoaXMgY29udHJvbGxlciAqLworCXN0cnVjdCBDZmdUYWJsZSBfX2lvbWVtICpjZmd0YWJsZTsKKwlpbnQJaW50ZXJydXB0c19lbmFibGVkOworCWludAltYWpvcjsKKwlpbnQgCW1heF9jb21tYW5kczsKKwlpbnQJY29tbWFuZHNfb3V0c3RhbmRpbmc7CisJaW50IAltYXhfb3V0c3RhbmRpbmc7IC8qIERlYnVnICovCisJaW50CXVzYWdlX2NvdW50OyAgLyogbnVtYmVyIG9mIG9wZW5zIGFsbCBhbGwgbWlub3IgZGV2aWNlcyAqLworIwlkZWZpbmUgRE9PUkJFTExfSU5UCTAKKyMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMQorIwlkZWZpbmUgU0lNUExFX01PREVfSU5UCTIKKyMJZGVmaW5lIE1FTVFfTU9ERV9JTlQJMworCXVuc2lnbmVkIGludCBpbnRyWzRdOworCXVuc2lnbmVkIGludCBtc2l4X3ZlY3RvcjsKKwl1bnNpZ25lZCBpbnQgbXNpX3ZlY3RvcjsKKwlzdHJ1Y3QgYWNjZXNzX21ldGhvZCBhY2Nlc3M7CisKKwkvKiBxdWV1ZSBhbmQgcXVldWUgSW5mbyAqLworCXN0cnVjdCBobGlzdF9oZWFkIHJlcVE7CisJc3RydWN0IGhsaXN0X2hlYWQgY21wUTsKKwl1bnNpZ25lZCBpbnQgUWRlcHRoOworCXVuc2lnbmVkIGludCBtYXhRc2luY2Vpbml0OworCXVuc2lnbmVkIGludCBtYXhTRzsKKwlzcGlubG9ja190IGxvY2s7CisKKwkvKiBwb2ludGVycyB0byBjb21tYW5kIGFuZCBlcnJvciBpbmZvIHBvb2wgKi8KKwlzdHJ1Y3QgQ29tbWFuZExpc3QgCSpjbWRfcG9vbDsKKwlkbWFfYWRkcl90CQljbWRfcG9vbF9kaGFuZGxlOworCXN0cnVjdCBFcnJvckluZm8gCSplcnJpbmZvX3Bvb2w7CisJZG1hX2FkZHJfdAkJZXJyaW5mb19wb29sX2RoYW5kbGU7CisJdW5zaWduZWQgbG9uZyAgCQkqY21kX3Bvb2xfYml0czsKKwlpbnQJCQlucl9hbGxvY3M7CisJaW50CQkJbnJfZnJlZXM7CisJaW50CQkJYnVzeV9pbml0aWFsaXppbmc7CisJaW50CQkJYnVzeV9zY2FubmluZzsKKwlzdHJ1Y3QgbXV0ZXgJCWJ1c3lfc2h1dHRpbmdfZG93bjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNjYW5fbGlzdDsKKwlzdHJ1Y3QgY29tcGxldGlvbglzY2FuX3dhaXQ7CisKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3Q7CisJc3BpbmxvY2tfdCBkZXZsb2NrOyAvKiB0byBwcm90ZWN0IGhiYVtjdGxyXS0+ZGV2W107ICAqLworCWludCBuZGV2aWNlczsgLyogbnVtYmVyIG9mIHVzZWQgZWxlbWVudHMgaW4gLmRldltdIGFycmF5LiAqLworI2RlZmluZSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSAyNTYKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZbSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkFdOworfTsKKyNkZWZpbmUgSFBTQV9BQk9SVF9NU0cgMAorI2RlZmluZSBIUFNBX0RFVklDRV9SRVNFVF9NU0cgMQorI2RlZmluZSBIUFNBX0JVU19SRVNFVF9NU0cgMgorI2RlZmluZSBIUFNBX0hPU1RfUkVTRVRfTVNHIDMKKyNkZWZpbmUgSFBTQV9NU0dfU0VORF9SRVRSWV9MSU1JVCAxMAorI2RlZmluZSBIUFNBX01TR19TRU5EX1JFVFJZX0lOVEVSVkFMX01TRUNTIDEwMDAKKworLyogTWF4aW11bSB0aW1lIGluIHNlY29uZHMgZHJpdmVyIHdpbGwgd2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9ucworICogd2hlbiBwb2xsaW5nIGJlZm9yZSBnaXZpbmcgdXAuCisgKi8KKyNkZWZpbmUgSFBTQV9NQVhfUE9MTF9USU1FX1NFQ1MgKDIwKQorCisvKiBEdXJpbmcgU0NTSSBlcnJvciByZWNvdmVyeSwgSFBTQV9UVVJfUkVUUllfTElNSVQgZGVmaW5lcworICogaG93IG1hbnkgdGltZXMgdG8gcmV0cnkgVEVTVCBVTklUIFJFQURZIG9uIGEgZGV2aWNlCisgKiB3aGlsZSB3YWl0aW5nIGZvciBpdCB0byBiZWNvbWUgcmVhZHkgYmVmb3JlIGdpdmluZyB1cC4KKyAqIEhQU0FfTUFYX1dBSVRfSU5URVJWQUxfU0VDUyBpcyB0aGUgbWF4IHdhaXQgaW50ZXJ2YWwKKyAqIGJldHdlZW4gc2VuZGluZyBUVVJzIHdoaWxlIHdhaXRpbmcgZm9yIGEgZGV2aWNlCisgKiB0byBiZWNvbWUgcmVhZHkuCisgKi8KKyNkZWZpbmUgSFBTQV9UVVJfUkVUUllfTElNSVQgKDIwKQorI2RlZmluZSBIUFNBX01BWF9XQUlUX0lOVEVSVkFMX1NFQ1MgKDMwKQorCisvKiBIUFNBX0JPQVJEX1JFQURZX1dBSVRfU0VDUyBpcyBob3cgbG9uZyB0byB3YWl0IGZvciBhIGJvYXJkCisgKiB0byBiZWNvbWUgcmVhZHksIGluIHNlY29uZHMsIGJlZm9yZSBnaXZpbmcgdXAgb24gaXQuCisgKiBIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MgKiBpcyBob3cgbG9uZyB0byB3YWl0CisgKiBiZXR3ZWVuIHBvbGxpbmcgdGhlIGJvYXJkIHRvIHNlZSBpZiBpdCBpcyByZWFkeSwgaW4KKyAqIG1pbGxpc2Vjb25kcy4gIEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTCBhbmQKKyAqIEhQU0FfQk9BUkRfUkVBRFlfSVRFUkFUSU9OUyBhcmUgZGVyaXZlZCBmcm9tIHRob3NlLgorICovCisjZGVmaW5lIEhQU0FfQk9BUkRfUkVBRFlfV0FJVF9TRUNTICgxMjApCisjZGVmaW5lIEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTF9NU0VDUyAoMTAwKQorI2RlZmluZSBIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUwgXAorCSgoSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTICogSFopIC8gMTAwMCkKKyNkZWZpbmUgSFBTQV9CT0FSRF9SRUFEWV9JVEVSQVRJT05TIFwKKwkoKEhQU0FfQk9BUkRfUkVBRFlfV0FJVF9TRUNTICogMTAwMCkgLyBcCisJCUhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTF9NU0VDUykKKyNkZWZpbmUgSFBTQV9QT1NUX1JFU0VUX1BBVVNFX01TRUNTICgzMDAwKQorI2RlZmluZSBIUFNBX1BPU1RfUkVTRVRfTk9PUF9SRVRSSUVTICgxMikKKworLyogIERlZmluaW5nIHRoZSBkaWZmZW50IGFjY2Vzc19tZW50aG9kcyAqLworLyoKKyAqIE1lbW9yeSBtYXBwZWQgRklGTyBpbnRlcmZhY2UgKFNNQVJUIDUzeHggY2FyZHMpCisgKi8KKyNkZWZpbmUgU0E1X0RPT1JCRUxMCTB4MjAKKyNkZWZpbmUgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQJMHg0MAorI2RlZmluZSBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVAkweDM0CisjZGVmaW5lIFNBNV9SRVBMWV9QT1JUX09GRlNFVAkJMHg0NAorI2RlZmluZSBTQTVfSU5UUl9TVEFUVVMJCTB4MzAKKyNkZWZpbmUgU0E1X1NDUkFUQ0hQQURfT0ZGU0VUCTB4QjAKKworI2RlZmluZSBTQTVfQ1RDRkdfT0ZGU0VUCTB4QjQKKyNkZWZpbmUgU0E1X0NUTUVNX09GRlNFVAkweEI4CisKKyNkZWZpbmUgU0E1X0lOVFJfT0ZGCQkweDA4CisjZGVmaW5lIFNBNUJfSU5UUl9PRkYJCTB4MDQKKyNkZWZpbmUgU0E1X0lOVFJfUEVORElORwkweDA4CisjZGVmaW5lIFNBNUJfSU5UUl9QRU5ESU5HCTB4MDQKKyNkZWZpbmUgRklGT19FTVBUWQkJMHhmZmZmZmZmZgorI2RlZmluZSBIUFNBX0ZJUk1XQVJFX1JFQURZCTB4ZmZmZjAwMDAgLyogdmFsdWUgaW4gc2NyYXRjaHBhZCByZWdpc3RlciAqLworCisjZGVmaW5lIEhQU0FfRVJST1JfQklUCQkweDAyCisjZGVmaW5lIEhQU0FfVEFHX0NPTlRBSU5TX0lOREVYKHRhZykgKCh0YWcpICYgMHgwNCkKKyNkZWZpbmUgSFBTQV9UQUdfVE9fSU5ERVgodGFnKSAoKHRhZykgPj4gMykKKyNkZWZpbmUgSFBTQV9UQUdfRElTQ0FSRF9FUlJPUl9CSVRTKHRhZykgKCh0YWcpICYgfjMpCisKKyNkZWZpbmUgSFBTQV9JTlRSX09OIAkxCisjZGVmaW5lIEhQU0FfSU5UUl9PRkYJMAorLyoKKwlTZW5kIHRoZSBjb21tYW5kIHRvIHRoZSBoYXJkd2FyZQorKi8KK3N0YXRpYyB2b2lkIFNBNV9zdWJtaXRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKK3sKKyNpZmRlZiBIUFNBX0RFQlVHCisJIHByaW50ayhLRVJOX1dBUk5JTkcgImhwc2E6IFNlbmRpbmcgJXggLSBkb3duIHRvIGNvbnRyb2xsZXJcbiIsCisJCWMtPmJ1c2FkZHIpOworI2VuZGlmIC8qIEhQU0FfREVCVUcgKi8KKwl3cml0ZWwoYy0+YnVzYWRkciwgaC0+dmFkZHIgKyBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVCk7CisJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcrKzsKKwlpZiAoaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPiBoLT5tYXhfb3V0c3RhbmRpbmcpCisJCWgtPm1heF9vdXRzdGFuZGluZyA9IGgtPmNvbW1hbmRzX291dHN0YW5kaW5nOworfQorCisvKgorICogIFRoaXMgY2FyZCBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG90aGVyIGNhcmRzLgorICogICAwIHR1cm5zIGludGVycnVwdHMgb24uLi4KKyAqICAgMHgwOCB0dXJucyB0aGVtIG9mZi4uLgorICovCitzdGF0aWMgdm9pZCBTQTVfaW50cl9tYXNrKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWlmICh2YWwpIHsgLyogVHVybiBpbnRlcnJ1cHRzIG9uICovCisJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDE7CisJCXdyaXRlbCgwLCBoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKKwl9IGVsc2UgeyAvKiBUdXJuIHRoZW0gb2ZmICovCisJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDA7CisJCXdyaXRlbChTQTVfSU5UUl9PRkYsCisJCQloLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKKwl9Cit9CisvKgorICogIFJldHVybnMgdHJ1ZSBpZiBmaWZvIGlzIGZ1bGwuCisgKgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfZmlmb19mdWxsKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaWYgKGgtPmNvbW1hbmRzX291dHN0YW5kaW5nID49IGgtPm1heF9jb21tYW5kcykKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKKworfQorLyoKKyAqICAgcmV0dXJucyB2YWx1ZSByZWFkIGZyb20gaGFyZHdhcmUuCisgKiAgICAgcmV0dXJucyBGSUZPX0VNUFRZIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfY29tcGxldGVkKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZQorCQk9IHJlYWRsKGgtPnZhZGRyICsgU0E1X1JFUExZX1BPUlRfT0ZGU0VUKTsKKworCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQorCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOworCisjaWZkZWYgSFBTQV9ERUJVRworCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQorCQlwcmludGsoS0VSTl9JTkZPICJocHNhOiAgUmVhZCAlbHggYmFjayBmcm9tIGJvYXJkXG4iLAorCQkJcmVnaXN0ZXJfdmFsdWUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBzYTogIEZJRk8gRW1wdHkgcmVhZFxuIik7CisjZW5kaWYKKworCXJldHVybiByZWdpc3Rlcl92YWx1ZTsKK30KKy8qCisgKglSZXR1cm5zIHRydWUgaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSAgPQorCQlyZWFkbChoLT52YWRkciArIFNBNV9JTlRSX1NUQVRVUyk7CisjaWZkZWYgSFBTQV9ERUJVRworCXByaW50ayhLRVJOX0lORk8gImhwc2E6IGludHJfcGVuZGluZyAlbHhcbiIsIHJlZ2lzdGVyX3ZhbHVlKTsKKyNlbmRpZiAgLyogSFBTQV9ERUJVRyAqLworCWlmIChyZWdpc3Rlcl92YWx1ZSAmICBTQTVfSU5UUl9QRU5ESU5HKQorCQlyZXR1cm4gIDE7CisJcmV0dXJuIDAgOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgYWNjZXNzX21ldGhvZCBTQTVfYWNjZXNzID0geworCVNBNV9zdWJtaXRfY29tbWFuZCwKKwlTQTVfaW50cl9tYXNrLAorCVNBNV9maWZvX2Z1bGwsCisJU0E1X2ludHJfcGVuZGluZywKKwlTQTVfY29tcGxldGVkLAorfTsKKworc3RydWN0IGJvYXJkX3R5cGUgeworCV9fdTMyCWJvYXJkX2lkOworCWNoYXIJKnByb2R1Y3RfbmFtZTsKKwlzdHJ1Y3QgYWNjZXNzX21ldGhvZCAqYWNjZXNzOworfTsKKworCisvKiBlbmQgb2Ygb2xkIGhwc2Ffc2NzaS5oIGZpbGUgKi8KKworI2VuZGlmIC8qIEhQU0FfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaCBiL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDcxMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaApAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqICAgIERpc2sgQXJyYXkgZHJpdmVyIGZvciBIUCBTbWFydCBBcnJheSBTQVMgY29udHJvbGxlcnMKKyAqICAgIENvcHlyaWdodCAyMDAwLCAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogICAgUXVlc3Rpb25zL0NvbW1lbnRzL0J1Z2ZpeGVzIHRvIGlzc19zdG9yYWdlZGV2QGhwLmNvbQorICoKKyAqLworI2lmbmRlZiBIUFNBX0NNRF9ICisjZGVmaW5lIEhQU0FfQ01EX0gKKworLyogZ2VuZXJhbCBib3VuZGFyeSBkZWZpbnRpb25zICovCisjZGVmaW5lIFNFTlNFSU5GT0JZVEVTICAgICAgICAgIDMyIC8qIG1heSB2YXJ5IGJldHdlZW4gaGJhcyAqLworI2RlZmluZSBNQVhTR0VOVFJJRVMgICAgICAgICAgICAzMQorI2RlZmluZSBNQVhSRVBMWVFTICAgICAgICAgICAgICAyNTYKKworLyogQ29tbWFuZCBTdGF0dXMgdmFsdWUgKi8KKyNkZWZpbmUgQ01EX1NVQ0NFU1MgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIENNRF9UQVJHRVRfU1RBVFVTICAgICAgIDB4MDAwMQorI2RlZmluZSBDTURfREFUQV9VTkRFUlJVTiAgICAgICAweDAwMDIKKyNkZWZpbmUgQ01EX0RBVEFfT1ZFUlJVTiAgICAgICAgMHgwMDAzCisjZGVmaW5lIENNRF9JTlZBTElEICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBDTURfUFJPVE9DT0xfRVJSICAgICAgICAweDAwMDUKKyNkZWZpbmUgQ01EX0hBUkRXQVJFX0VSUiAgICAgICAgMHgwMDA2CisjZGVmaW5lIENNRF9DT05ORUNUSU9OX0xPU1QgICAgIDB4MDAwNworI2RlZmluZSBDTURfQUJPUlRFRCAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQ01EX0FCT1JUX0ZBSUxFRCAgICAgICAgMHgwMDA5CisjZGVmaW5lIENNRF9VTlNPTElDSVRFRF9BQk9SVCAgIDB4MDAwQQorI2RlZmluZSBDTURfVElNRU9VVCAgICAgICAgICAgICAweDAwMEIKKyNkZWZpbmUgQ01EX1VOQUJPUlRBQkxFCQkweDAwMEMKKworLyogVW5pdCBBdHRlbnRpb25zIEFTQydzIGFzIGRlZmluZWQgZm9yIHRoZSBNU0EyMDEyc2EgKi8KKyNkZWZpbmUgUE9XRVJfT1JfUkVTRVQJCQkweDI5CisjZGVmaW5lIFNUQVRFX0NIQU5HRUQJCQkweDJhCisjZGVmaW5lIFVOSVRfQVRURU5USU9OX0NMRUFSRUQJCTB4MmYKKyNkZWZpbmUgTFVOX0ZBSUxFRAkJCTB4M2UKKyNkZWZpbmUgUkVQT1JUX0xVTlNfQ0hBTkdFRAkJMHgzZgorCisvKiBVbml0IEF0dGVudGlvbnMgQVNDUSdzIGFzIGRlZmluZWQgZm9yIHRoZSBNU0EyMDEyc2EgKi8KKworCS8qIFRoZXNlIEFTQ1EncyBkZWZpbmVkIGZvciBBU0MgPSBQT1dFUl9PUl9SRVNFVCAqLworI2RlZmluZSBQT1dFUl9PTl9SRVNFVAkJCTB4MDAKKyNkZWZpbmUgUE9XRVJfT05fUkVCT09UCQkJMHgwMQorI2RlZmluZSBTQ1NJX0JVU19SRVNFVAkJCTB4MDIKKyNkZWZpbmUgTVNBX1RBUkdFVF9SRVNFVAkJMHgwMworI2RlZmluZSBDT05UUk9MTEVSX0ZBSUxPVkVSCQkweDA0CisjZGVmaW5lIFRSQU5TQ0VJVkVSX1NFCQkJMHgwNQorI2RlZmluZSBUUkFOU0NFSVZFUl9MVkQJCQkweDA2CisKKwkvKiBUaGVzZSBBU0NRJ3MgZGVmaW5lZCBmb3IgQVNDID0gU1RBVEVfQ0hBTkdFRCAqLworI2RlZmluZSBSRVNFUlZBVElPTl9QUkVFTVBURUQJCTB4MDMKKyNkZWZpbmUgQVNZTV9BQ0NFU1NfQ0hBTkdFRAkJMHgwNgorI2RlZmluZSBMVU5fQ0FQQUNJVFlfQ0hBTkdFRAkJMHgwOQorCisvKiB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgWEZFUl9OT05FICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBYRkVSX1dSSVRFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFhGRVJfUkVBRCAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgWEZFUl9SU1ZEICAgICAgICAgICAgICAgMHgwMworCisvKiB0YXNrIGF0dHJpYnV0ZSAqLworI2RlZmluZSBBVFRSX1VOVEFHR0VEICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUVFJfU0lNUExFICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRUUl9IRUFET0ZRVUVVRSAgICAgICAgMHgwNQorI2RlZmluZSBBVFRSX09SREVSRUQgICAgICAgICAgICAweDA2CisjZGVmaW5lIEFUVFJfQUNBICAgICAgICAgICAgICAgIDB4MDcKKworLyogY2RiIHR5cGUgKi8KKyNkZWZpbmUgVFlQRV9DTUQJCQkJMHgwMAorI2RlZmluZSBUWVBFX01TRwkJCQkweDAxCisKKy8qIGNvbmZpZyBzcGFjZSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENGR19WRU5ET1JJRCAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ0ZHX0RFVklDRUlEICAgICAgICAgICAgMHgwMgorI2RlZmluZSBDRkdfSTJPQkFSICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENGR19NRU0xQkFSICAgICAgICAgICAgIDB4MTQKKworLyogaTJvIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgSTJPX0lCREJfU0VUICAgICAgICAgICAgMHgyMAorI2RlZmluZSBJMk9fSUJEQl9DTEVBUiAgICAgICAgICAweDcwCisjZGVmaW5lIEkyT19JTlRfU1RBVFVTICAgICAgICAgIDB4MzAKKyNkZWZpbmUgSTJPX0lOVF9NQVNLICAgICAgICAgICAgMHgzNAorI2RlZmluZSBJMk9fSUJQT1NUX1EgICAgICAgICAgICAweDQwCisjZGVmaW5lIEkyT19PQlBPU1RfUSAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgSTJPX0RNQTFfQ0ZHCQkweDIxNAorCisvKiBDb25maWd1cmF0aW9uIFRhYmxlICovCisjZGVmaW5lIENGR1RCTF9DaGFuZ2VSZXEgICAgICAgIDB4MDAwMDAwMDFsCisjZGVmaW5lIENGR1RCTF9BY2NDbWRzICAgICAgICAgIDB4MDAwMDAwMDFsCisKKyNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1NpbXBsZSAgICAgMHgwMDAwMDAwMmwKKworI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9VbHRyYTIgICAweDAwMDAwMDAxbAorI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9VbHRyYTMgICAweDAwMDAwMDAybAorI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9GaWJyZTFHICAweDAwMDAwMTAwbAorI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9GaWJyZTJHICAweDAwMDAwMjAwbAorc3RydWN0IHZhbHMzMiB7CisJX191MzIgICBsb3dlcjsKKwlfX3UzMiAgIHVwcGVyOworfTsKKwordW5pb24gdTY0Yml0IHsKKwlzdHJ1Y3QgdmFsczMyIHZhbDMyOworCV9fdTY0IHZhbDsKK307CisKKy8qIEZJWE1FIHRoaXMgaXMgYSBwZXIgY29udHJvbGxlciB2YWx1ZSAoYmFyZiEpICovCisjZGVmaW5lIEhQU0FfTUFYX1RBUkdFVFNfUEVSX0NUTFIgMTYKKyNkZWZpbmUgSFBTQV9NQVhfTFVOIDI1NgorI2RlZmluZSBIUFNBX01BWF9QSFlTX0xVTiAxMDI0CisKKy8qIFNDU0ktMyBDb21tYW5kcyAqLworI3ByYWdtYSBwYWNrKDEpCisKKyNkZWZpbmUgSFBTQV9JTlFVSVJZIDB4MTIKK3N0cnVjdCBJbnF1aXJ5RGF0YSB7CisJX191OCBkYXRhX2J5dGVbMzZdOworfTsKKworI2RlZmluZSBIUFNBX1JFUE9SVF9MT0cgMHhjMiAgICAvKiBSZXBvcnQgTG9naWNhbCBMVU5zICovCisjZGVmaW5lIEhQU0FfUkVQT1JUX1BIWVMgMHhjMyAgIC8qIFJlcG9ydCBQaHlzaWNhbCBMVU5zICovCitzdHJ1Y3QgUmVwb3J0TFVOZGF0YSB7CisJX191OCBMVU5MaXN0TGVuZ3RoWzRdOworCV9fdTMyIHJlc2VydmVkOworCV9fdTggTFVOW0hQU0FfTUFYX0xVTl1bOF07Cit9OworCitzdHJ1Y3QgUmVwb3J0RXh0ZW5kZWRMVU5kYXRhIHsKKwlfX3U4IExVTkxpc3RMZW5ndGhbNF07CisJX191OCBleHRlbmRlZF9yZXNwb25zZV9mbGFnOworCV9fdTggcmVzZXJ2ZWRbM107CisJX191OCBMVU5bSFBTQV9NQVhfTFVOXVsyNF07Cit9OworCitzdHJ1Y3QgU2Vuc2VTdWJzeXN0ZW1faW5mbyB7CisJX191OCByZXNlcnZlZFszNl07CisJX191OCBwb3J0bmFtZVs4XTsKKwlfX3U4IHJlc2VydmVkMVsxMTA4XTsKK307CisKKyNkZWZpbmUgSFBTQV9SRUFEX0NBUEFDSVRZIDB4MjUgLyogUmVhZCBDYXBhY2l0eSAqLworc3RydWN0IFJlYWRDYXBkYXRhIHsKKwlfX3U4IHRvdGFsX3NpemVbNF07CS8qIFRvdGFsIHNpemUgaW4gYmxvY2tzICovCisJX191OCBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLworfTsKKworI2lmIDAKKy8qIDEyIGJ5dGUgY29tbWFuZHMgbm90IGltcGxlbWVudGVkIGluIGZpcm13YXJlIHlldC4gKi8KKyNkZWZpbmUgSFBTQV9SRUFEIAkweGE4CisjZGVmaW5lIEhQU0FfV1JJVEUJMHhhYQorI2VuZGlmCisKKyNkZWZpbmUgSFBTQV9SRUFEICAgMHgyOCAgICAvKiBSZWFkKDEwKSAqLworI2RlZmluZSBIUFNBX1dSSVRFICAweDJhICAgIC8qIFdyaXRlKDEwKSAqLworCisvKiBCTUlDIGNvbW1hbmRzICovCisjZGVmaW5lIEJNSUNfUkVBRCAweDI2CisjZGVmaW5lIEJNSUNfV1JJVEUgMHgyNworI2RlZmluZSBCTUlDX0NBQ0hFX0ZMVVNIIDB4YzIKKyNkZWZpbmUgSFBTQV9DQUNIRV9GTFVTSCAweDAxCS8qIEMyIHdhcyBhbHJlYWR5IGJlaW5nIHVzZWQgYnkgSFBTQSAqLworCisvKiBDb21tYW5kIExpc3QgU3RydWN0dXJlICovCit1bmlvbiBTQ1NJM0FkZHIgeworCXN0cnVjdCB7CisJCV9fdTggRGV2OworCQlfX3U4IEJ1czo2OworCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIwMCAqLworCX0gUGVyaXBEZXY7CisJc3RydWN0IHsKKwkJX191OCBEZXZMU0I7CisJCV9fdTggRGV2TVNCOjY7CisJCV9fdTggTW9kZToyOyAgICAgICAgLyogYjAxICovCisJfSBMb2dEZXY7CisJc3RydWN0IHsKKwkJX191OCBEZXY6NTsKKwkJX191OCBCdXM6MzsKKwkJX191OCBUYXJnOjY7CisJCV9fdTggTW9kZToyOyAgICAgICAgLyogYjEwICovCisJfSBMb2dVbml0OworfTsKKworc3RydWN0IFBoeXNEZXZBZGRyIHsKKwlfX3UzMiAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKKwlfX3UzMiAgICAgICAgICAgICBCdXM6NjsKKwlfX3UzMiAgICAgICAgICAgICBNb2RlOjI7CisJLyogMiBsZXZlbCB0YXJnZXQgZGV2aWNlIGFkZHIgKi8KKwl1bmlvbiBTQ1NJM0FkZHIgIFRhcmdldFsyXTsKK307CisKK3N0cnVjdCBMb2dEZXZBZGRyIHsKKwlfX3UzMiAgICAgICAgICAgIFZvbElkOjMwOworCV9fdTMyICAgICAgICAgICAgTW9kZToyOworCV9fdTggICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9OworCit1bmlvbiBMVU5BZGRyIHsKKwlfX3U4ICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworCXVuaW9uIFNDU0kzQWRkciAgICBTQ1NJM0x1bls0XTsKKwlzdHJ1Y3QgUGh5c0RldkFkZHIgUGh5c0RldjsKKwlzdHJ1Y3QgTG9nRGV2QWRkciAgTG9nRGV2OworfTsKKworc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIHsKKwlfX3U4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOworCV9fdTggICAgICAgICAgICAgIFNHTGlzdDsKKwlfX3UxNiAgICAgICAgICAgICBTR1RvdGFsOworCXN0cnVjdCB2YWxzMzIgICAgIFRhZzsKKwl1bmlvbiBMVU5BZGRyICAgICBMVU47Cit9OworCitzdHJ1Y3QgUmVxdWVzdEJsb2NrIHsKKwlfX3U4ICAgQ0RCTGVuOworCXN0cnVjdCB7CisJCV9fdTggVHlwZTozOworCQlfX3U4IEF0dHJpYnV0ZTozOworCQlfX3U4IERpcmVjdGlvbjoyOworCX0gVHlwZTsKKwlfX3UxNiAgVGltZW91dDsKKwlfX3U4ICAgQ0RCWzE2XTsKK307CisKK3N0cnVjdCBFcnJEZXNjcmlwdG9yIHsKKwlzdHJ1Y3QgdmFsczMyIEFkZHI7CisJX191MzIgIExlbjsKK307CisKK3N0cnVjdCBTR0Rlc2NyaXB0b3IgeworCXN0cnVjdCB2YWxzMzIgQWRkcjsKKwlfX3UzMiAgTGVuOworCV9fdTMyICBFeHQ7Cit9OworCit1bmlvbiBNb3JlRXJySW5mbyB7CisJc3RydWN0IHsKKwkJX191OCAgUmVzZXJ2ZWRbM107CisJCV9fdTggIFR5cGU7CisJCV9fdTMyIEVycm9ySW5mbzsKKwl9IENvbW1vbl9JbmZvOworCXN0cnVjdCB7CisJCV9fdTggIFJlc2VydmVkWzJdOworCQlfX3U4ICBvZmZlbnNlX3NpemU7IC8qIHNpemUgb2Ygb2ZmZW5kaW5nIGVudHJ5ICovCisJCV9fdTggIG9mZmVuc2VfbnVtOyAgLyogYnl0ZSAjIG9mIG9mZmVuc2UgMC1iYXNlICovCisJCV9fdTMyIG9mZmVuc2VfdmFsdWU7CisJfSBJbnZhbGlkX0NtZDsKK307CitzdHJ1Y3QgRXJyb3JJbmZvIHsKKwlfX3U4ICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKKwlfX3U4ICAgICAgICAgICAgICAgU2Vuc2VMZW47CisJX191MTYgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7CisJX191MzIgICAgICAgICAgICAgIFJlc2lkdWFsQ250OworCXVuaW9uIE1vcmVFcnJJbmZvICBNb3JlRXJySW5mbzsKKwlfX3U4ICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKK307CisvKiBDb21tYW5kIHR5cGVzICovCisjZGVmaW5lIENNRF9JT0NUTF9QRU5EICAweDAxCisjZGVmaW5lIENNRF9TQ1NJCTB4MDMKKworc3RydWN0IGN0bHJfaW5mbzsgLyogZGVmaW5lZCBpbiBocHNhLmggKi8KKy8qIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSA4CisgKiBvZCBvbiBhbGwgYXJjaGl0ZWN0dXJlcywgYmVjYXVzZSB0aGUgY29udHJvbGxlciB1c2VzIDIKKyAqIGxvd2VyIGJpdHMgb2YgdGhlIGFkZHJlc3MsIGFuZCB0aGUgZHJpdmVyIHVzZXMgMSBsb3dlcgorICogYml0ICgzIGJpdHMgdG90YWwuKQorICovCitzdHJ1Y3QgQ29tbWFuZExpc3QgeworCXN0cnVjdCBDb21tYW5kTGlzdEhlYWRlciBIZWFkZXI7CisJc3RydWN0IFJlcXVlc3RCbG9jayAgICAgIFJlcXVlc3Q7CisJc3RydWN0IEVyckRlc2NyaXB0b3IgICAgIEVyckRlc2M7CisJc3RydWN0IFNHRGVzY3JpcHRvciAgICAgIFNHW01BWFNHRU5UUklFU107CisJLyogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21tYW5kICovCisJX191MzIJCQkgICBidXNhZGRyOyAvKiBwaHlzaWNhbCBhZGRyIG9mIHRoaXMgcmVjb3JkICovCisJc3RydWN0IEVycm9ySW5mbyAqZXJyX2luZm87IC8qIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW0gKi8KKwlzdHJ1Y3QgY3Rscl9pbmZvCSAgICpoOworCWludAkJCSAgIGNtZF90eXBlOworCWxvbmcJCQkgICBjbWRpbmRleDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCXN0cnVjdCBDb21tYW5kTGlzdCAqcHJldjsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKm5leHQ7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOworCWludAkgcmV0cnlfY291bnQ7CisJdm9pZCAgICpzY3NpX2NtZDsKK307CisKKy8qIENvbmZpZ3VyYXRpb24gVGFibGUgU3RydWN0dXJlICovCitzdHJ1Y3QgSG9zdFdyaXRlIHsKKwlfX3UzMiBUcmFuc3BvcnRSZXF1ZXN0OworCV9fdTMyIFJlc2VydmVkOworCV9fdTMyIENvYWxJbnREZWxheTsKKwlfX3UzMiBDb2FsSW50Q291bnQ7Cit9OworCitzdHJ1Y3QgQ2ZnVGFibGUgeworCV9fdTggICAgICAgICAgICAgU2lnbmF0dXJlWzRdOworCV9fdTMyICAgICAgICAgICAgU3BlY1ZhbGVuY2U7CisJX191MzIgICAgICAgICAgICBUcmFuc3BvcnRTdXBwb3J0OworCV9fdTMyICAgICAgICAgICAgVHJhbnNwb3J0QWN0aXZlOworCXN0cnVjdCBIb3N0V3JpdGUgSG9zdFdyaXRlOworCV9fdTMyICAgICAgICAgICAgQ21kc091dE1heDsKKwlfX3UzMiAgICAgICAgICAgIEJ1c1R5cGVzOworCV9fdTMyICAgICAgICAgICAgUmVzZXJ2ZWQ7CisJX191OCAgICAgICAgICAgICBTZXJ2ZXJOYW1lWzE2XTsKKwlfX3UzMiAgICAgICAgICAgIEhlYXJ0QmVhdDsKKwlfX3UzMiAgICAgICAgICAgIFNDU0lfUHJlZmV0Y2g7Cit9OworCitzdHJ1Y3QgaHBzYV9wY2lfaW5mbyB7CisJdW5zaWduZWQgY2hhcglidXM7CisJdW5zaWduZWQgY2hhcglkZXZfZm47CisJdW5zaWduZWQgc2hvcnQJZG9tYWluOworCV9fdTMyCQlib2FyZF9pZDsKK307CisKKyNwcmFnbWEgcGFjaygpCisjZW5kaWYgLyogSFBTQV9DTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDg2NDNmNTAuLjllNTJkMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTY1MjEsNiArNjUyMSw3IEBACiAJaW50IHJjOwogCiAJRU5URVI7CisJaW9hX2NmZy0+cGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwogCXJjID0gcGNpX3Jlc3RvcmVfc3RhdGUoaW9hX2NmZy0+cGRldik7CiAKIAlpZiAocmMgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggYzRiNThkMC4uODgxZDVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtNjgsMTggKzY4LDIwIEBACiAKIC8qKgogICogc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAtIEZDUCBsYXllciBpbnRlcm5hbCBkYXRhCi0gKiBAc2NzaV9wa3RfcG9vbDogIE1lbW9yeSBwb29sIHRvIGRyYXcgRkNQIHBhY2tldHMgZnJvbQorICogQHNjc2lfcGt0X3Bvb2w6IE1lbW9yeSBwb29sIHRvIGRyYXcgRkNQIHBhY2tldHMgZnJvbQorICogQHNjc2lfcXVldWVfbG9jazogUHJvdGVjdHMgdGhlIHNjc2lfcGt0X3F1ZXVlCiAgKiBAc2NzaV9wa3RfcXVldWU6IEN1cnJlbnQgRkNQIHBhY2tldHMKICAqIEBsYXN0X2Nhbl9xdWV1ZV9yYW1wX2Rvd25fdGltZTogcmFtcCBkb3duIHRpbWUKICAqIEBsYXN0X2Nhbl9xdWV1ZV9yYW1wX3VwX3RpbWU6IHJhbXAgdXAgdGltZQogICogQG1heF9jYW5fcXVldWU6IG1heCBjYW5fcXVldWUgc2l6ZQogICovCiBzdHJ1Y3QgZmNfZmNwX2ludGVybmFsIHsKLQltZW1wb29sX3QJICpzY3NpX3BrdF9wb29sOwotCXN0cnVjdCBsaXN0X2hlYWQgc2NzaV9wa3RfcXVldWU7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2Nhbl9xdWV1ZV9yYW1wX2Rvd25fdGltZTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfY2FuX3F1ZXVlX3JhbXBfdXBfdGltZTsKLQlpbnQgbWF4X2Nhbl9xdWV1ZTsKKwltZW1wb29sX3QJCSpzY3NpX3BrdF9wb29sOworCXNwaW5sb2NrX3QJCXNjc2lfcXVldWVfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNjc2lfcGt0X3F1ZXVlOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfY2FuX3F1ZXVlX3JhbXBfZG93bl90aW1lOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfY2FuX3F1ZXVlX3JhbXBfdXBfdGltZTsKKwlpbnQJCQltYXhfY2FuX3F1ZXVlOwogfTsKIAogI2RlZmluZSBmY19nZXRfc2NzaV9pbnRlcm5hbCh4KQkoKHN0cnVjdCBmY19mY3BfaW50ZXJuYWwgKikoeCktPnNjc2lfcHJpdikKQEAgLTQxMCwxMiArNDEyLDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIGxlbik7Ci0JaWYgKCFmcCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCWZjX2ZjcF9jYW5fcXVldWVfcmFtcF9kb3duKGxwb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiBmcDsKKwlpZiAobGlrZWx5KGZwKSkKKwkJcmV0dXJuIGZwOworCisJLyogZXJyb3IgY2FzZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlmY19mY3BfY2FuX3F1ZXVlX3JhbXBfZG93bihscG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtOTkwLDcgKzk5NCw3IEBACiAJc3RydWN0IHNjc2lfY21uZCAqc2NfY21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIHJlc3RhcnQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmc3AsICZzaS0+c2NzaV9wa3RfcXVldWUsIGxpc3QpIHsKIAkJc2NfY21kID0gZnNwLT5jbWQ7CkBAIC0xMDAxLDcgKzEwMDUsNyBAQAogCQkJY29udGludWU7CiAKIAkJZmNfZmNwX3BrdF9ob2xkKGZzcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKCFmY19mY3BfbG9ja19wa3QoZnNwKSkgewogCQkJZmNfZmNwX2NsZWFudXBfY21kKGZzcCwgZXJyb3IpOwpAQCAtMTAxMCwxNCArMTAxNCwxNCBAQAogCQl9CiAKIAkJZmNfZmNwX3BrdF9yZWxlYXNlKGZzcCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogd2hpbGUgd2UgZHJvcHBlZCB0aGUgbG9jayBtdWx0aXBsZSBwa3RzIGNvdWxkCiAJCSAqIGhhdmUgYmVlbiByZWxlYXNlZCwgc28gd2UgaGF2ZSB0byBzdGFydCBvdmVyLgogCQkgKi8KIAkJZ290byByZXN0YXJ0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMTAzNSwxMSArMTAzOSwxMiBAQAogICogQGZzcDogICBUaGUgRkNQIHBhY2tldCB0byBzZW5kCiAgKgogICogUmV0dXJuOiAgWmVybyBmb3Igc3VjY2VzcyBhbmQgLTEgZm9yIGZhaWx1cmUKLSAqIExvY2tzOiAgIENhbGxlZCB3aXRoIHRoZSBob3N0IGxvY2sgYW5kIGlycXMgZGlzYWJsZWQuCisgKiBMb2NrczogICBDYWxsZWQgd2l0aG91dCBsb2NrcyBoZWxkCiAgKi8KIHN0YXRpYyBpbnQgZmNfZmNwX3BrdF9zZW5kKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mY3BfcGt0ICpmc3ApCiB7CiAJc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAqc2kgPSBmY19nZXRfc2NzaV9pbnRlcm5hbChscG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKIAlmc3AtPmNtZC0+U0NwLnB0ciA9IChjaGFyICopZnNwOwpAQCAtMTA0OSwxMyArMTA1NCwxNiBAQAogCWludF90b19zY3NpbHVuKGZzcC0+Y21kLT5kZXZpY2UtPmx1biwKIAkJICAgICAgIChzdHJ1Y3Qgc2NzaV9sdW4gKilmc3AtPmNkYl9jbWQuZmNfbHVuKTsKIAltZW1jcHkoZnNwLT5jZGJfY21kLmZjX2NkYiwgZnNwLT5jbWQtPmNtbmQsIGZzcC0+Y21kLT5jbWRfbGVuKTsKLQlsaXN0X2FkZF90YWlsKCZmc3AtPmxpc3QsICZzaS0+c2NzaV9wa3RfcXVldWUpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZnNwLT5saXN0LCAmc2ktPnNjc2lfcGt0X3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJcmMgPSBscG9ydC0+dHQuZmNwX2NtZF9zZW5kKGxwb3J0LCBmc3AsIGZjX2ZjcF9yZWN2KTsKLQlzcGluX2xvY2tfaXJxKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2spOwotCWlmIChyYykKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZGVsKCZmc3AtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaS0+c2NzaV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJfQogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTc1Miw2ICsxNzYwLDcgQEAKIAlzdHJ1Y3QgZmNvZV9kZXZfc3RhdHMgKnN0YXRzOwogCiAJbHBvcnQgPSBzaG9zdF9wcml2KHNjX2NtZC0+ZGV2aWNlLT5ob3N0KTsKKwlzcGluX3VubG9ja19pcnEobHBvcnQtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlydmFsID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpOwogCWlmIChydmFsKSB7CkBAIC0xODM0LDYgKzE4NDMsNyBAQAogCQlyYyA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAJfQogb3V0OgorCXNwaW5fbG9ja19pcnEobHBvcnQtPmhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTChmY19xdWV1ZWNvbW1hbmQpOwpAQCAtMTg2NCwxMSArMTg3NCw4IEBACiAKIAlscG9ydCA9IGZzcC0+bHA7CiAJc2kgPSBmY19nZXRfc2NzaV9pbnRlcm5hbChscG9ydCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCWlmICghZnNwLT5jbWQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKCFmc3AtPmNtZCkKIAkJcmV0dXJuOwotCX0KIAogCS8qCiAJICogaWYgY2FuX3F1ZXVlIHJhbXAgZG93biBpcyBkb25lIHRoZW4gdHJ5IGNhbl9xdWV1ZSByYW1wIHVwCkBAIC0xODgwLDEwICsxODg3LDggQEAKIAlzY19jbWQgPSBmc3AtPmNtZDsKIAlmc3AtPmNtZCA9IE5VTEw7CiAKLQlpZiAoIXNjX2NtZC0+U0NwLnB0cikgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXNjX2NtZC0+U0NwLnB0cikKIAkJcmV0dXJuOwotCX0KIAogCUNNRF9TQ1NJX1NUQVRVUyhzY19jbWQpID0gZnNwLT5jZGJfc3RhdHVzOwogCXN3aXRjaCAoZnNwLT5zdGF0dXNfY29kZSkgewpAQCAtMTk0NSwxMCArMTk1MCwxMSBAQAogCQlicmVhazsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2ktPnNjc2lfcXVldWVfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZmc3AtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKIAlzY19jbWQtPlNDcC5wdHIgPSBOVUxMOwogCXNjX2NtZC0+c2NzaV9kb25lKHNjX2NtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkvKiByZWxlYXNlIHJlZiBmcm9tIGluaXRpYWwgYWxsb2NhdGlvbiBpbiBxdWV1ZSBjb21tYW5kICovCiAJZmNfZmNwX3BrdF9yZWxlYXNlKGZzcCk7CkBAIC0yMjE2LDYgKzIyMjIsNyBAQAogCWxwb3J0LT5zY3NpX3ByaXYgPSBzaTsKIAlzaS0+bWF4X2Nhbl9xdWV1ZSA9IGxwb3J0LT5ob3N0LT5jYW5fcXVldWU7CiAJSU5JVF9MSVNUX0hFQUQoJnNpLT5zY3NpX3BrdF9xdWV1ZSk7CisJc3Bpbl9sb2NrX2luaXQoJnNpLT5zY3NpX3F1ZXVlX2xvY2spOwogCiAJc2ktPnNjc2lfcGt0X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMiwgc2NzaV9wa3RfY2FjaGVwKTsKIAlpZiAoIXNpLT5zY3NpX3BrdF9wb29sKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCmluZGV4IDc0MzM4YzguLjBiMTY1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCkBAIC01MzcsNyArNTM3LDkgQEAKIAlpbnQgcmMgPSAtMTsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JaWYgKGxwb3J0LT5zdGF0ZSA9PSBMUE9SVF9TVF9ESVNBQkxFRCkgeworCWlmIChscG9ydC0+c3RhdGUgPT0gTFBPUlRfU1RfRElTQUJMRUQgfHwKKwkgICAgbHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0xPR08pIHsKKwkJZmNfbHBvcnRfc3RhdGVfZW50ZXIobHBvcnQsIExQT1JUX1NUX1JFU0VUKTsKIAkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOwogCQlyYyA9IDA7CiAJfQpAQCAtOTY3LDYgKzk2OSw5IEBACiAJRkNfTFBPUlRfREJHKGxwb3J0LCAiRW50ZXJlZCBSRVNFVCBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAogCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAKKwlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0RJU0FCTEVEIHx8IGxwb3J0LT5zdGF0ZSA9PSBMUE9SVF9TVF9MT0dPKQorCQlyZXR1cm47CisKIAlpZiAobHBvcnQtPnZwb3J0KSB7CiAJCWlmIChscG9ydC0+bGlua191cCkKIAkJCWZjX3Zwb3J0X3NldF9zdGF0ZShscG9ydC0+dnBvcnQsIEZDX1ZQT1JUX0lOSVRJQUxJWklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCmluZGV4IDM1Y2EwZTcuLjAyMzAwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCkBAIC0zMTAsNiArMzEwLDcgQEAKIAkJCQlyZXN0YXJ0ID0gMTsKIAkJCWVsc2UKIAkJCQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKKwkJCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX05PTkU7CiAJCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAJCQltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IGI3Njg5ZjMuLmMyOGE3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAlpZiAoY29ubi0+bG9naW5fdGFzayA9PSB0YXNrKQogCQlyZXR1cm47CiAKLQlfX2tmaWZvX3B1dChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJnRhc2ssIHNpemVvZih2b2lkKikpOworCWtmaWZvX2luKCZzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJnRhc2ssIHNpemVvZih2b2lkKikpOwogCiAJaWYgKHNjKSB7CiAJCXRhc2stPnNjID0gTlVMTDsKQEAgLTczNyw3ICs3MzcsNyBAQAogCQlCVUdfT04oY29ubi0+Y19zdGFnZSA9PSBJU0NTSV9DT05OX0lOSVRJQUxfU1RBR0UpOwogCQlCVUdfT04oY29ubi0+Y19zdGFnZSA9PSBJU0NTSV9DT05OX1NUT1BQRUQpOwogCi0JCWlmICghX19rZmlmb19nZXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKKwkJaWYgKCFrZmlmb19vdXQoJnNlc3Npb24tPmNtZHBvb2wucXVldWUsCiAJCQkJICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSkpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xNTY3LDcgKzE1NjcsNyBAQAogewogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwogCi0JaWYgKCFfX2tmaWZvX2dldChjb25uLT5zZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAorCWlmICgha2ZpZm9fb3V0KCZjb25uLT5zZXNzaW9uLT5jbWRwb29sLnF1ZXVlLAogCQkJICh2b2lkICopICZ0YXNrLCBzaXplb2Yodm9pZCAqKSkpCiAJCXJldHVybiBOVUxMOwogCkBAIC0yNDYxLDEyICsyNDYxLDcgQEAKIAlpZiAocS0+cG9vbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXEtPnF1ZXVlID0ga2ZpZm9faW5pdCgodm9pZCopcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQqKSwKLQkJCSAgICAgIEdGUF9LRVJORUwsIE5VTEwpOwotCWlmIChJU19FUlIocS0+cXVldWUpKSB7Ci0JCXEtPnF1ZXVlID0gTlVMTDsKLQkJZ290byBlbm9tZW07Ci0JfQorCWtmaWZvX2luaXQoJnEtPnF1ZXVlLCAodm9pZCopcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQqKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKIAkJcS0+cG9vbFtpXSA9IGt6YWxsb2MoaXRlbV9zaXplLCBHRlBfS0VSTkVMKTsKQEAgLTI0NzQsNyArMjQ2OSw3IEBACiAJCQlxLT5tYXggPSBpOwogCQkJZ290byBlbm9tZW07CiAJCX0KLQkJX19rZmlmb19wdXQocS0+cXVldWUsICh2b2lkKikmcS0+cG9vbFtpXSwgc2l6ZW9mKHZvaWQqKSk7CisJCWtmaWZvX2luKCZxLT5xdWV1ZSwgKHZvaWQqKSZxLT5wb29sW2ldLCBzaXplb2Yodm9pZCopKTsKIAl9CiAKIAlpZiAoaXRlbXMpIHsKQEAgLTI0OTcsNyArMjQ5Miw2IEBACiAJZm9yIChpID0gMDsgaSA8IHEtPm1heDsgaSsrKQogCQlrZnJlZShxLT5wb29sW2ldKTsKIAlrZnJlZShxLT5wb29sKTsKLQlrZnJlZShxLT5xdWV1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9wb29sX2ZyZWUpOwogCkBAIC0yODI1LDcgKzI4MTksNyBAQAogCiAJLyogYWxsb2NhdGUgbG9naW5fdGFzayB1c2VkIGZvciB0aGUgbG9naW4vdGV4dCBzZXF1ZW5jZXMgKi8KIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCWlmICghX19rZmlmb19nZXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKKwlpZiAoIWtmaWZvX291dCgmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCiAJCQkgc2l6ZW9mKHZvaWQqKSkpIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwpAQCAtMjg0NSw3ICsyODM5LDcgQEAKIAlyZXR1cm4gY2xzX2Nvbm47CiAKIGxvZ2luX3Rhc2tfZGF0YV9hbGxvY19mYWlsOgotCV9fa2ZpZm9fcHV0KHNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKKwlrZmlmb19pbigmc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl90YXNrLAogCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiBsb2dpbl90YXNrX2FsbG9jX2ZhaWw6CiAJaXNjc2lfZGVzdHJveV9jb25uKGNsc19jb25uKTsKQEAgLTI5MDgsNyArMjkwMiw3IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgY29ubi0+ZGF0YSwKIAkJICAgZ2V0X29yZGVyKElTQ1NJX0RFRl9NQVhfUkVDVl9TRUdfTEVOKSk7CiAJa2ZyZWUoY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKTsKLQlfX2tmaWZvX3B1dChzZXNzaW9uLT5jbWRwb29sLnF1ZXVlLCAodm9pZCopJmNvbm4tPmxvZ2luX3Rhc2ssCisJa2ZpZm9faW4oJnNlc3Npb24tPmNtZHBvb2wucXVldWUsICh2b2lkKikmY29ubi0+bG9naW5fdGFzaywKIAkJICAgIHNpemVvZih2b2lkKikpOwogCWlmIChzZXNzaW9uLT5sZWFkY29ubiA9PSBjb25uKQogCQlzZXNzaW9uLT5sZWFkY29ubiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2lfdGNwLmMKaW5kZXggY2EyNWVlNS4uZGI2ODU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaV90Y3AuYwpAQCAtNDQ1LDE1ICs0NDUsMTUgQEAKIAkJcmV0dXJuOwogCiAJLyogZmx1c2ggdGFzaydzIHIydCBxdWV1ZXMgKi8KLQl3aGlsZSAoX19rZmlmb19nZXQodGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSkpIHsKLQkJX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LAorCXdoaWxlIChrZmlmb19vdXQoJnRjcF90YXNrLT5yMnRxdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpKSB7CisJCWtmaWZvX2luKCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCiAJCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiAJCUlTQ1NJX0RCR19UQ1AodGFzay0+Y29ubiwgInBlbmRpbmcgcjJ0IGRyb3BwZWRcbiIpOwogCX0KIAogCXIydCA9IHRjcF90YXNrLT5yMnQ7CiAJaWYgKHIydCAhPSBOVUxMKSB7Ci0JCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJdGNwX3Rhc2stPnIydCA9IE5VTEw7CiAJfQpAQCAtNTQxLDcgKzU0MSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJjID0gX19rZmlmb19nZXQodGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKKwlyYyA9IGtmaWZvX291dCgmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKIAlpZiAoIXJjKSB7CiAJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLCAiQ291bGQgbm90IGFsbG9jYXRlIFIyVC4gIgogCQkJCSAgIlRhcmdldCBoYXMgc2VudCBtb3JlIFIyVHMgdGhhbiBpdCAiCkBAIC01NTQsNyArNTU0LDcgQEAKIAlpZiAocjJ0LT5kYXRhX2xlbmd0aCA9PSAwKSB7CiAJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLAogCQkJCSAgImludmFsaWQgUjJUIHdpdGggemVybyBkYXRhIGxlblxuIik7Ci0JCV9fa2ZpZm9fcHV0KHRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKKwkJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKIAkJCSAgICBzaXplb2Yodm9pZCopKTsKIAkJcmV0dXJuIElTQ1NJX0VSUl9EQVRBTEVOOwogCX0KQEAgLTU3MCw3ICs1NzAsNyBAQAogCQkJCSAgImludmFsaWQgUjJUIHdpdGggZGF0YSBsZW4gJXUgYXQgb2Zmc2V0ICV1ICIKIAkJCQkgICJhbmQgdG90YWwgbGVuZ3RoICVkXG4iLCByMnQtPmRhdGFfbGVuZ3RoLAogCQkJCSAgcjJ0LT5kYXRhX29mZnNldCwgc2NzaV9vdXQodGFzay0+c2MpLT5sZW5ndGgpOwotCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCisJCWtmaWZvX2luKCZ0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCiAJCQkgICAgc2l6ZW9mKHZvaWQqKSk7CiAJCXJldHVybiBJU0NTSV9FUlJfREFUQUxFTjsKIAl9CkBAIC01ODAsNyArNTgwLDcgQEAKIAlyMnQtPnNlbnQgPSAwOwogCiAJdGNwX3Rhc2stPmV4cF9kYXRhc24gPSByMnRzbiArIDE7Ci0JX19rZmlmb19wdXQodGNwX3Rhc2stPnIydHF1ZXVlLCAodm9pZCopJnIydCwgc2l6ZW9mKHZvaWQqKSk7CisJa2ZpZm9faW4oJnRjcF90YXNrLT5yMnRxdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOwogCWNvbm4tPnIydF9wZHVzX2NudCsrOwogCiAJaXNjc2lfcmVxdWV1ZV90YXNrKHRhc2spOwpAQCAtOTUxLDcgKzk1MSw3IEBACiAJCXJldHVybiBjb25uLT5zZXNzaW9uLT50dC0+aW5pdF9wZHUodGFzaywgMCwgdGFzay0+ZGF0YV9jb3VudCk7CiAJfQogCi0JQlVHX09OKF9fa2ZpZm9fbGVuKHRjcF90YXNrLT5yMnRxdWV1ZSkpOworCUJVR19PTihrZmlmb19sZW4oJnRjcF90YXNrLT5yMnRxdWV1ZSkpOwogCXRjcF90YXNrLT5leHBfZGF0YXNuID0gMDsKIAogCS8qIFByZXBhcmUgUERVLCBvcHRpb25hbGx5IHcvIGltbWVkaWF0ZSBkYXRhICovCkBAIC05ODIsNyArOTgyLDcgQEAKIAkJCWlmIChyMnQtPmRhdGFfbGVuZ3RoIDw9IHIydC0+c2VudCkgewogCQkJCUlTQ1NJX0RCR19UQ1AodGFzay0+Y29ubiwKIAkJCQkJICAgICAgIiAgZG9uZSB3aXRoIHIydCAlcFxuIiwgcjJ0KTsKLQkJCQlfX2tmaWZvX3B1dCh0Y3BfdGFzay0+cjJ0cG9vbC5xdWV1ZSwKKwkJCQlrZmlmb19pbigmdGNwX3Rhc2stPnIydHBvb2wucXVldWUsCiAJCQkJCSAgICAodm9pZCAqKSZ0Y3BfdGFzay0+cjJ0LAogCQkJCQkgICAgc2l6ZW9mKHZvaWQgKikpOwogCQkJCXRjcF90YXNrLT5yMnQgPSByMnQgPSBOVUxMOwpAQCAtOTkwLDggKzk5MCwxMyBAQAogCQl9CiAKIAkJaWYgKHIydCA9PSBOVUxMKSB7Ci0JCQlfX2tmaWZvX2dldCh0Y3BfdGFzay0+cjJ0cXVldWUsCi0JCQkJICAgICh2b2lkICopJnRjcF90YXNrLT5yMnQsIHNpemVvZih2b2lkICopKTsKKwkJCWlmIChrZmlmb19vdXQoJnRjcF90YXNrLT5yMnRxdWV1ZSwKKwkJCSAgICAodm9pZCAqKSZ0Y3BfdGFzay0+cjJ0LCBzaXplb2Yodm9pZCAqKSkgIT0KKwkJCSAgICBzaXplb2Yodm9pZCAqKSkgeworCQkJCVdBUk5fT05DRSgxLCAidW5leHBlY3RlZCBmaWZvIHN0YXRlIik7CisJCQkJcjJ0ID0gTlVMTDsKKwkJCX0KKwogCQkJcjJ0ID0gdGNwX3Rhc2stPnIydDsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CkBAIC0xMTI3LDkgKzExMzIsOCBAQAogCQl9CiAKIAkJLyogUjJUIHhtaXQgcXVldWUgKi8KLQkJdGNwX3Rhc2stPnIydHF1ZXVlID0ga2ZpZm9fYWxsb2MoCi0JCSAgICAgIHNlc3Npb24tPm1heF9yMnQgKiA0ICogc2l6ZW9mKHZvaWQqKSwgR0ZQX0tFUk5FTCwgTlVMTCk7Ci0JCWlmICh0Y3BfdGFzay0+cjJ0cXVldWUgPT0gRVJSX1BUUigtRU5PTUVNKSkgeworCQlpZiAoa2ZpZm9fYWxsb2MoJnRjcF90YXNrLT5yMnRxdWV1ZSwKKwkJICAgICAgc2Vzc2lvbi0+bWF4X3IydCAqIDQgKiBzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMKSkgewogCQkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7CiAJCQlnb3RvIHIydF9hbGxvY19mYWlsOwogCQl9CkBAIC0xMTQyLDcgKzExNDYsNyBAQAogCQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IHNlc3Npb24tPmNtZHNbaV07CiAJCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCi0JCWtmaWZvX2ZyZWUodGNwX3Rhc2stPnIydHF1ZXVlKTsKKwkJa2ZpZm9fZnJlZSgmdGNwX3Rhc2stPnIydHF1ZXVlKTsKIAkJaXNjc2lfcG9vbF9mcmVlKCZ0Y3BfdGFzay0+cjJ0cG9vbCk7CiAJfQogCXJldHVybiAtRU5PTUVNOwpAQCAtMTE1Nyw3ICsxMTYxLDcgQEAKIAkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBzZXNzaW9uLT5jbWRzW2ldOwogCQlzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2sgKnRjcF90YXNrID0gdGFzay0+ZGRfZGF0YTsKIAotCQlrZmlmb19mcmVlKHRjcF90YXNrLT5yMnRxdWV1ZSk7CisJCWtmaWZvX2ZyZWUoJnRjcF90YXNrLT5yMnRxdWV1ZSk7CiAJCWlzY3NpX3Bvb2xfZnJlZSgmdGNwX3Rhc2stPnIydHBvb2wpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwppbmRleCA5YWQzOGU4Li5hYjE5YjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCkBAIC01OCwxOSArNTgsMTUgQEAKIAkJZ290byBmcmVlX3Bvb2w7CiAKIAlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7Ci0JcS0+cXVldWUgPSBrZmlmb19pbml0KCh2b2lkICopIHEtPnBvb2wsIG1heCAqIHNpemVvZih2b2lkICopLAotCQkJICAgICAgR0ZQX0tFUk5FTCwgJnEtPmxvY2spOwotCWlmIChJU19FUlIocS0+cXVldWUpKQotCQlnb3RvIGZyZWVfaXRlbTsKKwlrZmlmb19pbml0KCZxLT5xdWV1ZSwgKHZvaWQgKikgcS0+cG9vbCwgbWF4ICogc2l6ZW9mKHZvaWQgKikpOwogCiAJZm9yIChpID0gMCwgaXVlID0gcS0+aXRlbXM7IGkgPCBtYXg7IGkrKykgewotCQlfX2tmaWZvX3B1dChxLT5xdWV1ZSwgKHZvaWQgKikgJml1ZSwgc2l6ZW9mKHZvaWQgKikpOworCQlrZmlmb19pbigmcS0+cXVldWUsICh2b2lkICopICZpdWUsIHNpemVvZih2b2lkICopKTsKIAkJaXVlLT5zYnVmID0gcmluZ1tpXTsKIAkJaXVlKys7CiAJfQogCXJldHVybiAwOwogCi1mcmVlX2l0ZW06CiAJa2ZyZWUocS0+aXRlbXMpOwogZnJlZV9wb29sOgogCWtmcmVlKHEtPnBvb2wpOwpAQCAtMTY3LDcgKzE2MywxMSBAQAogewogCXN0cnVjdCBpdV9lbnRyeSAqaXVlID0gTlVMTDsKIAotCWtmaWZvX2dldCh0YXJnZXQtPml1X3F1ZXVlLnF1ZXVlLCAodm9pZCAqKSAmaXVlLCBzaXplb2Yodm9pZCAqKSk7CisJaWYgKGtmaWZvX291dF9sb2NrZWQoJnRhcmdldC0+aXVfcXVldWUucXVldWUsICh2b2lkICopICZpdWUsCisJCXNpemVvZih2b2lkICopLCAmdGFyZ2V0LT5pdV9xdWV1ZS5sb2NrKSAhPSBzaXplb2Yodm9pZCAqKSkgeworCQkJV0FSTl9PTkNFKDEsICJ1bmV4cGVjdGVkIGZpZm8gc3RhdGUiKTsKKwkJCXJldHVybiBOVUxMOworCX0KIAlpZiAoIWl1ZSkKIAkJcmV0dXJuIGl1ZTsKIAlpdWUtPnRhcmdldCA9IHRhcmdldDsKQEAgLTE3OSw3ICsxNzksOCBAQAogCiB2b2lkIHNycF9pdV9wdXQoc3RydWN0IGl1X2VudHJ5ICppdWUpCiB7Ci0Ja2ZpZm9fcHV0KGl1ZS0+dGFyZ2V0LT5pdV9xdWV1ZS5xdWV1ZSwgKHZvaWQgKikgJml1ZSwgc2l6ZW9mKHZvaWQgKikpOworCWtmaWZvX2luX2xvY2tlZCgmaXVlLT50YXJnZXQtPml1X3F1ZXVlLnF1ZXVlLCAodm9pZCAqKSAmaXVlLAorCQkJc2l6ZW9mKHZvaWQgKiksICZpdWUtPnRhcmdldC0+aXVfcXVldWUubG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcnBfaXVfcHV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggY2U1MjI3MC4uMmNjMzk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC00MTQyLDggKzQxNDIsOCBAQAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJaWYgKHZwb3J0LT5mY19yc2NuX2ZsdXNoKSB7CiAJCS8qIEFub3RoZXIgdGhyZWFkIGlzIHdhbGtpbmcgZmNfcnNjbl9pZF9saXN0IG9uIHRoaXMgdnBvcnQgKi8KLQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19SU0NOX0RJU0NPVkVSWTsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkvKiBTZW5kIGJhY2sgQUNDICovCiAJCWxwZmNfZWxzX3JzcF9hY2ModnBvcnQsIEVMU19DTURfQUNDLCBjbWRpb2NiLCBuZGxwLCBOVUxMKTsKIAkJcmV0dXJuIDA7CkBAIC01OTQ4LDggKzU5NDgsOCBAQAogCQkJCWxwZmNfaW5pdGlhbF9mZGlzYyh2cG9ydCk7CiAJCQlicmVhazsKIAkJfQotCiAJfSBlbHNlIHsKKwkJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOwogCQlpZiAodnBvcnQgPT0gcGhiYS0+cHBvcnQpCiAJCQlpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpCiAJCQkJbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4odnBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCAzYjk0MjQ0Li4yNDQ1ZTM5IDEwMDc1NQotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNzQ3LDYgKzc0NywxMCBAQAogCiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19MSU5LX0RPV04pCiAJCXJldHVybiAwOworCisJLyogQmxvY2sgYWxsIFNDU0kgc3RhY2sgSS9PcyAqLworCWxwZmNfc2NzaV9kZXZfYmxvY2socGhiYSk7CisKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfihGQ0ZfQVZBSUxBQkxFIHwgRkNGX0RJU0NPVkVSRUQpOwogCWlmIChwaGJhLT5saW5rX3N0YXRlID4gTFBGQ19MSU5LX0RPV04pIHsKQEAgLTE1NTUsMTAgKzE1NTksMTYgQEAKIAkgKiB0byBib29rIGtlZXBpbmcgdGhlIEZDRklzIGNhbiBiZSB1c2VkLgogCSAqLwogCWlmIChzaGRyX3N0YXR1cyB8fCBzaGRyX2FkZF9zdGF0dXMpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMjUyMSBSRUFEX0ZDRl9SRUNPUkQgbWFpbGJveCBmYWlsZWQgIgotCQkJCSJ3aXRoIHN0YXR1cyB4JXggYWRkX3N0YXR1cyB4JXgsIG1ieFxuIiwKLQkJCQlzaGRyX3N0YXR1cywgc2hkcl9hZGRfc3RhdHVzKTsKKwkJaWYgKHNoZHJfc3RhdHVzID09IFNUQVRVU19GQ0ZfVEFCTEVfRU1QVFkpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJCSIyNzI2IFJFQURfRkNGX1JFQ09SRCBJbmRpY2F0ZXMgZW1wdHkgIgorCQkJCQkiRkNGIHRhYmxlLlxuIik7CisJCX0gZWxzZSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkiMjUyMSBSRUFEX0ZDRl9SRUNPUkQgbWFpbGJveCBmYWlsZWQgIgorCQkJCQkid2l0aCBzdGF0dXMgeCV4IGFkZF9zdGF0dXMgeCV4LCBtYnhcbiIsCisJCQkJCXNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXMpOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIAkvKiBJbnRlcnByZXRpbmcgdGhlIHJldHVybmVkIGluZm9ybWF0aW9uIG9mIEZDRiByZWNvcmRzICovCkBAIC0xNjk4LDcgKzE3MDgsOSBAQAogCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfRkFJTEVEKTsKIAkJcmV0dXJuOwogCX0KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCiAJCWxwZmNfaW5pdGlhbF9mZGlzYyh2cG9ydCk7CkBAIC0yMjU5LDcgKzIyNzEsMTAgQEAKIAkJCQkgbWItPm1ieFN0YXR1cyk7CiAJCWJyZWFrOwogCX0KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl2cG9ydC0+dW5yZWdfdnBpX2NtcGwgPSBWUE9SVF9PSzsKIAltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkvKgpAQCAtNDQ3NSw4ICs0NDkwLDEwIEBACiAJCShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSkKIAkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKIAkJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CiAJCQl2cG9ydHNbaV0tPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCX0KIAlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDE1ODUxNDguLjhhMmExYzUKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogfTsKIAogI2RlZmluZSBMUEZDX0hEUl9CVUZfU0laRSAxMjgKLSNkZWZpbmUgTFBGQ19EQVRBX0JVRl9TSVpFIDQwOTYKKyNkZWZpbmUgTFBGQ19EQVRBX0JVRl9TSVpFIDIwNDgKIHN0cnVjdCBycV9jb250ZXh0IHsKIAl1aW50MzJfdCB3b3JkMDsKICNkZWZpbmUgbHBmY19ycV9jb250ZXh0X3JxX3NpemVfU0hJRlQJMTYKQEAgLTEzNzEsNiArMTM3MSw3IEBACiAjZGVmaW5lIFNUQVRVU19FUlJPUl9BQ0lUTUFJTgkJCQkweDJhCiAjZGVmaW5lIFNUQVRVU19SRUJPT1RfUkVRVUlSRUQJCQkJMHgyYwogI2RlZmluZSBTVEFUVVNfRkNGX0lOX1VTRQkJCQkweDNhCisjZGVmaW5lIFNUQVRVU19GQ0ZfVEFCTEVfRU1QVFkJCQkJMHg0MwogCiBzdHJ1Y3QgbHBmY19tYnhfc2xpNF9jb25maWcgewogCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IDIyNjkyMGQuLmI4ZWIxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0zMDA2LDYgKzMwMDYsNyBAQAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydDsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CisJdWludDMyX3QgbGlua19zdGF0ZTsKIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CiAJcGhiYS0+ZmNvZV9ldmVudHRhZyA9IGFjcWVfZmNvZS0+ZXZlbnRfdGFnOwpAQCAtMzA1Miw5ICszMDUzLDEyIEBACiAJCQlicmVhazsKIAkJLyoKIAkJICogQ3VycmVudGx5LCBkcml2ZXIgc3VwcG9ydCBvbmx5IG9uZSBGQ0YgLSBzbyB0cmVhdCB0aGlzIGFzCi0JCSAqIGEgbGluayBkb3duLgorCQkgKiBhIGxpbmsgZG93biwgYnV0IHNhdmUgdGhlIGxpbmsgc3RhdGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50CisJCSAqIGl0IHRvIGJlIGNoYW5nZWQgdG8gTGluayBEb3duIHVubGVzcyBpdCBpcyBhbHJlYWR5IGRvd24uCiAJCSAqLworCQlsaW5rX3N0YXRlID0gcGhiYS0+bGlua19zdGF0ZTsKIAkJbHBmY19saW5rZG93bihwaGJhKTsKKwkJcGhiYS0+bGlua19zdGF0ZSA9IGxpbmtfc3RhdGU7CiAJCS8qIFVucmVnaXN0ZXIgRkNGIGlmIG5vIGRldmljZXMgY29ubmVjdGVkIHRvIGl0ICovCiAJCWxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmKHBoYmEpOwogCQlicmVhazsKQEAgLTQ1MDYsOSArNDUxMCwxMyBAQAogCQlwZGV2ID0gcGhiYS0+cGNpZGV2OwogCiAJLyogU2V0IHRoZSBkZXZpY2UgRE1BIG1hc2sgc2l6ZSAqLwotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApCi0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDApCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMAorCSB8fCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldixETUFfQklUX01BU0soNjQpKSAhPSAwKSB7CisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDAKKwkJIHx8IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LERNQV9CSVRfTUFTSygzMikpICE9IDApIHsKIAkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KIAogCS8qIEdldCB0aGUgYnVzIGFkZHJlc3Mgb2YgQmFyMCBhbmQgQmFyMiBhbmQgdGhlIG51bWJlciBvZiBieXRlcwogCSAqIHJlcXVpcmVkIGJ5IGVhY2ggbWFwcGluZy4KQEAgLTYwMjEsOSArNjAyOSwxMyBAQAogCQlwZGV2ID0gcGhiYS0+cGNpZGV2OwogCiAJLyogU2V0IHRoZSBkZXZpY2UgRE1BIG1hc2sgc2l6ZSAqLwotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApCi0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDApCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMAorCSB8fCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldixETUFfQklUX01BU0soNjQpKSAhPSAwKSB7CisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDAKKwkJIHx8IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LERNQV9CSVRfTUFTSygzMikpICE9IDApIHsKIAkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KIAogCS8qIEdldCB0aGUgYnVzIGFkZHJlc3Mgb2YgU0xJNCBkZXZpY2UgQmFyMCwgQmFyMSwgYW5kIEJhcjIgYW5kIHRoZQogCSAqIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBieSBlYWNoIG1hcHBpbmcuIFRoZXkgYXJlIGFjdHVhbGx5CkBAIC03MjE4LDggKzcyMzAsNiBAQAogewogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkiMjcxMSBQQ0kgY2hhbm5lbCBwZXJtYW5lbnQgZGlzYWJsZSBmb3IgZmFpbHVyZVxuIik7Ci0JLyogQmxvY2sgYWxsIFNDU0kgZGV2aWNlcycgSS9PcyBvbiB0aGUgaG9zdCAqLwotCWxwZmNfc2NzaV9kZXZfYmxvY2socGhiYSk7CiAJLyogQ2xlYW4gdXAgYWxsIGRyaXZlcidzIG91dHN0YW5kaW5nIFNDU0kgSS9PcyAqLwogCWxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhwaGJhKTsKIH0KQEAgLTcyNDgsNiArNzI1OCw5IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKChzdHJ1Y3QgbHBmY192cG9ydCAqKXNob3N0LT5ob3N0ZGF0YSktPnBoYmE7CiAKKwkvKiBCbG9jayBhbGwgU0NTSSBkZXZpY2VzJyBJL09zIG9uIHRoZSBob3N0ICovCisJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKKwogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIHBjaV9jaGFubmVsX2lvX25vcm1hbDoKIAkJLyogTm9uLWZhdGFsIGVycm9yLCBwcmVwYXJlIGZvciByZWNvdmVyeSAqLwpAQCAtNzQ5OSw2ICs3NTEyLDkgQEAKIAkJCWVycm9yID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0X2ZyZWVfc3lzZnNfYXR0cjsKIAkJfQorCQkvKiBEZWZhdWx0IHRvIHNpbmdsZSBGQ1AgRVEgZm9yIG5vbi1NU0ktWCAqLworCQlpZiAocGhiYS0+aW50cl90eXBlICE9IE1TSVgpCisJCQlwaGJhLT5jZmdfZmNwX2VxX2NvdW50ID0gMTsKIAkJLyogU2V0IHVwIFNMSS00IEhCQSAqLwogCQlpZiAobHBmY19zbGk0X2hiYV9zZXR1cChwaGJhKSkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDc5MzU2NjcuLjU4OTU0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIC8qIEhCUSBmb3IgRUxTIGFuZCBDVCB0cmFmZmljLiAqLwogc3RhdGljIHN0cnVjdCBscGZjX2hicV9pbml0IGxwZmNfZWxzX2hicSA9IHsKIAkucm4gPSAxLAotCS5lbnRyeV9jb3VudCA9IDIwMCwKKwkuZW50cnlfY291bnQgPSAyNTYsCiAJLm1hc2tfY291bnQgPSAwLAogCS5wcm9maWxlID0gMCwKIAkucmluZ19tYXNrID0gKDEgPDwgTFBGQ19FTFNfUklORyksCkBAIC0xNDgyLDggKzE0ODIsMTEgQEAKIGludAogbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgcW5vKQogewotCXJldHVybihscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzKHBoYmEsIHFubywKLQkJCQkJIGxwZmNfaGJxX2RlZnNbcW5vXS0+YWRkX2NvdW50KSk7CisJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gbHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxcyhwaGJhLCBxbm8sCisJCQkJCSBscGZjX2hicV9kZWZzW3Fub10tPmFkZF9jb3VudCk7CiB9CiAKIC8qKgpAQCAtMTQ5OCw4ICsxNTAxLDEyIEBACiBzdGF0aWMgaW50CiBscGZjX3NsaV9oYnFidWZfaW5pdF9oYnFzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgcW5vKQogewotCXJldHVybihscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzKHBoYmEsIHFubywKLQkJCQkJIGxwZmNfaGJxX2RlZnNbcW5vXS0+aW5pdF9jb3VudCkpOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCXJldHVybiBscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzKHBoYmEsIHFubywKKwkJCQkJIGxwZmNfaGJxX2RlZnNbcW5vXS0+ZW50cnlfY291bnQpOworCWVsc2UKKwkJcmV0dXJuIGxwZmNfc2xpX2hicWJ1Zl9maWxsX2hicXMocGhiYSwgcW5vLAorCQkJCQkgbHBmY19oYnFfZGVmc1txbm9dLT5pbml0X2NvdW50KTsKIH0KIAogLyoqCkBAIC00MTEwLDYgKzQxMTcsNyBAQAogCWlmIChyYykgewogCQlkbWFfZnJlZV9jb2hlcmVudCgmcGhiYS0+cGNpZGV2LT5kZXYsIGRtYV9zaXplLAogCQkJCSAgZG1hYnVmLT52aXJ0LCBkbWFidWYtPnBoeXMpOworCQlrZnJlZShkbWFidWYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTU4NDgsNyArNTg1Niw2IEBACiAJCQkJCWlvY2JxLT5pb2NiLnVuLnVscFdvcmRbM10pOwogCQl3cWUtPmdlbmVyaWMud29yZDMgPSAwOwogCQliZl9zZXQod3FlX3Jjdm94aWQsICZ3cWUtPmdlbmVyaWMsIGlvY2JxLT5pb2NiLnVscENvbnRleHQpOwotCQliZl9zZXQod3FlX3hjLCAmd3FlLT5nZW5lcmljLCAxKTsKIAkJLyogVGhlIGVudGlyZSBzZXF1ZW5jZSBpcyB0cmFuc21pdHRlZCBmb3IgdGhpcyBJT0NCICovCiAJCXhtaXRfbGVuID0gdG90YWxfbGVuOwogCQljbW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DUjsKQEAgLTEwOTQ0LDcgKzEwOTUxLDggQEAKIAkJcmV0dXJuIGRtYWJ1ZjsKIAl9CiAJdGVtcF9oZHIgPSBzZXFfZG1hYnVmLT5oYnVmLnZpcnQ7Ci0JaWYgKG5ld19oZHItPmZoX3NlcV9jbnQgPCB0ZW1wX2hkci0+Zmhfc2VxX2NudCkgeworCWlmIChiZTE2X3RvX2NwdShuZXdfaGRyLT5maF9zZXFfY250KSA8CisJCWJlMTZfdG9fY3B1KHRlbXBfaGRyLT5maF9zZXFfY250KSkgewogCQlsaXN0X2RlbF9pbml0KCZzZXFfZG1hYnVmLT5oYnVmLmxpc3QpOwogCQlsaXN0X2FkZF90YWlsKCZkbWFidWYtPmhidWYubGlzdCwgJnZwb3J0LT5yY3ZfYnVmZmVyX2xpc3QpOwogCQlsaXN0X2FkZF90YWlsKCZkbWFidWYtPmRidWYubGlzdCwgJnNlcV9kbWFidWYtPmRidWYubGlzdCk7CkBAIC0xMDk1NSw2ICsxMDk2MywxMSBAQAogCWxpc3RfbW92ZV90YWlsKCZzZXFfZG1hYnVmLT5oYnVmLmxpc3QsICZ2cG9ydC0+cmN2X2J1ZmZlcl9saXN0KTsKIAlzZXFfZG1hYnVmLT50aW1lX3N0YW1wID0gamlmZmllczsKIAlscGZjX3VwZGF0ZV9yY3ZfdGltZV9zdGFtcCh2cG9ydCk7CisJaWYgKGxpc3RfZW1wdHkoJnNlcV9kbWFidWYtPmRidWYubGlzdCkpIHsKKwkJdGVtcF9oZHIgPSBkbWFidWYtPmhidWYudmlydDsKKwkJbGlzdF9hZGRfdGFpbCgmZG1hYnVmLT5kYnVmLmxpc3QsICZzZXFfZG1hYnVmLT5kYnVmLmxpc3QpOworCQlyZXR1cm4gc2VxX2RtYWJ1ZjsKKwl9CiAJLyogZmluZCB0aGUgY29ycmVjdCBwbGFjZSBpbiB0aGUgc2VxdWVuY2UgdG8gaW5zZXJ0IHRoaXMgZnJhbWUgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoZF9idWYsICZzZXFfZG1hYnVmLT5kYnVmLmxpc3QsIGxpc3QpIHsKIAkJdGVtcF9kbWFidWYgPSBjb250YWluZXJfb2YoZF9idWYsIHN0cnVjdCBoYnFfZG1hYnVmLCBkYnVmKTsKQEAgLTEwOTYzLDcgKzEwOTc2LDggQEAKIAkJICogSWYgdGhlIGZyYW1lJ3Mgc2VxdWVuY2UgY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBmcmFtZSBvbgogCQkgKiB0aGUgbGlzdCB0aGVuIGluc2VydCB0aGUgZnJhbWUgcmlnaHQgYWZ0ZXIgdGhpcyBmcmFtZQogCQkgKi8KLQkJaWYgKG5ld19oZHItPmZoX3NlcV9jbnQgPiB0ZW1wX2hkci0+Zmhfc2VxX2NudCkgeworCQlpZiAoYmUxNl90b19jcHUobmV3X2hkci0+Zmhfc2VxX2NudCkgPgorCQkJYmUxNl90b19jcHUodGVtcF9oZHItPmZoX3NlcV9jbnQpKSB7CiAJCQlsaXN0X2FkZCgmZG1hYnVmLT5kYnVmLmxpc3QsICZ0ZW1wX2RtYWJ1Zi0+ZGJ1Zi5saXN0KTsKIAkJCXJldHVybiBzZXFfZG1hYnVmOwogCQl9CkBAIC0xMTIxMCw3ICsxMTIyNCw3IEBACiAJCXNlcV9kbWFidWYgPSBjb250YWluZXJfb2YoZF9idWYsIHN0cnVjdCBoYnFfZG1hYnVmLCBkYnVmKTsKIAkJaGRyID0gKHN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKilzZXFfZG1hYnVmLT5oYnVmLnZpcnQ7CiAJCS8qIElmIHRoZXJlIGlzIGEgaG9sZSBpbiB0aGUgc2VxdWVuY2UgY291bnQgdGhlbiBmYWlsLiAqLwotCQlpZiAoKytzZXFfY291bnQgIT0gaGRyLT5maF9zZXFfY250KQorCQlpZiAoKytzZXFfY291bnQgIT0gYmUxNl90b19jcHUoaGRyLT5maF9zZXFfY250KSkKIAkJCXJldHVybiAwOwogCQlmY3RsID0gKGhkci0+ZmhfZl9jdGxbMF0gPDwgMTYgfAogCQkJaGRyLT5maF9mX2N0bFsxXSA8PCA4IHwKQEAgLTExMjQyLDYgKzExMjU2LDcgQEAKIAlzdHJ1Y3QgbHBmY19pb2NicSAqZmlyc3RfaW9jYnEsICppb2NicTsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmY19oZHI7CiAJdWludDMyX3Qgc2lkOworCXN0cnVjdCB1bHBfYmRlNjQgKnBiZGU7CiAKIAlmY19oZHIgPSAoc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqKXNlcV9kbWFidWYtPmhidWYudmlydDsKIAkvKiByZW1vdmUgZnJvbSByZWNlaXZlIGJ1ZmZlciBsaXN0ICovCkBAIC0xMTI4Myw4ICsxMTI5OCw5IEBACiAJCWlmICghaW9jYnEtPmNvbnRleHQzKSB7CiAJCQlpb2NicS0+Y29udGV4dDMgPSBkX2J1ZjsKIAkJCWlvY2JxLT5pb2NiLnVscEJkZUNvdW50Kys7Ci0JCQlpb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5iZGUyLnR1cy5mLmJkZVNpemUgPQotCQkJCQkJCUxQRkNfREFUQV9CVUZfU0laRTsKKwkJCXBiZGUgPSAoc3RydWN0IHVscF9iZGU2NCAqKQorCQkJCQkmaW9jYnEtPmlvY2IudW5zbGkzLnNsaTNXb3Jkc1s0XTsKKwkJCXBiZGUtPnR1cy5mLmJkZVNpemUgPSBMUEZDX0RBVEFfQlVGX1NJWkU7CiAJCQlmaXJzdF9pb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5hY2NfbGVuICs9CiAJCQkJYmZfZ2V0KGxwZmNfcmNxZV9sZW5ndGgsCiAJCQkJICAgICAgICZzZXFfZG1hYnVmLT5jcV9ldmVudC5jcWUucmNxZV9jbXBsKTsKQEAgLTExNDAxLDE1ICsxMTQxNyw5IEBACiAJCXJldHVybjsKIAl9CiAJLyogSWYgbm90IGxhc3QgZnJhbWUgaW4gc2VxdWVuY2UgY29udGludWUgcHJvY2Vzc2luZyBmcmFtZXMuICovCi0JaWYgKCFscGZjX3NlcV9jb21wbGV0ZShzZXFfZG1hYnVmKSkgewotCQkvKgotCQkgKiBXaGVuIHNhdmluZyBvZmYgZnJhbWVzIHBvc3QgYSBuZXcgb25lIGFuZCBtYXJrIHRoaXMKLQkJICogZnJhbWUgdG8gYmUgZnJlZWQgd2hlbiBpdCBpcyBmaW5pc2hlZC4KLQkJICoqLwotCQlscGZjX3NsaV9oYnFidWZfZmlsbF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSwgMSk7Ci0JCWRtYWJ1Zi0+dGFnID0gLTE7CisJaWYgKCFscGZjX3NlcV9jb21wbGV0ZShzZXFfZG1hYnVmKSkKIAkJcmV0dXJuOwotCX0KKwogCS8qIFNlbmQgdGhlIGNvbXBsZXRlIHNlcXVlbmNlIHRvIHRoZSB1cHBlciBsYXllciBwcm90b2NvbCAqLwogCWxwZmNfc2xpNF9zZW5kX3NlcV90b191bHAodnBvcnQsIHNlcV9kbWFidWYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAppbmRleCAyNWQ2NmQwLi40NGU1ZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaApAQCAtMjgsNyArMjgsNyBAQAogLyogTXVsdGktcXVldWUgYXJyYW5nZW1lbnQgZm9yIGZhc3QtcGF0aCBGQ1Agd29yayBxdWV1ZXMgKi8KICNkZWZpbmUgTFBGQ19GTl9FUU5fTUFYICAgICAgIDgKICNkZWZpbmUgTFBGQ19TUF9FUU5fREVGICAgICAgIDEKLSNkZWZpbmUgTFBGQ19GUF9FUU5fREVGICAgICAgIDEKKyNkZWZpbmUgTFBGQ19GUF9FUU5fREVGICAgICAgIDQKICNkZWZpbmUgTFBGQ19GUF9FUU5fTUlOICAgICAgIDEKICNkZWZpbmUgTFBGQ19GUF9FUU5fTUFYICAgICAgIChMUEZDX0ZOX0VRTl9NQVggLSBMUEZDX1NQX0VRTl9ERUYpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggYzdmM2FlZC4uNzkyZjcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuNiIKKyNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjciCiAjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUJCSJscGZjIgogI2RlZmluZSBMUEZDX1NQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6c3AiCiAjZGVmaW5lIExQRkNfRlBfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpmcCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwppbmRleCA3ZDZkZDgzLi5lM2M3ZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCkBAIC01MTIsOCArNTEyLDEwIEBACiAJCXJldHVybiBWUE9SVF9PSzsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl2cG9ydC0+bG9hZF9mbGFnIHw9IEZDX0xPQURJTkc7CiAJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCiAJLyogVXNlIHRoZSBQaHlzaWNhbCBub2RlcyBGYWJyaWMgTkRMUCB0byBkZXRlcm1pbmUgaWYgdGhlIGxpbmsgaXMKIAkgKiB1cCBhbmQgcmVhZHkgdG8gRkRJU0MuCkBAIC03MDAsNyArNzAyLDcgQEAKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+bmRscF9sb2NrKTsKIAkJfQotCQlpZiAodnBvcnQtPnZwaV9zdGF0ZSAhPSBMUEZDX1ZQSV9SRUdJU1RFUkVEKQorCQlpZiAoISh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpCiAJCQlnb3RvIHNraXBfbG9nbzsKIAkJdnBvcnQtPnVucmVnX3ZwaV9jbXBsID0gVlBPUlRfSU5WQUw7CiAJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHBoYmEtPmZjX3JhdG92ICogMjAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKaW5kZXggMTM0YzYzZS4uNzA4ZWEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwpAQCAtMjUwMSw3ICsyNTAxLDkgQEAKIAkJaW5zdGFuY2UtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChpbnN0YW5jZS0+cGRldiwgMCk7CiAJfQogCi0JaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYsICJtZWdhc2FzOiBMU0kiKSkgeworCWlmIChwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGluc3RhbmNlLT5wZGV2LAorCQlwY2lfc2VsZWN0X2JhcnMoaW5zdGFuY2UtPnBkZXYsIElPUkVTT1VSQ0VfTUVNKSwKKwkJIm1lZ2FzYXM6IExTSSIpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBJTyBtZW1vcnkgcmVnaW9uIGJ1c3khXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0yNjQyLDcgKzI2NDQsOCBAQAogCWlvdW5tYXAoaW5zdGFuY2UtPnJlZ19zZXQpOwogCiAgICAgICBmYWlsX2lvcmVtYXA6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhpbnN0YW5jZS0+cGRldik7CisJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhpbnN0YW5jZS0+cGRldiwKKwkJcGNpX3NlbGVjdF9iYXJzKGluc3RhbmNlLT5wZGV2LCBJT1JFU09VUkNFX01FTSkpOwogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNjYyLDcgKzI2NjUsOCBAQAogCiAJaW91bm1hcChpbnN0YW5jZS0+cmVnX3NldCk7CiAKLQlwY2lfcmVsZWFzZV9yZWdpb25zKGluc3RhbmNlLT5wZGV2KTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKGluc3RhbmNlLT5wZGV2LAorCQlwY2lfc2VsZWN0X2JhcnMoaW5zdGFuY2UtPnBkZXYsIElPUkVTT1VSQ0VfTUVNKSk7CiB9CiAKIC8qKgpAQCAtMjk3MSw3ICsyOTc1LDcgQEAKIAkvKgogCSAqIFBDSSBwcmVwcGluZzogZW5hYmxlIGRldmljZSBzZXQgYnVzIG1hc3RlcmluZyBhbmQgZG1hIG1hc2sKIAkgKi8KLQlydmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJcnZhbCA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAogCWlmIChydmFsKSB7CiAJCXJldHVybiBydmFsOwpAQCAtMzI3Niw3ICszMjgwLDcgQEAKIAkvKgogCSAqIFBDSSBwcmVwcGluZzogZW5hYmxlIGRldmljZSBzZXQgYnVzIG1hc3RlcmluZyBhbmQgZG1hIG1hc2sKIAkgKi8KLQlydmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJcnZhbCA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAogCWlmIChydmFsKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRW5hYmxlIGRldmljZSBmYWlsZWRcbiIpOwpAQCAtNDA0Miw3ICs0MDQ2LDcgQEAKIH0KIAogCi1zdGF0aWMgRFJJVkVSX0FUVFIocG9sbF9tb2RlX2lvLCBTX0lSVUdPfFNfSVdVR08sCitzdGF0aWMgRFJJVkVSX0FUVFIocG9sbF9tb2RlX2lvLCBTX0lSVUdPfFNfSVdVU1IsCiAJCW1lZ2FzYXNfc3lzZnNfc2hvd19wb2xsX21vZGVfaW8sCiAJCW1lZ2FzYXNfc3lzZnNfc2V0X3BvbGxfbW9kZV9pbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggNjQyMmUyNS4uODlkMDI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTM1ODMsNiArMzU4MywxMSBAQAogCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJbXV0ZXhfaW5pdCgmaW9jLT50cmFuc3BvcnRfY21kcy5tdXRleCk7CiAKKwkvKiBzY3NpaCBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KKwlpb2MtPnNjc2loX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOworCWlvYy0+c2NzaWhfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKKwltdXRleF9pbml0KCZpb2MtPnNjc2loX2NtZHMubXV0ZXgpOworCiAJLyogdGFzayBtYW5hZ2VtZW50IGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCWlvYy0+dG1fY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKaW5kZXggYzc5MGQ0NS4uY2FlNmIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCkBAIC02NTcsNiArNjU3LDcgQEAKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4OTE4MCksIGNoaXBfOTE4MCB9LAogCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMCksIGNoaXBfMTMwMCB9LAogCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMyMCksIGNoaXBfMTMyMCB9LAorCXsgUENJX1ZERVZJQ0UoQURBUFRFQzIsIDB4MDQ1MCksIGNoaXBfNjQ0MCB9LAogCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMgYi9kcml2ZXJzL3Njc2kvb3NkL29zZF9pbml0aWF0b3IuYwppbmRleCA5NTAyMDJhLi4yNDIyMzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NkL29zZF9pbml0aWF0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvb3NkL29zZF9pbml0aWF0b3IuYwpAQCAtNDMyLDMwICs0MzIsMjMgQEAKIAlzZWctPmFsbG9jX3NpemUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBfcHV0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxICwgYm9vbCBpc19hc3luYykKK3N0YXRpYyB2b2lkIF9wdXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWYgKGlzX2FzeW5jKSB7Ci0JCVdBUk5fT04ocnEtPmJpbyk7Ci0JCV9fYmxrX3B1dF9yZXF1ZXN0KHJxLT5xLCBycSk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSWYgb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVxdWVzdCB3YXMgbm90Ci0JCSAqIGV4ZWN1dGVkIHRocm91Z2ggdGhlIGJsb2NrIGxheWVyLCB0aGVuIHdlIG11c3QgcmVsZWFzZSBCSU9zLgotCQkgKiBUT0RPOiBLZWVwIGVycm9yIGNvZGUgaW4gb3ItPmFzeW5jX2Vycm9yLiBOZWVkIHRvIGF1ZGl0IGFsbAotCQkgKiAgICAgICBjb2RlIHBhdGhzLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KHJxLT5iaW8pKQotCQkJYmxrX2VuZF9yZXF1ZXN0KHJxLCAtRU5PTUVNLCBibGtfcnFfYnl0ZXMocnEpKTsKLQkJZWxzZQotCQkJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQl9CisJLyoKKwkgKiBJZiBvc2RfZmluYWxpemVfcmVxdWVzdCgpIHdhcyBjYWxsZWQgYnV0IHRoZSByZXF1ZXN0IHdhcyBub3QKKwkgKiBleGVjdXRlZCB0aHJvdWdoIHRoZSBibG9jayBsYXllciwgdGhlbiB3ZSBtdXN0IHJlbGVhc2UgQklPcy4KKwkgKiBUT0RPOiBLZWVwIGVycm9yIGNvZGUgaW4gb3ItPmFzeW5jX2Vycm9yLiBOZWVkIHRvIGF1ZGl0IGFsbAorCSAqICAgICAgIGNvZGUgcGF0aHMuCisJICovCisJaWYgKHVubGlrZWx5KHJxLT5iaW8pKQorCQlibGtfZW5kX3JlcXVlc3QocnEsIC1FTk9NRU0sIGJsa19ycV9ieXRlcyhycSkpOworCWVsc2UKKwkJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKIH0KIAogdm9pZCBvc2RfZW5kX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBvci0+cmVxdWVzdDsKLQkvKiBJTVBPUlRBTlQ6IG1ha2Ugc3VyZSB0aGlzIGFncmVlcyB3aXRoIG9zZF9leGVjdXRlX3JlcXVlc3RfYXN5bmMgKi8KLQlib29sIGlzX2FzeW5jID0gKG9yLT5yZXF1ZXN0LT5lbmRfaW9fZGF0YSA9PSBvcik7CiAKIAlfb3NkX2ZyZWVfc2VnKG9yLCAmb3ItPnNldF9hdHRyKTsKIAlfb3NkX2ZyZWVfc2VnKG9yLCAmb3ItPmVuY19nZXRfYXR0cik7CkBAIC00NjMsMjAgKzQ1NiwzNCBAQAogCiAJaWYgKHJxKSB7CiAJCWlmIChycS0+bmV4dF9ycSkgewotCQkJX3B1dF9yZXF1ZXN0KHJxLT5uZXh0X3JxLCBpc19hc3luYyk7CisJCQlfcHV0X3JlcXVlc3QocnEtPm5leHRfcnEpOwogCQkJcnEtPm5leHRfcnEgPSBOVUxMOwogCQl9CiAKLQkJX3B1dF9yZXF1ZXN0KHJxLCBpc19hc3luYyk7CisJCV9wdXRfcmVxdWVzdChycSk7CiAJfQogCV9vc2RfcmVxdWVzdF9mcmVlKG9yKTsKIH0KIEVYUE9SVF9TWU1CT0wob3NkX2VuZF9yZXF1ZXN0KTsKIAorc3RhdGljIHZvaWQgX3NldF9lcnJvcl9yZXNpZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCQkJICAgICBpbnQgZXJyb3IpCit7CisJb3ItPmFzeW5jX2Vycm9yID0gZXJyb3I7CisJb3ItPnJlcV9lcnJvcnMgPSByZXEtPmVycm9ycyA/IDogZXJyb3I7CisJb3ItPnNlbnNlX2xlbiA9IHJlcS0+c2Vuc2VfbGVuOworCWlmIChvci0+b3V0LnJlcSkKKwkJb3ItPm91dC5yZXNpZHVhbCA9IG9yLT5vdXQucmVxLT5yZXNpZF9sZW47CisJaWYgKG9yLT5pbi5yZXEpCisJCW9yLT5pbi5yZXNpZHVhbCA9IG9yLT5pbi5yZXEtPnJlc2lkX2xlbjsKK30KKwogaW50IG9zZF9leGVjdXRlX3JlcXVlc3Qoc3RydWN0IG9zZF9yZXF1ZXN0ICpvcikKIHsKLQlyZXR1cm4gb3ItPmFzeW5jX2Vycm9yID0KLQkJCWJsa19leGVjdXRlX3JxKG9yLT5yZXF1ZXN0LT5xLCBOVUxMLCBvci0+cmVxdWVzdCwgMCk7CisJaW50IGVycm9yID0gYmxrX2V4ZWN1dGVfcnEob3ItPnJlcXVlc3QtPnEsIE5VTEwsIG9yLT5yZXF1ZXN0LCAwKTsKKworCV9zZXRfZXJyb3JfcmVzaWQob3IsIG9yLT5yZXF1ZXN0LCBlcnJvcik7CisJcmV0dXJuIGVycm9yOwogfQogRVhQT1JUX1NZTUJPTChvc2RfZXhlY3V0ZV9yZXF1ZXN0KTsKIApAQCAtNDg0LDE1ICs0OTEsMTcgQEAKIHsKIAlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gcmVxLT5lbmRfaW9fZGF0YTsKIAotCW9yLT5hc3luY19lcnJvciA9IGVycm9yOwotCi0JaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQlPU0RfREVCVUcoIm9zZF9yZXF1ZXN0X2FzeW5jX2RvbmUgZXJyb3IgcmVjaWV2ZWQgJWQgIgotCQkJICAiZXJyb3JzIDB4JXhcbiIsIGVycm9yLCByZXEtPmVycm9ycyk7Ci0JCWlmICghcmVxLT5lcnJvcnMpIC8qIGRvbid0IG1pc3Mgb3V0IG9uIHRoaXMgb25lICovCi0JCQlyZXEtPmVycm9ycyA9IGVycm9yOworCV9zZXRfZXJyb3JfcmVzaWQob3IsIHJlcSwgZXJyb3IpOworCWlmIChyZXEtPm5leHRfcnEpIHsKKwkJX19ibGtfcHV0X3JlcXVlc3QocmVxLT5xLCByZXEtPm5leHRfcnEpOworCQlyZXEtPm5leHRfcnEgPSBOVUxMOwogCX0KIAorCV9fYmxrX3B1dF9yZXF1ZXN0KHJlcS0+cSwgcmVxKTsKKwlvci0+cmVxdWVzdCA9IE5VTEw7CisJb3ItPmluLnJlcSA9IE5VTEw7CisJb3ItPm91dC5yZXEgPSBOVUxMOworCiAJaWYgKG9yLT5hc3luY19kb25lKQogCQlvci0+YXN5bmNfZG9uZShvciwgb3ItPmFzeW5jX3ByaXZhdGUpOwogCWVsc2UKQEAgLTE0ODksMjEgKzE0OTgsMTggQEAKICNlbmRpZgogCWludCByZXQ7CiAKLQlpZiAobGlrZWx5KCFvci0+cmVxdWVzdC0+ZXJyb3JzKSkgewotCQlvc2ktPm91dF9yZXNpZCA9IDA7Ci0JCW9zaS0+aW5fcmVzaWQgPSAwOworCWlmIChsaWtlbHkoIW9yLT5yZXFfZXJyb3JzKSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJb3NpID0gb3NpID8gOiAmbG9jYWxfb3NpOwogCW1lbXNldChvc2ksIDAsIHNpemVvZigqb3NpKSk7CiAKLQlzc2RiID0gb3ItPnJlcXVlc3QtPnNlbnNlOwotCXNlbnNlX2xlbiA9IG9yLT5yZXF1ZXN0LT5zZW5zZV9sZW47CisJc3NkYiA9ICh0eXBlb2Yoc3NkYikpb3ItPnNlbnNlOworCXNlbnNlX2xlbiA9IG9yLT5zZW5zZV9sZW47CiAJaWYgKChzZW5zZV9sZW4gPCAoaW50KXNpemVvZigqc3NkYikgfHwgIXNzZGItPnNlbnNlX2tleSkpIHsKIAkJT1NEX0VSUigiQmxvY2stbGF5ZXIgcmV0dXJuZWQgZXJyb3IoMHgleCkgYnV0ICIKIAkJCSJzZW5zZV9sZW4oJXUpIHx8IGtleSglZCkgaXMgZW1wdHlcbiIsCi0JCQlvci0+cmVxdWVzdC0+ZXJyb3JzLCBzZW5zZV9sZW4sIHNzZGItPnNlbnNlX2tleSk7CisJCQlvci0+cmVxX2Vycm9ycywgc2Vuc2VfbGVuLCBzc2RiLT5zZW5zZV9rZXkpOwogCQlnb3RvIGFuYWx5emU7CiAJfQogCkBAIC0xNTI1LDcgKzE1MzEsNyBAQAogCQkJImFkZGl0aW9uYWxfY29kZT0weCV4IGFzeW5jX2Vycm9yPSVkIGVycm9ycz0weCV4XG4iLAogCQkJb3NpLT5rZXksIG9yaWdpbmFsX3NlbnNlX2xlbiwgc2Vuc2VfbGVuLAogCQkJb3NpLT5hZGRpdGlvbmFsX2NvZGUsIG9yLT5hc3luY19lcnJvciwKLQkJCW9yLT5yZXF1ZXN0LT5lcnJvcnMpOworCQkJb3ItPnJlcV9lcnJvcnMpOwogCiAJaWYgKG9yaWdpbmFsX3NlbnNlX2xlbiA8IHNlbnNlX2xlbikKIAkJc2Vuc2VfbGVuID0gb3JpZ2luYWxfc2Vuc2VfbGVuOwpAQCAtMTY5NSwxMCArMTcwMSwxMCBAQAogCQlyZXQgPSAtRUlPOwogCX0KIAotCWlmIChvci0+b3V0LnJlcSkKLQkJb3NpLT5vdXRfcmVzaWQgPSBvci0+b3V0LnJlcS0+cmVzaWRfbGVuID86IG9yLT5vdXQudG90YWxfYnl0ZXM7Ci0JaWYgKG9yLT5pbi5yZXEpCi0JCW9zaS0+aW5fcmVzaWQgPSBvci0+aW4ucmVxLT5yZXNpZF9sZW4gPzogb3ItPmluLnRvdGFsX2J5dGVzOworCWlmICghb3ItPm91dC5yZXNpZHVhbCkKKwkJb3ItPm91dC5yZXNpZHVhbCA9IG9yLT5vdXQudG90YWxfYnl0ZXM7CisJaWYgKCFvci0+aW4ucmVzaWR1YWwpCisJCW9yLT5pbi5yZXNpZHVhbCA9IG9yLT5pbi50b3RhbF9ieXRlczsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9jdGwuaCBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2N0bC5oCmluZGV4IDIyNjQ0ZGUuLjYzYWQ0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2N0bC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2N0bC5oCkBAIC00NSwxNiArNDUsNiBAQAogI2RlZmluZSBIRUFERVJfTEVOCQkJMjgKICNkZWZpbmUgU0laRV9PRkZTRVQJCQkxNgogCi1zdHJ1Y3QgcG04MDAxX2lvY3RsX3BheWxvYWQgewotCXUzMglzaWduYXR1cmU7Ci0JdTE2CW1ham9yX2Z1bmN0aW9uOwotCXUxNgltaW5vcl9mdW5jdGlvbjsKLQl1MTYJbGVuZ3RoOwotCXUxNglzdGF0dXM7Ci0JdTE2CW9mZnNldDsKLQl1MTYJaWQ7Ci0JdTgJZnVuY19zcGVjaWZpY1sxXTsKLX07CiAKICNkZWZpbmUgRkxBU0hfT0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMAogI2RlZmluZSBGQUlMX09QRU5fQklPU19GSUxFICAgICAgICAgICAgIDB4MDAwMTAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jCmluZGV4IGEzZGUzMDYuLjliNDRjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jCkBAIC0zNzMsMTAgKzM3Myw3IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIG1waV9zZXRfcGh5c19nM193aXRoX3NzYyhzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEsIHUzMiBTU0NiaXQpCiB7Ci0JdTMyIG9mZnNldDsKLQl1MzIgdmFsdWU7Ci0JdTMyIGksIGo7Ci0JdTMyIGJpdF9jbnQ7CisJdTMyIHZhbHVlLCBvZmZzZXQsIGk7CiAKICNkZWZpbmUgU0FTMl9TRVRUSU5HU19MT0NBTF9QSFlfMF8zX1NISUZUX0FERFIgMHgwMDAzMDAwMAogI2RlZmluZSBTQVMyX1NFVFRJTkdTX0xPQ0FMX1BIWV80XzdfU0hJRlRfQUREUiAweDAwMDQwMDAwCkBAIC0zOTIsNTUgKzM4OSwzNSBAQAogICAgICovCiAJaWYgKC0xID09IGJhcjRfc2hpZnQocG04MDAxX2hhLCBTQVMyX1NFVFRJTkdTX0xPQ0FMX1BIWV8wXzNfU0hJRlRfQUREUikpCiAJCXJldHVybjsKLQkvKiBzZXQgU1NDIGJpdCBvZiBQSFkgMCAtIDMgKi8KKwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJb2Zmc2V0ID0gU0FTMl9TRVRUSU5HU19MT0NBTF9QSFlfMF8zX09GRlNFVCArIDB4NDAwMCAqIGk7Ci0JCXZhbHVlID0gcG04MDAxX2NyMzIocG04MDAxX2hhLCAyLCBvZmZzZXQpOwotCQlpZiAoU1NDYml0KSB7Ci0JCQl2YWx1ZSB8PSAweDAwMDAwMDAxIDw8IFBIWV9HM19XSVRIX1NTQ19CSVRfU0hJRlQ7Ci0JCQl2YWx1ZSAmPSB+KDB4MDAwMDAwMDEgPDwgUEhZX0czX1dJVEhPVVRfU1NDX0JJVF9TSElGVCk7Ci0JCX0gZWxzZSB7Ci0JCQl2YWx1ZSB8PSAweDAwMDAwMDAxIDw8IFBIWV9HM19XSVRIT1VUX1NTQ19CSVRfU0hJRlQ7Ci0JCQl2YWx1ZSAmPSB+KDB4MDAwMDAwMDEgPDwgUEhZX0czX1dJVEhfU1NDX0JJVF9TSElGVCk7Ci0JCX0KLQkJYml0X2NudCA9IDA7Ci0JCWZvciAoaiA9IDA7IGogPCAzMTsgaisrKQotCQkJaWYgKCh2YWx1ZSA+PiBqKSAmIDB4MDAwMDAwMDEpCi0JCQkJYml0X2NudCsrOwotCQlpZiAoYml0X2NudCAlIDIpCi0JCQl2YWx1ZSAmPSB+KDB4MDAwMDAwMDEgPDwgU05XM19QSFlfQ0FQQUJJTElUSUVTX1BBUklUWSk7Ci0JCWVsc2UKLQkJCXZhbHVlIHw9IDB4MDAwMDAwMDEgPDwgU05XM19QSFlfQ0FQQUJJTElUSUVTX1BBUklUWTsKLQotCQlwbTgwMDFfY3czMihwbTgwMDFfaGEsIDIsIG9mZnNldCwgdmFsdWUpOworCQlwbTgwMDFfY3czMihwbTgwMDFfaGEsIDIsIG9mZnNldCwgMHg4MDAwMTUwMSk7CiAJfQotCiAJLyogc2hpZnQgbWVtYmFzZSAzIGZvciBTQVMyX1NFVFRJTkdTX0xPQ0FMX1BIWSA0IC0gNyAqLwogCWlmICgtMSA9PSBiYXI0X3NoaWZ0KHBtODAwMV9oYSwgU0FTMl9TRVRUSU5HU19MT0NBTF9QSFlfNF83X1NISUZUX0FERFIpKQogCQlyZXR1cm47Ci0KLQkvKiBzZXQgU1NDIGJpdCBvZiBQSFkgNCAtIDcgKi8KIAlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKSB7CiAJCW9mZnNldCA9IFNBUzJfU0VUVElOR1NfTE9DQUxfUEhZXzRfN19PRkZTRVQgKyAweDQwMDAgKiAoaS00KTsKLQkJdmFsdWUgPSBwbTgwMDFfY3IzMihwbTgwMDFfaGEsIDIsIG9mZnNldCk7Ci0JCWlmIChTU0NiaXQpIHsKLQkJCXZhbHVlIHw9IDB4MDAwMDAwMDEgPDwgUEhZX0czX1dJVEhfU1NDX0JJVF9TSElGVDsKLQkJCXZhbHVlICY9IH4oMHgwMDAwMDAwMSA8PCBQSFlfRzNfV0lUSE9VVF9TU0NfQklUX1NISUZUKTsKLQkJfSBlbHNlIHsKLQkJCXZhbHVlIHw9IDB4MDAwMDAwMDEgPDwgUEhZX0czX1dJVEhPVVRfU1NDX0JJVF9TSElGVDsKLQkJCXZhbHVlICY9IH4oMHgwMDAwMDAwMSA8PCBQSFlfRzNfV0lUSF9TU0NfQklUX1NISUZUKTsKLQkJfQotCQliaXRfY250ID0gMDsKLQkJZm9yIChqID0gMDsgaiA8IDMxOyBqKyspCi0JCQlpZiAoKHZhbHVlID4+IGopICYgMHgwMDAwMDAwMSkKLQkJCQliaXRfY250Kys7Ci0JCWlmIChiaXRfY250ICUgMikKLQkJCXZhbHVlICY9IH4oMHgwMDAwMDAwMSA8PCBTTlczX1BIWV9DQVBBQklMSVRJRVNfUEFSSVRZKTsKLQkJZWxzZQotCQkJdmFsdWUgfD0gMHgwMDAwMDAwMSA8PCBTTlczX1BIWV9DQVBBQklMSVRJRVNfUEFSSVRZOwotCi0JCXBtODAwMV9jdzMyKHBtODAwMV9oYSwgMiwgb2Zmc2V0LCB2YWx1ZSk7CisJCXBtODAwMV9jdzMyKHBtODAwMV9oYSwgMiwgb2Zmc2V0LCAweDgwMDAxNTAxKTsKIAl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlDaGFuZ2UgdGhlIFNTQyB1cHNwcmVhZGluZyB2YWx1ZSB0byAweDAgc28gdGhhdCB1cHNwcmVhZGluZyBpcyBkaXNhYmxlZC4KKwlEZXZpY2UgTUFCQyBTTU9EMCBDb250cm9scworCUFkZHJlc3M6ICh2aWEgTUVNQkFTRS1JSUkpOgorCVVzaW5nIHNoaWZ0ZWQgZGVzdGluYXRpb24gYWRkcmVzcyAweDBfMDAwMDogd2l0aCBPZmZzZXQgMHhEOAorCisJMzE6MjggUi9XIFJlc2VydmVkIERvIG5vdCBjaGFuZ2UKKwkyNzoyNCBSL1cgU0FTX1NNT0RfU1BSRFVQIDAwMDAKKwkyMzoyMCBSL1cgU0FTX1NNT0RfU1BSREROIDAwMDAKKwkxOTowICBSL1cgIFJlc2VydmVkIERvIG5vdCBjaGFuZ2UKKwlVcG9uIHBvd2VyLXVwIHRoaXMgcmVnaXN0ZXIgd2lsbCByZWFkIGFzIDB4ODk5MGMwMTYsCisJYW5kIEkgd291bGQgbGlrZSB5b3UgdG8gY2hhbmdlIHRoZSBTQVNfU01PRF9TUFJEVVAgYml0cyB0byAwYjAwMDAKKwlzbyB0aGF0IHRoZSB3cml0dGVuIHZhbHVlIHdpbGwgYmUgMHg4MDkwYzAxNi4KKwlUaGlzIHdpbGwgZW5zdXJlIG9ubHkgZG93bi1zcHJlYWRpbmcgU1NDIGlzIGVuYWJsZWQgb24gdGhlIFNQQy4KKwkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXZhbHVlID0gcG04MDAxX2NyMzIocG04MDAxX2hhLCAyLCAweGQ4KTsKKwlwbTgwMDFfY3czMihwbTgwMDFfaGEsIDIsIDB4ZDgsIDB4ODAwMEMwMTYpOwogCiAJLypzZXQgdGhlIHNoaWZ0ZWQgZGVzdGluYXRpb24gYWRkcmVzcyB0byAweDAgdG8gYXZvaWQgZXJyb3Igb3BlcmF0aW9uICovCiAJYmFyNF9zaGlmdChwbTgwMDFfaGEsIDB4MCk7CkBAIC0xOTAxLDcgKzE4NzgsNyBAQAogewogCXN0cnVjdCBzYXNfdGFzayAqdDsKIAlzdHJ1Y3QgcG04MDAxX2NjYl9pbmZvICpjY2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAl1MzIgcGFyYW07CiAJdTMyIHN0YXR1czsKIAl1MzIgdGFnOwpAQCAtMjA0MCw3ICsyMDE3LDkgQEAKIAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7CiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKIAkJCW1iKCk7LyppbiBvcmRlciB0byBmb3JjZSBDUFUgb3JkZXJpbmcqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQl0LT50YXNrX2RvbmUodCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0yMDU4LDcgKzIwMzcsOSBAQAogCQkJdHMtPnN0YXQgPSBTQVNfUVVFVUVfRlVMTDsKIAkJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOwogCQkJbWIoKTsvKmRpdHRvKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJdC0+dGFza19kb25lKHQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMjA4NCw3ICsyMDY1LDkgQEAKIAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7CiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKIAkJCW1iKCk7LyogZGl0dG8qLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQl0LT50YXNrX2RvbmUodCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0yMTQ5LDcgKzIxMzIsOSBAQAogCQkJdHMtPnN0YXQgPSBTQVNfUVVFVUVfRlVMTDsKIAkJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOwogCQkJbWIoKTsvKmRpdHRvKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJdC0+dGFza19kb25lKHQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMjE3MSw3ICsyMTU2LDkgQEAKIAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7CiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKIAkJCW1iKCk7LypkaXR0byovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCXQtPnRhc2tfZG9uZSh0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlicmVhazsKQEAgLTIyMDAsMTEgKzIxODcsMjAgQEAKIAkJCSIgcmVzcCAweCV4IHN0YXQgMHgleCBidXQgYWJvcnRlZCBieSB1cHBlciBsYXllciFcbiIsCiAJCQl0LCBzdGF0dXMsIHRzLT5yZXNwLCB0cy0+c3RhdCkpOwogCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAodC0+dWxkZF90YXNrKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwogCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKIAkJbWIoKTsvKiBkaXR0byAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJdC0+dGFza19kb25lKHQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmICghdC0+dWxkZF90YXNrKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOworCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKKwkJbWIoKTsvKmRpdHRvKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CisJCXQtPnRhc2tfZG9uZSh0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMjIxMiw3ICsyMjA4LDcgQEAKIHN0YXRpYyB2b2lkIG1waV9zYXRhX2V2ZW50KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSAsIHZvaWQgKnBpb21iKQogewogCXN0cnVjdCBzYXNfdGFzayAqdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzOwogCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsKIAlzdHJ1Y3QgcG04MDAxX2RldmljZSAqcG04MDAxX2RldjsKQEAgLTIyOTIsNyArMjI4OCw5IEBACiAJCQl0cy0+c3RhdCA9IFNBU19RVUVVRV9GVUxMOwogCQkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04MDAxX2hhLCB0LCBjY2IsIHRhZyk7CiAJCQltYigpOy8qZGl0dG8qLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQl0LT50YXNrX2RvbmUodCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0yNDAxLDExICsyMzk5LDIwIEBACiAJCQkiIHJlc3AgMHgleCBzdGF0IDB4JXggYnV0IGFib3J0ZWQgYnkgdXBwZXIgbGF5ZXIhXG4iLAogCQkJdCwgZXZlbnQsIHRzLT5yZXNwLCB0cy0+c3RhdCkpOwogCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAodC0+dWxkZF90YXNrKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOwogCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKLQkJbWIoKTsvKiBpbiBvcmRlciB0byBmb3JjZSBDUFUgb3JkZXJpbmcgKi8KKwkJbWIoKTsvKiBkaXR0byAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKIAkJdC0+dGFza19kb25lKHQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmICghdC0+dWxkZF90YXNrKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOworCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsKKwkJbWIoKTsvKmRpdHRvKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7CisJCXQtPnRhc2tfZG9uZSh0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMjg3NiwxNSArMjg4MywyMCBAQAogCQlsZTMyX3RvX2NwdShwUGF5bG9hZC0+bHJfZXZ0X3N0YXR1c19waHlpZF9wb3J0aWQpOwogCXU4IGxpbmtfcmF0ZSA9CiAJCSh1OCkoKGxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkICYgMHhGMDAwMDAwMCkgPj4gMjgpOworCXU4IHBvcnRfaWQgPSAodTgpKGxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkICYgMHgwMDAwMDAwRik7CiAJdTggcGh5X2lkID0KIAkJKHU4KSgobHJfZXZ0X3N0YXR1c19waHlpZF9wb3J0aWQgJiAweDAwMDAwMEYwKSA+PiA0KTsKKwl1MzIgbnBpcF9wb3J0c3RhdGUgPSBsZTMyX3RvX2NwdShwUGF5bG9hZC0+bnBpcF9wb3J0c3RhdGUpOworCXU4IHBvcnRzdGF0ZSA9ICh1OCkobnBpcF9wb3J0c3RhdGUgJiAweDAwMDAwMDBGKTsKKwlzdHJ1Y3QgcG04MDAxX3BvcnQgKnBvcnQgPSAmcG04MDAxX2hhLT5wb3J0W3BvcnRfaWRdOwogCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBwbTgwMDFfaGEtPnNhczsKIAlzdHJ1Y3QgcG04MDAxX3BoeSAqcGh5ID0gJnBtODAwMV9oYS0+cGh5W3BoeV9pZF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBkZXZpY2VUeXBlID0gcFBheWxvYWQtPnNhc19pZGVudGlmeS5kZXZfdHlwZTsKLQorCXBvcnQtPnBvcnRfc3RhdGUgPSAgcG9ydHN0YXRlOwogCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKLQkJcG04MDAxX3ByaW50aygiSFdfRVZFTlRfU0FTX1BIWV9VUCBcbiIpKTsKKwkJcG04MDAxX3ByaW50aygiSFdfRVZFTlRfU0FTX1BIWV9VUCBwb3J0IGlkID0gJWQsIHBoeSBpZCA9ICVkXG4iLAorCQlwb3J0X2lkLCBwaHlfaWQpKTsKIAogCXN3aXRjaCAoZGV2aWNlVHlwZSkgewogCWNhc2UgU0FTX1BIWV9VTlVTRUQ6CkBAIC0yODk1LDE2ICsyOTA3LDE5IEBACiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwgcG04MDAxX3ByaW50aygiZW5kIGRldmljZS5cbiIpKTsKIAkJcG04MDAxX2NoaXBfcGh5X2N0bF9yZXEocG04MDAxX2hhLCBwaHlfaWQsCiAJCQlQSFlfTk9USUZZX0VOQUJMRV9TUElOVVApOworCQlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMTsKIAkJZ2V0X2xyYXRlX21vZGUocGh5LCBsaW5rX3JhdGUpOwogCQlicmVhazsKIAljYXNlIFNBU19FREdFX0VYUEFOREVSX0RFVklDRToKIAkJUE04MDAxX01TR19EQkcocG04MDAxX2hhLAogCQkJcG04MDAxX3ByaW50aygiZXhwYW5kZXIgZGV2aWNlLlxuIikpOworCQlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMTsKIAkJZ2V0X2xyYXRlX21vZGUocGh5LCBsaW5rX3JhdGUpOwogCQlicmVhazsKIAljYXNlIFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFOgogCQlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCiAJCQlwbTgwMDFfcHJpbnRrKCJmYW5vdXQgZXhwYW5kZXIgZGV2aWNlLlxuIikpOworCQlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMTsKIAkJZ2V0X2xyYXRlX21vZGUocGh5LCBsaW5rX3JhdGUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjk0NiwxMSArMjk2MSwyMCBAQAogCQlsZTMyX3RvX2NwdShwUGF5bG9hZC0+bHJfZXZ0X3N0YXR1c19waHlpZF9wb3J0aWQpOwogCXU4IGxpbmtfcmF0ZSA9CiAJCSh1OCkoKGxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkICYgMHhGMDAwMDAwMCkgPj4gMjgpOworCXU4IHBvcnRfaWQgPSAodTgpKGxyX2V2dF9zdGF0dXNfcGh5aWRfcG9ydGlkICYgMHgwMDAwMDAwRik7CiAJdTggcGh5X2lkID0KIAkJKHU4KSgobHJfZXZ0X3N0YXR1c19waHlpZF9wb3J0aWQgJiAweDAwMDAwMEYwKSA+PiA0KTsKKwl1MzIgbnBpcF9wb3J0c3RhdGUgPSBsZTMyX3RvX2NwdShwUGF5bG9hZC0+bnBpcF9wb3J0c3RhdGUpOworCXU4IHBvcnRzdGF0ZSA9ICh1OCkobnBpcF9wb3J0c3RhdGUgJiAweDAwMDAwMDBGKTsKKwlzdHJ1Y3QgcG04MDAxX3BvcnQgKnBvcnQgPSAmcG04MDAxX2hhLT5wb3J0W3BvcnRfaWRdOwogCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBwbTgwMDFfaGEtPnNhczsKIAlzdHJ1Y3QgcG04MDAxX3BoeSAqcGh5ID0gJnBtODAwMV9oYS0+cGh5W3BoeV9pZF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlQTTgwMDFfTVNHX0RCRyhwbTgwMDFfaGEsCisJCXBtODAwMV9wcmludGsoIkhXX0VWRU5UX1NBVEFfUEhZX1VQIHBvcnQgaWQgPSAlZCwiCisJCSIgcGh5IGlkID0gJWRcbiIsIHBvcnRfaWQsIHBoeV9pZCkpOworCXBvcnQtPnBvcnRfc3RhdGUgPSAgcG9ydHN0YXRlOworCXBvcnQtPnBvcnRfYXR0YWNoZWQgPSAxOwogCWdldF9scmF0ZV9tb2RlKHBoeSwgbGlua19yYXRlKTsKIAlwaHktPnBoeV90eXBlIHw9IFBPUlRfVFlQRV9TQVRBOwogCXBoeS0+cGh5X2F0dGFjaGVkID0gMTsKQEAgLTI5ODQsNyArMzAwOCwxMyBAQAogCQkodTgpKChscl9ldnRfc3RhdHVzX3BoeWlkX3BvcnRpZCAmIDB4MDAwMDAwRjApID4+IDQpOwogCXUzMiBucGlwX3BvcnRzdGF0ZSA9IGxlMzJfdG9fY3B1KHBQYXlsb2FkLT5ucGlwX3BvcnRzdGF0ZSk7CiAJdTggcG9ydHN0YXRlID0gKHU4KShucGlwX3BvcnRzdGF0ZSAmIDB4MDAwMDAwMEYpOwotCisJc3RydWN0IHBtODAwMV9wb3J0ICpwb3J0ID0gJnBtODAwMV9oYS0+cG9ydFtwb3J0X2lkXTsKKwlzdHJ1Y3QgcG04MDAxX3BoeSAqcGh5ID0gJnBtODAwMV9oYS0+cGh5W3BoeV9pZF07CisJcG9ydC0+cG9ydF9zdGF0ZSA9ICBwb3J0c3RhdGU7CisJcGh5LT5waHlfdHlwZSA9IDA7CisJcGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSA9IDA7CisJcGh5LT5waHlfYXR0YWNoZWQgPSAwOworCW1lbXNldCgmcGh5LT5kZXZfc2FzX2FkZHIsIDAsIFNBU19BRERSX1NJWkUpOwogCXN3aXRjaCAocG9ydHN0YXRlKSB7CiAJY2FzZSBQT1JUX1ZBTElEOgogCQlicmVhazsKQEAgLTI5OTMsMjYgKzMwMjMsMzAgQEAKIAkJCXBtODAwMV9wcmludGsoIiBQb3J0SW52YWxpZCBwb3J0SUQgJWQgXG4iLCBwb3J0X2lkKSk7CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIiBMYXN0IHBoeSBEb3duIGFuZCBwb3J0IGludmFsaWRcbiIpKTsKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDA7CiAJCXBtODAwMV9od19ldmVudF9hY2tfcmVxKHBtODAwMV9oYSwgMCwgSFdfRVZFTlRfUEhZX0RPV04sCiAJCQlwb3J0X2lkLCBwaHlfaWQsIDAsIDApOwogCQlicmVhazsKIAljYXNlIFBPUlRfSU5fUkVTRVQ6CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKLQkJCXBtODAwMV9wcmludGsoIiBQb3J0SW5SZXNldCBwb3J0SUQgJWQgXG4iLCBwb3J0X2lkKSk7CisJCQlwbTgwMDFfcHJpbnRrKCIgUG9ydCBJbiBSZXNldCBwb3J0SUQgJWQgXG4iLCBwb3J0X2lkKSk7CiAJCWJyZWFrOwogCWNhc2UgUE9SVF9OT1RfRVNUQUJMSVNIRUQ6CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIiBwaHkgRG93biBhbmQgUE9SVF9OT1RfRVNUQUJMSVNIRURcbiIpKTsKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUE9SVF9MT1NUQ09NTToKIAkJUE04MDAxX01TR19EQkcocG04MDAxX2hhLAogCQkJcG04MDAxX3ByaW50aygiIHBoeSBEb3duIGFuZCBQT1JUX0xPU1RDT01NXG4iKSk7CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKIAkJCXBtODAwMV9wcmludGsoIiBMYXN0IHBoeSBEb3duIGFuZCBwb3J0IGludmFsaWRcbiIpKTsKKwkJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDA7CiAJCXBtODAwMV9od19ldmVudF9hY2tfcmVxKHBtODAwMV9oYSwgMCwgSFdfRVZFTlRfUEhZX0RPV04sCiAJCQlwb3J0X2lkLCBwaHlfaWQsIDAsIDApOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlwb3J0LT5wb3J0X2F0dGFjaGVkID0gMDsKIAkJUE04MDAxX01TR19EQkcocG04MDAxX2hhLAogCQkJcG04MDAxX3ByaW50aygiIHBoeSBEb3duIGFuZChkZWZhdWx0KSA9ICV4XG4iLAogCQkJcG9ydHN0YXRlKSk7CkBAIC0zNzcwLDcgKzM4MDQsOCBAQAogCXUzMiBvcGMgPSBPUENfSU5CX1NTUElOSUlPU1RBUlQ7CiAJbWVtc2V0KCZzc3BfY21kLCAwLCBzaXplb2Yoc3NwX2NtZCkpOwogCW1lbWNweShzc3BfY21kLnNzcF9pdS5sdW4sIHRhc2stPnNzcF90YXNrLkxVTiwgOCk7Ci0Jc3NwX2NtZC5kaXJfbV90bHIgPSBkYXRhX2Rpcl9mbGFnc1t0YXNrLT5kYXRhX2Rpcl0gPDwgOCB8IDB4MDsvKjAgZm9yCisJc3NwX2NtZC5kaXJfbV90bHIgPQorCQljcHVfdG9fbGUzMihkYXRhX2Rpcl9mbGFnc1t0YXNrLT5kYXRhX2Rpcl0gPDwgOCB8IDB4MCk7LyowIGZvcgogCVNBUyAxLjEgY29tcGF0aWJsZSBUTFIqLwogCXNzcF9jbWQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMih0YXNrLT50b3RhbF94ZmVyX2xlbik7CiAJc3NwX2NtZC5kZXZpY2VfaWQgPSBjcHVfdG9fbGUzMihwbTgwMDFfZGV2LT5kZXZpY2VfaWQpOwpAQCAtMzg0MSw3ICszODc2LDcgQEAKIAkJfQogCX0KIAlpZiAodGFzay0+YXRhX3Rhc2sudXNlX25jcSAmJiBwbTgwMDFfZ2V0X25jcV90YWcodGFzaywgJmhkcl90YWcpKQotCQluY2dfdGFnID0gY3B1X3RvX2xlMzIoaGRyX3RhZyk7CisJCW5jZ190YWcgPSBoZHJfdGFnOwogCWRpciA9IGRhdGFfZGlyX2ZsYWdzW3Rhc2stPmRhdGFfZGlyXSA8PCA4OwogCXNhdGFfY21kLnRhZyA9IGNwdV90b19sZTMyKHRhZyk7CiAJc2F0YV9jbWQuZGV2aWNlX2lkID0gY3B1X3RvX2xlMzIocG04MDAxX2hhX2Rldi0+ZGV2aWNlX2lkKTsKQEAgLTM5ODYsNyArNDAyMSw3IEBACiAJCSgoc3RwX3NzcHNtcF9zYXRhICYgMHgwMykgKiAweDEwMDAwMDAwKSk7CiAJcGF5bG9hZC5maXJzdGJ1cnN0c2l6ZV9JVE5leHVzdGltZW91dCA9CiAJCWNwdV90b19sZTMyKElUTlQgfCAoZmlyc3RCdXJzdFNpemUgKiAweDEwMDAwKSk7Ci0JbWVtY3B5KCZwYXlsb2FkLnNhc19hZGRyX2hpLCBwbTgwMDFfZGV2LT5zYXNfZGV2aWNlLT5zYXNfYWRkciwKKwltZW1jcHkocGF5bG9hZC5zYXNfYWRkciwgcG04MDAxX2Rldi0+c2FzX2RldmljZS0+c2FzX2FkZHIsCiAJCVNBU19BRERSX1NJWkUpOwogCXJjID0gbXBpX2J1aWxkX2NtZChwbTgwMDFfaGEsIGNpcmN1bGFyUSwgb3BjLCAmcGF5bG9hZCk7CiAJcmV0dXJuIHJjOwpAQCAtNDAyNyw3ICs0MDYyLDcgQEAKIAlzdHJ1Y3QgaW5ib3VuZF9xdWV1ZV90YWJsZSAqY2lyY3VsYXJROwogCWludCByZXQ7CiAJdTMyIG9wYyA9IE9QQ19JTkJfTE9DQUxfUEhZX0NPTlRST0w7Ci0JbWVtc2V0KCh1OCAqKSZwYXlsb2FkLCAwLCBzaXplb2YocGF5bG9hZCkpOworCW1lbXNldCgmcGF5bG9hZCwgMCwgc2l6ZW9mKHBheWxvYWQpKTsKIAljaXJjdWxhclEgPSAmcG04MDAxX2hhLT5pbmJuZF9xX3RibFswXTsKIAlwYXlsb2FkLnRhZyA9IDE7CiAJcGF5bG9hZC5waHlvcF9waHlpZCA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaCBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5oCmluZGV4IDk2ZTRkYWEuLjgzM2E1MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5oCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5oCkBAIC0yNDIsOCArMjQyLDcgQEAKIAlfX2xlMzIJcGh5aWRfcG9ydGlkOwogCV9fbGUzMglkdHlwZV9kbHJfcmV0cnk7CiAJX19sZTMyCWZpcnN0YnVyc3RzaXplX0lUTmV4dXN0aW1lb3V0OwotCXUzMglzYXNfYWRkcl9oaTsKLQl1MzIJc2FzX2FkZHJfbG93OworCXU4CXNhc19hZGRyW1NBU19BRERSX1NJWkVdOwogCV9fbGUzMgl1cHBlcl9kZXZpY2VfaWQ7CiAJdTMyCXJlc2VydmVkWzhdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYwppbmRleCA0MmViZTcyLi5jMmYxMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCkBAIC0yMDAsOCArMjAwLDEzIEBACiB7CiAJaW50IGk7CiAJc3Bpbl9sb2NrX2luaXQoJnBtODAwMV9oYS0+bG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IHBtODAwMV9oYS0+Y2hpcC0+bl9waHk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcG04MDAxX2hhLT5jaGlwLT5uX3BoeTsgaSsrKSB7CiAJCXBtODAwMV9waHlfaW5pdChwbTgwMDFfaGEsIGkpOworCQlwbTgwMDFfaGEtPnBvcnRbaV0ud2lkZV9wb3J0X3BoeW1hcCA9IDA7CisJCXBtODAwMV9oYS0+cG9ydFtpXS5wb3J0X2F0dGFjaGVkID0gMDsKKwkJcG04MDAxX2hhLT5wb3J0W2ldLnBvcnRfc3RhdGUgPSAwOworCQlJTklUX0xJU1RfSEVBRCgmcG04MDAxX2hhLT5wb3J0W2ldLmxpc3QpOworCX0KIAogCXBtODAwMV9oYS0+dGFncyA9IGt6YWxsb2MoUE04MDAxX01BWF9DQ0IsIEdGUF9LRVJORUwpOwogCWlmICghcG04MDAxX2hhLT50YWdzKQpAQCAtNTExLDE5ICs1MTYsMjMgQEAKIAl1OCBpOwogI2lmZGVmIFBNODAwMV9SRUFEX1ZQRAogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOworCXN0cnVjdCBwbTgwMDFfaW9jdGxfcGF5bG9hZCBwYXlsb2FkOwogCXBtODAwMV9oYS0+bnZtZF9jb21wbGV0aW9uID0gJmNvbXBsZXRpb247Ci0JUE04MDAxX0NISVBfRElTUC0+Z2V0X252bWRfcmVxKHBtODAwMV9oYSwgMCwgMCk7CisJcGF5bG9hZC5taW5vcl9mdW5jdGlvbiA9IDA7CisJcGF5bG9hZC5sZW5ndGggPSAxMjg7CisJcGF5bG9hZC5mdW5jX3NwZWNpZmljID0ga3phbGxvYygxMjgsIEdGUF9LRVJORUwpOworCVBNODAwMV9DSElQX0RJU1AtPmdldF9udm1kX3JlcShwbTgwMDFfaGEsICZwYXlsb2FkKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKIAlmb3IgKGkgPSAwOyBpIDwgcG04MDAxX2hhLT5jaGlwLT5uX3BoeTsgaSsrKSB7CiAJCW1lbWNweSgmcG04MDAxX2hhLT5waHlbaV0uZGV2X3Nhc19hZGRyLCBwbTgwMDFfaGEtPnNhc19hZGRyLAogCQkJU0FTX0FERFJfU0laRSk7CiAJCVBNODAwMV9JTklUX0RCRyhwbTgwMDFfaGEsCi0JCQlwbTgwMDFfcHJpbnRrKCJwaHkgJWQgc2FzX2FkZHIgPSAleCBcbiIsIGksCi0JCQkodTY0KXBtODAwMV9oYS0+cGh5W2ldLmRldl9zYXNfYWRkcikpOworCQkJcG04MDAxX3ByaW50aygicGh5ICVkIHNhc19hZGRyID0gJTAxNmxseCBcbiIsIGksCisJCQlwbTgwMDFfaGEtPnBoeVtpXS5kZXZfc2FzX2FkZHIpKTsKIAl9CiAjZWxzZQogCWZvciAoaSA9IDA7IGkgPCBwbTgwMDFfaGEtPmNoaXAtPm5fcGh5OyBpKyspIHsKLQkJcG04MDAxX2hhLT5waHlbaV0uZGV2X3Nhc19hZGRyID0gMHg1MDBlMDA0MDEwMDAwMDA0VUxMOworCQlwbTgwMDFfaGEtPnBoeVtpXS5kZXZfc2FzX2FkZHIgPSAweDUwMDEwYzYwMDA0N2Y5ZDBVTEw7CiAJCXBtODAwMV9oYS0+cGh5W2ldLmRldl9zYXNfYWRkciA9CiAJCQljcHVfdG9fYmU2NCgodTY0KQogCQkJCSgqKHU2NCAqKSZwbTgwMDFfaGEtPnBoeVtpXS5kZXZfc2FzX2FkZHIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKaW5kZXggMWY3NjdhMC4uN2Y5YzgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMKQEAgLTMyOSw2ICszMjksMjMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CisgLyogRmluZCB0aGUgbG9jYWwgcG9ydCBpZCB0aGF0J3MgYXR0YWNoZWQgdG8gdGhpcyBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgc2FzX2ZpbmRfbG9jYWxfcG9ydF9pZChzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkb21haW5fZGV2aWNlICpwZGV2ID0gZGV2LT5wYXJlbnQ7CisKKwkvKiBEaXJlY3RseSBhdHRhY2hlZCBkZXZpY2UgKi8KKwlpZiAoIXBkZXYpCisJCXJldHVybiBkZXYtPnBvcnQtPmlkOworCXdoaWxlIChwZGV2KSB7CisJCXN0cnVjdCBkb21haW5fZGV2aWNlICpwZGV2X3AgPSBwZGV2LT5wYXJlbnQ7CisJCWlmICghcGRldl9wKQorCQkJcmV0dXJuIHBkZXYtPnBvcnQtPmlkOworCQlwZGV2ID0gcGRldi0+cGFyZW50OworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgICogcG04MDAxX3Rhc2tfZXhlYyAtIHF1ZXVlIHRoZSB0YXNrKHNzcCwgc21wICYmIGF0YSkgdG8gdGhlIGhhcmR3YXJlLgogICAqIEB0YXNrOiB0aGUgdGFzayB0byBiZSBleGVjdXRlLgpAQCAtMzQ2LDExICszNjMsMTIgQEAKIAlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gdGFzay0+ZGV2OwogCXN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYTsKIAlzdHJ1Y3QgcG04MDAxX2RldmljZSAqcG04MDAxX2RldjsKKwlzdHJ1Y3QgcG04MDAxX3BvcnQgKnBvcnQgPSBOVUxMOwogCXN0cnVjdCBzYXNfdGFzayAqdCA9IHRhc2s7CiAJc3RydWN0IHBtODAwMV9jY2JfaW5mbyAqY2NiOwogCXUzMiB0YWcgPSAweGRlYWRiZWVmLCByYywgbl9lbGVtID0gMDsKIAl1MzIgbiA9IG51bTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMCwgZmxhZ3NfbGlic2FzID0gMDsKIAogCWlmICghZGV2LT5wb3J0KSB7CiAJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzbSA9ICZ0LT50YXNrX3N0YXR1czsKQEAgLTM3OSw2ICszOTcsMzUgQEAKIAkJCXJjID0gU0FTX1BIWV9ET1dOOwogCQkJZ290byBvdXRfZG9uZTsKIAkJfQorCQlwb3J0ID0gJnBtODAwMV9oYS0+cG9ydFtzYXNfZmluZF9sb2NhbF9wb3J0X2lkKGRldildOworCQlpZiAoIXBvcnQtPnBvcnRfYXR0YWNoZWQpIHsKKwkJCWlmIChzYXNfcHJvdG9jb2xfYXRhKHQtPnRhc2tfcHJvdG8pKSB7CisJCQkJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHMgPSAmdC0+dGFza19zdGF0dXM7CisJCQkJdHMtPnJlc3AgPSBTQVNfVEFTS19VTkRFTElWRVJFRDsKKwkJCQl0cy0+c3RhdCA9IFNBU19QSFlfRE9XTjsKKworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZGV2LT5zYXRhX2Rldi5hcC0+bG9jaywKKwkJCQkJCWZsYWdzX2xpYnNhcyk7CisJCQkJdC0+dGFza19kb25lKHQpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKGRldi0+c2F0YV9kZXYuYXAtPmxvY2ssCisJCQkJCWZsYWdzX2xpYnNhcyk7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOworCQkJCWlmIChuID4gMSkKKwkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAorCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOworCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CisJCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CisJCQkJdC0+dGFza19kb25lKHQpOworCQkJCWlmIChuID4gMSkKKwkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAorCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KIAkJcmMgPSBwbTgwMDFfdGFnX2FsbG9jKHBtODAwMV9oYSwgJnRhZyk7CiAJCWlmIChyYykKIAkJCWdvdG8gZXJyX291dDsKQEAgLTU2OSwxMSArNjE2LDExIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOwogCiAJcG04MDAxX2RldmljZSA9IHBtODAwMV9hbGxvY19kZXYocG04MDAxX2hhKTsKLQlwbTgwMDFfZGV2aWNlLT5zYXNfZGV2aWNlID0gZGV2OwogCWlmICghcG04MDAxX2RldmljZSkgewogCQlyZXMgPSAtMTsKIAkJZ290byBmb3VuZF9vdXQ7CiAJfQorCXBtODAwMV9kZXZpY2UtPnNhc19kZXZpY2UgPSBkZXY7CiAJZGV2LT5sbGRkX2RldiA9IHBtODAwMV9kZXZpY2U7CiAJcG04MDAxX2RldmljZS0+ZGV2X3R5cGUgPSBkZXYtPmRldl90eXBlOwogCXBtODAwMV9kZXZpY2UtPmRjb21wbGV0aW9uID0gJmNvbXBsZXRpb247CkBAIC02MDksNyArNjU2LDcgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKIAlpZiAoZGV2LT5kZXZfdHlwZSA9PSBTQVNfRU5EX0RFVikKIAkJbXNsZWVwKDUwKTsKLQlwbTgwMDFfaGEtPmZsYWdzID0gUE04MDAxRl9SVU5fVElNRSA7CisJcG04MDAxX2hhLT5mbGFncyB8PSBQTTgwMDFGX1JVTl9USU1FIDsKIAlyZXR1cm4gMDsKIGZvdW5kX291dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsKQEAgLTc3Miw3ICs4MTksNyBAQAogCQl0YXNrLT50YXNrX2RvbmUgPSBwbTgwMDFfdGFza19kb25lOwogCQl0YXNrLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdGFzazsKIAkJdGFzay0+dGltZXIuZnVuY3Rpb24gPSBwbTgwMDFfdG1mX3RpbWVkb3V0OwotCQl0YXNrLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBNODAwMV9UQVNLX1RJTUVPVVQqSFo7CisJCXRhc2stPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgUE04MDAxX1RBU0tfVElNRU9VVCAqIEhaOwogCQlhZGRfdGltZXIoJnRhc2stPnRpbWVyKTsKIAogCQlyZXMgPSBwbTgwMDFfdGFnX2FsbG9jKHBtODAwMV9oYSwgJmNjYl90YWcpOwpAQCAtODk3LDYgKzk0NCw4IEBACiAKIAlpZiAoZGV2X2lzX3NhdGEoZGV2KSkgewogCQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0aW9uX3NldHN0YXRlKTsKKwkJaWYgKHNjc2lfaXNfc2FzX3BoeV9sb2NhbChwaHkpKQorCQkJcmV0dXJuIDA7CiAJCXJjID0gc2FzX3BoeV9yZXNldChwaHksIDEpOwogCQltc2xlZXAoMjAwMCk7CiAJCXJjID0gcG04MDAxX2V4ZWNfaW50ZXJuYWxfdGFza19hYm9ydChwbTgwMDFfaGEsIHBtODAwMV9kZXYgLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmggYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9zYXMuaAppbmRleCAzMGYyZWRlLi44ZTM4Y2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9zYXMuaApAQCAtNTksMTEgKzU5LDExIEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJwbTgwMDEiCiAjZGVmaW5lIERSVl9WRVJTSU9OCQkiMC4xLjM2IgotI2RlZmluZSBQTTgwMDFfRkFJTF9MT0dHSU5HCTB4MDEgLyogbGlic2FzIEVIIGZ1bmN0aW9uIGxvZ2dpbmcgKi8KKyNkZWZpbmUgUE04MDAxX0ZBSUxfTE9HR0lORwkweDAxIC8qIEVycm9yIG1lc3NhZ2UgbG9nZ2luZyAqLwogI2RlZmluZSBQTTgwMDFfSU5JVF9MT0dHSU5HCTB4MDIgLyogZHJpdmVyIGluaXQgbG9nZ2luZyAqLwogI2RlZmluZSBQTTgwMDFfRElTQ19MT0dHSU5HCTB4MDQgLyogZGlzY292ZXJ5IGxheWVyIGxvZ2dpbmcgKi8KICNkZWZpbmUgUE04MDAxX0lPX0xPR0dJTkcJMHgwOCAvKiBJL08gcGF0aCBsb2dnaW5nICovCi0jZGVmaW5lIFBNODAwMV9FSF9MT0dHSU5HCTB4MTAgLyogRXJyb3IgbWVzc2FnZSBsb2dnaW5nICovCisjZGVmaW5lIFBNODAwMV9FSF9MT0dHSU5HCTB4MTAgLyogbGlic2FzIEVIIGZ1bmN0aW9uIGxvZ2dpbmcqLwogI2RlZmluZSBQTTgwMDFfSU9DVExfTE9HR0lORwkweDIwIC8qIElPQ1RMIG1lc3NhZ2UgbG9nZ2luZyAqLwogI2RlZmluZSBQTTgwMDFfTVNHX0xPR0dJTkcJMHg0MCAvKiBtaXNjIG1lc3NhZ2UgbG9nZ2luZyAqLwogI2RlZmluZSBwbTgwMDFfcHJpbnRrKGZvcm1hdCwgYXJnLi4uKQlwcmludGsoS0VSTl9JTkZPICIlcyAlZDoiIGZvcm1hdCxcCkBAIC0xMDAsNiArMTAwLDcgQEAKIAogI2RlZmluZSBQTTgwMDFfVVNFX1RBU0tMRVQKICNkZWZpbmUgUE04MDAxX1VTRV9NU0lYCisjZGVmaW5lIFBNODAwMV9SRUFEX1ZQRAogCiAKICNkZWZpbmUgREVWX0lTX0VYUEFOREVSKHR5cGUpCSgodHlwZSA9PSBFREdFX0RFVikgfHwgKHR5cGUgPT0gRkFOT1VUX0RFVikpCkBAIC0xMTEsNyArMTEyLDIyIEBACiBzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvOwogc3RydWN0IHBtODAwMV9jY2JfaW5mbzsKIHN0cnVjdCBwbTgwMDFfZGV2aWNlOwotc3RydWN0IHBtODAwMV90bWZfdGFzazsKKy8qIGRlZmluZSB0YXNrIG1hbmFnZW1lbnQgSVUgKi8KK3N0cnVjdCBwbTgwMDFfdG1mX3Rhc2sgeworCXU4CXRtZjsKKwl1MzIJdGFnX29mX3Rhc2tfdG9fYmVfbWFuYWdlZDsKK307CitzdHJ1Y3QgcG04MDAxX2lvY3RsX3BheWxvYWQgeworCXUzMglzaWduYXR1cmU7CisJdTE2CW1ham9yX2Z1bmN0aW9uOworCXUxNgltaW5vcl9mdW5jdGlvbjsKKwl1MTYJbGVuZ3RoOworCXUxNglzdGF0dXM7CisJdTE2CW9mZnNldDsKKwl1MTYJaWQ7CisJdTgJKmZ1bmNfc3BlY2lmaWM7Cit9OworCiBzdHJ1Y3QgcG04MDAxX2Rpc3BhdGNoIHsKIAljaGFyICpuYW1lOwogCWludCAoKmNoaXBfaW5pdCkoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhKTsKQEAgLTE2NCw2ICsxODAsMTAgQEAKIAogc3RydWN0IHBtODAwMV9wb3J0IHsKIAlzdHJ1Y3QgYXNkX3Nhc19wb3J0CXNhc19wb3J0OworCXU4CQkJcG9ydF9hdHRhY2hlZDsKKwl1OAkJCXdpZGVfcG9ydF9waHltYXA7CisJdTgJCQlwb3J0X3N0YXRlOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIH07CiAKIHN0cnVjdCBwbTgwMDFfcGh5IHsKQEAgLTM4NiwxMSArNDA2LDcgQEAKIAlfX2JlMzIgc3RhcnR1cF9lbnRyeTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CiAKLS8qIGRlZmluZSB0YXNrIG1hbmFnZW1lbnQgSVUgKi8KLXN0cnVjdCBwbTgwMDFfdG1mX3Rhc2sgewotCXU4CXRtZjsKLQl1MzIJdGFnX29mX3Rhc2tfdG9fYmVfbWFuYWdlZDsKLX07CisKIC8qKgogICogRlcgRmxhc2ggVXBkYXRlIHN0YXR1cyB2YWx1ZXMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggMzRjNmI4OS4uYjZmMWVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIHBtY3JhaWQuYyAtLSBkcml2ZXIgZm9yIFBNQyBTaWVycmEgTWF4UkFJRCBjb250cm9sbGVyIGFkYXB0ZXJzCiAgKgotICogV3JpdHRlbiBCeTogUE1DIFNpZXJyYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBCeTogQW5pbCBSYXZpbmRyYW5hdGg8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+CisgKiAgICAgICAgICAgICBQTUMtU2llcnJhIEluYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBQTUMgU2llcnJhIEluYwogICoKQEAgLTc5LDcgKzgwLDcgQEAKIC8qCiAgKiBNb2R1bGUgcGFyYW1ldGVycwogICovCi1NT0RVTEVfQVVUSE9SKCJQTUMgU2llcnJhIENvcnBvcmF0aW9uLCBhbmlsX3JhdmluZHJhbmF0aEBwbWMtc2llcnJhLmNvbSIpOworTU9EVUxFX0FVVEhPUigiQW5pbCBSYXZpbmRyYW5hdGg8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBNQyBTaWVycmEgTWF4UkFJRCBDb250cm9sbGVyIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oUE1DUkFJRF9EUklWRVJfVkVSU0lPTik7CkBAIC0xNjIsMTAgKzE2MywxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssIGxvY2tfZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSwgcXVldWUpIHsKIAotCQkvKiBkbyBub3QgZXhwb3NlIFZTRVRzIHdpdGggb3JkZXItaWRzID49IDI0MCAqLworCQkvKiBkbyBub3QgZXhwb3NlIFZTRVRzIHdpdGggb3JkZXItaWRzID4gTUFYX1ZTRVRfVEFSR0VUUyAqLwogCQlpZiAoUkVTX0lTX1ZTRVQodGVtcC0+Y2ZnX2VudHJ5KSkgewogCQkJdGFyZ2V0ID0gdGVtcC0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczE7Ci0JCQlpZiAodGFyZ2V0ID49IFBNQ1JBSURfTUFYX1ZTRVRfVEFSR0VUUykKKwkJCWlmICh0YXJnZXQgPiBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMpCiAJCQkJY29udGludWU7CiAJCQlidXMgPSBQTUNSQUlEX1ZTRVRfQlVTX0lEOwogCQkJbHVuID0gMDsKQEAgLTEyMTAsNyArMTIxMSw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAKIAlpZiAoY2ZndGUtPnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfVlNFVCkKLQkJcmV0dmFsID0gKChjZmd0ZS0+dW5pcXVlX2ZsYWdzMSAmIDB4RkYpIDwgMHhGRSk7CisJCXJldHZhbCA9ICgoY2ZndGUtPnVuaXF1ZV9mbGFnczEgJiAweDgwKSA9PSAwKTsKIAllbHNlIGlmIChjZmd0ZS0+cmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9HU0NTSSkKIAkJcmV0dmFsID0gKFJFU19CVVMoY2ZndGUtPnJlc291cmNlX2FkZHJlc3MpICE9CiAJCQkJUE1DUkFJRF9WSVJUVUFMX0VOQ0xfQlVTX0lEKTsKQEAgLTEzNjEsNiArMTM2Miw3IEBACiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAgbm9uZQogICovCisKIHN0YXRpYyB2b2lkIHBtY3JhaWRfaGFuZGxlX2NvbmZpZ19jaGFuZ2Uoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgKmNmZ19lbnRyeTsKQEAgLTEzNjgsOSArMTM3MCwxMCBAQAogCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kOwogCXN0cnVjdCBwbWNyYWlkX2NtZCAqY2ZnY21kOwogCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMgPSBOVUxMOwotCXUzMiBuZXdfZW50cnkgPSAxOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKKwl1MzIgbmV3X2VudHJ5ID0gMTsKKwl1MzIgaGlkZGVuX2VudHJ5ID0gMDsKIAlpbnQgcmM7CiAKIAljY25faGNhbSA9IChzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiAqKXBpbnN0YW5jZS0+Y2NuLmhjYW07CkBAIC0xNDA2LDkgKzE0MDksMTUgQEAKIAl9CiAKIAkvKiBJZiB0aGlzIHJlc291cmNlIGlzIG5vdCBnb2luZyB0byBiZSBhZGRlZCB0byBtaWQtbGF5ZXIsIGp1c3Qgbm90aWZ5Ci0JICogYXBwbGljYXRpb25zIGFuZCByZXR1cm4KKwkgKiBhcHBsaWNhdGlvbnMgYW5kIHJldHVybi4gSWYgdGhpcyBub3RpZmljYXRpb24gaXMgYWJvdXQgaGlkaW5nIGEgVlNFVAorCSAqIHJlc291cmNlLCBjaGVjayBpZiBpdCB3YXMgZXhwb3NlZCBhbHJlYWR5LgogCSAqLwotCWlmICghcG1jcmFpZF9leHBvc2VfcmVzb3VyY2UoY2ZnX2VudHJ5KSkKKwlpZiAocGluc3RhbmNlLT5jY24uaGNhbS0+bm90aWZpY2F0aW9uX3R5cGUgPT0KKwkgICAgTk9USUZJQ0FUSU9OX1RZUEVfRU5UUllfQ0hBTkdFRCAmJgorCSAgICBjZmdfZW50cnktPnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfVlNFVCAmJgorCSAgICBjZmdfZW50cnktPnVuaXF1ZV9mbGFnczEgJiAweDgwKSB7CisJCWhpZGRlbl9lbnRyeSA9IDE7CisJfSBlbHNlIGlmICghcG1jcmFpZF9leHBvc2VfcmVzb3VyY2UoY2ZnX2VudHJ5KSkKIAkJZ290byBvdXRfbm90aWZ5X2FwcHM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKQEAgLTE0MjQsNiArMTQzMywxMiBAQAogCiAJaWYgKG5ld19lbnRyeSkgewogCisJCWlmIChoaWRkZW5fZW50cnkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywKKwkJCQkJCWxvY2tfZmxhZ3MpOworCQkJZ290byBvdXRfbm90aWZ5X2FwcHM7CisJCX0KKwogCQkvKiBJZiB0aGVyZSBhcmUgbW9yZSBudW1iZXIgb2YgcmVzb3VyY2VzIHRoYW4gd2hhdCBkcml2ZXIgY2FuCiAJCSAqIG1hbmFnZSwgZG8gbm90IG5vdGlmeSB0aGUgYXBwbGljYXRpb25zIGFib3V0IHRoZSBDQ04uIEp1c3QKIAkJICogaWdub3JlIHRoaXMgbm90aWZpY2F0aW9ucyBhbmQgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgSENBTQpAQCAtMTQ1NCw4ICsxNDY5LDkgQEAKIAkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSkpOwogCiAJaWYgKHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl90eXBlID09Ci0JICAgIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0RFTEVURUQpIHsKKwkgICAgTk9USUZJQ0FUSU9OX1RZUEVfRU5UUllfREVMRVRFRCB8fCBoaWRkZW5fZW50cnkpIHsKIAkJaWYgKHJlcy0+c2NzaV9kZXYpIHsKKwkJCXJlcy0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczEgJj0gMHg3RjsKIAkJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gUkVTX0NIQU5HRV9ERUw7CiAJCQlyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9oYW5kbGUgPQogCQkJCVBNQ1JBSURfSU5WQUxJRF9SRVNfSEFORExFOwpAQCAtMjQ2NywxNCArMjQ4MywxMiBAQAogCQkJc2Vuc2VfY29waWVkID0gMTsKIAkJfQogCi0JCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpKSB7CisJCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpKQogCQkJcG1jcmFpZF9jYW5jZWxfYWxsKGNtZCwgc2Vuc2VfY29waWVkKTsKLQkJfSBlbHNlIGlmIChzZW5zZV9jb3BpZWQpIHsKKwkJZWxzZSBpZiAoc2Vuc2VfY29waWVkKQogCQkJcG1jcmFpZF9lcnBfZG9uZShjbWQpOwotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSAgeworCQllbHNlCiAJCQlwbWNyYWlkX3JlcXVlc3Rfc2Vuc2UoY21kKTsKLQkJfQogCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAppbmRleCAyNzUyYjU2Li45MmY4OWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKQEAgLTEsNiArMSw5IEBACiAvKgogICogcG1jcmFpZC5oIC0tIFBNQyBTaWVycmEgTWF4UkFJRCBjb250cm9sbGVyIGRyaXZlciBoZWFkZXIgZmlsZQogICoKKyAqIFdyaXR0ZW4gQnk6IEFuaWwgUmF2aW5kcmFuYXRoPGFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tPgorICogICAgICAgICAgICAgUE1DLVNpZXJyYSBJbmMKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgUE1DIFNpZXJyYSBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEwNiw3ICsxMDksNyBAQAogI2RlZmluZSBQTUNSQUlEX1ZTRVRfTFVOX0lEICAgICAgICAgICAgICAgICAgICAgIDB4MAogI2RlZmluZSBQTUNSQUlEX1BIWVNfQlVTX0lEICAgICAgICAgICAgICAgICAgICAgIDB4MAogI2RlZmluZSBQTUNSQUlEX1ZJUlRVQUxfRU5DTF9CVVNfSUQgICAgICAgICAgICAgIDB4OAotI2RlZmluZSBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMgICAgICAgICAgICAgICAgIDI0MAorI2RlZmluZSBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMgICAgICAgICAgICAgICAgIDB4N0YKICNkZWZpbmUgUE1DUkFJRF9NQVhfVlNFVF9MVU5TX1BFUl9UQVJHRVQgICAgICAgICA4CiAKICNkZWZpbmUgUE1DUkFJRF9JT0FfTUFYX1NFQ1RPUlMgICAgICAgICAgICAgICAgICAzMjc2NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggMjFlMmJjNC4uM2E5ZjViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0yMzIsNiArMjMyLDkgQEAKIAlpZiAob2ZmKQogCQlyZXR1cm4gMDsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkpCisJCXJldHVybiAwOworCiAJaWYgKHNzY2FuZihidWYsICIlZDoleDoleCIsICZ2YWwsICZzdGFydCwgJnNpemUpIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHN0YXJ0ID4gaGEtPm9wdHJvbV9zaXplKQpAQCAtMzc5LDYgKzM4Miw5IEBACiAJICAgIHN0cnVjdCBkZXZpY2UsIGtvYmopKSk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQorCQlyZXR1cm4gMDsKKwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTM5OCw2ICs0MDQsOSBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXVpbnQ4X3QgKnRtcF9kYXRhOwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgb2ZmICE9IDAgfHwgY291bnQgIT0gaGEtPnZwZF9zaXplIHx8CiAJICAgICFoYS0+aXNwX29wcy0+d3JpdGVfbnZyYW0pCiAJCXJldHVybiAwOwpAQCAtMTIzOCwxMCArMTI0NywxMSBAQAogICAgIGNoYXIgKmJ1ZikKIHsKIAlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoY2xhc3NfdG9fc2hvc3QoZGV2KSk7Ci0JaW50IHJ2YWw7CisJaW50IHJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCXVpbnQxNl90IHN0YXRlWzVdOwogCi0JcnZhbCA9IHFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKHZoYSwgc3RhdGUpOworCWlmICghdmhhLT5ody0+ZmxhZ3MuZWVoX2J1c3kpCisJCXJ2YWwgPSBxbGEyeDAwX2dldF9maXJtd2FyZV9zdGF0ZSh2aGEsIHN0YXRlKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKIAkJbWVtc2V0KHN0YXRlLCAtMSwgc2l6ZW9mKHN0YXRlKSk7CiAKQEAgLTE0NTIsMTAgKzE0NjIsMTMgQEAKIAlpZiAoIWZjcG9ydCkKIAkJcmV0dXJuOwogCi0JaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoZmNwb3J0LT52aGEtPmh3LT5wZGV2KSkpCisJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZmY3BvcnQtPnZoYS0+ZHBjX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoZmNwb3J0LT52aGEtPmh3LT5wZGV2KSkpIHsKIAkJcWxhMngwMF9hYm9ydF9hbGxfY21kcyhmY3BvcnQtPnZoYSwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOwotCWVsc2UKLQkJcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY3BvcnQpOworCQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBUcmFuc3BvcnQgaGFzIGVmZmVjdGl2ZWx5ICdkZWxldGVkJyB0aGUgcnBvcnQsIGNsZWFyCkBAIC0xNDc1LDYgKzE0ODgsOSBAQAogCWlmICghZmNwb3J0KQogCQlyZXR1cm47CiAKKwlpZiAodGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmZjcG9ydC0+dmhhLT5kcGNfZmxhZ3MpKQorCQlyZXR1cm47CisKIAlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShmY3BvcnQtPnZoYS0+aHctPnBkZXYpKSkgewogCQlxbGEyeDAwX2Fib3J0X2FsbF9jbWRzKGZjcG9ydC0+dmhhLCBESURfTk9fQ09OTkVDVCA8PCAxNik7CiAJCXJldHVybjsKQEAgLTE1MTUsNiArMTUzMSwxMiBAQAogCXBmY19ob3N0X3N0YXQgPSAmaGEtPmZjX2hvc3Rfc3RhdDsKIAltZW1zZXQocGZjX2hvc3Rfc3RhdCwgLTEsIHNpemVvZihzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzKSk7CiAKKwlpZiAodGVzdF9iaXQoVU5MT0FESU5HLCAmdmhhLT5kcGNfZmxhZ3MpKQorCQlnb3RvIGRvbmU7CisKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQorCQlnb3RvIGRvbmU7CisKIAlzdGF0cyA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmc3RhdHNfZG1hKTsKIAlpZiAoc3RhdHMgPT0gTlVMTCkgewogCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCmluZGV4IGY2NjBkZDcuLmQ2ZDljODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKQEAgLTI2LDcgKzI2LDcgQEAKIC8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTQgKi8gLyogT3V0cHV0IFJTQ04gdHJhY2UgbXNncyAqLwogLyogI2RlZmluZSBRTF9ERUJVR19MRVZFTF8xNSAqLyAvKiBPdXRwdXQgTlBJViB0cmFjZSBtc2dzICovCiAvKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE2ICovIC8qIE91dHB1dCBJU1A4NFhYIHRyYWNlIG1zZ3MgKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTcgKi8gLyogT3V0cHV0IE1VTFRJLVEgdHJhY2UgbWVzc2FnZXMgKi8KKy8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTcgKi8gLyogT3V0cHV0IEVFSCB0cmFjZSBtZXNzYWdlcyAqLwogCiAvKgogKiBNYWNyb3MgdXNlIGZvciBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4KQEAgLTEzMiw2ICsxMzIsMTMgQEAKICNlbHNlCiAjZGVmaW5lIERFQlVHMTYoeCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKKworI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTcpCisjZGVmaW5lIERFQlVHMTcoeCkJZG8ge3g7fSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERFQlVHMTcoeCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKwogLyoKICAqIEZpcm13YXJlIER1bXAgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IDZiOWJmMjMuLjYwOGU2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTE1NzAsOSArMTU3MCw2IEBACiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgKmRycG9ydDsKIAl1MzIgc3VwcG9ydGVkX2NsYXNzZXM7CiAKLQl1bnNpZ25lZCBsb25nIGxhc3RfcXVldWVfZnVsbDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfcmFtcF91cDsKLQogCXVpbnQxNl90IHZwX2lkeDsKIH0gZmNfcG9ydF90OwogCkBAIC0yMjU5LDEyICsyMjU2LDE1IEBACiAJCXVpbnQzMl90CWRpc2FibGVfc2VyZGVzCQk6MTsKIAkJdWludDMyX3QJZ3BzY19zdXBwb3J0ZWQJCToxOwogCQl1aW50MzJfdAlucGl2X3N1cHBvcnRlZAkJOjE7CisJCXVpbnQzMl90CXBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZQk6MTsKIAkJdWludDMyX3QJZmNlX2VuYWJsZWQJCToxOwogCQl1aW50MzJfdAlmYWNfc3VwcG9ydGVkCQk6MTsKIAkJdWludDMyX3QJY2hpcF9yZXNldF9kb25lCQk6MTsKIAkJdWludDMyX3QJcG9ydDAJCQk6MTsKIAkJdWludDMyX3QJcnVubmluZ19nb2xkX2Z3CQk6MTsKKwkJdWludDMyX3QJZWVoX2J1c3kJCToxOwogCQl1aW50MzJfdAljcHVfYWZmaW5pdHlfZW5hYmxlZAk6MTsKKwkJdWludDMyX3QJZGlzYWJsZV9tc2l4X2hhbmRzaGFrZQk6MTsKIAl9IGZsYWdzOwogCiAJLyogVGhpcyBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgImlvIHRyYW5zYWN0aW9ucyIsIHlvdSBtdXN0CkBAIC0yMzg3LDYgKzIzODcsNyBAQAogI2RlZmluZSBJU19RTEE4MVhYKGhhKQkJKElTX1FMQTgwMDEoaGEpKQogI2RlZmluZSBJU19RTEEyWFhYX01JRFRZUEUoaGEpCShJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE4NFhYKGhhKSB8fCBcCiAJCQkJSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpCisjZGVmaW5lIElTX01TSVhfTkFDS19DQVBBQkxFKGhhKSAoSVNfUUxBODFYWChoYSkpCiAjZGVmaW5lIElTX05PUE9MTElOR19UWVBFKGhhKQkoKElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKSAmJiBcCiAJCQkJKGhhKS0+ZmxhZ3MubXNpeF9lbmFibGVkKQogI2RlZmluZSBJU19GQUNfUkVRVUlSRUQoaGEpCShJU19RTEE4MVhYKGhhKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCBlMjE4NTEzLi5mNjFmYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCkBAIC03Miw4ICs3Miw2IEBACiBleHRlcm4gaW50IHFsMnhmZG1pZW5hYmxlOwogZXh0ZXJuIGludCBxbDJ4YWxsb2Nmd2R1bXA7CiBleHRlcm4gaW50IHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nOwotZXh0ZXJuIGludCBxbDJ4cWZ1bGxyYW1wdXA7Ci1leHRlcm4gaW50IHFsMnhxZnVsbHRyYWNraW5nOwogZXh0ZXJuIGludCBxbDJ4aWlkbWFlbmFibGU7CiBleHRlcm4gaW50IHFsMnhtYXhxdWV1ZXM7CiBleHRlcm4gaW50IHFsMnhtdWx0aXF1ZV90YWc7CkBAIC0zMjYsNiArMzI0LDcgQEAKIGV4dGVybiBpbnQKIHFsYTJ4MDBfd3JpdGVfcmFtX3dvcmQoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQzMl90LCB1aW50MzJfdCk7CiAKK2V4dGVybiBpbnQgcWxhMngwMF9nZXRfZGF0YV9yYXRlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfaXNyLmMgc291cmNlIGZpbGUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IGI3NDkyNGIuLmI0YTBlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMjY5LDYgKzI2OSw4IEBACiAJdmhhLT5mbGFncy5vbmxpbmUgPSAwOwogCWhhLT5mbGFncy5jaGlwX3Jlc2V0X2RvbmUgPSAwOwogCXZoYS0+ZmxhZ3MucmVzZXRfYWN0aXZlID0gMDsKKwloYS0+ZmxhZ3MucGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlID0gMDsKKwloYS0+ZmxhZ3MuZWVoX2J1c3kgPSAwOwogCWF0b21pY19zZXQoJnZoYS0+bG9vcF9kb3duX3RpbWVyLCBMT09QX0RPV05fVElNRSk7CiAJYXRvbWljX3NldCgmdmhhLT5sb29wX3N0YXRlLCBMT09QX0RPV04pOwogCXZoYS0+ZGV2aWNlX2ZsYWdzID0gREZMR19OT19DQUJMRTsKQEAgLTU4MSw2ICs1ODMsOSBAQAogCXVpbnQzMl90CWNudDsKIAl1aW50MTZfdAljbWQ7CiAKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQorCQlyZXR1cm47CisKIAloYS0+aXNwX29wcy0+ZGlzYWJsZV9pbnRycyhoYSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKQEAgLTc4Niw2ICs3OTEsMTIgQEAKIHFsYTI0eHhfcmVzZXRfY2hpcChzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSAmJgorCSAgICBoYS0+ZmxhZ3MucGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7CisJCXJldHVybjsKKwl9CisKIAloYS0+aXNwX29wcy0+ZGlzYWJsZV9pbnRycyhoYSk7CiAKIAkvKiBQZXJmb3JtIFJJU0MgcmVzZXQuICovCkBAIC0xNDQyLDcgKzE0NTMsMTcgQEAKIAkJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yIHw9CiAJCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihCSVRfMTgpOwogCi0JCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIofkJJVF8yMik7CisJCS8qIFVzZSBEaXNhYmxlIE1TSVggSGFuZHNoYWtlIG1vZGUgZm9yIGNhcGFibGUgYWRhcHRlcnMgKi8KKwkJaWYgKElTX01TSVhfTkFDS19DQVBBQkxFKGhhKSkgeworCQkJaWNiLT5maXJtd2FyZV9vcHRpb25zXzIgJj0KKwkJCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKH5CSVRfMjIpOworCQkJaGEtPmZsYWdzLmRpc2FibGVfbXNpeF9oYW5kc2hha2UgPSAxOworCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSJNU0lYIEhhbmRzaGFrZSBEaXNhYmxlIE1vZGUgdHVybmVkIG9uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yIHw9CisJCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihCSVRfMjIpOworCQl9CiAJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQklUXzIzKTsKIAogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlzcDI1bXEucmVxX3FfaW4sIDApOwpAQCAtMjI1Niw2ICsyMjc3LDggQEAKIAljbGVhcl9iaXQoTE9DQUxfTE9PUF9VUERBVEUsICZ2aGEtPmRwY19mbGFncyk7CiAJY2xlYXJfYml0KFJTQ05fVVBEQVRFLCAmdmhhLT5kcGNfZmxhZ3MpOwogCisJcWxhMngwMF9nZXRfZGF0YV9yYXRlKHZoYSk7CisKIAkvKiBEZXRlcm1pbmUgd2hhdCB3ZSBuZWVkIHRvIGRvICovCiAJaWYgKGhhLT5jdXJyZW50X3RvcG9sb2d5ID09IElTUF9DRkdfRkwgJiYKIAkgICAgKHRlc3RfYml0KExPQ0FMX0xPT1BfVVBEQVRFLCAmZmxhZ3MpKSkgewpAQCAtMzU1MCw2ICszNTczLDEzIEBACiAJCS8qIFJlcXVldWUgYWxsIGNvbW1hbmRzIGluIG91dHN0YW5kaW5nIGNvbW1hbmQgbGlzdC4gKi8KIAkJcWxhMngwMF9hYm9ydF9hbGxfY21kcyh2aGEsIERJRF9SRVNFVCA8PCAxNik7CiAKKwkJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpICYmCisJCSAgICBoYS0+ZmxhZ3MucGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSkgeworCQkJY2xlYXJfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisKIAkJaGEtPmlzcF9vcHMtPmdldF9mbGFzaF92ZXJzaW9uKHZoYSwgcmVxLT5yaW5nKTsKIAogCQloYS0+aXNwX29wcy0+bnZyYW1fY29uZmlnKHZoYSk7CkBAIC00NDQ4LDYgKzQ0NzgsOCBAQAogCWludCByZXQsIHJldHJpZXM7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlpZiAoaGEtPmZsYWdzLnBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuOwogCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJcmV0dXJuOwogCWlmICghaGEtPmZ3X21ham9yX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggODA0OTg3My4uZmZkMGVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJZm9yIChpdGVyID0gNTA7IGl0ZXItLTsgKSB7CiAJCXN0YXQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+dS5pc3AyMzAwLmhvc3Rfc3RhdHVzKTsKIAkJaWYgKHN0YXQgJiBIU1JfUklTQ19QQVVTRUQpIHsKLQkJCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkKKwkJCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkpCiAJCQkJYnJlYWs7CiAKIAkJCWhjY3IgPSBSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKQEAgLTgxMSw3OCArODExLDYgQEAKIAkJcWxhMngwMF9hbGVydF9hbGxfdnBzKHJzcCwgbWIpOwogfQogCi1zdGF0aWMgdm9pZAotcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfdXAoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQotewotCWZjX3BvcnRfdCAqZmNwb3J0ID0gZGF0YTsKLQlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gZmNwb3J0LT52aGE7Ci0Jc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7Ci0Jc3RydWN0IHJlcV9xdWUgKnJlcSA9IE5VTEw7Ci0KLQlpZiAoIXFsMnhxZnVsbHRyYWNraW5nKQotCQlyZXR1cm47Ci0KLQlyZXEgPSB2aGEtPnJlcTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCWlmIChyZXEtPm1heF9xX2RlcHRoIDw9IHNkZXYtPnF1ZXVlX2RlcHRoKQotCQlyZXR1cm47Ci0KLQlpZiAoc2Rldi0+b3JkZXJlZF90YWdzKQotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBNU0dfT1JERVJFRF9UQUcsCi0JCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCArIDEpOwotCWVsc2UKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX1NJTVBMRV9UQUcsCi0JCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCArIDEpOwotCi0JZmNwb3J0LT5sYXN0X3JhbXBfdXAgPSBqaWZmaWVzOwotCi0JREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtdXAgdG8gJWQuXG4iLAotCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1biwKLQkgICAgc2Rldi0+cXVldWVfZGVwdGgpKTsKLX0KLQotc3RhdGljIHZvaWQKLXFsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX2Rvd24oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKQotewotCWZjX3BvcnRfdCAqZmNwb3J0ID0gZGF0YTsKLQotCWlmICghc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHNkZXYtPnF1ZXVlX2RlcHRoIC0gMSkpCi0JCXJldHVybjsKLQotCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgZmNwb3J0LT52aGEtPmh3LAotCSAgICAic2NzaSglbGQ6JWQ6JWQ6JWQpOiBRdWV1ZSBkZXB0aCBhZGp1c3RlZC1kb3duIHRvICVkLlxuIiwKLQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4sCi0JICAgIHNkZXYtPnF1ZXVlX2RlcHRoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcWxhMngwMF9yYW1wX3VwX3F1ZXVlX2RlcHRoKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAotCQkJCQkJCQlzcmJfdCAqc3ApCi17Ci0JZmNfcG9ydF90ICpmY3BvcnQ7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwotCi0JaWYgKCFxbDJ4cWZ1bGx0cmFja2luZykKLQkJcmV0dXJuOwotCi0Jc2RldiA9IHNwLT5jbWQtPmRldmljZTsKLQlpZiAoc2Rldi0+cXVldWVfZGVwdGggPj0gcmVxLT5tYXhfcV9kZXB0aCkKLQkJcmV0dXJuOwotCi0JZmNwb3J0ID0gc3AtPmZjcG9ydDsKLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKLQkgICAgZmNwb3J0LT5sYXN0X3JhbXBfdXAgKyBxbDJ4cWZ1bGxyYW1wdXAgKiBIWikpCi0JCXJldHVybjsKLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKLQkgICAgZmNwb3J0LT5sYXN0X3F1ZXVlX2Z1bGwgKyBxbDJ4cWZ1bGxyYW1wdXAgKiBIWikpCi0JCXJldHVybjsKLQotCXN0YXJnZXRfZm9yX2VhY2hfZGV2aWNlKHNkZXYtPnNkZXZfdGFyZ2V0LCBmY3BvcnQsCi0JICAgIHFsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX3VwKTsKLX0KLQogLyoqCiAgKiBxbGEyeDAwX3Byb2Nlc3NfY29tcGxldGVkX3JlcXVlc3QoKSAtIFByb2Nlc3MgYSBGYXN0IFBvc3QgcmVzcG9uc2UuCiAgKiBAaGE6IFNDU0kgZHJpdmVyIEhBIGNvbnRleHQKQEAgLTkxMyw4ICs4NDEsNiBAQAogCiAJCS8qIFNhdmUgSVNQIGNvbXBsZXRpb24gc3RhdHVzICovCiAJCXNwLT5jbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKLQotCQlxbGEyeDAwX3JhbXBfdXBfcXVldWVfZGVwdGgodmhhLCByZXEsIHNwKTsKIAkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOwogCX0gZWxzZSB7CiAJCURFQlVHMihwcmludGsoInNjc2koJWxkKSBSZXE6JWQ6IEludmFsaWQgSVNQIFNDU0kgY29tcGxldGlvbiIKQEAgLTE0MzUsMTMgKzEzNjEsNiBAQAogCQkJICAgICJzY3NpKCVsZCk6IFFVRVVFIEZVTEwgc3RhdHVzIGRldGVjdGVkICIKIAkJCSAgICAiMHgleC0weCV4LlxuIiwgdmhhLT5ob3N0X25vLCBjb21wX3N0YXR1cywKIAkJCSAgICBzY3NpX3N0YXR1cykpOwotCi0JCQkvKiBBZGp1c3QgcXVldWUgZGVwdGggZm9yIGFsbCBsdW5zIG9uIHRoZSBwb3J0LiAqLwotCQkJaWYgKCFxbDJ4cWZ1bGx0cmFja2luZykKLQkJCQlicmVhazsKLQkJCWZjcG9ydC0+bGFzdF9xdWV1ZV9mdWxsID0gamlmZmllczsKLQkJCXN0YXJnZXRfZm9yX2VhY2hfZGV2aWNlKGNwLT5kZXZpY2UtPnNkZXZfdGFyZ2V0LAotCQkJICAgIGZjcG9ydCwgcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfZG93bik7CiAJCQlicmVhazsKIAkJfQogCQlpZiAobHNjc2lfc3RhdHVzICE9IFNTX0NIRUNLX0NPTkRJVElPTikKQEAgLTE1MTYsMTcgKzE0MzUsNiBAQAogCQkJCSAgICAic2NzaSglbGQpOiBRVUVVRSBGVUxMIHN0YXR1cyBkZXRlY3RlZCAiCiAJCQkJICAgICIweCV4LTB4JXguXG4iLCB2aGEtPmhvc3Rfbm8sIGNvbXBfc3RhdHVzLAogCQkJCSAgICBzY3NpX3N0YXR1cykpOwotCi0JCQkJLyoKLQkJCQkgKiBBZGp1c3QgcXVldWUgZGVwdGggZm9yIGFsbCBsdW5zIG9uIHRoZQotCQkJCSAqIHBvcnQuCi0JCQkJICovCi0JCQkJaWYgKCFxbDJ4cWZ1bGx0cmFja2luZykKLQkJCQkJYnJlYWs7Ci0JCQkJZmNwb3J0LT5sYXN0X3F1ZXVlX2Z1bGwgPSBqaWZmaWVzOwotCQkJCXN0YXJnZXRfZm9yX2VhY2hfZGV2aWNlKAotCQkJCSAgICBjcC0+ZGV2aWNlLT5zZGV2X3RhcmdldCwgZmNwb3J0LAotCQkJCSAgICBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF9kb3duKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChsc2NzaV9zdGF0dXMgIT0gU1NfQ0hFQ0tfQ09ORElUSU9OKQpAQCAtMTkzOCwxMiArMTg0NiwxNSBAQAogCXJlZyA9ICZoYS0+aW9iYXNlLT5pc3AyNDsKIAlzdGF0dXMgPSAwOwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAlmb3IgKGl0ZXIgPSA1MDsgaXRlci0tOyApIHsKIAkJc3RhdCA9IFJEX1JFR19EV09SRCgmcmVnLT5ob3N0X3N0YXR1cyk7CiAJCWlmIChzdGF0ICYgSFNSWF9SSVNDX1BBVVNFRCkgewotCQkJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKQorCQkJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKSkKIAkJCQlicmVhazsKIAogCQkJaGNjciA9IFJEX1JFR19EV09SRCgmcmVnLT5oY2NyKTsKQEAgLTIwMjAsNyArMTkzMSw3IEBACiAKIAl2aGEgPSBxbGEyNXh4X2dldF9ob3N0KHJzcCk7CiAJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKLQlpZiAoIWhhLT5tcWVuYWJsZSkgeworCWlmICghaGEtPmZsYWdzLmRpc2FibGVfbXNpeF9oYW5kc2hha2UpIHsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwogCQlSRF9SRUdfRFdPUkRfUkVMQVhFRCgmcmVnLT5oY2NyKTsKIAl9CkBAIC0yMDM0LDYgKzE5NDUsNyBAQAogewogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CiAJc3RydWN0IHJzcF9xdWUgKnJzcDsKKwlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzsKIAogCXJzcCA9IChzdHJ1Y3QgcnNwX3F1ZSAqKSBkZXZfaWQ7CiAJaWYgKCFyc3ApIHsKQEAgLTIwNDMsNiArMTk1NSwxNCBAQAogCX0KIAloYSA9IHJzcC0+aHc7CiAKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0LCBpZiBlbmFibGVkLCBmb3IgdGhpcyByZXNwb25zZSBxdWV1ZSAqLworCWlmIChyc3AtPm9wdGlvbnMgJiB+QklUXzYpIHsKKwkJcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDI0OworCQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKKwkJUkRfUkVHX0RXT1JEX1JFTEFYRUQoJnJlZy0+aGNjcik7CisJCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCX0KIAlxdWV1ZV93b3JrX29uKChpbnQpIChyc3AtPmlkIC0gMSksIGhhLT53cSwgJnJzcC0+cV93b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTIwNzUsNyArMTk5NSw3IEBACiAJZG8gewogCQlzdGF0ID0gUkRfUkVHX0RXT1JEKCZyZWctPmhvc3Rfc3RhdHVzKTsKIAkJaWYgKHN0YXQgJiBIU1JYX1JJU0NfUEFVU0VEKSB7Ci0JCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpCisJCQlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpKQogCQkJCWJyZWFrOwogCiAJCQloY2NyID0gUkRfUkVHX0RXT1JEKCZyZWctPmhjY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IDA1ZDU5NWQuLjA1NmU0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTU2LDYgKzU2LDEyIEBACiAKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwogCisJaWYgKGhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKKwkJREVCVUcocHJpbnRrKCIlcyglbGQpOiBQZXJtIGZhaWx1cmUgb24gRUVILCB0aW1lb3V0IE1CWCAiCisJCQkgICAgICJFeGl0aW5nLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX1RJTUVPVVQ7CisJfQorCiAJLyoKIAkgKiBXYWl0IGZvciBhY3RpdmUgbWFpbGJveCBjb21tYW5kcyB0byBmaW5pc2ggYnkgd2FpdGluZyBhdCBtb3N0IHRvdgogCSAqIHNlY29uZHMuIFRoaXMgaXMgdG8gc2VyaWFsaXplIGFjdHVhbCBpc3N1aW5nIG9mIG1haWxib3ggY21kcyBkdXJpbmcKQEAgLTE1NCwxMCArMTYwLDE0IEBACiAJCQkvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHRzLiAqLwogCQkJcWxhMngwMF9wb2xsKGhhLT5yc3BfcV9tYXBbMF0pOwogCi0JCQlpZiAoY29tbWFuZCAhPSBNQkNfTE9BRF9SSVNDX1JBTV9FWFRFTkRFRCAmJgotCQkJICAgICFoYS0+ZmxhZ3MubWJveF9pbnQpCisJCQlpZiAoIWhhLT5mbGFncy5tYm94X2ludCAmJgorCQkJICAgICEoSVNfUUxBMjIwMChoYSkgJiYKKwkJCSAgICBjb21tYW5kID09IE1CQ19MT0FEX1JJU0NfUkFNX0VYVEVOREVEKSkKIAkJCQltc2xlZXAoMTApOwogCQl9IC8qIHdoaWxlICovCisJCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJIldhaXRlZCAlZCBzZWNcbiIsCisJCQkodWludCkoKGppZmZpZXMgLSAod2FpdF90aW1lIC0gKG1jcC0+dG92ICogSFopKSkvSFopKSk7CiAJfQogCiAJLyogQ2hlY2sgd2hldGhlciB3ZSB0aW1lZCBvdXQgKi8KQEAgLTIyNyw3ICsyMzcsOCBAQAogCiAJaWYgKHJ2YWwgPT0gUUxBX0ZVTkNUSU9OX1RJTUVPVVQgJiYKIAkgICAgbWNwLT5tYlswXSAhPSBNQkNfR0VOX1NZU1RFTV9FUlJPUikgewotCQlpZiAoIWlvX2xvY2tfb24gfHwgKG1jcC0+ZmxhZ3MgJiBJT0NUTF9DTUQpKSB7CisJCWlmICghaW9fbG9ja19vbiB8fCAobWNwLT5mbGFncyAmIElPQ1RMX0NNRCkgfHwKKwkJICAgIGhhLT5mbGFncy5lZWhfYnVzeSkgewogCQkJLyogbm90IGluIGRwYy4gc2NoZWR1bGUgaXQgZm9yIGRwYyB0byB0YWtlIG92ZXIuICovCiAJCQlERUJVRyhwcmludGsoIiVzKCVsZCk6IHRpbWVvdXQgc2NoZWR1bGUgIgogCQkJImlzcF9hYm9ydF9uZWVkZWQuXG4iLCBfX2Z1bmNfXywKQEAgLTIzNyw3ICsyNDgsNyBAQAogCQkJYmFzZV92aGEtPmhvc3Rfbm8pKTsKIAkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJyZWQuIFNjaGVkdWxpbmcgSVNQICIKLQkJCSAgICAiYWJvcnQuXG4iKTsKKwkJCSAgICAiYWJvcnQuIGVlaF9idXN5OiAweCV4XG4iLCBoYS0+ZmxhZ3MuZWVoX2J1c3kpOwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CiAJCX0gZWxzZSBpZiAoIWFib3J0X2FjdGl2ZSkgewpAQCAtMjUzMCw2ICsyNTQxLDkgQEAKIAlpZiAoIUlTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKKwlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZSh2aGEtPmh3LT5wZGV2KSkpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOworCiAJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX1RSQUNFX0NPTlRST0w7CkBAIC0yNTY1LDYgKzI1NzksOSBAQAogCWlmICghSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHZoYS0+aHctPnBkZXYpKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfVFJBQ0VfQ09OVFJPTDsKQEAgLTI1OTUsNiArMjYxMiw5IEBACiAJaWYgKCFJU19RTEEyNVhYKHZoYS0+aHcpICYmICFJU19RTEE4MVhYKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAorCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHZoYS0+aHctPnBkZXYpKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CisKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfVFJBQ0VfQ09OVFJPTDsKQEAgLTI2MzksNiArMjY1OSw5IEBACiAJaWYgKCFJU19GV0kyX0NBUEFCTEUodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUodmhhLT5ody0+cGRldikpKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19UUkFDRV9DT05UUk9MOwpAQCAtMzY0MywzICszNjY2LDM2IEBACiAKIAlyZXR1cm4gcnZhbDsKIH0KKworaW50CitxbGEyeDAwX2dldF9kYXRhX3JhdGUoc2NzaV9xbGFfaG9zdF90ICp2aGEpCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKworCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTyAiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1jcC0+bWJbMF0gPSBNQkNfREFUQV9SQVRFOworCW1jcC0+bWJbMV0gPSAwOworCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8yfE1CWF8xfE1CWF8wOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSAwOworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fSU5GTyAiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwKKwkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwl9IGVsc2UgeworCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KKwkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlpZiAobWNwLT5tYlsxXSAhPSAweDcpCisJCQloYS0+bGlua19kYXRhX3JhdGUgPSBtY3AtPm1iWzFdOworCX0KKworCXJldHVybiBydmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IGE0N2QzNDMuLmI5MDFhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKQEAgLTYzOSw4ICs2MzksMTAgQEAKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByc3BfcXVlLCBxX3dvcmspOwogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGE7CiAKKwlzcGluX2xvY2tfaXJxKCZyc3AtPmh3LT5oYXJkd2FyZV9sb2NrKTsKIAl2aGEgPSBxbGEyNXh4X2dldF9ob3N0KHJzcCk7CiAJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKKwlzcGluX3VubG9ja19pcnEoJnJzcC0+aHctPmhhcmR3YXJlX2xvY2spOwogfQogCiAvKiBjcmVhdGUgcmVzcG9uc2UgcXVldWUgKi8KQEAgLTY5Niw2ICs2OTgsMTAgQEAKIAkvKiBVc2UgYWx0ZXJuYXRlIFBDSSBkZXZmbiAqLwogCWlmIChMU0IocnNwLT5yaWQpKQogCQlvcHRpb25zIHw9IEJJVF81OworCS8qIEVuYWJsZSBNU0lYIGhhbmRzaGFrZSBtb2RlIG9uIGZvciB1bmNhcGFibGUgYWRhcHRlcnMgKi8KKwlpZiAoIUlTX01TSVhfTkFDS19DQVBBQkxFKGhhKSkKKwkJb3B0aW9ucyB8PSBCSVRfNjsKKwogCXJzcC0+b3B0aW9ucyA9IG9wdGlvbnM7CiAJcnNwLT5pZCA9IHF1ZV9pZDsKIAlyZWcgPSBJU1BfUVVFX1JFRyhoYSwgcXVlX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggNDE2NjkzNS4uMjA5ZjUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTc4LDIxICs3OCw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhtYXhxZGVwdGgsCiAJCSJNYXhpbXVtIHF1ZXVlIGRlcHRoIHRvIHJlcG9ydCBmb3IgdGFyZ2V0IGRldmljZXMuIik7CiAKLWludCBxbDJ4cWZ1bGx0cmFja2luZyA9IDE7Ci1tb2R1bGVfcGFyYW0ocWwyeHFmdWxsdHJhY2tpbmcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MocWwyeHFmdWxsdHJhY2tpbmcsCi0JCSJDb250cm9scyB3aGV0aGVyIHRoZSBkcml2ZXIgdHJhY2tzIHF1ZXVlIGZ1bGwgc3RhdHVzICIKLQkJInJldHVybnMgYW5kIGR5bmFtaWNhbGx5IGFkanVzdHMgYSBzY3NpIGRldmljZSdzIHF1ZXVlICIKLQkJImRlcHRoLiAgRGVmYXVsdCBpcyAxLCBwZXJmb3JtIHRyYWNraW5nLiAgU2V0IHRvIDAgdG8gIgotCQkiZGlzYWJsZSBkeW5hbWljIHRyYWNraW5nIGFuZCBhZGp1c3RtZW50IG9mIHF1ZXVlIGRlcHRoLiIpOwotCi1pbnQgcWwyeHFmdWxscmFtcHVwID0gMTIwOwotbW9kdWxlX3BhcmFtKHFsMnhxZnVsbHJhbXB1cCwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhxbDJ4cWZ1bGxyYW1wdXAsCi0JCSJOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IHRvIGJlZ2luIHRvIHJhbXAtdXAgdGhlIHF1ZXVlICIKLQkJImRlcHRoIGZvciBhIGRldmljZSBhZnRlciBhIHF1ZXVlLWZ1bGwgY29uZGl0aW9uIGhhcyBiZWVuICIKLQkJImRldGVjdGVkLiAgRGVmYXVsdCBpcyAxMjAgc2Vjb25kcy4iKTsKLQogaW50IHFsMnhpaWRtYWVuYWJsZT0xOwogbW9kdWxlX3BhcmFtKHFsMnhpaWRtYWVuYWJsZSwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4aWlkbWFlbmFibGUsCkBAIC00OTAsMTEgKzQ3NSwxMSBAQAogCXNyYl90ICpzcDsKIAlpbnQgcnZhbDsKIAotCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkpIHsKLQkJaWYgKGhhLT5wZGV2LT5lcnJvcl9zdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19mcm96ZW4pCi0JCQljbWQtPnJlc3VsdCA9IERJRF9SRVFVRVVFIDw8IDE2OwotCQllbHNlCisJaWYgKGhhLT5mbGFncy5lZWhfYnVzeSkgeworCQlpZiAoaGEtPmZsYWdzLnBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWVsc2UKKwkJCWNtZC0+cmVzdWx0ID0gRElEX1JFUVVFVUUgPDwgMTY7CiAJCWdvdG8gcWMyNF9mYWlsX2NvbW1hbmQ7CiAJfQogCkBAIC01NjcsOCArNTUyLDE1IEBACiAjZGVmaW5lIEFCT1JUX1BPTExJTkdfUEVSSU9ECTEwMDAKICNkZWZpbmUgQUJPUlRfV0FJVF9JVEVSCQkoKDEwICogMTAwMCkgLyAoQUJPUlRfUE9MTElOR19QRVJJT0QpKQogCXVuc2lnbmVkIGxvbmcgd2FpdF9pdGVyID0gQUJPUlRfV0FJVF9JVEVSOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJaW50IHJldCA9IFFMQV9TVUNDRVNTOwogCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKSB8fCBoYS0+ZmxhZ3MuZWVoX2J1c3kpIHsKKwkJREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJyZXR1cm46ZWhfd2FpdFxuIikpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXdoaWxlIChDTURfU1AoY21kKSAmJiB3YWl0X2l0ZXItLSkgewogCQltc2xlZXAoQUJPUlRfUE9MTElOR19QRVJJT0QpOwogCX0KQEAgLTEyMTcsMTMgKzEyMDksNjEgQEAKIAlzZGV2LT5ob3N0ZGF0YSA9IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHFsYTJ4MDBfaGFuZGxlX3F1ZXVlX2Z1bGwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQoreworCWZjX3BvcnRfdCAqZmNwb3J0ID0gKHN0cnVjdCBmY19wb3J0ICopIHNkZXYtPmhvc3RkYXRhOworCisJaWYgKCFzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwoc2RldiwgcWRlcHRoKSkKKwkJcmV0dXJuOworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBmY3BvcnQtPnZoYS0+aHcsCisJCSJzY3NpKCVsZDolZDolZDolZCk6IFF1ZXVlIGRlcHRoIGFkanVzdGVkLWRvd24gdG8gJWQuXG4iLAorCQlmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1biwKKwkJc2Rldi0+cXVldWVfZGVwdGgpKTsKK30KKworc3RhdGljIHZvaWQgcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfdXAoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQoreworCWZjX3BvcnRfdCAqZmNwb3J0ID0gc2Rldi0+aG9zdGRhdGE7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IGZjcG9ydC0+dmhhOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXN0cnVjdCByZXFfcXVlICpyZXEgPSBOVUxMOworCisJcmVxID0gdmhhLT5yZXE7CisJaWYgKCFyZXEpCisJCXJldHVybjsKKworCWlmIChyZXEtPm1heF9xX2RlcHRoIDw9IHNkZXYtPnF1ZXVlX2RlcHRoIHx8IHJlcS0+bWF4X3FfZGVwdGggPCBxZGVwdGgpCisJCXJldHVybjsKKworCWlmIChzZGV2LT5vcmRlcmVkX3RhZ3MpCisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19PUkRFUkVEX1RBRywgcWRlcHRoKTsKKwllbHNlCisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBxZGVwdGgpOworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkgICAgICAgInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtdXAgdG8gJWQuXG4iLAorCSAgICAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1biwKKwkgICAgICAgc2Rldi0+cXVldWVfZGVwdGgpKTsKK30KKwogc3RhdGljIGludAogcWxhMngwMF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQogewotCWlmIChyZWFzb24gIT0gU0NTSV9RREVQVEhfREVGQVVMVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBTQ1NJX1FERVBUSF9ERUZBVUxUOgorCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBzY3NpX2dldF90YWdfdHlwZShzZGV2KSwgcWRlcHRoKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1NJX1FERVBUSF9RRlVMTDoKKwkJcWxhMngwMF9oYW5kbGVfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpOworCQlicmVhazsKKwljYXNlIFNDU0lfUURFUFRIX1JBTVBfVVA6CisJCXFsYTJ4MDBfYWRqdXN0X3NkZXZfcWRlcHRoX3VwKHNkZXYsIHFkZXB0aCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFT1BOT1RTVVBQOworCX0KIAotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOwogCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKIH0KIApAQCAtMTc3Nyw2ICsxODE3LDEzIEBACiAKIAkvKiBTZXQgSVNQLXR5cGUgaW5mb3JtYXRpb24uICovCiAJcWxhMngwMF9zZXRfaXNwX2ZsYWdzKGhhKTsKKworCS8qIFNldCBFRUggcmVzZXQgdHlwZSB0byBmdW5kYW1lbnRhbCBpZiByZXF1aXJlZCBieSBoYmEgKi8KKwlpZiAoIElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKSB7CisJCXBkZXYtPm5lZWRzX2ZyZXNldCA9IDE7CisJCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCX0KKwogCS8qIENvbmZpZ3VyZSBQQ0kgSS9PIHNwYWNlICovCiAJcmV0ID0gcWxhMngwMF9pb3NwYWNlX2NvbmZpZyhoYSk7CiAJaWYgKHJldCkKQEAgLTIwMDMsMTMgKzIwNTAsMTMgQEAKIAlERUJVRzIocHJpbnRrKCJERUJVRzogZGV0ZWN0IGhiYSAlbGQgYXQgYWRkcmVzcyA9ICVwXG4iLAogCSAgICBiYXNlX3ZoYS0+aG9zdF9ubywgaGEpKTsKIAotCWJhc2VfdmhhLT5mbGFncy5pbml0X2RvbmUgPSAxOwotCWJhc2VfdmhhLT5mbGFncy5vbmxpbmUgPSAxOwotCiAJcmV0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmcGRldi0+ZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIHByb2JlX2ZhaWxlZDsKIAorCWJhc2VfdmhhLT5mbGFncy5pbml0X2RvbmUgPSAxOworCWJhc2VfdmhhLT5mbGFncy5vbmxpbmUgPSAxOworCiAJaGEtPmlzcF9vcHMtPmVuYWJsZV9pbnRycyhoYSk7CiAKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKQEAgLTIxNDEsNiArMjE4OCwyNCBAQAogewogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJcWxhMngwMF9hYm9ydF9hbGxfY21kcyh2aGEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKKworCS8qIERpc2FibGUgdGltZXIgKi8KKwlpZiAodmhhLT50aW1lcl9hY3RpdmUpCisJCXFsYTJ4MDBfc3RvcF90aW1lcih2aGEpOworCisJLyogS2lsbCB0aGUga2VybmVsIHRocmVhZCBmb3IgdGhpcyBob3N0ICovCisJaWYgKGhhLT5kcGNfdGhyZWFkKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IGhhLT5kcGNfdGhyZWFkOworCisJCS8qCisJCSAqIHFsYTJ4eHhfd2FrZV9kcGMgY2hlY2tzIGZvciAtPmRwY190aHJlYWQKKwkJICogc28gd2UgbmVlZCB0byB6ZXJvIGl0IG91dC4KKwkJICovCisJCWhhLT5kcGNfdGhyZWFkID0gTlVMTDsKKwkJa3RocmVhZF9zdG9wKHQpOworCX0KKwogCXFsYTI1eHhfZGVsZXRlX3F1ZXVlcyh2aGEpOwogCiAJaWYgKGhhLT5mbGFncy5mY2VfZW5hYmxlZCkKQEAgLTIxNTIsNiArMjIxNyw4IEBACiAJLyogU3RvcCBjdXJyZW50bHkgZXhlY3V0aW5nIGZpcm13YXJlLiAqLwogCXFsYTJ4MDBfdHJ5X3RvX3N0b3BfZmlybXdhcmUodmhhKTsKIAorCXZoYS0+ZmxhZ3Mub25saW5lID0gMDsKKwogCS8qIHR1cm4tb2ZmIGludGVycnVwdHMgb24gdGhlIGNhcmQgKi8KIAlpZiAoaGEtPmludGVycnVwdHNfb24pCiAJCWhhLT5pc3Bfb3BzLT5kaXNhYmxlX2ludHJzKGhhKTsKQEAgLTI4MjYsNiArMjg5MywxMyBAQAogCQlpZiAoIWJhc2VfdmhhLT5mbGFncy5pbml0X2RvbmUpCiAJCQljb250aW51ZTsKIAorCQlpZiAoaGEtPmZsYWdzLmVlaF9idXN5KSB7CisJCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAicWxhMngwMF9kb19kcGM6IGRwY19mbGFnczogJWx4XG4iLAorCQkJICAgIGJhc2VfdmhhLT5kcGNfZmxhZ3MpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBEUEMgaGFuZGxlclxuIiwgYmFzZV92aGEtPmhvc3Rfbm8pKTsKIAogCQloYS0+ZHBjX2FjdGl2ZSA9IDE7CkBAIC0zMDE2LDggKzMwOTAsMTMgQEAKIAlpbnQJCWluZGV4OwogCXNyYl90CQkqc3A7CiAJaW50CQl0OworCXVpbnQxNl90ICAgICAgICB3OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXN0cnVjdCByZXFfcXVlICpyZXE7CisKKwkvKiBIYXJkd2FyZSByZWFkIHRvIHJhaXNlIHBlbmRpbmcgRUVIIGVycm9ycyBkdXJpbmcgbWFpbGJveCB3YWl0cy4gKi8KKwlpZiAoIXBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKQorCQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1ZFTkRPUl9JRCwgJncpOwogCS8qCiAJICogUG9ydHMgLSBQb3J0IGRvd24gdGltZXIuCiAJICoKQEAgLTMyMTksMTYgKzMyOTgsMjMgQEAKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90CiBxbGEyeHh4X3BjaV9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKLQlzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgImVycm9yX2RldGVjdGVkOnN0YXRlICV4XG4iLAorCSAgICBzdGF0ZSkpOwogCiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgcGNpX2NoYW5uZWxfaW9fbm9ybWFsOgorCQloYS0+ZmxhZ3MuZWVoX2J1c3kgPSAwOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19mcm96ZW46CisJCWhhLT5mbGFncy5lZWhfYnVzeSA9IDE7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmU6Ci0JCXFsYTJ4MDBfYWJvcnRfYWxsX2NtZHMoYmFzZV92aGEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKKwkJaGEtPmZsYWdzLnBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSA9IDE7CisJCXFsYTJ4MDBfYWJvcnRfYWxsX2NtZHModmhhLCBESURfTk9fQ09OTkVDVCA8PCAxNik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKQEAgLTMyNzksNiArMzM2NSw4IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IGJhc2VfdmhhLT5odzsKIAlpbnQgcmM7CiAKKwlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgInNsb3RfcmVzZXRcbiIpKTsKKwogCWlmIChoYS0+bWVtX29ubHkpCiAJCXJjID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWVsc2UKQEAgLTMyODcsMTkgKzMzNzUsMzMgQEAKIAlpZiAocmMpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkgICAgIkNhbid0IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7Ci0KIAkJcmV0dXJuIHJldDsKIAl9Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlpZiAoaGEtPmlzcF9vcHMtPnBjaV9jb25maWcoYmFzZV92aGEpKQogCQlyZXR1cm4gcmV0OwogCisjaWZkZWYgUUxfREVCVUdfTEVWRUxfMTcKKwl7CisJCXVpbnQ4X3QgYjsKKwkJdWludDMyX3QgaTsKKworCQlwcmludGsoInNsb3RfcmVzZXRfMTogIik7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoaGEtPnBkZXYsIGksICZiKTsKKwkJCXByaW50aygiJXMlMDJ4IiwgKGklMTYpID8gIiAiIDogIlxuIiwgYik7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KKyNlbmRpZgogCXNldF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCWlmIChxbGEyeDAwX2Fib3J0X2lzcChiYXNlX3ZoYSkgPT0gUUxBX1NVQ0NFU1MpCiAJCXJldCA9ICBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiAJY2xlYXJfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKIAorCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCSAgICAic2xvdF9yZXNldC1yZXR1cm46cmV0PSV4XG4iLCByZXQpKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMzMTAsMTIgKzM0MTIsMTcgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gYmFzZV92aGEtPmh3OwogCWludCByZXQ7CiAKKwlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgInBjaV9yZXN1bWVcbiIpKTsKKwogCXJldCA9IHFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZShiYXNlX3ZoYSk7CiAJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewogCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKIAkJICAgICJ0aGUgZGV2aWNlIGZhaWxlZCB0byByZXN1bWUgSS9PICIKIAkJICAgICJmcm9tIHNsb3QvbGlua19yZXNldCIpOwogCX0KKworCWhhLT5mbGFncy5lZWhfYnVzeSA9IDA7CisKIAlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKaW5kZXggODA3ZTBkYi4uYTY1ZGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCkBAIC03LDcgKzcsNyBAQAogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDEtazciCisjZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjAxLWs5IgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCBlNDk1ZDM4Li5kODkyNzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtODU5LDYgKzg1OSw3IEBACiAJCQkJY2FzZSAweDA3OiAvKiBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgKi8KIAkJCQljYXNlIDB4MDg6IC8qIExvbmcgd3JpdGUgaW4gcHJvZ3Jlc3MgKi8KIAkJCQljYXNlIDB4MDk6IC8qIHNlbGYgdGVzdCBpbiBwcm9ncmVzcyAqLworCQkJCWNhc2UgMHgxNDogLyogc3BhY2UgYWxsb2NhdGlvbiBpbiBwcm9ncmVzcyAqLwogCQkJCQlhY3Rpb24gPSBBQ1RJT05fREVMQVlFRF9SRVRSWTsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggNjUzMWM5MS4uZGRmY2VjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTY0OSwxMSArNjQ5LDIyIEBACiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IHRyYW5zcG9ydF9jbGFzc19yZWdpc3RlcigmZmNfdnBvcnRfY2xhc3MpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIHVucmVnX2hvc3RfY2xhc3M7CiAJZXJyb3IgPSB0cmFuc3BvcnRfY2xhc3NfcmVnaXN0ZXIoJmZjX3Jwb3J0X2NsYXNzKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlyZXR1cm4gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZmY190cmFuc3BvcnRfY2xhc3MpOworCQlnb3RvIHVucmVnX3Zwb3J0X2NsYXNzOworCWVycm9yID0gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZmY190cmFuc3BvcnRfY2xhc3MpOworCWlmIChlcnJvcikKKwkJZ290byB1bnJlZ19ycG9ydF9jbGFzczsKKwlyZXR1cm4gMDsKKwordW5yZWdfcnBvcnRfY2xhc3M6CisJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJmZjX3Jwb3J0X2NsYXNzKTsKK3VucmVnX3Zwb3J0X2NsYXNzOgorCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZmY192cG9ydF9jbGFzcyk7Cit1bnJlZ19ob3N0X2NsYXNzOgorCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZmY19ob3N0X2NsYXNzKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmY190cmFuc3BvcnRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCA5MDkzYzcyLi4yNTVkYTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMjY0LDYgKzI2NCwxNSBAQAogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJXVcbiIsIHNka3AtPkFUTyk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90CitzZF9zaG93X3RoaW5fcHJvdmlzaW9uaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGRldik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1XG4iLCBzZGtwLT50aGluX3Byb3Zpc2lvbmluZyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBzZF9kaXNrX2F0dHJzW10gPSB7CiAJX19BVFRSKGNhY2hlX3R5cGUsIFNfSVJVR098U19JV1VTUiwgc2Rfc2hvd19jYWNoZV90eXBlLAogCSAgICAgICBzZF9zdG9yZV9jYWNoZV90eXBlKSwKQEAgLTI3NCw2ICsyODMsNyBAQAogCSAgICAgICBzZF9zdG9yZV9tYW5hZ2Vfc3RhcnRfc3RvcCksCiAJX19BVFRSKHByb3RlY3Rpb25fdHlwZSwgU19JUlVHTywgc2Rfc2hvd19wcm90ZWN0aW9uX3R5cGUsIE5VTEwpLAogCV9fQVRUUihhcHBfdGFnX293biwgU19JUlVHTywgc2Rfc2hvd19hcHBfdGFnX293biwgTlVMTCksCisJX19BVFRSKHRoaW5fcHJvdmlzaW9uaW5nLCBTX0lSVUdPLCBzZF9zaG93X3RoaW5fcHJvdmlzaW9uaW5nLCBOVUxMKSwKIAlfX0FUVFJfTlVMTCwKIH07CiAKQEAgLTM5OSw2ICs0MDksNTcgQEAKIH0KIAogLyoqCisgKiBzZF9wcmVwYXJlX2Rpc2NhcmQgLSB1bm1hcCBibG9ja3Mgb24gdGhpbmx5IHByb3Zpc2lvbmVkIGRldmljZQorICogQHJxOiBSZXF1ZXN0IHRvIHByZXBhcmUKKyAqCisgKiBXaWxsIGlzc3VlIGVpdGhlciBVTk1BUCBvciBXUklURSBTQU1FKDE2KSBkZXBlbmRpbmcgb24gcHJlZmVyZW5jZQorICogaW5kaWNhdGVkIGJ5IHRhcmdldCBkZXZpY2UuCisgKiovCitzdGF0aWMgaW50IHNkX3ByZXBhcmVfZGlzY2FyZChzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHNjc2lfZGlzayhycS0+cnFfZGlzayk7CisJc3RydWN0IGJpbyAqYmlvID0gcnEtPmJpbzsKKwlzZWN0b3JfdCBzZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKKwl1bnNpZ25lZCBpbnQgbnVtID0gYmlvX3NlY3RvcnMoYmlvKTsKKworCWlmIChzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplID09IDQwOTYpIHsKKwkJc2VjdG9yID4+PSAzOworCQludW0gPj49IDM7CisJfQorCisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CisJcnEtPnRpbWVvdXQgPSBTRF9USU1FT1VUOworCisJbWVtc2V0KHJxLT5jbWQsIDAsIHJxLT5jbWRfbGVuKTsKKworCWlmIChzZGtwLT51bm1hcCkgeworCQljaGFyICpidWYgPSBrbWFwX2F0b21pYyhiaW9fcGFnZShiaW8pLCBLTV9VU0VSMCk7CisKKwkJcnEtPmNtZFswXSA9IFVOTUFQOworCQlycS0+Y21kWzhdID0gMjQ7CisJCXJxLT5jbWRfbGVuID0gMTA7CisKKwkJLyogRW5zdXJlIHRoYXQgZGF0YSBsZW5ndGggbWF0Y2hlcyBwYXlsb2FkICovCisJCXJxLT5fX2RhdGFfbGVuID0gYmlvLT5iaV9zaXplID0gYmlvLT5iaV9pb192ZWMtPmJ2X2xlbiA9IDI0OworCisJCXB1dF91bmFsaWduZWRfYmUxNig2ICsgMTYsICZidWZbMF0pOworCQlwdXRfdW5hbGlnbmVkX2JlMTYoMTYsICZidWZbMl0pOworCQlwdXRfdW5hbGlnbmVkX2JlNjQoc2VjdG9yLCAmYnVmWzhdKTsKKwkJcHV0X3VuYWxpZ25lZF9iZTMyKG51bSwgJmJ1ZlsxNl0pOworCisJCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9VU0VSMCk7CisJfSBlbHNlIHsKKwkJcnEtPmNtZFswXSA9IFdSSVRFX1NBTUVfMTY7CisJCXJxLT5jbWRbMV0gPSAweDg7IC8qIFVOTUFQICovCisJCXB1dF91bmFsaWduZWRfYmU2NChzZWN0b3IsICZycS0+Y21kWzJdKTsKKwkJcHV0X3VuYWxpZ25lZF9iZTMyKG51bSwgJnJxLT5jbWRbMTBdKTsKKwkJcnEtPmNtZF9sZW4gPSAxNjsKKwl9CisKKwlyZXR1cm4gQkxLUFJFUF9PSzsKK30KKworLyoqCiAgKglzZF9pbml0X2NvbW1hbmQgLSBidWlsZCBhIHNjc2kgKHJlYWQgb3Igd3JpdGUpIGNvbW1hbmQgZnJvbQogICoJaW5mb3JtYXRpb24gaW4gdGhlIHJlcXVlc3Qgc3RydWN0dXJlLgogICoJQFNDcG50OiBwb2ludGVyIHRvIG1pZC1sZXZlbCdzIHBlciBzY3NpIGNvbW1hbmQgc3RydWN0dXJlIHRoYXQKQEAgLTQxOCw2ICs0NzksMTMgQEAKIAlpbnQgcmV0LCBob3N0X2RpZjsKIAl1bnNpZ25lZCBjaGFyIHByb3RlY3Q7CiAKKwkvKgorCSAqIERpc2NhcmQgcmVxdWVzdCBjb21lIGluIGFzIFJFUV9UWVBFX0ZTIGJ1dCB3ZSB0dXJuIHRoZW0gaW50bworCSAqIGJsb2NrIFBDIHJlcXVlc3RzIHRvIG1ha2UgbGlmZSBlYXNpZXIuCisJICovCisJaWYgKGJsa19kaXNjYXJkX3JxKHJxKSkKKwkJcmV0ID0gc2RfcHJlcGFyZV9kaXNjYXJkKHJxKTsKKwogCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKIAkJcmV0ID0gc2NzaV9zZXR1cF9ibGtfcGNfY21uZChzZHAsIHJxKTsKIAkJZ290byBvdXQ7CkBAIC0xNDMyLDYgKzE1MDAsMTkgQEAKIAkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAogCQkJICAicGh5c2ljYWwgYmxvY2sgYWxpZ25tZW50IG9mZnNldDogJXVcbiIsIGFsaWdubWVudCk7CiAKKwlpZiAoYnVmZmVyWzE0XSAmIDB4ODApIHsgLyogVFBFICovCisJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gc2RwLT5yZXF1ZXN0X3F1ZXVlOworCisJCXNka3AtPnRoaW5fcHJvdmlzaW9uaW5nID0gMTsKKwkJcS0+bGltaXRzLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSBzZGtwLT5od19zZWN0b3Jfc2l6ZTsKKwkJcS0+bGltaXRzLm1heF9kaXNjYXJkX3NlY3RvcnMgPSAweGZmZmZmZmZmOworCisJCWlmIChidWZmZXJbMTRdICYgMHg0MCkgLyogVFBSWiAqLworCQkJcS0+bGltaXRzLmRpc2NhcmRfemVyb2VzX2RhdGEgPSAxOworCisJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfRElTQ0FSRCwgcSk7CisJfQorCiAJc2RrcC0+Y2FwYWNpdHkgPSBsYmEgKyAxOwogCXJldHVybiBzZWN0b3Jfc2l6ZTsKIH0KQEAgLTE4NjMsNiArMTk0NCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNkX3JlYWRfYmxvY2tfbGltaXRzKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3ApCiB7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGtwLT5kaXNrLT5xdWV1ZTsKIAl1bnNpZ25lZCBpbnQgc2VjdG9yX3N6ID0gc2RrcC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKIAljaGFyICpidWZmZXI7CiAKQEAgLTE4NzcsNiArMTk1OSwzMSBAQAogCWJsa19xdWV1ZV9pb19vcHQoc2RrcC0+ZGlzay0+cXVldWUsCiAJCQkgZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMTJdKSAqIHNlY3Rvcl9zeik7CiAKKwkvKiBUaGluIHByb3Zpc2lvbmluZyBlbmFibGVkIGFuZCBwYWdlIGxlbmd0aCBpbmRpY2F0ZXMgVFAgc3VwcG9ydCAqLworCWlmIChzZGtwLT50aGluX3Byb3Zpc2lvbmluZyAmJiBidWZmZXJbM10gPT0gMHgzYykgeworCQl1bnNpZ25lZCBpbnQgbGJhX2NvdW50LCBkZXNjX2NvdW50LCBncmFudWxhcml0eTsKKworCQlsYmFfY291bnQgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmJ1ZmZlclsyMF0pOworCQlkZXNjX2NvdW50ID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMjRdKTsKKworCQlpZiAobGJhX2NvdW50KSB7CisJCQlxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycyA9CisJCQkJbGJhX2NvdW50ICogc2VjdG9yX3N6ID4+IDk7CisKKwkJCWlmIChkZXNjX2NvdW50KQorCQkJCXNka3AtPnVubWFwID0gMTsKKwkJfQorCisJCWdyYW51bGFyaXR5ID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMjhdKTsKKworCQlpZiAoZ3JhbnVsYXJpdHkpCisJCQlxLT5saW1pdHMuZGlzY2FyZF9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5ICogc2VjdG9yX3N6OworCisJCWlmIChidWZmZXJbMzJdICYgMHg4MCkKKwkJCXEtPmxpbWl0cy5kaXNjYXJkX2FsaWdubWVudCA9CisJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMzJdKSAmIH4oMSA8PCAzMSk7CisJfQorCiAJa2ZyZWUoYnVmZmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmggYi9kcml2ZXJzL3Njc2kvc2QuaAppbmRleCBlMzc0ODA0Li40M2QzY2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtNjAsNiArNjAsOCBAQAogCXVuc2lnbmVkCVJDRCA6IDE7CS8qIHN0YXRlIG9mIGRpc2sgUkNEIGJpdCwgdW51c2VkICovCiAJdW5zaWduZWQJRFBPRlVBIDogMTsJLyogc3RhdGUgb2YgZGlzayBEUE9GVUEgYml0ICovCiAJdW5zaWduZWQJZmlyc3Rfc2NhbiA6IDE7CisJdW5zaWduZWQJdGhpbl9wcm92aXNpb25pbmcgOiAxOworCXVuc2lnbmVkCXVubWFwIDogMTsKIH07CiAjZGVmaW5lIHRvX3Njc2lfZGlzayhvYmopIGNvbnRhaW5lcl9vZihvYmosc3RydWN0IHNjc2lfZGlzayxkZXYpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggYWQ1OWFiYi4uZDA0ZWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTU1MiwxMyArNTUyLDE1IEBACiAJU1JwbnQtPndhaXRpbmcgPSB3YWl0aW5nOwogCiAJaWYgKFNUcC0+YnVmZmVyLT5kb19kaW8pIHsKKwkJbWRhdGEtPnBhZ2Vfb3JkZXIgPSAwOwogCQltZGF0YS0+bnJfZW50cmllcyA9IFNUcC0+YnVmZmVyLT5zZ19zZWdzOwogCQltZGF0YS0+cGFnZXMgPSBTVHAtPmJ1ZmZlci0+bWFwcGVkX3BhZ2VzOwogCX0gZWxzZSB7CisJCW1kYXRhLT5wYWdlX29yZGVyID0gU1RwLT5idWZmZXItPnJlc2VydmVkX3BhZ2Vfb3JkZXI7CiAJCW1kYXRhLT5ucl9lbnRyaWVzID0KIAkJCURJVl9ST1VORF9VUChieXRlcywgUEFHRV9TSVpFIDw8IG1kYXRhLT5wYWdlX29yZGVyKTsKLQkJU1RwLT5idWZmZXItPm1hcF9kYXRhLnBhZ2VzID0gU1RwLT5idWZmZXItPnJlc2VydmVkX3BhZ2VzOwotCQlTVHAtPmJ1ZmZlci0+bWFwX2RhdGEub2Zmc2V0ID0gMDsKKwkJbWRhdGEtPnBhZ2VzID0gU1RwLT5idWZmZXItPnJlc2VydmVkX3BhZ2VzOworCQltZGF0YS0+b2Zmc2V0ID0gMDsKIAl9CiAKIAltZW1jcHkoU1JwbnQtPmNtZCwgY21kLCBzaXplb2YoU1JwbnQtPmNtZCkpOwpAQCAtMzcxOSw3ICszNzIxLDcgQEAKIAkJcHJpb3JpdHkgfD0gX19HRlBfWkVSTzsKIAogCWlmIChTVGJ1ZmZlci0+ZnJwX3NlZ3MpIHsKLQkJb3JkZXIgPSBTVGJ1ZmZlci0+bWFwX2RhdGEucGFnZV9vcmRlcjsKKwkJb3JkZXIgPSBTVGJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZV9vcmRlcjsKIAkJYl9zaXplID0gUEFHRV9TSVpFIDw8IG9yZGVyOwogCX0gZWxzZSB7CiAJCWZvciAoYl9zaXplID0gUEFHRV9TSVpFLCBvcmRlciA9IDA7CkBAIC0zNzUyLDcgKzM3NTQsNyBAQAogCQlzZWdzKys7CiAJfQogCVNUYnVmZmVyLT5iX2RhdGEgPSBwYWdlX2FkZHJlc3MoU1RidWZmZXItPnJlc2VydmVkX3BhZ2VzWzBdKTsKLQlTVGJ1ZmZlci0+bWFwX2RhdGEucGFnZV9vcmRlciA9IG9yZGVyOworCVNUYnVmZmVyLT5yZXNlcnZlZF9wYWdlX29yZGVyID0gb3JkZXI7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTM3NjUsNyArMzc2Nyw3IEBACiAKIAlmb3IgKGk9MDsgaSA8IHN0X2JwLT5mcnBfc2VnczsgaSsrKQogCQltZW1zZXQocGFnZV9hZGRyZXNzKHN0X2JwLT5yZXNlcnZlZF9wYWdlc1tpXSksIDAsCi0JCSAgICAgICBQQUdFX1NJWkUgPDwgc3RfYnAtPm1hcF9kYXRhLnBhZ2Vfb3JkZXIpOworCQkgICAgICAgUEFHRV9TSVpFIDw8IHN0X2JwLT5yZXNlcnZlZF9wYWdlX29yZGVyKTsKIAlzdF9icC0+Y2xlYXJlZCA9IDE7CiB9CiAKQEAgLTM3NzMsNyArMzc3NSw3IEBACiAvKiBSZWxlYXNlIHRoZSBleHRyYSBidWZmZXIgKi8KIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZV9idWZmZXIoc3RydWN0IHN0X2J1ZmZlciAqIFNUYnVmZmVyKQogewotCWludCBpLCBvcmRlciA9IFNUYnVmZmVyLT5tYXBfZGF0YS5wYWdlX29yZGVyOworCWludCBpLCBvcmRlciA9IFNUYnVmZmVyLT5yZXNlcnZlZF9wYWdlX29yZGVyOwogCiAJZm9yIChpID0gMDsgaSA8IFNUYnVmZmVyLT5mcnBfc2VnczsgaSsrKSB7CiAJCV9fZnJlZV9wYWdlcyhTVGJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZXNbaV0sIG9yZGVyKTsKQEAgLTM3ODEsNyArMzc4Myw3IEBACiAJfQogCVNUYnVmZmVyLT5mcnBfc2VncyA9IDA7CiAJU1RidWZmZXItPnNnX3NlZ3MgPSAwOwotCVNUYnVmZmVyLT5tYXBfZGF0YS5wYWdlX29yZGVyID0gMDsKKwlTVGJ1ZmZlci0+cmVzZXJ2ZWRfcGFnZV9vcmRlciA9IDA7CiAJU1RidWZmZXItPm1hcF9kYXRhLm9mZnNldCA9IDA7CiB9CiAKQEAgLTM3OTEsNyArMzc5Myw3IEBACiBzdGF0aWMgaW50IGFwcGVuZF90b19idWZmZXIoY29uc3QgY2hhciBfX3VzZXIgKnVicCwgc3RydWN0IHN0X2J1ZmZlciAqIHN0X2JwLCBpbnQgZG9fY291bnQpCiB7CiAJaW50IGksIGNudCwgcmVzLCBvZmZzZXQ7Ci0JaW50IGxlbmd0aCA9IFBBR0VfU0laRSA8PCBzdF9icC0+bWFwX2RhdGEucGFnZV9vcmRlcjsKKwlpbnQgbGVuZ3RoID0gUEFHRV9TSVpFIDw8IHN0X2JwLT5yZXNlcnZlZF9wYWdlX29yZGVyOwogCiAJZm9yIChpID0gMCwgb2Zmc2V0ID0gc3RfYnAtPmJ1ZmZlcl9ieXRlczsKIAkgICAgIGkgPCBzdF9icC0+ZnJwX3NlZ3MgJiYgb2Zmc2V0ID49IGxlbmd0aDsgaSsrKQpAQCAtMzgyMyw3ICszODI1LDcgQEAKIHN0YXRpYyBpbnQgZnJvbV9idWZmZXIoc3RydWN0IHN0X2J1ZmZlciAqIHN0X2JwLCBjaGFyIF9fdXNlciAqdWJwLCBpbnQgZG9fY291bnQpCiB7CiAJaW50IGksIGNudCwgcmVzLCBvZmZzZXQ7Ci0JaW50IGxlbmd0aCA9IFBBR0VfU0laRSA8PCBzdF9icC0+bWFwX2RhdGEucGFnZV9vcmRlcjsKKwlpbnQgbGVuZ3RoID0gUEFHRV9TSVpFIDw8IHN0X2JwLT5yZXNlcnZlZF9wYWdlX29yZGVyOwogCiAJZm9yIChpID0gMCwgb2Zmc2V0ID0gc3RfYnAtPnJlYWRfcG9pbnRlcjsKIAkgICAgIGkgPCBzdF9icC0+ZnJwX3NlZ3MgJiYgb2Zmc2V0ID49IGxlbmd0aDsgaSsrKQpAQCAtMzg1Niw3ICszODU4LDcgQEAKIHsKIAlpbnQgc3JjX3NlZywgZHN0X3NlZywgc3JjX29mZnNldCA9IDAsIGRzdF9vZmZzZXQ7CiAJaW50IGNvdW50LCB0b3RhbDsKLQlpbnQgbGVuZ3RoID0gUEFHRV9TSVpFIDw8IHN0X2JwLT5tYXBfZGF0YS5wYWdlX29yZGVyOworCWludCBsZW5ndGggPSBQQUdFX1NJWkUgPDwgc3RfYnAtPnJlc2VydmVkX3BhZ2Vfb3JkZXI7CiAKIAlpZiAob2Zmc2V0ID09IDApCiAJCXJldHVybjsKQEAgLTQ1NzgsNyArNDU4MCw2IEBACiAgICAgICAgIH0KIAogCW1kYXRhLT5vZmZzZXQgPSB1YWRkciAmIH5QQUdFX01BU0s7Ci0JbWRhdGEtPnBhZ2Vfb3JkZXIgPSAwOwogCVNUYnAtPm1hcHBlZF9wYWdlcyA9IHBhZ2VzOwogCiAJcmV0dXJuIG5yX3BhZ2VzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmggYi9kcml2ZXJzL3Njc2kvc3QuaAppbmRleCA1NDRkYzZiLi5mOTFhNjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuaAorKysgYi9kcml2ZXJzL3Njc2kvc3QuaApAQCAtNDYsNiArNDYsNyBAQAogCXN0cnVjdCBzdF9yZXF1ZXN0ICpsYXN0X1NScG50OwogCXN0cnVjdCBzdF9jbWRzdGF0dXMgY21kc3RhdDsKIAlzdHJ1Y3QgcGFnZSAqKnJlc2VydmVkX3BhZ2VzOworCWludCByZXNlcnZlZF9wYWdlX29yZGVyOwogCXN0cnVjdCBwYWdlICoqbWFwcGVkX3BhZ2VzOwogCXN0cnVjdCBycV9tYXBfZGF0YSBtYXBfZGF0YTsKIAl1bnNpZ25lZCBjaGFyICpiX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3RleC5jIGIvZHJpdmVycy9zY3NpL3N0ZXguYwppbmRleCAzMDU4YmIxLi5mZDdiMTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3RleC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKQEAgLTYyMyw2ICs2MjMsMTEgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIElOUVVJUlk6CisJCWlmIChsdW4gPj0gaG9zdC0+bWF4X2x1bikgeworCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJCWRvbmUoY21kKTsKKwkJCXJldHVybiAwOworCQl9CiAJCWlmIChpZCAhPSBob3N0LT5tYXhfaWQgLSAxKQogCQkJYnJlYWs7CiAJCWlmICghbHVuICYmICFjbWQtPmRldmljZS0+Y2hhbm5lbCAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggMWUzZDE5My4uODY4MWYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC01OCw3ICs1OCw3IEBACiBzdGF0aWMgdm9pZCBzZXJpYWwyMTI4NV9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHR4X2VuYWJsZWQocG9ydCkpIHsKLQkJZGlzYWJsZV9pcnEoSVJRX0NPTlRYKTsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKElSUV9DT05UWCk7CiAJCXR4X2VuYWJsZWQocG9ydCkgPSAwOwogCX0KIH0KQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyB2b2lkIHNlcmlhbDIxMjg1X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocnhfZW5hYmxlZChwb3J0KSkgewotCQlkaXNhYmxlX2lycShJUlFfQ09OUlgpOworCQlkaXNhYmxlX2lycV9ub3N5bmMoSVJRX0NPTlJYKTsKIAkJcnhfZW5hYmxlZChwb3J0KSA9IDA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCBmYzQxM2YwLi4wZWU3MjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtODE5LDYgKzgxOSw3IEBACiAJUENNQ0lBX01GQ19ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgxLCAweDAxMDEsIDB4MDAzNSwgImNpcy8zQ1hFTTU1Ni5jaXMiKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9DSVNfTUFORl9DQVJEKDEsIDB4MDEwMSwgMHgwMDNkLCAiY2lzLzNDWEVNNTU2LmNpcyIpLAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiU2llcnJhIFdpcmVsZXNzIiwgIkFDODUwIiwgMHhkODVmNjIwNiwgMHg0MmEyYzAxOCwgImNpcy9TV184eHhfU0VSLmNpcyIpLCAvKiBTaWVycmEgV2lyZWxlc3MgQUM4NTAgM0cgTmV0d29yayBBZGFwdGVyIFIxICovCisJUENNQ0lBX0RFVklDRV9DSVNfUFJPRF9JRDEyKCJTaWVycmEgV2lyZWxlc3MiLCAiQUM4NjAiLCAweGQ4NWY2MjA2LCAweDY5OGY5M2RiLCAiY2lzL1NXXzh4eF9TRVIuY2lzIiksIC8qIFNpZXJyYSBXaXJlbGVzcyBBQzg2MCAzRyBOZXR3b3JrIEFkYXB0ZXIgUjEgKi8KIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIoIlNpZXJyYSBXaXJlbGVzcyIsICJBQzcxMC9BQzc1MCIsIDB4ZDg1ZjYyMDYsIDB4NzYxYjExZTAsICJjaXMvU1dfN3h4X1NFUi5jaXMiKSwgIC8qIFNpZXJyYSBXaXJlbGVzcyBBQzcxMC9BQzc1MCBHUFJTIE5ldHdvcmsgQWRhcHRlciBSMSAqLwogCVBDTUNJQV9ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgweDAxOTIsIDB4YTU1NSwgImNpcy9TV181NTVfU0VSLmNpcyIpLCAgLyogU2llcnJhIEFpcmNhcmQgNTU1IENETUEgMXhydHQgTW9kZW0gLS0gcHJlIHVwZGF0ZSAqLwogCVBDTUNJQV9ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgweDAxM2YsIDB4YTU1NSwgImNpcy9TV181NTVfU0VSLmNpcyIpLCAgLyogU2llcnJhIEFpcmNhcmQgNTU1IENETUEgMXhydHQgTW9kZW0gLS0gcG9zdCB1cGRhdGUgKi8KQEAgLTgyNyw3ICs4MjgsNyBAQAogCVBDTUNJQV9ERVZJQ0VfQ0lTX1BST0RfSUQxMigiQURWQU5URUNIIiwgIkNPTXBhZC0zMi84NUItNCIsIDB4OTY5MTNhODUsIDB4Y2VjOGYxMDIsICJjaXMvQ09NcGFkNC5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMTIzKCJBRFZBTlRFQ0giLCAiQ09NcGFkLTMyLzg1IiwgIjEuMCIsIDB4OTY5MTNhODUsIDB4OGZiZTkyYWUsIDB4MDg3N2I2MjcsICJjaXMvQ09NcGFkMi5jaXMiKSwKIAlQQ01DSUFfREVWSUNFX0NJU19QUk9EX0lEMigiUlMtQ09NIDJQIiwgMHhhZDIwYjE1NiwgImNpcy9SUy1DT00tMlAuY2lzIiksCi0JUENNQ0lBX0RFVklDRV9DSVNfTUFORl9DQVJEKDB4MDAxMywgMHgwMDAwLCAiR0xPQkVUUk9UVEVSLmNpcyIpLAorCVBDTUNJQV9ERVZJQ0VfQ0lTX01BTkZfQ0FSRCgweDAwMTMsIDB4MDAwMCwgImNpcy9HTE9CRVRST1RURVIuY2lzIiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkVMQU4gRElHSVRBTCBTWVNURU1TIExURCwgYzE5OTcuIiwiU0VSSUFMIENBUkQ6IFNMMTAwICAxLjAwLiIsMHgxOWNhNzhhZiwweGY5NjRmNDJiKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRUxBTiBESUdJVEFMIFNZU1RFTVMgTFRELCBjMTk5Ny4iLCJTRVJJQUwgQ0FSRDogU0wxMDAiLDB4MTljYTc4YWYsMHg3MWQ5OGU4MyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkVMQU4gRElHSVRBTCBTWVNURU1TIExURCwgYzE5OTcuIiwiU0VSSUFMIENBUkQ6IFNMMjMyICAxLjAwLiIsMHgxOWNhNzhhZiwweDY5ZmI3NDkwKSwKQEAgLTg2MSw2ICs4NjIsMTggQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgc2VyaWFsX2lkcyk7CiAKK01PRFVMRV9GSVJNV0FSRSgiY2lzL1BDTUxNMjguY2lzIik7CitNT0RVTEVfRklSTVdBUkUoImNpcy9EUDgzOTAzLmNpcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJjaXMvM0NDRkVNNTU2LmNpcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJjaXMvM0NYRU01NTYuY2lzIik7CitNT0RVTEVfRklSTVdBUkUoImNpcy9TV184eHhfU0VSLmNpcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJjaXMvU1dfN3h4X1NFUi5jaXMiKTsKK01PRFVMRV9GSVJNV0FSRSgiY2lzL1NXXzU1NV9TRVIuY2lzIik7CitNT0RVTEVfRklSTVdBUkUoImNpcy9NVDU2MzRaTFguY2lzIik7CitNT0RVTEVfRklSTVdBUkUoImNpcy9DT01wYWQyLmNpcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJjaXMvQ09NcGFkNC5jaXMiKTsKK01PRFVMRV9GSVJNV0FSRSgiY2lzL1JTLUNPTS0yUC5jaXMiKTsKKwogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIHNlcmlhbF9jc19kcml2ZXIgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5kcnYJCT0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA2OGM3ZjZjLi4zN2YwZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMjIyLDkgKzIyMiw5IEBACiAJCSAgIFNldCBTQ1A2TUQxLDAgPSB7MDF9IChvdXRwdXQpICAqLwogCQlfX3Jhd193cml0ZXcoKGRhdGEgJiAweDBmY2YpIHwgMHgxMDAwLCBTQ1BDUik7CiAKLQkJZGF0YSA9IGN0cmxfaW5iKFNDUERSKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRiKFNDUERSKTsKIAkJLyogU2V0IC9SVFMyIChiaXQ2KSA9IDAgKi8KLQkJY3RybF9vdXRiKGRhdGEgJiAweGJmLCBTQ1BEUik7CisJCV9fcmF3X3dyaXRlYihkYXRhICYgMHhiZiwgU0NQRFIpOwogCX0KIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKQEAgLTg5NywxMSArODk3LDIxIEBACiBzdGF0aWMgdm9pZCBzY2lfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkJICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXVuc2lnbmVkIGludCBzdGF0dXMsIGJhdWQsIHNtcl92YWw7CisJdW5zaWduZWQgaW50IHN0YXR1cywgYmF1ZCwgc21yX3ZhbCwgbWF4X2JhdWQ7CiAJaW50IHQgPSAtMTsKIAotCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKLQlpZiAobGlrZWx5KGJhdWQpKQorCS8qCisJICogZWFybHlwcmludGsgY29tZXMgaGVyZSBlYXJseSBvbiB3aXRoIHBvcnQtPnVhcnRjbGsgc2V0IHRvIHplcm8uCisJICogdGhlIGNsb2NrIGZyYW1ld29yayBpcyBub3QgdXAgYW5kIHJ1bm5pbmcgYXQgdGhpcyBwb2ludCBzbyBoZXJlCisJICogd2UgYXNzdW1lIHRoYXQgMTE1MjAwIGlzIHRoZSBtYXhpbXVtIGJhdWQgcmF0ZS4gcGxlYXNlIG5vdGUgdGhhdAorCSAqIHRoZSBiYXVkIHJhdGUgaXMgbm90IHByb2dyYW1tZWQgZHVyaW5nIGVhcmx5cHJpbnRrIC0gaXQgaXMgYXNzdW1lZAorCSAqIHRoYXQgdGhlIHByZXZpb3VzIGJvb3QgbG9hZGVyIGhhcyBlbmFibGVkIHJlcXVpcmVkIGNsb2NrcyBhbmQKKwkgKiBzZXR1cCB0aGUgYmF1ZCByYXRlIGdlbmVyYXRvciBoYXJkd2FyZSBmb3IgdXMgYWxyZWFkeS4KKwkgKi8KKwltYXhfYmF1ZCA9IHBvcnQtPnVhcnRjbGsgPyBwb3J0LT51YXJ0Y2xrIC8gMTYgOiAxMTUyMDA7CisKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgbWF4X2JhdWQpOworCWlmIChsaWtlbHkoYmF1ZCAmJiBwb3J0LT51YXJ0Y2xrKSkKIAkJdCA9IFNDQlJSX1ZBTFVFKGJhdWQsIHBvcnQtPnVhcnRjbGspOwogCiAJZG8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCBhMzIwOTRlZS4uMGVmY2RlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTUxNywyMCArNTE3LDIwIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZmZmU4MCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDAwMDE1MCkKLQkJcmV0dXJuIGN0cmxfaW5iKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTQwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYwKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYyKQotCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCkBAIC01NTcsNjggKzU1Nyw2OCBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2luYihTQ1NQVFIxKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTgwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRjMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU0ZDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTMwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2luYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCisJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBTRFIpICYgMHgwMiA/IDEgOiAwOyAvKiBTQ0lGMCAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUFNEUikgJiAweDAyID8gMSA6IDA7IC8qIFNDSUYwICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBBRFIpICYgMHg0MCA/IDEgOiAwOyAvKiBTQ0lGMSAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUEFEUikgJiAweDQwID8gMSA6IDA7IC8qIFNDSUYxICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW5iKFBXRFIpICYgMHgwNCA/IDEgOiAwOyAvKiBTQ0lGMiAqLworCQlyZXR1cm4gX19yYXdfcmVhZGIoUFdEUikgJiAweDA0ID8gMSA6IDA7IC8qIFNDSUYyICovCiAKIAlyZXR1cm4gMTsKIH0KQEAgLTYyNiwxNyArNjI2LDE3IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMjAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlMzAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCiAgICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCiAgICAgICAgIHJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQpAQCAtNjQ1LDkgKzY0NSw5IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKQotCQlyZXR1cm4gY3RybF9pbncoKHBvcnQtPm1hcGJhc2UgKyBTQ0ZTUikpICAmIFNDSUZfQlJLID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDRlNSKSkgICYgU0NJRl9CUksgPyAxIDogMDsKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQotCQlyZXR1cm4gY3RybF9pbncoKHBvcnQtPm1hcGJhc2UgKyBTQ0FTU1IpKSAmIFNDSUZfQlJLID8gMSA6IDA7CisJCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDQVNTUikpICYgU0NJRl9CUksgPyAxIDogMDsKIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCkBAIC02NjUsMTEgKzY2NSwxMSBAQAogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRi9JUkRBICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGL0lSREEgKi8KIAogCXJldHVybiAxOwogfQpAQCAtNjc3LDIwICs2NzcsMjAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTIzMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjQwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKQEAgLTY5OCwxNyArNjk4LDE3IEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVhMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWIwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYzAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVkMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWUwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZjAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFI1KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpIHx8IFwKQEAgLTcxOCwyMiArNzE4LDIyIEBACiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlODAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU4ODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTkwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlOTgwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQTAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVBODAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUIwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQjgwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KICNlbmRpZgogCXJldHVybiAxOwogfQpAQCAtNzQxLDI0ICs3NDEsMjQgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDAwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQyMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmMzMDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzQwMDAwKQotCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNTAwMDApCi0JCXJldHVybiBjdHJsX2ludyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM2MDAwMCkKLQkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKaW5kZXggMmQ5ZDcwMy4uZjU1ZWIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCkBAIC0yMTYsNiArMjE2LDE3IEBACiAJaGVscAogCSAgU1BJIGRyaXZlciBmb3IgU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBBUk0gU29DcwogCitjb25maWcgU1BJX1MzQzI0WFhfRklRCisJYm9vbCAiUzNDMjRYWCBkcml2ZXIgd2l0aCBGSVEgcHNldWRvLURNQSIKKwlkZXBlbmRzIG9uIFNQSV9TM0MyNFhYCisJc2VsZWN0IEZJUQorCWhlbHAKKwkgIEVuYWJsZSBGSVEgc3VwcG9ydCBmb3IgdGhlIFMzQzI0WFggU1BJIGRyaXZlciB0byBwcm92aWRlIHBzZXVkbworCSAgRE1BIGJ5IHVzaW5nIHRoZSBmYXN0LWludGVycnVwdCByZXF1ZXN0IGZyYW1ld29yaywgVGhpcyBhbGxvd3MKKwkgIHRoZSBkcml2ZXIgdG8gZ2V0IERNQS1saWtlIHBlcmZvcm1hbmNlIHdoZW4gdGhlcmUgYXJlIGVpdGhlcgorCSAgbm8gZnJlZSBETUEgY2hhbm5lbHMsIG9yIHdoZW4gZG9pbmcgdHJhbnNmZXJzIHRoYXQgcmVxdWlyZWQgYm90aAorCSAgVFggYW5kIFJYIGRhdGEgcGF0aHMuCisKIGNvbmZpZyBTUElfUzNDMjRYWF9HUElPCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgU1BJIGJ5IEdQSU8iCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgRVhQRVJJTUVOVEFMCkBAIC0yMjYsNiArMjM3LDEzIEBACiAJICB0aGUgaW5idWlsdCBoYXJkd2FyZSBjYW5ub3QgcHJvdmlkZSB0aGUgdHJhbnNmZXIgbW9kZSwgb3IKIAkgIHdoZXJlIHRoZSBib2FyZCBpcyB1c2luZyBub24gaGFyZHdhcmUgY29ubmVjdGVkIHBpbnMuCiAKK2NvbmZpZyBTUElfUzNDNjRYWAorCXRyaXN0YXRlICJTYW1zdW5nIFMzQzY0WFggc2VyaWVzIHR5cGUgU1BJIgorCWRlcGVuZHMgb24gQVJDSF9TM0M2NFhYICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTM0M2NFhYX0RNQQorCWhlbHAKKwkgIFNQSSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNDNjRYWCBhbmQgbmV3ZXIgU29Dcy4KKwogY29uZmlnIFNQSV9TSF9NU0lPRgogCXRyaXN0YXRlICJTdXBlckggTVNJT0YgU1BJIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBTVVBFUkggJiYgSEFWRV9DTEsKQEAgLTI4OSw2ICszMDcsMTYgQEAKICMgQWRkIG5ldyBTUEkgbWFzdGVyIGNvbnRyb2xsZXJzIGluIGFscGhhYmV0aWNhbCBvcmRlciBhYm92ZSB0aGlzIGxpbmUKICMKIAorY29uZmlnIFNQSV9ERVNJR05XQVJFCisJYm9vbCAiRGVzaWduV2FyZSBTUEkgY29udHJvbGxlciBjb3JlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSCisJaGVscAorCSAgZ2VuZXJhbCBkcml2ZXIgZm9yIFNQSSBjb250cm9sbGVyIGNvcmUgZnJvbSBEZXNpZ25XYXJlCisKK2NvbmZpZyBTUElfRFdfUENJCisJdHJpc3RhdGUgIlBDSSBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgY29yZSIKKwlkZXBlbmRzIG9uIFNQSV9ERVNJR05XQVJFICYmIFBDSQorCiAjCiAjIFRoZXJlIGFyZSBsb3RzIG9mIFNQSSBkZXZpY2UgdHlwZXMsIHdpdGggc2Vuc29ycyBhbmQgbWVtb3J5CiAjIGJlaW5nIHByb2JhYmx5IHRoZSBtb3N0IHdpZGVseSB1c2VkIG9uZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IGVkOGMxNjcuLmYzZDI4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw4IEBACiBvYmotJChDT05GSUdfU1BJX0JJVEJBTkcpCQkrPSBzcGlfYml0YmFuZy5vCiBvYmotJChDT05GSUdfU1BJX0FVMTU1MCkJCSs9IGF1MTU1MF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9CVVRURVJGTFkpCQkrPSBzcGlfYnV0dGVyZmx5Lm8KK29iai0kKENPTkZJR19TUElfREVTSUdOV0FSRSkJCSs9IGR3X3NwaS5vCitvYmotJChDT05GSUdfU1BJX0RXX1BDSSkJCSs9IGR3X3NwaV9wY2kubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KIG9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IHNwaV9pbXgubwogb2JqLSQoQ09ORklHX1NQSV9MTTcwX0xMUCkJCSs9IHNwaV9sbTcwbGxwLm8KQEAgLTMwLDcgKzMyLDggQEAKIG9iai0kKENPTkZJR19TUElfTVBDOHh4eCkJCSs9IHNwaV9tcGM4eHh4Lm8KIG9iai0kKENPTkZJR19TUElfUFBDNHh4KQkJKz0gc3BpX3BwYzR4eC5vCiBvYmotJChDT05GSUdfU1BJX1MzQzI0WFhfR1BJTykJCSs9IHNwaV9zM2MyNHh4X2dwaW8ubwotb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYKQkJKz0gc3BpX3MzYzI0eHgubworb2JqLSQoQ09ORklHX1NQSV9TM0MyNFhYKQkJKz0gc3BpX3MzYzI0eHhfaHcubworb2JqLSQoQ09ORklHX1NQSV9TM0M2NFhYKQkJKz0gc3BpX3MzYzY0eHgubwogb2JqLSQoQ09ORklHX1NQSV9UWFg5KQkJCSs9IHNwaV90eHg5Lm8KIG9iai0kKENPTkZJR19TUElfWElMSU5YKQkJKz0geGlsaW54X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX1hJTElOWF9PRikJCSs9IHhpbGlueF9zcGlfb2YubwpAQCAtMzksNiArNDIsMTEgQEAKIG9iai0kKENPTkZJR19TUElfU0hfTVNJT0YpCQkrPSBzcGlfc2hfbXNpb2Yubwogb2JqLSQoQ09ORklHX1NQSV9TVE1QM1hYWCkJCSs9IHNwaV9zdG1wLm8KIG9iai0kKENPTkZJR19TUElfTlVDOTAwKQkJKz0gc3BpX251YzkwMC5vCisKKyMgc3BlY2lhbCBidWlsZCBmb3IgczNjMjR4eCBzcGkgZHJpdmVyIHdpdGggZmlxIHN1cHBvcnQKK3NwaV9zM2MyNHh4X2h3LXkJCQk6PSBzcGlfczNjMjR4eC5vCitzcGlfczNjMjR4eF9ody0kKENPTkZJR19TUElfUzNDMjRYWF9GSVEpICs9IHNwaV9zM2MyNHh4X2ZpcS5vCisKICMgCS4uLiBhZGQgYWJvdmUgdGhpcyBsaW5lIC4uLgogCiAjIFNQSSBwcm90b2NvbCBkcml2ZXJzIChkZXZpY2UvbGluayBvbiBidXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hdG1lbF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCmluZGV4IGY1YjNmZGIuLmQyMWMyNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jCkBAIC0xODksMTQgKzE4OSwxNCBAQAogCiAJLyogdXNlIHNjcmF0Y2ggYnVmZmVyIG9ubHkgd2hlbiByeCBvciB0eCBkYXRhIGlzIHVuc3BlY2lmaWVkICovCiAJaWYgKHhmZXItPnJ4X2J1ZikKLQkJKnJ4X2RtYSA9IHhmZXItPnJ4X2RtYSArIHhmZXItPmxlbiAtIGxlbjsKKwkJKnJ4X2RtYSA9IHhmZXItPnJ4X2RtYSArIHhmZXItPmxlbiAtICpwbGVuOwogCWVsc2UgewogCQkqcnhfZG1hID0gYXMtPmJ1ZmZlcl9kbWE7CiAJCWlmIChsZW4gPiBCVUZGRVJfU0laRSkKIAkJCWxlbiA9IEJVRkZFUl9TSVpFOwogCX0KIAlpZiAoeGZlci0+dHhfYnVmKQotCQkqdHhfZG1hID0geGZlci0+dHhfZG1hICsgeGZlci0+bGVuIC0gbGVuOworCQkqdHhfZG1hID0geGZlci0+dHhfZG1hICsgeGZlci0+bGVuIC0gKnBsZW47CiAJZWxzZSB7CiAJCSp0eF9kbWEgPSBhcy0+YnVmZmVyX2RtYTsKIAkJaWYgKGxlbiA+IEJVRkZFUl9TSVpFKQpAQCAtNzg4LDcgKzc4OCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmFzLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYXMtPnF1ZXVlKTsKIAlhcy0+cGRldiA9IHBkZXY7Ci0JYXMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCAocmVncy0+ZW5kIC0gcmVncy0+c3RhcnQpICsgMSk7CisJYXMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZ3MpKTsKIAlpZiAoIWFzLT5yZWdzKQogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAlhcy0+aXJxID0gaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpLmMgYi9kcml2ZXJzL3NwaS9kd19zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTYyMGZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKQEAgLTAsMCArMSw5NDQgQEAKKy8qCisgKiBkd19zcGkuYyAtIERlc2lnbndhcmUgU1BJIGNvcmUgY29udHJvbGxlciBkcml2ZXIgKHJlZmVyIHB4YTJ4eF9zcGkuYykKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvZHdfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgU1RBUlRfU1RBVEUJKCh2b2lkICopMCkKKyNkZWZpbmUgUlVOTklOR19TVEFURQkoKHZvaWQgKikxKQorI2RlZmluZSBET05FX1NUQVRFCSgodm9pZCAqKTIpCisjZGVmaW5lIEVSUk9SX1NUQVRFCSgodm9pZCAqKS0xKQorCisjZGVmaW5lIFFVRVVFX1JVTk5JTkcJMAorI2RlZmluZSBRVUVVRV9TVE9QUEVECTEKKworI2RlZmluZSBNUlNUX1NQSV9ERUFTU0VSVAkwCisjZGVmaW5lIE1SU1RfU1BJX0FTU0VSVAkJMQorCisvKiBTbGF2ZSBzcGlfZGV2IHJlbGF0ZWQgKi8KK3N0cnVjdCBjaGlwX2RhdGEgeworCXUxNiBjcjA7CisJdTggY3M7CQkJLyogY2hpcCBzZWxlY3QgcGluICovCisJdTggbl9ieXRlczsJCS8qIGN1cnJlbnQgaXMgYSAxLzIvNCBieXRlIG9wICovCisJdTggdG1vZGU7CQkvKiBUUi9UTy9STy9FRVBST00gKi8KKwl1OCB0eXBlOwkJLyogU1BJL1NTUC9NaWNyb1dpcmUgKi8KKworCXU4IHBvbGxfbW9kZTsJCS8qIDEgbWVhbnMgdXNlIHBvbGwgbW9kZSAqLworCisJdTMyIGRtYV93aWR0aDsKKwl1MzIgcnhfdGhyZXNob2xkOworCXUzMiB0eF90aHJlc2hvbGQ7CisJdTggZW5hYmxlX2RtYTsKKwl1OCBiaXRzX3Blcl93b3JkOworCXUxNiBjbGtfZGl2OwkJLyogYmF1ZCByYXRlIGRpdmlkZXIgKi8KKwl1MzIgc3BlZWRfaHo7CQkvKiBiYXVkIHJhdGUgKi8KKwlpbnQgKCp3cml0ZSkoc3RydWN0IGR3X3NwaSAqZHdzKTsKKwlpbnQgKCpyZWFkKShzdHJ1Y3QgZHdfc3BpICpkd3MpOworCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Cit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW50IHNwaV9zaG93X3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNQSV9SRUdTX0JVRlNJWkUJMTAyNAorc3RhdGljIHNzaXplX3QgIHNwaV9zaG93X3JlZ3Moc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHdfc3BpICpkd3M7CisJY2hhciAqYnVmOworCXUzMiBsZW4gPSAwOworCXNzaXplX3QgcmV0OworCisJZHdzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJYnVmID0ga3phbGxvYyhTUElfUkVHU19CVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIk1SU1QgU1BJMCByZWdpc3RlcnM6XG4iKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJDVFJMMDogXHRcdDB4JTA4eFxuIiwgZHdfcmVhZGwoZHdzLCBjdHJsMCkpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiQ1RSTDE6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgY3RybDEpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIlNTSUVOUjogXHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgc3NpZW5yKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJTRVI6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgc2VyKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJCQVVEUjogXHRcdDB4JTA4eFxuIiwgZHdfcmVhZGwoZHdzLCBiYXVkcikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiVFhGVExSOiBcdDB4JTA4eFxuIiwgZHdfcmVhZGwoZHdzLCB0eGZsdHIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIlJYRlRMUjogXHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgcnhmbHRyKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJUWEZMUjogXHRcdDB4JTA4eFxuIiwgZHdfcmVhZGwoZHdzLCB0eGZscikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiUlhGTFI6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgcnhmbHIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBTUElfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIlNSOiBcdFx0MHglMDh4XG4iLCBkd19yZWFkbChkd3MsIHNyKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJJTVI6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgaW1yKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJJU1I6IFx0XHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgaXNyKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1BJX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJETUFDUjogXHRcdDB4JTA4eFxuIiwgZHdfcmVhZGwoZHdzLCBkbWFjcikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRE1BVERMUjogXHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgZG1hdGRscikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRE1BUkRMUjogXHQweCUwOHhcbiIsIGR3X3JlYWRsKGR3cywgZG1hcmRscikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNQSV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKworCXJldCA9ICBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1yc3Rfc3BpX3JlZ3Nfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzcGlfc2hvd19yZWdzX29wZW4sCisJLnJlYWQJCT0gc3BpX3Nob3dfcmVncywKK307CisKK3N0YXRpYyBpbnQgbXJzdF9zcGlfZGVidWdmc19pbml0KHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlkd3MtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm1yc3Rfc3BpIiwgTlVMTCk7CisJaWYgKCFkd3MtPmRlYnVnZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVnaXN0ZXJzIiwgU19JRlJFRyB8IFNfSVJVR08sCisJCWR3cy0+ZGVidWdmcywgKHZvaWQgKilkd3MsICZtcnN0X3NwaV9yZWdzX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1yc3Rfc3BpX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlpZiAoZHdzLT5kZWJ1Z2ZzKQorCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZHdzLT5kZWJ1Z2ZzKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG1yc3Rfc3BpX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHdfc3BpICpkd3MpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcnN0X3NwaV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCisKK3N0YXRpYyB2b2lkIHdhaXRfdGlsbF9ub3RfYnVzeShzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygxMDAwKTsKKworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKSB7CisJCWlmICghKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfQlVTWSkpCisJCQlyZXR1cm47CisJfQorCWRldl9lcnIoJmR3cy0+bWFzdGVyLT5kZXYsCisJCSJEVyBTUEk6IFN0dXR1cyBrZWVwcyBidXN5IGZvciAxMDAwdXMgYWZ0ZXIgYSByZWFkL3dyaXRlIVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl3aGlsZSAoZHdfcmVhZHcoZHdzLCBzcikgJiBTUl9SRl9OT1RfRU1QVCkKKwkJZHdfcmVhZHcoZHdzLCBkcik7CisKKwl3YWl0X3RpbGxfbm90X2J1c3koZHdzKTsKK30KKworc3RhdGljIHZvaWQgbnVsbF9jc19jb250cm9sKHUzMiBjb21tYW5kKQoreworfQorCitzdGF0aWMgaW50IG51bGxfd3JpdGVyKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl1OCBuX2J5dGVzID0gZHdzLT5uX2J5dGVzOworCisJaWYgKCEoZHdfcmVhZHcoZHdzLCBzcikgJiBTUl9URl9OT1RfRlVMTCkKKwkJfHwgKGR3cy0+dHggPT0gZHdzLT50eF9lbmQpKQorCQlyZXR1cm4gMDsKKwlkd193cml0ZXcoZHdzLCBkciwgMCk7CisJZHdzLT50eCArPSBuX2J5dGVzOworCisJd2FpdF90aWxsX25vdF9idXN5KGR3cyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbnVsbF9yZWFkZXIoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXU4IG5fYnl0ZXMgPSBkd3MtPm5fYnl0ZXM7CisKKwl3aGlsZSAoKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfUkZfTk9UX0VNUFQpCisJCSYmIChkd3MtPnJ4IDwgZHdzLT5yeF9lbmQpKSB7CisJCWR3X3JlYWR3KGR3cywgZHIpOworCQlkd3MtPnJ4ICs9IG5fYnl0ZXM7CisJfQorCXdhaXRfdGlsbF9ub3RfYnVzeShkd3MpOworCXJldHVybiBkd3MtPnJ4ID09IGR3cy0+cnhfZW5kOworfQorCitzdGF0aWMgaW50IHU4X3dyaXRlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJaWYgKCEoZHdfcmVhZHcoZHdzLCBzcikgJiBTUl9URl9OT1RfRlVMTCkKKwkJfHwgKGR3cy0+dHggPT0gZHdzLT50eF9lbmQpKQorCQlyZXR1cm4gMDsKKworCWR3X3dyaXRldyhkd3MsIGRyLCAqKHU4ICopKGR3cy0+dHgpKTsKKwkrK2R3cy0+dHg7CisKKwl3YWl0X3RpbGxfbm90X2J1c3koZHdzKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1OF9yZWFkZXIoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXdoaWxlICgoZHdfcmVhZHcoZHdzLCBzcikgJiBTUl9SRl9OT1RfRU1QVCkKKwkJJiYgKGR3cy0+cnggPCBkd3MtPnJ4X2VuZCkpIHsKKwkJKih1OCAqKShkd3MtPnJ4KSA9IGR3X3JlYWR3KGR3cywgZHIpOworCQkrK2R3cy0+cng7CisJfQorCisJd2FpdF90aWxsX25vdF9idXN5KGR3cyk7CisJcmV0dXJuIGR3cy0+cnggPT0gZHdzLT5yeF9lbmQ7Cit9CisKK3N0YXRpYyBpbnQgdTE2X3dyaXRlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJaWYgKCEoZHdfcmVhZHcoZHdzLCBzcikgJiBTUl9URl9OT1RfRlVMTCkKKwkJfHwgKGR3cy0+dHggPT0gZHdzLT50eF9lbmQpKQorCQlyZXR1cm4gMDsKKworCWR3X3dyaXRldyhkd3MsIGRyLCAqKHUxNiAqKShkd3MtPnR4KSk7CisJZHdzLT50eCArPSAyOworCisJd2FpdF90aWxsX25vdF9idXN5KGR3cyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdTE2X3JlYWRlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJdTE2IHRlbXA7CisKKwl3aGlsZSAoKGR3X3JlYWR3KGR3cywgc3IpICYgU1JfUkZfTk9UX0VNUFQpCisJCSYmIChkd3MtPnJ4IDwgZHdzLT5yeF9lbmQpKSB7CisJCXRlbXAgPSBkd19yZWFkdyhkd3MsIGRyKTsKKwkJKih1MTYgKikoZHdzLT5yeCkgPSB0ZW1wOworCQlkd3MtPnJ4ICs9IDI7CisJfQorCisJd2FpdF90aWxsX25vdF9idXN5KGR3cyk7CisJcmV0dXJuIGR3cy0+cnggPT0gZHdzLT5yeF9lbmQ7Cit9CisKK3N0YXRpYyB2b2lkICpuZXh0X3RyYW5zZmVyKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGR3cy0+Y3VyX21zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFucyA9IGR3cy0+Y3VyX3RyYW5zZmVyOworCisJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCisJaWYgKHRyYW5zLT50cmFuc2Zlcl9saXN0Lm5leHQgIT0gJm1zZy0+dHJhbnNmZXJzKSB7CisJCWR3cy0+Y3VyX3RyYW5zZmVyID0KKwkJCWxpc3RfZW50cnkodHJhbnMtPnRyYW5zZmVyX2xpc3QubmV4dCwKKwkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKKwkJCQkJdHJhbnNmZXJfbGlzdCk7CisJCXJldHVybiBSVU5OSU5HX1NUQVRFOworCX0gZWxzZQorCQlyZXR1cm4gRE9ORV9TVEFURTsKK30KKworLyoKKyAqIE5vdGU6IGZpcnN0IHN0ZXAgaXMgdGhlIHByb3RvY29sIGRyaXZlciBwcmVwYXJlcworICogYSBkbWEtY2FwYWJsZSBtZW1vcnksIGFuZCB0aGlzIGZ1bmMganVzdCBuZWVkIHRyYW5zbGF0ZQorICogdGhlIHZpcnQgYWRkciB0byBwaHlzaWNhbAorICovCitzdGF0aWMgaW50IG1hcF9kbWFfYnVmZmVycyhzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJaWYgKCFkd3MtPmN1cl9tc2ctPmlzX2RtYV9tYXBwZWQgfHwgIWR3cy0+ZG1hX2luaXRlZAorCQl8fCAhZHdzLT5jdXJfY2hpcC0+ZW5hYmxlX2RtYSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZHdzLT5jdXJfdHJhbnNmZXItPnR4X2RtYSkKKwkJZHdzLT50eF9kbWEgPSBkd3MtPmN1cl90cmFuc2Zlci0+dHhfZG1hOworCisJaWYgKGR3cy0+Y3VyX3RyYW5zZmVyLT5yeF9kbWEpCisJCWR3cy0+cnhfZG1hID0gZHdzLT5jdXJfdHJhbnNmZXItPnJ4X2RtYTsKKworCXJldHVybiAxOworfQorCisvKiBDYWxsZXIgYWxyZWFkeSBzZXQgbWVzc2FnZS0+c3RhdHVzOyBkbWEgYW5kIHBpbyBpcnFzIGFyZSBibG9ja2VkICovCitzdGF0aWMgdm9pZCBnaXZlYmFjayhzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqbGFzdF90cmFuc2ZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCW1zZyA9IGR3cy0+Y3VyX21zZzsKKwlkd3MtPmN1cl9tc2cgPSBOVUxMOworCWR3cy0+Y3VyX3RyYW5zZmVyID0gTlVMTDsKKwlkd3MtPnByZXZfY2hpcCA9IGR3cy0+Y3VyX2NoaXA7CisJZHdzLT5jdXJfY2hpcCA9IE5VTEw7CisJZHdzLT5kbWFfbWFwcGVkID0gMDsKKwlxdWV1ZV93b3JrKGR3cy0+d29ya3F1ZXVlLCAmZHdzLT5wdW1wX21lc3NhZ2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKworCWxhc3RfdHJhbnNmZXIgPSBsaXN0X2VudHJ5KG1zZy0+dHJhbnNmZXJzLnByZXYsCisJCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIsCisJCQkJCXRyYW5zZmVyX2xpc3QpOworCisJaWYgKCFsYXN0X3RyYW5zZmVyLT5jc19jaGFuZ2UpCisJCWR3cy0+Y3NfY29udHJvbChNUlNUX1NQSV9ERUFTU0VSVCk7CisKKwltc2ctPnN0YXRlID0gTlVMTDsKKwlpZiAobXNnLT5jb21wbGV0ZSkKKwkJbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBpbnRfZXJyb3Jfc3RvcChzdHJ1Y3QgZHdfc3BpICpkd3MsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwkvKiBTdG9wIGFuZCByZXNldCBodyAqLworCWZsdXNoKGR3cyk7CisJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CisKKwlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LCAiJXNcbiIsIG1zZyk7CisJZHdzLT5jdXJfbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOworCXRhc2tsZXRfc2NoZWR1bGUoJmR3cy0+cHVtcF90cmFuc2ZlcnMpOworfQorCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCByZXR1cm4gY291bnQgYWN0dWFsIGJ5dGVzIHJlYWQgKi8KKwlkd3MtPmN1cl9tc2ctPmFjdHVhbF9sZW5ndGggKz0gZHdzLT5sZW47CisKKwkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KKwlkd3MtPmN1cl9tc2ctPnN0YXRlID0gbmV4dF90cmFuc2Zlcihkd3MpOworCisJLyogSGFuZGxlIGVuZCBvZiBtZXNzYWdlICovCisJaWYgKGR3cy0+Y3VyX21zZy0+c3RhdGUgPT0gRE9ORV9TVEFURSkgeworCQlkd3MtPmN1cl9tc2ctPnN0YXR1cyA9IDA7CisJCWdpdmViYWNrKGR3cyk7CisJfSBlbHNlCisJCXRhc2tsZXRfc2NoZWR1bGUoJmR3cy0+cHVtcF90cmFuc2ZlcnMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3RyYW5zZmVyKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl1MTYgaXJxX3N0YXR1cywgaXJxX21hc2sgPSAweDNmOworCisJaXJxX3N0YXR1cyA9IGR3X3JlYWR3KGR3cywgaXNyKSAmIGlycV9tYXNrOworCS8qIEVycm9yIGhhbmRsaW5nICovCisJaWYgKGlycV9zdGF0dXMgJiAoU1BJX0lOVF9UWE9JIHwgU1BJX0lOVF9SWE9JIHwgU1BJX0lOVF9SWFVJKSkgeworCQlkd19yZWFkdyhkd3MsIHR4b2ljcik7CisJCWR3X3JlYWR3KGR3cywgcnhvaWNyKTsKKwkJZHdfcmVhZHcoZHdzLCByeHVpY3IpOworCQlpbnRfZXJyb3Jfc3RvcChkd3MsICJpbnRlcnJ1cHRfdHJhbnNmZXI6IGZpZm8gb3ZlcnJ1biIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogSU5UIGNvbWVzIGZyb20gdHggKi8KKwlpZiAoZHdzLT50eCAmJiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfVFhFSSkpIHsKKwkJd2hpbGUgKGR3cy0+dHggPCBkd3MtPnR4X2VuZCkKKwkJCWR3cy0+d3JpdGUoZHdzKTsKKworCQlpZiAoZHdzLT50eCA9PSBkd3MtPnR4X2VuZCkgeworCQkJc3BpX21hc2tfaW50cihkd3MsIFNQSV9JTlRfVFhFSSk7CisJCQl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOworCQl9CisJfQorCisJLyogSU5UIGNvbWVzIGZyb20gcnggKi8KKwlpZiAoZHdzLT5yeCAmJiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfUlhGSSkpIHsKKwkJaWYgKGR3cy0+cmVhZChkd3MpKQorCQkJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZHdfc3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGR3X3NwaSAqZHdzID0gZGV2X2lkOworCisJaWYgKCFkd3MtPmN1cl9tc2cpIHsKKwkJc3BpX21hc2tfaW50cihkd3MsIFNQSV9JTlRfVFhFSSk7CisJCS8qIE5ldmVyIGZhaWwgKi8KKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBkd3MtPnRyYW5zZmVyX2hhbmRsZXIoZHdzKTsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgaW5zaWRlIHB1bXBfdHJhbnNmZXJzKCkgKi8KK3N0YXRpYyB2b2lkIHBvbGxfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWlmIChkd3MtPnR4KSB7CisJCXdoaWxlIChkd3MtPndyaXRlKGR3cykpCisJCQlkd3MtPnJlYWQoZHdzKTsKKwl9CisKKwlkd3MtPnJlYWQoZHdzKTsKKwl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOworfQorCitzdGF0aWMgdm9pZCBkbWFfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzLCBpbnQgY3NfY2hhbmdlKQoreworfQorCitzdGF0aWMgdm9pZCBwdW1wX3RyYW5zZmVycyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGR3X3NwaSAqZHdzID0gKHN0cnVjdCBkd19zcGkgKilkYXRhOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIgPSBOVUxMOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnByZXZpb3VzID0gTlVMTDsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gTlVMTDsKKwlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gTlVMTDsKKwl1OCBiaXRzID0gMDsKKwl1OCBpbWFzayA9IDA7CisJdTggY3NfY2hhbmdlID0gMDsKKwl1MTYgY2xrX2RpdiA9IDA7CisJdTMyIHNwZWVkID0gMDsKKwl1MzIgY3IwID0gMDsKKworCS8qIEdldCBjdXJyZW50IHN0YXRlIGluZm9ybWF0aW9uICovCisJbWVzc2FnZSA9IGR3cy0+Y3VyX21zZzsKKwl0cmFuc2ZlciA9IGR3cy0+Y3VyX3RyYW5zZmVyOworCWNoaXAgPSBkd3MtPmN1cl9jaGlwOworCXNwaSA9IG1lc3NhZ2UtPnNwaTsKKworCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBFUlJPUl9TVEFURSkgeworCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlPOworCQlnb3RvIGVhcmx5X2V4aXQ7CisJfQorCisJLyogSGFuZGxlIGVuZCBvZiBtZXNzYWdlICovCisJaWYgKG1lc3NhZ2UtPnN0YXRlID09IERPTkVfU1RBVEUpIHsKKwkJbWVzc2FnZS0+c3RhdHVzID0gMDsKKwkJZ290byBlYXJseV9leGl0OworCX0KKworCS8qIERlbGF5IGlmIHJlcXVlc3RlZCBhdCBlbmQgb2YgdHJhbnNmZXIqLworCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBSVU5OSU5HX1NUQVRFKSB7CisJCXByZXZpb3VzID0gbGlzdF9lbnRyeSh0cmFuc2Zlci0+dHJhbnNmZXJfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyLAorCQkJCQl0cmFuc2Zlcl9saXN0KTsKKwkJaWYgKHByZXZpb3VzLT5kZWxheV91c2VjcykKKwkJCXVkZWxheShwcmV2aW91cy0+ZGVsYXlfdXNlY3MpOworCX0KKworCWR3cy0+bl9ieXRlcyA9IGNoaXAtPm5fYnl0ZXM7CisJZHdzLT5kbWFfd2lkdGggPSBjaGlwLT5kbWFfd2lkdGg7CisJZHdzLT5jc19jb250cm9sID0gY2hpcC0+Y3NfY29udHJvbDsKKworCWR3cy0+cnhfZG1hID0gdHJhbnNmZXItPnJ4X2RtYTsKKwlkd3MtPnR4X2RtYSA9IHRyYW5zZmVyLT50eF9kbWE7CisJZHdzLT50eCA9ICh2b2lkICopdHJhbnNmZXItPnR4X2J1ZjsKKwlkd3MtPnR4X2VuZCA9IGR3cy0+dHggKyB0cmFuc2Zlci0+bGVuOworCWR3cy0+cnggPSB0cmFuc2Zlci0+cnhfYnVmOworCWR3cy0+cnhfZW5kID0gZHdzLT5yeCArIHRyYW5zZmVyLT5sZW47CisJZHdzLT53cml0ZSA9IGR3cy0+dHggPyBjaGlwLT53cml0ZSA6IG51bGxfd3JpdGVyOworCWR3cy0+cmVhZCA9IGR3cy0+cnggPyBjaGlwLT5yZWFkIDogbnVsbF9yZWFkZXI7CisJZHdzLT5jc19jaGFuZ2UgPSB0cmFuc2Zlci0+Y3NfY2hhbmdlOworCWR3cy0+bGVuID0gZHdzLT5jdXJfdHJhbnNmZXItPmxlbjsKKwlpZiAoY2hpcCAhPSBkd3MtPnByZXZfY2hpcCkKKwkJY3NfY2hhbmdlID0gMTsKKworCWNyMCA9IGNoaXAtPmNyMDsKKworCS8qIEhhbmRsZSBwZXIgdHJhbnNmZXIgb3B0aW9ucyBmb3IgYnB3IGFuZCBzcGVlZCAqLworCWlmICh0cmFuc2Zlci0+c3BlZWRfaHopIHsKKwkJc3BlZWQgPSBjaGlwLT5zcGVlZF9oejsKKworCQlpZiAodHJhbnNmZXItPnNwZWVkX2h6ICE9IHNwZWVkKSB7CisJCQlzcGVlZCA9IHRyYW5zZmVyLT5zcGVlZF9oejsKKwkJCWlmIChzcGVlZCA+IGR3cy0+bWF4X2ZyZXEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk1SU1QgU1BJMDogdW5zdXBwb3J0ZWQiCisJCQkJCSJmcmVxOiAlZEh6XG4iLCBzcGVlZCk7CisJCQkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTzsKKwkJCQlnb3RvIGVhcmx5X2V4aXQ7CisJCQl9CisKKwkJCS8qIGNsa19kaXYgZG9lc24ndCBzdXBwb3J0IG9kZCBudW1iZXIgKi8KKwkJCWNsa19kaXYgPSBkd3MtPm1heF9mcmVxIC8gc3BlZWQ7CisJCQljbGtfZGl2ID0gKGNsa19kaXYgPj4gMSkgPDwgMTsKKworCQkJY2hpcC0+c3BlZWRfaHogPSBzcGVlZDsKKwkJCWNoaXAtPmNsa19kaXYgPSBjbGtfZGl2OworCQl9CisJfQorCWlmICh0cmFuc2Zlci0+Yml0c19wZXJfd29yZCkgeworCQliaXRzID0gdHJhbnNmZXItPmJpdHNfcGVyX3dvcmQ7CisKKwkJc3dpdGNoIChiaXRzKSB7CisJCWNhc2UgODoKKwkJCWR3cy0+bl9ieXRlcyA9IDE7CisJCQlkd3MtPmRtYV93aWR0aCA9IDE7CisJCQlkd3MtPnJlYWQgPSAoZHdzLT5yZWFkICE9IG51bGxfcmVhZGVyKSA/CisJCQkJCXU4X3JlYWRlciA6IG51bGxfcmVhZGVyOworCQkJZHdzLT53cml0ZSA9IChkd3MtPndyaXRlICE9IG51bGxfd3JpdGVyKSA/CisJCQkJCXU4X3dyaXRlciA6IG51bGxfd3JpdGVyOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQlkd3MtPm5fYnl0ZXMgPSAyOworCQkJZHdzLT5kbWFfd2lkdGggPSAyOworCQkJZHdzLT5yZWFkID0gKGR3cy0+cmVhZCAhPSBudWxsX3JlYWRlcikgPworCQkJCQl1MTZfcmVhZGVyIDogbnVsbF9yZWFkZXI7CisJCQlkd3MtPndyaXRlID0gKGR3cy0+d3JpdGUgIT0gbnVsbF93cml0ZXIpID8KKwkJCQkJdTE2X3dyaXRlciA6IG51bGxfd3JpdGVyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIk1SU1QgU1BJMDogdW5zdXBwb3J0ZWQgYml0czoiCisJCQkJIiVkYlxuIiwgYml0cyk7CisJCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlPOworCQkJZ290byBlYXJseV9leGl0OworCQl9CisKKwkJY3IwID0gKGJpdHMgLSAxKQorCQkJfCAoY2hpcC0+dHlwZSA8PCBTUElfRlJGX09GRlNFVCkKKwkJCXwgKHNwaS0+bW9kZSA8PCBTUElfTU9ERV9PRkZTRVQpCisJCQl8IChjaGlwLT50bW9kZSA8PCBTUElfVE1PRF9PRkZTRVQpOworCX0KKwltZXNzYWdlLT5zdGF0ZSA9IFJVTk5JTkdfU1RBVEU7CisKKwkvKiBDaGVjayBpZiBjdXJyZW50IHRyYW5zZmVyIGlzIGEgRE1BIHRyYW5zYWN0aW9uICovCisJZHdzLT5kbWFfbWFwcGVkID0gbWFwX2RtYV9idWZmZXJzKGR3cyk7CisKKwlpZiAoIWR3cy0+ZG1hX21hcHBlZCAmJiAhY2hpcC0+cG9sbF9tb2RlKSB7CisJCWlmIChkd3MtPnJ4KQorCQkJaW1hc2sgfD0gU1BJX0lOVF9SWEZJOworCQlpZiAoZHdzLT50eCkKKwkJCWltYXNrIHw9IFNQSV9JTlRfVFhFSTsKKwkJZHdzLT50cmFuc2Zlcl9oYW5kbGVyID0gaW50ZXJydXB0X3RyYW5zZmVyOworCX0KKworCS8qCisJICogUmVwcm9ncmFtIHJlZ2lzdGVycyBvbmx5IGlmCisJICoJMS4gY2hpcCBzZWxlY3QgY2hhbmdlcworCSAqCTIuIGNsa19kaXYgaXMgY2hhbmdlZAorCSAqCTMuIGNvbnRyb2wgdmFsdWUgY2hhbmdlcworCSAqLworCWlmIChkd19yZWFkdyhkd3MsIGN0cmwwKSAhPSBjcjAgfHwgY3NfY2hhbmdlIHx8IGNsa19kaXYpIHsKKwkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CisKKwkJaWYgKGR3X3JlYWR3KGR3cywgY3RybDApICE9IGNyMCkKKwkJCWR3X3dyaXRldyhkd3MsIGN0cmwwLCBjcjApOworCisJCS8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2ssIGZvciBwb2xsIG1vZGUganVzdCBkaWFibGUgYWxsIGludCAqLworCQlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7CisJCWlmICghY2hpcC0+cG9sbF9tb2RlKQorCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBpbWFzayk7CisKKwkJc3BpX3NldF9jbGsoZHdzLCBjbGtfZGl2ID8gY2xrX2RpdiA6IGNoaXAtPmNsa19kaXYpOworCQlzcGlfY2hpcF9zZWwoZHdzLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CisKKwkJaWYgKGNzX2NoYW5nZSkKKwkJCWR3cy0+cHJldl9jaGlwID0gY2hpcDsKKwl9CisKKwlpZiAoZHdzLT5kbWFfbWFwcGVkKQorCQlkbWFfdHJhbnNmZXIoZHdzLCBjc19jaGFuZ2UpOworCisJaWYgKGNoaXAtPnBvbGxfbW9kZSkKKwkJcG9sbF90cmFuc2Zlcihkd3MpOworCisJcmV0dXJuOworCitlYXJseV9leGl0OgorCWdpdmViYWNrKGR3cyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwdW1wX21lc3NhZ2VzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHdfc3BpICpkd3MgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGR3X3NwaSwgcHVtcF9tZXNzYWdlcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIExvY2sgcXVldWUgYW5kIGNoZWNrIGZvciBxdWV1ZSB3b3JrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZkd3MtPnF1ZXVlKSB8fCBkd3MtPnJ1biA9PSBRVUVVRV9TVE9QUEVEKSB7CisJCWR3cy0+YnVzeSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBydW5uaW5nIGEgbWVzc2FnZSAqLworCWlmIChkd3MtPmN1cl9tc2cpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBFeHRyYWN0IGhlYWQgb2YgcXVldWUgKi8KKwlkd3MtPmN1cl9tc2cgPSBsaXN0X2VudHJ5KGR3cy0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisJbGlzdF9kZWxfaW5pdCgmZHdzLT5jdXJfbXNnLT5xdWV1ZSk7CisKKwkvKiBJbml0aWFsIG1lc3NhZ2Ugc3RhdGUqLworCWR3cy0+Y3VyX21zZy0+c3RhdGUgPSBTVEFSVF9TVEFURTsKKwlkd3MtPmN1cl90cmFuc2ZlciA9IGxpc3RfZW50cnkoZHdzLT5jdXJfbXNnLT50cmFuc2ZlcnMubmV4dCwKKwkJCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIsCisJCQkJCQl0cmFuc2Zlcl9saXN0KTsKKwlkd3MtPmN1cl9jaGlwID0gc3BpX2dldF9jdGxkYXRhKGR3cy0+Y3VyX21zZy0+c3BpKTsKKworCS8qIE1hcmsgYXMgYnVzeSBhbmQgbGF1bmNoIHRyYW5zZmVycyAqLworCXRhc2tsZXRfc2NoZWR1bGUoJmR3cy0+cHVtcF90cmFuc2ZlcnMpOworCisJZHdzLT5idXN5ID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKK30KKworLyogc3BpX2RldmljZSB1c2UgdGhpcyB0byBxdWV1ZSBpbiB0aGVpciBzcGlfbXNnICovCitzdGF0aWMgaW50IGR3X3NwaV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgZHdfc3BpICpkd3MgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCisJaWYgKGR3cy0+cnVuID09IFFVRVVFX1NUT1BQRUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCW1zZy0+YWN0dWFsX2xlbmd0aCA9IDA7CisJbXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJbXNnLT5zdGF0ZSA9IFNUQVJUX1NUQVRFOworCisJbGlzdF9hZGRfdGFpbCgmbXNnLT5xdWV1ZSwgJmR3cy0+cXVldWUpOworCisJaWYgKGR3cy0+cnVuID09IFFVRVVFX1JVTk5JTkcgJiYgIWR3cy0+YnVzeSkgeworCisJCWlmIChkd3MtPmN1cl90cmFuc2ZlciB8fCBkd3MtPmN1cl9tc2cpCisJCQlxdWV1ZV93b3JrKGR3cy0+d29ya3F1ZXVlLAorCQkJCQkmZHdzLT5wdW1wX21lc3NhZ2VzKTsKKwkJZWxzZSB7CisJCQkvKiBJZiBubyBvdGhlciBkYXRhIHRyYW5zYWN0aW9uIGluIGFpciwganVzdCBnbyAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisJCQlwdW1wX21lc3NhZ2VzKCZkd3MtPnB1bXBfbWVzc2FnZXMpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBtYXkgYmUgY2FsbGVkIHR3aWNlIGZvciBlYWNoIHNwaSBkZXYgKi8KK3N0YXRpYyBpbnQgZHdfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGR3X3NwaV9jaGlwICpjaGlwX2luZm8gPSBOVUxMOworCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXA7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkICE9IDggJiYgc3BpLT5iaXRzX3Blcl93b3JkICE9IDE2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE9ubHkgYWxsb2Mgb24gZmlyc3Qgc2V0dXAgKi8KKwljaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7CisJaWYgKCFjaGlwKSB7CisJCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hpcF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpcCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWNoaXAtPmNzX2NvbnRyb2wgPSBudWxsX2NzX2NvbnRyb2w7CisJCWNoaXAtPmVuYWJsZV9kbWEgPSAwOworCX0KKworCS8qCisJICogUHJvdG9jb2wgZHJpdmVycyBtYXkgY2hhbmdlIHRoZSBjaGlwIHNldHRpbmdzLCBzby4uLgorCSAqIGlmIGNoaXBfaW5mbyBleGlzdHMsIHVzZSBpdAorCSAqLworCWNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCisJLyogY2hpcF9pbmZvIGRvZXNuJ3QgYWx3YXlzIGV4aXN0ICovCisJaWYgKGNoaXBfaW5mbykgeworCQlpZiAoY2hpcF9pbmZvLT5jc19jb250cm9sKQorCQkJY2hpcC0+Y3NfY29udHJvbCA9IGNoaXBfaW5mby0+Y3NfY29udHJvbDsKKworCQljaGlwLT5wb2xsX21vZGUgPSBjaGlwX2luZm8tPnBvbGxfbW9kZTsKKwkJY2hpcC0+dHlwZSA9IGNoaXBfaW5mby0+dHlwZTsKKworCQljaGlwLT5yeF90aHJlc2hvbGQgPSAwOworCQljaGlwLT50eF90aHJlc2hvbGQgPSAwOworCisJCWNoaXAtPmVuYWJsZV9kbWEgPSBjaGlwX2luZm8tPmVuYWJsZV9kbWE7CisJfQorCisJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSA4KSB7CisJCWNoaXAtPm5fYnl0ZXMgPSAxOworCQljaGlwLT5kbWFfd2lkdGggPSAxOworCQljaGlwLT5yZWFkID0gdThfcmVhZGVyOworCQljaGlwLT53cml0ZSA9IHU4X3dyaXRlcjsKKwl9IGVsc2UgaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSAxNikgeworCQljaGlwLT5uX2J5dGVzID0gMjsKKwkJY2hpcC0+ZG1hX3dpZHRoID0gMjsKKwkJY2hpcC0+cmVhZCA9IHUxNl9yZWFkZXI7CisJCWNoaXAtPndyaXRlID0gdTE2X3dyaXRlcjsKKwl9IGVsc2UgeworCQkvKiBOZXZlciB0YWtlID4xNmIgY2FzZSBmb3IgTVJTVCBTUElDICovCisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiaW52YWxpZCB3b3Jkc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGlwLT5iaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOworCisJY2hpcC0+c3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKKwlpZiAoY2hpcC0+c3BlZWRfaHopCisJCWNoaXAtPmNsa19kaXYgPSAyNTAwMDAwMCAvIGNoaXAtPnNwZWVkX2h6OworCWVsc2UKKwkJY2hpcC0+Y2xrX2RpdiA9IDg7CS8qIGRlZmF1bHQgdmFsdWUgKi8KKworCWNoaXAtPnRtb2RlID0gMDsgLyogVHggJiBSeCAqLworCS8qIERlZmF1bHQgU1BJIG1vZGUgaXMgU0NQT0wgPSAwLCBTQ1BIID0gMCAqLworCWNoaXAtPmNyMCA9IChjaGlwLT5iaXRzX3Blcl93b3JkIC0gMSkKKwkJCXwgKGNoaXAtPnR5cGUgPDwgU1BJX0ZSRl9PRkZTRVQpCisJCQl8IChzcGktPm1vZGUgIDw8IFNQSV9NT0RFX09GRlNFVCkKKwkJCXwgKGNoaXAtPnRtb2RlIDw8IFNQSV9UTU9EX09GRlNFVCk7CisKKwlzcGlfc2V0X2N0bGRhdGEoc3BpLCBjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHdfc3BpX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7CisJa2ZyZWUoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcXVldWUoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCUlOSVRfTElTVF9IRUFEKCZkd3MtPnF1ZXVlKTsKKwlzcGluX2xvY2tfaW5pdCgmZHdzLT5sb2NrKTsKKworCWR3cy0+cnVuID0gUVVFVUVfU1RPUFBFRDsKKwlkd3MtPmJ1c3kgPSAwOworCisJdGFza2xldF9pbml0KCZkd3MtPnB1bXBfdHJhbnNmZXJzLAorCQkJcHVtcF90cmFuc2ZlcnMsCSh1bnNpZ25lZCBsb25nKWR3cyk7CisKKwlJTklUX1dPUksoJmR3cy0+cHVtcF9tZXNzYWdlcywgcHVtcF9tZXNzYWdlcyk7CisJZHdzLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQkJZGV2X25hbWUoZHdzLT5tYXN0ZXItPmRldi5wYXJlbnQpKTsKKwlpZiAoZHdzLT53b3JrcXVldWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YXJ0X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCisJaWYgKGR3cy0+cnVuID09IFFVRVVFX1JVTk5JTkcgfHwgZHdzLT5idXN5KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWR3cy0+cnVuID0gUVVFVUVfUlVOTklORzsKKwlkd3MtPmN1cl9tc2cgPSBOVUxMOworCWR3cy0+Y3VyX3RyYW5zZmVyID0gTlVMTDsKKwlkd3MtPmN1cl9jaGlwID0gTlVMTDsKKwlkd3MtPnByZXZfY2hpcCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisKKwlxdWV1ZV93b3JrKGR3cy0+d29ya3F1ZXVlLCAmZHdzLT5wdW1wX21lc3NhZ2VzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0b3BfcXVldWUoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbGltaXQgPSA1MDsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwlkd3MtPnJ1biA9IFFVRVVFX1NUT1BQRUQ7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkd3MtPnF1ZXVlKSAmJiBkd3MtPmJ1c3kgJiYgbGltaXQtLSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd3MtPmxvY2ssIGZsYWdzKTsKKwkJbXNsZWVwKDEwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmR3cy0+bG9jaywgZmxhZ3MpOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmZHdzLT5xdWV1ZSkgfHwgZHdzLT5idXN5KQorCQlzdGF0dXMgPSAtRUJVU1k7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRlc3Ryb3lfcXVldWUoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBzdG9wX3F1ZXVlKGR3cyk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCWRlc3Ryb3lfd29ya3F1ZXVlKGR3cy0+d29ya3F1ZXVlKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVzdGFydCB0aGUgY29udHJvbGxlciwgZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgY2xlYW4gcnggZmlmbyAqLworc3RhdGljIHZvaWQgc3BpX2h3X2luaXQoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOworCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKKwlzcGlfZW5hYmxlX2NoaXAoZHdzLCAxKTsKKwlmbHVzaChkd3MpOworfQorCitpbnQgX19kZXZpbml0IGR3X3NwaV9hZGRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlpbnQgcmV0OworCisJQlVHX09OKGR3cyA9PSBOVUxMKTsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZHdzLT5wYXJlbnRfZGV2LCAwKTsKKwlpZiAoIW1hc3RlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZHdzLT5tYXN0ZXIgPSBtYXN0ZXI7CisJZHdzLT50eXBlID0gU1NJX01PVE9fU1BJOworCWR3cy0+cHJldl9jaGlwID0gTlVMTDsKKwlkd3MtPmRtYV9pbml0ZWQgPSAwOworCWR3cy0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkoZHdzLT5wYWRkciArIDB4NjApOworCisJcmV0ID0gcmVxdWVzdF9pcnEoZHdzLT5pcnEsIGR3X3NwaV9pcnEsIDAsCisJCQkiZHdfc3BpIiwgZHdzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZtYXN0ZXItPmRldiwgImNhbiBub3QgZ2V0IElSUVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfbWFzdGVyOworCX0KKworCW1hc3Rlci0+bW9kZV9iaXRzID0gU1BJX0NQT0wgfCBTUElfQ1BIQTsKKwltYXN0ZXItPmJ1c19udW0gPSBkd3MtPmJ1c19udW07CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IGR3cy0+bnVtX2NzOworCW1hc3Rlci0+Y2xlYW51cCA9IGR3X3NwaV9jbGVhbnVwOworCW1hc3Rlci0+c2V0dXAgPSBkd19zcGlfc2V0dXA7CisJbWFzdGVyLT50cmFuc2ZlciA9IGR3X3NwaV90cmFuc2ZlcjsKKworCWR3cy0+ZG1hX2luaXRlZCA9IDA7CisKKwkvKiBCYXNpYyBIVyBpbml0ICovCisJc3BpX2h3X2luaXQoZHdzKTsKKworCS8qIEluaXRpYWwgYW5kIHN0YXJ0IHF1ZXVlICovCisJcmV0ID0gaW5pdF9xdWV1ZShkd3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmbWFzdGVyLT5kZXYsICJwcm9ibGVtIGluaXRpYWxpemluZyBxdWV1ZVxuIik7CisJCWdvdG8gZXJyX2RpYWJsZV9odzsKKwl9CisJcmV0ID0gc3RhcnRfcXVldWUoZHdzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm1hc3Rlci0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBxdWV1ZVxuIik7CisJCWdvdG8gZXJyX2RpYWJsZV9odzsKKwl9CisKKwlzcGlfbWFzdGVyX3NldF9kZXZkYXRhKG1hc3RlciwgZHdzKTsKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZtYXN0ZXItPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmcgc3BpIG1hc3RlclxuIik7CisJCWdvdG8gZXJyX3F1ZXVlX2FsbG9jOworCX0KKworCW1yc3Rfc3BpX2RlYnVnZnNfaW5pdChkd3MpOworCXJldHVybiAwOworCitlcnJfcXVldWVfYWxsb2M6CisJZGVzdHJveV9xdWV1ZShkd3MpOworZXJyX2RpYWJsZV9odzoKKwlzcGlfZW5hYmxlX2NoaXAoZHdzLCAwKTsKKwlmcmVlX2lycShkd3MtPmlycSwgZHdzKTsKK2Vycl9mcmVlX21hc3RlcjoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkd19zcGlfYWRkX2hvc3QpOworCit2b2lkIF9fZGV2ZXhpdCBkd19zcGlfcmVtb3ZlX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFkd3MpCisJCXJldHVybjsKKwltcnN0X3NwaV9kZWJ1Z2ZzX3JlbW92ZShkd3MpOworCisJLyogUmVtb3ZlIHRoZSBxdWV1ZSAqLworCXN0YXR1cyA9IGRlc3Ryb3lfcXVldWUoZHdzKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWRldl9lcnIoJmR3cy0+bWFzdGVyLT5kZXYsICJkd19zcGlfcmVtb3ZlOiB3b3JrcXVldWUgd2lsbCBub3QgIgorCQkJImNvbXBsZXRlLCBtZXNzYWdlIG1lbW9yeSBub3QgZnJlZWRcbiIpOworCisJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CisJLyogRGlzYWJsZSBjbGsgKi8KKwlzcGlfc2V0X2Nsayhkd3MsIDApOworCWZyZWVfaXJxKGR3cy0+aXJxLCBkd3MpOworCisJLyogRGlzY29ubmVjdCBmcm9tIHRoZSBTUEkgZnJhbWV3b3JrICovCisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKGR3cy0+bWFzdGVyKTsKK30KKworaW50IGR3X3NwaV9zdXNwZW5kX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gc3RvcF9xdWV1ZShkd3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CisJc3BpX3NldF9jbGsoZHdzLCAwKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkd19zcGlfc3VzcGVuZF9ob3N0KTsKKworaW50IGR3X3NwaV9yZXN1bWVfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJaW50IHJldDsKKworCXNwaV9od19pbml0KGR3cyk7CisJcmV0ID0gc3RhcnRfcXVldWUoZHdzKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LCAiZmFpbCB0byBzdGFydCBxdWV1ZSAoJWQpXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGR3X3NwaV9yZXN1bWVfaG9zdCk7CisKK01PRFVMRV9BVVRIT1IoIkZlbmcgVGFuZyA8ZmVuZy50YW5nQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEZXNpZ25XYXJlIFNQSSBjb250cm9sbGVyIGNvcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGJhNjkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogbXJzdF9zcGlfcGNpLmMgLSBQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIENvcmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9kd19zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImR3X3NwaV9wY2kiCisKK3N0cnVjdCBkd19zcGlfcGNpIHsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJc3RydWN0IGR3X3NwaQkJZHdzOworfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc3BpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBkd19zcGlfcGNpICpkd3BjaTsKKwlzdHJ1Y3QgZHdfc3BpICpkd3M7CisJaW50IHBjaV9iYXIgPSAwOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJEVzogZm91bmQgUENJIFNQSSBjb250cm9sbGVyKElEOiAlMDR4OiUwNHgpXG4iLAorCQlwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHdwY2kgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHdfc3BpX3BjaSksIEdGUF9LRVJORUwpOworCWlmICghZHdwY2kpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZGlzYWJsZTsKKwl9CisKKwlkd3BjaS0+cGRldiA9IHBkZXY7CisJZHdzID0gJmR3cGNpLT5kd3M7CisKKwkvKiBHZXQgYmFzaWMgaW8gcmVzb3VyY2UgYW5kIG1hcCBpdCAqLworCWR3cy0+cGFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgcGNpX2Jhcik7CisJZHdzLT5pb2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcGNpX2Jhcik7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgcGNpX2JhciwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2tmcmVlOworCisJZHdzLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKCh1bnNpZ25lZCBsb25nKWR3cy0+cGFkZHIsCisJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCBwY2lfYmFyKSk7CisJaWYgKCFkd3MtPnJlZ3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWc7CisJfQorCisJZHdzLT5wYXJlbnRfZGV2ID0gJnBkZXYtPmRldjsKKwlkd3MtPmJ1c19udW0gPSAwOworCWR3cy0+bnVtX2NzID0gNDsKKwlkd3MtPm1heF9mcmVxID0gMjUwMDAwMDA7CS8qIGZvciBNb29yZXN0d29uICovCisJZHdzLT5pcnEgPSBwZGV2LT5pcnE7CisKKwlyZXQgPSBkd19zcGlfYWRkX2hvc3QoZHdzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bm1hcDsKKworCS8qIFBDSSBob29rIGFuZCBTUEkgaG9vayB1c2UgdGhlIHNhbWUgZHJ2IGRhdGEgKi8KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZHdwY2kpOworCXJldHVybiAwOworCitlcnJfdW5tYXA6CisJaW91bm1hcChkd3MtPnJlZ3MpOworZXJyX3JlbGVhc2VfcmVnOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCBwY2lfYmFyKTsKK2Vycl9rZnJlZToKKwlrZnJlZShkd3BjaSk7CitlcnJfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNwaV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkd19zcGlfcGNpICpkd3BjaSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGR3cGNpLT5kd3MucmVncyk7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOworCWtmcmVlKGR3cGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc3BpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHdfc3BpX3BjaSAqZHdwY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXJldCA9IGR3X3NwaV9zdXNwZW5kX2hvc3QoJmR3cGNpLT5kd3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfc3BpX3BjaSAqZHdwY2kgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBkd19zcGlfcmVzdW1lX2hvc3QoJmR3cGNpLT5kd3MpOworfQorI2Vsc2UKKyNkZWZpbmUgc3BpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBzcGlfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJLyogSW50ZWwgTW9vcmVzdG93biBwbGF0Zm9ybSBTUEkgY29udHJvbGxlciAwICovCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDgwMCkgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkd19zcGlfZHJpdmVyID0geworCS5uYW1lID0JCURSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9CXBjaV9pZHMsCisJLnByb2JlID0Jc3BpX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0JX19kZXZleGl0X3Aoc3BpX3BjaV9yZW1vdmUpLAorCS5zdXNwZW5kID0Jc3BpX3N1c3BlbmQsCisJLnJlc3VtZQk9CXNwaV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcnN0X3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmR3X3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXJzdF9zcGlfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHdfc3BpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1yc3Rfc3BpX2luaXQpOworbW9kdWxlX2V4aXQobXJzdF9zcGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkZlbmcgVGFuZyA8ZmVuZy50YW5nQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENJIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBDb3JlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwppbmRleCA3M2UyNGVmLi4xZDQxMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAJCWdvdG8gb3V0X2Vycm9yX2dldF9yZXM7CiAJfQogCi0JZHJ2X2RhdGEtPnJlZ3NfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpKTsKKwlkcnZfZGF0YS0+cmVnc19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChkcnZfZGF0YS0+cmVnc19iYXNlID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJDYW5ub3QgbWFwIElPXG4iKTsKIAkJc3RhdHVzID0gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKaW5kZXggZTkzOTBkNy4uMWZiMmE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCZtcGM4eHh4X3NwaS0+ZG9uZSk7CiAKLQltcGM4eHh4X3NwaS0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CisJbXBjOHh4eF9zcGktPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJaWYgKG1wYzh4eHhfc3BpLT5iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW9yZW1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCmluZGV4IDI3NjU5MTUuLmMwMTA3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtMSw3ICsxLDcgQEAKIC8qIGxpbnV4L2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQmVuIERvb2tzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOCw2ICsyOCwxMSBAQAogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCisjaW5jbHVkZSA8cGxhdC9maXEuaD4KKyNpbmNsdWRlIDxhc20vZmlxLmg+CisKKyNpbmNsdWRlICJzcGlfczNjMjR4eF9maXEuaCIKKwogLyoqCiAgKiBzM2MyNHh4X3NwaV9kZXZzdGF0ZSAtIHBlciBkZXZpY2UgZGF0YQogICogQGh6OiBMYXN0IGZyZXF1ZW5jeSBjYWxjdWxhdGVkIGZvciBAc3BwcmUgZmllbGQuCkBAIC00Miw2ICs0NywxMyBAQAogCXU4CQlzcHByZTsKIH07CiAKK2VudW0gc3BpX2ZpcV9tb2RlIHsKKwlGSVFfTU9ERV9OT05FCT0gMCwKKwlGSVFfTU9ERV9UWAk9IDEsCisJRklRX01PREVfUlgJPSAyLAorCUZJUV9NT0RFX1RYUlgJPSAzLAorfTsKKwogc3RydWN0IHMzYzI0eHhfc3BpIHsKIAkvKiBiaXRiYW5nIGhhcyB0byBiZSBmaXJzdCAqLwogCXN0cnVjdCBzcGlfYml0YmFuZwkgYml0YmFuZzsKQEAgLTUyLDYgKzY0LDExIEBACiAJaW50CQkJIGxlbjsKIAlpbnQJCQkgY291bnQ7CiAKKwlzdHJ1Y3QgZmlxX2hhbmRsZXIJIGZpcV9oYW5kbGVyOworCWVudW0gc3BpX2ZpcV9tb2RlCSBmaXFfbW9kZTsKKwl1bnNpZ25lZCBjaGFyCQkgZmlxX2ludXNlOworCXVuc2lnbmVkIGNoYXIJCSBmaXFfY2xhaW1lZDsKKwogCXZvaWQJCQkoKnNldF9jcykoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKIAkJCQkJICBpbnQgY3MsIGludCBwb2wpOwogCkBAIC02Nyw2ICs4NCw3IEBACiAJc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnBkYXRhOwogfTsKIAorCiAjZGVmaW5lIFNQQ09OX0RFRkFVTFQgKFMzQzI0MTBfU1BDT05fTVNUUiB8IFMzQzI0MTBfU1BDT05fU01PRF9JTlQpCiAjZGVmaW5lIFNQUElOX0RFRkFVTFQgKFMzQzI0MTBfU1BQSU5fS0VFUCkKIApAQCAtMTI3LDcgKzE0NSw3IEBACiAJfQogCiAJaWYgKHNwaS0+bW9kZSAhPSBjcy0+bW9kZSkgewotCQl1OCBzcGNvbiA9IFNQQ09OX0RFRkFVTFQ7CisJCXU4IHNwY29uID0gU1BDT05fREVGQVVMVCB8IFMzQzI0MTBfU1BDT05fRU5TQ0s7CiAKIAkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQogCQkJc3Bjb24gfD0gUzNDMjQxMF9TUENPTl9DUEhBX0ZNVEI7CkBAIC0yMTQsMTMgKzIzMiwxOTYgQEAKIAlyZXR1cm4gaHctPnR4ID8gaHctPnR4W2NvdW50XSA6IDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1BJX1MzQzI0WFhfRklRCisvKiBTdXBwb3J0IGZvciBGSVEgYmFzZWQgcHNldWRvLURNQSB0byBpbXByb3ZlIHRoZSB0cmFuc2ZlciBzcGVlZC4KKyAqCisgKiBUaGlzIGNvZGUgdXNlcyB0aGUgYXNzZW1ibHkgaGVscGVyIGluIHNwaV9zM2MyNHh4X3NwaS5TIHdoaWNoIGlzCisgKiB1c2VkIGJ5IHRoZSBGSVEgY29yZSB0byBtb3ZlIGRhdGEgYmV0d2VlbiBtYWluIG1lbW9yeSBhbmQgdGhlIHBlcmlwaGVyYWwKKyAqIGJsb2NrLiBTaW5jZSB0aGlzIGlzIGNvZGUgcnVubmluZyBvbiB0aGUgcHJvY2Vzc29yLCB0aGVyZSBpcyBubyBwcm9ibGVtCisgKiB3aXRoIGNhY2hlIGNvaGVyZW5jeSBvZiB0aGUgYnVmZmVycywgc28gd2UgY2FuIHVzZSBhbnkgYnVmZmVyIHdlIGxpa2UuCisgKi8KKworLyoqCisgKiBzdHJ1Y3Qgc3BpX2ZpcV9jb2RlIC0gRklRIGNvZGUgYW5kIGhlYWRlcgorICogQGxlbmd0aDogVGhlIGxlbmd0aCBvZiB0aGUgY29kZSBmcmFnbWVudCwgZXhjbHVkaW5nIHRoaXMgaGVhZGVyLgorICogQGFja19vZmZzZXQ6IFRoZSBvZmZzZXQgZnJvbSBAZGF0YSB0byB0aGUgd29yZCB0byBwbGFjZSB0aGUgSVJRIEFDSyBiaXQgYXQuCisgKiBAZGF0YTogVGhlIGNvZGUgaXRzZWxmIHRvIGluc3RhbGwgYXMgYSBGSVEgaGFuZGxlci4KKyAqLworc3RydWN0IHNwaV9maXFfY29kZSB7CisJdTMyCWxlbmd0aDsKKwl1MzIJYWNrX29mZnNldDsKKwl1OAlkYXRhWzBdOworfTsKKworZXh0ZXJuIHN0cnVjdCBzcGlfZmlxX2NvZGUgczNjMjR4eF9zcGlfZmlxX3R4cng7CitleHRlcm4gc3RydWN0IHNwaV9maXFfY29kZSBzM2MyNHh4X3NwaV9maXFfdHg7CitleHRlcm4gc3RydWN0IHNwaV9maXFfY29kZSBzM2MyNHh4X3NwaV9maXFfcng7CisKKy8qKgorICogYWNrX2JpdCAtIHR1cm4gSVJRIGludG8gSVJRIGFja25vd2xlZGdlbWVudCBiaXQKKyAqIEBpcnE6IFRoZSBpbnRlcnJ1cHQgbnVtYmVyCisgKgorICogUmV0dXJucyB0aGUgYml0IHRvIHdyaXRlIHRvIHRoZSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGFja19iaXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMSA8PCAoaXJxIC0gSVJRX0VJTlQwKTsKK30KKworLyoqCisgKiBzM2MyNHh4X3NwaV90cnlmaXEgLSBhdHRlbXB0IHRvIGNsYWltIGFuZCBzZXR1cCBGSVEgZm9yIHRyYW5zZmVyCisgKiBAaHc6IFRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqCisgKiBDbGFpbSB0aGUgRklRIGhhbmRsZXIgKG9ubHkgb25lIGNhbiBiZSBhY3RpdmUgYXQgYW55IG9uZSB0aW1lKSBhbmQKKyAqIHRoZW4gc2V0dXAgdGhlIGNvcnJlY3QgdHJhbnNmZXIgY29kZSBmb3IgdGhpcyB0cmFuc2Zlci4KKyAqCisgKiBUaGlzIGNhbGwgdXBkYXRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBzdGF0ZSBpbmZvcm1hdGlvbiBpZiBzdWNlc3NmdWwsCisgKiBzbyB0aGUgY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgbW9yZSB0aGFuIHN0YXJ0IHRoZSB0cmFuc2ZlcgorICogYXMgbm9ybWFsLCBzaW5jZSB0aGUgSVJRIHdpbGwgaGF2ZSBiZWVuIHJlLXJvdXRlZCB0byB0aGUgRklRIGhhbmRsZXIuCisqLwordm9pZCBzM2MyNHh4X3NwaV90cnlmaXEoc3RydWN0IHMzYzI0eHhfc3BpICpodykKK3sKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCWVudW0gc3BpX2ZpcV9tb2RlIG1vZGU7CisJc3RydWN0IHNwaV9maXFfY29kZSAqY29kZTsKKwlpbnQgcmV0OworCisJaWYgKCFody0+ZmlxX2NsYWltZWQpIHsKKwkJLyogdHJ5IGFuZCBjbGFpbSBmaXEgaWYgd2UgaGF2ZW4ndCBnb3QgaXQsIGFuZCBpZiBub3QKKwkJICogdGhlbiByZXR1cm4gYW5kIHNpbXBseSB1c2UgYW5vdGhlciB0cmFuc2ZlciBtZXRob2QgKi8KKworCQlyZXQgPSBjbGFpbV9maXEoJmh3LT5maXFfaGFuZGxlcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGh3LT50eCAmJiAhaHctPnJ4KQorCQltb2RlID0gRklRX01PREVfVFg7CisJZWxzZSBpZiAoaHctPnJ4ICYmICFody0+dHgpCisJCW1vZGUgPSBGSVFfTU9ERV9SWDsKKwllbHNlCisJCW1vZGUgPSBGSVFfTU9ERV9UWFJYOworCisJcmVncy51cmVnc1tmaXFfcnNwaV0gPSAobG9uZylody0+cmVnczsKKwlyZWdzLnVyZWdzW2ZpcV9ycnhdICA9IChsb25nKWh3LT5yeDsKKwlyZWdzLnVyZWdzW2ZpcV9ydHhdICA9IChsb25nKWh3LT50eCArIDE7CisJcmVncy51cmVnc1tmaXFfcmNvdW50XSA9IGh3LT5sZW4gLSAxOworCXJlZ3MudXJlZ3NbZmlxX3JpcnFdID0gKGxvbmcpUzNDMjRYWF9WQV9JUlE7CisKKwlzZXRfZmlxX3JlZ3MoJnJlZ3MpOworCisJaWYgKGh3LT5maXFfbW9kZSAhPSBtb2RlKSB7CisJCXUzMiAqYWNrX3B0cjsKKworCQlody0+ZmlxX21vZGUgPSBtb2RlOworCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIEZJUV9NT0RFX1RYOgorCQkJY29kZSA9ICZzM2MyNHh4X3NwaV9maXFfdHg7CisJCQlicmVhazsKKwkJY2FzZSBGSVFfTU9ERV9SWDoKKwkJCWNvZGUgPSAmczNjMjR4eF9zcGlfZmlxX3J4OworCQkJYnJlYWs7CisJCWNhc2UgRklRX01PREVfVFhSWDoKKwkJCWNvZGUgPSAmczNjMjR4eF9zcGlfZmlxX3R4cng7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvZGUgPSBOVUxMOworCQl9CisKKwkJQlVHX09OKCFjb2RlKTsKKworCQlhY2tfcHRyID0gKHUzMiAqKSZjb2RlLT5kYXRhW2NvZGUtPmFja19vZmZzZXRdOworCQkqYWNrX3B0ciA9IGFja19iaXQoaHctPmlycSk7CisKKwkJc2V0X2ZpcV9oYW5kbGVyKCZjb2RlLT5kYXRhLCBjb2RlLT5sZW5ndGgpOworCX0KKworCXMzYzI0eHhfc2V0X2ZpcShody0+aXJxLCB0cnVlKTsKKworCWh3LT5maXFfbW9kZSA9IG1vZGU7CisJaHctPmZpcV9pbnVzZSA9IDE7Cit9CisKKy8qKgorICogczNjMjR4eF9zcGlfZmlxb3AgLSBGSVEgY29yZSBjb2RlIGNhbGxiYWNrCisgKiBAcHc6IERhdGEgcmVnaXN0ZXJlZCB3aXRoIHRoZSBoYW5kbGVyCisgKiBAcmVsZWFzZTogV2hldGhlciB0aGlzIGlzIGEgcmVsZWFzZSBvciBhIHJldHVybi4KKyAqCisgKiBDYWxsZWQgYnkgdGhlIEZJUSBjb2RlIHdoZW4gYW5vdGhlciBtb2R1bGUgd2FudHMgdG8gdXNlIHRoZSBGSVEsIHNvCisgKiByZXR1cm4gd2hldGhlciB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIHRoaXMgb3Igbm90IGFuZCB0aGVuIHVwZGF0ZSBvdXIKKyAqIGludGVybmFsIHN0YXRlLgorICovCitzdGF0aWMgaW50IHMzYzI0eHhfc3BpX2ZpcW9wKHZvaWQgKnB3LCBpbnQgcmVsZWFzZSkKK3sKKwlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gcHc7CisJaW50IHJldCA9IDA7CisKKwlpZiAocmVsZWFzZSkgeworCQlpZiAoaHctPmZpcV9pbnVzZSkKKwkJCXJldCA9IC1FQlVTWTsKKworCQkvKiBub3RlLCB3ZSBkbyBub3QgbmVlZCB0byB1bnJvdXRlIHRoZSBGSVEsIGFzIHRoZSBGSVEKKwkJICogdmVjdG9yIGNvZGUgZGUtcm91dGVzIGl0IHRvIHNpZ25hbCB0aGUgZW5kIG9mIHRyYW5zZmVyICovCisKKwkJaHctPmZpcV9tb2RlID0gRklRX01PREVfTk9ORTsKKwkJaHctPmZpcV9jbGFpbWVkID0gMDsKKwl9IGVsc2UgeworCQlody0+ZmlxX2NsYWltZWQgPSAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogczNjMjR4eF9zcGlfaW5pdGZpcSAtIHNldHVwIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIEZJUSBjb3JlCisgKiBAaHc6IFRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqCisgKiBTZXR1cCB0aGUgZmlxX2hhbmRsZXIgYmxvY2sgdG8gcGFzcyB0byB0aGUgRklRIGNvcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2MyNHh4X3NwaV9pbml0ZmlxKHN0cnVjdCBzM2MyNHh4X3NwaSAqaHcpCit7CisJaHctPmZpcV9oYW5kbGVyLmRldl9pZCA9IGh3OworCWh3LT5maXFfaGFuZGxlci5uYW1lID0gZGV2X25hbWUoaHctPmRldik7CisJaHctPmZpcV9oYW5kbGVyLmZpcV9vcCA9IHMzYzI0eHhfc3BpX2ZpcW9wOworfQorCisvKioKKyAqIHMzYzI0eHhfc3BpX3VzZWZpcSAtIHJldHVybiBpZiB3ZSBzaG91bGQgYmUgdXNpbmcgRklRLgorICogQGh3OiBUaGUgaGFyZHdhcmUgc3RhdGUuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGRhdGEgc3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBjaGFubmVsIGlzCisgKiBhbGxvd2VkIHRvIHVzZSB0aGUgRklRLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgczNjMjR4eF9zcGlfdXNlZmlxKHN0cnVjdCBzM2MyNHh4X3NwaSAqaHcpCit7CisJcmV0dXJuIGh3LT5wZGF0YS0+dXNlX2ZpcTsKK30KKworLyoqCisgKiBzM2MyNHh4X3NwaV91c2luZ2ZpcSAtIHJldHVybiBpZiBjaGFubmVsIGlzIHVzaW5nIEZJUQorICogQHNwaTogVGhlIGhhcmR3YXJlIHN0YXRlLgorICoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBjaGFubmVsIGlzIGN1cnJlbnRseSB1c2luZyB0aGUgRklRIChzZXBhcmF0ZSBmcm9tCisgKiB3aGV0aGVyIHRoZSBGSVEgaXMgY2xhaW1lZCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzM2MyNHh4X3NwaV91c2luZ2ZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnNwaSkKK3sKKwlyZXR1cm4gc3BpLT5maXFfaW51c2U7Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjMjR4eF9zcGlfaW5pdGZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnMpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHMzYzI0eHhfc3BpX3RyeWZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnMpIHsgfQorc3RhdGljIGlubGluZSBib29sIHMzYzI0eHhfc3BpX3VzZWZpcShzdHJ1Y3QgczNjMjR4eF9zcGkgKnMpIHsgcmV0dXJuIGZhbHNlOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgczNjMjR4eF9zcGlfdXNpbmdmaXEoc3RydWN0IHMzYzI0eHhfc3BpICpzKSB7IHJldHVybiBmYWxzZTsgfQorCisjZW5kaWYgLyogQ09ORklHX1NQSV9TM0MyNFhYX0ZJUSAqLworCiBzdGF0aWMgaW50IHMzYzI0eHhfc3BpX3R4cngoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKIHsKIAlzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3ID0gdG9faHcoc3BpKTsKIAotCWRldl9kYmcoJnNwaS0+ZGV2LCAidHhyeDogdHggJXAsIHJ4ICVwLCBsZW4gJWRcbiIsCi0JCXQtPnR4X2J1ZiwgdC0+cnhfYnVmLCB0LT5sZW4pOwotCiAJaHctPnR4ID0gdC0+dHhfYnVmOwogCWh3LT5yeCA9IHQtPnJ4X2J1ZjsKIAlody0+bGVuID0gdC0+bGVuOwpAQCAtMjI4LDExICs0MjksMTQgQEAKIAogCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOwogCisJaHctPmZpcV9pbnVzZSA9IDA7CisJaWYgKHMzYzI0eHhfc3BpX3VzZWZpcShodykgJiYgdC0+bGVuID49IDMpCisJCXMzYzI0eHhfc3BpX3RyeWZpcShodyk7CisKIAkvKiBzZW5kIHRoZSBmaXJzdCBieXRlICovCiAJd3JpdGViKGh3X3R4Ynl0ZShodywgMCksIGh3LT5yZWdzICsgUzNDMjQxMF9TUFREQVQpOwogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmaHctPmRvbmUpOwotCiAJcmV0dXJuIGh3LT5jb3VudDsKIH0KIApAQCAtMjU0LDE3ICs0NTgsMjcgQEAKIAkJZ290byBpcnFfZG9uZTsKIAl9CiAKLQlody0+Y291bnQrKzsKKwlpZiAoIXMzYzI0eHhfc3BpX3VzaW5nZmlxKGh3KSkgeworCQlody0+Y291bnQrKzsKIAotCWlmIChody0+cngpCi0JCWh3LT5yeFtjb3VudF0gPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BSREFUKTsKKwkJaWYgKGh3LT5yeCkKKwkJCWh3LT5yeFtjb3VudF0gPSByZWFkYihody0+cmVncyArIFMzQzI0MTBfU1BSREFUKTsKIAotCWNvdW50Kys7CisJCWNvdW50Kys7CiAKLQlpZiAoY291bnQgPCBody0+bGVuKQotCQl3cml0ZWIoaHdfdHhieXRlKGh3LCBjb3VudCksIGh3LT5yZWdzICsgUzNDMjQxMF9TUFREQVQpOwotCWVsc2UKKwkJaWYgKGNvdW50IDwgaHctPmxlbikKKwkJCXdyaXRlYihod190eGJ5dGUoaHcsIGNvdW50KSwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQVERBVCk7CisJCWVsc2UKKwkJCWNvbXBsZXRlKCZody0+ZG9uZSk7CisJfSBlbHNlIHsKKwkJaHctPmNvdW50ID0gaHctPmxlbjsKKwkJaHctPmZpcV9pbnVzZSA9IDA7CisKKwkJaWYgKGh3LT5yeCkKKwkJCWh3LT5yeFtody0+bGVuLTFdID0gcmVhZGIoaHctPnJlZ3MgKyBTM0MyNDEwX1NQUkRBVCk7CisKIAkJY29tcGxldGUoJmh3LT5kb25lKTsKKwl9CiAKICBpcnFfZG9uZToKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMjIsNiArNTM2LDEwIEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOwogCWluaXRfY29tcGxldGlvbigmaHctPmRvbmUpOwogCisJLyogaW5pdGlhbGlzZSBmaXEgaGFuZGxlciAqLworCisJczNjMjR4eF9zcGlfaW5pdGZpcShodyk7CisKIAkvKiBzZXR1cCB0aGUgbWFzdGVyIHN0YXRlLiAqLwogCiAJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9maXEuUyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2ZpcS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTNjYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9maXEuUwpAQCAtMCwwICsxLDExNiBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIFNQSSAtIEZJUSBwc2V1ZG8tRE1BIHRyYW5zZmVyIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3BpLmg+CisKKyNpbmNsdWRlICJzcGlfczNjMjR4eF9maXEuaCIKKworCS50ZXh0CisKKwlAIGVudHJ5IHRvIHRoZXNlIHJvdXRpbmVzIGlzIGFzIGZvbGxvd3MsIHdpdGggdGhlIHJlZ2lzdGVyIG5hbWVzCisJQCBkZWZpbmVkIGluIGZpcS5oIHNvIHRoYXQgdGhleSBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIEMgZmlsZXMgd2hpY2gKKwlAIHNldHVwIHRoZSBjYWxsaW5nIHJlZ2lzdGVycy4KKwlACisJQCBmaXFfcmlycQlUaGUgYmFzZSBvZiB0aGUgSVJRIHJlZ2lzdGVycyB0byBmaW5kIFMzQzI0MTBfU1JDUE5ECisJQCBmaXFfcnRtcAlUZW1wb3JhcnkgcmVnaXN0ZXIgdG8gaG9sZCB0eC9yeCBkYXRhCisJQCBmaXFfcnNwaQlUaGUgYmFzZSBvZiB0aGUgU1BJIHJlZ2lzdGVyIGJsb2NrCisJQCBmaXFfcnR4CVRoZSB0eCBidWZmZXIgcG9pbnRlcgorCUAgZmlxX3JyeAlUaGUgcnggYnVmZmVyIHBvaW50ZXIKKwlAIGZpcV9yY291bnQJVGhlIG51bWJlciBvZiBieXRlcyB0byBtb3ZlCisKKwlAIGVhY2ggZW50cnkgc3RhcnRzIHdpdGggYSB3b3JkIGVudHJ5IG9mIGhvdyBsb25nIGl0IGlzCisJQCBhbmQgYW4gb2Zmc2V0IHRvIHRoZSBpcnEgYWNrbm93bGVkZ21lbnQgd29yZAorCitFTlRSWShzM2MyNHh4X3NwaV9maXFfcngpCitzM2MyNHh4X3NwaV9maXhfcng6CisJLndvcmQJZmlxX3J4X2VuZCAtIGZpcV9yeF9zdGFydAorCS53b3JkCWZpcV9yeF9pcnFfYWNrIC0gZmlxX3J4X3N0YXJ0CitmaXFfcnhfc3RhcnQ6CisJbGRyCWZpcV9ydG1wLCBmaXFfcnhfaXJxX2FjaworCXN0cglmaXFfcnRtcCwgWyBmaXFfcmlycSwgIyBTM0MyNDEwX1NSQ1BORCAtIFMzQzI0WFhfVkFfSVJRIF0KKworCWxkcmIJZmlxX3J0bXAsIFsgZmlxX3JzcGksICMgIFMzQzI0MTBfU1BSREFUIF0KKwlzdHJiCWZpcV9ydG1wLCBbIGZpcV9ycnggXSwgIzEKKworCW1vdglmaXFfcnRtcCwgIzB4ZmYKKwlzdHJiCWZpcV9ydG1wLCBbIGZpcV9yc3BpLCAjIFMzQzI0MTBfU1BUREFUIF0KKworCXN1YnMJZmlxX3Jjb3VudCwgZmlxX3Jjb3VudCwgIzEKKwlzdWJuZXMJcGMsIGxyLCAjNAkJQEAgcmV0dXJuLCBzdGlsbCBoYXZlIHdvcmsgdG8gZG8KKworCUBAIHNldCBJUlEgY29udHJvbGxlciBzbyB0aGF0IG5leHQgb3Agd2lsbCB0cmlnZ2VyIElSUQorCW1vdglmaXFfcnRtcCwgIzAKKwlzdHIJZmlxX3J0bXAsIFsgZmlxX3JpcnEsICMgUzNDMjQxMF9JTlRNT0QgIC0gUzNDMjRYWF9WQV9JUlEgXQorCXN1YnMJcGMsIGxyLCAjNAorCitmaXFfcnhfaXJxX2FjazoKKwkud29yZAkwCitmaXFfcnhfZW5kOgorCitFTlRSWShzM2MyNHh4X3NwaV9maXFfdHhyeCkKK3MzYzI0eHhfc3BpX2ZpcV90eHJ4OgorCS53b3JkCWZpcV90eHJ4X2VuZCAtIGZpcV90eHJ4X3N0YXJ0CisJLndvcmQJZmlxX3R4cnhfaXJxX2FjayAtIGZpcV90eHJ4X3N0YXJ0CitmaXFfdHhyeF9zdGFydDoKKworCWxkcmIJZmlxX3J0bXAsIFsgZmlxX3JzcGksICMgIFMzQzI0MTBfU1BSREFUIF0KKwlzdHJiCWZpcV9ydG1wLCBbIGZpcV9ycnggXSwgIzEKKworCWxkcglmaXFfcnRtcCwgZmlxX3R4cnhfaXJxX2FjaworCXN0cglmaXFfcnRtcCwgWyBmaXFfcmlycSwgIyBTM0MyNDEwX1NSQ1BORCAtIFMzQzI0WFhfVkFfSVJRIF0KKworCWxkcmIJZmlxX3J0bXAsIFsgZmlxX3J0eCBdLCAjMQorCXN0cmIJZmlxX3J0bXAsIFsgZmlxX3JzcGksICMgUzNDMjQxMF9TUFREQVQgXQorCisJc3VicwlmaXFfcmNvdW50LCBmaXFfcmNvdW50LCAjMQorCXN1Ym5lcwlwYywgbHIsICM0CQlAQCByZXR1cm4sIHN0aWxsIGhhdmUgd29yayB0byBkbworCisJbW92CWZpcV9ydG1wLCAjMAorCXN0cglmaXFfcnRtcCwgWyBmaXFfcmlycSwgIyBTM0MyNDEwX0lOVE1PRCAgLSBTM0MyNFhYX1ZBX0lSUSBdCisJc3VicwlwYywgbHIsICM0CisKK2ZpcV90eHJ4X2lycV9hY2s6CisJLndvcmQJMAorCitmaXFfdHhyeF9lbmQ6CisKK0VOVFJZKHMzYzI0eHhfc3BpX2ZpcV90eCkKK3MzYzI0eHhfc3BpX2ZpeF90eDoKKwkud29yZAlmaXFfdHhfZW5kIC0gZmlxX3R4X3N0YXJ0CisJLndvcmQJZmlxX3R4X2lycV9hY2sgLSBmaXFfdHhfc3RhcnQKK2ZpcV90eF9zdGFydDoKKwlsZHJiCWZpcV9ydG1wLCBbIGZpcV9yc3BpLCAjICBTM0MyNDEwX1NQUkRBVCBdCisKKwlsZHIJZmlxX3J0bXAsIGZpcV90eF9pcnFfYWNrCisJc3RyCWZpcV9ydG1wLCBbIGZpcV9yaXJxLCAjIFMzQzI0MTBfU1JDUE5EIC0gUzNDMjRYWF9WQV9JUlEgXQorCisJbGRyYglmaXFfcnRtcCwgWyBmaXFfcnR4IF0sICMxCisJc3RyYglmaXFfcnRtcCwgWyBmaXFfcnNwaSwgIyBTM0MyNDEwX1NQVERBVCBdCisKKwlzdWJzCWZpcV9yY291bnQsIGZpcV9yY291bnQsICMxCisJc3VibmVzCXBjLCBsciwgIzQJCUBAIHJldHVybiwgc3RpbGwgaGF2ZSB3b3JrIHRvIGRvCisKKwltb3YJZmlxX3J0bXAsICMwCisJc3RyCWZpcV9ydG1wLCBbIGZpcV9yaXJxLCAjIFMzQzI0MTBfSU5UTU9EICAtIFMzQzI0WFhfVkFfSVJRIF0KKwlzdWJzCXBjLCBsciwgIzQKKworZmlxX3R4X2lycV9hY2s6CisJLndvcmQJMAorCitmaXFfdHhfZW5kOgorCisJLmVuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLmggYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9maXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTk1MGJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZmlxLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIFNQSSAtIEZJUSBwc2V1ZG8tRE1BIHRyYW5zZmVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogV2UgaGF2ZSBSOCB0aHJvdWdoIFIxMyB0byBwbGF5IHdpdGggKi8KKworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfX1JFR19OUih4KSAgICAgciMjeAorI2Vsc2UKKyNkZWZpbmUgX19SRUdfTlIoeCkgICAgICh4KQorI2VuZGlmCisKKyNkZWZpbmUgZmlxX3JzcGkJX19SRUdfTlIoOCkKKyNkZWZpbmUgZmlxX3J0bXAJX19SRUdfTlIoOSkKKyNkZWZpbmUgZmlxX3JyeAkJX19SRUdfTlIoMTApCisjZGVmaW5lIGZpcV9ydHgJCV9fUkVHX05SKDExKQorI2RlZmluZSBmaXFfcmNvdW50CV9fUkVHX05SKDEyKQorI2RlZmluZSBmaXFfcmlycQlfX1JFR19OUigxMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTQ1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCkBAIC0wLDAgKzEsMTE5NiBAQAorLyogbGludXgvZHJpdmVycy9zcGkvc3BpX3MzYzY0eHguYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4KKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvc3BpLmg+CisKKy8qIFJlZ2lzdGVycyBhbmQgYml0LWZpZWxkcyAqLworCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX0NGRwkJMHgwMAorI2RlZmluZSBTM0M2NFhYX1NQSV9DTEtfQ0ZHCQkweDA0CisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQ0ZHCTB4MDgKKyNkZWZpbmUgUzNDNjRYWF9TUElfU0xBVkVfU0VMCTB4MEMKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX0VOCQkweDEwCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUQVRVUwkJMHgxNAorI2RlZmluZSBTM0M2NFhYX1NQSV9UWF9EQVRBCQkweDE4CisjZGVmaW5lIFMzQzY0WFhfU1BJX1JYX0RBVEEJCTB4MUMKKyNkZWZpbmUgUzNDNjRYWF9TUElfUEFDS0VUX0NOVAkweDIwCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BFTkRJTkdfQ0xSCTB4MjQKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9DRkcJMHgyOAorI2RlZmluZSBTM0M2NFhYX1NQSV9GQl9DTEsJCTB4MkMKKworI2RlZmluZSBTM0M2NFhYX1NQSV9DSF9IU19FTgkJKDE8PDYpCS8qIEhpZ2ggU3BlZWQgRW5hYmxlICovCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX1NXX1JTVAkJKDE8PDUpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX1NMQVZFCQkoMTw8NCkKKyNkZWZpbmUgUzNDNjRYWF9TUElfQ1BPTF9MCQkoMTw8MykKKyNkZWZpbmUgUzNDNjRYWF9TUElfQ1BIQV9CCQkoMTw8MikKKyNkZWZpbmUgUzNDNjRYWF9TUElfQ0hfUlhDSF9PTgkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIX1RYQ0hfT04JCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NMS1NFTF9TUkNNU0sJKDM8PDkpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NMS1NFTF9TUkNTSEZUCTkKKyNkZWZpbmUgUzNDNjRYWF9TUElfRU5DTEtfRU5BQkxFCSgxPDw4KQorI2RlZmluZSBTM0M2NFhYX1NQSV9QU1JfTUFTSyAJCTB4ZmYKKworI2RlZmluZSBTM0M2NFhYX1NQSV9NT0RFX0NIX1RTWl9CWVRFCQkoMDw8MjkpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQ0hfVFNaX0hBTEZXT1JECSgxPDwyOSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfTU9ERV9DSF9UU1pfV09SRAkJKDI8PDI5KQorI2RlZmluZSBTM0M2NFhYX1NQSV9NT0RFX0NIX1RTWl9NQVNLCQkoMzw8MjkpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9CWVRFCQkoMDw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9IQUxGV09SRAkoMTw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9XT1JECQkoMjw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9NQVNLCQkoMzw8MTcpCisjZGVmaW5lIFMzQzY0WFhfU1BJX01PREVfUlhETUFfT04JCSgxPDwyKQorI2RlZmluZSBTM0M2NFhYX1NQSV9NT0RFX1RYRE1BX09OCQkoMTw8MSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfTU9ERV80QlVSU1QJCQkoMTw8MCkKKworI2RlZmluZSBTM0M2NFhYX1NQSV9TTEFWRV9BVVRPCQkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NMQVZFX1NJR19JTkFDVAkJKDE8PDApCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfQUNUKGMpIHdyaXRlbCgwLCAoYyktPnJlZ3MgKyBTM0M2NFhYX1NQSV9TTEFWRV9TRUwpCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfREVBQ1QoYykgd3JpdGVsKFMzQzY0WFhfU1BJX1NMQVZFX1NJR19JTkFDVCwgXAorCQkJCQkoYyktPnJlZ3MgKyBTM0M2NFhYX1NQSV9TTEFWRV9TRUwpCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX1RSQUlMSU5HX0VOCQkoMTw8NikKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX1JYX09WRVJSVU5fRU4JCSgxPDw1KQorI2RlZmluZSBTM0M2NFhYX1NQSV9JTlRfUlhfVU5ERVJSVU5fRU4JCSgxPDw0KQorI2RlZmluZSBTM0M2NFhYX1NQSV9JTlRfVFhfT1ZFUlJVTl9FTgkJKDE8PDMpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0lOVF9UWF9VTkRFUlJVTl9FTgkJKDE8PDIpCisjZGVmaW5lIFMzQzY0WFhfU1BJX0lOVF9SWF9GSUZPUkRZX0VOCQkoMTw8MSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfSU5UX1RYX0ZJRk9SRFlfRU4JCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1JYX09WRVJSVU5fRVJSCQkoMTw8NSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1RfUlhfVU5ERVJSVU5fRVJSCSgxPDw0KQorI2RlZmluZSBTM0M2NFhYX1NQSV9TVF9UWF9PVkVSUlVOX0VSUgkJKDE8PDMpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1RYX1VOREVSUlVOX0VSUgkoMTw8MikKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1RfUlhfRklGT1JEWQkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1RYX0ZJRk9SRFkJCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BBQ0tFVF9DTlRfRU4JCSgxPDwxNikKKworI2RlZmluZSBTM0M2NFhYX1NQSV9QTkRfVFhfVU5ERVJSVU5fQ0xSCQkoMTw8NCkKKyNkZWZpbmUgUzNDNjRYWF9TUElfUE5EX1RYX09WRVJSVU5fQ0xSCQkoMTw8MykKKyNkZWZpbmUgUzNDNjRYWF9TUElfUE5EX1JYX1VOREVSUlVOX0NMUgkJKDE8PDIpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BORF9SWF9PVkVSUlVOX0NMUgkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1BORF9UUkFJTElOR19DTFIJCSgxPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfUlhfSEFMRl9XT1JECQkoMTw8NykKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9SWF9CWVRFCQkoMTw8NikKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9SWF9CSVQJCQkoMTw8NSkKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1dBUF9SWF9FTgkJCSgxPDw0KQorI2RlZmluZSBTM0M2NFhYX1NQSV9TV0FQX1RYX0hBTEZfV09SRAkJKDE8PDMpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfVFhfQllURQkJKDE8PDIpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfVFhfQklUCQkJKDE8PDEpCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NXQVBfVFhfRU4JCQkoMTw8MCkKKworI2RlZmluZSBTM0M2NFhYX1NQSV9GQkNMS19NU0sJCSgzPDwwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NUX1RSTENOVFoodiwgaSkgKCgoKHYpID4+IChpKS0+cnhfbHZsX29mZnNldCkgJiBcCisJCQkJCSgoKGkpLT5maWZvX2x2bF9tYXNrICsgMSkpKSBcCisJCQkJCT8gMSA6IDApCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1RfVFhfRE9ORSh2LCBpKSAoKCgodikgPj4gKGkpLT5yeF9sdmxfb2Zmc2V0KSAmIFwKKwkJCQkJKCgoaSktPmZpZm9fbHZsX21hc2sgKyAxKSA8PCAxKSkgXAorCQkJCQk/IDEgOiAwKQorI2RlZmluZSBUWF9GSUZPX0xWTCh2LCBpKSAoKCh2KSA+PiA2KSAmIChpKS0+Zmlmb19sdmxfbWFzaykKKyNkZWZpbmUgUlhfRklGT19MVkwodiwgaSkgKCgodikgPj4gKGkpLT5yeF9sdmxfb2Zmc2V0KSAmIChpKS0+Zmlmb19sdmxfbWFzaykKKworI2RlZmluZSBTM0M2NFhYX1NQSV9NQVhfVFJBSUxDTlQJMHgzZmYKKyNkZWZpbmUgUzNDNjRYWF9TUElfVFJBSUxDTlRfT0ZGCTE5CisKKyNkZWZpbmUgUzNDNjRYWF9TUElfVFJBSUxDTlQJCVMzQzY0WFhfU1BJX01BWF9UUkFJTENOVAorCisjZGVmaW5lIG1zZWNzX3RvX2xvb3BzKHQpIChsb29wc19wZXJfamlmZnkgLyAxMDAwICogSFogKiB0KQorCisjZGVmaW5lIFNVU1BORCAgICAoMTw8MCkKKyNkZWZpbmUgU1BJQlVTWSAgICgxPDwxKQorI2RlZmluZSBSWEJVU1kgICAgKDE8PDIpCisjZGVmaW5lIFRYQlVTWSAgICAoMTw8MykKKworLyoqCisgKiBzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgLSBSdW50aW1lIGluZm8gaG9sZGVyIGZvciBTUEkgZHJpdmVyLgorICogQGNsazogUG9pbnRlciB0byB0aGUgc3BpIGNsb2NrLgorICogQG1hc3RlcjogUG9pbnRlciB0byB0aGUgU1BJIFByb3RvY29sIG1hc3Rlci4KKyAqIEB3b3JrcXVldWU6IFdvcmsgcXVldWUgZm9yIHRoZSBTUEkgeGZlciByZXF1ZXN0cy4KKyAqIEBjbnRybHJfaW5mbzogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGNvbnRyb2xsZXIgdGhpcyBkcml2ZXIgbWFuYWdlcy4KKyAqIEB0Z2xfc3BpOiBQb2ludGVyIHRvIHRoZSBsYXN0IENTIGxlZnQgdW50b2dnbGVkIGJ5IHRoZSBjc19jaGFuZ2UgaGludC4KKyAqIEB3b3JrOiBXb3JrCisgKiBAcXVldWU6IFRvIGxvZyBTUEkgeGZlciByZXF1ZXN0cy4KKyAqIEBsb2NrOiBDb250cm9sbGVyIHNwZWNpZmljIGxvY2suCisgKiBAc3RhdGU6IFNldCBvZiBGTEFHUyB0byBpbmRpY2F0ZSBzdGF0dXMuCisgKiBAcnhfZG1hY2g6IENvbnRyb2xsZXIncyBETUEgY2hhbm5lbCBmb3IgUnguCisgKiBAdHhfZG1hY2g6IENvbnRyb2xsZXIncyBETUEgY2hhbm5lbCBmb3IgVHguCisgKiBAc2ZyX3N0YXJ0OiBCVVMgYWRkcmVzcyBvZiBTUEkgY29udHJvbGxlciByZWdzLgorICogQHJlZ3M6IFBvaW50ZXIgdG8gaW9yZW1hcCdlZCBjb250cm9sbGVyIHJlZ2lzdGVycy4KKyAqIEB4ZmVyX2NvbXBsZXRpb246IFRvIGluZGljYXRlIGNvbXBsZXRpb24gb2YgeGZlciB0YXNrLgorICogQGN1cl9tb2RlOiBTdG9yZXMgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjb250cm9sbGVyLgorICogQGN1cl9icHc6IFN0b3JlcyB0aGUgYWN0aXZlIGJpdHMgcGVyIHdvcmQgc2V0dGluZ3MuCisgKiBAY3VyX3NwZWVkOiBTdG9yZXMgdGhlIGFjdGl2ZSB4ZmVyIGNsb2NrIHNwZWVkLgorICovCitzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgeworCXZvaWQgX19pb21lbSAgICAgICAgICAgICAgICAgICAgKnJlZ3M7CisJc3RydWN0IGNsayAgICAgICAgICAgICAgICAgICAgICAqY2xrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICAgICAgICAgKnBkZXY7CisJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgICAgICAgICAqbWFzdGVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSAgICAgICAgKndvcmtxdWV1ZTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gICpjbnRybHJfaW5mbzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAgICAgICAgICAgICAgICp0Z2xfc3BpOworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIHF1ZXVlOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICAgICAgbG9jazsKKwllbnVtIGRtYV9jaCAgICAgICAgICAgICAgICAgICAgIHJ4X2RtYWNoOworCWVudW0gZG1hX2NoICAgICAgICAgICAgICAgICAgICAgdHhfZG1hY2g7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICBzZnJfc3RhcnQ7CisJc3RydWN0IGNvbXBsZXRpb24gICAgICAgICAgICAgICB4ZmVyX2NvbXBsZXRpb247CisJdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9tb2RlLCBjdXJfYnB3OworCXVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3NwZWVkOworfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjNjR4eF9zcGlfZG1hX2NsaWVudCA9IHsKKwkubmFtZSA9ICJzYW1zdW5nLXNwaS1kbWEiLAorfTsKKworc3RhdGljIHZvaWQgZmx1c2hfZmlmbyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgbG9vcHM7CisJdTMyIHZhbDsKKworCXdyaXRlbCgwLCByZWdzICsgUzNDNjRYWF9TUElfUEFDS0VUX0NOVCk7CisKKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKwl2YWwgfD0gUzNDNjRYWF9TUElfQ0hfU1dfUlNUOworCXZhbCAmPSB+UzNDNjRYWF9TUElfQ0hfSFNfRU47CisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX0NIX0NGRyk7CisKKwkvKiBGbHVzaCBUeEZJRk8qLworCWxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMSk7CisJZG8geworCQl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfU1RBVFVTKTsKKwl9IHdoaWxlIChUWF9GSUZPX0xWTCh2YWwsIHNjaSkgJiYgbG9vcHMtLSk7CisKKwkvKiBGbHVzaCBSeEZJRk8qLworCWxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMSk7CisJZG8geworCQl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfU1RBVFVTKTsKKwkJaWYgKFJYX0ZJRk9fTFZMKHZhbCwgc2NpKSkKKwkJCXJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9SWF9EQVRBKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfSB3aGlsZSAobG9vcHMtLSk7CisKKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKwl2YWwgJj0gflMzQzY0WFhfU1BJX0NIX1NXX1JTVDsKKwl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9NT0RFX0NGRyk7CisJdmFsICY9IH4oUzNDNjRYWF9TUElfTU9ERV9UWERNQV9PTiB8IFMzQzY0WFhfU1BJX01PREVfUlhETUFfT04pOworCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9NT0RFX0NGRyk7CisKKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKwl2YWwgJj0gfihTM0M2NFhYX1NQSV9DSF9SWENIX09OIHwgUzNDNjRYWF9TUElfQ0hfVFhDSF9PTik7CisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX0NIX0NGRyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9kYXRhcGF0aChzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKKwkJCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIsIGludCBkbWFfbW9kZSkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXUzMiBtb2RlY2ZnLCBjaGNmZzsKKworCW1vZGVjZmcgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCW1vZGVjZmcgJj0gfihTM0M2NFhYX1NQSV9NT0RFX1RYRE1BX09OIHwgUzNDNjRYWF9TUElfTU9ERV9SWERNQV9PTik7CisKKwljaGNmZyA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DSF9DRkcpOworCWNoY2ZnICY9IH5TM0M2NFhYX1NQSV9DSF9UWENIX09OOworCisJaWYgKGRtYV9tb2RlKSB7CisJCWNoY2ZnICY9IH5TM0M2NFhYX1NQSV9DSF9SWENIX09OOworCX0gZWxzZSB7CisJCS8qIEFsd2F5cyBzaGlmdCBpbiBkYXRhIGluIEZJRk8sIGV2ZW4gaWYgeGZlciBpcyBUeCBvbmx5LAorCQkgKiB0aGlzIGhlbHBzIHNldHRpbmcgUENLVF9DTlQgdmFsdWUgZm9yIGdlbmVyYXRpbmcgY2xvY2tzCisJCSAqIGFzIGV4YWN0bHkgbmVlZGVkLgorCQkgKi8KKwkJY2hjZmcgfD0gUzNDNjRYWF9TUElfQ0hfUlhDSF9PTjsKKwkJd3JpdGVsKCgoeGZlci0+bGVuICogOCAvIHNkZC0+Y3VyX2JwdykgJiAweGZmZmYpCisJCQkJCXwgUzNDNjRYWF9TUElfUEFDS0VUX0NOVF9FTiwKKwkJCQkJcmVncyArIFMzQzY0WFhfU1BJX1BBQ0tFVF9DTlQpOworCX0KKworCWlmICh4ZmVyLT50eF9idWYgIT0gTlVMTCkgeworCQlzZGQtPnN0YXRlIHw9IFRYQlVTWTsKKwkJY2hjZmcgfD0gUzNDNjRYWF9TUElfQ0hfVFhDSF9PTjsKKwkJaWYgKGRtYV9tb2RlKSB7CisJCQltb2RlY2ZnIHw9IFMzQzY0WFhfU1BJX01PREVfVFhETUFfT047CisJCQlzM2MyNDEwX2RtYV9jb25maWcoc2RkLT50eF9kbWFjaCwgMSk7CisJCQlzM2MyNDEwX2RtYV9lbnF1ZXVlKHNkZC0+dHhfZG1hY2gsICh2b2lkICopc2RkLAorCQkJCQkJeGZlci0+dHhfZG1hLCB4ZmVyLT5sZW4pOworCQkJczNjMjQxMF9kbWFfY3RybChzZGQtPnR4X2RtYWNoLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHhmZXItPnR4X2J1ZjsKKwkJCWludCBpID0gMDsKKwkJCXdoaWxlIChpIDwgeGZlci0+bGVuKQorCQkJCXdyaXRlYihidWZbaSsrXSwgcmVncyArIFMzQzY0WFhfU1BJX1RYX0RBVEEpOworCQl9CisJfQorCisJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMKSB7CisJCXNkZC0+c3RhdGUgfD0gUlhCVVNZOworCisJCWlmIChzY2ktPmhpZ2hfc3BlZWQgJiYgc2RkLT5jdXJfc3BlZWQgPj0gMzAwMDAwMDBVTAorCQkJCQkmJiAhKHNkZC0+Y3VyX21vZGUgJiBTUElfQ1BIQSkpCisJCQljaGNmZyB8PSBTM0M2NFhYX1NQSV9DSF9IU19FTjsKKworCQlpZiAoZG1hX21vZGUpIHsKKwkJCW1vZGVjZmcgfD0gUzNDNjRYWF9TUElfTU9ERV9SWERNQV9PTjsKKwkJCWNoY2ZnIHw9IFMzQzY0WFhfU1BJX0NIX1JYQ0hfT047CisJCQl3cml0ZWwoKCh4ZmVyLT5sZW4gKiA4IC8gc2RkLT5jdXJfYnB3KSAmIDB4ZmZmZikKKwkJCQkJfCBTM0M2NFhYX1NQSV9QQUNLRVRfQ05UX0VOLAorCQkJCQlyZWdzICsgUzNDNjRYWF9TUElfUEFDS0VUX0NOVCk7CisJCQlzM2MyNDEwX2RtYV9jb25maWcoc2RkLT5yeF9kbWFjaCwgMSk7CisJCQlzM2MyNDEwX2RtYV9lbnF1ZXVlKHNkZC0+cnhfZG1hY2gsICh2b2lkICopc2RkLAorCQkJCQkJeGZlci0+cnhfZG1hLCB4ZmVyLT5sZW4pOworCQkJczNjMjQxMF9kbWFfY3RybChzZGQtPnJ4X2RtYWNoLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKKwkJfQorCX0KKworCXdyaXRlbChtb2RlY2ZnLCByZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCXdyaXRlbChjaGNmZywgcmVncyArIFMzQzY0WFhfU1BJX0NIX0NGRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfY3Moc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzOworCisJaWYgKHNkZC0+dGdsX3NwaSAhPSBOVUxMKSB7IC8qIElmIGxhc3QgZGV2aWNlIHRvZ2dsZWQgYWZ0ZXIgbXNzZyAqLworCQlpZiAoc2RkLT50Z2xfc3BpICE9IHNwaSkgeyAvKiBpZiBsYXN0IG1zc2cgb24gZGlmZiBkZXZpY2UgKi8KKwkJCS8qIERlc2VsZWN0IHRoZSBsYXN0IHRvZ2dsZWQgZGV2aWNlICovCisJCQljcyA9IHNkZC0+dGdsX3NwaS0+Y29udHJvbGxlcl9kYXRhOworCQkJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKKwkJfQorCQlzZGQtPnRnbF9zcGkgPSBOVUxMOworCX0KKworCWNzID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwKTsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl94ZmVyKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLAorCQkJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIsIGludCBkbWFfbW9kZSkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBtczsKKworCS8qIG1pbGxpc2VjcyB0byB4ZmVyICdsZW4nIGJ5dGVzIEAgJ2N1cl9zcGVlZCcgKi8KKwltcyA9IHhmZXItPmxlbiAqIDggKiAxMDAwIC8gc2RkLT5jdXJfc3BlZWQ7CisJbXMgKz0gNTsgLyogc29tZSB0b2xlcmFuY2UgKi8KKworCWlmIChkbWFfbW9kZSkgeworCQl2YWwgPSBtc2Vjc190b19qaWZmaWVzKG1zKSArIDEwOworCQl2YWwgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNkZC0+eGZlcl9jb21wbGV0aW9uLCB2YWwpOworCX0gZWxzZSB7CisJCXZhbCA9IG1zZWNzX3RvX2xvb3BzKG1zKTsKKwkJZG8geworCQkJdmFsID0gcmVhZGwocmVncyArIFMzQzY0WFhfU1BJX1NUQVRVUyk7CisJCX0gd2hpbGUgKFJYX0ZJRk9fTFZMKHZhbCwgc2NpKSA8IHhmZXItPmxlbiAmJiAtLXZhbCk7CisJfQorCisJaWYgKCF2YWwpCisJCXJldHVybiAtRUlPOworCisJaWYgKGRtYV9tb2RlKSB7CisJCXUzMiBzdGF0dXM7CisKKwkJLyoKKwkJICogRG1hVHggcmV0dXJucyBhZnRlciBzaW1wbHkgd3JpdGluZyBkYXRhIGluIHRoZSBGSUZPLAorCQkgKiB3L28gd2FpdGluZyBmb3IgcmVhbCB0cmFuc21pc3Npb24gb24gdGhlIGJ1cyB0byBmaW5pc2guCisJCSAqIERtYVJ4IHJldHVybnMgb25seSBhZnRlciBEbWEgcmVhZCBkYXRhIGZyb20gRklGTyB3aGljaAorCQkgKiBuZWVkcyBidXMgdHJhbnNtaXNzaW9uIHRvIGZpbmlzaCwgc28gd2UgZG9uJ3Qgd29ycnkgaWYKKwkJICogWGZlciBpbnZvbHZlZCBSeCh3aXRoIG9yIHdpdGhvdXQgVHgpLgorCQkgKi8KKwkJaWYgKHhmZXItPnJ4X2J1ZiA9PSBOVUxMKSB7CisJCQl2YWwgPSBtc2Vjc190b19sb29wcygxMCk7CisJCQlzdGF0dXMgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfU1RBVFVTKTsKKwkJCXdoaWxlICgoVFhfRklGT19MVkwoc3RhdHVzLCBzY2kpCisJCQkJfHwgIVMzQzY0WFhfU1BJX1NUX1RYX0RPTkUoc3RhdHVzLCBzY2kpKQorCQkJCQkmJiAtLXZhbCkgeworCQkJCWNwdV9yZWxheCgpOworCQkJCXN0YXR1cyA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9TVEFUVVMpOworCQkJfQorCisJCQlpZiAoIXZhbCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwkJaW50IGk7CisKKwkJLyogSWYgaXQgd2FzIG9ubHkgVHggKi8KKwkJaWYgKHhmZXItPnJ4X2J1ZiA9PSBOVUxMKSB7CisJCQlzZGQtPnN0YXRlICY9IH5UWEJVU1k7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWkgPSAwOworCQlidWYgPSB4ZmVyLT5yeF9idWY7CisJCXdoaWxlIChpIDwgeGZlci0+bGVuKQorCQkJYnVmW2krK10gPSByZWFkYihyZWdzICsgUzNDNjRYWF9TUElfUlhfREFUQSk7CisKKwkJc2RkLT5zdGF0ZSAmPSB+UlhCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9jcyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKKwkJCQkJCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NzaW5mbyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKKworCWlmIChzZGQtPnRnbF9zcGkgPT0gc3BpKQorCQlzZGQtPnRnbF9zcGkgPSBOVUxMOworCisJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKK30KKworc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfY29uZmlnKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CisJdTMyIHZhbDsKKworCS8qIERpc2FibGUgQ2xvY2sgKi8KKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfQ0xLX0NGRyk7CisJdmFsICY9IH5TM0M2NFhYX1NQSV9FTkNMS19FTkFCTEU7CisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX0NMS19DRkcpOworCisJLyogU2V0IFBvbGFyaXR5IGFuZCBQaGFzZSAqLworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DSF9DRkcpOworCXZhbCAmPSB+KFMzQzY0WFhfU1BJX0NIX1NMQVZFIHwKKwkJCVMzQzY0WFhfU1BJX0NQT0xfTCB8CisJCQlTM0M2NFhYX1NQSV9DUEhBX0IpOworCisJaWYgKHNkZC0+Y3VyX21vZGUgJiBTUElfQ1BPTCkKKwkJdmFsIHw9IFMzQzY0WFhfU1BJX0NQT0xfTDsKKworCWlmIChzZGQtPmN1cl9tb2RlICYgU1BJX0NQSEEpCisJCXZhbCB8PSBTM0M2NFhYX1NQSV9DUEhBX0I7CisKKwl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfQ0hfQ0ZHKTsKKworCS8qIFNldCBDaGFubmVsICYgRE1BIE1vZGUgKi8KKwl2YWwgPSByZWFkbChyZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCXZhbCAmPSB+KFMzQzY0WFhfU1BJX01PREVfQlVTX1RTWl9NQVNLCisJCQl8IFMzQzY0WFhfU1BJX01PREVfQ0hfVFNaX01BU0spOworCisJc3dpdGNoIChzZGQtPmN1cl9icHcpIHsKKwljYXNlIDMyOgorCQl2YWwgfD0gUzNDNjRYWF9TUElfTU9ERV9CVVNfVFNaX1dPUkQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCB8PSBTM0M2NFhYX1NQSV9NT0RFX0JVU19UU1pfSEFMRldPUkQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSBTM0M2NFhYX1NQSV9NT0RFX0JVU19UU1pfQllURTsKKwkJYnJlYWs7CisJfQorCXZhbCB8PSBTM0M2NFhYX1NQSV9NT0RFX0NIX1RTWl9CWVRFOyAvKiBBbHdheXMgOGJpdHMgd2lkZSAqLworCisJd3JpdGVsKHZhbCwgcmVncyArIFMzQzY0WFhfU1BJX01PREVfQ0ZHKTsKKworCS8qIENvbmZpZ3VyZSBDbG9jayAqLworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKKwl2YWwgJj0gflMzQzY0WFhfU1BJX1BTUl9NQVNLOworCXZhbCB8PSAoKGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gc2RkLT5jdXJfc3BlZWQgLyAyIC0gMSkKKwkJCSYgUzNDNjRYWF9TUElfUFNSX01BU0spOworCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKKworCS8qIEVuYWJsZSBDbG9jayAqLworCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKKwl2YWwgfD0gUzNDNjRYWF9TUElfRU5DTEtfRU5BQkxFOworCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKK30KKwordm9pZCBzM2M2NHh4X3NwaV9kbWFfcnhjYihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwgdm9pZCAqYnVmX2lkLAorCQkJCWludCBzaXplLCBlbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gYnVmX2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocmVzID09IFMzQzI0MTBfUkVTX09LKQorCQlzZGQtPnN0YXRlICY9IH5SWEJVU1k7CisJZWxzZQorCQlkZXZfZXJyKCZzZGQtPnBkZXYtPmRldiwgIkRtYUFicnRSeC0lZFxuIiwgc2l6ZSk7CisKKwkvKiBJZiB0aGUgb3RoZXIgZG9uZSAqLworCWlmICghKHNkZC0+c3RhdGUgJiBUWEJVU1kpKQorCQljb21wbGV0ZSgmc2RkLT54ZmVyX2NvbXBsZXRpb24pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgczNjNjR4eF9zcGlfZG1hX3R4Y2Ioc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmJ1Zl9pZCwKKwkJCQlpbnQgc2l6ZSwgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlcykKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IGJ1Zl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJlcyA9PSBTM0MyNDEwX1JFU19PSykKKwkJc2RkLT5zdGF0ZSAmPSB+VFhCVVNZOworCWVsc2UKKwkJZGV2X2Vycigmc2RkLT5wZGV2LT5kZXYsICJEbWFBYnJ0VHgtJWQgXG4iLCBzaXplKTsKKworCS8qIElmIHRoZSBvdGhlciBkb25lICovCisJaWYgKCEoc2RkLT5zdGF0ZSAmIFJYQlVTWSkpCisJCWNvbXBsZXRlKCZzZGQtPnhmZXJfY29tcGxldGlvbik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKK30KKworI2RlZmluZSBYRkVSX0RNQUFERFJfSU5WQUxJRCBETUFfQklUX01BU0soMzIpCisKK3N0YXRpYyBpbnQgczNjNjR4eF9zcGlfbWFwX21zc2coc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2RkLT5wZGV2LT5kZXY7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKworCWlmIChtc2ctPmlzX2RtYV9tYXBwZWQpCisJCXJldHVybiAwOworCisJLyogRmlyc3QgbWFyayBhbGwgeGZlciB1bm1hcHBlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisJCXhmZXItPnJ4X2RtYSA9IFhGRVJfRE1BQUREUl9JTlZBTElEOworCQl4ZmVyLT50eF9kbWEgPSBYRkVSX0RNQUFERFJfSU5WQUxJRDsKKwl9CisKKwkvKiBNYXAgdW50aWwgZW5kIG9yIGZpcnN0IGZhaWwgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCisJCWlmICh4ZmVyLT50eF9idWYgIT0gTlVMTCkgeworCQkJeGZlci0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCB4ZmVyLT50eF9idWYsCisJCQkJCQl4ZmVyLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgeGZlci0+dHhfZG1hKSkgeworCQkJCWRldl9lcnIoZGV2LCAiZG1hX21hcF9zaW5nbGUgVHggZmFpbGVkXG4iKTsKKwkJCQl4ZmVyLT50eF9kbWEgPSBYRkVSX0RNQUFERFJfSU5WQUxJRDsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCisJCWlmICh4ZmVyLT5yeF9idWYgIT0gTlVMTCkgeworCQkJeGZlci0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCB4ZmVyLT5yeF9idWYsCisJCQkJCQl4ZmVyLT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCB4ZmVyLT5yeF9kbWEpKSB7CisJCQkJZGV2X2VycihkZXYsICJkbWFfbWFwX3NpbmdsZSBSeCBmYWlsZWRcbiIpOworCQkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCB4ZmVyLT50eF9kbWEsCisJCQkJCQl4ZmVyLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCQkJCXhmZXItPnR4X2RtYSA9IFhGRVJfRE1BQUREUl9JTlZBTElEOworCQkJCXhmZXItPnJ4X2RtYSA9IFhGRVJfRE1BQUREUl9JTlZBTElEOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzY0eHhfc3BpX3VubWFwX21zc2coc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2RkLT5wZGV2LT5kZXY7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKworCWlmIChtc2ctPmlzX2RtYV9tYXBwZWQpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisKKwkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMCisJCQkJJiYgeGZlci0+cnhfZG1hICE9IFhGRVJfRE1BQUREUl9JTlZBTElEKQorCQkJZG1hX3VubWFwX3NpbmdsZShkZXYsIHhmZXItPnJ4X2RtYSwKKwkJCQkJCXhmZXItPmxlbiwgRE1BX0ZST01fREVWSUNFKTsKKworCQlpZiAoeGZlci0+dHhfYnVmICE9IE5VTEwKKwkJCQkmJiB4ZmVyLT50eF9kbWEgIT0gWEZFUl9ETUFBRERSX0lOVkFMSUQpCisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgeGZlci0+dHhfZG1hLAorCQkJCQkJeGZlci0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9tc2coc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCisJCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbXNnLT5zcGk7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NzaW5mbyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOworCWludCBzdGF0dXMgPSAwLCBjc190b2dnbGUgPSAwOworCXUzMiBzcGVlZDsKKwl1OCBicHc7CisKKwkvKiBJZiBNYXN0ZXIncyhjb250cm9sbGVyKSBzdGF0ZSBkaWZmZXJzIGZyb20gdGhhdCBuZWVkZWQgYnkgU2xhdmUgKi8KKwlpZiAoc2RkLT5jdXJfc3BlZWQgIT0gc3BpLT5tYXhfc3BlZWRfaHoKKwkJCXx8IHNkZC0+Y3VyX21vZGUgIT0gc3BpLT5tb2RlCisJCQl8fCBzZGQtPmN1cl9icHcgIT0gc3BpLT5iaXRzX3Blcl93b3JkKSB7CisJCXNkZC0+Y3VyX2JwdyA9IHNwaS0+Yml0c19wZXJfd29yZDsKKwkJc2RkLT5jdXJfc3BlZWQgPSBzcGktPm1heF9zcGVlZF9oejsKKwkJc2RkLT5jdXJfbW9kZSA9IHNwaS0+bW9kZTsKKwkJczNjNjR4eF9zcGlfY29uZmlnKHNkZCk7CisJfQorCisJLyogTWFwIGFsbCB0aGUgdHJhbnNmZXJzIGlmIG5lZWRlZCAqLworCWlmIChzM2M2NHh4X3NwaV9tYXBfbXNzZyhzZGQsIG1zZykpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkiWGZlcjogVW5hYmxlIHRvIG1hcCBtZXNzYWdlIGJ1ZmZlcnMhXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ29uZmlndXJlIGZlZWRiYWNrIGRlbGF5ICovCisJd3JpdGVsKGNzLT5mYl9kZWxheSAmIDB4Mywgc2RkLT5yZWdzICsgUzNDNjRYWF9TUElfRkJfQ0xLKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IHVzZV9kbWE7CisKKwkJSU5JVF9DT01QTEVUSU9OKHNkZC0+eGZlcl9jb21wbGV0aW9uKTsKKworCQkvKiBPbmx5IEJQVyBhbmQgU3BlZWQgbWF5IGNoYW5nZSBhY3Jvc3MgdHJhbnNmZXJzICovCisJCWJwdyA9IHhmZXItPmJpdHNfcGVyX3dvcmQgPyA6IHNwaS0+Yml0c19wZXJfd29yZDsKKwkJc3BlZWQgPSB4ZmVyLT5zcGVlZF9oeiA/IDogc3BpLT5tYXhfc3BlZWRfaHo7CisKKwkJaWYgKGJwdyAhPSBzZGQtPmN1cl9icHcgfHwgc3BlZWQgIT0gc2RkLT5jdXJfc3BlZWQpIHsKKwkJCXNkZC0+Y3VyX2JwdyA9IGJwdzsKKwkJCXNkZC0+Y3VyX3NwZWVkID0gc3BlZWQ7CisJCQlzM2M2NHh4X3NwaV9jb25maWcoc2RkKTsKKwkJfQorCisJCS8qIFBvbGxpbmcgbWV0aG9kIGZvciB4ZmVycyBub3QgYmlnZ2VyIHRoYW4gRklGTyBjYXBhY2l0eSAqLworCQlpZiAoeGZlci0+bGVuIDw9ICgoc2NpLT5maWZvX2x2bF9tYXNrID4+IDEpICsgMSkpCisJCQl1c2VfZG1hID0gMDsKKwkJZWxzZQorCQkJdXNlX2RtYSA9IDE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZC0+bG9jaywgZmxhZ3MpOworCisJCS8qIFBlbmRpbmcgb25seSB3aGljaCBpcyB0byBiZSBkb25lICovCisJCXNkZC0+c3RhdGUgJj0gflJYQlVTWTsKKwkJc2RkLT5zdGF0ZSAmPSB+VFhCVVNZOworCisJCWVuYWJsZV9kYXRhcGF0aChzZGQsIHNwaSwgeGZlciwgdXNlX2RtYSk7CisKKwkJLyogU2xhdmUgU2VsZWN0ICovCisJCWVuYWJsZV9jcyhzZGQsIHNwaSk7CisKKwkJLyogU3RhcnQgdGhlIHNpZ25hbHMgKi8KKwkJUzNDNjRYWF9TUElfQUNUKHNkZCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwkJc3RhdHVzID0gd2FpdF9mb3JfeGZlcihzZGQsIHhmZXIsIHVzZV9kbWEpOworCisJCS8qIFF1aWVzZSB0aGUgc2lnbmFscyAqLworCQlTM0M2NFhYX1NQSV9ERUFDVChzZGQpOworCisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiSS9PIEVycm9yOiBcCisJCQkJcngtJWQgdHgtJWQgcmVzOnJ4LSVjIHR4LSVjIGxlbi0lZFxuIiwKKwkJCQl4ZmVyLT5yeF9idWYgPyAxIDogMCwgeGZlci0+dHhfYnVmID8gMSA6IDAsCisJCQkJKHNkZC0+c3RhdGUgJiBSWEJVU1kpID8gJ2YnIDogJ3AnLAorCQkJCShzZGQtPnN0YXRlICYgVFhCVVNZKSA/ICdmJyA6ICdwJywKKwkJCQl4ZmVyLT5sZW4pOworCisJCQlpZiAodXNlX2RtYSkgeworCQkJCWlmICh4ZmVyLT50eF9idWYgIT0gTlVMTAorCQkJCQkJJiYgKHNkZC0+c3RhdGUgJiBUWEJVU1kpKQorCQkJCQlzM2MyNDEwX2RtYV9jdHJsKHNkZC0+dHhfZG1hY2gsCisJCQkJCQkJUzNDMjQxMF9ETUFPUF9GTFVTSCk7CisJCQkJaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMCisJCQkJCQkmJiAoc2RkLT5zdGF0ZSAmIFJYQlVTWSkpCisJCQkJCXMzYzI0MTBfZG1hX2N0cmwoc2RkLT5yeF9kbWFjaCwKKwkJCQkJCQlTM0MyNDEwX0RNQU9QX0ZMVVNIKTsKKwkJCX0KKworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoeGZlci0+ZGVsYXlfdXNlY3MpCisJCQl1ZGVsYXkoeGZlci0+ZGVsYXlfdXNlY3MpOworCisJCWlmICh4ZmVyLT5jc19jaGFuZ2UpIHsKKwkJCS8qIEhpbnQgdGhhdCB0aGUgbmV4dCBtc3NnIGlzIGdvbm5hIGJlCisJCQkgICBmb3IgdGhlIHNhbWUgZGV2aWNlICovCisJCQlpZiAobGlzdF9pc19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0LAorCQkJCQkJJm1zZy0+dHJhbnNmZXJzKSkKKwkJCQljc190b2dnbGUgPSAxOworCQkJZWxzZQorCQkJCWRpc2FibGVfY3Moc2RkLCBzcGkpOworCQl9CisKKwkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IHhmZXItPmxlbjsKKworCQlmbHVzaF9maWZvKHNkZCk7CisJfQorCitvdXQ6CisJaWYgKCFjc190b2dnbGUgfHwgc3RhdHVzKQorCQlkaXNhYmxlX2NzKHNkZCwgc3BpKTsKKwllbHNlCisJCXNkZC0+dGdsX3NwaSA9IHNwaTsKKworCXMzYzY0eHhfc3BpX3VubWFwX21zc2coc2RkLCBtc2cpOworCisJbXNnLT5zdGF0dXMgPSBzdGF0dXM7CisKKwlpZiAobXNnLT5jb21wbGV0ZSkKKwkJbXNnLT5jb21wbGV0ZShtc2ctPmNvbnRleHQpOworfQorCitzdGF0aWMgaW50IGFjcXVpcmVfZG1hKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQoreworCWlmIChzM2MyNDEwX2RtYV9yZXF1ZXN0KHNkZC0+cnhfZG1hY2gsCisJCQkJCSZzM2M2NHh4X3NwaV9kbWFfY2xpZW50LCBOVUxMKSA8IDApIHsKKwkJZGV2X2Vycigmc2RkLT5wZGV2LT5kZXYsICJjYW5ub3QgZ2V0IFJ4RE1BXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihzZGQtPnJ4X2RtYWNoLCBzM2M2NHh4X3NwaV9kbWFfcnhjYik7CisJczNjMjQxMF9kbWFfZGV2Y29uZmlnKHNkZC0+cnhfZG1hY2gsIFMzQzI0MTBfRE1BU1JDX0hXLAorCQkJCQlzZGQtPnNmcl9zdGFydCArIFMzQzY0WFhfU1BJX1JYX0RBVEEpOworCisJaWYgKHMzYzI0MTBfZG1hX3JlcXVlc3Qoc2RkLT50eF9kbWFjaCwKKwkJCQkJJnMzYzY0eHhfc3BpX2RtYV9jbGllbnQsIE5VTEwpIDwgMCkgeworCQlkZXZfZXJyKCZzZGQtPnBkZXYtPmRldiwgImNhbm5vdCBnZXQgVHhETUFcbiIpOworCQlzM2MyNDEwX2RtYV9mcmVlKHNkZC0+cnhfZG1hY2gsICZzM2M2NHh4X3NwaV9kbWFfY2xpZW50KTsKKwkJcmV0dXJuIDA7CisJfQorCXMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbihzZGQtPnR4X2RtYWNoLCBzM2M2NHh4X3NwaV9kbWFfdHhjYik7CisJczNjMjQxMF9kbWFfZGV2Y29uZmlnKHNkZC0+dHhfZG1hY2gsIFMzQzI0MTBfRE1BU1JDX01FTSwKKwkJCQkJc2RkLT5zZnJfc3RhcnQgKyBTM0M2NFhYX1NQSV9UWF9EQVRBKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzM2M2NHh4X3NwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCQlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEsIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBBY3F1aXJlIERNQSBjaGFubmVscyAqLworCXdoaWxlICghYWNxdWlyZV9kbWEoc2RkKSkKKwkJbXNsZWVwKDEwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc2RkLT5xdWV1ZSkKKwkJCQkmJiAhKHNkZC0+c3RhdGUgJiBTVVNQTkQpKSB7CisKKwkJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CisKKwkJbXNnID0gY29udGFpbmVyX29mKHNkZC0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisKKwkJbGlzdF9kZWxfaW5pdCgmbXNnLT5xdWV1ZSk7CisKKwkJLyogU2V0IFhmZXIgYnVzeSBmbGFnICovCisJCXNkZC0+c3RhdGUgfD0gU1BJQlVTWTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCQloYW5kbGVfbXNnKHNkZCwgbXNnKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwkJc2RkLT5zdGF0ZSAmPSB+U1BJQlVTWTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZyZWUgRE1BIGNoYW5uZWxzICovCisJczNjMjQxMF9kbWFfZnJlZShzZGQtPnR4X2RtYWNoLCAmczNjNjR4eF9zcGlfZG1hX2NsaWVudCk7CisJczNjMjQxMF9kbWFfZnJlZShzZGQtPnJ4X2RtYWNoLCAmczNjNjR4eF9zcGlfZG1hX2NsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzZGQtPnN0YXRlICYgU1VTUE5EKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwltc2ctPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwltc2ctPmFjdHVhbF9sZW5ndGggPSAwOworCisJbGlzdF9hZGRfdGFpbCgmbXNnLT5xdWV1ZSwgJnNkZC0+cXVldWUpOworCisJcXVldWVfd29yayhzZGQtPndvcmtxdWV1ZSwgJnNkZC0+d29yayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSGVyZSB3ZSBvbmx5IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbgorICogYW5kIHNhdmUgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYSBsb2NhbCBkYXRhLXN0cnVjdHVyZS4KKyAqIFRoZSBjb250cm9sbGVyIGlzIGFjdHVhbGx5IGNvbmZpZ3VyZWQgb25seSBqdXN0IGJlZm9yZSB3ZQorICogZ2V0IGEgbWVzc2FnZSB0byB0cmFuc2Zlci4KKyAqLworc3RhdGljIGludCBzM2M2NHh4X3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQ7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2k7CisJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CisJdTMyIHBzciwgc3BlZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjcyA9PSBOVUxMIHx8IGNzLT5zZXRfbGV2ZWwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIk5vIENTIGZvciBTUEkoJWQpXG4iLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobXNnLCAmc2RkLT5xdWV1ZSwgcXVldWUpIHsKKwkJLyogSXMgc29tZSBtc3NnIGlzIGFscmVhZHkgcXVldWVkIGZvciB0aGlzIGRldmljZSAqLworCQlpZiAobXNnLT5zcGkgPT0gc3BpKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwKKwkJCQkic2V0dXA6IGF0dGVtcHQgd2hpbGUgbXNzZyBpbiBxdWV1ZSFcbiIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJaWYgKHNkZC0+c3RhdGUgJiBTVVNQTkQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJInNldHVwOiBTUEktJWQgbm90IGFjdGl2ZSFcbiIsIHNwaS0+bWFzdGVyLT5idXNfbnVtKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3BpLT5iaXRzX3Blcl93b3JkICE9IDgKKwkJCSYmIHNwaS0+Yml0c19wZXJfd29yZCAhPSAxNgorCQkJJiYgc3BpLT5iaXRzX3Blcl93b3JkICE9IDMyKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAic2V0dXA6ICVkYml0cy93cmQgbm90IHN1cHBvcnRlZCFcbiIsCisJCQkJCQkJc3BpLT5iaXRzX3Blcl93b3JkKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBzZXR1cF9leGl0OworCX0KKworCS8qIENoZWNrIGlmIHdlIGNhbiBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgcmF0ZSAqLworCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKDAgKyAxKTsgLyogTWF4IHBvc3NpYmxlICovCisKKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPiBzcGVlZCkKKwkJc3BpLT5tYXhfc3BlZWRfaHogPSBzcGVlZDsKKworCXBzciA9IGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gMiAvIHNwaS0+bWF4X3NwZWVkX2h6IC0gMTsKKwlwc3IgJj0gUzNDNjRYWF9TUElfUFNSX01BU0s7CisJaWYgKHBzciA9PSBTM0M2NFhYX1NQSV9QU1JfTUFTSykKKwkJcHNyLS07CisKKwlzcGVlZCA9IGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gMiAvIChwc3IgKyAxKTsKKwlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPCBzcGVlZCkgeworCQlpZiAocHNyKzEgPCBTM0M2NFhYX1NQSV9QU1JfTUFTSykgeworCQkJcHNyKys7CisJCX0gZWxzZSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBzZXR1cF9leGl0OworCQl9CisJfQorCisJc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyAocHNyICsgMSk7CisJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID49IHNwZWVkKQorCQlzcGktPm1heF9zcGVlZF9oeiA9IHNwZWVkOworCWVsc2UKKwkJZXJyID0gLUVJTlZBTDsKKworc2V0dXBfZXhpdDoKKworCS8qIHNldHVwKCkgcmV0dXJucyB3aXRoIGRldmljZSBkZS1zZWxlY3RlZCAqLworCWRpc2FibGVfY3Moc2RkLCBzcGkpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfaHdpbml0KHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzZGQtPmN1cl9zcGVlZCA9IDA7CisKKwlTM0M2NFhYX1NQSV9ERUFDVChzZGQpOworCisJLyogRGlzYWJsZSBJbnRlcnJ1cHRzIC0gd2UgdXNlIFBvbGxpbmcgaWYgbm90IERNQSBtb2RlICovCisJd3JpdGVsKDAsIHJlZ3MgKyBTM0M2NFhYX1NQSV9JTlRfRU4pOworCisJd3JpdGVsKHNjaS0+c3JjX2Nsa19uciA8PCBTM0M2NFhYX1NQSV9DTEtTRUxfU1JDU0hGVCwKKwkJCQlyZWdzICsgUzNDNjRYWF9TUElfQ0xLX0NGRyk7CisJd3JpdGVsKDAsIHJlZ3MgKyBTM0M2NFhYX1NQSV9NT0RFX0NGRyk7CisJd3JpdGVsKDAsIHJlZ3MgKyBTM0M2NFhYX1NQSV9QQUNLRVRfQ05UKTsKKworCS8qIENsZWFyIGFueSBpcnEgcGVuZGluZyBiaXRzICovCisJd3JpdGVsKHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9QRU5ESU5HX0NMUiksCisJCQkJcmVncyArIFMzQzY0WFhfU1BJX1BFTkRJTkdfQ0xSKTsKKworCXdyaXRlbCgwLCByZWdzICsgUzNDNjRYWF9TUElfU1dBUF9DRkcpOworCisJdmFsID0gcmVhZGwocmVncyArIFMzQzY0WFhfU1BJX01PREVfQ0ZHKTsKKwl2YWwgJj0gflMzQzY0WFhfU1BJX01PREVfNEJVUlNUOworCXZhbCAmPSB+KFMzQzY0WFhfU1BJX01BWF9UUkFJTENOVCA8PCBTM0M2NFhYX1NQSV9UUkFJTENOVF9PRkYpOworCXZhbCB8PSAoUzNDNjRYWF9TUElfVFJBSUxDTlQgPDwgUzNDNjRYWF9TUElfVFJBSUxDTlRfT0ZGKTsKKwl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfTU9ERV9DRkcpOworCisJZmx1c2hfZmlmbyhzZGQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqbWVtX3JlcywgKmRtYXR4X3JlcywgKmRtYXJ4X3JlczsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZDsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCWludCByZXQ7CisKKwlpZiAocGRldi0+aWQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiSW52YWxpZCBwbGF0Zm9ybSBkZXZpY2UgaWQtJWRcbiIsIHBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm1fZGF0YSBtaXNzaW5nIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgbmVjZXNzYXJ5IHJlc291cmNlICovCisKKwlkbWF0eF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmIChkbWF0eF9yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IFNQSS1UeCBkbWEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRtYXJ4X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CisJaWYgKGRtYXJ4X3JlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgU1BJLVJ4IGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKG1lbV9yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IFNQSSBNRU0gcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwKKwkJCQlzaXplb2Yoc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBTUEkgTWFzdGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2NpID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOworCisJc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXNkZC0+bWFzdGVyID0gbWFzdGVyOworCXNkZC0+Y250cmxyX2luZm8gPSBzY2k7CisJc2RkLT5wZGV2ID0gcGRldjsKKwlzZGQtPnNmcl9zdGFydCA9IG1lbV9yZXMtPnN0YXJ0OworCXNkZC0+dHhfZG1hY2ggPSBkbWF0eF9yZXMtPnN0YXJ0OworCXNkZC0+cnhfZG1hY2ggPSBkbWFyeF9yZXMtPnN0YXJ0OworCisJc2RkLT5jdXJfYnB3ID0gODsKKworCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOworCW1hc3Rlci0+c2V0dXAgPSBzM2M2NHh4X3NwaV9zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gczNjNjR4eF9zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHNjaS0+bnVtX2NzOworCW1hc3Rlci0+ZG1hX2FsaWdubWVudCA9IDg7CisJLyogdGhlIHNwaS0+bW9kZSBiaXRzIHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0g7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSwgcGRldi0+bmFtZSkgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJSZXEgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyMDsKKwl9CisKKwlzZGQtPnJlZ3MgPSBpb3JlbWFwKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKKwlpZiAoc2RkLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlbWFwIElPXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjE7CisJfQorCisJaWYgKHNjaS0+Y2ZnX2dwaW8gPT0gTlVMTCB8fCBzY2ktPmNmZ19ncGlvKHBkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBjb25maWcgZ3Bpb1xuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnIyOworCX0KKworCS8qIFNldHVwIGNsb2NrcyAqLworCXNkZC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic3BpIik7CisJaWYgKElTX0VSUihzZGQtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGFjcXVpcmUgY2xvY2sgJ3NwaSdcbiIpOworCQlyZXQgPSBQVFJfRVJSKHNkZC0+Y2xrKTsKKwkJZ290byBlcnIzOworCX0KKworCWlmIChjbGtfZW5hYmxlKHNkZC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBlbmFibGUgY2xvY2sgJ3NwaSdcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlpZiAoc2NpLT5zcmNfY2xrX25yID09IFMzQzY0WFhfU1BJX1NSQ0NMS19QQ0xLKQorCQlzY2ktPnNyY19jbGsgPSBzZGQtPmNsazsKKwllbHNlCisJCXNjaS0+c3JjX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgc2NpLT5zcmNfY2xrX25hbWUpOworCWlmIChJU19FUlIoc2NpLT5zcmNfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFjcXVpcmUgY2xvY2sgJyVzJ1xuIiwgc2NpLT5zcmNfY2xrX25hbWUpOworCQlyZXQgPSBQVFJfRVJSKHNjaS0+c3JjX2Nsayk7CisJCWdvdG8gZXJyNTsKKwl9CisKKwlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrICYmIGNsa19lbmFibGUoc2NpLT5zcmNfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBlbmFibGUgY2xvY2sgJyVzJ1xuIiwKKwkJCQkJCQlzY2ktPnNyY19jbGtfbmFtZSk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnI2OworCX0KKworCXNkZC0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJCQlkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKKwlpZiAoc2RkLT53b3JrcXVldWUgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyNzsKKwl9CisKKwkvKiBTZXR1cCBEZXVmdWx0IE1vZGUgKi8KKwlzM2M2NHh4X3NwaV9od2luaXQoc2RkLCBwZGV2LT5pZCk7CisKKwlzcGluX2xvY2tfaW5pdCgmc2RkLT5sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJnNkZC0+eGZlcl9jb21wbGV0aW9uKTsKKwlJTklUX1dPUksoJnNkZC0+d29yaywgczNjNjR4eF9zcGlfd29yayk7CisJSU5JVF9MSVNUX0hFQUQoJnNkZC0+cXVldWUpOworCisJaWYgKHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnI4OworCX0KKworCWRldl9kYmcoJnBkZXYtPmRldiwgIlNhbXN1bmcgU29DIFNQSSBEcml2ZXIgbG9hZGVkIGZvciBCdXMgU1BJLSVkIFwKKwkJCQkJd2l0aCAlZCBTbGF2ZXMgYXR0YWNoZWRcbiIsCisJCQkJCXBkZXYtPmlkLCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0KTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcdElPbWVtPVsweCV4LTB4JXhdXAorCQkJCQlcdERNQT1bUngtJWQsIFR4LSVkXVxuIiwKKwkJCQkJbWVtX3Jlcy0+ZW5kLCBtZW1fcmVzLT5zdGFydCwKKwkJCQkJc2RkLT5yeF9kbWFjaCwgc2RkLT50eF9kbWFjaCk7CisKKwlyZXR1cm4gMDsKKworZXJyODoKKwlkZXN0cm95X3dvcmtxdWV1ZShzZGQtPndvcmtxdWV1ZSk7CitlcnI3OgorCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7CitlcnI2OgorCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19wdXQoc2NpLT5zcmNfY2xrKTsKK2VycjU6CisJY2xrX2Rpc2FibGUoc2RkLT5jbGspOworZXJyNDoKKwljbGtfcHV0KHNkZC0+Y2xrKTsKK2VycjM6CitlcnIyOgorCWlvdW5tYXAoKHZvaWQgKikgc2RkLT5yZWdzKTsKK2VycjE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKK2VycjA6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHJlc291cmNlCSptZW1fcmVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJc2RkLT5zdGF0ZSB8PSBTVVNQTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoc2RkLT5zdGF0ZSAmIFNQSUJVU1kpCisJCW1zbGVlcCgxMCk7CisKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKworCWRlc3Ryb3lfd29ya3F1ZXVlKHNkZC0+d29ya3F1ZXVlKTsKKworCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7CisKKwlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQorCQljbGtfcHV0KHNjaS0+c3JjX2Nsayk7CisKKwljbGtfZGlzYWJsZShzZGQtPmNsayk7CisJY2xrX3B1dChzZGQtPmNsayk7CisKKwlpb3VubWFwKCh2b2lkICopIHNkZC0+cmVncyk7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzYzY0eHhfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CisJc2RkLT5zdGF0ZSB8PSBTVVNQTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoc2RkLT5zdGF0ZSAmIFNQSUJVU1kpCisJCW1zbGVlcCgxMCk7CisKKwkvKiBEaXNhYmxlIHRoZSBjbG9jayAqLworCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCisJCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7CisKKwljbGtfZGlzYWJsZShzZGQtPmNsayk7CisKKwlzZGQtPmN1cl9zcGVlZCA9IDA7IC8qIE91dHB1dCBDbG9jayBpcyBzdG9wcGVkICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2M2NHh4X3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2NpLT5jZmdfZ3BpbyhwZGV2KTsKKworCS8qIEVuYWJsZSB0aGUgY2xvY2sgKi8KKwlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQorCQljbGtfZW5hYmxlKHNjaS0+c3JjX2Nsayk7CisKKwljbGtfZW5hYmxlKHNkZC0+Y2xrKTsKKworCXMzYzY0eHhfc3BpX2h3aW5pdChzZGQsIHBkZXYtPmlkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGQtPmxvY2ssIGZsYWdzKTsKKwlzZGQtPnN0YXRlICY9IH5TVVNQTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzY0eHhfc3BpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBzM2M2NHh4X3NwaV9yZXN1bWUJTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2M2NHh4X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiczNjNjR4eC1zcGkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBzM2M2NHh4X3NwaV9yZW1vdmUsCisJLnN1c3BlbmQgPSBzM2M2NHh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzM2M2NHh4X3NwaV9yZXN1bWUsCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2M2NHh4LXNwaSIpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmczNjNjR4eF9zcGlfZHJpdmVyLCBzM2M2NHh4X3NwaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChzM2M2NHh4X3NwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHMzYzY0eHhfc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjNjR4eF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHMzYzY0eHhfc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQzY0WFggU1BJIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc2hfc2NpLmMgYi9kcml2ZXJzL3NwaS9zcGlfc2hfc2NpLmMKaW5kZXggN2QzNjcyMC4uYTY1YzEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX3NjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zaF9zY2kuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyMTsKIAl9Ci0Jc3AtPm1lbWJhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCXNwLT5tZW1iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAJaWYgKCFzcC0+bWVtYmFzZSkgewogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMgYi9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCmluZGV4IDE5Zjc1NjIuLmRmYTAyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3R4eDkuYwpAQCAtMzc1LDEyICszNzUsMTAgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCiAJCWdvdG8gZXhpdF9idXN5OwotCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJmRldi0+ZGV2LAotCQkJCSAgICAgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCSAgICAgInNwaV90eHg5IikpCiAJCWdvdG8gZXhpdF9idXN5OwotCWMtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXAoJmRldi0+ZGV2LAotCQkJCSAgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJYy0+bWVtYmFzZSA9IGRldm1faW9yZW1hcCgmZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFjLT5tZW1iYXNlKQogCQlnb3RvIGV4aXRfYnVzeTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpZGV2LmMgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwppbmRleCA5YzQ0NmU2Li5lYTFiZWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlkZXYuYworKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtNTMsNyArNTMsNyBAQAogI2RlZmluZSBTUElERVZfTUFKT1IJCQkxNTMJLyogYXNzaWduZWQgKi8KICNkZWZpbmUgTl9TUElfTUlOT1JTCQkJMzIJLyogLi4uIHVwIHRvIDI1NiAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwltaW5vcnNbTl9TUElfTUlOT1JTIC8gQklUU19QRVJfTE9OR107CitzdGF0aWMgREVDTEFSRV9CSVRNQVAobWlub3JzLCBOX1NQSV9NSU5PUlMpOwogCiAKIC8qIEJpdCBtYXNrcyBmb3Igc3BpX2RldmljZS5tb2RlIG1hbmFnZW1lbnQuICBOb3RlIHRoYXQgaW5jb3JyZWN0CkBAIC01NTgsNyArNTU4LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBzcGlkZXZfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwaWRldl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2OwogCWludAkJCXN0YXR1czsKQEAgLTYwNyw3ICs2MDcsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgc3BpZGV2X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBfX2RldmV4aXQgc3BpZGV2X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzcGlkZXZfZGF0YQkqc3BpZGV2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKQEAgLTYyOSw3ICs2MjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3BpZGV2X3NwaSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzcGlkZXZfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9CQkic3BpZGV2IiwKIAkJLm93bmVyID0JVEhJU19NT0RVTEUsCkBAIC02NjEsMTQgKzY2MSwxNCBAQAogCiAJc3BpZGV2X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAic3BpZGV2Iik7CiAJaWYgKElTX0VSUihzcGlkZXZfY2xhc3MpKSB7Ci0JCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaV9kcml2ZXIuZHJpdmVyLm5hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihzcGlkZXZfY2xhc3MpOwogCX0KIAotCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnNwaWRldl9zcGkpOworCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnNwaWRldl9zcGlfZHJpdmVyKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQljbGFzc19kZXN0cm95KHNwaWRldl9jbGFzcyk7Ci0JCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaV9kcml2ZXIuZHJpdmVyLm5hbWUpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNjc2LDkgKzY3Niw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzcGlkZXZfZXhpdCh2b2lkKQogewotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc3BpZGV2X3NwaSk7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzcGlkZXZfc3BpX2RyaXZlcik7CiAJY2xhc3NfZGVzdHJveShzcGlkZXZfY2xhc3MpOwotCXVucmVnaXN0ZXJfY2hyZGV2KFNQSURFVl9NQUpPUiwgc3BpZGV2X3NwaS5kcml2ZXIubmFtZSk7CisJdW5yZWdpc3Rlcl9jaHJkZXYoU1BJREVWX01BSk9SLCBzcGlkZXZfc3BpX2RyaXZlci5kcml2ZXIubmFtZSk7CiB9CiBtb2R1bGVfZXhpdChzcGlkZXZfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggMDkzZjU3YS4uOTRlYjg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTg3LDggKzg3LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHJlYW0vS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWciCkBAIC0xNDUsNSArMTQzLDcgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbmV0d2F2ZS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnIgorCiBlbmRpZiAjICFTVEFHSU5HX0VYQ0xVREVfQlVJTEQKIGVuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IDA2OTg2NGYuLmI1ZTY3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDYgQEAKIG9iai0kKENPTkZJR19JTlBVVF9NSU1JTykJKz0gbWltaW8vCiBvYmotJChDT05GSUdfVFJBTlpQT1JUKQkJKz0gZnJvbnRpZXIvCiBvYmotJChDT05GSUdfRFJFQU0pCQkrPSBkcmVhbS8KLW9iai0kKENPTkZJR19EU1QpCQkrPSBkc3QvCiBvYmotJChDT05GSUdfUE9ITUVMRlMpCQkrPSBwb2htZWxmcy8KIG9iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLwogb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KQEAgLTUzLDMgKzUyLDQgQEAKIG9iai0kKENPTkZJR19XQVZFTEFOKQkJKz0gd2F2ZWxhbi8KIG9iai0kKENPTkZJR19QQ01DSUFfV0FWRUxBTikJKz0gd2F2ZWxhbi8KIG9iai0kKENPTkZJR19QQ01DSUFfTkVUV0FWRSkJKz0gbmV0d2F2ZS8KK29iai0kKENPTkZJR19GQl9TTTdYWCkJCSs9IHNtN3h4LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKaW5kZXggNzYzMmY1Ny4uMWQ3NGRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBjb25maWcgQkFUTUFOX0FEVgogCXRyaXN0YXRlICJCLkEuVC5NLkEuTi4gQWR2YW5jZWQgTWVzaGluZyBQcm90b2NvbCIKKwlkZXBlbmRzIG9uIFBST0NfRlMgJiYgUEFDS0VUCiAgICAgICAgIGRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCmluZGV4IGQ3MjQ3OTguLmViNjE3NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKQEAgLTM2Myw4ICszNjMsMTAgQEAKIAkJcmV0dXJuOwogCiAJZm9yd19wYWNrZXQtPnBhY2tldF9idWZmID0ga21hbGxvYyhwYWNrZXRfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWZvcndfcGFja2V0LT5wYWNrZXRfYnVmZikKKwlpZiAoIWZvcndfcGFja2V0LT5wYWNrZXRfYnVmZikgeworCQlrZnJlZShmb3J3X3BhY2tldCk7CiAJCXJldHVybjsKKwl9CiAKIAlmb3J3X3BhY2tldC0+cGFja2V0X2xlbiA9IHBhY2tldF9sZW47CiAJbWVtY3B5KGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiwgcGFja2V0X2J1ZmYsIGZvcndfcGFja2V0LT5wYWNrZXRfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCmluZGV4IGNjYzVjZGMuLmI1NTlhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaApAQCAtNDUxLDcgKzQ1MSw3IEBACiAKICNkZWZpbmUgQ09NRURJX0NCX0VPUwkJMQkvKiBlbmQgb2Ygc2NhbiAqLwogI2RlZmluZSBDT01FRElfQ0JfRU9BCQkyCS8qIGVuZCBvZiBhY3F1aXNpdGlvbiAqLwotI2RlZmluZSBDT01FRElfQ0JfQkxPQ0sJCTQJLyogREVQUkVDQVRFRDogY29udmVuaWVudCBibG9jayBzaXplICovCisjZGVmaW5lIENPTUVESV9DQl9CTE9DSwkJNAkvKiBkYXRhIGhhcyBhcnJpdmVkOiB3YWtlcyB1cCByZWFkKCkgLyB3cml0ZSgpICovCiAjZGVmaW5lIENPTUVESV9DQl9FT0JVRgkJOAkvKiBERVBSRUNBVEVEOiBlbmQgb2YgYnVmZmVyICovCiAjZGVmaW5lIENPTUVESV9DQl9FUlJPUgkJMTYJLyogY2FyZCBlcnJvciBkdXJpbmcgYWNxdWlzaXRpb24gKi8KICNkZWZpbmUgQ09NRURJX0NCX09WRVJGTE9XCTMyCS8qIGJ1ZmZlciBvdmVyZmxvdy91bmRlcmZsb3cgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCmluZGV4IDBkMmMyZWIuLmJkMzk3ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwpAQCAtODQ5LDggKzg0OSwxMSBAQAogCX0KIAogCWRldnByaXYtPnBjaV9lbmFibGVkID0gMTsKLQlkZXZwcml2LT5pb2Jhc2UgPQotCSAgICBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwgc2l6ZW9mKHN0cnVjdCBqcjNfdCkpOworCWRldnByaXYtPmlvYmFzZSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGNhcmQsIDApLAorCQkJb2Zmc2V0b2Yoc3RydWN0IGpyM190LCBjaGFubmVsW2RldnByaXYtPm5fY2hhbm5lbHNdKSk7CisJaWYgKCFkZXZwcml2LT5pb2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVzdWx0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGRldnByaXYtPm5fY2hhbm5lbHMpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCAwNmMwMjA0Li45YTFiNTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0xLDQgKzEsNCBAQAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkJlcm5kIFBvcnIsIEJlcm5kUG9yckBmMnMuY29tIgogI2RlZmluZSBEUklWRVJfREVTQyAiU3RpcmxpbmcvSVRMIFVTQi1EVVggLS0gQmVybmQuUG9yckBmMnMuY29tIgogLyoKQEAgLTgxLDYgKzgxLDggQEAKICAqIDIuMTogIGNoYW5nZWQgUFdNIEFQSQogICogMi4yOiAgYWRkZWQgZmlybXdhcmUga2VybmVsIHJlcXVlc3QgdG8gZml4IGFuIHVkZXYgcHJvYmxlbQogICogMi4zOiAgY29ycmVjdGVkIGEgYnVnIGluIGJ1bGsgdGltZW91dHMgd2hpY2ggd2VyZSBmYXIgdG9vIHNob3J0CisgKiAyLjQ6ICBmaXhlZCBhIGJ1ZyB3aGljaCBjYXVzZXMgdGhlIGRyaXZlciB0byBoYW5nIHdoZW4gaXQgcmFuIG91dCBvZiBkYXRhLgorICogICAgICAgVGhhbmtzIHRvIEphbi1NYXR0aGlhcyBCcmF1biBhbmQgSWFuIHRvIHNwb3QgdGhlIGJ1ZyBhbmQgZml4IGl0LgogICoKICAqLwogCkBAIC01MzIsNiArNTM0LDcgQEAKIAkJfQogCX0KIAkvKiB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUgKi8KKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1M7CiAJY29tZWRpX2V2ZW50KHRoaXNfdXNiZHV4c3ViLT5jb21lZGlkZXYsIHMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OGQzNDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotY29uZmlnIERTVAotCXRyaXN0YXRlICJEaXN0cmlidXRlZCBzdG9yYWdlIgotCWRlcGVuZHMgb24gTkVUICYmIENSWVBUTyAmJiBTWVNGUyAmJiBCTEtfREVWCi0Jc2VsZWN0IENPTk5FQ1RPUgotCS0tLWhlbHAtLS0KLQlEU1QgaXMgYSBuZXR3b3JrIGJsb2NrIGRldmljZSBzdG9yYWdlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZQotCWV4cG9ydGVkIHN0b3JhZ2Ugb24gdGhlIHJlbW90ZSBub2RlcyBpbnRvIHRoZSBsb2NhbCBibG9jayBkZXZpY2UuCi0KLQlEU1Qgd29ya3Mgb24gdG9wIG9mIGFueSBuZXR3b3JrIG1lZGlhIGFuZCBwcm90b2NvbDsgaXQgaXMganVzdCBhIG1hdHRlcgotCW9mIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSB0byB1bmRlcnN0YW5kIHRoZSBjb3JyZWN0IGFkZHJlc3Nlcy4gVGhlIG1vc3QKLQljb21tb24gZXhhbXBsZSBpcyBUQ1Agb3ZlciBJUCwgd2hpY2ggYWxsb3dzIHRvIHBhc3MgdGhyb3VnaCBmaXJld2FsbHMgYW5kCi0JY3JlYXRlIHJlbW90ZSBiYWNrdXAgc3RvcmFnZSBpbiBhIGRpZmZlcmVudCBkYXRhY2VudGVyLiBEU1QgcmVxdWlyZXMKLQlzaW5nbGUgcG9ydCB0byBiZSBlbmFibGVkIG9uIHRoZSBleHBvcnRpbmcgbm9kZSBhbmQgb3V0Z29pbmcgY29ubmVjdGlvbnMKLQlvbiB0aGUgbG9jYWwgbm9kZS4KLQotCURTVCB3b3JrcyB3aXRoIGluLWtlcm5lbCBjbGllbnQgYW5kIHNlcnZlciwgd2hpY2ggaW1wcm92ZXMgcGVyZm9ybWFuY2UgYnkKLQllbGltaW5hdGluZyB1bm5lZGVkIGRhdGEgY29waWVzIGFuZCBieSBub3QgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uCi0Jb2YgdGhlIGV4dGVybmFsIElPIGNvbXBvbmVudHMuIEl0IHJlcXVpcmVzIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIHV0aWxpdHkKLQl0aG91Z2guCi0KLQlEU1QgdXNlcyB0cmFuc2FjdGlvbiBtb2RlbCwgd2hlbiBlYWNoIHN0b3JlIGhhcyB0byBiZSBleHBsaWNpdGx5IGFja2VkCi0JZnJvbSB0aGUgcmVtb3RlIG5vZGUgdG8gYmUgY29uc2lkZXJlZCBhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gVGhlcmUKLQltYXkgYmUgbG90cyBvZiBpbi1mbGlnaHQgdHJhbnNhY3Rpb25zLiBXaGVuIHJlbW90ZSBob3N0IGRvZXMgbm90IGFjawotCXRoZSB0cmFuc2FjdGlvbiBpdCB3aWxsIGJlIHJlc2VudCBwcmVkZWZpbmVkIG51bWJlciBvZiB0aW1lcyB3aXRoIHNwZWNpZmllZAotCXRpbWVvdXRzIGJldHdlZW4gdGhlbS4gQWxsIHRob3NlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyYWJsZS4gVHJhbnNhY3Rpb25zCi0JYXJlIG1hcmtlZCBhcyBmYWlsZWQgYWZ0ZXIgYWxsIHJlc2VuZHMgY29tcGxldGUgdW5zdWNjZXNzZnVsbHk7IGhhdmluZwotCWxvbmcgZW5vdWdoIHJlc2VuZCB0aW1lb3V0IGFuZC9vciBsYXJnZSBudW1iZXIgb2YgcmVzZW5kcyBhbGxvd3Mgbm90IHRvCi0JcmV0dXJuIGVycm9yIHRvIHRoZSBoaWdoZXIgKEZTIHVzdWFsbHkpIGxheWVyIGluIGNhc2Ugb2Ygc2hvcnQgbmV0d29yawotCXByb2JsZW1zIG9yIHJlbW90ZSBub2RlIG91dGFnZXMuIEluIGNhc2Ugb2YgbmV0d29yayBSQUlEIHNldHVwIHRoaXMgbWVhbnMKLQl0aGF0IHN0b3JhZ2Ugd2lsbCBub3QgZGVncmFkZSB1bnRpbCB0cmFuc2FjdGlvbnMgYXJlIG1hcmtlZCBhcyBmYWlsZWQsIGFuZAotCXRodXMgd2lsbCBub3QgZm9yY2UgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiBhbmQgZGF0YSByZWJ1aWxkLiBJbiBjYXNlIG9mCi0JY29ubmVjdGlvbiBmYWlsdXJlIERTVCB3aWxsIHRyeSB0byByZWNvbm5lY3QgdG8gdGhlIHJlbW90ZSBub2RlIGF1dG9tYXRpY2FsbHkuCi0JRFNUIHNlbmRzIHBpbmcgY29tbWFuZHMgYXQgaWRsZSB0aW1lIHRvIGRldGVjdCBpZiByZW1vdGUgbm9kZSBpcyBhbGl2ZS4KLQotCUJlY2F1c2Ugb2YgdHJhbnNhY3Rpb25hbCBtb2RlbCBpdCBpcyBwb3NzaWJsZSB0byB1c2UgemVyby1jb3B5IHNlbmRpbmcKLQl3aXRob3V0IHdvcnJ5IG9mIGRhdGEgY29ycnVwdGlvbiAod2hpY2ggaW4gdHVybiBjb3VsZCBiZSBkZXRlY3RlZCBieSB0aGUKLQlzdHJvbmcgY2hlY2tzdW1zIHRob3VnaCkuCi0KLQlEU1QgbWF5IGZ1bGx5IGVuY3J5cHQgdGhlIGRhdGEgY2hhbm5lbCBpbiBjYXNlIG9mIHVudHJ1c3RlZCBjaGFubmVsIGFuZCBpbXBsZW1lbnQKLQlzdHJvbmcgY2hlY2tzdW0gb2YgdGhlIHRyYW5zZmVycmVkIGRhdGEuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBhbGdvcml0aG1zCi0JYW5kIGNyeXB0byBrZXlzOyB0aGV5IHNob3VsZCBtYXRjaCBvbiBib3RoIHNpZGVzIG9mIHRoZSBuZXR3b3JrIGNoYW5uZWwuCi0JQ3J5cHRvIHByb2Nlc3NpbmcgZG9lcyBub3QgaW50cm9kdWNlIG5vdGljZWJsZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgc2luY2UgRFNUCi0JdXNlcyBjb25maWd1cmFibGUgcG9vbCBvZiB0aHJlYWRzIHRvIHBlcmZvcm0gY3J5cHRvIHByb2Nlc3NpbmcuCi0KLQlEU1QgdXRpbGl6ZXMgbWVtb3J5IHBvb2wgbW9kZWwgb2YgYWxsIGl0cyB0cmFuc2FjdGlvbiBhbGxvY2F0aW9ucyAoaXQgaXMgdGhlCi0Jb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gb24gdGhlIGNsaWVudCkgYW5kIHNlcnZlciBhbGxvY2F0aW9ucyAoYmlvIHBvb2xzLAotCXdoaWxlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2xhYikuCi0KLQlBdCBzdGFydHVwIERTVCBwZXJmb3JtcyBhIHNpbXBsZSBuZWdvdGlhdGlvbiB3aXRoIHRoZSBleHBvcnQgbm9kZSB0byBkZXRlcm1pbmUKLQlhY2Nlc3MgcGVybWlzc2lvbnMgYW5kIHNpemUgb2YgdGhlIGV4cG9ydGVkIHN0b3JhZ2UuIEl0IGNhbiBiZSBleHRlbmRlZCBpZgotCW5ldyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBhdXRvbmVnb3RpYXRlZC4KLQotCURTVCBjYXJyaWVzIGJsb2NrIElPIGZsYWdzIGluIHRoZSBwcm90b2NvbCwgd2hpY2ggYWxsb3dzIHRvIHRyYW5zcGFyZW50bHkgaW1wbGVtZW50Ci0JYmFycmllcnMgYW5kIHN5bmMvZmx1c2ggb3BlcmF0aW9ucy4gVGhvc2UgZmxhZ3MgYXJlIHVzZWQgaW4gdGhlIGV4cG9ydCBub2RlIHdoZXJlCi0JSU8gYWdhaW5zdCB0aGUgbG9jYWwgc3RvcmFnZSBpcyBwZXJmb3JtZWQsIHdoaWNoIG1lYW5zIHRoYXQgc3luYyB3cml0ZSB3aWxsIGJlIHN5bmMKLQlvbiB0aGUgcmVtb3RlIG5vZGUgdG9vLCB3aGljaCBpbiB0dXJuIGltcHJvdmVzIGRhdGEgaW50ZWdyaXR5IGFuZCBpbXByb3ZlZCByZXNpc3RhbmNlCi0JdG8gZXJyb3JzIGFuZCBkYXRhIGNvcnJ1cHRpb24gZHVyaW5nIHBvd2VyIG91dGFnZXMgb3Igc3RvcmFnZSBkYW1hZ2VzLgotCi0JSG9tZXBhZ2U6IGh0dHA6Ly93d3cuaW9yZW1hcC5uZXQvcHJvamVjdHMvZHN0Ci0JVXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBhbmQgdGhlIGxhdGVzdCByZWxlYXNlczogaHR0cDovL3d3dy5pb3JlbWFwLm5ldC9hcmNoaXZlL2RzdC8KLQotY29uZmlnIERTVF9ERUJVRwotCWJvb2wgIkRTVCBkZWJ1ZyIKLQlkZXBlbmRzIG9uIERTVAotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBIRUFWWSBkZWJ1Z2dpbmcgb2YgdGhlIERTVC4KLQlUdXJuIGl0IG9uIE9OTFkgaWYgeW91IGhhdmUgdG8gZGVidWcgc29tZSByZWFsbHkgb2JzY3VyZSBwcm9ibGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOGIwY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb2JqLSQoQ09ORklHX0RTVCkgKz0gbnN0Lm8KLQotbnN0LXkgOj0gZGNvcmUubyBzdGF0ZS5vIGV4cG9ydC5vIHRocmVhZF9wb29sLm8gY3J5cHRvLm8gdHJhbnMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9jcnlwdG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MTI5NWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9jcnlwdG8uYworKysgL2Rldi9udWxsCkBAIC0xLDczMyArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLS8qCi0gKiBUcmlja3kgYmFzdGFyZCwgYnV0IElWIGNhbiBiZSBtb3JlIGNvbXBsZXggd2l0aCB0aW1lLi4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTY0IGRzdF9nZW5faXYoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlyZXR1cm4gdC0+Z2VuOwotfQotCi0vKgotICogQ3J5cHRvIG1hY2hpbmVyeTogaGFzaC9jaXBoZXIgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGNyeXB0byBjb250cm9scy4KLSAqLwotc3RhdGljIHN0cnVjdCBjcnlwdG9faGFzaCAqZHN0X2luaXRfaGFzaChzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCwgdTggKmtleSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaDsKLQotCWhhc2ggPSBjcnlwdG9fYWxsb2NfaGFzaChjdGwtPmhhc2hfYWxnbywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7Ci0JaWYgKElTX0VSUihoYXNoKSkgewotCQllcnIgPSBQVFJfRVJSKGhhc2gpOwotCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGhhc2ggJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGN0bC0+aGFzaF9hbGdvLCBlcnIpOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQljdGwtPmNyeXB0b19hdHRhY2hlZF9zaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoKTsKLQotCWlmICghY3RsLT5oYXNoX2tleXNpemUpCi0JCXJldHVybiBoYXNoOwotCi0JZXJyID0gY3J5cHRvX2hhc2hfc2V0a2V5KGhhc2gsIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOwotCWlmIChlcnIpIHsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzZXQga2V5IGZvciBoYXNoICclcycsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQotCi0JcmV0dXJuIGhhc2g7Ci0KLWVycl9vdXRfZnJlZToKLQljcnlwdG9fZnJlZV9oYXNoKGhhc2gpOwotZXJyX291dF9leGl0OgotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmRzdF9pbml0X2NpcGhlcihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCwKLQkJdTggKmtleSkKLXsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlcjsKLQotCWlmICghY3RsLT5jaXBoZXJfa2V5c2l6ZSkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQljaXBoZXIgPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihjdGwtPmNpcGhlcl9hbGdvLCAwLCAwKTsKLQlpZiAoSVNfRVJSKGNpcGhlcikpIHsKLQkJZXJyID0gUFRSX0VSUihjaXBoZXIpOwotCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGNpcGhlciAnJXMnLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgY3RsLT5jaXBoZXJfYWxnbywgZXJyKTsKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JY3J5cHRvX2FibGtjaXBoZXJfY2xlYXJfZmxhZ3MoY2lwaGVyLCB+MCk7Ci0KLQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoY2lwaGVyLCBrZXksIGN0bC0+Y2lwaGVyX2tleXNpemUpOwotCWlmIChlcnIpIHsKLQkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzZXQga2V5IGZvciBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCi0JCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7Ci0JCWdvdG8gZXJyX291dF9mcmVlOwotCX0KLQotCXJldHVybiBjaXBoZXI7Ci0KLWVycl9vdXRfZnJlZToKLQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGNpcGhlcik7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotLyoKLSAqIENyeXB0byBlbmdpbmUgaGFzIGEgcG9vbCBvZiBwYWdlcyB0byBlbmNyeXB0IGRhdGEgaW50byBiZWZvcmUgc2VuZGluZwotICogaXQgb3ZlciB0aGUgbmV0d29yay4gVGhpcyBwb29sIGlzIGZyZWVkL2FsbG9jYXRlZCBoZXJlLgotICovCi1zdGF0aWMgdm9pZCBkc3RfY3J5cHRvX3BhZ2VzX2ZyZWUoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGUtPnBhZ2VfbnVtOyArK2kpCi0JCV9fZnJlZV9wYWdlKGUtPnBhZ2VzW2ldKTsKLQlrZnJlZShlLT5wYWdlcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19wYWdlc19hbGxvYyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIGludCBudW0pCi17Ci0JaW50IGk7Ci0KLQllLT5wYWdlcyA9IGttYWxsb2MobnVtICogc2l6ZW9mKHN0cnVjdCBwYWdlICoqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlLT5wYWdlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLQkJZS0+cGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIWUtPnBhZ2VzW2ldKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZXM7Ci0JfQotCi0JZS0+cGFnZV9udW0gPSBudW07Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZV9wYWdlczoKLQl3aGlsZSAoLS1pID49IDApCi0JCV9fZnJlZV9wYWdlKGUtPnBhZ2VzW2ldKTsKLQotCWtmcmVlKGUtPnBhZ2VzKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgY3J5cHRvIGVuZ2luZSBmb3IgZ2l2ZW4gbm9kZS4KLSAqIFNldHVwIGNpcGhlci9oYXNoLCBrZXlzLCBwb29sIG9mIHRocmVhZHMgYW5kIHByaXZhdGUgZGF0YS4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX2VuZ2luZV9pbml0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwgPSAmbi0+Y3J5cHRvOwotCi0JZXJyID0gZHN0X2NyeXB0b19wYWdlc19hbGxvYyhlLCBuLT5tYXhfcGFnZXMpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JZS0+c2l6ZSA9IFBBR0VfU0laRTsKLQllLT5kYXRhID0ga21hbGxvYyhlLT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWUtPmRhdGEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZXM7Ci0JfQotCi0JaWYgKGN0bC0+aGFzaF9hbGdvWzBdKSB7Ci0JCWUtPmhhc2ggPSBkc3RfaW5pdF9oYXNoKGN0bCwgbi0+aGFzaF9rZXkpOwotCQlpZiAoSVNfRVJSKGUtPmhhc2gpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGUtPmhhc2gpOwotCQkJZS0+aGFzaCA9IE5VTEw7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZTsKLQkJfQotCX0KLQotCWlmIChjdGwtPmNpcGhlcl9hbGdvWzBdKSB7Ci0JCWUtPmNpcGhlciA9IGRzdF9pbml0X2NpcGhlcihjdGwsIG4tPmNpcGhlcl9rZXkpOwotCQlpZiAoSVNfRVJSKGUtPmNpcGhlcikpIHsKLQkJCWVyciA9IFBUUl9FUlIoZS0+Y2lwaGVyKTsKLQkJCWUtPmNpcGhlciA9IE5VTEw7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9oYXNoOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZV9oYXNoOgotCWNyeXB0b19mcmVlX2hhc2goZS0+aGFzaCk7Ci1lcnJfb3V0X2ZyZWU6Ci0Ja2ZyZWUoZS0+ZGF0YSk7Ci1lcnJfb3V0X2ZyZWVfcGFnZXM6Ci0JZHN0X2NyeXB0b19wYWdlc19mcmVlKGUpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9jcnlwdG9fZW5naW5lX2V4aXQoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplKQotewotCWlmIChlLT5oYXNoKQotCQljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOwotCWlmIChlLT5jaXBoZXIpCi0JCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoZS0+Y2lwaGVyKTsKLQlkc3RfY3J5cHRvX3BhZ2VzX2ZyZWUoZSk7Ci0Ja2ZyZWUoZS0+ZGF0YSk7Ci19Ci0KLS8qCi0gKiBXYWl0aW5nIGZvciBjaXBoZXIgcHJvY2Vzc2luZyB0byBiZSBjb21wbGV0ZWQuCi0gKi8KLXN0cnVjdCBkc3RfY3J5cHRvX2NvbXBsZXRpb24gewotCXN0cnVjdCBjb21wbGV0aW9uCQljb21wbGV0ZTsKLQlpbnQJCQkJZXJyb3I7Ci19OwotCi1zdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2NvbXBsZXRlKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2NvbXBsZXRpb24gKmMgPSByZXEtPmRhdGE7Ci0KLQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykKLQkJcmV0dXJuOwotCi0JZHByaW50aygiJXM6IHJlcTogJXAsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcmVxLCBlcnIpOwotCWMtPmVycm9yID0gZXJyOwotCWNvbXBsZXRlKCZjLT5jb21wbGV0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjLAotCQl2b2lkICppdiwgaW50IGVuYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2NvbXBsZXRpb24gYzsKLQlpbnQgZXJyOwotCi0JaW5pdF9jb21wbGV0aW9uKCZjLmNvbXBsZXRlKTsKLQljLmVycm9yID0gLUVJTlBST0dSRVNTOwotCi0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HLAotCQkJCQlkc3RfY3J5cHRvX2NvbXBsZXRlLCAmYyk7Ci0KLQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2dfc3JjLCBzZ19kc3QsIHNnX3NyYy0+bGVuZ3RoLCBpdik7Ci0KLQlpZiAoZW5jKQotCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KHJlcSk7Ci0JZWxzZQotCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KHJlcSk7Ci0KLQlzd2l0Y2ggKGVycikgewotCWNhc2UgLUVJTlBST0dSRVNTOgotCWNhc2UgLUVCVVNZOgotCQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmYy5jb21wbGV0ZSwKLQkJCQl0aW1lb3V0KTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSAtRVRJTUVET1VUOwotCQllbHNlCi0JCQllcnIgPSBjLmVycm9yOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogRFNUIHVzZXMgZ2VuZXJpYyBpdGVyYXRpb24gYXBwcm9hY2ggZm9yIGRhdGEgY3J5cHRvIHByb2Nlc3NpbmcuCi0gKiBTaW5nbGUgYmxvY2sgSU8gcmVxdWVzdCBpcyBzd2l0Y2hlZCBpbnRvIGFycmF5IG9mIHNjYXR0ZXJsaXN0cywKLSAqIHdoaWNoIGFyZSBzdWJtaXR0ZWQgdG8gdGhlIGNyeXB0byBwcm9jZXNzaW5nIGl0ZXJhdG9yLgotICoKLSAqIElucHV0IGFuZCBvdXRwdXQgaXRlcmF0b3IgaW5pdGlhbGl6YXRpb24gYXJlIGRpZmZlcmVudCwgc2luY2UKLSAqIGluIG91dHB1dCBjYXNlIHdlIGNhbiBub3QgZW5jcnlwdCBkYXRhIGluLXBsYWNlIGFuZCBuZWVkIGEKLSAqIHRlbXBvcmFyeSBzdG9yYWdlLCB3aGljaCBpcyB0aGVuIGJlaW5nIHNlbnQgdG8gdGhlIHJlbW90ZSBwZWVyLgotICovCi1zdGF0aWMgaW50IGRzdF90cmFuc19pdGVyX291dChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKLQkJaW50ICgqaXRlcmF0b3IpIChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjKSkKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0JaW50IGVyciwgaTsKLQotCXNnX2luaXRfdGFibGUoZS0+c3JjLCBiaW8tPmJpX3ZjbnQpOwotCXNnX2luaXRfdGFibGUoZS0+ZHN0LCBiaW8tPmJpX3ZjbnQpOwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlzZ19zZXRfcGFnZSgmZS0+c3JjW2ldLCBidi0+YnZfcGFnZSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0JCXNnX3NldF9wYWdlKCZlLT5kc3RbaV0sIGUtPnBhZ2VzW2ldLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKLQotCQllcnIgPSBpdGVyYXRvcihlLCAmZS0+ZHN0W2ldLCAmZS0+c3JjW2ldKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X3RyYW5zX2l0ZXJfaW4oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCWludCAoKml0ZXJhdG9yKSAoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBlcnIsIGk7Ci0KLQlzZ19pbml0X3RhYmxlKGUtPnNyYywgYmlvLT5iaV92Y250KTsKLQlzZ19pbml0X3RhYmxlKGUtPmRzdCwgYmlvLT5iaV92Y250KTsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJc2dfc2V0X3BhZ2UoJmUtPnNyY1tpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOwotCQlzZ19zZXRfcGFnZSgmZS0+ZHN0W2ldLCBidi0+YnZfcGFnZSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0KLQkJZXJyID0gaXRlcmF0b3IoZSwgJmUtPmRzdFtpXSwgJmUtPnNyY1tpXSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdF9pdGVyYXRvcihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYykKLXsKLQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOwotCXU4IGl2WzMyXTsKLQotCW1lbXNldChpdiwgMCwgc2l6ZW9mKGl2KSk7Ci0KLQltZW1jcHkoaXYsICZlLT5pdiwgc2l6ZW9mKGUtPml2KSk7Ci0KLQlyZXR1cm4gZHN0X2NyeXB0b19wcm9jZXNzKHJlcSwgc2dfZHN0LCBzZ19zcmMsIGl2LCBlLT5lbmMsIGUtPnRpbWVvdXQpOwotfQotCi1zdGF0aWMgaW50IGRzdF9jcnlwdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOwotCi0JbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QpKTsKLQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGUtPmNpcGhlcik7Ci0KLQlpZiAoZS0+ZW5jKQotCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfb3V0KGJpbywgZSwgZHN0X2NyeXB0X2l0ZXJhdG9yKTsKLQllbHNlCi0JCXJldHVybiBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2hhc2hfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCi17Ci0JcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZShlLT5kYXRhLCBzZ19zcmMsIHNnX3NyYy0+bGVuZ3RoKTsKLX0KLQotc3RhdGljIGludCBkc3RfaGFzaChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZHN0KQotewotCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MgPSBlLT5kYXRhOwotCWludCBlcnI7Ci0KLQlkZXNjLT50Zm0gPSBlLT5oYXNoOwotCWRlc2MtPmZsYWdzID0gMDsKLQotCWVyciA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGRzdF90cmFuc19pdGVyX2luKGJpbywgZSwgZHN0X2hhc2hfaXRlcmF0b3IpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBkc3QpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUvY2xlYW51cCBhIGNyeXB0byB0aHJlYWQuIFRoZSBvbmx5IHRoaW5nIGl0IHNob3VsZAotICogZG8gaXMgdG8gYWxsb2NhdGUgYSBwb29sIG9mIHBhZ2VzIGFzIHRlbXBvcmFyeSBzdG9yYWdlLgotICogQW5kIHRvIHNldHVwIGNpcGhlciBhbmQvb3IgaGFzaC4KLSAqLwotc3RhdGljIHZvaWQgKmRzdF9jcnlwdG9fdGhyZWFkX2luaXQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBkYXRhOwotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZTsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCWUtPnNyYyA9IGtjYWxsb2MoMiAqIG4tPm1heF9wYWdlcywgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWUtPnNyYykKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQllLT5kc3QgPSBlLT5zcmMgKyBuLT5tYXhfcGFnZXM7Ci0KLQllcnIgPSBkc3RfY3J5cHRvX2VuZ2luZV9pbml0KGUsIG4pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlX2FsbDsKLQotCXJldHVybiBlOwotCi1lcnJfb3V0X2ZyZWVfYWxsOgotCWtmcmVlKGUtPnNyYyk7Ci1lcnJfb3V0X2ZyZWU6Ci0Ja2ZyZWUoZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCh2b2lkICpwcml2YXRlKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IHByaXZhdGU7Ci0KLQlkc3RfY3J5cHRvX2VuZ2luZV9leGl0KGUpOwotCWtmcmVlKGUtPnNyYyk7Ci0Ja2ZyZWUoZSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGU6IHN0b3JlIGtleXMsIGNyZWF0ZSBwb29sCi0gKiBvZiB0aHJlYWRzLCBpbml0aWFsaXplIGVhY2ggb25lLgotICoKLSAqIEVhY2ggdGhyZWFkIGhhcyB1bmlxdWUgSUQsIGJ1dCAwIGFuZCAxIGFyZSByZXNlcnZlZCBmb3IgcmVjZWl2aW5nIGFuZAotICogYWNjZXB0aW5nIHRocmVhZHMgKGlmIGV4cG9ydCBub2RlKSwgc28gSURzIGNvdWxkIHN0YXJ0IGZyb20gMiwgYnV0IHN0YXJ0aW5nCi0gKiB0aGVtIGZyb20gMTAgYWxsb3dzIGVhc2lseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aHJlYWQgaXMgZm9yLgotICovCi1pbnQgZHN0X25vZGVfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCkKLXsKLQl2b2lkICprZXkgPSAoY3RsICsgMSk7Ci0JaW50IGVyciA9IC1FTk9NRU0sIGk7Ci0JY2hhciBuYW1lWzMyXTsKLQotCWlmIChjdGwtPmhhc2hfa2V5c2l6ZSkgewotCQluLT5oYXNoX2tleSA9IGttYWxsb2MoY3RsLT5oYXNoX2tleXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW4tPmhhc2hfa2V5KQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JCW1lbWNweShuLT5oYXNoX2tleSwga2V5LCBjdGwtPmhhc2hfa2V5c2l6ZSk7Ci0JfQotCi0JaWYgKGN0bC0+Y2lwaGVyX2tleXNpemUpIHsKLQkJbi0+Y2lwaGVyX2tleSA9IGttYWxsb2MoY3RsLT5jaXBoZXJfa2V5c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbi0+Y2lwaGVyX2tleSkKLQkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7Ci0JCW1lbWNweShuLT5jaXBoZXJfa2V5LCBrZXksIGN0bC0+Y2lwaGVyX2tleXNpemUpOwotCX0KLQltZW1jcHkoJm4tPmNyeXB0bywgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fY3RsKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3RsLT50aHJlYWRfbnVtOyArK2kpIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMtY3J5cHRvLSVkIiwgbi0+bmFtZSwgaSk7Ci0JCS8qIFVuaXF1ZSBpZHMuLi4gKi8KLQkJZXJyID0gdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihuLT5wb29sLCBuYW1lLCBpICsgMTAsCi0JCQlkc3RfY3J5cHRvX3RocmVhZF9pbml0LCBkc3RfY3J5cHRvX3RocmVhZF9jbGVhbnVwLCBuKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlX3RocmVhZHM7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZV90aHJlYWRzOgotCXdoaWxlICgtLWkgPj0gMCkKLQkJdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChuLT5wb29sLCBpKzEwKTsKLQotCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKQotCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKLQljdGwtPmNpcGhlcl9rZXlzaXplID0gMDsKLWVycl9vdXRfZnJlZV9oYXNoOgotCWlmIChjdGwtPmhhc2hfa2V5c2l6ZSkKLQkJa2ZyZWUobi0+aGFzaF9rZXkpOwotCWN0bC0+aGFzaF9rZXlzaXplID0gMDsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi12b2lkIGRzdF9ub2RlX2NyeXB0b19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCA9ICZuLT5jcnlwdG87Ci0KLQlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSB8fCBjdGwtPmhhc2hfYWxnb1swXSkgewotCQlrZnJlZShuLT5oYXNoX2tleSk7Ci0JCWtmcmVlKG4tPmNpcGhlcl9rZXkpOwotCX0KLX0KLQotLyoKLSAqIFRocmFkIHBvb2wgc2V0dXAgY2FsbGJhY2suIEp1c3Qgc3RvcmVzIGEgdHJhbnNhY3Rpb24gaW4gcHJpdmF0ZSBkYXRhLgotICovCi1zdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqdHJhbnMpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKLQotCWUtPnByaXZhdGUgPSB0cmFuczsKLQlyZXR1cm4gMDsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkIGRzdF9kdW1wX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JdTggKnA7Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCWludCBpOwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlkcHJpbnRrKCIlczogJWxsdS8ldTogc2l6ZTogJXUsIG9mZnNldDogJXUsIGRhdGE6ICIsCi0JCQkJX19mdW5jX18sIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQkJYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7Ci0KLQkJcCA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKLQkJZm9yIChpID0gMDsgaSA8IGJ2LT5idl9sZW47ICsraSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlMDJ4ICIsIHBbaV0pOwotCQlrdW5tYXAoYnYtPmJ2X3BhZ2UpOwotCQlwcmludGsoIlxuIik7Ci0JfQotfQotI2VuZGlmCi0KLS8qCi0gKiBFbmNyeXB0L2hhc2ggZGF0YSBhbmQgc2VuZCBpdCB0byB0aGUgbmV0d29yay4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCi0JCXN0cnVjdCBiaW8gKmJpbywgdTggKmhhc2gpCi17Ci0JaW50IGVycjsKLQotCWlmIChlLT5jaXBoZXIpIHsKLQkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQlpZiAoZS0+aGFzaCkgewotCQllcnIgPSBkc3RfaGFzaChlLCBiaW8sIGhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLSNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCi0JCXsKLQkJCXVuc2lnbmVkIGludCBpOwotCi0JCQkvKiBkc3RfZHVtcF9iaW8oYmlvKTsgKi8KLQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGhhc2g6ICIsCi0JCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsCi0JCQkJYmlvLT5iaV9zaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKQotCQkJCQlwcmludGsoIiUwMnggIiwgaGFzaFtpXSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIENoZWNrIGlmIHJlY2VpdmVkIGRhdGEgaXMgdmFsaWQuIERlY2lwaGVyIGlmIGl0IGlzLgotICovCi1zdGF0aWMgaW50IGRzdF9jcnlwdG9fcHJvY2Vzc19yZWNlaXZpbmcoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAotCQlzdHJ1Y3QgYmlvICpiaW8sIHU4ICpoYXNoLCB1OCAqcmVjdl9oYXNoKQotewotCWludCBlcnI7Ci0KLQlpZiAoZS0+aGFzaCkgewotCQlpbnQgbWlzbWF0Y2g7Ci0KLQkJZXJyID0gZHN0X2hhc2goZSwgYmlvLCBoYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCW1pc21hdGNoID0gISFtZW1jbXAocmVjdl9oYXNoLCBoYXNoLAotCQkJCWNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCkpOwotI2lmZGVmIENPTkZJR19EU1RfREVCVUcKLQkJLyogZHN0X2R1bXBfYmlvKGJpbyk7ICovCi0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGhhc2ggbWlzbWF0Y2g6ICVkIiwKLQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQliaW9fZGF0YV9kaXIoYmlvKSwgbWlzbWF0Y2gpOwotCQlpZiAobWlzbWF0Y2gpIHsKLQkJCXVuc2lnbmVkIGludCBpOwotCi0JCQlwcmludGsoIiwgcmVjdi9jYWxjOiAiKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOyArK2kpCi0JCQkJcHJpbnRrKCIlMDJ4LyUwMnggIiwgcmVjdl9oYXNoW2ldLCBoYXNoW2ldKTsKLQotCQl9Ci0JCXByaW50aygiXG4iKTsKLSNlbmRpZgotCQllcnIgPSAtMTsKLQkJaWYgKG1pc21hdGNoKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JaWYgKGUtPmNpcGhlcikgewotCQllcnIgPSBkc3RfY3J5cHQoZSwgYmlvKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFRocmVhZCBwb29sIGNhbGxiYWNrIHRvIGVuY3J5cHQgZGF0YSBhbmQgc2VuZCBpdCB0byB0aGUgbmV0b3dvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3RyYW5zX2NyeXB0b19hY3Rpb24odm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUgPSBjcnlwdG9fZW5naW5lOwotCXN0cnVjdCBkc3RfdHJhbnMgKnQgPSBzY2hlZHVsZV9kYXRhOwotCXN0cnVjdCBiaW8gKmJpbyA9IHQtPmJpbzsKLQlpbnQgZXJyOwotCi0JZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICVsbHUsIGNpcGhlcjogJXAsIGhhc2g6ICVwLlxuIiwKLQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIGUtPmNpcGhlciwgZS0+aGFzaCk7Ci0KLQllLT5lbmMgPSB0LT5lbmM7Ci0JZS0+aXYgPSBkc3RfZ2VuX2l2KHQpOwotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7Ci0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19zZW5kaW5nKGUsIGJpbywgdC0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGUtPmhhc2gpIHsKLQkJCXQtPmNtZC5jc2l6ZSA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7Ci0JCQl0LT5jbWQuc2l6ZSArPSB0LT5jbWQuY3NpemU7Ci0JCX0KLQotCQlyZXR1cm4gZHN0X3RyYW5zX3NlbmQodCk7Ci0JfSBlbHNlIHsKLQkJdTggKmhhc2ggPSBlLT5kYXRhICsgZS0+c2l6ZS8yOwotCi0JCWVyciA9IGRzdF9jcnlwdG9fcHJvY2Vzc19yZWNlaXZpbmcoZSwgYmlvLCBoYXNoLCB0LT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlkc3RfdHJhbnNfcmVtb3ZlKHQpOwotCQlkc3RfdHJhbnNfcHV0KHQpOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JdC0+ZXJyb3IgPSBlcnI7Ci0JZHN0X3RyYW5zX3B1dCh0KTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2NoZWR1bGUgY3J5cHRvIHByb2Nlc3NpbmcgZm9yIGdpdmVuIHRyYW5zYWN0aW9uLgotICovCi1pbnQgZHN0X3RyYW5zX2NyeXB0byhzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHQtPm47Ci0JaW50IGVycjsKLQotCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsCi0JCWRzdF90cmFuc19jcnlwdG9fc2V0dXAsIGRzdF90cmFuc19jcnlwdG9fYWN0aW9uLAotCQl0LCBNQVhfU0NIRURVTEVfVElNRU9VVCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9leGl0OgotCWRzdF90cmFuc19wdXQodCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIENyeXB0byBtYWNoaW5lcnkgZm9yIHRoZSBleHBvcnQgbm9kZS4KLSAqLwotc3RhdGljIGludCBkc3RfZXhwb3J0X2NyeXB0b19zZXR1cCh2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpiaW8pCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKLQotCWUtPnByaXZhdGUgPSBiaW87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9jcnlwdG9fYWN0aW9uKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSBzY2hlZHVsZV9kYXRhOwotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBiaW8tPmJpX3ByaXZhdGU7Ci0JaW50IGVycjsKLQotCWRwcmludGsoIiVzOiBlOiAlcCwgZGF0YTogJXAsIGJpbzogJWxsdS8ldSwgZGlyOiAlbHUuXG4iLAotCQkJX19mdW5jX18sIGUsIGUtPmRhdGEsICh1NjQpYmlvLT5iaV9zZWN0b3IsCi0JCQliaW8tPmJpX3NpemUsIGJpb19kYXRhX2RpcihiaW8pKTsKLQotCWUtPmVuYyA9IChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKTsKLQllLT5pdiA9IHAtPmNtZC5pZDsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQl1OCAqaGFzaCA9IGUtPmRhdGEgKyBlLT5zaXplLzI7Ci0KLQkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhlLCBiaW8sIGhhc2gsIHAtPmNtZC5oYXNoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X2NyeXB0b19wcm9jZXNzX3NlbmRpbmcoZSwgYmlvLCBwLT5jbWQuaGFzaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlpZiAoZS0+aGFzaCkgewotCQkJcC0+Y21kLmNzaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsKLQkJCXAtPmNtZC5zaXplICs9IHAtPmNtZC5jc2l6ZTsKLQkJfQotCi0JCWVyciA9IGRzdF9leHBvcnRfc2VuZF9iaW8oYmlvKTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQliaW9fcHV0KGJpbyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGRzdF9leHBvcnRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGJpbyAqYmlvKQotewotCWludCBlcnI7Ci0KLQllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAotCQlkc3RfZXhwb3J0X2NyeXB0b19zZXR1cCwgZHN0X2V4cG9ydF9jcnlwdG9fYWN0aW9uLAotCQliaW8sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JYmlvX3B1dChiaW8pOwotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2NhN2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTY4ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotCi0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbjYuaD4KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLXN0YXRpYyBpbnQgZHN0X21ham9yOwotCi1zdGF0aWMgREVGSU5FX01VVEVYKGRzdF9oYXNoX2xvY2spOwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9oYXNodGFibGU7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRzdF9oYXNodGFibGVfc2l6ZSA9IDEyODsKLW1vZHVsZV9wYXJhbShkc3RfaGFzaHRhYmxlX3NpemUsIHVpbnQsIDA2NDQpOwotCi1zdGF0aWMgY2hhciBkc3RfbmFtZVtdID0gIkRlbWVudGlhbnRpbmcgZ29sZGZpc2giOwotCi1zdGF0aWMgREVGSU5FX0lEUihkc3RfaW5kZXhfaWRyKTsKLXN0YXRpYyBzdHJ1Y3QgY2JfaWQgY25fZHN0X2lkID0geyBDTl9EU1RfSURYLCBDTl9EU1RfVkFMIH07Ci0KLS8qCi0gKiBEU1Qgc3lzZnMgdHJlZSBmb3IgZGV2aWNlIGNhbGxlZCAnc3RvcmFnZSc6Ci0gKgotICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS8KLSAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2UvdHlwZSA6IDE5Mi4xNjguNC44MDoxMDI1Ci0gKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL3NpemUgOiA4MDAKLSAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2UvbmFtZSA6IHN0b3JhZ2UKLSAqLwotCi1zdGF0aWMgaW50IGRzdF9kZXZfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1c190eXBlIGRzdF9kZXZfYnVzX3R5cGUgPSB7Ci0JLm5hbWUgCQk9ICJkc3QiLAotCS5tYXRjaCAJCT0gJmRzdF9kZXZfbWF0Y2gsCi19OwotCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7Ci0KLQlrZnJlZShpbmZvKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2UgZHN0X25vZGVfZGV2ID0gewotCS5idXMgCQk9ICZkc3RfZGV2X2J1c190eXBlLAotCS5yZWxlYXNlIAk9ICZkc3Rfbm9kZV9yZWxlYXNlCi19OwotCi0vKgotICogU2V0dGluZyBzaXplIG9mIHRoZSBub2RlIGFmdGVyIGl0IHdhcyBjaGFuZ2VkLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9zZXRfc2l6ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQotCXNldF9jYXBhY2l0eShuLT5kaXNrLCBuLT5zaXplID4+IDkpOwotCi0JYmRldiA9IGJkZ2V0X2Rpc2sobi0+ZGlzaywgMCk7Ci0JaWYgKGJkZXYpIHsKLQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwotCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIG4tPnNpemUpOwotCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJYmRwdXQoYmRldik7Ci0JfQotfQotCi0vKgotICogRGlzdHJpYnV0ZWQgc3RvcmFnZSByZXF1ZXN0IHByb2Nlc3NpbmcgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBxLT5xdWV1ZWRhdGE7Ci0JaW50IGVyciA9IC1FSU87Ci0KLQlpZiAoYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSAmJiAhYmxrX3F1ZXVlX2Rpc2NhcmQocSkpIHsKLQkJLyoKLQkJICogVGhpcyBpcyBhIGRpcnR5XlduaWNlIGhhY2ssIGJ1dCBpZiB3ZSBjb21wbGV0ZSB0aGlzCi0JCSAqIG9wZXJhdGlvbiB3aXRoIC1FT1BOT1RTVVBQIGxpa2UgaW50ZW5kZWQsIFhGUwotCQkgKiB3aWxsIHN0dWNrIGFuZCBmcmVlemUgdGhlIG1hY2hpbmUuIFRoaXMgbWF5IGJlCi0JCSAqIG5vdCBwYXJ0aWN1bGFyeSBYRlMgcHJvYmxlbSB0aG91Z2gsIGJ1dCBpdCBpcyB0aGUKLQkJICogb25seSBGUyB3aGljaCBzZW5kcyBlbXB0eSBiYXJyaWVyIGF0IHVtb3VudCB0aW1lCi0JCSAqIEkgd29ya2VkIHdpdGguCi0JCSAqCi0JCSAqIEVtcHR5IGJhcnJpZXJzIGFyZSBub3QgYWxsb3dlZCBhbnl3YXksIHNlZSA1MWZkNzdiZDlmNTEyCi0JCSAqIGZvciBleGFtcGxlLCBhbHRob3VnaCBsYXRlciBpdCB3YXMgY2hhbmdlZCB0bwotCQkgKiBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSBvbmx5LCB3aGljaCBkb2VzIG5vdAotCQkgKiB3b3JrIGluIHRoaXMgY2FzZS4KLQkJICovCi0JCS8qIGVyciA9IC1FT1BOT1RTVVBQOyAqLwotCQllcnIgPSAwOwotCQlnb3RvIGVuZF9pbzsKLQl9Ci0KLQliaW9fZ2V0KGJpbyk7Ci0KLQlyZXR1cm4gZHN0X3Byb2Nlc3NfYmlvKG4sIGJpbyk7Ci0KLWVuZF9pbzoKLQliaW9fZW5kaW8oYmlvLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBPcGVuL2Nsb3NlIGNhbGxiYWNrcyBmb3IgYXBwcm9wcmlhdGUgYmxvY2sgZGV2aWNlLgotICovCi1zdGF0aWMgaW50IGRzdF9iZGV2X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQotCWRzdF9ub2RlX2dldChuKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3RfYmRldl9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JZHN0X25vZGVfcHV0KG4pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRzdF9ibGtfb3BzID0gewotCS5vcGVuCQk9IGRzdF9iZGV2X29wZW4sCi0JLnJlbGVhc2UJPSBkc3RfYmRldl9yZWxlYXNlLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLX07Ci0KLS8qCi0gKiBCbG9jayBsYXllciBiaW5kaW5nIC0gZGlzayBpcyBjcmVhdGVkIHdoZW4gYXJyYXkgaXMgZnVsbHkgY29uZmlndXJlZAotICogYnkgdXNlcnNwYWNlIHJlcXVlc3QuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X25vZGVfY3JlYXRlX2Rpc2soc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnIgPSAtRU5PTUVNOwotCXUzMiBpbmRleCA9IDA7Ci0KLQluLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKE5VTEwsIE5VTEwpOwotCWlmICghbi0+cXVldWUpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0Jbi0+cXVldWUtPnF1ZXVlZGF0YSA9IG47Ci0JYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChuLT5xdWV1ZSwgZHN0X3JlcXVlc3QpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhuLT5xdWV1ZSwgbi0+bWF4X3BhZ2VzKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG4tPnF1ZXVlLCBuLT5tYXhfcGFnZXMpOwotCi0JZXJyID0gLUVOT01FTTsKLQluLT5kaXNrID0gYWxsb2NfZGlzaygxKTsKLQlpZiAoIW4tPmRpc2spCi0JCWdvdG8gZXJyX291dF9mcmVlX3F1ZXVlOwotCi0JaWYgKCEobi0+c3RhdGUtPnBlcm1pc3Npb25zICYgRFNUX1BFUk1fV1JJVEUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRTVCBub2RlICVzIGF0dGFjaGVkIHJlYWQtb25seS5cbiIsIG4tPm5hbWUpOwotCQlzZXRfZGlza19ybyhuLT5kaXNrLCAxKTsKLQl9Ci0KLQlpZiAoIWlkcl9wcmVfZ2V0KCZkc3RfaW5kZXhfaWRyLCBHRlBfS0VSTkVMKSkKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCWVyciA9IGlkcl9nZXRfbmV3KCZkc3RfaW5kZXhfaWRyLCBOVUxMLCAmaW5kZXgpOwotCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCW4tPmRpc2stPm1ham9yID0gZHN0X21ham9yOwotCW4tPmRpc2stPmZpcnN0X21pbm9yID0gaW5kZXg7Ci0Jbi0+ZGlzay0+Zm9wcyA9ICZkc3RfYmxrX29wczsKLQluLT5kaXNrLT5xdWV1ZSA9IG4tPnF1ZXVlOwotCW4tPmRpc2stPnByaXZhdGVfZGF0YSA9IG47Ci0Jc25wcmludGYobi0+ZGlzay0+ZGlza19uYW1lLCBzaXplb2Yobi0+ZGlzay0+ZGlza19uYW1lKSwKLQkJCSJkc3QtJXMiLCBuLT5uYW1lKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3B1dDoKLQlwdXRfZGlzayhuLT5kaXNrKTsKLWVycl9vdXRfZnJlZV9xdWV1ZToKLQlibGtfY2xlYW51cF9xdWV1ZShuLT5xdWV1ZSk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFN5c2ZzIG1hY2hpbmVyeTogc2hvdyBkZXZpY2UncyBzaXplLgotICovCi1zdGF0aWMgc3NpemVfdCBkc3Rfc2hvd19zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCBpbmZvLT5zaXplKTsKLX0KLQotLyoKLSAqIFNob3cgbG9jYWwgZXhwb3J0ZWQgZGV2aWNlLgotICovCi1zdGF0aWMgc3NpemVfdCBkc3Rfc2hvd19sb2NhbChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGluZm8tPmxvY2FsKTsKLX0KLQotLyoKLSAqIFNob3dzIHR5cGUgb2YgdGhlIHJlbW90ZSBub2RlIC0gZGV2aWNlIG1ham9yL21pbm9yIG51bWJlcgotICogZm9yIGxvY2FsIG5vZGVzIGFuZCBhZGRyZXNzIChhZl9pbmV0IGlwdjQvaXB2NiBvbmx5KSBmb3IgcmVtb3RlIG5vZGVzLgotICovCi1zdGF0aWMgc3NpemVfdCBkc3Rfc2hvd190eXBlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7Ci0JaW50IGZhbWlseSA9IGluZm8tPm5ldC5hZGRyLnNhX2ZhbWlseTsKLQotCWlmIChmYW1pbHkgPT0gQUZfSU5FVCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaW5mby0+bmV0LmFkZHI7Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1LiV1LiV1LiV1OiVkXG4iLAotCQkJTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKLQl9IGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKQotCQkJCSZpbmZvLT5uZXQuYWRkcjsKLQkJcmV0dXJuIHNwcmludGYoYnVmLAotCQkJIiVwaTY6JWRcbiIsCi0JCQkmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7Ci0JfSBlbHNlIHsKLQkJaW50IGksIHN6ID0gUEFHRV9TSVpFIC0gMjsgLyogMCBzeW1ib2wgYW5kICdcbicgYmVsb3cgKi8KLQkJaW50IHNpemUsIGFkZHJsZW4gPSBpbmZvLT5uZXQuYWRkci5zYV9kYXRhX2xlbjsKLQkJdW5zaWduZWQgY2hhciAqYSA9ICh1bnNpZ25lZCBjaGFyICopJmluZm8tPm5ldC5hZGRyLnNhX2RhdGE7Ci0JCWNoYXIgKmJ1Zl9vcmlnID0gYnVmOwotCi0JCXNpemUgPSBzbnByaW50ZihidWYsIHN6LCAiZmFtaWx5OiAlZCwgYWRkcmxlbjogJXUsIGFkZHI6ICIsCi0JCQkJZmFtaWx5LCBhZGRybGVuKTsKLQkJc3ogLT0gc2l6ZTsKLQkJYnVmICs9IHNpemU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGFkZHJsZW47ICsraSkgewotCQkJaWYgKHN6IDwgMykKLQkJCQlicmVhazsKLQotCQkJc2l6ZSA9IHNucHJpbnRmKGJ1Ziwgc3osICIlMDJ4ICIsIGFbaV0pOwotCQkJc3ogLT0gc2l6ZTsKLQkJCWJ1ZiArPSBzaXplOwotCQl9Ci0JCWJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIlxuIik7Ci0KLQkJcmV0dXJuIGJ1ZiAtIGJ1Zl9vcmlnOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRzdF9ub2RlX2F0dHJzW10gPSB7Ci0JX19BVFRSKHNpemUsIDA0NDQsIGRzdF9zaG93X3NpemUsIE5VTEwpLAotCV9fQVRUUih0eXBlLCAwNDQ0LCBkc3Rfc2hvd190eXBlLCBOVUxMKSwKLQlfX0FUVFIobG9jYWwsIDA0NDQsIGRzdF9zaG93X2xvY2FsLCBOVUxMKSwKLX07Ci0KLXN0YXRpYyBpbnQgZHN0X2NyZWF0ZV9ub2RlX2F0dHJpYnV0ZXMoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBlcnIsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkgewotCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKLQkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3JlbW92ZV9hbGw7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfb3V0X3JlbW92ZV9hbGw6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKLQkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgZHN0X3JlbW92ZV9ub2RlX2F0dHJpYnV0ZXMoc3RydWN0IGRzdF9ub2RlICpuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHN0X25vZGVfYXR0cnMpOyArK2kpCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmbi0+aW5mby0+ZGV2aWNlLAotCQkJCSZkc3Rfbm9kZV9hdHRyc1tpXSk7Ci19Ci0KLS8qCi0gKiBTeXNmcyBjbGVhbnVwIGFuZCBpbml0aWFsaXphdGlvbi4KLSAqIFNob3dzIG51bWJlciBvZiB1c2VmdWwgcGFyYW1ldGVycy4KLSAqLwotc3RhdGljIHZvaWQgZHN0X25vZGVfc3lzZnNfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaWYgKG4tPmluZm8pIHsKLQkJZHN0X3JlbW92ZV9ub2RlX2F0dHJpYnV0ZXMobik7Ci0JCWRldmljZV91bnJlZ2lzdGVyKCZuLT5pbmZvLT5kZXZpY2UpOwotCQluLT5pbmZvID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X25vZGVfc3lzZnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVycjsKLQotCW4tPmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW4tPmluZm8pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KCZuLT5pbmZvLT5kZXZpY2UsICZkc3Rfbm9kZV9kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7Ci0Jbi0+aW5mby0+c2l6ZSA9IG4tPnNpemU7Ci0KLQlkZXZfc2V0X25hbWUoJm4tPmluZm8tPmRldmljZSwgImRzdC0lcyIsIG4tPm5hbWUpOwotCWVyciA9IGRldmljZV9yZWdpc3Rlcigmbi0+aW5mby0+ZGV2aWNlKTsKLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBub2RlICclcycsIGVycjogJWQuXG4iLAotCQkJCW4tPm5hbWUsIGVycik7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWRzdF9jcmVhdGVfbm9kZV9hdHRyaWJ1dGVzKG4pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlrZnJlZShuLT5pbmZvKTsKLQluLT5pbmZvID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogRFNUIG5vZGUgaGFzaCB0YWJsZXMgbWFjaGluZXJ5LgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkc3RfaGFzaChjaGFyICpzdHIsIHVuc2lnbmVkIGludCBzaXplKQotewotCXJldHVybiBqaGFzaChzdHIsIHNpemUsIDApICUgZHN0X2hhc2h0YWJsZV9zaXplOwotfQotCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9yZW1vdmUoc3RydWN0IGRzdF9ub2RlICpuKQotewotCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOwotCWxpc3RfZGVsX2luaXQoJm4tPm5vZGVfZW50cnkpOwotCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzdF9ub2RlX2FkZChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JdW5zaWduZWQgaGFzaCA9IGRzdF9oYXNoKG4tPm5hbWUsIHNpemVvZihuLT5uYW1lKSk7Ci0KLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZuLT5ub2RlX2VudHJ5LCAmZHN0X2hhc2h0YWJsZVtoYXNoXSk7Ci0JbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLX0KLQotLyoKLSAqIENsZWFuaW5nIG5vZGUgd2hlbiBpdCBpcyBhYm91dCB0byBiZSBmcmVlZC4KLSAqIFRoZXJlIGFyZSBzdGlsbCB1c2VycyBvZiB0aGUgc29ja2V0IHRob3VnaCwKLSAqIHNvIGNvbm5lY3Rpb24gY2xlYW51cCBzaG91bGQgYmUgcHJvdGVjdGVkLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfbm9kZV9jbGVhbnVwKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IG4tPnN0YXRlOwotCi0JaWYgKCFzdCkKLQkJcmV0dXJuOwotCi0JaWYgKG4tPnF1ZXVlKSB7Ci0JCWJsa19jbGVhbnVwX3F1ZXVlKG4tPnF1ZXVlKTsKLQotCQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQkJaWRyX3JlbW92ZSgmZHN0X2luZGV4X2lkciwgbi0+ZGlzay0+Zmlyc3RfbWlub3IpOwotCQltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOwotCi0JCXB1dF9kaXNrKG4tPmRpc2spOwotCX0KLQotCWlmIChuLT5iZGV2KSB7Ci0JCXN5bmNfYmxvY2tkZXYobi0+YmRldik7Ci0JCWNsb3NlX2JkZXZfZXhjbHVzaXZlKG4tPmJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwotCX0KLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlzdC0+bmVlZF9leGl0ID0gMTsKLQlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLQotCWRzdF9zdGF0ZV9wdXQoc3QpOwotCW4tPnN0YXRlID0gTlVMTDsKLX0KLQotLyoKLSAqIEZyZWUgc2VjdXJpdHkgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBnaXZlbiBub2RlLgotICovCi1zdGF0aWMgdm9pZCBkc3Rfc2VjdXJpdHlfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0Jc3RydWN0IGRzdF9zZWN1cmUgKnMsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgdG1wLCAmbi0+c2VjdXJpdHlfbGlzdCwgc2VjX2VudHJ5KSB7Ci0JCWxpc3RfZGVsKCZzLT5zZWNfZW50cnkpOwotCQlrZnJlZShzKTsKLQl9Ci19Ci0KLS8qCi0gKiBGcmVlIG5vZGUgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB1c2Vycy4KLSAqIEFjdHVhbGx5IG5vZGUgaGFzIHRvIGJlIGZyZWVkIG9uIGJlaGFsZiBvZCB1c2Vyc3BhY2UgcHJvY2VzcywKLSAqIHNpbmNlIHRoZXJlIGFyZSBudW1iZXIgb2YgdGhyZWFkcywgd2hpY2ggYXJlIGVtYmVkZGVkIGluIHRoZQotICogbm9kZSwgc28gdGhleSBjYW4gbm90IGV4aXQgYW5kIGZyZWUgbm9kZSBmcm9tIHRoZXJlLCB0aGF0IGlzCi0gKiB3aHkgdGhlcmUgaXMgYSB3YWtldXAgaWYgcmVmZXJlbmNlIGNvdW50ZXIgaXMgbm90IGVxdWFsIHRvIHplcm8uCi0gKi8KLXZvaWQgZHN0X25vZGVfcHV0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlpZiAodW5saWtlbHkoIW4pKQotCQlyZXR1cm47Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIHJlZmNudDogJWQuXG4iLAotCQkJX19mdW5jX18sIG4sIGF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZuLT5yZWZjbnQpKSB7Ci0JCWRzdF9ub2RlX3JlbW92ZShuKTsKLQkJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gMDsKLQkJZHN0X25vZGVfY2xlYW51cChuKTsKLQkJdGhyZWFkX3Bvb2xfZGVzdHJveShuLT5wb29sKTsKLQkJZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKLQkJZHN0X25vZGVfY3J5cHRvX2V4aXQobik7Ci0JCWRzdF9zZWN1cml0eV9leGl0KG4pOwotCQlkc3Rfbm9kZV90cmFuc19leGl0KG4pOwotCi0JCWtmcmVlKG4pOwotCi0JCWRwcmludGsoIiVzOiBmcmVlZCBuOiAlcC5cbiIsIF9fZnVuY19fLCBuKTsKLQl9IGVsc2UgewotCQl3YWtlX3VwKCZuLT53YWl0KTsKLQl9Ci19Ci0KLS8qCi0gKiBTZXR0aW5nIHVwIGV4cG9ydCBkZXZpY2U6IGxvb2t1cCBieSB0aGUgbmFtZSwgZ2V0IGl0cyBzaXplCi0gKiBhbmQgc2V0dXAgbGlzdGVuaW5nIHNvY2tldCwgd2hpY2ggd2lsbCBhY2NlcHQgY2xpZW50cywgd2hpY2gKLSAqIHdpbGwgc3VibWl0IElPIGZvciBnaXZlbiBzdG9yYWdlLgotICovCi1zdGF0aWMgaW50IGRzdF9zZXR1cF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQlzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKQotewotCWludCBlcnI7Ci0KLQlzbnByaW50ZihuLT5pbmZvLT5sb2NhbCwgc2l6ZW9mKG4tPmluZm8tPmxvY2FsKSwgIiVzIiwgbGUtPmRldmljZSk7Ci0KLQluLT5iZGV2ID0gb3Blbl9iZGV2X2V4Y2x1c2l2ZShsZS0+ZGV2aWNlLCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFLCBOVUxMKTsKLQlpZiAoSVNfRVJSKG4tPmJkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihuLT5iZGV2KTsKLQotCWlmIChuLT5zaXplICE9IDApCi0JCW4tPnNpemUgPSBtaW5fdChsb2ZmX3QsIG4tPmJkZXYtPmJkX2lub2RlLT5pX3NpemUsIG4tPnNpemUpOwotCWVsc2UKLQkJbi0+c2l6ZSA9IG4tPmJkZXYtPmJkX2lub2RlLT5pX3NpemU7Ci0KLQluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKLQllcnIgPSBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKG4sIGxlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfY2xlYW51cDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2NsZWFudXA6Ci0JY2xvc2VfYmRldl9leGNsdXNpdmUobi0+YmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7Ci0Jbi0+YmRldiA9IE5VTEw7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBFbXB0eSB0aHJlYWQgcG9vbCBjYWxsYmFja3MgZm9yIHRoZSBuZXR3b3JrIHByb2Nlc3NpbmcgdGhyZWFkcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZHN0X3RocmVhZF9uZXR3b3JrX2luaXQodm9pZCAqZGF0YSkKLXsKLQlkcHJpbnRrKCIlczogZGF0YTogJXAuXG4iLCBfX2Z1bmNfXywgZGF0YSk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfdGhyZWFkX25ldHdvcmtfY2xlYW51cCh2b2lkICpkYXRhKQotewotCWRwcmludGsoIiVzOiBkYXRhOiAlcC5cbiIsIF9fZnVuY19fLCBkYXRhKTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIERTVCBub2RlIGFuZCBpbml0aWFsaXplIHNvbWUgb2YgaXRzIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHN0X25vZGUgKmRzdF9hbGxvY19ub2RlKHN0cnVjdCBkc3RfY3RsICpjdGwsCi0JCWludCAoKnN0YXJ0KShzdHJ1Y3QgZHN0X25vZGUgKiksCi0JCWludCBudW0pCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuOwotCWludCBlcnI7Ci0KLQluID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gTlVMTDsKLQotCUlOSVRfTElTVF9IRUFEKCZuLT5ub2RlX2VudHJ5KTsKLQotCUlOSVRfTElTVF9IRUFEKCZuLT5zZWN1cml0eV9saXN0KTsKLQltdXRleF9pbml0KCZuLT5zZWN1cml0eV9sb2NrKTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm4tPndhaXQpOwotCi0Jbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhjdGwtPnRyYW5zX3NjYW5fdGltZW91dCk7Ci0JaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQpCi0JCW4tPnRyYW5zX3NjYW5fdGltZW91dCA9IEhaOwotCi0Jbi0+dHJhbnNfbWF4X3JldHJpZXMgPSBjdGwtPnRyYW5zX21heF9yZXRyaWVzOwotCWlmICghbi0+dHJhbnNfbWF4X3JldHJpZXMpCi0JCW4tPnRyYW5zX21heF9yZXRyaWVzID0gMTA7Ci0KLQkvKgotCSAqIFByZXR0eSBtdWNoIGFyYml0cmFyeSBkZWZhdWx0IG51bWJlcnMuCi0JICogMzIgbWF0Y2hlcyBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyBpbiBiaW8gb3JpZ2luYXRlZCBmcm9tIGV4dDMgKDMxKS4KLQkgKi8KLQluLT5tYXhfcGFnZXMgPSBjdGwtPm1heF9wYWdlczsKLQlpZiAoIW4tPm1heF9wYWdlcykKLQkJbi0+bWF4X3BhZ2VzID0gMzI7Ci0KLQlpZiAobi0+bWF4X3BhZ2VzID4gMTAyNCkKLQkJbi0+bWF4X3BhZ2VzID0gMTAyNDsKLQotCW4tPnN0YXJ0ID0gc3RhcnQ7Ci0Jbi0+c2l6ZSA9IGN0bC0+c2l6ZTsKLQotCWF0b21pY19zZXQoJm4tPnJlZmNudCwgMSk7Ci0JYXRvbWljX2xvbmdfc2V0KCZuLT5nZW4sIDApOwotCXNucHJpbnRmKG4tPm5hbWUsIHNpemVvZihuLT5uYW1lKSwgIiVzIiwgY3RsLT5uYW1lKTsKLQotCWVyciA9IGRzdF9ub2RlX3N5c2ZzX2luaXQobik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQluLT5wb29sID0gdGhyZWFkX3Bvb2xfY3JlYXRlKG51bSwgbi0+bmFtZSwgZHN0X3RocmVhZF9uZXR3b3JrX2luaXQsCi0JCQlkc3RfdGhyZWFkX25ldHdvcmtfY2xlYW51cCwgbik7Ci0JaWYgKElTX0VSUihuLT5wb29sKSkgewotCQllcnIgPSBQVFJfRVJSKG4tPnBvb2wpOwotCQlnb3RvIGVycl9vdXRfc3lzZnNfZXhpdDsKLQl9Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIG5hbWU6ICVzLlxuIiwgX19mdW5jX18sIG4sIG4tPm5hbWUpOwotCi0JcmV0dXJuIG47Ci0KLWVycl9vdXRfc3lzZnNfZXhpdDoKLQlkc3Rfbm9kZV9zeXNmc19leGl0KG4pOwotZXJyX291dF9mcmVlOgotCWtmcmVlKG4pOwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogU3RhcnRpbmcgYSBub2RlLCBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXI6Ci0gKiByZWdpc3RlciBibG9jayBkZXZpY2UgYW5kIGluaXRpYWxpemUgdHJhbnNhY3Rpb24gbWVjaGFuaXNtLgotICogSW4gcmV2ZXJzIG9yZGVyIHRob3VnaC4KLSAqCi0gKiBJdCB3aWxsIGF1dG9uZWdvdGlhdGUgc29tZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHJlbW90ZSBub2RlCi0gKiBhbmQgdXBkYXRlIGxvY2FsIGlmIG5lZWRlZC4KLSAqCi0gKiBUcmFuc2FjdGlvbiBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgdGhlIGxhc3QgdGhpbmcgYmVmb3JlCi0gKiBzdGFydGluZyB0aGUgbm9kZSwgc2luY2UgdHJhbnNhY3Rpb24gc2hvdWxkIGluY2x1ZGUgbm90IG9ubHkKLSAqIGJsb2NrIElPLCBidXQgYWxzbyBjcnlwdG8gcmVsYXRlZCBkYXRhIChpZiBhbnkpLCB3aGljaCBhcmUKLSAqIGluaXRpYWxpemVkIHNlcGFyYXRlbHkuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3N0YXJ0X3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGRzdF9ub2RlX3RyYW5zX2luaXQobiwgc2l6ZW9mKHN0cnVjdCBkc3RfdHJhbnMpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gZHN0X25vZGVfY3JlYXRlX2Rpc2sobik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWRzdF9ub2RlX3NldF9zaXplKG4pOwotCWFkZF9kaXNrKG4tPmRpc2spOwotCi0JZHByaW50aygiRFNUOiBzdGFydGVkIHJlbW90ZSBub2RlICclcycsIG1pbm9yOiAlZC5cbiIsCi0JCQluLT5uYW1lLCBuLT5kaXNrLT5maXJzdF9taW5vcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEFkZGluZyByZW1vdGUgbm9kZSBhbmQgaW5pdGlhbGl6ZSBjb25uZWN0aW9uLgotICovCi1zdGF0aWMgaW50IGRzdF9hZGRfcmVtb3RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyY3RsID0gZGF0YTsKLQotCWlmIChuKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQluID0gZHN0X2FsbG9jX25vZGUoY3RsLCBkc3Rfc3RhcnRfcmVtb3RlLCAxKTsKLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KCZuLT5pbmZvLT5uZXQsIHJjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0JZXJyID0gZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQobiwgcmN0bCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlkc3Rfbm9kZV9hZGQobik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9mcmVlOgotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQWRkaW5nIGV4cG9ydCBub2RlOiBpbml0aWFsaXppbmcgYmxvY2sgZGV2aWNlIGFuZCBsaXN0ZW5pbmcgc29ja2V0LgotICovCi1zdGF0aWMgaW50IGRzdF9hZGRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlID0gZGF0YTsKLQotCWlmIChuKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW4gPSBkc3RfYWxsb2Nfbm9kZShjdGwsIGRzdF9zdGFydF9leHBvcnQsIDIpOwotCWlmICghbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllcnIgPSBkc3Rfc2V0dXBfZXhwb3J0KG4sIGN0bCwgbGUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlOwotCi0JZHN0X25vZGVfYWRkKG4pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQlkc3Rfbm9kZV9wdXQobik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlwcmludGsoS0VSTl9JTkZPICJTVE9QUEVEIG5hbWU6ICclcycsIHNpemU6ICVsbHUuXG4iLAotCQkJbi0+bmFtZSwgbi0+c2l6ZSk7Ci0KLQlpZiAobi0+ZGlzaykKLQkJZGVsX2dlbmRpc2sobi0+ZGlzayk7Ci0KLQlkc3Rfbm9kZV9yZW1vdmUobik7Ci0JZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKLQotCS8qCi0JICogVGhpcyBpcyBub3QgYSBoYWNrLiBSZWFsbHkuCi0JICogTm9kZSdzIHJlZmVyZW5jZSBjb3VudGVyIGFsbG93cyB0byBpbXBsZW1lbnQgZmluZSBncmFpbmVkCi0JICogbm9kZSBmcmVlaW5nLCBidXQgc2luY2UgYWxsIHRyYW5zYWN0aW9ucyAod2hpY2ggaG9sZCBub2RlJ3MKLQkgKiByZWZlcmVuY2UgY291bnRlcikgYXJlIHByb2Nlc3NlZCBpbiB0aGUgZGVkaWNhdGVkIHRocmVhZCwKLQkgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IHJlZmVyZW5jZSB3aWxsIGhpdCB6ZXJvIGluIHRoYXQgdGhyZWFkLAotCSAqIHNvIHdlIHdpbGwgbm90IGJlIGFibGUgdG8gZXhpdCB0aHJlYWQgYW5kIGNsZWFudXAgdGhlIG5vZGUuCi0JICoKLQkgKiBTbywgd2UgcmVtb3ZlIGRpc2ssIHNvIG5vIG5ldyBhY3Rpdml0eSBpcyBwb3NzaWJsZSwgYW5kCi0JICogd2FpdCB1bnRpbCBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbiBhcmUgY29tcGxldGVkIChlaXRoZXIKLQkgKiBpbiByZWNlaXZpbmcgdGhyZWFkIG9yIGJ5IHRpbWVvdXQgaW4gd29ya3F1ZXVlKSwgaW4gdGhpcwotCSAqIGNhc2UgcmVmZXJlbmNlIGNvdW50ZXIgd2lsbCBiZSBsZXNzIG9yIGVxdWFsIHRvIDIgKG9uY2Ugc2V0IGluCi0JICogZHN0X2FsbG9jX25vZGUoKSBhbmQgdGhlbiBpbiBjb25uZWN0b3IgbWVzc2FnZSBwYXJzZXI7Ci0JICogb3Igd2hlbiB3ZSBmb3JjZSBtb2R1bGUgdW5sb2FkaW5nLCBhbmQgY29ubmVjdG9yIG1lc3NhZ2UKLQkgKiBwYXJzZXIgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSwgaW4gdGhpcyBjYXNlIHJlZmVyZW5jZQotCSAqIGNvdW50ZXIgd2lsbCBiZSBlcXVhbCB0byAxKSwKLQkgKiBhbmQgc3Vic2VxdWVudCBkc3Rfbm9kZV9wdXQoKSBjYWxscyB3aWxsIGZyZWUgdGhlIG5vZGUuCi0JICovCi0JZHByaW50aygiJXM6IGdvaW5nIHRvIHNsZWVwIHdpdGggJWQgcmVmY250LlxuIiwKLQkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7Ci0Jd2FpdF9ldmVudChuLT53YWl0LCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSA8PSAyKTsKLQotCWRzdF9ub2RlX3B1dChuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZSBub2RlIGZyb20gdGhlIGhhc2ggdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2RlbF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaWYgKCFuKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiBkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjcnlwdG8gcHJvY2Vzc2luZyBmb3IgZ2l2ZW4gbm9kZS4KLSAqLwotc3RhdGljIGludCBkc3RfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmNyeXB0byA9IGRhdGE7Ci0KLQlpZiAoIW4pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkgKyBjcnlwdG8tPmhhc2hfa2V5c2l6ZSArCi0JCQljcnlwdG8tPmNpcGhlcl9rZXlzaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChuLT50cmFuc19jYWNoZSkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KLQlyZXR1cm4gZHN0X25vZGVfY3J5cHRvX2luaXQobiwgY3J5cHRvKTsKLX0KLQotLyoKLSAqIFNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3NlY3VyaXR5X2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHN0X3NlY3VyZSAqczsKLQotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9zZWN1cmVfdXNlcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweSgmcy0+c2VjLCBkYXRhLCBzaXplKTsKLQotCW11dGV4X2xvY2soJm4tPnNlY3VyaXR5X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnMtPnNlY19lbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QpOwotCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEtpbGwnZW0gYWxsIQotICovCi1zdGF0aWMgaW50IGRzdF9zdGFydF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IGVycjsKLQotCWlmICghbikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAobi0+dHJhbnNfY2FjaGUpCi0JCXJldHVybiAwOwotCi0JZXJyID0gbi0+c3RhcnQobik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXByaW50ayhLRVJOX0lORk8gIlNUQVJURUQgbmFtZTogJyVzJywgc2l6ZTogJWxsdS5cbiIsIG4tPm5hbWUsIG4tPnNpemUpOwotCXJldHVybiAwOwotfQotCi10eXBlZGVmIGludCAoKmRzdF9jb21tYW5kX2Z1bmMpKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOwotCi0vKgotICogTGlzdCBvZiB1c2Vyc3BhY2UgY29tbWFuZHMuCi0gKi8KLXN0YXRpYyBkc3RfY29tbWFuZF9mdW5jIGRzdF9jb21tYW5kc1tdID0gewotCVtEU1RfQUREX1JFTU9URV0gPSAmZHN0X2FkZF9yZW1vdGUsCi0JW0RTVF9BRERfRVhQT1JUXSA9ICZkc3RfYWRkX2V4cG9ydCwKLQlbRFNUX0RFTF9OT0RFXSA9ICZkc3RfZGVsX25vZGUsCi0JW0RTVF9DUllQVE9dID0gJmRzdF9jcnlwdG9faW5pdCwKLQlbRFNUX1NFQ1VSSVRZXSA9ICZkc3Rfc2VjdXJpdHlfaW5pdCwKLQlbRFNUX1NUQVJUXSA9ICZkc3Rfc3RhcnRfbm9kZSwKLX07Ci0KLS8qCi0gKiBDb25maWd1cmF0aW9uIHBhcnNlci4KLSAqLwotc3RhdGljIHZvaWQgY25fZHN0X2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZywgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpuc3ApCi17Ci0Jc3RydWN0IGRzdF9jdGwgKmN0bDsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfY3RsX2FjayBhY2s7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gTlVMTCwgKnRtcDsKLQl1bnNpZ25lZCBpbnQgaGFzaDsKLQotCWlmICghY2FwX3JhaXNlZChuc3AtPmVmZl9jYXAsIENBUF9TWVNfQURNSU4pKSB7Ci0JCWVyciA9IC1FUEVSTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKG1zZy0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSkgewotCQllcnIgPSAtRUJBRE1TRzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JY3RsID0gKHN0cnVjdCBkc3RfY3RsICopbXNnLT5kYXRhOwotCi0JaWYgKGN0bC0+Y21kID49IERTVF9DTURfTUFYKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQloYXNoID0gZHN0X2hhc2goY3RsLT5uYW1lLCBzaXplb2YoY3RsLT5uYW1lKSk7Ci0KLQltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmRzdF9oYXNodGFibGVbaGFzaF0sIG5vZGVfZW50cnkpIHsKLQkJaWYgKCFtZW1jbXAodG1wLT5uYW1lLCBjdGwtPm5hbWUsIHNpemVvZih0bXAtPm5hbWUpKSkgewotCQkJbiA9IHRtcDsKLQkJCWRzdF9ub2RlX2dldChuKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Ci0KLQllcnIgPSBkc3RfY29tbWFuZHNbY3RsLT5jbWRdKG4sIGN0bCwgbXNnLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSwKLQkJCW1zZy0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSk7Ci0KLQlkc3Rfbm9kZV9wdXQobik7Ci1vdXQ6Ci0JbWVtY3B5KCZhY2subXNnLCBtc2csIHNpemVvZihzdHJ1Y3QgY25fbXNnKSk7Ci0KLQlhY2subXNnLmFjayA9IG1zZy0+YWNrICsgMTsKLQlhY2subXNnLmxlbiA9IHNpemVvZihzdHJ1Y3QgZHN0X2N0bF9hY2spIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOwotCi0JYWNrLmVycm9yID0gZXJyOwotCi0JY25fbmV0bGlua19zZW5kKCZhY2subXNnLCAwLCBHRlBfS0VSTkVMKTsKLX0KLQotLyoKLSAqIEdsb2JhbCBpbml0aWFsaXphdGlvbjogc3lzZnMsIGhhc2ggdGFibGUsIGJsb2NrIGRldmljZSByZWdpc3RyYXRpb24sCi0gKiBjb25uZWN0b3IgYW5kIHZhcmlvdXMgY2FjaGVzLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBkc3Rfc3lzZnNfaW5pdCh2b2lkKQotewotCXJldHVybiBidXNfcmVnaXN0ZXIoJmRzdF9kZXZfYnVzX3R5cGUpOwotfQotCi1zdGF0aWMgdm9pZCBkc3Rfc3lzZnNfZXhpdCh2b2lkKQotewotCWJ1c191bnJlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHN0X2hhc2h0YWJsZV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlkc3RfaGFzaHRhYmxlID0ga2NhbGxvYyhkc3RfaGFzaHRhYmxlX3NpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZHN0X2hhc2h0YWJsZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHN0X2hhc2h0YWJsZV9zaXplOyArK2kpCi0JCUlOSVRfTElTVF9IRUFEKCZkc3RfaGFzaHRhYmxlW2ldKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkc3RfaGFzaHRhYmxlX2V4aXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4sICp0bXA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHN0X2hhc2h0YWJsZV9zaXplOyArK2kpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG4sIHRtcCwgJmRzdF9oYXNodGFibGVbaV0sIG5vZGVfZW50cnkpIHsKLQkJCWRzdF9ub2RlX3JlbW92ZV91bmxvYWQobik7Ci0JCX0KLQl9Ci0KLQlrZnJlZShkc3RfaGFzaHRhYmxlKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHN0X3N5c19pbml0KHZvaWQpCi17Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQllcnIgPSBkc3RfaGFzaHRhYmxlX2luaXQoKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWVyciA9IGRzdF9leHBvcnRfaW5pdCgpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9oYXNodGFibGVfZXhpdDsKLQotCWVyciA9IHJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3V0X2V4cG9ydF9leGl0OwotCWlmIChlcnIpCi0JCWRzdF9tYWpvciA9IGVycjsKLQotCWVyciA9IGRzdF9zeXNmc19pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7Ci0KLQllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmNuX2RzdF9pZCwgIkRTVCIsIGNuX2RzdF9jYWxsYmFjayk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3N5c2ZzX2V4aXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJEaXN0cmlidXRlZCBzdG9yYWdlLCAnJXMnIHJlbGVhc2UuXG4iLCBkc3RfbmFtZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9zeXNmc19leGl0OgotCWRzdF9zeXNmc19leGl0KCk7Ci1lcnJfb3V0X3VucmVnaXN0ZXI6Ci0JdW5yZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7Ci1lcnJfb3V0X2V4cG9ydF9leGl0OgotCWRzdF9leHBvcnRfZXhpdCgpOwotZXJyX291dF9oYXNodGFibGVfZXhpdDoKLQlkc3RfaGFzaHRhYmxlX2V4aXQoKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZHN0X3N5c19leGl0KHZvaWQpCi17Ci0JY25fZGVsX2NhbGxiYWNrKCZjbl9kc3RfaWQpOwotCXVucmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOwotCWRzdF9oYXNodGFibGVfZXhpdCgpOwotCWRzdF9zeXNmc19leGl0KCk7Ci0JZHN0X2V4cG9ydF9leGl0KCk7Ci19Ci0KLW1vZHVsZV9pbml0KGRzdF9zeXNfaW5pdCk7Ci1tb2R1bGVfZXhpdChkc3Rfc3lzX2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkRpc3RyaWJ1dGVkIHN0b3JhZ2UiKTsKLU1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzI0MjMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZXhwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotLyoKLSAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLS8qCi0gKiBFeHBvcnQgYmlvc2V0IGlzIHVzZWQgZm9yIHNlcnZlciBibG9jayBJTyByZXF1ZXN0cy4KLSAqLwotc3RhdGljIHN0cnVjdCBiaW9fc2V0ICpkc3RfYmlvX3NldDsKLQotaW50IF9faW5pdCBkc3RfZXhwb3J0X2luaXQodm9pZCkKLXsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWRzdF9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZSgzMiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKLQlpZiAoIWRzdF9iaW9fc2V0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCkKLXsKLQliaW9zZXRfZnJlZShkc3RfYmlvX3NldCk7Ci19Ci0KLS8qCi0gKiBXaGVuIGNsaWVudCBjb25uZWN0cyBhbmQgYXV0b25lZ290aWF0ZXMgd2l0aCB0aGUgc2VydmVyIG5vZGUsCi0gKiBpdHMgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQgaW4gYSBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBzZW50Ci0gKiBiYWNrLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdHJ1Y3QgZHN0X3N0YXRlICptYWluLAotCQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBtYWluLT5ub2RlOwotCXN0cnVjdCBkc3Rfc2VjdXJlICpzZW50cnk7Ci0Jc3RydWN0IGRzdF9zZWN1cmVfdXNlciAqczsKLQlzdHJ1Y3Qgc2FkZHIgKnNhID0gJnN0LT5jdGwuYWRkcjsKLQl1bnNpZ25lZCBpbnQgcGVybSA9IDA7Ci0KLQltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgewotCQlzID0gJnNlbnRyeS0+c2VjOwotCi0JCWlmIChzLT5hZGRyLnNhX2ZhbWlseSAhPSBzYS0+c2FfZmFtaWx5KQotCQkJY29udGludWU7Ci0KLQkJaWYgKHMtPmFkZHIuc2FfZGF0YV9sZW4gIT0gc2EtPnNhX2RhdGFfbGVuKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogVGhpcyAnMicgYmVsb3cgaXMgYSBwb3J0IGZpZWxkLiBUaGlzIG1heSBiZSB2ZXJ5IHdyb25nIHRvIGRvCi0JCSAqIGluIGF0YWxrIGZvciBleGFtcGxlIHRob3VnaC4gSWYgdGhlcmUgd2lsbCBiZSBhbnkgbmVlZAotCQkgKiB0byBleHRlbnQgcHJvdG9jb2wgdG8gc29tZXRoaW5nIGVsc2UsIEkgY2FuIGNyZWF0ZQotCQkgKiBwZXItZmFtaWx5IGhlbHBlcnMgYW5kIHVzZSB0aGVtIGluc3RlYWQgb2YgdGhpcyBtZW1jbXAuCi0JCSAqLwotCQlpZiAobWVtY21wKHMtPmFkZHIuc2FfZGF0YSArIDIsIHNhLT5zYV9kYXRhICsgMiwKLQkJCQkJc2EtPnNhX2RhdGFfbGVuIC0gMikpCi0JCQljb250aW51ZTsKLQotCQlwZXJtID0gcy0+cGVybWlzc2lvbnM7Ci0JfQotCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7Ci0KLQlyZXR1cm4gcGVybTsKLX0KLQotLyoKLSAqIEFjY2VwdCBuZXcgY2xpZW50OiBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YXRlIGFuZCBjaGVjayBwZXJtaXNzaW9ucy4KLSAqLwotc3RhdGljIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9hY2NlcHRfY2xpZW50KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKLQl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwotCXN0cnVjdCBkc3Rfc3RhdGUgKm5ldzsKLQotCXdoaWxlICghZXJyICYmICFzb2NrKSB7Ci0JCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7Ci0KLQkJaWYgKCEocmV2ZW50cyAmIG1hc2spKSB7Ci0JCQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCQkJZm9yICg7OykgewotCQkJCXByZXBhcmVfdG9fd2FpdCgmc3QtPnRocmVhZF93YWl0LAotCQkJCQkJJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCQkJaWYgKHJldmVudHMgJiBtYXNrKQotCQkJCQlicmVhazsKLQotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKgotCQkJCSAqIE1hZ2ljIEhaPyBQb2xsaW5nIGNoZWNrIGFib3ZlIGlzIG5vdCBzYWZlIGluCi0JCQkJICogYWxsIGNhc2VzIChsaWtlIHNvY2tldCByZXNldCBpbiBCSCBjb250ZXh0KSwKLQkJCQkgKiBzbyBpdCBpcyBzaW1wbGVyIGp1c3QgdG8gcG9zdHBvbmUgaXQgdG8gdGhlCi0JCQkJICogcHJvY2VzcyBjb250ZXh0IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nCi0JCQkJICogc3BlY2lhbCBsb2NraW5nIHRoZXJlLgotCQkJCSAqLwotCQkJCXNjaGVkdWxlX3RpbWVvdXQoSFopOwotCQkJfQotCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOwotCQl9Ci0KLQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQotCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZXZlbnRzOiAleCBbZXJyOiAlZCwgaW46ICVkXS5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIHJldmVudHMsIHJldmVudHMgJiBlcnJfbWFzaywKLQkJCXJldmVudHMgJiBQT0xMSU4pOwotCi0JCWlmIChyZXZlbnRzICYgZXJyX21hc2spIHsKLQkJCWRwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsCi0JCQkJCV9fZnVuY19fLCByZXZlbnRzLCBzdC0+c29ja2V0LCBlcnIpOwotCQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCX0KLQotCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQotCQkJZXJyID0gLUVOT0RFVjsKLQotCQlpZiAoc3QtPnNvY2tldCAmJiAocmV2ZW50cyAmIFBPTExJTikpCi0JCQllcnIgPSBrZXJuZWxfYWNjZXB0KHN0LT5zb2NrZXQsICZzb2NrLCAwKTsKLQotCQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQl9Ci0KLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCW5ldyA9IGRzdF9zdGF0ZV9hbGxvYyhzdC0+bm9kZSk7Ci0JaWYgKElTX0VSUihuZXcpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQluZXctPnNvY2tldCA9IHNvY2s7Ci0KLQluZXctPmN0bC5hZGRyLnNhX2RhdGFfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7Ci0JZXJyID0ga2VybmVsX2dldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKLQkJCShpbnQgKikmbmV3LT5jdGwuYWRkci5zYV9kYXRhX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3B1dDsKLQotCW5ldy0+cGVybWlzc2lvbnMgPSBkc3RfY2hlY2tfcGVybWlzc2lvbnMoc3QsIG5ldyk7Ci0JaWYgKG5ldy0+cGVybWlzc2lvbnMgPT0gMCkgewotCQllcnIgPSAtRVBFUk07Ci0JCWRzdF9kdW1wX2FkZHIoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAotCQkJCSJDbGllbnQgaXMgbm90IGFsbG93ZWQgdG8gY29ubmVjdCIpOwotCQlnb3RvIGVycl9vdXRfcHV0OwotCX0KLQotCWVyciA9IGRzdF9wb2xsX2luaXQobmV3KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0JZHN0X2R1bXBfYWRkcihzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCi0JCQkiQ29ubmVjdGVkIGNsaWVudCIpOwotCi0JcmV0dXJuIG5ldzsKLQotZXJyX291dF9wdXQ6Ci0JZHN0X3N0YXRlX3B1dChuZXcpOwotZXJyX291dF9yZWxlYXNlOgotCXNvY2tfcmVsZWFzZShzb2NrKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi0vKgotICogRWFjaCBzZXJ2ZXIncyBibG9jayByZXF1ZXN0IHNvbWV0aW1lIGZpbmlzaGVzLgotICogVXN1YWxseSBpdCBoYXBwZW5zIGluIGhhcmQgaXJxIGNvbnRleHQgb2YgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xsZXIsCi0gKiBzbyB0byBwbGF5IGdvb2Qgd2l0aCBhbGwgY2FzZXMgd2UganVzdCBxdWV1ZSBCSU8gaW50byB0aGUgcXVldWUKLSAqIGFuZCB3YWtlIHVwIHByb2Nlc3NpbmcgdGhyZWFkLCB3aGljaCBnZXRzIGNvbXBsZXRlZCByZXF1ZXN0IGFuZAotICogc2VuZCAoZW5jcnlwdGluZyBpZiBuZWVkZWQpIGl0IGJhY2sgdG8gdGhlIGNsaWVudCAoaWYgaXQgd2FzIGEgcmVhZAotICogcmVxdWVzdCksIG9yIHNlbmRzIGJhY2sgcmVwbHkgdGhhdCB3cml0aW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF9wcm9jZXNzX3JlcXVlc3RfcXVldWUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gTlVMTDsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0JaW50IGVyciA9IDA7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0JCWlmICghbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpIHsKLQkJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdC0+cmVxdWVzdF9saXN0LAotCQkJCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYsIHJlcXVlc3RfZW50cnkpOwotCQkJbGlzdF9kZWwoJnAtPnJlcXVlc3RfZW50cnkpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQotCQlpZiAoIXApCi0JCQlicmVhazsKLQotCQliaW8gPSBwLT5iaW87Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhzdC0+bm9kZSkgJiYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpKQotCQkJZXJyID0gZHN0X2V4cG9ydF9jcnlwdG8oc3QtPm5vZGUsIGJpbyk7Ci0JCWVsc2UKLQkJCWVyciA9IGRzdF9leHBvcnRfc2VuZF9iaW8oYmlvKTsKLQotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIENsZWFudXAgZXhwb3J0IHN0YXRlLgotICogSXQgaGFzIHRvIHdhaXQgdW50aWwgYWxsIHJlcXVlc3RzIGFyZSBmaW5pc2hlZCwKLSAqIGFuZCB0aGVuIGZyZWUgdGhlbSBhbGwuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9zdGF0ZV9jbGVhbnVwX2V4cG9ydChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIFRoaXMgbG9vcCB3YWl0cyBmb3IgYWxsIHBlbmRpbmcgYmlvcyB0byBiZSBjb21wbGV0ZWQgYW5kIGZyZWVkLgotCSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPiAxKSB7Ci0JCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQsIGxpc3RfZW1wdHk6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSwKLQkJCQlsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSk7Ci0JCXdhaXRfZXZlbnRfdGltZW91dChzdC0+dGhyZWFkX3dhaXQsCi0JCQkJKGF0b21pY19yZWFkKCZzdC0+cmVmY250KSA9PSAxKSB8fAotCQkJCSFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSwKLQkJCQlIWi8yKTsKLQotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCQlwID0gTlVMTDsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7Ci0JCQkJcCA9IGxpc3RfZmlyc3RfZW50cnkoJnN0LT5yZXF1ZXN0X2xpc3QsCi0JCQkJCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYsIHJlcXVlc3RfZW50cnkpOwotCQkJCWxpc3RfZGVsKCZwLT5yZXF1ZXN0X2VudHJ5KTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQotCQkJaWYgKHApCi0JCQkJYmlvX3B1dChwLT5iaW8pOwotCi0JCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLCBsaXN0X2VtcHR5OiAlZCwgcDogIgotCQkJCSIlcC5cbiIsIF9fZnVuY19fLCBzdCwgYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpLAotCQkJCWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpLCBwKTsKLQkJfQotCX0KLQotCWRzdF9zdGF0ZV9wdXQoc3QpOwotfQotCi0vKgotICogQ2xpZW50IGFjY2VwdGluZyB0aHJlYWQuCi0gKiBOb3Qgb25seSBhY2NlcHRzIG5ldyBjb25uZWN0aW9uLCBidXQgYWxzbyBzY2hlZHVsZXMgcmVjZWl2aW5nIHRocmVhZAotICogYW5kIHBlcmZvcm1zIHJlcXVlc3QgY29tcGxldGlvbiBkZXNjcmliZWQgYWJvdmUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2FjY2VwdCh2b2lkICppbml0X2RhdGEsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqbWFpbl9zdCA9IHNjaGVkdWxlX2RhdGE7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gaW5pdF9kYXRhOwotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnI7Ci0KLQl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0ICYmICFtYWluX3N0LT5uZWVkX2V4aXQpIHsKLQkJZHByaW50aygiJXM6IG1haW5fc3Q6ICVwLCBuOiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0LCBuKTsKLQkJc3QgPSBkc3RfYWNjZXB0X2NsaWVudChtYWluX3N0KTsKLQkJaWYgKElTX0VSUihzdCkpCi0JCQljb250aW51ZTsKLQotCQllcnIgPSBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3QpOwotCQlpZiAoIWVycikgewotCQkJd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCkgewotCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHN0LT50aHJlYWRfd2FpdCwKLQkJCQkJIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpIHx8Ci0JCQkJCSFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwKLQkJCQkJc3QtPm5lZWRfZXhpdCwKLQkJCQkJSFopOwotCi0JCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAobGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJZXJyID0gZHN0X2V4cG9ydF9wcm9jZXNzX3JlcXVlc3RfcXVldWUoc3QpOwotCQkJCWlmIChlcnIpCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQlzdC0+bmVlZF9leGl0ID0gMTsKLQkJCXdha2VfdXAoJnN0LT50aHJlYWRfd2FpdCk7Ci0JCX0KLQotCQlkc3Rfc3RhdGVfY2xlYW51cF9leHBvcnQoc3QpOwotCX0KLQotCWRwcmludGsoIiVzOiBmcmVlaW5nIGxpc3RlbmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIG1haW5fc3QpOwotCi0JZHN0X3N0YXRlX2xvY2sobWFpbl9zdCk7Ci0JZHN0X3BvbGxfZXhpdChtYWluX3N0KTsKLQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2UobWFpbl9zdCk7Ci0JZHN0X3N0YXRlX3VubG9jayhtYWluX3N0KTsKLQlkc3Rfc3RhdGVfcHV0KG1haW5fc3QpOwotCWRwcmludGsoIiVzOiBmcmVlZCBsaXN0ZW5pbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZHN0X3N0YXJ0X2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4pCi17Ci0JaWYgKGxpc3RfZW1wdHkoJm4tPnNlY3VyaXR5X2xpc3QpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IGFyZSB0cnlpbmcgdG8gZXhwb3J0IG5vZGUgJyVzJyAiCi0JCQkJIndpdGhvdXQgc2VjdXJpdHkgYXR0cmlidXRlcy5cbk5vIGNsaWVudHMgd2lsbCAiCi0JCQkJImJlIGFsbG93ZWQgdG8gY29ubmVjdC4gRXhpdGluZy5cbiIsIG4tPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIGRzdF9ub2RlX3RyYW5zX2luaXQobiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgbGlzdGVuaW5nIHN0YXRlIGFuZCBzY2hlZHVsZSBhY2NlcHRpbmcgdGhyZWFkLgotICovCi1pbnQgZHN0X25vZGVfaW5pdF9saXN0ZW5lZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfZXhwb3J0X2N0bCAqbGUpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3Q7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqY3RsID0gJmxlLT5jdGw7Ci0KLQltZW1jcHkoJm4tPmluZm8tPm5ldCwgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOwotCi0Jc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7Ci0JaWYgKElTX0VSUihzdCkpIHsKLQkJZXJyID0gUFRSX0VSUihzdCk7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQltZW1jcHkoJnN0LT5jdGwsIGN0bCwgc2l6ZW9mKHN0cnVjdCBkc3RfbmV0d29ya19jdGwpKTsKLQotCWVyciA9IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcHV0OwotCi0Jc3QtPnNvY2tldC0+c2stPnNrX3JldXNlID0gMTsKLQotCWVyciA9IGtlcm5lbF9iaW5kKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAotCQkJY3RsLT5hZGRyLnNhX2RhdGFfbGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7Ci0KLQllcnIgPSBrZXJuZWxfbGlzdGVuKHN0LT5zb2NrZXQsIDEwMjQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKLQluLT5zdGF0ZSA9IHN0OwotCi0JZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOwotCi0JZHN0X3N0YXRlX2dldChzdCk7Ci0KLQllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAotCQkJZHN0X2FjY2VwdCwgc3QsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfcG9sbF9leGl0OwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcG9sbF9leGl0OgotCWRzdF9wb2xsX2V4aXQoc3QpOwotZXJyX291dF9zb2NrZXRfcmVsZWFzZToKLQlkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3QpOwotZXJyX291dF9wdXQ6Ci0JZHN0X3N0YXRlX3B1dChzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0Jbi0+c3RhdGUgPSBOVUxMOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBGcmVlIGJpbyBhbmQgcmVsYXRlZCBwcml2YXRlIGRhdGEuCi0gKiBBbHNvIGRyb3AgYSByZWZlcmVuY2UgY291bnRlciBmb3IgYXBwcm9wcmlhdGUgc3RhdGUsCi0gKiB3aGljaCB3YWl0cyB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIGJsb2NrIElPcyBpbi1mbGlnaHQuCi0gKi8KLXN0YXRpYyB2b2lkIGRzdF9iaW9fZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCi17Ci0Jc3RydWN0IGJpb192ZWMgKmJ2OwotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnByaXYgPSBiaW8tPmJpX3ByaXZhdGU7Ci0JaW50IGk7Ci0KLQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7Ci0JCWlmICghYnYtPmJ2X3BhZ2UpCi0JCQlicmVhazsKLQotCQlfX2ZyZWVfcGFnZShidi0+YnZfcGFnZSk7Ci0JfQotCi0JaWYgKHByaXYpCi0JCWRzdF9zdGF0ZV9wdXQocHJpdi0+c3RhdGUpOwotCWJpb19mcmVlKGJpbywgZHN0X2Jpb19zZXQpOwotfQotCi0vKgotICogQmxvY2sgSU8gY29tcGxldGlvbi4gUXVldWUgcmVxdWVzdCB0byBiZSBzZW50IGJhY2sgdG8KLSAqIHRoZSBjbGllbnQgKG9yIGp1c3QgY29uZmlybWF0aW9uKS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQotewotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBiaW8tPmJpX3ByaXZhdGU7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBwLT5zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0LT5yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZwLT5yZXF1ZXN0X2VudHJ5LCAmc3QtPnJlcXVlc3RfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOwotCi0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIHJlYWQgcmVxdWVzdCBmb3IgdGhlIHNlcnZlci4KLSAqLwotc3RhdGljIGludCBkc3RfZXhwb3J0X3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCB0b3RhbF9zaXplKQotewotCXVuc2lnbmVkIGludCBzaXplOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBlcnI7Ci0KLQl3aGlsZSAodG90YWxfc2l6ZSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFwYWdlKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFLCB0b3RhbF9zaXplKTsKLQotCQllcnIgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKLQkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgc2l6ZTogJXUsIGVycjogJWQuXG4iLAotCQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQkJc2l6ZSwgZXJyKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZTsKLQotCQl0b3RhbF9zaXplIC09IHNpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZV9wYWdlOgotCV9fZnJlZV9wYWdlKHBhZ2UpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSB3cml0ZSByZXF1ZXN0IGZvciB0aGUgc2VydmVyLgotICogU2hvdWxkIG5vdCBvbmx5IGdldCBwYWdlcywgYnV0IGFsc28gcmVhZCBkYXRhIGZyb20gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2V4cG9ydF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0LAotCQlzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCB0b3RhbF9zaXplKQotewotCXVuc2lnbmVkIGludCBzaXplOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXZvaWQgKmRhdGE7Ci0JaW50IGVycjsKLQotCXdoaWxlICh0b3RhbF9zaXplKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIXBhZ2UpCi0JCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCQlkYXRhID0ga21hcChwYWdlKTsKLQkJaWYgKCFkYXRhKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfcGFnZTsKLQotCQlzaXplID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUsIHRvdGFsX3NpemUpOwotCi0JCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGRhdGEsIHNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X3VubWFwX3BhZ2U7Ci0KLQkJZXJyID0gYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgc2l6ZSwgMCk7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWdvdG8gZXJyX291dF91bm1hcF9wYWdlOwotCi0JCWt1bm1hcChwYWdlKTsKLQotCQl0b3RhbF9zaXplIC09IHNpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfdW5tYXBfcGFnZToKLQlrdW5tYXAocGFnZSk7Ci1lcnJfb3V0X2ZyZWVfcGFnZToKLQlfX2ZyZWVfcGFnZShwYWdlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogR3Jvb3Z5LCB3ZSd2ZSBnb3R0ZW4gYW4gSU8gcmVxdWVzdCBmcm9tIHRoZSBjbGllbnQuCi0gKiBBbGxvY2F0ZSBCSU8gZnJvbSB0aGUgYmlvc2V0LCBwcml2YXRlIGRhdGEgZnJvbSB0aGUgbWVtcG9vbAotICogYW5kIGxvdHMgb2YgcGFnZXMgZm9yIElPLgotICovCi1pbnQgZHN0X3Byb2Nlc3NfaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOwotCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwcml2OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JaWYgKHVubGlrZWx5KCFuLT5iZGV2KSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQl9Ci0KLQliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9LRVJORUwsCi0JCQlQQUdFX0FMSUdOKGNtZC0+c2l6ZSkgPj4gUEFHRV9TSElGVCwKLQkJCWRzdF9iaW9fc2V0KTsKLQlpZiAoIWJpbykKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQlwcml2ID0gKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKikoKCh2b2lkICopYmlvKSAtCi0JCQlzaXplb2YgKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKLQotCXByaXYtPnN0YXRlID0gZHN0X3N0YXRlX2dldChzdCk7Ci0JcHJpdi0+YmlvID0gYmlvOwotCi0JYmlvLT5iaV9wcml2YXRlID0gcHJpdjsKLQliaW8tPmJpX2VuZF9pbyA9IGRzdF9iaW9fZW5kX2lvOwotCWJpby0+YmlfZGVzdHJ1Y3RvciA9IGRzdF9iaW9fZGVzdHJ1Y3RvcjsKLQliaW8tPmJpX2JkZXYgPSBuLT5iZGV2OwotCi0JLyoKLQkgKiBTZXJ2ZXIgc2lkZSBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdHdvIGxvdyBiaXRzOgotCSAqIHVwdG9kYXRlIChzZXQgYnkgaXRzZWxmIGFjdHVhbGx5KSBhbmQgcncgYmxvY2sKLQkgKi8KLQliaW8tPmJpX2ZsYWdzIHw9IGNtZC0+ZmxhZ3MgJiAzOwotCi0JYmlvLT5iaV9ydyA9IGNtZC0+cnc7Ci0JYmlvLT5iaV9zaXplID0gMDsKLQliaW8tPmJpX3NlY3RvciA9IGNtZC0+c2VjdG9yOwotCi0JZHN0X2Jpb190b19jbWQoYmlvLCAmcHJpdi0+Y21kLCBEU1RfSU9fUkVTUE9OU0UsIGNtZC0+aWQpOwotCi0JcHJpdi0+Y21kLmZsYWdzID0gMDsKLQlwcml2LT5jbWQuc2l6ZSA9IGNtZC0+c2l6ZTsKLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3RfcmVjdl9jZGF0YShzdCwgcHJpdi0+Y21kLmhhc2gpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQkJZXJyID0gZHN0X2V4cG9ydF93cml0ZV9yZXF1ZXN0KHN0LCBiaW8sIGNtZC0+c2l6ZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCQlpZiAoZHN0X25lZWRfY3J5cHRvKG4pKQotCQkJcmV0dXJuIGRzdF9leHBvcnRfY3J5cHRvKG4sIGJpbyk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X2V4cG9ydF9yZWFkX3JlcXVlc3QoYmlvLCBjbWQtPnNpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQotCi0JZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgcnc6ICVsdSwgZGlyOiAlbHUsIGZsYWdzOiAlbHgsIHBoeXM6ICVkLlxuIiwKLQkJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCi0JCQliaW8tPmJpX3J3LCBiaW9fZGF0YV9kaXIoYmlvKSwKLQkJCWJpby0+YmlfZmxhZ3MsIGJpby0+YmlfcGh5c19zZWdtZW50cyk7Ci0KLQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZnJlZToKLQliaW9fcHV0KGJpbyk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIE9rLCBibG9jayBJTyBpcyByZWFkeSwgbGV0J3Mgc2VuZCBpdCBiYWNrIHRvIHRoZSBjbGllbnQuLi4KLSAqLwotaW50IGRzdF9leHBvcnRfc2VuZF9iaW8oc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnAgPSBiaW8tPmJpX3ByaXZhdGU7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBwLT5zdGF0ZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gJnAtPmNtZDsKLQlpbnQgZXJyOwotCi0JZHByaW50aygiJXM6IGlkOiAlbGx1LCBiaW86ICVsbHUvJXUsIGNzaXplOiAldSwgZmxhZ3M6ICVsdSwgcnc6ICVsdS5cbiIsCi0JCQlfX2Z1bmNfXywgY21kLT5pZCwgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAotCQkJY21kLT5jc2l6ZSwgYmlvLT5iaV9mbGFncywgYmlvLT5iaV9ydyk7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlpZiAoIXN0LT5zb2NrZXQpIHsKLQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0JCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JfQotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7Ci0JCS8qIC4uLiBvciBqdXN0IGNvbmZpcm1hdGlvbiB0aGF0IHdyaXRpbmcgaGFzIGNvbXBsZXRlZC4gKi8KLQkJY21kLT5zaXplID0gY21kLT5jc2l6ZSA9IDA7Ci0JCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwKLQkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X3NlbmRfYmlvKHN0LCBjbWQsIGJpbyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0KLQotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCi0JYmlvX3B1dChiaW8pOwotCXJldHVybiAwOwotCi1lcnJfb3V0X3VubG9jazoKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmEwNWU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDg0NCArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0KLS8qCi0gKiBQb2xsaW5nIG1hY2hpbmVyeS4KLSAqLwotCi1zdHJ1Y3QgZHN0X3BvbGxfaGVscGVyIHsKLQlwb2xsX3RhYmxlCQlwdDsKLQlzdHJ1Y3QgZHN0X3N0YXRlCSpzdDsKLX07Ci0KLXN0YXRpYyBpbnQgZHN0X3F1ZXVlX3dha2Uod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLAotCQlpbnQgc3luYywgdm9pZCAqa2V5KQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBkc3Rfc3RhdGUsIHdhaXQpOwotCi0Jd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgZHN0X3F1ZXVlX2Z1bmMoc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCwKLQkJCQkgcG9sbF90YWJsZSAqcHQpCi17Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBkc3RfcG9sbF9oZWxwZXIsIHB0KS0+c3Q7Ci0KLQlzdC0+d2hlYWQgPSB3aGVhZDsKLQlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZzdC0+d2FpdCwgZHN0X3F1ZXVlX3dha2UpOwotCWFkZF93YWl0X3F1ZXVlKHdoZWFkLCAmc3QtPndhaXQpOwotfQotCi12b2lkIGRzdF9wb2xsX2V4aXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaWYgKHN0LT53aGVhZCkgewotCQlyZW1vdmVfd2FpdF9xdWV1ZShzdC0+d2hlYWQsICZzdC0+d2FpdCk7Ci0JCXN0LT53aGVhZCA9IE5VTEw7Ci0JfQotfQotCi1pbnQgZHN0X3BvbGxfaW5pdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyIHBoOwotCi0JcGguc3QgPSBzdDsKLQlpbml0X3BvbGxfZnVuY3B0cigmcGgucHQsICZkc3RfcXVldWVfZnVuYyk7Ci0KLQlzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgJnBoLnB0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEhlYWRlciByZWNlaXZpbmcgZnVuY3Rpb24gLSBtYXkgYmxvY2suCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBibG9jaykKLXsKLQlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3Qga3ZlYyBpb3Y7Ci0JaW50IGVycjsKLQotCWlvdi5pb3ZfYmFzZSA9IGRhdGE7Ci0JaW92Lmlvdl9sZW4gPSBzaXplOwotCi0JbXNnLm1zZ19pb3YgPSAoc3RydWN0IGlvdmVjICopJmlvdjsKLQltc2cubXNnX2lvdmxlbiA9IDE7Ci0JbXNnLm1zZ19uYW1lID0gTlVMTDsKLQltc2cubXNnX25hbWVsZW4gPSAwOwotCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7Ci0JbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQltc2cubXNnX2ZsYWdzID0gKGJsb2NrKSA/IE1TR19XQUlUQUxMIDogTVNHX0RPTlRXQUlUOwotCi0JZXJyID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4sCi0JCQltc2cubXNnX2ZsYWdzKTsKLQlpZiAoZXJyICE9IHNpemUpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSGVhZGVyIHNlbmRpbmcgZnVuY3Rpb24gLSBtYXkgYmxvY2suCi0gKi8KLWludCBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG1vcmUpCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92OwotCWludCBlcnI7Ci0KLQlpb3YuaW92X2Jhc2UgPSBkYXRhOwotCWlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSAxOwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JbXNnLm1zZ19mbGFncyA9IE1TR19XQUlUQUxMIHwgKG1vcmUgPyBNU0dfTU9SRSA6IDApOwotCi0JZXJyID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4pOwotCWlmIChlcnIgIT0gc2l6ZSkgewotCQlkcHJpbnRrKCIlczogc2l6ZTogJXUsIG1vcmU6ICVkLCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgc2l6ZSwgbW9yZSwgZXJyKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogQmxvY2sgYXV0b2NvbmZpZ3VyYXRpb246IHJlcXVlc3Qgc2l6ZSBvZiB0aGUgc3RvcmFnZSBhbmQgcGVybWlzc2lvbnMuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0KLQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKLQljbWQtPmNtZCA9IERTVF9DRkc7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlpZiAoY21kLT5jbWQgIT0gRFNUX0NGRykgewotCQllcnIgPSAtRUlOVkFMOwotCQlkcHJpbnRrKCIlczogY2hlY2tpbmcgcmVzdWx0OiBjbWQ6ICVkLCBzaXplIHJlcG9ydGVkOiAlbGx1LlxuIiwKLQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobi0+c2l6ZSAhPSAwKQotCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5zaXplLCBjbWQtPnNlY3Rvcik7Ci0JZWxzZQotCQluLT5zaXplID0gY21kLT5zZWN0b3I7Ci0KLQluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKLQlzdC0+cGVybWlzc2lvbnMgPSBjbWQtPnJ3OwotCi1vdXQ6Ci0JZHByaW50aygiJXM6IG46ICVwLCBlcnI6ICVkLCBzaXplOiAlbGx1LCBwZXJtaXNzaW9uOiAleC5cbiIsCi0JCQlfX2Z1bmNfXywgbiwgZXJyLCBuLT5zaXplLCBzdC0+cGVybWlzc2lvbnMpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTb2NrZXQgbWFjaGluZXJ5LgotICovCi0KLSNkZWZpbmUgRFNUX0RFRkFVTFRfVElNRU8JMjAwMDAKLQotaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWludCBlcnI7Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKLQotCWVyciA9IHNvY2tfY3JlYXRlKGN0bC0+YWRkci5zYV9mYW1pbHksIGN0bC0+dHlwZSwgY3RsLT5wcm90bywgJnNvY2spOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0Jc29jay0+c2stPnNrX3NuZHRpbWVvID0gc29jay0+c2stPnNrX3JjdnRpbWVvID0KLQkJbXNlY3NfdG9famlmZmllcyhEU1RfREVGQVVMVF9USU1FTyk7Ci0Jc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKLQotCXN0LT5zb2NrZXQgPSBzdC0+cmVhZF9zb2NrZXQgPSBzb2NrOwotCXJldHVybiAwOwotfQotCi12b2lkIGRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlkcHJpbnRrKCIlczogc3Q6ICVwLCBzb2NrZXQ6ICVwLCBuOiAlcC5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIHN0LT5zb2NrZXQsIHN0LT5ub2RlKTsKLQlpZiAoc3QtPnNvY2tldCkgewotCQlzb2NrX3JlbGVhc2Uoc3QtPnNvY2tldCk7Ci0JCXN0LT5zb2NrZXQgPSBOVUxMOwotCQlzdC0+cmVhZF9zb2NrZXQgPSBOVUxMOwotCX0KLX0KLQotdm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpCi17Ci0JaWYgKHNrLT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOwotCQlwcmludGsoS0VSTl9JTkZPICIlcyAldS4ldS4ldS4ldTolZC5cbiIsIHN0ciwKLQkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7Ci0JfSBlbHNlIGlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXBpNjolZCIsCi0JCQlzdHIsICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKLQl9Ci19Ci0KLXZvaWQgZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWlmIChzdC0+c29ja2V0KSB7Ci0JCWRzdF9wb2xsX2V4aXQoc3QpOwotCQlzdC0+c29ja2V0LT5vcHMtPnNodXRkb3duKHN0LT5zb2NrZXQsIDIpOwotCi0JCWRzdF9kdW1wX2FkZHIoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCi0JCQkJIkRpc2Nvbm5lY3RlZCBwZWVyIik7Ci0JCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZzdC0+Y3RsOwotCi0JZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JZXJyID0ga2VybmVsX2Nvbm5lY3Qoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCi0JCQlzdC0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCi0JZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3JlbGVhc2U7Ci0KLQlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAotCQkJIkNvbm5lY3RlZCB0byBwZWVyIik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX291dF9yZWxlYXNlOgotCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFN0YXRlIHJlc2V0IGlzIHVzZWQgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgcGVlci4KLSAqIE1heSBmYWlsLCBidXQgd2hvIGNhcmVzLCB3ZSB3aWxsIHRyeSBhZ2FpbiBsYXRlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQlkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X3N0YXRlX3Jlc2V0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLX0KLQotLyoKLSAqIEJhc2ljIG5ldHdvcmsgc2VuZGluZy9yZWNlaXZpbmcgZnVuY3Rpb25zLgotICogQmxvY2tlZCBtb2RlIGlzIHVzZWQuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9yYXcoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmJ1ZiwgdTY0IHNpemUpCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92OwotCWludCBlcnI7Ci0KLQlCVUdfT04oIXNpemUpOwotCi0JaW92Lmlvdl9iYXNlID0gYnVmOwotCWlvdi5pb3ZfbGVuID0gc2l6ZTsKLQotCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7Ci0JbXNnLm1zZ19pb3ZsZW4gPSAxOwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsKLQotCWVyciA9IGtlcm5lbF9yZWN2bXNnKHN0LT5zb2NrZXQsICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAotCQkJbXNnLm1zZ19mbGFncyk7Ci0JaWYgKGVyciA8PSAwKSB7Ci0JCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gcmVjdiBkYXRhOiBzaXplOiAlbGx1LCBlcnI6ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgc2l6ZSwgZXJyKTsKLQkJaWYgKGVyciA9PSAwKQotCQkJZXJyID0gLUVDT05OUkVTRVQ7Ci0KLQkJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUGluZyBjb21tYW5kIHRvIGVhcmx5IGRldGVjdCBmYWlsZWQgbm9kZXMuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3NlbmRfcGluZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0JaW50IGVyciA9IC1FQ09OTlJFU0VUOwotCi0JZHN0X3N0YXRlX2xvY2soc3QpOwotCWlmIChzdC0+c29ja2V0KSB7Ci0JCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOwotCi0JCWNtZC0+Y21kID0gX19jcHVfdG9fYmUzMihEU1RfUElORyk7Ci0KLQkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLAotCQkJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDApOwotCX0KLQlkcHJpbnRrKCIlczogc3Q6ICVwLCBzb2NrZXQ6ICVwLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sCi0JCQlzdCwgc3QtPnNvY2tldCwgZXJyKTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZpbmcgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBlaXRoZXIgcmV0dXJuIGVycm9yIG9yIHJlYWQKLSAqIHdob2xlIGJsb2NrIHJlcXVlc3QuIElmIHRoZXJlIHdhcyBubyB0cmFmZmljIGZvciBhIG9uZSBzZWNvbmQsCi0gKiBzZW5kIGEgcGluZywgc2luY2UgcmVtb3RlIG5vZGUgbWF5IGRpZS4KLSAqLwotaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKLQl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOwotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOwotCWludCBlcnIgPSAwOwotCi0Jd2hpbGUgKHNpemUgJiYgIWVycikgewotCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOwotCi0JCWlmICghKHJldmVudHMgJiBtYXNrKSkgewotCQkJREVGSU5FX1dBSVQod2FpdCk7Ci0KLQkJCWZvciAoOzspIHsKLQkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQsCi0JCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJCWJyZWFrOwotCi0JCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKLQotCQkJCWlmIChyZXZlbnRzICYgbWFzaykKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KEhaKSkgewotCQkJCQllcnIgPSBkc3Rfc2VuZF9waW5nKHN0KTsKLQkJCQkJaWYgKGVycikKLQkJCQkJCXJldHVybiBlcnI7Ci0JCQkJfQotCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlmaW5pc2hfd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCk7Ci0JCX0KLQotCQllcnIgPSAtRUNPTk5SRVNFVDsKLQkJZHN0X3N0YXRlX2xvY2soc3QpOwotCi0JCWlmIChzdC0+c29ja2V0ICYmIChzdC0+cmVhZF9zb2NrZXQgPT0gc3QtPnNvY2tldCkgJiYKLQkJCQkocmV2ZW50cyAmIFBPTExJTikpIHsKLQkJCWVyciA9IGRzdF9kYXRhX3JlY3ZfcmF3KHN0LCBkYXRhLCBzaXplKTsKLQkJCWlmIChlcnIgPiAwKSB7Ci0JCQkJZGF0YSArPSBlcnI7Ci0JCQkJc2l6ZSAtPSBlcnI7Ci0JCQkJZXJyID0gMDsKLQkJCX0KLQkJfQotCi0JCWlmIChyZXZlbnRzICYgZXJyX21hc2sgfHwgIXN0LT5zb2NrZXQpIHsKLQkJCWRwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgc2l6ZTogJXUsICIKLQkJCQkJImVycjogJWQuXG4iLCBfX2Z1bmNfXywgcmV2ZW50cywKLQkJCQkJc3QtPnNvY2tldCwgc2l6ZSwgZXJyKTsKLQkJCWVyciA9IC1FQ09OTlJFU0VUOwotCQl9Ci0KLQkJZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQpCi0JCQllcnIgPSAtRU5PREVWOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBTZW5kIGJsb2NrIGF1dG9jb25mIHJlcGx5LgotICovCi1zdGF0aWMgaW50IGRzdF9wcm9jZXNzX2NmZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0JaW50IGVycjsKLQotCWNtZC0+c2VjdG9yID0gbi0+c2l6ZTsKLQljbWQtPnJ3ID0gc3QtPnBlcm1pc3Npb25zOwotCi0JZHN0X2NvbnZlcnRfY21kKGNtZCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZlIGJsb2NrIElPIGZyb20gdGhlIG5ldHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X3JlY3ZfYmlvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCBzdHJ1Y3QgYmlvICpiaW8sCi0JCXVuc2lnbmVkIGludCB0b3RhbF9zaXplKQotewotCXN0cnVjdCBiaW9fdmVjICpidjsKLQlpbnQgaSwgZXJyOwotCXZvaWQgKmRhdGE7Ci0JdW5zaWduZWQgaW50IHN6OwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgewotCQlzeiA9IG1pbih0b3RhbF9zaXplLCBidi0+YnZfbGVuKTsKLQotCQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCB0b3RhbDogJXUsIGxlbjogJXUsIHN6OiAldSwgIgotCQkJCSJvZmY6ICV1LlxuIiwgX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsCi0JCQkJYmlvLT5iaV9zaXplLCB0b3RhbF9zaXplLCBidi0+YnZfbGVuLCBzeiwKLQkJCQlidi0+YnZfb2Zmc2V0KTsKLQotCQlkYXRhID0ga21hcChidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OwotCQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBkYXRhLCBzeik7Ci0JCWt1bm1hcChidi0+YnZfcGFnZSk7Ci0KLQkJYnYtPmJ2X2xlbiA9IHN6OwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCXRvdGFsX3NpemUgLT0gc3o7Ci0JCWlmICh0b3RhbF9zaXplID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE91ciBibG9jayBJTyBoYXMganVzdCBjb21wbGV0ZWQgYW5kIGFycml2ZWQ6IGdldCBpdC4KLSAqLwotc3RhdGljIGludCBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0Jc3RydWN0IGRzdF90cmFucyAqdDsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0KLQltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKLQl0ID0gZHN0X3RyYW5zX3NlYXJjaChuLCBjbWQtPmlkKTsKLQltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOwotCi0JaWYgKCF0KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWJpbyA9IHQtPmJpbzsKLQotCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIGNtZF9zaXplOiAldSwgY3NpemU6ICV1LCBkaXI6ICVsdS5cbiIsCi0JCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGNtZC0+c2l6ZSwKLQkJY21kLT5jc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCi0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpIHsKLQkJaWYgKGJpby0+Ymlfc2l6ZSAhPSBjbWQtPnNpemUgLSBjbWQtPmNzaXplKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkgewotCQkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHQtPmNtZC5oYXNoKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JCX0KLQotCQllcnIgPSBkc3RfcmVjdl9iaW8oc3QsIHQtPmJpbywgYmlvLT5iaV9zaXplKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9leGl0OwotCi0JCWlmIChkc3RfbmVlZF9jcnlwdG8obikpCi0JCQlyZXR1cm4gZHN0X3RyYW5zX2NyeXB0byh0KTsKLQl9IGVsc2UgewotCQllcnIgPSAtRUJBRE1TRzsKLQkJaWYgKGNtZC0+c2l6ZSB8fCBjbWQtPmNzaXplKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JZHN0X3RyYW5zX3JlbW92ZSh0KTsKLQlkc3RfdHJhbnNfcHV0KHQpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2ZSBjcnlwdG8gZGF0YS4KLSAqLwotaW50IGRzdF9yZWN2X2NkYXRhKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpjZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKLQlpbnQgZXJyOwotCi0JaWYgKGNtZC0+Y3NpemUgIT0gYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpIHsKLQkJZHByaW50aygiJXM6IGNtZDogY21kOiAldSwgc2VjdG9yOiAlbGx1LCBzaXplOiAldSwgIgotCQkJCSJjc2l6ZTogJXUgIT0gZGlnZXN0IHNpemUgJXUuXG4iLAotCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IsIGNtZC0+c2l6ZSwKLQkJCQljbWQtPmNzaXplLCBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQotCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGNkYXRhLCBjbWQtPmNzaXplKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWNtZC0+c2l6ZSAtPSBjbWQtPmNzaXplOwotCXJldHVybiAwOwotCi1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFJlY2VpdmUgdGhlIGNvbW1hbmQgYW5kIHN0YXJ0IGl0cyBwcm9jZXNzaW5nLgotICovCi1zdGF0aWMgaW50IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JaW50IGVyciA9IC1FSU5UUjsKLQlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7Ci0KLQkvKgotCSAqIElmIHNvY2tldCB3aWxsIGJlIHJlc2V0IGFmdGVyIHRoaXMgc3RhdGVtZW50LCB0aGVuCi0JICogZHN0X2RhdGFfcmVjdigpIHdpbGwganVzdCBmYWlsIGFuZCBsb29wIHdpbGwKLQkgKiBzdGFydCBhZ2Fpbiwgc28gaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja3MuCi0JICoKLQkgKiBzdC0+cmVhZF9zb2NrZXQgaXMgbmVlZGVkIHRvIHByZXZlbnRzIHN0YXRlIG1hY2hpbmUKLQkgKiBicmVha2luZyBiZXR3ZWVuIHRoaXMgZGF0YSByZWFkaW5nIGFuZCBzdWJzZXF1ZW50IG9uZQotCSAqIGluIHByb3RvY29sIHNwZWNpZmljIGZ1bmN0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiByZXNldC4KLQkgKiBJbiBjYXNlIG9mIHJlc2V0IHdlIGhhdmUgdG8gcmVhZCBuZXh0IGNvbW1hbmQgYW5kIGRvCi0JICogbm90IGV4cGVjdCBkYXRhIGZvciBvbGQgY29tbWFuZCB0byBtYWdpY2FsbHkgYXBwZWFyIGluCi0JICogbmV3IGNvbm5lY3Rpb24uCi0JICovCi0Jc3QtPnJlYWRfc29ja2V0ID0gc3QtPnNvY2tldDsKLQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2V4aXQ7Ci0KLQlkc3RfY29udmVydF9jbWQoY21kKTsKLQotCWRwcmludGsoIiVzOiBjbWQ6ICV1LCBzaXplOiAldSwgY3NpemU6ICV1LCBpZDogJWxsdSwgIgotCQkJInNlY3RvcjogJWxsdSwgZmxhZ3M6ICVsbHgsIHJ3OiAlbGx4LlxuIiwKLQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zaXplLAotCQkJY21kLT5jc2l6ZSwgY21kLT5pZCwgY21kLT5zZWN0b3IsCi0JCQljbWQtPmZsYWdzLCBjbWQtPnJ3KTsKLQotCS8qCi0JICogVGhpcyBzaG91bGQgY2F0Y2ggcHJvdG9jb2wgYnJlYWthZ2UgYW5kIHJhbmRvbSBnYXJiYWdlCi0JICogaW5zdGVhZCBvZiBjb21tYW5kcy4KLQkgKi8KLQlpZiAodW5saWtlbHkoY21kLT5jc2l6ZSA+IHN0LT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSkpIHsKLQkJZXJyID0gLUVCQURNU0c7Ci0JCWdvdG8gb3V0X2V4aXQ7Ci0JfQotCi0JZXJyID0gLUVQUk9UTzsKLQlzd2l0Y2ggKGNtZC0+Y21kKSB7Ci0JY2FzZSBEU1RfSU9fUkVTUE9OU0U6Ci0JCWVyciA9IGRzdF9wcm9jZXNzX2lvX3Jlc3BvbnNlKHN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1RfSU86Ci0JCWVyciA9IGRzdF9wcm9jZXNzX2lvKHN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1RfQ0ZHOgotCQllcnIgPSBkc3RfcHJvY2Vzc19jZmcoc3QpOwotCQlicmVhazsKLQljYXNlIERTVF9QSU5HOgotCQllcnIgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLW91dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBSZWNlaXZpbmcgdGhyZWFkLiBGb3IgdGhlIGNsaWVudCBub2RlIHdlIHNob3VsZCB0cnkgdG8gcmVjb25uZWN0LAotICogZm9yIGFjY2VwdGVkIGNsaWVudCB3ZSBqdXN0IGRyb3AgdGhlIHN0YXRlIGFuZCBleHBlY3QgaXQgdG8gcmVjb25uZWN0LgotICovCi1zdGF0aWMgaW50IGRzdF9yZWN2KHZvaWQgKmluaXRfZGF0YSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHNjaGVkdWxlX2RhdGE7Ci0Jc3RydWN0IGRzdF9ub2RlICpuID0gaW5pdF9kYXRhOwotCWludCBlcnIgPSAwOwotCi0JZHByaW50aygiJXM6IHN0YXJ0IHN0OiAlcCwgbjogJXAsIHNjYW46ICVsdSwgbmVlZF9leGl0OiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgc3QsIG4sIG4tPnRyYW5zX3NjYW5fdGltZW91dCwgc3QtPm5lZWRfZXhpdCk7Ci0KLQl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0ICYmICFzdC0+bmVlZF9leGl0KSB7Ci0JCWVyciA9IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3QpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJaWYgKCFzdC0+Y3RsLnR5cGUpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCi0JCQkJYnJlYWs7Ci0KLQkJCWRzdF9zdGF0ZV9yZXNldChzdCk7Ci0JCQltc2xlZXAoMTAwMCk7Ci0JCX0KLQl9Ci0KLQlzdC0+bmVlZF9leGl0ID0gMTsKLQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOwotCi0JZHByaW50aygiJXM6IGZyZWVpbmcgcmVjZWl2aW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOwotCWRzdF9zdGF0ZV9sb2NrKHN0KTsKLQlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOwotCWRzdF9zdGF0ZV91bmxvY2soc3QpOwotCWRzdF9zdGF0ZV9wdXQoc3QpOwotCi0JZHByaW50aygiJXM6IGZyZWVkIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBOZXR3b3JrIHN0YXRlIGRpZXMgaGVyZSBhbmQgYm9ybnMgY291cGxlIG9mIGxpbmVzIGJlbG93LgotICogVGhpcyBvYmplY3QgaXMgdGhlIG1haW4gbmV0d29yayBzdGF0ZSBwcm9jZXNzaW5nIGVuZ2luZToKLSAqIHNlbmRpbmcsIHJlY2VpdmluZywgcmVjb25uZWN0aW9ucywgYWxsIG5ldHdvcmsgcmVsYXRlZAotICogdGFza3MgYXJlIGhhbmRsZWQgb24gYmVoYWxmIG9mIHRoZSBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3N0YXRlX2ZyZWUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JZHByaW50aygiJXM6IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7Ci0JaWYgKHN0LT5jbGVhbnVwKQotCQlzdC0+Y2xlYW51cChzdCk7Ci0Ja2ZyZWUoc3QtPmRhdGEpOwotCWtmcmVlKHN0KTsKLX0KLQotc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghc3QpCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0Jc3QtPm5vZGUgPSBuOwotCXN0LT5uZWVkX2V4aXQgPSAwOwotCi0Jc3QtPnNpemUgPSBQQUdFX1NJWkU7Ci0Jc3QtPmRhdGEgPSBrbWFsbG9jKHN0LT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0LT5kYXRhKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCXNwaW5fbG9ja19pbml0KCZzdC0+cmVxdWVzdF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmc3QtPnJlcXVlc3RfbGlzdCk7Ci0KLQltdXRleF9pbml0KCZzdC0+c3RhdGVfbG9jayk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc3QtPnRocmVhZF93YWl0KTsKLQotCS8qCi0JICogT25lIGZvciBwcm9jZXNzaW5nIHRocmVhZCwgYW5vdGhlciBvbmUgZm9yIG5vZGUgaXRzZWxmLgotCSAqLwotCWF0b21pY19zZXQoJnN0LT5yZWZjbnQsIDIpOwotCi0JZHByaW50aygiJXM6IHN0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgc3QsIHN0LT5ub2RlKTsKLQotCXJldHVybiBzdDsKLQotZXJyX291dF9mcmVlOgotCWtmcmVlKHN0KTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotCi1pbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0LT5ub2RlLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAotCQkJZHN0X3JlY3YsIHN0LCBNQVhfU0NIRURVTEVfVElNRU9VVCwgc3QtPm5vZGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBjbGllbnQncyBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgcGVlcjogYWxsb2NhdGUgc3RhdGUsCi0gKiBjb25uZWN0IGFuZCBwZXJmb3JtIGJsb2NrIElPIGF1dG9jb25maWd1cmF0aW9uLgotICovCi1pbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKQotewotCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0Jc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7Ci0JaWYgKElTX0VSUihzdCkpIHsKLQkJZXJyID0gUFRSX0VSUihzdCk7Ci0JCWdvdG8gZXJyX291dF9leGl0OwotCX0KLQltZW1jcHkoJnN0LT5jdGwsIHIsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7Ci0KLQllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlX2RhdGE7Ci0KLQllcnIgPSBkc3RfcmVxdWVzdF9yZW1vdGVfY29uZmlnKHN0KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdF9jb25uZWN0ZWQ7Ci0Jbi0+c3RhdGUgPSBzdDsKLQotCWVyciA9IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdF9jb25uZWN0ZWQ6Ci0JZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKLWVycl9vdXRfZnJlZV9kYXRhOgotCWRzdF9zdGF0ZV9mcmVlKHN0KTsKLWVycl9vdXRfZXhpdDoKLQluLT5zdGF0ZSA9IE5VTEw7Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQuXG4iLAotCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkpOwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdC0+cmVmY250KSkKLQkJZHN0X3N0YXRlX2ZyZWUoc3QpOwotfQotCi0vKgotICogU2VuZCBibG9jayBJTyB0byB0aGUgbmV0d29yayBvbmUgYnkgb25lIHVzaW5nIHplcm8tY29weSAtPnNlbmRwYWdlKCkuCi0gKi8KLWludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnY7Ci0Jc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJnN0LT5ub2RlLT5jcnlwdG87Ci0JaW50IGVyciwgaSA9IDA7Ci0JaW50IGZsYWdzID0gTVNHX1dBSVRBTEw7Ci0KLQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCi0JCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCkgKyBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwgYmlvLT5iaV92Y250KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKLQkJaWYgKGkgPCBiaW8tPmJpX3ZjbnQgLSAxKQotCQkJZmxhZ3MgfD0gTVNHX01PUkU7Ci0KLQkJZXJyID0ga2VybmVsX3NlbmRwYWdlKHN0LT5zb2NrZXQsIGJ2LT5idl9wYWdlLCBidi0+YnZfb2Zmc2V0LAotCQkJCWJ2LT5idl9sZW4sIGZsYWdzKTsKLQkJaWYgKGVyciA8PSAwKQotCQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfZXhpdDoKLQlkcHJpbnRrKCIlczogJWQvJWQsIGZsYWdzOiAleCwgZXJyOiAlZC5cbiIsCi0JCQlfX2Z1bmNfXywgaSwgYmlvLT5iaV92Y250LCBmbGFncywgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2VuZCB0cmFuc2FjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXIuCi0gKi8KLWludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KQotewotCWludCBlcnI7Ci0Jc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSB0LT5uLT5zdGF0ZTsKLQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0KLQlkc3RfY29udmVydF9jbWQoJnQtPmNtZCk7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKCFzdC0+c29ja2V0KSB7Ci0JCWVyciA9IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCX0KLQotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgewotCQllcnIgPSBkc3Rfc2VuZF9iaW8oc3QsICZ0LT5jbWQsIHQtPmJpbyk7Ci0JfSBlbHNlIHsKLQkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgJnQtPmNtZCwKLQkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKLQl9Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X3Jlc2V0OwotCi0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVzZXQ6Ci0JZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7Ci1lcnJfb3V0X3VubG9jazoKLQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKLQotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YTgyYjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC90aHJlYWRfcG9vbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKgotICogVGhyZWFkIHBvb2wgYWJzdHJhY3Rpb24gYWxsb3dzIHRvIHNjaGVkdWxlIGEgd29yayB0byBiZSBwZXJmb3JtZWQKLSAqIG9uIGJlaGFsZiBvZiBrZXJuZWwgdGhyZWFkLiBPbmUgZG9lcyBub3Qgb3BlcmF0ZSB3aXRoIHRocmVhZHMgaXRzZWxmLAotICogaW5zdGVhZCB1c2VyIHByb3ZpZGVzIHNldHVwIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBmb3IgdGhyZWFkIHBvb2wgaXRzZWxmLAotICogYW5kIGFjdGlvbiBhbmQgY2xlYW51cCBjYWxsYmFja3MgZm9yIGVhY2ggc3VibWl0dGVkIHdvcmsuCi0gKgotICogRWFjaCB3b3JrZXIgaGFzIHByaXZhdGUgZGF0YSBpbml0aWFsaXplZCBhdCBjcmVhdGlvbiB0aW1lIGFuZCBkYXRhLAotICogcHJvdmlkZWQgYnkgdXNlciBhdCBzY2hlZHVsaW5nIHRpbWUuCi0gKgotICogV2hlbiBhY3Rpb24gaXMgYmVpbmcgcGVyZm9ybWVkLCB0aHJlYWQgY2FuIG5vdCBiZSB1c2VkIGJ5IG90aGVyIHVzZXJzLAotICogaW5zdGVhZCB0aGV5IHdpbGwgc2xlZXAgdW50aWwgdGhlcmUgaXMgZnJlZSB0aHJlYWQgdG8gcGljayB0aGVpciB3b3JrLgotICovCi1zdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtlcl9lbnRyeTsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOwotCi0Jc3RydWN0IHRocmVhZF9wb29sCSpwb29sOwotCi0JaW50CQkJZXJyb3I7Ci0JaW50CQkJaGFzX2RhdGE7Ci0JaW50CQkJbmVlZF9leGl0OwotCXVuc2lnbmVkIGludAkJaWQ7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotCi0Jdm9pZAkJCSpwcml2YXRlOwotCXZvaWQJCQkqc2NoZWR1bGVfZGF0YTsKLQotCWludAkJCSgqYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpzY2hlZHVsZV9kYXRhKTsKLQl2b2lkCQkJKCpjbGVhbnVwKSh2b2lkICpwcml2YXRlKTsKLX07Ci0KLXN0YXRpYyB2b2lkIHRocmVhZF9wb29sX2V4aXRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncpCi17Ci0Ja3RocmVhZF9zdG9wKHctPnRocmVhZCk7Ci0KLQl3LT5jbGVhbnVwKHctPnByaXZhdGUpOwotCWtmcmVlKHcpOwotfQotCi0vKgotICogQ2FsbGVkIHRvIG1hcmsgdGhyZWFkIGFzIHJlYWR5IGFuZCBhbGxvdyB1c2VycyB0byBzY2hlZHVsZSBuZXcgd29yay4KLSAqLwotc3RhdGljIHZvaWQgdGhyZWFkX3Bvb2xfd29ya2VyX21ha2VfcmVhZHkoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdykKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAgPSB3LT5wb29sOwotCi0JbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JaWYgKCF3LT5uZWVkX2V4aXQpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOwotCQl3LT5oYXNfZGF0YSA9IDA7Ci0JCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JCXdha2VfdXAoJnAtPndhaXQpOwotCX0gZWxzZSB7Ci0JCXAtPnRocmVhZF9udW0tLTsKLQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7Ci0JCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOwotCi0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotCX0KLX0KLQotLyoKLSAqIFRocmVhZCBhY3Rpb24gbG9vcDogd2FpdHMgdW50aWwgdGhlcmUgaXMgbmV3IHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgdGhyZWFkX3Bvb2xfd29ya2VyX2Z1bmModm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3ID0gZGF0YTsKLQotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3LT53YWl0LAotCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHctPmhhc19kYXRhKTsKLQotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCF3LT5oYXNfZGF0YSkKLQkJCWNvbnRpbnVlOwotCi0JCXctPmFjdGlvbih3LT5wcml2YXRlLCB3LT5zY2hlZHVsZV9kYXRhKTsKLQkJdGhyZWFkX3Bvb2xfd29ya2VyX21ha2VfcmVhZHkodyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgc2luZ2xlIHdvcmtlciB3aXRob3V0IHNwZWNpZnlpbmcgd2hpY2ggb25lLgotICovCi12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwKQotewotCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncgPSBOVUxMOwotCi0Jd2hpbGUgKCF3ICYmIHAtPnRocmVhZF9udW0pIHsKLQkJd2FpdF9ldmVudChwLT53YWl0LCAhbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCkgfHwKLQkJCQkhcC0+dGhyZWFkX251bSk7Ci0KLQkJZHByaW50aygiJXM6IGxvY2tpbmcgbGlzdF9lbXB0eTogJWQsIHRocmVhZF9udW06ICVkLlxuIiwKLQkJCQlfX2Z1bmNfXywgbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksCi0JCQkJcC0+dGhyZWFkX251bSk7Ci0KLQkJbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCQlpZiAoIWxpc3RfZW1wdHkoJnAtPnJlYWR5X2xpc3QpKSB7Ci0JCQl3ID0gbGlzdF9maXJzdF9lbnRyeSgmcC0+cmVhZHlfbGlzdCwKLQkJCQkJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciwKLQkJCQkJd29ya2VyX2VudHJ5KTsKLQotCQkJZHByaW50aygiJXM6IGRlbGV0aW5nIHc6ICVwLCB0aHJlYWRfbnVtOiAlZCwgIgotCQkJCQkibGlzdDogJXAgWyVwLiVwXS5cbiIsIF9fZnVuY19fLAotCQkJCQl3LCBwLT50aHJlYWRfbnVtLCAmcC0+cmVhZHlfbGlzdCwKLQkJCQkJcC0+cmVhZHlfbGlzdC5wcmV2LCBwLT5yZWFkeV9saXN0Lm5leHQpOwotCi0JCQlwLT50aHJlYWRfbnVtLS07Ci0JCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKLQkJfQotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQl9Ci0KLQlpZiAodykKLQkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7Ci0JZHByaW50aygiJXM6IGRlbGV0ZWQgdzogJXAsIHRocmVhZF9udW06ICVkLlxuIiwKLQkJCV9fZnVuY19fLCB3LCBwLT50aHJlYWRfbnVtKTsKLX0KLQotLyoKLSAqIFJlbW92ZSBhIHdvcmtlciB3aXRoIGdpdmVuIElELgotICovCi12b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXJfaWQoc3RydWN0IHRocmVhZF9wb29sICpwLCB1bnNpZ25lZCBpbnQgaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdzsKLQlpbnQgZm91bmQgPSAwOwotCi0JbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQlpZiAody0+aWQgPT0gaWQpIHsKLQkJCWZvdW5kID0gMTsKLQkJCXAtPnRocmVhZF9udW0tLTsKLQkJCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJnAtPmFjdGl2ZV9saXN0LCB3b3JrZXJfZW50cnkpIHsKLQkJCWlmICh3LT5pZCA9PSBpZCkgewotCQkJCXctPm5lZWRfZXhpdCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7Ci0KLQlpZiAoZm91bmQpCi0JCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOwotfQotCi0vKgotICogQWRkIG5ldyB3b3JrZXIgdGhyZWFkIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy4KLSAqIElmIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGZhaWxzLCByZXR1cm4gZXJyb3IuCi0gKi8KLWludCB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJY2hhciAqbmFtZSwKLQkJdW5zaWduZWQgaW50IGlkLAotCQl2b2lkICooKmluaXQpKHZvaWQgKnByaXZhdGUpLAotCQl2b2lkICgqY2xlYW51cCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdzsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3KQotCQlnb3RvIGVycl9vdXRfZXhpdDsKLQotCXctPnBvb2wgPSBwOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnctPndhaXQpOwotCXctPmNsZWFudXAgPSBjbGVhbnVwOwotCXctPmlkID0gaWQ7Ci0KLQl3LT50aHJlYWQgPSBrdGhyZWFkX3J1bih0aHJlYWRfcG9vbF93b3JrZXJfZnVuYywgdywgIiVzIiwgbmFtZSk7Ci0JaWYgKElTX0VSUih3LT50aHJlYWQpKSB7Ci0JCWVyciA9IFBUUl9FUlIody0+dGhyZWFkKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQotCi0Jdy0+cHJpdmF0ZSA9IGluaXQocHJpdmF0ZSk7Ci0JaWYgKElTX0VSUih3LT5wcml2YXRlKSkgewotCQllcnIgPSBQVFJfRVJSKHctPnByaXZhdGUpOwotCQlnb3RvIGVycl9vdXRfc3RvcF90aHJlYWQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOwotCXAtPnRocmVhZF9udW0rKzsKLQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X3N0b3BfdGhyZWFkOgotCWt0aHJlYWRfc3RvcCh3LT50aHJlYWQpOwotZXJyX291dF9mcmVlOgotCWtmcmVlKHcpOwotZXJyX291dF9leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBEZXN0cm95IHRoZSB3aG9sZSBwb29sLgotICovCi12b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKQotewotCXdoaWxlIChwLT50aHJlYWRfbnVtKSB7Ci0JCWRwcmludGsoIiVzOiBudW06ICVkLlxuIiwgX19mdW5jX18sIHAtPnRocmVhZF9udW0pOwotCQl0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHApOwotCX0KLQotCWtmcmVlKHApOwotfQotCi0vKgotICogQ3JlYXRlIGEgcG9vbCB3aXRoIGdpdmVuIG51bWJlciBvZiB0aHJlYWRzLgotICogVGhleSB3aWxsIGhhdmUgc2VxdWVudGlhbCBJRHMgc3RhcnRlZCBmcm9tIHplcm8uCi0gKi8KLXN0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCi0JCXZvaWQgKigqaW5pdCkodm9pZCAqcHJpdmF0ZSksCi0JCXZvaWQgKCpjbGVhbnVwKSh2b2lkICpwcml2YXRlKSwKLQkJdm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3LCAqdG1wOwotCXN0cnVjdCB0aHJlYWRfcG9vbCAqcDsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQlpbnQgaTsKLQotCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2wpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXApCi0JCWdvdG8gZXJyX291dF9leGl0OwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcC0+d2FpdCk7Ci0JbXV0ZXhfaW5pdCgmcC0+dGhyZWFkX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZwLT5yZWFkeV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+YWN0aXZlX2xpc3QpOwotCXAtPnRocmVhZF9udW0gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0JCWVyciA9IHRocmVhZF9wb29sX2FkZF93b3JrZXIocCwgbmFtZSwgaSwgaW5pdCwKLQkJCQljbGVhbnVwLCBwcml2YXRlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9mcmVlX2FsbDsKLQl9Ci0KLQlyZXR1cm4gcDsKLQotZXJyX291dF9mcmVlX2FsbDoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodywgdG1wLCAmcC0+cmVhZHlfbGlzdCwgd29ya2VyX2VudHJ5KSB7Ci0JCWxpc3RfZGVsKCZ3LT53b3JrZXJfZW50cnkpOwotCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKLQl9Ci0Ja2ZyZWUocCk7Ci1lcnJfb3V0X2V4aXQ6Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotLyoKLSAqIFNjaGVkdWxlIGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIG9uIGEgZ2l2ZW4gdGhyZWFkLAotICogcHJvdmlkZWQgSUQgcG9pbnRlciBoYXMgdG8gbWF0Y2ggcHJldmlvdXNseSBzdG9yZWQKLSAqIHByaXZhdGUgZGF0YS4KLSAqLwotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCpzZXR1cCkodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCWludCAoKmFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpCi17Ci0Jc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdywgKnRtcCwgKndvcmtlciA9IE5VTEw7Ci0JaW50IGVyciA9IDA7Ci0KLQl3aGlsZSAoIXdvcmtlciAmJiAhZXJyKSB7Ci0JCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwLT53YWl0LAotCQkJCSFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSwKLQkJCQl0aW1lb3V0KTsKLQotCQlpZiAoIXRpbWVvdXQpIHsKLQkJCWVyciA9IC1FVElNRURPVVQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCXdvcmtlciA9IE5VTEw7Ci0JCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgewotCQkJaWYgKGlkICYmIGlkICE9IHctPnByaXZhdGUpCi0JCQkJY29udGludWU7Ci0KLQkJCXdvcmtlciA9IHc7Ci0KLQkJCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5hY3RpdmVfbGlzdCk7Ci0KLQkJCWVyciA9IHNldHVwKHctPnByaXZhdGUsIGRhdGEpOwotCQkJaWYgKCFlcnIpIHsKLQkJCQl3LT5zY2hlZHVsZV9kYXRhID0gZGF0YTsKLQkJCQl3LT5hY3Rpb24gPSBhY3Rpb247Ci0JCQkJdy0+aGFzX2RhdGEgPSAxOwotCQkJCXdha2VfdXAoJnctPndhaXQpOwotCQkJfSBlbHNlIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LAotCQkJCQkJJnAtPnJlYWR5X2xpc3QpOwotCQkJfQotCi0JCQlicmVhazsKLQkJfQotCQltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2NoZWR1bGUgZXhlY3V0aW9uIG9uIGFyYml0cmFyeSB0aHJlYWQgZnJvbSB0aGUgcG9vbC4KLSAqLwotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJaW50ICgqc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQlpbnQgKCphY3Rpb24pKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQl2b2lkICpkYXRhLCBsb25nIHRpbWVvdXQpCi17Ci0JcmV0dXJuIHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUocCwgc2V0dXAsCi0JCQlhY3Rpb24sIGRhdGEsIHRpbWVvdXQsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzM2YTZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZHN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLQotLyoKLSAqIFRyYW5zYWN0aW9uIG1lbW9yeSBwb29sIHNpemUuCi0gKi8KLXN0YXRpYyBpbnQgZHN0X21lbXBvb2xfbnVtID0gMzI7Ci1tb2R1bGVfcGFyYW0oZHN0X21lbXBvb2xfbnVtLCBpbnQsIDA2NDQpOwotCi0vKgotICogVHJhbnNhY3Rpb24gdHJlZSBtYW5hZ2VtZW50LgotICovCi1zdGF0aWMgaW5saW5lIGludCBkc3RfdHJhbnNfY21wKGRzdF9nZW5fdCBnZW4sIGRzdF9nZW5fdCBuZXcpCi17Ci0JaWYgKGdlbiA8IG5ldykKLQkJcmV0dXJuIDE7Ci0JaWYgKGdlbiA+IG5ldykKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHN0X3RyYW5zICpkc3RfdHJhbnNfc2VhcmNoKHN0cnVjdCBkc3Rfbm9kZSAqbm9kZSwgZHN0X2dlbl90IGdlbikKLXsKLQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZub2RlLT50cmFuc19yb290OwotCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0LCAqcmV0ID0gTlVMTDsKLQlpbnQgY21wOwotCi0Jd2hpbGUgKG4pIHsKLQkJdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgZ2VuKTsKLQkJaWYgKGNtcCA8IDApCi0JCQluID0gbi0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoY21wID4gMCkKLQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJZWxzZSB7Ci0JCQlyZXQgPSB0OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlkcHJpbnRrKCIlczogJXMgdHJhbnNhY3Rpb246IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sCi0JCQkocmV0KSA/ICJmb3VuZCIgOiAibm90IGZvdW5kIiwgZ2VuKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHN0X3RyYW5zX2luc2VydChzdHJ1Y3QgZHN0X3RyYW5zICpuZXcpCi17Ci0Jc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmbmV3LT5uLT50cmFuc19yb290OwotCXN0cnVjdCByYl9ub2RlICoqbiA9ICZyb290LT5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgZHN0X3RyYW5zICpyZXQgPSBOVUxMLCAqdDsKLQlpbnQgY21wOwotCi0Jd2hpbGUgKCpuKSB7Ci0JCXBhcmVudCA9ICpuOwotCi0JCXQgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKLQotCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgbmV3LT5nZW4pOwotCQlpZiAoY21wIDwgMCkKLQkJCW4gPSAmcGFyZW50LT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPiAwKQotCQkJbiA9ICZwYXJlbnQtPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCXJldCA9IHQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCW5ldy0+c2VuZF90aW1lID0gamlmZmllczsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpc3Q6IG9sZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsICIKLQkJCSJzZW5kX3RpbWU6ICVsdSwgbmV3OiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgIgotCQkJInNlbmRfdGltZTogJWx1LlxuIiwgX19mdW5jX18sCi0JCQlyZXQtPmdlbiwgKHU2NClyZXQtPmJpby0+Ymlfc2VjdG9yLAotCQkJcmV0LT5iaW8tPmJpX3NpemUsIHJldC0+c2VuZF90aW1lLAotCQkJbmV3LT5nZW4sICh1NjQpbmV3LT5iaW8tPmJpX3NlY3RvciwKLQkJCW5ldy0+YmlvLT5iaV9zaXplLCBuZXctPnNlbmRfdGltZSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCXJiX2xpbmtfbm9kZSgmbmV3LT50cmFuc19lbnRyeSwgcGFyZW50LCBuKTsKLQlyYl9pbnNlcnRfY29sb3IoJm5ldy0+dHJhbnNfZW50cnksIHJvb3QpOwotCi0JZHByaW50aygiJXM6IGluc2VydGVkOiBnZW46ICVsbHUsIGJpbzogJWxsdS8ldSwgc2VuZF90aW1lOiAlbHUuXG4iLAotCQlfX2Z1bmNfXywgbmV3LT5nZW4sICh1NjQpbmV3LT5iaW8tPmJpX3NlY3RvciwKLQkJbmV3LT5iaW8tPmJpX3NpemUsIG5ldy0+c2VuZF90aW1lKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCi0JaWYgKHQtPnRyYW5zX2VudHJ5LnJiX3BhcmVudF9jb2xvcikgewotCQlyYl9lcmFzZSgmdC0+dHJhbnNfZW50cnksICZuLT50cmFuc19yb290KTsKLQkJdC0+dHJhbnNfZW50cnkucmJfcGFyZW50X2NvbG9yID0gMDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc3RfdHJhbnNfcmVtb3ZlKHN0cnVjdCBkc3RfdHJhbnMgKnQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JcmV0ID0gZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2sodCk7Ci0JbXV0ZXhfdW5sb2NrKCZuLT50cmFuc19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBXaGVuIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZCBhbmQgdGhlcmUgYXJlIG5vIG1vcmUgdXNlcnMsCi0gKiB3ZSBjb21wbGV0ZSBhcHByaWF0ZSBibG9jayBJTyByZXF1ZXN0IHdpdGggZ2l2ZW4gZXJyb3Igc3RhdHVzLgotICovCi12b2lkIGRzdF90cmFuc19wdXQoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdC0+cmVmY250KSkgewotCQlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87Ci0KLQkJZHByaW50aygiJXM6IGNvbXBsZXRlZCB0OiAlcCwgZ2VuOiAlbGx1LCBiaW86ICVwLlxuIiwKLQkJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBiaW8pOwotCi0JCWJpb19lbmRpbyhiaW8sIHQtPmVycm9yKTsKLQkJYmlvX3B1dChiaW8pOwotCi0JCWRzdF9ub2RlX3B1dCh0LT5uKTsKLQkJbWVtcG9vbF9mcmVlKHQsIHQtPm4tPnRyYW5zX3Bvb2wpOwotCX0KLX0KLQotLyoKLSAqIFByb2Nlc3MgZ2l2ZW4gYmxvY2sgSU8gcmVxdWVzdDogYWxsb2NhdGUgdHJhbnNhY3Rpb24sIGluc2VydCBpdCBpbnRvIHRoZSB0cmVlCi0gKiBhbmQgc2VuZC9zY2hlZHVsZSBjcnlwdG8gcHJvY2Vzc2luZy4KLSAqLwotaW50IGRzdF9wcm9jZXNzX2JpbyhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlzdHJ1Y3QgZHN0X3RyYW5zICp0OwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JdCA9IG1lbXBvb2xfYWxsb2Mobi0+dHJhbnNfcG9vbCwgR0ZQX05PRlMpOwotCWlmICghdCkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQl0LT5uID0gZHN0X25vZGVfZ2V0KG4pOwotCXQtPmJpbyA9IGJpbzsKLQl0LT5lcnJvciA9IDA7Ci0JdC0+cmV0cmllcyA9IDA7Ci0JYXRvbWljX3NldCgmdC0+cmVmY250LCAxKTsKLQl0LT5nZW4gPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKCZuLT5nZW4pOwotCi0JdC0+ZW5jID0gYmlvX2RhdGFfZGlyKGJpbyk7Ci0JZHN0X2Jpb190b19jbWQoYmlvLCAmdC0+Y21kLCBEU1RfSU8sIHQtPmdlbik7Ci0KLQltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKLQllcnIgPSBkc3RfdHJhbnNfaW5zZXJ0KHQpOwotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlkcHJpbnRrKCIlczogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIGRpci9lbmM6ICVkLCBuZWVkX2NyeXB0bzogJWQuXG4iLAotCQkJX19mdW5jX18sIHQtPmdlbiwgKHU2NCliaW8tPmJpX3NlY3RvciwKLQkJCWJpby0+Ymlfc2l6ZSwgdC0+ZW5jLCBkc3RfbmVlZF9jcnlwdG8obikpOwotCi0JaWYgKGRzdF9uZWVkX2NyeXB0byhuKSAmJiB0LT5lbmMpCi0JCWRzdF90cmFuc19jcnlwdG8odCk7Ci0JZWxzZQotCQlkc3RfdHJhbnNfc2VuZCh0KTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2ZyZWU6Ci0JZHN0X25vZGVfcHV0KG4pOwotCW1lbXBvb2xfZnJlZSh0LCBuLT50cmFuc19wb29sKTsKLWVycl9vdXRfZXhpdDoKLQliaW9fZW5kaW8oYmlvLCBlcnIpOwotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogU2NhbiBmb3IgdGltZW91dC9zdGFsZSB0cmFuc2FjdGlvbnMuCi0gKiBFYWNoIHRyYW5zYWN0aW9uIGlzIGJlaW5nIHJlc2VudCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgZXJyb3IgY29tcGxldGlvbi4KLSAqLwotc3RhdGljIHZvaWQgZHN0X3RyYW5zX3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHN0X25vZGUsCi0JCQl0cmFuc193b3JrLndvcmspOwotCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOwotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbi0+dHJhbnNfc2Nhbl90aW1lb3V0OwotCWludCBudW0gPSAxMCAqIG4tPnRyYW5zX21heF9yZXRyaWVzOwotCi0JbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgewotCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOwotCi0JCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIodC0+c2VuZF90aW1lICsgdGltZW91dCwgamlmZmllcykKLQkJCQkmJiB0LT5yZXRyaWVzID09IDApCi0JCQlicmVhazsKLSNpZiAwCi0JCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcywgcmV0cmllczogJXUsIG1heDogJXUuXG4iLAotCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSwKLQkJCXQtPnJldHJpZXMsIG4tPnRyYW5zX21heF9yZXRyaWVzKTsKLSNlbmRpZgotCQlpZiAoLS1udW0gPT0gMCkKLQkJCWJyZWFrOwotCi0JCWRzdF90cmFuc19nZXQodCk7Ci0KLQkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7Ci0KLQkJaWYgKHRpbWVvdXQgJiYgKCsrdC0+cmV0cmllcyA8IG4tPnRyYW5zX21heF9yZXRyaWVzKSkgewotCQkJZHN0X3RyYW5zX3NlbmQodCk7Ci0JCX0gZWxzZSB7Ci0JCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7Ci0JCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKLQkJCWRzdF90cmFuc19wdXQodCk7Ci0JCX0KLQotCQlkc3RfdHJhbnNfcHV0KHQpOwotCX0KLQotCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7Ci0KLQkvKgotCSAqIElmIG5vIHRpbWVvdXQgc3BlY2lmaWVkIHRoZW4gc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgZXhpdGluZwotCSAqIHByb2Nlc3MsIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBzY2FubmluZyBwcm9jZXNzIGFnYWluLgotCSAqLwotCWlmICh0aW1lb3V0KSB7Ci0JCWlmICghbnVtKQotCQkJdGltZW91dCA9IEhaOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm4tPnRyYW5zX3dvcmssIHRpbWVvdXQpOwotCX0KLX0KLQotLyoKLSAqIEZsdXNoIGFsbCB0cmFuc2FjdGlvbnMgYW5kIG1hcmsgdGhlbSBhcyB0aW1lZCBvdXQuCi0gKiBEZXN0cm95IHRyYW5zYWN0aW9uIHBvb2xzLgotICovCi12b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3RfdHJhbnMgKnQ7Ci0Jc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Ci0KLQlpZiAoIW4tPnRyYW5zX2NhY2hlKQotCQlyZXR1cm47Ci0KLQlkcHJpbnRrKCIlczogbjogJXAsIGNhbmNlbGxpbmcgdGhlIHdvcmsuXG4iLCBfX2Z1bmNfXywgbik7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZuLT50cmFuc193b3JrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCWRwcmludGsoIiVzOiBuOiAlcCwgd29yayBoYXMgYmVlbiBjYW5jZWxsZWQuXG4iLCBfX2Z1bmNfXywgbik7Ci0KLQlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgewotCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOwotCi0JCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcy5cbiIsCi0JCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBuLT5uYW1lKTsKLQotCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKLQotCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7Ci0JCWRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOwotCQlkc3RfdHJhbnNfcHV0KHQpOwotCX0KLQotCW1lbXBvb2xfZGVzdHJveShuLT50cmFuc19wb29sKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBzdG9yYWdlIGZvciBnaXZlbiBub2RlLgotICogVHJhbnNhY3Rpb24gc3RvcmVzIG5vdCBvbmx5IGNvbnRyb2wgaW5mb3JtYXRpb24sCi0gKiBidXQgYWxzbyBuZXR3b3JrIGNvbW1hbmQgYW5kIGNyeXB0byBkYXRhIChpZiBuZWVkZWQpCi0gKiB0byByZWR1Y2UgbnVtYmVyIG9mIGFsbG9jYXRpb25zLiBUaHVzIHRyYW5zYWN0aW9uIHNpemUKLSAqIGRpZmZlcnMgZnJvbSBub2RlIHRvIG5vZGUuCi0gKi8KLWludCBkc3Rfbm9kZV90cmFuc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JLyoKLQkgKiBXZSBuZWVkIHRoaXMsIHNpbmNlIG5vZGUgd2l0aCBnaXZlbiBuYW1lIGNhbiBiZSBkcm9wcGVkIGZyb20gdGhlCi0JICogaGFzaCB0YWJsZSwgYnV0IGJlIHN0aWxsIGFsaXZlLCBzbyBzdWJzZXF1ZW50IGNyZWF0aW9uIG9mIHRoZSBub2RlCi0JICogd2l0aCB0aGUgc2FtZSBuYW1lIG1heSBjb2xsaWRlIHdpdGggZXhpc3RpbmcgY2FjaGUgbmFtZS4KLQkgKi8KLQotCXNucHJpbnRmKG4tPmNhY2hlX25hbWUsIHNpemVvZihuLT5jYWNoZV9uYW1lKSwgIiVzLSVwIiwgbi0+bmFtZSwgbik7Ci0KLQluLT50cmFuc19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG4tPmNhY2hlX25hbWUsCi0JCQlzaXplICsgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplLAotCQkJMCwgMCwgTlVMTCk7Ci0JaWYgKCFuLT50cmFuc19jYWNoZSkKLQkJZ290byBlcnJfb3V0X2V4aXQ7Ci0KLQluLT50cmFuc19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKGRzdF9tZW1wb29sX251bSwKLQkJCW4tPnRyYW5zX2NhY2hlKTsKLQlpZiAoIW4tPnRyYW5zX3Bvb2wpCi0JCWdvdG8gZXJyX291dF9jYWNoZV9kZXN0cm95OwotCi0JbXV0ZXhfaW5pdCgmbi0+dHJhbnNfbG9jayk7Ci0Jbi0+dHJhbnNfcm9vdCA9IFJCX1JPT1Q7Ci0KLQlJTklUX0RFTEFZRURfV09SSygmbi0+dHJhbnNfd29yaywgZHN0X3RyYW5zX3NjYW4pOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbi0+dHJhbnNfd29yaywgbi0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKLQotCWRwcmludGsoIiVzOiBuOiAlcCwgc2l6ZTogJXUsIGNyeXB0bzogJXUuXG4iLAotCQlfX2Z1bmNfXywgbiwgc2l6ZSwgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplKTsKLQotCXJldHVybiAwOwotCi1lcnJfb3V0X2NhY2hlX2Rlc3Ryb3k6Ci0Ja21lbV9jYWNoZV9kZXN0cm95KG4tPnRyYW5zX2NhY2hlKTsKLWVycl9vdXRfZXhpdDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vS2NvbmZpZwppbmRleCA1MzZlMjM4Li42MzhhZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9LY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogY29uZmlnIE9DVEVPTl9FVEhFUk5FVAogCXRyaXN0YXRlICJDYXZpdW0gTmV0d29ya3MgT2N0ZW9uIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgotCXNlbGVjdCBNSUkKKwlzZWxlY3QgUEhZTElCCisJc2VsZWN0IE1ESU9fT0NURU9OCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGJ1aWx0aW4gZXRoZXJuZXQgcG9ydHMgb24gQ2F2aXVtCiAJICBOZXR3b3JrcycgcHJvZHVjdHMgaW4gdGhlIE9jdGVvbiBmYW1pbHkuIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwppbmRleCAzMWE1OGU1Li4wNWE1Y2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwpAQCAtMjYsNyArMjYsOCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgpAQCAtMzQsODYgKzM1LDEyIEBACiAjaW5jbHVkZSAiZXRoZXJuZXQtZGVmaW5lcy5oIgogI2luY2x1ZGUgIm9jdGVvbi1ldGhlcm5ldC5oIgogI2luY2x1ZGUgImV0aGVybmV0LW1kaW8uaCIKKyNpbmNsdWRlICJldGhlcm5ldC11dGlsLmgiCiAKICNpbmNsdWRlICJjdm14LWhlbHBlci1ib2FyZC5oIgogCiAjaW5jbHVkZSAiY3ZteC1zbWl4LWRlZnMuaCIKIAotREVDTEFSRV9NVVRFWChtZGlvX3NlbSk7Ci0KLS8qKgotICogUGVyZm9ybSBhbiBNSUkgcmVhZC4gQ2FsbGVkIGJ5IHRoZSBnZW5lcmljIE1JSSByb3V0aW5lcwotICoKLSAqIEBkZXY6ICAgICAgRGV2aWNlIHRvIHBlcmZvcm0gcmVhZCBmb3IKLSAqIEBwaHlfaWQ6ICAgVGhlIE1JSSBwaHkgaWQKLSAqIEBsb2NhdGlvbjogUmVnaXN0ZXIgbG9jYXRpb24gdG8gcmVhZAotICogUmV0dXJucyBSZXN1bHQgZnJvbSB0aGUgcmVhZCBvciB6ZXJvIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCBjdm1fb2N0X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCi17Ci0JdW5pb24gY3ZteF9zbWl4X2NtZCBzbWlfY21kOwotCXVuaW9uIGN2bXhfc21peF9yZF9kYXQgc21pX3JkOwotCi0Jc21pX2NtZC51NjQgPSAwOwotCXNtaV9jbWQucy5waHlfb3AgPSAxOwotCXNtaV9jbWQucy5waHlfYWRyID0gcGh5X2lkOwotCXNtaV9jbWQucy5yZWdfYWRyID0gbG9jYXRpb247Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0NNRCgwKSwgc21pX2NtZC51NjQpOwotCi0JZG8gewotCQlpZiAoIWluX2ludGVycnVwdCgpKQotCQkJeWllbGQoKTsKLQkJc21pX3JkLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9TTUlYX1JEX0RBVCgwKSk7Ci0JfSB3aGlsZSAoc21pX3JkLnMucGVuZGluZyk7Ci0KLQlpZiAoc21pX3JkLnMudmFsKQotCQlyZXR1cm4gc21pX3JkLnMuZGF0OwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY3ZtX29jdF9tZGlvX2R1bW15X3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwKLQkJCQkgICBpbnQgbG9jYXRpb24pCi17Ci0JcmV0dXJuIDB4ZmZmZjsKLX0KLQotLyoqCi0gKiBQZXJmb3JtIGFuIE1JSSB3cml0ZS4gQ2FsbGVkIGJ5IHRoZSBnZW5lcmljIE1JSSByb3V0aW5lcwotICoKLSAqIEBkZXY6ICAgICAgRGV2aWNlIHRvIHBlcmZvcm0gd3JpdGUgZm9yCi0gKiBAcGh5X2lkOiAgIFRoZSBNSUkgcGh5IGlkCi0gKiBAbG9jYXRpb246IFJlZ2lzdGVyIGxvY2F0aW9uIHRvIHdyaXRlCi0gKiBAdmFsOiAgICAgIFZhbHVlIHRvIHdyaXRlCi0gKi8KLXN0YXRpYyB2b2lkIGN2bV9vY3RfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCi0JCQkgICAgICAgaW50IHZhbCkKLXsKLQl1bmlvbiBjdm14X3NtaXhfY21kIHNtaV9jbWQ7Ci0JdW5pb24gY3ZteF9zbWl4X3dyX2RhdCBzbWlfd3I7Ci0KLQlzbWlfd3IudTY0ID0gMDsKLQlzbWlfd3Iucy5kYXQgPSB2YWw7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX1dSX0RBVCgwKSwgc21pX3dyLnU2NCk7Ci0KLQlzbWlfY21kLnU2NCA9IDA7Ci0Jc21pX2NtZC5zLnBoeV9vcCA9IDA7Ci0Jc21pX2NtZC5zLnBoeV9hZHIgPSBwaHlfaWQ7Ci0Jc21pX2NtZC5zLnJlZ19hZHIgPSBsb2NhdGlvbjsKLQljdm14X3dyaXRlX2NzcihDVk1YX1NNSVhfQ01EKDApLCBzbWlfY21kLnU2NCk7Ci0KLQlkbyB7Ci0JCWlmICghaW5faW50ZXJydXB0KCkpCi0JCQl5aWVsZCgpOwotCQlzbWlfd3IudTY0ID0gY3ZteF9yZWFkX2NzcihDVk1YX1NNSVhfV1JfREFUKDApKTsKLQl9IHdoaWxlIChzbWlfd3Iucy5wZW5kaW5nKTsKLX0KLQotc3RhdGljIHZvaWQgY3ZtX29jdF9tZGlvX2R1bW15X3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsCi0JCQkJICAgICBpbnQgbG9jYXRpb24sIGludCB2YWwpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIGN2bV9vY3RfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewpAQCAtMTI1LDQ5ICs1MiwzNyBAQAogc3RhdGljIGludCBjdm1fb2N0X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwogCi0JZG93bigmbWRpb19zZW0pOwotCXJldCA9IG1paV9ldGh0b29sX2dzZXQoJnByaXYtPm1paV9pbmZvLCBjbWQpOwotCXVwKCZtZGlvX3NlbSk7CisJaWYgKHByaXYtPnBoeWRldikKKwkJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBjdm1fb2N0X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwogCi0JZG93bigmbWRpb19zZW0pOwotCXJldCA9IG1paV9ldGh0b29sX3NzZXQoJnByaXYtPm1paV9pbmZvLCBjbWQpOwotCXVwKCZtZGlvX3NlbSk7CisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOwogCi0JcmV0dXJuIHJldDsKKwlpZiAocHJpdi0+cGh5ZGV2KQorCQlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChwcml2LT5waHlkZXYsIGNtZCk7CisKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBjdm1fb2N0X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwogCi0JZG93bigmbWRpb19zZW0pOwotCXJldCA9IG1paV9ud2F5X3Jlc3RhcnQoJnByaXYtPm1paV9pbmZvKTsKLQl1cCgmbWRpb19zZW0pOworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiByZXQ7Ci19CisJaWYgKHByaXYtPnBoeWRldikKKwkJcmV0dXJuIHBoeV9zdGFydF9hbmVnKHByaXYtPnBoeWRldik7CiAKLXN0YXRpYyB1MzIgY3ZtX29jdF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiByZXQ7Ci0KLQlkb3duKCZtZGlvX3NlbSk7Ci0JcmV0ID0gbWlpX2xpbmtfb2soJnByaXYtPm1paV9pbmZvKTsKLQl1cCgmbWRpb19zZW0pOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHMgPSB7CkBAIC0xNzUsNyArOTAsNyBAQAogCS5nZXRfc2V0dGluZ3MgPSBjdm1fb2N0X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gY3ZtX29jdF9zZXRfc2V0dGluZ3MsCiAJLm53YXlfcmVzZXQgPSBjdm1fb2N0X253YXlfcmVzZXQsCi0JLmdldF9saW5rID0gY3ZtX29jdF9nZXRfbGluaywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKIAkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAogfTsKQEAgLTE5MSw0MSArMTA2LDc4IEBACiBpbnQgY3ZtX29jdF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7Ci0JdW5zaWduZWQgaW50IGR1cGxleF9jaGc7Ci0JaW50IHJldDsKIAotCWRvd24oJm1kaW9fc2VtKTsKLQlyZXQgPSBnZW5lcmljX21paV9pb2N0bCgmcHJpdi0+bWlpX2luZm8sIGRhdGEsIGNtZCwgJmR1cGxleF9jaGcpOwotCXVwKCZtZGlvX3NlbSk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHJldDsKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIGlmX21paShycSksIGNtZCk7CiB9CiAKK3N0YXRpYyB2b2lkIGN2bV9vY3RfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljdm14X2hlbHBlcl9saW5rX2luZm9fdCBsaW5rX2luZm87CisKKwlpZiAocHJpdi0+bGFzdF9saW5rICE9IHByaXYtPnBoeWRldi0+bGluaykgeworCQlwcml2LT5sYXN0X2xpbmsgPSBwcml2LT5waHlkZXYtPmxpbms7CisJCWxpbmtfaW5mby51NjQgPSAwOworCQlsaW5rX2luZm8ucy5saW5rX3VwID0gcHJpdi0+bGFzdF9saW5rID8gMSA6IDA7CisJCWxpbmtfaW5mby5zLmZ1bGxfZHVwbGV4ID0gcHJpdi0+cGh5ZGV2LT5kdXBsZXggPyAxIDogMDsKKwkJbGlua19pbmZvLnMuc3BlZWQgPSBwcml2LT5waHlkZXYtPnNwZWVkOworCQljdm14X2hlbHBlcl9saW5rX3NldCggcHJpdi0+cG9ydCwgbGlua19pbmZvKTsKKwkJaWYgKHByaXYtPmxhc3RfbGluaykgeworCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQkJaWYgKHByaXYtPnF1ZXVlICE9IC0xKQorCQkJCURFQlVHUFJJTlQoIiVzOiAldSBNYnBzICVzIGR1cGxleCwgIgorCQkJCQkgICAicG9ydCAlMmQsIHF1ZXVlICUyZFxuIiwKKwkJCQkJICAgZGV2LT5uYW1lLCBwcml2LT5waHlkZXYtPnNwZWVkLAorCQkJCQkgICBwcml2LT5waHlkZXYtPmR1cGxleCA/CisJCQkJCQkiRnVsbCIgOiAiSGFsZiIsCisJCQkJCSAgIHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlKTsKKwkJCWVsc2UKKwkJCQlERUJVR1BSSU5UKCIlczogJXUgTWJwcyAlcyBkdXBsZXgsICIKKwkJCQkJICAgInBvcnQgJTJkLCBQT1dcbiIsCisJCQkJCSAgIGRldi0+bmFtZSwgcHJpdi0+cGh5ZGV2LT5zcGVlZCwKKwkJCQkJICAgcHJpdi0+cGh5ZGV2LT5kdXBsZXggPworCQkJCQkJIkZ1bGwiIDogIkhhbGYiLAorCQkJCQkgICBwcml2LT5wb3J0KTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCQlERUJVR1BSSU5UKCIlczogTGluayBkb3duXG4iLCBkZXYtPm5hbWUpOworCQl9CisJfQorfQorCisKIC8qKgotICogU2V0dXAgdGhlIE1ESU8gZGV2aWNlIHN0cnVjdHVyZXMKKyAqIFNldHVwIHRoZSBQSFkKICAqCiAgKiBAZGV2OiAgICBEZXZpY2UgdG8gc2V0dXAKICAqCiAgKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICovCi1pbnQgY3ZtX29jdF9tZGlvX3NldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGN2bV9vY3RfcGh5X3NldHVwX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBwaHlfaWQgPSBjdm14X2hlbHBlcl9ib2FyZF9nZXRfbWlpX2FkZHJlc3MocHJpdi0+cG9ydCk7Ci0JaWYgKHBoeV9pZCAhPSAtMSkgewotCQlwcml2LT5taWlfaW5mby5kZXYgPSBkZXY7Ci0JCXByaXYtPm1paV9pbmZvLnBoeV9pZCA9IHBoeV9pZDsKLQkJcHJpdi0+bWlpX2luZm8ucGh5X2lkX21hc2sgPSAweGZmOwotCQlwcml2LT5taWlfaW5mby5zdXBwb3J0c19nbWlpID0gMTsKLQkJcHJpdi0+bWlpX2luZm8ucmVnX251bV9tYXNrID0gMHgxZjsKLQkJcHJpdi0+bWlpX2luZm8ubWRpb19yZWFkID0gY3ZtX29jdF9tZGlvX3JlYWQ7Ci0JCXByaXYtPm1paV9pbmZvLm1kaW9fd3JpdGUgPSBjdm1fb2N0X21kaW9fd3JpdGU7Ci0JfSBlbHNlIHsKLQkJLyogU3VwcGx5IGR1bW15IE1ESU8gcm91dGluZXMgc28gdGhlIGtlcm5lbCB3b24ndCBjcmFzaAotCQkgICBpZiB0aGUgdXNlciB0cmllcyB0byByZWFkIHRoZW0gKi8KLQkJcHJpdi0+bWlpX2luZm8ubWRpb19yZWFkID0gY3ZtX29jdF9tZGlvX2R1bW15X3JlYWQ7Ci0JCXByaXYtPm1paV9pbmZvLm1kaW9fd3JpdGUgPSBjdm1fb2N0X21kaW9fZHVtbXlfd3JpdGU7CisKKwlpbnQgcGh5X2FkZHIgPSBjdm14X2hlbHBlcl9ib2FyZF9nZXRfbWlpX2FkZHJlc3MocHJpdi0+cG9ydCk7CisJaWYgKHBoeV9hZGRyICE9IC0xKSB7CisJCWNoYXIgcGh5X2lkWzIwXTsKKworCQlzbnByaW50ZihwaHlfaWQsIHNpemVvZihwaHlfaWQpLCBQSFlfSURfRk1ULCAiMCIsIHBoeV9hZGRyKTsKKworCQlwcml2LT5waHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9pZCwgY3ZtX29jdF9hZGp1c3RfbGluaywgMCwKKwkJCQkJUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOworCisJCWlmIChJU19FUlIocHJpdi0+cGh5ZGV2KSkgeworCQkJcHJpdi0+cGh5ZGV2ID0gTlVMTDsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcml2LT5sYXN0X2xpbmsgPSAwOworCQlwaHlfc3RhcnRfYW5lZyhwcml2LT5waHlkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmgKaW5kZXggYjMzMjhhZS4uNTVkMDYxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCkBAIC00Myw0ICs0Myw0IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgY3ZtX29jdF9ldGh0b29sX29wczsKIGludCBjdm1fb2N0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotaW50IGN2bV9vY3RfbWRpb19zZXR1cF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgY3ZtX29jdF9waHlfc2V0dXBfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuYwppbmRleCA4ZmE4OGZjLi4xNjMwOGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuYwpAQCAtMjUsNyArMjUsNiBAQAogICogQ29udGFjdCBDYXZpdW0gTmV0d29ya3MgZm9yIG1vcmUgaW5mb3JtYXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtMzgsMTEyICszNyw2IEBACiAjaW5jbHVkZSAiY3ZteC1oZWxwZXIuaCIKICNpbmNsdWRlICJjdm14LXBpcC5oIgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCSAgICBpbnQgcGh5X2lkLCBpbnQgb2Zmc2V0KQotewotCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcHJpdi0+bWlpX2luZm8ubWRpb193cml0ZShkZXYsIHBoeV9pZCwgMHgxZCwgMHhjYzAwIHwgb2Zmc2V0KTsKLQlyZXR1cm4gKCh1aW50NjRfdCkgcHJpdi0+bWlpX2luZm8uCi0JCW1kaW9fcmVhZChkZXYsIHBoeV9pZCwKLQkJCSAgMHgxZSkgPDwgMTYpIHwgKHVpbnQ2NF90KSBwcml2LT5taWlfaW5mby4KLQkgICAgbWRpb19yZWFkKGRldiwgcGh5X2lkLCAweDFmKTsKLX0KLQotc3RhdGljIGludCBjdm1fb2N0X3N0YXRzX3N3aXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzdGF0aWMgY29uc3QgaW50IHBvcnRzW10gPSB7IDAsIDEsIDIsIDMsIDksIC0xIH07Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGN2bV9vY3RfZGV2aWNlWzBdOwotCWludCBpbmRleCA9IDA7Ci0KLQl3aGlsZSAocG9ydHNbaW5kZXhdICE9IC0xKSB7Ci0KLQkJLyogTGF0Y2ggcG9ydCAqLwotCQlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQlwcml2LT5taWlfaW5mby5tZGlvX3dyaXRlKGRldiwgMHgxYiwgMHgxZCwKLQkJCQkJICAweGRjMDAgfCBwb3J0c1tpbmRleF0pOwotCQlzZXFfcHJpbnRmKG0sICJcblN3aXRjaCBQb3J0ICVkXG4iLCBwb3J0c1tpbmRleF0pOwotCQlzZXFfcHJpbnRmKG0sICJJbkdvb2RPY3RldHM6ICAgJTEybGx1XHQiCi0JCQkgICAiT3V0T2N0ZXRzOiAgICAgICUxMmxsdVx0IgotCQkJICAgIjY0IE9jdGV0czogICAgICAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwKLQkJCQkJCSAgICAgMHgwMCkgfAotCQkJICAgKGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDAxKSA8PCAzMiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwKLQkJCQkJCSAgICAgMHgwRSkgfAotCQkJICAgKGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDBGKSA8PCAzMiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwOCkpOwotCi0JCXNlcV9wcmludGYobSwgIkluQmFkT2N0ZXRzOiAgICAlMTJsbHVcdCIKLQkJCSAgICJPdXRVbmljYXN0OiAgICAgJTEybGx1XHQiCi0JCQkgICAiNjUtMTI3IE9jdGV0czogICUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDAyKSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDEwKSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDA5KSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW5VbmljYXN0OiAgICAgICUxMmxsdVx0IgotCQkJICAgIk91dEJyb2FkY2FzdHM6ICAlMTJsbHVcdCIKLQkJCSAgICIxMjgtMjU1IE9jdGV0czogJTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MDQpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTMpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MEEpKTsKLQotCQlzZXFfcHJpbnRmKG0sICJJbkJyb2FkY2FzdHM6ICAgJTEybGx1XHQiCi0JCQkgICAiT3V0TXVsdGljYXN0czogICUxMmxsdVx0IgotCQkJICAgIjI1Ni01MTEgT2N0ZXRzOiAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwNiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgxMiksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwQikpOwotCi0JCXNlcV9wcmludGYobSwgIkluTXVsdGljYXN0czogICAlMTJsbHVcdCIKLQkJCSAgICJPdXRQYXVzZTogICAgICAgJTEybGx1XHQiCi0JCQkgICAiNTEyLTEwMjMgT2N0ZXRzOiUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDA3KSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDE1KSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDBDKSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW5QYXVzZTogICAgICAgICUxMmxsdVx0IgotCQkJICAgIkV4Y2Vzc2l2ZTogICAgICAlMTJsbHVcdCIKLQkJCSAgICIxMDI0LU1heCBPY3RldHM6JTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTYpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTEpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MEQpKTsKLQotCQlzZXFfcHJpbnRmKG0sICJJblVuZGVyc2l6ZTogICAgJTEybGx1XHQiCi0JCQkgICAiQ29sbGlzaW9uczogICAgICUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDE4KSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDFFKSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW5GcmFnbWVudHM6ICAgICUxMmxsdVx0IgotCQkJICAgIkRlZmVycmVkOiAgICAgICAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgxOSksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwNSkpOwotCi0JCXNlcV9wcmludGYobSwgIkluT3ZlcnNpemU6ICAgICAlMTJsbHVcdCIKLQkJCSAgICJTaW5nbGU6ICAgICAgICAgJTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MUEpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MTQpKTsKLQotCQlzZXFfcHJpbnRmKG0sICJJbkphYmJlcjogICAgICAgJTEybGx1XHQiCi0JCQkgICAiTXVsdGlwbGU6ICAgICAgICUxMmxsdVxuIiwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDFCKSwKLQkJCSAgIGN2bV9vY3Rfc3RhdHNfcmVhZF9zd2l0Y2goZGV2LCAweDFiLCAweDE3KSk7Ci0KLQkJc2VxX3ByaW50ZihtLCAiSW4gUnhFcnI6ICAgICAgICUxMmxsdVx0IgotCQkJICAgIk91dEZDU0VycjogICAgICAlMTJsbHVcbiIsCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgxQyksCi0JCQkgICBjdm1fb2N0X3N0YXRzX3JlYWRfc3dpdGNoKGRldiwgMHgxYiwgMHgwMykpOwotCi0JCXNlcV9wcmludGYobSwgIkluRkNTRXJyOiAgICAgICAlMTJsbHVcdCIKLQkJCSAgICJMYXRlOiAgICAgICAgICAgJTEybGx1XG4iLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MUQpLAotCQkJICAgY3ZtX29jdF9zdGF0c19yZWFkX3N3aXRjaChkZXYsIDB4MWIsIDB4MUYpKTsKLQkJaW5kZXgrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogVXNlciBpcyByZWFkaW5nIC9wcm9jL29jdGVvbl9ldGhlcm5ldF9zdGF0cwogICoKQEAgLTIxNSwxMSArMTA4LDYgQEAKIAkJfQogCX0KIAotCWlmIChjdm1fb2N0X2RldmljZVswXSkgewotCQlwcml2ID0gbmV0ZGV2X3ByaXYoY3ZtX29jdF9kZXZpY2VbMF0pOwotCQlpZiAocHJpdi0+aW1vZGUgPT0gQ1ZNWF9IRUxQRVJfSU5URVJGQUNFX01PREVfR01JSSkKLQkJCWN2bV9vY3Rfc3RhdHNfc3dpdGNoX3Nob3cobSwgdik7Ci0JfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKaW5kZXggZmJhYTQ2NS4uMzgyMGYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYwpAQCAtMTQ3LDMyICsxNDcsMzYgQEAKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9HTVhYX1JYWF9JTlRfUkVHKGluZGV4LCBpbnRlcmZhY2UpLAogCQkJICAgICAgIGdteHhfcnh4X2ludF9yZWcudTY0KTsKIAl9Ci0KLQlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2F1dG9jb25mKHByaXYtPnBvcnQpOwotCXByaXYtPmxpbmtfaW5mbyA9IGxpbmtfaW5mby51NjQ7CisJaWYgKHByaXYtPnBoeWRldiA9PSBOVUxMKSB7CisJCWxpbmtfaW5mbyA9IGN2bXhfaGVscGVyX2xpbmtfYXV0b2NvbmYocHJpdi0+cG9ydCk7CisJCXByaXYtPmxpbmtfaW5mbyA9IGxpbmtfaW5mby51NjQ7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdsb2JhbF9yZWdpc3Rlcl9sb2NrLCBmbGFncyk7CiAKLQkvKiBUZWxsIExpbnV4ICovCi0JaWYgKGxpbmtfaW5mby5zLmxpbmtfdXApIHsKLQotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKLQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJaWYgKHByaXYtPnF1ZXVlICE9IC0xKQotCQkJREVCVUdQUklOVAotCQkJICAgICgiJXM6ICV1IE1icHMgJXMgZHVwbGV4LCBwb3J0ICUyZCwgcXVldWUgJTJkXG4iLAotCQkJICAgICBkZXYtPm5hbWUsIGxpbmtfaW5mby5zLnNwZWVkLAotCQkJICAgICAobGlua19pbmZvLnMuZnVsbF9kdXBsZXgpID8gIkZ1bGwiIDogIkhhbGYiLAotCQkJICAgICBwcml2LT5wb3J0LCBwcml2LT5xdWV1ZSk7Ci0JCWVsc2UKLQkJCURFQlVHUFJJTlQoIiVzOiAldSBNYnBzICVzIGR1cGxleCwgcG9ydCAlMmQsIFBPV1xuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGxpbmtfaW5mby5zLnNwZWVkLAotCQkJCSAgIChsaW5rX2luZm8ucy5mdWxsX2R1cGxleCkgPyAiRnVsbCIgOiAiSGFsZiIsCi0JCQkJICAgcHJpdi0+cG9ydCk7Ci0JfSBlbHNlIHsKLQotCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJREVCVUdQUklOVCgiJXM6IExpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKKwlpZiAocHJpdi0+cGh5ZGV2ID09IE5VTEwpIHsKKwkJLyogVGVsbCBjb3JlLiAqLworCQlpZiAobGlua19pbmZvLnMubGlua191cCkgeworCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCQkJaWYgKHByaXYtPnF1ZXVlICE9IC0xKQorCQkJCURFQlVHUFJJTlQoIiVzOiAldSBNYnBzICVzIGR1cGxleCwgIgorCQkJCQkgICAicG9ydCAlMmQsIHF1ZXVlICUyZFxuIiwKKwkJCQkJICAgZGV2LT5uYW1lLCBsaW5rX2luZm8ucy5zcGVlZCwKKwkJCQkJICAgKGxpbmtfaW5mby5zLmZ1bGxfZHVwbGV4KSA/CisJCQkJCQkiRnVsbCIgOiAiSGFsZiIsCisJCQkJCSAgIHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlKTsKKwkJCWVsc2UKKwkJCQlERUJVR1BSSU5UKCIlczogJXUgTWJwcyAlcyBkdXBsZXgsICIKKwkJCQkJICAgInBvcnQgJTJkLCBQT1dcbiIsCisJCQkJCSAgIGRldi0+bmFtZSwgbGlua19pbmZvLnMuc3BlZWQsCisJCQkJCSAgIChsaW5rX2luZm8ucy5mdWxsX2R1cGxleCkgPworCQkJCQkJIkZ1bGwiIDogIkhhbGYiLAorCQkJCQkgICBwcml2LT5wb3J0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJCURFQlVHUFJJTlQoIiVzOiBMaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYwppbmRleCAyYjU0OTk2Li42MDYxZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNnbWlpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zZ21paS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljdm1fb2N0X2NvbW1vbl9pbml0KGRldik7CiAJZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChkZXYpOwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKKwlpZiAoIW9jdGVvbl9pc19zaW11bGF0aW9uKCkgJiYgcHJpdi0+cGh5ZGV2ID09IE5VTEwpCiAJCXByaXYtPnBvbGwgPSBjdm1fb2N0X3NnbWlpX3BvbGw7CiAKIAkvKiBGSVhNRTogTmVlZCBhdXRvbmVnIGxvZ2ljICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXhhdWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jCmluZGV4IDBjMmU3Y2MuLmVlM2RjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljdm1fb2N0X2NvbW1vbl9pbml0KGRldik7CiAJZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChkZXYpOwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKKwlpZiAoIW9jdGVvbl9pc19zaW11bGF0aW9uKCkgJiYgcHJpdi0+cGh5ZGV2ID09IE5VTEwpCiAJCXByaXYtPnBvbGwgPSBjdm1fb2N0X3hhdWlfcG9sbDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCmluZGV4IDQ5MmM1MDIuLjRjZmQ0YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKQEAgLTEzMiw4ICsxMzIsNiBAQAogICovCiBzdHJ1Y3QgbmV0X2RldmljZSAqY3ZtX29jdF9kZXZpY2VbVE9UQUxfTlVNQkVSX09GX1BPUlRTXTsKIAotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgbWRpb19zZW07Ci0KIC8qKgogICogUGVyaW9kaWMgdGltZXIgdGljayBmb3Igc2xvdyBtYW5hZ2VtZW50IG9wZXJhdGlvbnMKICAqCkBAIC0xNjAsMTMgKzE1OCw4IEBACiAJCWdvdG8gb3V0OwogCiAJcHJpdiA9IG5ldGRldl9wcml2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQlpZiAocHJpdi0+cG9sbCkgewotCQkvKiBza2lwIHBvbGxpbmcgaWYgd2UgZG9uJ3QgZ2V0IHRoZSBsb2NrICovCi0JCWlmICghZG93bl90cnlsb2NrKCZtZGlvX3NlbSkpIHsKLQkJCXByaXYtPnBvbGwoY3ZtX29jdF9kZXZpY2VbcG9ydF0pOwotCQkJdXAoJm1kaW9fc2VtKTsKLQkJfQotCX0KKwlpZiAocHJpdi0+cG9sbCkKKwkJcHJpdi0+cG9sbChjdm1fb2N0X2RldmljZVtwb3J0XSk7CiAKIAlxdWV1ZXNfcGVyX3BvcnQgPSBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwb3J0KTsKIAkvKiBEcmFpbiBhbnkgcGVuZGluZyBwYWNrZXRzIGluIHRoZSBmcmVlIGxpc3QgKi8KQEAgLTUyNCw3ICs1MTcsNyBAQAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZjdm1fb2N0X2V0aHRvb2xfb3BzKTsKIAotCWN2bV9vY3RfbWRpb19zZXR1cF9kZXZpY2UoZGV2KTsKKwljdm1fb2N0X3BoeV9zZXR1cF9kZXZpY2UoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMtPm5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCAmc2EpOwogCWRldi0+bmV0ZGV2X29wcy0+bmRvX2NoYW5nZV9tdHUoZGV2LCBkZXYtPm10dSk7CiAKQEAgLTU0MCw3ICs1MzMsMTAgQEAKIAogdm9pZCBjdm1fb2N0X2NvbW1vbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQkvKiBDdXJyZW50bHkgbm90aGluZyB0byBkbyAqLworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdm1fb2N0X25waV9uZXRkZXZfb3BzID0gewpAQCAtNjI3LDYgKzYyMyw4IEBACiAjZW5kaWYKIH07CiAKK2V4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOworCiAvKioKICAqIE1vZHVsZS8gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBDcmVhdGVzIHRoZSBsaW51eCBuZXR3b3JrCiAgKiBkZXZpY2VzLgpAQCAtNjQwLDYgKzYzOCw3IEBACiAJaW50IGZhdSA9IEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRTsKIAlpbnQgcW9zOwogCisJb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3koKTsKIAlwcl9ub3RpY2UoImNhdml1bS1ldGhlcm5ldCAlc1xuIiwgT0NURU9OX0VUSEVSTkVUX1ZFUlNJT04pOwogCiAJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDNhZWY5ODcuLjQwMmExNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNTAsOSArNTAsOSBAQAogCS8qIExpc3Qgb2Ygb3V0c3RhbmRpbmcgdHggYnVmZmVycyBwZXIgcXVldWUgKi8KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X2ZyZWVfbGlzdFsxNl07CiAJLyogRGV2aWNlIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0cwotOwkvKiBHZW5lcmljIE1JSSBpbmZvIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaW5mbzsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCXVuc2lnbmVkIGludCBsYXN0X2xpbms7CiAJLyogTGFzdCBuZWdvdGlhdGVkIGxpbmsgc3RhdGUgKi8KIAl1aW50NjRfdCBsaW5rX2luZm87CiAJLyogQ2FsbGVkIHBlcmlvZGljYWxseSB0byBjaGVjayBsaW5rIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwppbmRleCAzYWJlN2M5Li4zZGVmYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZwpAQCAtNDcsNyArNDcsNyBAQAogY29uZmlnIFBBTkVMX0tFWVBBRAogCWRlcGVuZHMgb24gUEFORUwgJiYgUEFORUxfUFJPRklMRT0iMCIKIAlpbnQgIktleXBhZCB0eXBlICgwPW5vbmUsIDE9b2xkIDYga2V5cywgMj1uZXcgNiBrZXlzLCAzPU5leGNvbSA0IGtleXMpIgotCXJhbmdlIDAgNAorCXJhbmdlIDAgMwogCWRlZmF1bHQgMAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBhbmQgY29uZmlndXJlcyBhIGtleXBhZCBjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGY5OGE1MjQuLjk1YzkzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogI2lmZGVmIENPTkZJR19QQU5FTF9MQ0RfQ0hBUlNFVAogI3VuZGVmIERFRkFVTFRfTENEX0NIQVJTRVQKLSNkZWZpbmUgREVGQVVMVF9MQ0RfQ0hBUlNFVAorI2RlZmluZSBERUZBVUxUX0xDRF9DSEFSU0VUIENPTkZJR19QQU5FTF9MQ0RfQ0hBUlNFVAogI2VuZGlmCiAKICNlbmRpZiAvKiBERUZBVUxUX1BST0ZJTEUgPT0gMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2Rpci5jCmluZGV4IDZjNWIyNjEuLmFhY2QyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMKQEAgLTcyMiw4ICs3MjIsNiBAQAogCQlpZiAoaW5vZGUtPmlfbmxpbmspCiAJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJfQotCWRwcmludGsoIiVzOiBpbm9kZTogJXAsIGxvY2s6ICVsZCwgdW5oYXNoZWQ6ICVkLlxuIiwKLQkJX19mdW5jX18sIHBpLCBpbm9kZS0+aV9zdGF0ZSAmIElfTE9DSywgaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCmluZGV4IGJhYzQwZDYuLjhkNjRlMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9UT0RPCkBAIC0xLDYgKzEsNSBAQAogVE9ETzoKIAktIEFkZCBzdXBwb3J0IGZvciBzd2FwIG5vdGlmaWVycwotCS0gUmVtb3ZlIENPTkZJR19BUk0gaGFjawogCiBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAogTml0aW4gR3VwdGEgPG5ndXB0YUB2ZmxhcmUub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCmluZGV4IGI4MzlmMDUuLjk4OWZhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKQEAgLTIyMiwyOCArMjIyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCByYW16c3dhcF9mbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLSNpZmRlZiBDT05GSUdfQVJNCi0JaW50IGZsYWcgPSAwOwotCS8qCi0JICogVWdseSBoYWNrIHRvIGdldCBmbHVzaF9kY2FjaGVfcGFnZSgpIHdvcmsgb24gQVJNLgotCSAqIHBhZ2VfbWFwcGluZyhwYWdlKSA9PSBOVUxMIGFmdGVyIGNsZWFyaW5nIHRoaXMgc3dhcCBjYWNoZSBmbGFnLgotCSAqIFdpdGhvdXQgY2xlYXJpbmcgdGhpcyBmbGFnLCBmbHVzaF9kY2FjaGVfcGFnZSgpIHdpbGwgc2ltcGx5IHNldAotCSAqICJQR19kY2FjaGVfZGlydHkiIGJpdCBhbmQgcmV0dXJuLgotCSAqLwotCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKSB7Ci0JCWZsYWcgPSAxOwotCQlDbGVhclBhZ2VTd2FwQ2FjaGUocGFnZSk7Ci0JfQotI2VuZGlmCi0JZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0jaWZkZWYgQ09ORklHX0FSTQotCWlmIChmbGFnKQotCQlTZXRQYWdlU3dhcENhY2hlKHBhZ2UpOwotI2VuZGlmCi19Ci0KIHZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAogCQkJc3RydWN0IHJhbXpzd2FwX2lvY3RsX3N0YXRzICpzKQogewpAQCAtNjU1LDcgKzYzMyw3IEBACiAJbWVtc2V0KHVzZXJfbWVtLCAwLCBQQUdFX1NJWkUpOwogCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKQEAgLTY3OSw3ICs2NTcsNyBAQAogCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKIAlrdW5tYXBfYXRvbWljKGNtZW0sIEtNX1VTRVIxKTsKIAotCXJhbXpzd2FwX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCiAJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAliaW9fZW5kaW8oYmlvLCAwKTsKQEAgLTc3OSw3ICs3NTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyYW16c3dhcF9mbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAogCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CiAJYmlvX2VuZGlvKGJpbywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDMyMjJjMjIuLjBkNDkwYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0xMzE4LDEzICsxMzE4LDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKmZyYWcsCiAJaW50IGhkcl9sZW4pOwogCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV90eGJfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKTsKIAogCiAvKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIGludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IGllZWU4MDIxMV9ydGxfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cyk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLApAQCAtMTM3Niw4ICsxMzc2LDggQEAKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfZ2V0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogZXh0ZXJuIHZvaWQgbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9wc190eF9hY2soc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHNob3J0IHN1Y2Nlc3MpOwogZXh0ZXJuIHZvaWQgU2VuZERpc2Fzc29jaWF0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLHU4KiBhc1N0YSx1OCBhc1Jzbik7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogCiAvL0FkZCBmb3IgUkYgcG93ZXIgb24gcG93ZXIgb2ZmIGJ5IGxpemhhb21pbmcgMDgwNTEyCiBleHRlcm4gdm9pZCBTZW5kRGlzYXNzb2NpYXRpb24oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGY4ODJkZDguLjkxMjhjMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC00NjksNyArNDY5LDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDFmZTE5YzMuLmM3YzY0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNjg5LDcgKzY4OSw3IEBACiB9CiAKIC8qIGNhbGxlZCB3aXRoIGllZWUtPmxvY2sgaGVsZCAqLwotdm9pZCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWlmKElTX0RPVDExRF9FTkFCTEUoaWVlZSkgKQogCXsKQEAgLTExOTYsNyArMTE5Niw3IEBACiAJfQogfQogCi12b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQordm9pZCBpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCiB7CiAJdTggKmM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE4OTgsNyArMTg5OCw3IEBACiAKIAkJCQkJCQkJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMihpZWVlKTsKIAkJCQkJCQl9ZWxzZXsKLQkJCQkJCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOworCQkJCQkJCQlpZWVlODAyMTFfcnRsX2F1dGhfY2hhbGxlbmdlKGllZWUsIGNoYWxsZW5nZSwgY2hsZW4pOwogCQkJCQkJCX0KIAkJCQkJCX1lbHNlewogCQkJCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9yc19lcnIrKzsKQEAgLTIwNDcsNyArMjA0Nyw3IEBACiAKIH0KIAotdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwODksNyArMjA4OSw3IEBACiB9CiAKIAotdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLGZsYWdzKTsKQEAgLTIzMDEsNyArMjMwMSw3IEBACiAvLyNlbHNlCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogLy8jZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CkBAIC0yMzU3LDcgKzIzNTcsNyBAQAogCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5iZWlucmV0cnkgPSBmYWxzZTsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAkvL1lKLGFkZCwwODA4MjgsIG5vdGlmeSBvcyBoZXJlCiAJaWYoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggZGRlMWYyZS4uNjliZDAyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTMwNCw3ICszMDQsNyBAQAogfQogCiAvKiBTS0JzIGFyZSBhZGRlZCB0byB0aGUgaWVlZS0+dHhfcXVldWUuICovCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCmluZGV4IDU3YzYyYjAuLmUwZjEzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCkBAIC0xODExLDcgKzE4MTEsNyBAQAogCQkJaWYocHJpdi0+cnhfc2tiLT5sZW4gPiA0KQogCQkJCXNrYl90cmltKHByaXYtPnJ4X3NrYixwcml2LT5yeF9za2ItPmxlbi00KTsKICNpZm5kZWYgUlhfRE9OVF9QQVNTX1VMCi0JCQlpZighaWVlZTgwMjExX3J4KHByaXYtPmllZWU4MDIxMSwKKwkJCWlmKCFpZWVlODAyMTFfcnRsX3J4KHByaXYtPmllZWU4MDIxMSwKIAkJCQkJIHByaXYtPnJ4X3NrYiwgJnN0YXRzKSl7CiAjZW5kaWYgLy8gUlhfRE9OVF9QQVNTX1VMCiAKQEAgLTE5MTcsMTEgKzE5MTcsMTEgQEAKIAlpZiAoIWNoZWNrX25pY19lbm91Z2h0X2Rlc2MoZGV2LCBwcmlvcml0eSkpewogCQlETUVTR1coIkVycm9yOiBubyBkZXNjcmlwdG9yIGxlZnQgYnkgcHJldmlvdXMgVFggKGF2YWlsICVkKSAiLAogCQkJZ2V0X2N1cnJfdHhfZnJlZV9kZXNjKGRldiwgcHJpb3JpdHkpKTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiAJfQogCXJ0bDgxODBfdHgoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBwcmlvcml0eSwgbW9yZWZyYWcsMCxyYXRlKTsKIAlpZiAoIWNoZWNrX25pY19lbm91Z2h0X2Rlc2MoZGV2LCBwcmlvcml0eSkpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiB9CkBAIC0zNjgwLDcgKzM2ODAsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcjgxODBfc2V0X21hY19hZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3J0bF94bWl0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcnRsODE4MF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0zOTAwLDcgKzM5MDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJaWYoZW5vdWdoX2Rlc2MpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CisJCWllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOwogfQogCiB2b2lkIHJ0bDgxODBfdHhfaXNyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmksc2hvcnQgZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKaW5kZXggNTM2Y2I2ZS4uMTI0Y2RlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJLy8JcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAmcHJpdi0+aWVlZTgwMjExLT53eF9zeW5jX3NjYW5fd3EpOwogCQkvL3ByaW50aygic3RhcnQgc2Nhbj09PT09PT09PT09PT09PT09PT09PT09PT09PT0+XG4iKTsKIAkJaWVlZTgwMjExX3NvZnRtYWNfaXBzX3NjYW5fc3luY3JvKHByaXYtPmllZWU4MDIxMSk7Ci0vL2llZWU4MDIxMV9zdGFydF9zY2FuKHByaXYtPmllZWU4MDIxMSk7CisvL2llZWU4MDIxMV9ydGxfc3RhcnRfc2Nhbihwcml2LT5pZWVlODAyMTEpOwogCQkvKiBpbnRlbnRpb25hbGx5IGZvcmdldCB0byB1cCBzZW0gKi8KIC8vCQkJdXAoJnByaXYtPmllZWU4MDIxMS0+d3hfc2VtKTsKIAkJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmgKaW5kZXggOTcxMzdkZC4uM2JhOWU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaApAQCAtMzAzLDggKzMwMyw4IEBACiAjZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCiAKICNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWVfcnNsCisjZGVmaW5lIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZQkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKQEAgLTI0MzUsMTMgKzI0MzUsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0yNTAyLDggKzI1MDIsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDgzYzg0NTIuLmFhNzYzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMzMzLDggKzMzMyw4IEBACiAjZGVmaW5lIGllZWU4MDIxMV9yeF9tZ3QJCWllZWU4MDIxMV9yeF9tZ3RfcnNsCiAKICNkZWZpbmUgaWVlZTgwMjExX2dldF9iZWFjb24JCWllZWU4MDIxMV9nZXRfYmVhY29uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2FrZV9xdWV1ZQkJaWVlZTgwMjExX3dha2VfcXVldWVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlCQlpZWVlODAyMTFfc3RvcF9xdWV1ZV9yc2wKKyNkZWZpbmUgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWVfcnNsCisjZGVmaW5lIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZQkJaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlX3JzbAogI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKICNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAogI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKQEAgLTI1NDYsMTMgKzI1NDYsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKIAlpbnQgaGRyX2xlbik7CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0yNjEzLDggKzI2MTMsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMjY0NDE1NS4uZjQzYTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCWllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7CiAjZW5kaWYKICNpZiAwCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfeG1pdDsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9ydGxfeG1pdDsKICNlbmRpZgogCiAJbWVtc2V0KGllZWUsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSkrc2l6ZW9mX3ByaXYpOwpAQCAtMzMzLDcgKzMzMyw3IEBACiBleHRlcm4gaW50IGllZWU4MDIxMV9jcnlwdG9fd2VwX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfY3J5cHRvX3dlcF9leGl0KHZvaWQpOwogCi1pbnQgX19pbml0IGllZWU4MDIxMV9pbml0KHZvaWQpCitpbnQgX19pbml0IGllZWU4MDIxMV9ydGxfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAlpbnQgcmV0dmFsOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCit2b2lkIF9fZXhpdCBpZWVlODAyMTFfcnRsX2V4aXQodm9pZCkKIHsKIAlpZiAoaWVlZTgwMjExX3Byb2MpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgaWVlZTgwMjExX3Byb2MpOwpAQCAtNDEyLDggKzQxMiw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKIAogCi0vL21vZHVsZV9leGl0KGllZWU4MDIxMV9leGl0KTsKLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX2luaXQpOworLy9tb2R1bGVfZXhpdChpZWVlODAyMTFfcnRsX2V4aXQpOworLy9tb2R1bGVfaW5pdChpZWVlODAyMTFfcnRsX2luaXQpOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggNWRjNDc4Yi4uMDZkOTE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC05MjMsNyArOTIzLDcgQEAKIC8qIEFsbCByZWNlaXZlZCBmcmFtZXMgYXJlIHNlbnQgdG8gdGhpcyBmdW5jdGlvbi4gQHNrYiBjb250YWlucyB0aGUgZnJhbWUgaW4KICAqIElFRUUgODAyLjExIGZvcm1hdCwgaS5lLiwgaW4gdGhlIGZvcm1hdCBpdCB3YXMgc2VudCBvdmVyIGFpci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiAqLwotaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBpZWVlODAyMTFfcnRsX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA1OTNkMjI4Li42ZDFkZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC02ODQsNyArNjg0LDcgQEAKIH0KIAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBoZWxkICovCi12b2lkIGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAjaWZkZWYgRU5BQkxFX0RPVDExRAogCWlmKElTX0RPVDExRF9FTkFCTEUoaWVlZSkgKQpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAl9CiB9CiAKLXZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqY2hhbGxlbmdlLCBpbnQgY2hsZW4pCit2b2lkIGllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKIHsKIAl1OCAqYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjI2Miw3ICsyMjYyLDcgQEAKIAogCQkJCQkJCQlpZWVlODAyMTFfYXNzb2NpYXRlX3N0ZXAyKGllZWUpOwogCQkJCQkJCX1lbHNlewotCQkJCQkJCQlpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CisJCQkJCQkJCWllZWU4MDIxMV9ydGxfYXV0aF9jaGFsbGVuZ2UoaWVlZSwgY2hhbGxlbmdlLCBjaGxlbik7CiAJCQkJCQkJfQogCQkJCQkJfWVsc2V7CiAJCQkJCQkJaWVlZS0+c29mdG1hY19zdGF0cy5yeF9hdXRoX3JzX2VycisrOwpAQCAtMjM3Niw3ICsyMzc2LDcgQEAKIAkJCSAqIHRvIGNoZWNrIGl0IGFueSBtb3JlLgogCQkJICogKi8KIAkJCS8vcHJpbnRrKCJlcnJvcjpubyBkZXNjcmlwdG9yIGxlZnRAcXVldWVfaW5kZXggJWRcbiIsIHF1ZXVlX2luZGV4KTsKLQkJCS8vaWVlZTgwMjExX3N0b3BfcXVldWUoaWVlZSk7CisJCQkvL2llZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShpZWVlKTsKICNpZmRlZiBVU0JfVFhfRFJJVkVSX0FHR1JFR0FUSU9OX0VOQUJMRQogCQkJc2tiX3F1ZXVlX3RhaWwoJmllZWUtPnNrYl9kcnZfYWdnUVtxdWV1ZV9pbmRleF0sIHR4Yi0+ZnJhZ21lbnRzW2ldKTsKICNlbHNlCkBAIC0yNDQwLDcgKzI0NDAsNyBAQAogCiB9CiAKLXZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNDgxLDcgKzI0ODEsNyBAQAogfQogCiAKLXZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLy9zcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jayxmbGFncyk7CkBAIC0yNzA2LDcgKzI3MDYsNyBAQAogCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspewogCQlpZWVlLT5hY3RzY2FubmluZyA9IHRydWU7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKGllZWUpOworCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTI3NzUsNyArMjc3NSw3IEBACiAJewogCQlpZWVlLT5pc19yb2FtaW5nPSBmYWxzZTsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKQEAgLTM0OTcsOCArMzQ5Nyw4IEBACiAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfYmVhY29uKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd2FrZV9xdWV1ZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfcXVldWUpOworLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZSk7CisvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKIC8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVzZXRfcXVldWUpOwogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wpOwogLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKQEAgLTM1MTgsOCArMzUxOCw4IEBACiAvL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKTsKICNlbHNlCiBFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfZ2V0X2JlYWNvbik7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd2FrZV9xdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RvcF9xdWV1ZSk7CitFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcnRsX3dha2VfcXVldWUpOworRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9yZXNldF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCmluZGV4IDEwM2IzM2MuLjc5OGZiNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJfQogfQogCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA0ZTM0YTFmLi4zNDQxYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTk3Niw3ICs5NzYsNyBAQAogCXsKIAkJaWYgKGxlbiAhPSBpZVsxXSsyKQogCQl7Ci0JCQlwcmludGsoImxlbjolZCwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOworCQkJcHJpbnRrKCJsZW46JXp1LCBpZTolZFxuIiwgbGVuLCBpZVsxXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKaW5kZXggOThiM2JiNi4uZTQxZThhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDgxLDcgKzQ4MSw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSkpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyc3AgPSAoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKilza2ItPmRhdGE7CkBAIC02MTEsNyArNjExLDcgQEAKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikKIAl7Ci0JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBERUxCQSglZCAvICVkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiIEludmFsaWQgc2tiIGxlbiBpbiBERUxCQSglZCAvICV6dSlcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IGZmOGZlN2UuLjBjYTVkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC01Nzk1LDcgKzU3OTUsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRzLmZyYWdvZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIHN0YXRzLm50b3RhbGZyYWcgPSAxOwogCi0gICAgICAgICAgICAgICAgaWYoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlODAyMTEsIHNrYiwgJnN0YXRzKSl7CisgICAgICAgICAgICAgICAgaWYoIWllZWU4MDIxMV9ydGxfcngocHJpdi0+aWVlZTgwMjExLCBza2IsICZzdGF0cykpewogICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHByaXYtPnN0YXRzLnJ4b2srKzsKQEAgLTU4MzcsNyArNTgzNyw3IEBACiAJLm5kb19kb19pb2N0bCA9CQkJcnRsODE5Ml9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9CXI4MTkyX3NldF9tdWx0aWNhc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPQkJcjgxOTJfc2V0X21hY19hZHIsCi0JLm5kb19zdGFydF94bWl0ID0gCQlpZWVlODAyMTFfeG1pdCwKKwkubmRvX3N0YXJ0X3htaXQgPSAJCWllZWU4MDIxMV9ydGxfeG1pdCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MTIxLDE0ICs2MTIxLDE0IEBACiAJUlRfVFJBQ0UoQ09NUF9ET1dOLCAid2xhbiBkcml2ZXIgcmVtb3ZlZFxuIik7CiB9CiAKLWV4dGVybiBpbnQgaWVlZTgwMjExX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfZXhpdCh2b2lkKTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF9leGl0KHZvaWQpOwogCiBzdGF0aWMgaW50IF9faW5pdCBydGw4MTkyX3BjaV9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBpZWVlODAyMTFfaW5pdCgpOworCXJldHZhbCA9IGllZWU4MDIxMV9ydGxfaW5pdCgpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTYxNTMsNyArNjE1Myw3IEBACiAKIAlSVF9UUkFDRShDT01QX0RPV04sICJFeGl0aW5nIik7CiAJcnRsODE5Ml9wcm9jX21vZHVsZV9yZW1vdmUoKTsKLQlpZWVlODAyMTFfZXhpdCgpOworCWllZWU4MDIxMV9ydGxfZXhpdCgpOwogfQogCiAvL3dhcm5pbmcgbWVzc2FnZSBXQgpAQCAtNjMxMyw3ICs2MzEzLDcgQEAKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKIAlpZihlbm91Z2hfZGVzYykKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKKwkJaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHByaXYtPmllZWU4MDIxMSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBmMjJkMDI0Li45YTRjODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMTcyMSwxMyArMTcyMSwxMyBAQAogCXN0cnVjdCBza19idWZmICpmcmFnLAogCWludCBoZHJfbGVuKTsKIAotZXh0ZXJuIGludCBydGw4MTkyX2llZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50IHJ0bDgxOTJfaWVlZTgwMjExX3J0bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwogCiAKIC8qIGllZWU4MDIxMV9yeC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9tZ3Qoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCkBAIC0xNzgzLDggKzE3ODMsOCBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3dha2VfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggYWMyMjNjZS4uZmVjZmExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogICoKICAqIFJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBtYW5hZ2VtZW50IGNvbnRyb2wgZnJhbWVzCiAgKgotICogQ2FsbGVkIGJ5IGllZWU4MDIxMV9yeCAqLworICogQ2FsbGVkIGJ5IGllZWU4MDIxMV9ydGxfcnggKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBpZWVlODAyMTFfcnhfZnJhbWVfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzLCB1MTYgdHlwZSwKQEAgLTI4OSw3ICsyODksNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9yeCAqLworLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBpZWVlODAyMTFfcnRsX3J4ICovCiBzdGF0aWMgaW5saW5lIGludAogaWVlZTgwMjExX3J4X2ZyYW1lX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQpAQCAtODU4LDcgKzg1OCw3IEBACiAvKiBBbGwgcmVjZWl2ZWQgZnJhbWVzIGFyZSBzZW50IHRvIHRoaXMgZnVuY3Rpb24uIEBza2IgY29udGFpbnMgdGhlIGZyYW1lIGluCiAgKiBJRUVFIDgwMi4xMSBmb3JtYXQsIGkuZS4sIGluIHRoZSBmb3JtYXQgaXQgd2FzIHNlbnQgb3ZlciBhaXIuCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKS4gKi8KLWludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCitpbnQgaWVlZTgwMjExX3J0bF9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCAyMDNjMGE1Li45NWQ0Zjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogfQogCiAvKiBjYWxsZWQgd2l0aCBpZWVlLT5sb2NrIGhlbGQgKi8KLXZvaWQgaWVlZTgwMjExX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKIAlpZihJU19ET1QxMURfRU5BQkxFKGllZWUpICkKIAl7CkBAIC0xMjgxLDcgKzEyODEsNyBAQAogCX0KIH0KIAotdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGxlbikKK3ZvaWQgaWVlZTgwMjExX3J0bF9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmNoYWxsZW5nZSwgaW50IGNobGVuKQogewogCXU4ICpjOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yMDU0LDcgKzIwNTQsNyBAQAogCiAJCQkJCQkJCWllZWU4MDIxMV9hc3NvY2lhdGVfc3RlcDIoaWVlZSk7CiAJCQkJCQkJfWVsc2V7Ci0JCQkJCQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShpZWVlLCBjaGFsbGVuZ2UsIGNobGVuKTsKKwkJCQkJCQkJaWVlZTgwMjExX3J0bF9hdXRoX2NoYWxsZW5nZShpZWVlLCBjaGFsbGVuZ2UsIGNobGVuKTsKIAkJCQkJCQl9CiAJCQkJCQl9ZWxzZXsKIAkJCQkJCQlpZWVlLT5zb2Z0bWFjX3N0YXRzLnJ4X2F1dGhfcnNfZXJyKys7CkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCQkJICogdG8gY2hlY2sgaXQgYW55IG1vcmUuCiAJCQkgKiAqLwogCQkJLy9wcmludGsoImVycm9yOm5vIGRlc2NyaXB0b3IgbGVmdEBxdWV1ZV9pbmRleCAlZCwgJWQsICVkXG4iLCBxdWV1ZV9pbmRleCwgc2tiX3F1ZXVlX2xlbigmaWVlZS0+c2tiX3dhaXRRW3F1ZXVlX2luZGV4XSksIGllZWUtPmNoZWNrX25pY19lbm91Z2hfZGVzYyhpZWVlLT5kZXYscXVldWVfaW5kZXgpKTsKLQkJCS8vaWVlZTgwMjExX3N0b3BfcXVldWUoaWVlZSk7CisJCQkvL2llZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShpZWVlKTsKIAkJCXNrYl9xdWV1ZV90YWlsKCZpZWVlLT5za2Jfd2FpdFFbcXVldWVfaW5kZXhdLCB0eGItPmZyYWdtZW50c1tpXSk7CiAJCX1lbHNlewogCQkJaWVlZS0+c29mdG1hY19kYXRhX2hhcmRfc3RhcnRfeG1pdCgKQEAgLTIyMjIsNyArMjIyMiw3IEBACiAKIH0KIAotdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIyNjMsNyArMjI2Myw3IEBACiB9CiAKIAotdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLGZsYWdzKTsKQEAgLTI0NzksNyArMjQ3OSw3IEBACiAKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSyl7CiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oaWVlZSk7CisJCWllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihpZWVlKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjU1Miw3ICsyNTUyLDcgQEAKIAlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKQogCXsKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwotCQlpZWVlODAyMTFfc3RhcnRfc2NhbihpZWVlKTsKKwkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggNjA2MjFkNi4uNGQ1NGUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTYwNCw3ICs2MDQsNyBAQAogCX0KIH0KIAotaW50IHJ0bDgxOTJfaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBydGw4MTkyX2llZWU4MDIxMV9ydGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYwppbmRleCA2NjI3NGQ3Li5jY2I5ZDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCkBAIC0xMjYsNiArMTI2LDggQEAKIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzMwMSl9LAogCS8qIFppbndlbGwgKi8KIAl7VVNCX0RFVklDRSgweDVhNTcsIDB4MDI5MCl9LAorCS8qIEd1aWxsZW1vdCAqLworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDMxKX0sCiAJLy85MlNVCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzIpfSwKIAl7fQpAQCAtMTUwMSw3ICsxNTAzLDcgQEAKICAgICAgICAgdXJiLT5jb250ZXh0ID0gc2tiOwogICAgICAgICBza2JfcXVldWVfdGFpbCgmcHJpdi0+cnhfcXVldWUsIHNrYik7CiAgICAgICAgIGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYoZXJyICYmIGVyciAhPSBFUEVSTSkKKwlpZihlcnIgJiYgZXJyICE9IC1FUEVSTSkKIAkJcHJpbnRrKCJjYW4gbm90IHN1Ym1pdCByeHVyYiwgZXJyIGlzICV4LFVSQiBzdGF0dXMgaXMgJXhcbiIsZXJyLHVyYi0+c3RhdHVzKTsKIH0KIApAQCAtNzE1NSw3ICs3MTU3LDcgQEAKIAkJCXVuaWNhc3RfcGFja2V0ID0gdHJ1ZTsKIAkJfQogCi0JCWlmKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZTgwMjExLHNrYiwgJnN0YXRzKSkgeworCQlpZighaWVlZTgwMjExX3J0bF9yeChwcml2LT5pZWVlODAyMTEsc2tiLCAmc3RhdHMpKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQl9IGVsc2UgewogCQkvLwlwcml2LT5zdGF0cy5yeG9rdG90YWwrKzsgIC8vWUosdGVzdCwwOTAxMDgKQEAgLTc0MjYsNyArNzQyOCw3IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSByODE5Ml9zZXRfbWFjX2FkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCi0JLm5kb19zdGFydF94bWl0CQk9IHJ0bDgxOTJfaWVlZTgwMjExX3htaXQsCisJLm5kb19zdGFydF94bWl0CQk9IHJ0bDgxOTJfaWVlZTgwMjExX3J0bF94bWl0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcnRsODE5Ml91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCkBAIC03NjE5LDcgKzc2MjEsNyBAQAogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLGZsYWdzKTsKIAogCWlmKGVub3VnaF9kZXNjKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5pZWVlODAyMTEpOworCQlpZWVlODAyMTFfcnRsX3dha2VfcXVldWUocHJpdi0+aWVlZTgwMjExKTsKIH0KIAogdm9pZCBFbmFibGVIV1NlY3VyaXR5Q29uZmlnODE5MihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggZDM5N2YxZC4uNWYxMmQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC04NDUsNyArODQ1LDcgQEAKIAl7CiAJCWlmIChsZW4gIT0gaWVbMV0rMikKIAkJewotCQkJcHJpbnRrKCJsZW46JWQsIGllOiVkXG4iLCBsZW4sIGllWzFdKTsKKwkJCXByaW50aygibGVuOiV6dSwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IDI2YWY0M2IuLjUxMmE1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQzOSw3ICs0MzksNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJWQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJXp1KVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CiAJCXJldHVybiAtMTsKIAl9CiAJcnNwID0gKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciopc2tiLT5kYXRhOwpAQCAtNTY5LDcgKzU2OSw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlZClcbiIsIHNrYi0+bGVuLCAJKHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNikpOworCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlenUpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRkYmZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAorY29uZmlnIEZCX1NNN1hYCisJdHJpc3RhdGUgIlNpbGljb24gTW90aW9uIFNNN1hYIEZyYW1lIEJ1ZmZlciBTdXBwb3J0IgorCWRlcGVuZHMgb24gRkIKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSAgRnJhbWUgQnVmZmVyIGRyaXZlciBmb3IgdGhlIFNpbGljb24gTW90aW9uIFNNN1hYIHNlcmlhbCBncmFwaGljIGNhcmQuCisKK2NvbmZpZyBGQl9TTTdYWF9BQ0NFTAorCWJvb2wgIlNpbGljb25tb3Rpb24gQWNjZWxlcmF0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEZCX1NNN1hYICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgd2lsbCBjb21waWxlIHRoZSBUcmlkZW50IGZyYW1lIGJ1ZmZlciBkZXZpY2Ugd2l0aAorCSAgYWNjZWxlcmF0aW9uIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDNjYjkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX0ZCX1NNN1hYKSArPSBzbTd4eC5vCisKK3NtN3h4LXkgOj0gc210Y2ZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2MWY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCkBAIC0wLDAgKzEsMTAgQEAKK1RPRE86CistIER1YWwgaGVhZCBzdXBwb3J0CistIHVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCistIGNoZWNrcGF0Y2gucGwgY2xlYW4KKy0gcmVmaW5lIHRoZSBjb2RlIGFuZCByZW1vdmUgdW51c2VkIGNvZGUKKy0gdXNlIGtlcm5lbCBmcmFtZWJ1ZmZlciBtb2RlIHNldHRpbmcgaW5zdGVhZCBvZiBoYXJkIGNvZGUKKy0gbW92ZSBpdCB0byBkcml2ZXJzL3ZpZGVvL3NtN3h4LyBvciBtYWtlIGl0IGJlIGRyaXZlcnMvdmlkZW8vc203eHhmYi5jCisKK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAorVGVkZHkgV2FuZyA8dGVkZHkud2FuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzYjg2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYwpAQCAtMCwwICsxLDk3OSBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNN1hYIDJEIGRyYXdpbmcgZW5naW5lIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yOiBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKgorICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogVmVyc2lvbiAwLjEwLjI2MTkyLjIxLjAxCisgKiAJLSBBZGQgUG93ZXJQQyBzdXBwb3J0CisgKiAJLSBBZGQgMkQgc3VwcG9ydCBmb3IgTHlueCAtCisgKiBWZXJpZmllZCBvbiAyLjYuMTkuMgorICogCUJveW9kLnlhbmcgIDxib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgorICovCisKK3Vuc2lnbmVkIGNoYXIgc210Y19kZV9idXN5OworCit2b2lkIFNNVENfd3JpdGUyRHJlZyh1bnNpZ25lZCBsb25nIG5PZmZzZXQsIHVuc2lnbmVkIGxvbmcgbkRhdGEpCit7CisJd3JpdGVsKG5EYXRhLCBzbXRjXzJEQmFzZUFkZHJlc3MgKyBuT2Zmc2V0KTsKK30KKwordW5zaWduZWQgbG9uZyBTTVRDX3JlYWQyRHJlZyh1bnNpZ25lZCBsb25nIG5PZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKHNtdGNfMkRCYXNlQWRkcmVzcyArIG5PZmZzZXQpOworfQorCit2b2lkIFNNVENfd3JpdGUyRGRhdGFwb3J0KHVuc2lnbmVkIGxvbmcgbk9mZnNldCwgdW5zaWduZWQgbG9uZyBuRGF0YSkKK3sKKwl3cml0ZWwobkRhdGEsIHNtdGNfMkRkYXRhcG9ydCArIG5PZmZzZXQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGRlSW5pdAorICoKKyAqIFB1cnBvc2UKKyAqICAgIERyYXdpbmcgZW5naW5lIGluaXRpYWxpemF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGRlSW5pdCh1bnNpZ25lZCBpbnQgbk1vZGVXaWR0aCwgdW5zaWduZWQgaW50IG5Nb2RlSGVpZ2h0LAorCQl1bnNpZ25lZCBpbnQgYnBwKQoreworCS8qIEdldCBjdXJyZW50IHBvd2VyIGNvbmZpZ3VyYXRpb24uICovCisJdW5zaWduZWQgY2hhciBjbG9jazsKKwljbG9jayA9IHNtdGNfc2VxcigweDIxKTsKKworCS8qIGluaXRpYWxpemUgZ2xvYmFsICdtdXRleCBsb2NrJyB2YXJpYWJsZSAqLworCXNtdGNfZGVfYnVzeSA9IDA7CisKKwkvKiBFbmFibGUgMkQgRHJhd2luZyBFbmdpbmUgKi8KKwlzbXRjX3NlcXcoMHgyMSwgY2xvY2sgJiAweEY4KTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9DTElQX1RMLAorCQkJRklFTERfVkFMVUUoMCwgREVfQ0xJUF9UTCwgVE9QLCAwKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ0xJUF9UTCwgU1RBVFVTLCBESVNBQkxFKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ0xJUF9UTCwgSU5ISUJJVCwgT1VUU0lERSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfQ0xJUF9UTCwgTEVGVCwgMCkpOworCisJaWYgKGJwcCA+PSAyNCkgeworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgbk1vZGVXaWR0aCAqIDMpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkJICBERV9QSVRDSCwKKwkJCQkJCQkJICBTT1VSQ0UsCisJCQkJCQkJCSAgbk1vZGVXaWR0aAorCQkJCQkJCQkgICogMykpOworCX0gZWxzZSB7CisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBuTW9kZVdpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgIG5Nb2RlV2lkdGgpKTsKKwl9CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkgICAgbk1vZGVXaWR0aCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICAgbk1vZGVXaWR0aCkpOworCisJc3dpdGNoIChicHApIHsKKwljYXNlIDg6CisJCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWFksCisJCQkJCSAgTk9STUFMKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJUEFUVEVSTl9ZLAorCQkJCQkJCTApIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YLAorCQkJCSAgICAwKSB8IEZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCSAgIFBJWEVMX0ZPUk1BVCwKKwkJCQkJCSAgIDgpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgIEFERFJFU1NJTkcsCisJCQkJCQkJICBYWSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQlTT1VSQ0VfSEVJR0hULCAzKSk7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQlGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWFksCisJCQkJCSAgTk9STUFMKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJUEFUVEVSTl9ZLAorCQkJCQkJCTApIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YLAorCQkJCSAgICAwKSB8IEZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgICBQSVhFTF9GT1JNQVQsCisJCQkJCQkJICAgMjQpIHwgRklFTERfU0VUKDAsCisJCQkJCQkJICAgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCQkJICAgQUREUkVTU0lORywKKwkJCQkJCQkgICBYWSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQlTT1VSQ0VfSEVJR0hULCAzKSk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJZGVmYXVsdDoKKwkJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULAorCQkJCUZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YWSwKKwkJCQkJICBOT1JNQUwpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQlERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQlQQVRURVJOX1ksCisJCQkJCQkJMCkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1gsCisJCQkJICAgIDApIHwgRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULAorCQkJCQkJCSAgIFBJWEVMX0ZPUk1BVCwKKwkJCQkJCQkgICAxNikgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgICBERV9TVFJFVENIX0ZPUk1BVCwKKwkJCQkJCQkgICBBRERSRVNTSU5HLAorCQkJCQkJCSAgIFhZKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsCisJCQkJCVNPVVJDRV9IRUlHSFQsIDMpKTsKKwkJYnJlYWs7CisJfQorCisJU01UQ193cml0ZTJEcmVnKERFX01BU0tTLAorCQkJRklFTERfVkFMVUUoMCwgREVfTUFTS1MsIEJZVEVfTUFTSywgMHhGRkZGKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9NQVNLUywgQklUX01BU0ssIDB4RkZGRikpOworCVNNVENfd3JpdGUyRHJlZyhERV9DT0xPUl9DT01QQVJFX01BU0ssCisJCQlGSUVMRF9WQUxVRSgwLCBERV9DT0xPUl9DT01QQVJFX01BU0ssIE1BU0tTLCBcCisJCQkJMHhGRkZGRkYpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfQ09MT1JfQ09NUEFSRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTE9SX0NPTVBBUkUsIENPTE9SLCAweEZGRkZGRikpOworfQorCit2b2lkIGRlVmVydGljYWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCisJCSAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkJICAgIHVuc2lnbmVkIGxvbmcgblgsCisJCSAgICB1bnNpZ25lZCBsb25nIG5ZLAorCQkgICAgdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LCB1bnNpZ25lZCBsb25nIG5Db2xvcikKK3sKKwlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKKwkJCQkgICAgZHN0X2Jhc2UpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwgZHN0X3BpdGNoKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgU09VUkNFLCBkc3RfcGl0Y2gpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsCisJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIG5YKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgblkpKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIDEpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZHN0X2hlaWdodCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwgTEVGVF9UT19SSUdIVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIE1BSk9SLCBZKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9YLCBORUdBVElWRSkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWSwgUE9TSVRJVkUpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBMQVNUX1BJWEVMLCBPRkYpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBTSE9SVF9TVFJPS0UpIHwKKwkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIDB4MEMpKTsKKworCXNtdGNfZGVfYnVzeSA9IDE7Cit9CisKK3ZvaWQgZGVIb3Jpem9udGFsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBuWCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBuWSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQoreworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLCBkc3RfcGl0Y2gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBTT1VSQ0UsIGRzdF9waXRjaCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsCisJCQkgIERJU0FCTEUpIHwgRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsCisJCQkJCQkgblgpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICBERV9ERVNUSU5BVElPTiwKKwkJCQkJCQkgICBZLAorCQkJCQkJCSAgIG5ZKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwKKwkJCSAgICBkc3Rfd2lkdGgpIHwgRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLAorCQkJCQkJICAgICBZX0VULCAxKSk7CisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSAgICBERV9DT05UUk9MLAorCQkJCQkJCSAgICBESVJFQ1RJT04sCisJCQkJCQkJICAgIFJJR0hUX1RPX0xFRlQpCisJCXwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIE1BSk9SLCBYKSB8IEZJRUxEX1NFVCgwLAorCQkJCQkJCSBERV9DT05UUk9MLAorCQkJCQkJCSBTVEVQX1gsCisJCQkJCQkJIFBPU0lUSVZFKQorCQl8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1ksCisJCQkgICAgTkVHQVRJVkUpIHwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsCisJCQkJCQkgIExBU1RfUElYRUwsCisJCQkJCQkgIE9GRikgfCBGSUVMRF9TRVQoMCwKKwkJCQkJCQkgICBERV9DT05UUk9MLAorCQkJCQkJCSAgIENPTU1BTkQsCisJCQkJCQkJICAgU0hPUlRfU1RST0tFKQorCQl8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULAorCQkJICAgIFJPUDIpIHwgRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLAorCQkJCQkJMHgwQykpOworCisJc210Y19kZV9idXN5ID0gMTsKK30KKwordm9pZCBkZUxpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJICAgIHVuc2lnbmVkIGxvbmcgblgxLAorCSAgICB1bnNpZ25lZCBsb25nIG5ZMSwKKwkgICAgdW5zaWduZWQgbG9uZyBuWDIsIHVuc2lnbmVkIGxvbmcgblkyLCB1bnNpZ25lZCBsb25nIG5Db2xvcikKK3sKKwl1bnNpZ25lZCBsb25nIG5Db21tYW5kID0KKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwgTEVGVF9UT19SSUdIVCkgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTUFKT1IsIFgpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWCwgUE9TSVRJVkUpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWSwgUE9TSVRJVkUpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIExBU1RfUElYRUwsIE9GRikgfAorCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCSAgICBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIDB4MEMpOworCXVuc2lnbmVkIGxvbmcgRGVsdGFYOworCXVuc2lnbmVkIGxvbmcgRGVsdGFZOworCisJLyogQ2FsY3VsYXRlIGRlbHRhIFggKi8KKwlpZiAoblgxIDw9IG5YMikKKwkJRGVsdGFYID0gblgyIC0gblgxOworCWVsc2UgeworCQlEZWx0YVggPSBuWDEgLSBuWDI7CisJCW5Db21tYW5kID0gRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBTVEVQX1gsIE5FR0FUSVZFKTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgZGVsdGEgWSAqLworCWlmIChuWTEgPD0gblkyKQorCQlEZWx0YVkgPSBuWTIgLSBuWTE7CisJZWxzZSB7CisJCURlbHRhWSA9IG5ZMSAtIG5ZMjsKKwkJbkNvbW1hbmQgPSBGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIFNURVBfWSwgTkVHQVRJVkUpOworCX0KKworCS8qIERldGVybWluZSB0aGUgbWFqb3IgYXhpcyAqLworCWlmIChEZWx0YVggPCBEZWx0YVkpCisJCW5Db21tYW5kID0gRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBNQUpPUiwgWSk7CisKKwkvKiBWZXJ0aWNhbCBsaW5lPyAqLworCWlmIChuWDEgPT0gblgyKQorCQlkZVZlcnRpY2FsTGluZShkc3RfYmFzZSwgZHN0X3BpdGNoLCBuWDEsIG5ZMSwgRGVsdGFZLCBuQ29sb3IpOworCisJLyogSG9yaXpvbnRhbCBsaW5lPyAqLworCWVsc2UgaWYgKG5ZMSA9PSBuWTIpCisJCWRlSG9yaXpvbnRhbExpbmUoZHN0X2Jhc2UsIGRzdF9waXRjaCwgblgxLCBuWTEsIFwKKwkJCQlEZWx0YVgsIG5Db2xvcik7CisKKwkvKiBEaWFnb25hbCBsaW5lPyAqLworCWVsc2UgaWYgKERlbHRhWCA9PSBEZWx0YVkpIHsKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQkJICAgIEFERFJFU1MsIGRzdF9iYXNlKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIDEpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgblkxKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIDEpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIERlbHRhWCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQkJCUZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgQ09NTUFORCwKKwkJCQkJICBTSE9SVF9TVFJPS0UpKTsKKwl9CisKKwkvKiBHZW5lcmljIGxpbmUgKi8KKwllbHNlIHsKKwkJdW5zaWduZWQgaW50IGsxLCBrMiwgZXQsIHc7CisJCWlmIChEZWx0YVggPCBEZWx0YVkpIHsKKwkJCWsxID0gMiAqIERlbHRhWDsKKwkJCWV0ID0gazEgLSBEZWx0YVk7CisJCQlrMiA9IGV0IC0gRGVsdGFZOworCQkJdyA9IERlbHRhWSArIDE7CisJCX0gZWxzZSB7CisJCQlrMSA9IDIgKiBEZWx0YVk7CisJCQlldCA9IGsxIC0gRGVsdGFYOworCQkJazIgPSBldCAtIERlbHRhWDsKKwkJCXcgPSBEZWx0YVggKyAxOworCQl9CisKKwkJZGVXYWl0Rm9yTm90QnVzeSgpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCQkJICAgIEFERFJFU1MsIGRzdF9iYXNlKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfUElUQ0gsCisJCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKKworCQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAorCQkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIGsxKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCBrMikpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgblgxKSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIG5ZMSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCB3KSB8CisJCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBldCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAorCQkJCUZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgQ09NTUFORCwKKwkJCQkJICBMSU5FX0RSQVcpKTsKKwl9CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCit2b2lkIGRlRmlsbFJlY3QodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwkJdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCisJCXVuc2lnbmVkIGxvbmcgZHN0X1gsCisJCXVuc2lnbmVkIGxvbmcgZHN0X1ksCisJCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAorCQl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQoreworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJaWYgKGRzdF9waXRjaCkgeworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAorCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICAgICBERV9QSVRDSCwKKwkJCQkJCQkgICAgIFNPVVJDRSwKKwkJCQkJCQkgICAgIGRzdF9waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKKwkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAorCQkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJCSAgICAgU09VUkNFLAorCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7CisJfQorCisJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCisJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBkc3RfWCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIGRzdF9ZKSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCBkc3Rfd2lkdGgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZHN0X2hlaWdodCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwgTEVGVF9UT19SSUdIVCkgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIExBU1RfUElYRUwsIE9GRikgfAorCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIFJFQ1RBTkdMRV9GSUxMKSB8CisJCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCQkJRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCAweDBDKSk7CisKKwlzbXRjX2RlX2J1c3kgPSAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGRlUm90YXRlUGF0dGVybgorICoKKyAqIFB1cnBvc2UKKyAqICAgIFJvdGF0ZSB0aGUgZ2l2ZW4gcGF0dGVybiBpZiBuZWNlc3NhcnkKKyAqCisgKiBQYXJhbWV0ZXJzCisgKiAgICBbaW5dCisgKgkgICBwUGF0dGVybiAgLSBQb2ludGVyIHRvIERFX1NVUkZBQ0Ugc3RydWN0dXJlIGNvbnRhaW5pbmcKKyAqCQkgICAgICAgcGF0dGVybiBhdHRyaWJ1dGVzCisgKgkgICBwYXR0ZXJuWCAgLSBYIHBvc2l0aW9uICgwLTcpIG9mIHBhdHRlcm4gb3JpZ2luCisgKgkgICBwYXR0ZXJuWSAgLSBZIHBvc2l0aW9uICgwLTcpIG9mIHBhdHRlcm4gb3JpZ2luCisgKgorICogICAgW291dF0KKyAqCSAgIHBhdHRlcm5fZHN0YWRkciAtIFBvaW50ZXIgdG8gcHJlLWFsbG9jYXRlZCBidWZmZXIgY29udGFpbmluZworICoJICAgcm90YXRlZCBwYXR0ZXJuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRlUm90YXRlUGF0dGVybih1bnNpZ25lZCBjaGFyICpwYXR0ZXJuX2RzdGFkZHIsCisJCSAgICAgdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3NyY19hZGRyLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF0dGVybl9CUFAsCisJCSAgICAgdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3N0cmlkZSwgaW50IHBhdHRlcm5YLCBpbnQgcGF0dGVyblkpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBwYXR0ZXJuW1BBVFRFUk5fV0lEVEggKiBQQVRURVJOX0hFSUdIVF07CisJdW5zaWduZWQgaW50IHgsIHk7CisJdW5zaWduZWQgY2hhciAqcGpQYXRCeXRlOworCisJaWYgKHBhdHRlcm5fZHN0YWRkciAhPSBOVUxMKSB7CisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQlpZiAocGF0dGVyblggfHwgcGF0dGVyblkpIHsKKwkJCS8qIFJvdGF0ZSBwYXR0ZXJuICovCisJCQlwalBhdEJ5dGUgPSAodW5zaWduZWQgY2hhciAqKXBhdHRlcm47CisKKwkJCXN3aXRjaCAocGF0dGVybl9CUFApIHsKKwkJCWNhc2UgODoKKwkJCQl7CisJCQkJCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJCQkJCXVuc2lnbmVkIGNoYXIgKnBqQnVmZmVyID0KKwkJCQkJCSAgICBwYXR0ZXJuX2RzdGFkZHIgKworCQkJCQkJICAgICgocGF0dGVyblkgKyB5KSAmIDcpICogODsKKwkJCQkJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJCQkJCQlwakJ1ZmZlclsocGF0dGVyblggKworCQkJCQkJCQkgIHgpICYgN10gPQorCQkJCQkJCSAgICBwalBhdEJ5dGVbeF07CisJCQkJCQl9CisJCQkJCQlwalBhdEJ5dGUgKz0gcGF0dGVybl9zdHJpZGU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIDE2OgorCQkJCXsKKwkJCQkJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworCQkJCQkJdW5zaWduZWQgc2hvcnQgKnBqQnVmZmVyID0KKwkJCQkJCSAgICAodW5zaWduZWQgc2hvcnQgKikKKwkJCQkJCSAgICBwYXR0ZXJuX2RzdGFkZHIgKworCQkJCQkJICAgICgocGF0dGVyblkgKyB5KSAmIDcpICogODsKKwkJCQkJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJCQkJCQlwakJ1ZmZlclsocGF0dGVyblggKworCQkJCQkJCQkgIHgpICYgN10gPQorCQkJCQkJCSAgICAoKHVuc2lnbmVkIHNob3J0ICopCisJCQkJCQkJICAgICBwalBhdEJ5dGUpW3hdOworCQkJCQkJfQorCQkJCQkJcGpQYXRCeXRlICs9IHBhdHRlcm5fc3RyaWRlOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSAzMjoKKwkJCQl7CisJCQkJCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKwkJCQkJCXVuc2lnbmVkIGxvbmcgKnBqQnVmZmVyID0KKwkJCQkJCSAgICAodW5zaWduZWQgbG9uZyAqKQorCQkJCQkJICAgIHBhdHRlcm5fZHN0YWRkciArCisJCQkJCQkgICAgKChwYXR0ZXJuWSArIHkpICYgNykgKiA4OworCQkJCQkJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworCQkJCQkJCXBqQnVmZmVyWyhwYXR0ZXJuWCArCisJCQkJCQkJCSAgeCkgJiA3XSA9CisJCQkJCQkJICAgICgodW5zaWduZWQgbG9uZyAqKQorCQkJCQkJCSAgICAgcGpQYXRCeXRlKVt4XTsKKwkJCQkJCX0KKwkJCQkJCXBqUGF0Qnl0ZSArPSBwYXR0ZXJuX3N0cmlkZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKkRvbid0IHJvdGF0ZSxqdXN0IGNvcHkgcGF0dGVybiBpbnRvIHBhdHRlcm5fZHN0YWRkciovCisJCQlmb3IgKGkgPSAwOyBpIDwgKHBhdHRlcm5fQlBQICogMik7IGkrKykgeworCQkJCSgodW5zaWduZWQgbG9uZyAqKXBhdHRlcm5fZHN0YWRkcilbaV0gPQorCQkJCSAgICBwYXR0ZXJuW2ldOworCQkJfQorCQl9CisKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZGVDb3B5CisgKgorICogUHVycG9zZQorICogICAgQ29weSBhIHJlY3Rhbmd1bGFyIGFyZWEgb2YgdGhlIHNvdXJjZSBzdXJmYWNlIHRvIGEgZGVzdGluYXRpb24gc3VyZmFjZQorICoKKyAqIFJlbWFya3MKKyAqICAgIFNvdXJjZSBiaXRtYXAgbXVzdCBoYXZlIHRoZSBzYW1lIGNvbG9yIGRlcHRoIChCUFApIGFzIHRoZSBkZXN0aW5hdGlvbgorICogICAgYml0bWFwLgorICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRlQ29weSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfQlBQLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9YLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF9ZLAorCSAgICB1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwkgICAgdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCSAgICB1bnNpZ25lZCBsb25nIHNyY19iYXNlLAorCSAgICB1bnNpZ25lZCBsb25nIHNyY19waXRjaCwKKwkgICAgdW5zaWduZWQgbG9uZyBzcmNfWCwKKwkgICAgdW5zaWduZWQgbG9uZyBzcmNfWSwgcFRyYW5zcGFyZW50IHBUcmFuc3AsIHVuc2lnbmVkIGNoYXIgblJPUDIpCit7CisJdW5zaWduZWQgbG9uZyBuRGlyZWN0aW9uID0gMDsKKwl1bnNpZ25lZCBsb25nIG5UcmFuc3BhcmVudCA9IDA7CisJLyogRGlyZWN0aW9uIG9mIFJPUDIgb3BlcmF0aW9uOgorCSAqIDEgPSBMZWZ0IHRvIFJpZ2h0LAorCSAqICgtMSkgPSBSaWdodCB0byBMZWZ0CisJICovCisJdW5zaWduZWQgbG9uZyBvcFNpZ24gPSAxOworCS8qIHhXaWR0aCBpcyBpbiBwaXhlbHMgKi8KKwl1bnNpZ25lZCBsb25nIHhXaWR0aCA9IDE5MiAvIChkc3RfQlBQIC8gOCk7CisJdW5zaWduZWQgbG9uZyBkZV9jdHJsID0gMDsKKworCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAorCQkJCSAgICBkc3RfYmFzZSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19TT1VSQ0VfQkFTRSwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19TT1VSQ0VfQkFTRSwgQUREUkVTUywKKwkJCQkgICAgc3JjX2Jhc2UpKTsKKworCWlmIChkc3RfcGl0Y2ggJiYgc3JjX3BpdGNoKSB7CisJCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKKwkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkgICAgIERFX1BJVENILAorCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkgICAgIHNyY19waXRjaCkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAorCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAorCQkJCQkJICAgICBTT1VSQ0UsCisJCQkJCQkgICAgIHNyY19waXRjaCkpOworCX0KKworCS8qIFNldCB0cmFuc3BhcmVudCBiaXRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChwVHJhbnNwICE9IE5VTEwpIHsKKwkJblRyYW5zcGFyZW50ID0KKwkJICAgIHBUcmFuc3AtPm1hdGNoIHwgcFRyYW5zcC0+c2VsZWN0IHwgcFRyYW5zcC0+Y29udHJvbDsKKworCQkvKiBTZXQgY29sb3IgY29tcGFyZSByZWdpc3RlciAqLworCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09MT1JfQ09NUEFSRSwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9DT0xPUl9DT01QQVJFLCBDT0xPUiwKKwkJCQkJICAgIHBUcmFuc3AtPmNvbG9yKSk7CisJfQorCisJLyogRGV0ZXJtaW5lIGRpcmVjdGlvbiBvZiBvcGVyYXRpb24gKi8KKwlpZiAoc3JjX1kgPCBkc3RfWSkgeworCQkvKiArLS0tLS0tLS0tLSsKKwkJICAgfFMgICAgICAgICB8CisJCSAgIHwgICAgICAgICAgKy0tLS0tLS0tLS0rCisJCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8CisJCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8CisJCSAgICstLS18LS0tLS0tKyAgICAgIHwKKwkJICAgfCAgICAgICAgICAgICAgIEQgfAorCQkgICArLS0tLS0tLS0tLSsgKi8KKworCQluRGlyZWN0aW9uID0gQk9UVE9NX1RPX1RPUDsKKwl9IGVsc2UgaWYgKHNyY19ZID4gZHN0X1kpIHsKKwkJLyogKy0tLS0tLS0tLS0rCisJCSAgIHxEICAgICAgICAgfAorCQkgICB8ICAgICAgICAgICstLS0tLS0tLS0tKworCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAorCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAorCQkgICArLS0tfC0tLS0tLSsgICAgICB8CisJCSAgIHwgICAgICAgICAgICAgICBTIHwKKwkJICAgKy0tLS0tLS0tLS0rICovCisKKwkJbkRpcmVjdGlvbiA9IFRPUF9UT19CT1RUT007CisJfSBlbHNlIHsKKwkJLyogc3JjX1kgPT0gZHN0X1kgKi8KKworCQlpZiAoc3JjX1ggPD0gZHN0X1gpIHsKKwkJCS8qICstLS0tLS0rLS0tKy0tLS0tLSsKKwkJCSAgIHxTICAgICB8ICAgfCAgICAgRHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgICstLS0tLS0rLS0tKy0tLS0tLSsgKi8KKworCQkJbkRpcmVjdGlvbiA9IFJJR0hUX1RPX0xFRlQ7CisJCX0gZWxzZSB7CisJCQkvKiBzcmNfWCA+IGRzdF9YICovCisKKwkJCS8qICstLS0tLS0rLS0tKy0tLS0tLSsKKwkJCSAgIHxEICAgICB8ICAgfCAgICAgU3wKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKKwkJCSAgICstLS0tLS0rLS0tKy0tLS0tLSsgKi8KKworCQkJbkRpcmVjdGlvbiA9IExFRlRfVE9fUklHSFQ7CisJCX0KKwl9CisKKwlpZiAoKG5EaXJlY3Rpb24gPT0gQk9UVE9NX1RPX1RPUCkgfHwgKG5EaXJlY3Rpb24gPT0gUklHSFRfVE9fTEVGVCkpIHsKKwkJc3JjX1ggKz0gZHN0X3dpZHRoIC0gMTsKKwkJc3JjX1kgKz0gZHN0X2hlaWdodCAtIDE7CisJCWRzdF9YICs9IGRzdF93aWR0aCAtIDE7CisJCWRzdF9ZICs9IGRzdF9oZWlnaHQgLSAxOworCQlvcFNpZ24gPSAoLTEpOworCX0KKworCWlmIChkc3RfQlBQID49IDI0KSB7CisJCXNyY19YICo9IDM7CisJCXNyY19ZICo9IDM7CisJCWRzdF9YICo9IDM7CisJCWRzdF9ZICo9IDM7CisJCWRzdF93aWR0aCAqPSAzOworCQlpZiAoKG5EaXJlY3Rpb24gPT0gQk9UVE9NX1RPX1RPUCkKKwkJICAgIHx8IChuRGlyZWN0aW9uID09IFJJR0hUX1RPX0xFRlQpKSB7CisJCQlzcmNfWCArPSAyOworCQkJZHN0X1ggKz0gMjsKKwkJfQorCX0KKworCS8qIFdvcmthcm91bmQgZm9yIDE5MiBieXRlIGh3IGJ1ZyAqLworCWlmICgoblJPUDIgIT0gMHgwQykgJiYgKChkc3Rfd2lkdGggKiAoZHN0X0JQUCAvIDgpKSA+PSAxOTIpKSB7CisJCS8qCisJCSAqIFBlcmZvcm0gdGhlIFJPUDIgb3BlcmF0aW9uIGluIGNodW5rcyBvZiAoeFdpZHRoICoKKwkJICogZHN0X2hlaWdodCkKKwkJICovCisJCXdoaWxlICgxKSB7CisJCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisKKwkJCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCisJCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgc3JjX1gpIHwKKwkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIHNyY19ZKSk7CisKKwkJCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKKwkJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsCisJCQkJICBESVNBQkxFKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJIERFX0RFU1RJTkFUSU9OLAorCQkJCQkJCSBYLAorCQkJCQkJCSBkc3RfWCkKKwkJCXwgRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksCisJCQkJCQkgICAgICBkc3RfWSkpOworCisJCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAorCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwKKwkJCQkgICAgeFdpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsCisJCQkJCQkJICBERV9ESU1FTlNJT04sCisJCQkJCQkJICBZX0VULAorCQkJCQkJCSAgZHN0X2hlaWdodCkpOworCisJCQlkZV9jdHJsID0KKwkJCSAgICBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsCisJCQkJblJPUDIpIHwgblRyYW5zcGFyZW50IHwgRklFTERfU0VUKDAsCisJCQkJCQkJICBERV9DT05UUk9MLAorCQkJCQkJCSAgUk9QX1NFTEVDVCwKKwkJCQkJCQkgIFJPUDIpCisJCQkgICAgfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwKKwkJCQlCSVRCTFQpIHwgKChuRGlyZWN0aW9uID09CisJCQkJCSAgICAxKSA/IEZJRUxEX1NFVCgwLAorCQkJCQkJICAgREVfQ09OVFJPTCwKKwkJCQkJCSAgIERJUkVDVElPTiwKKwkJCQkJCSAgIFJJR0hUX1RPX0xFRlQpCisJCQkJCSAgIDogRklFTERfU0VUKDAsIERFX0NPTlRST0wsCisJCQkJCSAgICAgICBESVJFQ1RJT04sCisJCQkJCSAgICAgICBMRUZUX1RPX1JJR0hUKSkgfAorCQkJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKTsKKworCQkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsIGRlX2N0cmwpOworCisJCQlzcmNfWCArPSAob3BTaWduICogeFdpZHRoKTsKKwkJCWRzdF9YICs9IChvcFNpZ24gKiB4V2lkdGgpOworCQkJZHN0X3dpZHRoIC09IHhXaWR0aDsKKworCQkJaWYgKGRzdF93aWR0aCA8PSAwKSB7CisJCQkJLyogUk9QMiBvcGVyYXRpb24gaXMgY29tcGxldGUgKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHhXaWR0aCA+IGRzdF93aWR0aCkKKwkJCQl4V2lkdGggPSBkc3Rfd2lkdGg7CisJCX0KKwl9IGVsc2UgeworCQlkZVdhaXRGb3JOb3RCdXN5KCk7CisJCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCisJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIHNyY19YKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIHNyY19ZKSk7CisKKwkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgZHN0X1gpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBkc3RfWSkpOworCisJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCisJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIGRzdF93aWR0aCkgfAorCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBkc3RfaGVpZ2h0KSk7CisKKwkJZGVfY3RybCA9IEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgblJPUDIpIHwKKwkJICAgIG5UcmFuc3BhcmVudCB8CisJCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAorCQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIEJJVEJMVCkgfAorCQkgICAgKChuRGlyZWN0aW9uID09IDEpID8gRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwKKwkJCQkJCSAgIFJJR0hUX1RPX0xFRlQpCisJCSAgICAgOiBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLAorCQkJCSBMRUZUX1RPX1JJR0hUKSkgfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwKKwkJCQkJCQkgICAgIFNUQVRVUywgU1RBUlQpOworCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwgZGVfY3RybCk7CisJfQorCisJc210Y19kZV9idXN5ID0gMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgZm9ybWF0IHRoYXQgd2lsbCBhcHBseSB0byB0aGUgMkQgRW5naW5lLgorICovCit2b2lkIGRlU2V0UGl4ZWxGb3JtYXQodW5zaWduZWQgbG9uZyBicHApCit7CisJdW5zaWduZWQgbG9uZyBkZV9mb3JtYXQ7CisKKwlkZV9mb3JtYXQgPSBTTVRDX3JlYWQyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCk7CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgODoKKwkJZGVfZm9ybWF0ID0KKwkJICAgIEZJRUxEX1NFVChkZV9mb3JtYXQsIERFX1NUUkVUQ0hfRk9STUFULCBQSVhFTF9GT1JNQVQsIDgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgMTY6CisJCWRlX2Zvcm1hdCA9CisJCSAgICBGSUVMRF9TRVQoZGVfZm9ybWF0LCBERV9TVFJFVENIX0ZPUk1BVCwgUElYRUxfRk9STUFULCAxNik7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRlX2Zvcm1hdCA9CisJCSAgICBGSUVMRF9TRVQoZGVfZm9ybWF0LCBERV9TVFJFVENIX0ZPUk1BVCwgUElYRUxfRk9STUFULCAzMik7CisJCWJyZWFrOworCX0KKworCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwgZGVfZm9ybWF0KTsKK30KKworLyoKKyAqIFN5c3RlbSBtZW1vcnkgdG8gVmlkZW8gbWVtb3J5IG1vbm9jaHJvbWUgZXhwYW5zaW9uLgorICoKKyAqIFNvdXJjZSBpcyBtb25vY2hyb21lIGltYWdlIGluIHN5c3RlbSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgdGhlCisgKiBtb25vY2hyb21lIGRhdGEgdG8gY29sb3IgaW1hZ2UgaW4gdmlkZW8gbWVtb3J5LgorICovCisKK2xvbmcgZGVTeXN0ZW1NZW0yVmlkZW9NZW1Nb25vQmx0KGNvbnN0IGNoYXIgKnBTcmNidWYsCisJCQkJIGxvbmcgc3JjRGVsdGEsCisJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRCaXQsCisJCQkJIHVuc2lnbmVkIGxvbmcgZEJhc2UsCisJCQkJIHVuc2lnbmVkIGxvbmcgZFBpdGNoLAorCQkJCSB1bnNpZ25lZCBsb25nIGJwcCwKKwkJCQkgdW5zaWduZWQgbG9uZyBkeCwgdW5zaWduZWQgbG9uZyBkeSwKKwkJCQkgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsCisJCQkJIHVuc2lnbmVkIGxvbmcgZkNvbG9yLAorCQkJCSB1bnNpZ25lZCBsb25nIGJDb2xvciwKKwkJCQkgdW5zaWduZWQgbG9uZyByb3AyKSB7CisJdW5zaWduZWQgbG9uZyBieXRlUGVyUGl4ZWw7CisJdW5zaWduZWQgbG9uZyB1bEJ5dGVzUGVyU2NhbjsKKwl1bnNpZ25lZCBsb25nIHVsNEJ5dGVzUGVyU2NhbjsKKwl1bnNpZ25lZCBsb25nIHVsQnl0ZXNSZW1haW47CisJdW5zaWduZWQgbG9uZyBkZV9jdHJsID0gMDsKKwl1bnNpZ25lZCBjaGFyIGFqUmVtYWluWzRdOworCWxvbmcgaSwgajsKKworCWJ5dGVQZXJQaXhlbCA9IGJwcCAvIDg7CisKKwkvKiBKdXN0IG1ha2Ugc3VyZSB0aGUgc3RhcnQgYml0IGlzIHdpdGhpbiBsZWdhbCByYW5nZSAqLworCXN0YXJ0Qml0ICY9IDc7CisKKwl1bEJ5dGVzUGVyU2NhbiA9ICh3aWR0aCArIHN0YXJ0Qml0ICsgNykgLyA4OworCXVsNEJ5dGVzUGVyU2NhbiA9IHVsQnl0ZXNQZXJTY2FuICYgfjM7CisJdWxCeXRlc1JlbWFpbiA9IHVsQnl0ZXNQZXJTY2FuICYgMzsKKworCWlmIChzbXRjX2RlX2J1c3kpCisJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCS8qCisJICogMkQgU291cmNlIEJhc2UuICBVc2UgMCBmb3IgSE9TVCBCbHQuCisJICovCisKKwlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1NPVVJDRV9CQVNFLCAwKTsKKworCS8qCisJICogMkQgRGVzdGluYXRpb24gQmFzZS4KKwkgKgorCSAqIEl0IGlzIGFuIGFkZHJlc3Mgb2Zmc2V0ICgxMjggYml0IGFsaWduZWQpIGZyb20gdGhlIGJlZ2lubmluZyBvZgorCSAqIGZyYW1lIGJ1ZmZlci4KKwkgKi8KKworCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgZEJhc2UpOworCisJaWYgKGRQaXRjaCkgeworCisJCS8qCisJCSAqIFByb2dyYW0gcGl0Y2ggKGRpc3RhbmNlIGJldHdlZW4gdGhlIDFzdCBwb2ludHMgb2YgdHdvCisJCSAqIGFkamFjZW50IGxpbmVzKS4KKwkJICoKKwkJICogTm90ZSB0aGF0IGlucHV0IHBpdGNoIGlzIEJZVEUgdmFsdWUsIGJ1dCB0aGUgMkQgUGl0Y2gKKwkJICogcmVnaXN0ZXIgdXNlcyBwaXhlbCB2YWx1ZXMuIE5lZWQgQnl0ZSB0byBwaXhlbCBjb252ZXJ0aW9uLgorCQkgKi8KKworCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCisJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCisJCQkgICAgZFBpdGNoIC8KKwkJCSAgICBieXRlUGVyUGl4ZWwpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQlERV9QSVRDSCwKKwkJCQkJCQlTT1VSQ0UsCisJCQkJCQkJZFBpdGNoIC8KKwkJCQkJCQlieXRlUGVyUGl4ZWwpKTsKKworCQkvKiBTY3JlZW4gV2luZG93IHdpZHRoIGluIFBpeGVscy4KKwkJICoKKwkJICogMkQgZW5naW5lIHVzZXMgdGhpcyB2YWx1ZSB0byBjYWxjdWxhdGUgdGhlIGxpbmVhciBhZGRyZXNzIGluCisJCSAqIGZyYW1lIGJ1ZmZlciBmb3IgYSBnaXZlbiBwb2ludC4KKwkJICovCisKKwkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCisJCQkgICAgKGRQaXRjaCAvCisJCQkgICAgIGJ5dGVQZXJQaXhlbCkpIHwgRklFTERfVkFMVUUoMCwKKwkJCQkJCQkgIERFX1dJTkRPV19XSURUSCwKKwkJCQkJCQkgIFNPVVJDRSwKKwkJCQkJCQkgIChkUGl0Y2gKKwkJCQkJCQkgICAvCisJCQkJCQkJICAgYnl0ZVBlclBpeGVsKSkpOworCX0KKwkvKiBOb3RlOiBGb3IgMkQgU291cmNlIGluIEhvc3QgV3JpdGUsIG9ubHkgWF9LMSBmaWVsZCBpcyBuZWVkZWQsIGFuZAorCSAqIFlfSzIgZmllbGQgaXMgbm90IHVzZWQuIEZvciBtb25vIGJpdG1hcCwgdXNlIHN0YXJ0Qml0IGZvciBYX0sxLgorCSAqLworCisJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKKwkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgc3RhcnRCaXQpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgMCkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAorCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8CisJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgZHgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBkeSkpOworCisJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgd2lkdGgpIHwKKwkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgaGVpZ2h0KSk7CisKKwlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwgZkNvbG9yKTsKKwlTTVRDX3dyaXRlMkRyZWcoREVfQkFDS0dST1VORCwgYkNvbG9yKTsKKworCWlmIChicHApCisJCWRlU2V0UGl4ZWxGb3JtYXQoYnBwKTsKKwkvKiBTZXQgdGhlIHBpeGVsIGZvcm1hdCBvZiB0aGUgZGVzdGluYXRpb24gKi8KKworCWRlX2N0cmwgPSBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIHJvcDIpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIEhPU1RfV1JJVEUpIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIEhPU1QsIE1PTk8pIHwKKwkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpOworCisJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsIGRlX2N0cmwgfCBkZUdldFRyYW5zcGFyZW5jeSgpKTsKKworCS8qIFdyaXRlIE1PTk8gZGF0YSAobGluZSBieSBsaW5lKSB0byAyRCBFbmdpbmUgZGF0YSBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCS8qIEZvciBlYWNoIGxpbmUsIHNlbmQgdGhlIGRhdGEgaW4gY2h1bmtzIG9mIDQgYnl0ZXMgKi8KKwkJZm9yIChqID0gMDsgaiA8ICh1bDRCeXRlc1BlclNjYW4gLyA0KTsgaisrKQorCQkJU01UQ193cml0ZTJEZGF0YXBvcnQoMCwKKwkJCQkJICAgICAqKHVuc2lnbmVkIGxvbmcgKikocFNyY2J1ZiArCisJCQkJCQkJCShqICogNCkpKTsKKworCQlpZiAodWxCeXRlc1JlbWFpbikgeworCQkJbWVtY3B5KGFqUmVtYWluLCBwU3JjYnVmICsgdWw0Qnl0ZXNQZXJTY2FuLAorCQkJICAgICAgIHVsQnl0ZXNSZW1haW4pOworCQkJU01UQ193cml0ZTJEZGF0YXBvcnQoMCwgKih1bnNpZ25lZCBsb25nICopYWpSZW1haW4pOworCQl9CisKKwkJcFNyY2J1ZiArPSBzcmNEZWx0YTsKKwl9CisJc210Y19kZV9idXN5ID0gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB0cmFuc3BhcmVuY3kgc3RhdHVzIGZyb20gREVfQ09OVFJPTCByZWdpc3Rlci4KKyAqIEl0IHJldHVybnMgYSBkb3VibGUgd29yZCB3aXRoIHRoZSB0cmFuc3BhcmVudCBmaWVsZHMgcHJvcGVybHkgc2V0LAorICogd2hpbGUgb3RoZXIgZmllbGRzIGFyZSAwLgorICovCit1bnNpZ25lZCBsb25nIGRlR2V0VHJhbnNwYXJlbmN5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkZV9jdHJsOworCisJZGVfY3RybCA9IFNNVENfcmVhZDJEcmVnKERFX0NPTlRST0wpOworCisJZGVfY3RybCAmPQorCSAgICBGSUVMRF9NQVNLKERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIKSB8CisJICAgIEZJRUxEX01BU0soREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUKSB8CisJICAgIEZJRUxEX01BU0soREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1kpOworCisJcmV0dXJuIGRlX2N0cmw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkMGMzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaApAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNNzEyIDJEIGRyYXdpbmcgZW5naW5lIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTAkgMAorI2VuZGlmCisKKy8qIEludGVybmFsIG1hY3JvcyAqLworCisjZGVmaW5lIF9GX1NUQVJUKGYpCQkoMCA/IGYpCisjZGVmaW5lIF9GX0VORChmKQkJKDEgPyBmKQorI2RlZmluZSBfRl9TSVpFKGYpCQkoMSArIF9GX0VORChmKSAtIF9GX1NUQVJUKGYpKQorI2RlZmluZSBfRl9NQVNLKGYpCQkoKCgxVUxMIDw8IF9GX1NJWkUoZikpIC0gMSkgPDwgX0ZfU1RBUlQoZikpCisjZGVmaW5lIF9GX05PUk1BTElaRSh2LCBmKQkoKCh2KSAmIF9GX01BU0soZikpID4+IF9GX1NUQVJUKGYpKQorI2RlZmluZSBfRl9ERU5PUk1BTElaRSh2LCBmKQkoKCh2KSA8PCBfRl9TVEFSVChmKSkgJiBfRl9NQVNLKGYpKQorCisvKiBHbG9iYWwgbWFjcm9zICovCisKKyNkZWZpbmUgRklFTERfR0VUKHgsIHJlZywgZmllbGQpIFwKKyggXAorICAgIF9GX05PUk1BTElaRSgoeCksIHJlZyAjIyBfICMjIGZpZWxkKSBcCispCisKKyNkZWZpbmUgRklFTERfU0VUKHgsIHJlZywgZmllbGQsIHZhbHVlKSBcCisoIFwKKyAgICAoeCAmIH5fRl9NQVNLKHJlZyAjIyBfICMjIGZpZWxkKSkgXAorICAgIHwgX0ZfREVOT1JNQUxJWkUocmVnICMjIF8gIyMgZmllbGQgIyMgXyAjIyB2YWx1ZSwgcmVnICMjIF8gIyMgZmllbGQpIFwKKykKKworI2RlZmluZSBGSUVMRF9WQUxVRSh4LCByZWcsIGZpZWxkLCB2YWx1ZSkgXAorKCBcCisgICAgKHggJiB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkpIFwKKyAgICB8IF9GX0RFTk9STUFMSVpFKHZhbHVlLCByZWcgIyMgXyAjIyBmaWVsZCkgXAorKQorCisjZGVmaW5lIEZJRUxEX0NMRUFSKHJlZywgZmllbGQpIFwKKyggXAorICAgIH5fRl9NQVNLKHJlZyAjIyBfICMjIGZpZWxkKSBcCispCisKKy8qIEZpZWxkIE1hY3JvcyAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRklFTERfU1RBUlQoZmllbGQpCSgwID8gZmllbGQpCisjZGVmaW5lIEZJRUxEX0VORChmaWVsZCkJKDEgPyBmaWVsZCkKKyNkZWZpbmUgRklFTERfU0laRShmaWVsZCkgXAorCSgxICsgRklFTERfRU5EKGZpZWxkKSAtIEZJRUxEX1NUQVJUKGZpZWxkKSkKKworI2RlZmluZSBGSUVMRF9NQVNLKGZpZWxkKSBcCisJKCgoMSA8PCAoRklFTERfU0laRShmaWVsZCktMSkpIFwKKwl8ICgoMSA8PCAoRklFTERfU0laRShmaWVsZCktMSkpIC0gMSkpIFwKKwk8PCBGSUVMRF9TVEFSVChmaWVsZCkpCisKKyNkZWZpbmUgRklFTERfTk9STUFMSVpFKHJlZywgZmllbGQpIFwKKwkoKChyZWcpICYgRklFTERfTUFTSyhmaWVsZCkpID4+IEZJRUxEX1NUQVJUKGZpZWxkKSkKKworI2RlZmluZSBGSUVMRF9ERU5PUk1BTElaRShmaWVsZCwgdmFsdWUpIFwKKwkoKCh2YWx1ZSkgPDwgRklFTERfU1RBUlQoZmllbGQpKSAmIEZJRUxEX01BU0soZmllbGQpKQorCisjZGVmaW5lIEZJRUxEX0lOSVQocmVnLCBmaWVsZCwgdmFsdWUpIFwKKwlGSUVMRF9ERU5PUk1BTElaRShyZWcgIyMgXyAjIyBmaWVsZCwgXAorCQlyZWcgIyMgXyAjIyBmaWVsZCAjIyBfICMjIHZhbHVlKQorCisjZGVmaW5lIEZJRUxEX0lOSVRfVkFMKHJlZywgZmllbGQsIHZhbHVlKSBcCisJKEZJRUxEX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkLCB2YWx1ZSkpCisKKyNkZWZpbmUgRklFTERfVkFMX1NFVCh4LCByLCBmLCB2KSAoeyBcCisJeCA9ICh4ICYgfkZJRUxEX01BU0sociAjIyBfICMjIGYpKSBcCisJfCBGSUVMRF9ERU5PUk1BTElaRShyICMjIF8gIyMgZiwgciAjIyBfICMjIGYgIyMgXyAjIyB2KSBcCit9KQorCisjZGVmaW5lIFJHQihyLCBnLCBiKQkoKHVuc2lnbmVkIGxvbmcpKCgocikgPDwgMTYpIHwgKChnKSA8PCA4KSB8IChiKSkpCisKKy8qIFRyYW5zcGFyZW50IGluZm8gZGVmaW5pdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbWF0Y2g7CS8qIE1hdGNoaW5nIHBpeGVsIGlzIE9QQVFVRS9UUkFOU1BBUkVOVCAqLworCXVuc2lnbmVkIGxvbmcgc2VsZWN0OwkvKiBUcmFuc3BhcmVuY3kgY29udHJvbGxlZCBieSBTUkMvRFNUICovCisJdW5zaWduZWQgbG9uZyBjb250cm9sOwkvKiBFTkFCTEUvRElTQUJMRSB0cmFuc3BhcmVuY3kgKi8KKwl1bnNpZ25lZCBsb25nIGNvbG9yOwkvKiBUcmFuc3BhcmVudCBjb2xvciAqLworfSBUcmFuc3BhcmVudCwgKnBUcmFuc3BhcmVudDsKKworI2RlZmluZSBQSVhFTF9ERVBUSF8xX0JQCTAJLyogMSBiaXQgcGVyIHBpeGVsICovCisjZGVmaW5lIFBJWEVMX0RFUFRIXzhfQlBQCTEJLyogOCBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF8xNl9CUFAJMgkvKiAxNiBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF8zMl9CUFAJMwkvKiAzMiBiaXRzIHBlciBwaXhlbCAqLworI2RlZmluZSBQSVhFTF9ERVBUSF9ZVVY0MjIJOAkvKiAxNiBiaXRzIHBlciBwaXhlbCBZVVY0MjIgKi8KKyNkZWZpbmUgUElYRUxfREVQVEhfWVVWNDIwCTkJLyogMTYgYml0cyBwZXIgcGl4ZWwgWVVWNDIwICovCisKKyNkZWZpbmUgUEFUVEVSTl9XSURUSAkJOAorI2RlZmluZSBQQVRURVJOX0hFSUdIVAkJOAorCisjZGVmaW5lCVRPUF9UT19CT1RUT00JCTAKKyNkZWZpbmUJQk9UVE9NX1RPX1RPUAkJMQorI2RlZmluZSBSSUdIVF9UT19MRUZUCQlCT1RUT01fVE9fVE9QCisjZGVmaW5lIExFRlRfVE9fUklHSFQJCVRPUF9UT19CT1RUT00KKworLyogQ29uc3RhbnRzIHVzZWQgaW4gVHJhbnNwYXJlbnQgc3RydWN0dXJlICovCisjZGVmaW5lIE1BVENIX09QQVFVRQkJMHgwMDAwMDAwMAorI2RlZmluZSBNQVRDSF9UUkFOU1BBUkVOVAkweDAwMDAwNDAwCisjZGVmaW5lIFNPVVJDRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgREVTVElOQVRJT04JCTB4MDAwMDAyMDAKKworLyogMkQgcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lCURFX1NPVVJDRQkJCTB4MDAwMDAwCisjZGVmaW5lCURFX1NPVVJDRV9XUkFQCQkJMzEgOiAzMQorI2RlZmluZQlERV9TT1VSQ0VfV1JBUF9ESVNBQkxFCQkwCisjZGVmaW5lCURFX1NPVVJDRV9XUkFQX0VOQUJMRQkJMQorI2RlZmluZQlERV9TT1VSQ0VfWF9LMQkJCTI5IDogMTYKKyNkZWZpbmUJREVfU09VUkNFX1lfSzIJCQkxNSA6IDAKKworI2RlZmluZQlERV9ERVNUSU5BVElPTgkJCTB4MDAwMDA0CisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1dSQVAJCTMxIDogMzEKKyNkZWZpbmUJREVfREVTVElOQVRJT05fV1JBUF9ESVNBQkxFCTAKKyNkZWZpbmUJREVfREVTVElOQVRJT05fV1JBUF9FTkFCTEUJMQorI2RlZmluZQlERV9ERVNUSU5BVElPTl9YCQkyOCA6IDE2CisjZGVmaW5lCURFX0RFU1RJTkFUSU9OX1kJCTE1IDogMAorCisjZGVmaW5lCURFX0RJTUVOU0lPTgkJCTB4MDAwMDA4CisjZGVmaW5lCURFX0RJTUVOU0lPTl9YCQkJMjggOiAxNgorI2RlZmluZQlERV9ESU1FTlNJT05fWV9FVAkJMTUgOiAwCisKKyNkZWZpbmUJREVfQ09OVFJPTAkJCTB4MDAwMDBDCisjZGVmaW5lCURFX0NPTlRST0xfU1RBVFVTCQkzMSA6IDMxCisjZGVmaW5lCURFX0NPTlRST0xfU1RBVFVTX1NUT1AJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEFUVVNfU1RBUlQJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9QQVRURVJOCQkzMCA6IDMwCisjZGVmaW5lCURFX0NPTlRST0xfUEFUVEVSTl9NT05PCQkwCisjZGVmaW5lCURFX0NPTlRST0xfUEFUVEVSTl9DT0xPUgkxCisjZGVmaW5lCURFX0NPTlRST0xfVVBEQVRFX0RFU1RJTkFUSU9OX1gJCTI5IDogMjkKKyNkZWZpbmUJREVfQ09OVFJPTF9VUERBVEVfREVTVElOQVRJT05fWF9ESVNBQkxFCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9VUERBVEVfREVTVElOQVRJT05fWF9FTkFCTEUJMQorI2RlZmluZQlERV9DT05UUk9MX1FVSUNLX1NUQVJUCQkJMjggOiAyOAorI2RlZmluZQlERV9DT05UUk9MX1FVSUNLX1NUQVJUX0RJU0FCTEUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9RVUlDS19TVEFSVF9FTkFCTEUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ESVJFQ1RJT04JCQkyNyA6IDI3CisjZGVmaW5lCURFX0NPTlRST0xfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQJMAorI2RlZmluZQlERV9DT05UUk9MX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9NQUpPUgkJCTI2IDogMjYKKyNkZWZpbmUJREVfQ09OVFJPTF9NQUpPUl9YCQkJMAorI2RlZmluZQlERV9DT05UUk9MX01BSk9SX1kJCQkxCisjZGVmaW5lCURFX0NPTlRST0xfU1RFUF9YCQkJMjUgOiAyNQorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWF9QT1NJVElWRQkJMQorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWF9ORUdBVElWRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NURVBfWQkJCTI0IDogMjQKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1lfUE9TSVRJVkUJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1lfTkVHQVRJVkUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9TVFJFVENICQkJMjMgOiAyMworI2RlZmluZQlERV9DT05UUk9MX1NUUkVUQ0hfRElTQUJMRQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NUUkVUQ0hfRU5BQkxFCQkxCisjZGVmaW5lCURFX0NPTlRST0xfSE9TVAkJCQkyMiA6IDIyCisjZGVmaW5lCURFX0NPTlRST0xfSE9TVF9DT0xPUgkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9IT1NUX01PTk8JCQkxCisjZGVmaW5lCURFX0NPTlRST0xfTEFTVF9QSVhFTAkJCTIxIDogMjEKKyNkZWZpbmUJREVfQ09OVFJPTF9MQVNUX1BJWEVMX09GRgkJMAorI2RlZmluZQlERV9DT05UUk9MX0xBU1RfUElYRUxfT04JCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5ECQkJMjAgOiAxNgorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfQklUQkxUCQkwCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9SRUNUQU5HTEVfRklMTAkxCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9ERV9USUxFCQkyCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9UUkFQRVpPSURfRklMTAkzCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9BTFBIQV9CTEVORAkJNAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfUkxFX1NUUklQCQk1CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9TSE9SVF9TVFJPS0UJCTYKKyNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0xJTkVfRFJBVwkJNworI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfSE9TVF9XUklURQkJOAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfSE9TVF9SRUFECQk5CisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9IT1NUX1dSSVRFX0JPVFRPTV9VUAkxMAorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfUk9UQVRFCQkxMQorI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfRk9OVAkJCTEyCisjZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9URVhUVVJFX0xPQUQJCTE1CisjZGVmaW5lCURFX0NPTlRST0xfUk9QX1NFTEVDVAkJCTE1IDogMTUKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1BfU0VMRUNUX1JPUDMJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1BfU0VMRUNUX1JPUDIJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AyX1NPVVJDRQkJCTE0IDogMTQKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AyX1NPVVJDRV9CSVRNQVAJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AyX1NPVVJDRV9QQVRURVJOCQkxCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBCQkJMTMgOiAxMgorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV9OT1RfUEFDS0VECQkwCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBXzhfUEFDS0VECQkxCisjZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBXzE2X1BBQ0tFRAkJMgorI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV8zMl9QQUNLRUQJCTMKKyNkZWZpbmUJREVfQ09OVFJPTF9SRVBFQVRfUk9UQVRFCQkxMSA6IDExCisjZGVmaW5lCURFX0NPTlRST0xfUkVQRUFUX1JPVEFURV9ESVNBQkxFCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9SRVBFQVRfUk9UQVRFX0VOQUJMRQkJMQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSAkJMTAgOiAxMAorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSF9PUEFRVUUJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0hfVFJBTlNQQVJFTlQJMQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1QJCQk5IDogOQorI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1RfU09VUkNFCQkwCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVF9ERVNUSU5BVElPTgkxCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZCQkJCTggOiA4CisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX0RJU0FCTEUJCQkwCisjZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX0VOQUJMRQkJCTEKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1AJCQkJCTcgOiAwCisKKy8qIFBzZXVkbyBmaWVsZHMuICovCisKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSCQkJMjcgOiAyNAorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMjI1CQkJMAorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMTM1CQkJMQorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMzE1CQkJMgorI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfNDUJCQkzCisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8yNzAJCQk0CisjZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl85MAkJCTUKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzE4MAkJCTgKKyNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzAJCQkxMAorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OCQkJCTI1IDogMjQKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl8wCQkJCTAKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl8yNzAJCQkJMQorI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzkwCQkJCTIKKyNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl8xODAJCQkJMworCisjZGVmaW5lCURFX1BJVENICQkJCQkweDAwMDAxMAorI2RlZmluZQlERV9QSVRDSF9ERVNUSU5BVElPTgkJCQkyOCA6IDE2CisjZGVmaW5lCURFX1BJVENIX1NPVVJDRQkJCQkJMTIgOiAwCisKKyNkZWZpbmUJREVfRk9SRUdST1VORAkJCQkJMHgwMDAwMTQKKyNkZWZpbmUJREVfRk9SRUdST1VORF9DT0xPUgkJCQkzMSA6IDAKKworI2RlZmluZQlERV9CQUNLR1JPVU5ECQkJCQkweDAwMDAxOAorI2RlZmluZQlERV9CQUNLR1JPVU5EX0NPTE9SCQkJCTMxIDogMAorCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUCQkJCTB4MDAwMDFDCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFkJCQkzMCA6IDMwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFlfTk9STUFMCQkwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFlfT1ZFUldSSVRFCQkxCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWQkJCTI5IDogMjcKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YCQkJMjUgOiAyMworI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVQJCQkyMSA6IDIwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF84CQkwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF8xNgkJMQorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfMjQJCTMKKyNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzMyCQkyCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkcJCQkxOSA6IDE2CisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkdfWFkJCQkwCisjZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkdfTElORUFSCQkxNQorI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9TT1VSQ0VfSEVJR0hUCQkJMTEgOiAwCisKKyNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRQkJCQkweDAwMDAyMAorI2RlZmluZQlERV9DT0xPUl9DT01QQVJFX0NPTE9SCQkJCTIzIDogMAorCisjZGVmaW5lCURFX0NPTE9SX0NPTVBBUkVfTUFTSwkJCQkweDAwMDAyNAorI2RlZmluZQlERV9DT0xPUl9DT01QQVJFX01BU0tfTUFTS1MJCQkyMyA6IDAKKworI2RlZmluZQlERV9NQVNLUwkJCQkJMHgwMDAwMjgKKyNkZWZpbmUJREVfTUFTS1NfQllURV9NQVNLCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfTUFTS1NfQklUX01BU0sJCQkJMTUgOiAwCisKKyNkZWZpbmUJREVfQ0xJUF9UTAkJCQkJMHgwMDAwMkMKKyNkZWZpbmUJREVfQ0xJUF9UTF9UT1AJCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfQ0xJUF9UTF9TVEFUVVMJCQkJMTMgOiAxMworI2RlZmluZQlERV9DTElQX1RMX1NUQVRVU19ESVNBQkxFCQkJMAorI2RlZmluZQlERV9DTElQX1RMX1NUQVRVU19FTkFCTEUJCQkxCisjZGVmaW5lCURFX0NMSVBfVExfSU5ISUJJVAkJCQkxMiA6IDEyCisjZGVmaW5lCURFX0NMSVBfVExfSU5ISUJJVF9PVVRTSURFCQkJMAorI2RlZmluZQlERV9DTElQX1RMX0lOSElCSVRfSU5TSURFCQkJMQorI2RlZmluZQlERV9DTElQX1RMX0xFRlQJCQkJCTExIDogMAorCisjZGVmaW5lCURFX0NMSVBfQlIJCQkJCTB4MDAwMDMwCisjZGVmaW5lCURFX0NMSVBfQlJfQk9UVE9NCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfQ0xJUF9CUl9SSUdIVAkJCQkxMiA6IDAKKworI2RlZmluZQlERV9NT05PX1BBVFRFUk5fTE9XCQkJCTB4MDAwMDM0CisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9MT1dfUEFUVEVSTgkJCTMxIDogMAorCisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9ISUdICQkJCTB4MDAwMDM4CisjZGVmaW5lCURFX01PTk9fUEFUVEVSTl9ISUdIX1BBVFRFUk4JCQkzMSA6IDAKKworI2RlZmluZQlERV9XSU5ET1dfV0lEVEgJCQkJCTB4MDAwMDNDCisjZGVmaW5lCURFX1dJTkRPV19XSURUSF9ERVNUSU5BVElPTgkJCTI4IDogMTYKKyNkZWZpbmUJREVfV0lORE9XX1dJRFRIX1NPVVJDRQkJCQkxMiA6IDAKKworI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0UJCQkJMHgwMDAwNDAKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0VYVAkJCTI3IDogMjcKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJMQorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQ1MJCQkyNiA6IDI2CisjZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9DU18wCQkJMAorI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQ1NfMQkJCTEKKyNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRQkJCTB4MDAwMDQ0CisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0VYVAkJCTI3IDogMjcKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0xPQ0FMCQkwCisjZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0VYVF9FWFRFUk5BTAkJMQorI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9DUwkJCTI2IDogMjYKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMAkJCTAKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMQkJCTEKKyNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQUREUkVTUwkJMjUgOiAwCisKKyNkZWZpbmUJREVfQUxQSEEJCQkJCTB4MDAwMDQ4CisjZGVmaW5lCURFX0FMUEhBX1ZBTFVFCQkJCQk3IDogMAorCisjZGVmaW5lCURFX1dSQVAJCQkJCQkweDAwMDA0QworI2RlZmluZQlERV9XUkFQX1gJCQkJCTMxIDogMTYKKyNkZWZpbmUJREVfV1JBUF9ZCQkJCQkxNSA6IDAKKworI2RlZmluZQlERV9TVEFUVVMJCQkJCTB4MDAwMDUwCisjZGVmaW5lCURFX1NUQVRVU19DU0MJCQkJCTEgOiAxCisjZGVmaW5lCURFX1NUQVRVU19DU0NfQ0xFQVIJCQkJMAorI2RlZmluZQlERV9TVEFUVVNfQ1NDX05PVF9BQ1RJVkUJCQkwCisjZGVmaW5lCURFX1NUQVRVU19DU0NfQUNUSVZFCQkJCTEKKyNkZWZpbmUJREVfU1RBVFVTXzJECQkJCQkwIDogMAorI2RlZmluZQlERV9TVEFUVVNfMkRfQ0xFQVIJCQkJMAorI2RlZmluZQlERV9TVEFUVVNfMkRfTk9UX0FDVElWRQkJCQkwCisjZGVmaW5lCURFX1NUQVRVU18yRF9BQ1RJVkUJCQkJMQorCisvKiBDb2xvciBTcGFjZSBDb252ZXJzaW9uIHJlZ2lzdGVycy4gKi8KKworI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRQkJCQkweDAwMDBDOAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9FWFQJCQkJMjcgOiAyNworI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJCTEKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQ1MJCQkJMjYgOiAyNgorI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9DU18wCQkJCTAKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQ1NfMQkJCQkxCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKKworI2RlZmluZQlDU0NfQ09OU1RBTlRTCQkJCQkweDAwMDBDQworI2RlZmluZQlDU0NfQ09OU1RBTlRTX1kJCQkJCTMxIDogMjQKKyNkZWZpbmUJQ1NDX0NPTlNUQU5UU19SCQkJCQkyMyA6IDE2CisjZGVmaW5lCUNTQ19DT05TVEFOVFNfRwkJCQkJMTUgOiA4CisjZGVmaW5lCUNTQ19DT05TVEFOVFNfQgkJCQkJNyA6IDAKKworI2RlZmluZQlDU0NfWV9TT1VSQ0VfWAkJCQkJMHgwMDAwRDAKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1hfSU5URUdFUgkJCQkyNiA6IDE2CisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9YX0ZSQUNUSU9OCQkJCTE1IDogMworCisjZGVmaW5lCUNTQ19ZX1NPVVJDRV9ZCQkJCQkweDAwMDBENAorI2RlZmluZQlDU0NfWV9TT1VSQ0VfWV9JTlRFR0VSCQkJCTI3IDogMTYKKyNkZWZpbmUJQ1NDX1lfU09VUkNFX1lfRlJBQ1RJT04JCQkJMTUgOiAzCisKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0UJCQkJMHgwMDAwRDgKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfRVhUCQkJCTI3IDogMjcKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCQkxCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQ1NfMAkJCQkwCisjZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0NTXzEJCQkJMQorI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0UJCQkJMHgwMDAwREMKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfRVhUCQkJCTI3IDogMjcKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCQkxCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQ1NfMAkJCQkwCisjZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0NTXzEJCQkJMQorI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCisKKyNkZWZpbmUJQ1NDX1NPVVJDRV9ESU1FTlNJT04JCQkJMHgwMDAwRTAKKyNkZWZpbmUJQ1NDX1NPVVJDRV9ESU1FTlNJT05fWAkJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19TT1VSQ0VfRElNRU5TSU9OX1kJCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX1NPVVJDRV9QSVRDSAkJCQkweDAwMDBFNAorI2RlZmluZQlDU0NfU09VUkNFX1BJVENIX1kJCQkJMzEgOiAxNgorI2RlZmluZQlDU0NfU09VUkNFX1BJVENIX1VWCQkJCTE1IDogMAorCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTgkJCQkJMHgwMDAwRTgKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1dSQVAJCQkJMzEgOiAzMQorI2RlZmluZQlDU0NfREVTVElOQVRJT05fV1JBUF9ESVNBQkxFCQkJMAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fV1JBUF9FTkFCTEUJCQkxCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9YCQkJCTI3IDogMTYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1kJCQkJMTEgOiAwCisKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0RJTUVOU0lPTgkJCTB4MDAwMEVDCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ESU1FTlNJT05fWAkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0RJTUVOU0lPTl9ZCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1BJVENICQkJCTB4MDAwMEYwCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9QSVRDSF9YCQkJCTMxIDogMTYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1BJVENIX1kJCQkJMTUgOiAwCisKKyNkZWZpbmUJQ1NDX1NDQUxFX0ZBQ1RPUgkJCQkweDAwMDBGNAorI2RlZmluZQlDU0NfU0NBTEVfRkFDVE9SX0hPUklaT05UQUwJCQkzMSA6IDE2CisjZGVmaW5lCUNTQ19TQ0FMRV9GQUNUT1JfVkVSVElDQUwJCQkxNSA6IDAKKworI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRQkJCQkweDAwMDBGOAorI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9FWFQJCQkyNyA6IDI3CisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0VYVF9MT0NBTAkJCTAKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0VYVEVSTkFMCQkxCisjZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0NTCQkJCTI2IDogMjYKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMAkJCTAKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQ1NfMQkJCTEKKyNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQUREUkVTUwkJCTI1IDogMAorCisjZGVmaW5lCUNTQ19DT05UUk9MCQkJCQkweDAwMDBGQworI2RlZmluZQlDU0NfQ09OVFJPTF9TVEFUVVMJCQkJMzEgOiAzMQorI2RlZmluZQlDU0NfQ09OVFJPTF9TVEFUVVNfU1RPUAkJCQkwCisjZGVmaW5lCUNTQ19DT05UUk9MX1NUQVRVU19TVEFSVAkJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVAkJCTMwIDogMjgKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVVY0MjIJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVVY0MjBJCQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVVWNDIwCQkyCisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVZVOQkJCTMKKyNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9JWVUxCQkJNAorI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX0lZVTIJCQk1CisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfUkdCNTY1CQk2CisjZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfUkdCODg4OAkJNworI2RlZmluZQlDU0NfQ09OVFJPTF9ERVNUSU5BVElPTl9GT1JNQVQJCQkyNyA6IDI2CisjZGVmaW5lCUNTQ19DT05UUk9MX0RFU1RJTkFUSU9OX0ZPUk1BVF9SR0I1NjUJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfREVTVElOQVRJT05fRk9STUFUX1JHQjg4ODgJCTEKKyNkZWZpbmUJQ1NDX0NPTlRST0xfSE9SSVpPTlRBTF9GSUxURVIJCQkyNSA6IDI1CisjZGVmaW5lCUNTQ19DT05UUk9MX0hPUklaT05UQUxfRklMVEVSX0RJU0FCTEUJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfSE9SSVpPTlRBTF9GSUxURVJfRU5BQkxFCQkxCisjZGVmaW5lCUNTQ19DT05UUk9MX1ZFUlRJQ0FMX0ZJTFRFUgkJCTI0IDogMjQKKyNkZWZpbmUJQ1NDX0NPTlRST0xfVkVSVElDQUxfRklMVEVSX0RJU0FCTEUJCTAKKyNkZWZpbmUJQ1NDX0NPTlRST0xfVkVSVElDQUxfRklMVEVSX0VOQUJMRQkJMQorI2RlZmluZQlDU0NfQ09OVFJPTF9CWVRFX09SREVSCQkJCTIzIDogMjMKKyNkZWZpbmUJQ1NDX0NPTlRST0xfQllURV9PUkRFUl9ZVVlWCQkJMAorI2RlZmluZQlDU0NfQ09OVFJPTF9CWVRFX09SREVSX1VZVlkJCQkxCisKKyNkZWZpbmUJREVfREFUQV9QT1JUXzUwMQkJCQkweDExMDAwMAorI2RlZmluZQlERV9EQVRBX1BPUlRfNzEyCQkJCTB4NDAwMDAwCisjZGVmaW5lCURFX0RBVEFfUE9SVF83MjIJCQkJMHg2MDAwCisKKy8qIHBvaW50IHRvIHZpcnR1YWwgTWVtb3J5IE1hcCBJTyBzdGFydGluZyBhZGRyZXNzICovCitleHRlcm4gY2hhciAqc210Y19SZWdCYXNlQWRkcmVzczsKKy8qIHBvaW50IHRvIHZpcnR1YWwgdmlkZW8gbWVtb3J5IHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2V4dGVybiBjaGFyICpzbXRjX1ZSQU1CYXNlQWRkcmVzczsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNtdGNfZGVfYnVzeTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtUmVhZDMyKHVuc2lnbmVkIGxvbmcgbk9mZnNldCk7CitleHRlcm4gdm9pZCBtZW1Xcml0ZTMyKHVuc2lnbmVkIGxvbmcgbk9mZnNldCwgdW5zaWduZWQgbG9uZyBuRGF0YSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBTTVRDX3JlYWQyRHJlZyh1bnNpZ25lZCBsb25nIG5PZmZzZXQpOworCisvKiAyRCBmdW5jdGlvbnMgKi8KK2V4dGVybiB2b2lkIGRlSW5pdCh1bnNpZ25lZCBpbnQgbk1vZGVXaWR0aCwgdW5zaWduZWQgaW50IG5Nb2RlSGVpZ2h0LAorCQkgICB1bnNpZ25lZCBpbnQgYnBwKTsKKworZXh0ZXJuIHZvaWQgZGVXYWl0Rm9yTm90QnVzeSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZGVWZXJ0aWNhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKKwl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKKwl1bnNpZ25lZCBsb25nIG5YLAorCXVuc2lnbmVkIGxvbmcgblksCisJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKKworZXh0ZXJuIHZvaWQgZGVIb3Jpem9udGFsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgblgsCisJdW5zaWduZWQgbG9uZyBuWSwKKwl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwl1bnNpZ25lZCBsb25nIG5Db2xvcik7CisKK2V4dGVybiB2b2lkIGRlTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgblgxLAorCXVuc2lnbmVkIGxvbmcgblkxLAorCXVuc2lnbmVkIGxvbmcgblgyLAorCXVuc2lnbmVkIGxvbmcgblkyLAorCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKKworZXh0ZXJuIHZvaWQgZGVGaWxsUmVjdCh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgZHN0X1gsCisJdW5zaWduZWQgbG9uZyBkc3RfWSwKKwl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKKwl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCisJdW5zaWduZWQgbG9uZyBuQ29sb3IpOworCitleHRlcm4gdm9pZCBkZVJvdGF0ZVBhdHRlcm4odW5zaWduZWQgY2hhciAqcGF0dGVybl9kc3RhZGRyLAorCXVuc2lnbmVkIGxvbmcgcGF0dGVybl9zcmNfYWRkciwKKwl1bnNpZ25lZCBsb25nIHBhdHRlcm5fQlBQLAorCXVuc2lnbmVkIGxvbmcgcGF0dGVybl9zdHJpZGUsCisJaW50CXBhdHRlcm5YLAorCWludAlwYXR0ZXJuWSk7CisKK2V4dGVybiB2b2lkIGRlQ29weSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAorCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAorCXVuc2lnbmVkIGxvbmcgZHN0X0JQUCwKKwl1bnNpZ25lZCBsb25nIGRzdF9YLAorCXVuc2lnbmVkIGxvbmcgZHN0X1ksCisJdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCisJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAorCXVuc2lnbmVkIGxvbmcgc3JjX2Jhc2UsCisJdW5zaWduZWQgbG9uZyBzcmNfcGl0Y2gsCisJdW5zaWduZWQgbG9uZyBzcmNfWCwKKwl1bnNpZ25lZCBsb25nIHNyY19ZLAorCXBUcmFuc3BhcmVudAlwVHJhbnNwLAorCXVuc2lnbmVkIGNoYXIgblJPUDIpOworCisvKgorICogU3lzdGVtIG1lbW9yeSB0byBWaWRlbyBtZW1vcnkgbW9ub2Nocm9tZSBleHBhbnNpb24uCisgKgorICogU291cmNlIGlzIG1vbm9jaHJvbWUgaW1hZ2UgaW4gc3lzdGVtIG1lbW9yeS4gIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB0aGUKKyAqIG1vbm9jaHJvbWUgZGF0YSB0byBjb2xvciBpbWFnZSBpbiB2aWRlbyBtZW1vcnkuCisgKgorICogQHBTcmNidWY6IHBvaW50ZXIgdG8gc3RhcnQgb2Ygc291cmNlIGJ1ZmZlciBpbiBzeXN0ZW0gbWVtb3J5CisgKiBAc3JjRGVsdGE6IFBpdGNoIHZhbHVlIChpbiBieXRlcykgb2YgdGhlIHNvdXJjZSBidWZmZXIsICtpdmUgbWVhbnMgdG9wCisgKiAJCWRvd24gYW5kIC1pdmUgbWVhbiBidXR0b24gdXAKKyAqIEBzdGFydEJpdDogTW9ubyBkYXRhIGNhbiBzdGFydCBhdCBhbnkgYml0IGluIGEgYnl0ZSwgdGhpcyB2YWx1ZSBzaG91bGQKKyAqIAkJYmUgMCB0byA3CisgKiBAZEJhc2U6IEFkZHJlc3Mgb2YgZGVzdGluYXRpb24gOiAgb2Zmc2V0IGluIGZyYW1lIGJ1ZmZlcgorICogQGRQaXRjaDogUGl0Y2ggdmFsdWUgb2YgZGVzdGluYXRpb24gc3VyZmFjZSBpbiBCWVRFCisgKiBAYnBwOiBDb2xvciBkZXB0aCBvZiBkZXN0aW5hdGlvbiBzdXJmYWNlCisgKiBAZHgsIGR5OiBTdGFydGluZyBjb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UKKyAqIEB3aWR0aCwgaGVpZ2h0OiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHJlY3RhbmdlIGluIHBpeGVsIHZhbHVlCisgKiBAZkNvbG9yLGJDb2xvcjogRm9yZWdyb3VuZCwgQmFja2dyb3VuZCBjb2xvciAoY29ycmVzcG9uZGluZyB0byBhIDEsIDAgaW4KKyAqIAl0aGUgbW9ub2Nocm9tZSBkYXRhKQorICogQHJvcDI6IFJPUCB2YWx1ZQorICovCisKK2V4dGVybiBsb25nIGRlU3lzdGVtTWVtMlZpZGVvTWVtTW9ub0JsdCgKKwljb25zdCBjaGFyICpwU3JjYnVmLAorCWxvbmcgc3JjRGVsdGEsCisJdW5zaWduZWQgbG9uZyBzdGFydEJpdCwKKwl1bnNpZ25lZCBsb25nIGRCYXNlLAorCXVuc2lnbmVkIGxvbmcgZFBpdGNoLAorCXVuc2lnbmVkIGxvbmcgYnBwLAorCXVuc2lnbmVkIGxvbmcgZHgsIHVuc2lnbmVkIGxvbmcgZHksCisJdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsCisJdW5zaWduZWQgbG9uZyBmQ29sb3IsCisJdW5zaWduZWQgbG9uZyBiQ29sb3IsCisJdW5zaWduZWQgbG9uZyByb3AyKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGVHZXRUcmFuc3BhcmVuY3kodm9pZCk7CitleHRlcm4gdm9pZCBkZVNldFBpeGVsRm9ybWF0KHVuc2lnbmVkIGxvbmcgYnBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjFkYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC0wLDAgKzEsMTI1MyBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNN1hYIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yczogR2UgV2FuZywgZ2V3YW5nQHNpbGljb25tb3Rpb24uY29tCisgKiAJICAgIEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiBWZXJzaW9uIDAuMTAuMjYxOTIuMjEuMDEKKyAqIAktIEFkZCBQb3dlclBDL0JpZyBlbmRpYW4gc3VwcG9ydAorICogCS0gQWRkIDJEIHN1cHBvcnQgZm9yIEx5bngKKyAqIAktIFZlcmlmaWVkIG9uMi42LjE5LjIgIEJveW9kLnlhbmcgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKgorICogVmVyc2lvbiAwLjA5LjI2MjEuMDAuMDEKKyAqIAktIE9ubHkgc3VwcG9ydCBMaW51eCBLZXJuZWwncyB2ZXJzaW9uIDIuNi4yMS4KKyAqCUJveW9kLnlhbmcgIDxib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuPgorICoKKyAqIFZlcnNpb24gMC4wOQorICogCS0gT25seSBzdXBwb3J0IExpbnV4IEtlcm5lbCdzIHZlcnNpb24gMi42LjEyLgorICogCUJveW9kLnlhbmcgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+CisgKi8KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fS0VSTkVMX18KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CisKKyNpZmRlZiBDT05GSUdfUE0KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2VuZGlmCisKK3N0cnVjdCBzY3JlZW5faW5mbyBzbXRjX3NjcmVlbl9pbmZvOworCisjaW5jbHVkZSAic210Y2ZiLmgiCisjaW5jbHVkZSAic210YzJkLmgiCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBzbWRiZyhmb3JtYXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0ICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgc21kYmcoZm9ybWF0LCBhcmcuLi4pCisjZW5kaWYKKworLyoKKyogUHJpdmF0ZSBzdHJ1Y3R1cmUKKyovCitzdHJ1Y3Qgc210Y2ZiX2luZm8geworCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyBhIHBvaW50ZXIgdG8gYmUgcGFzc2VkIGludG8gdGhlCisJICogZnVuY3Rpb25zIGJlbG93LiAgVGhlIG1vZHVsZXMgb3V0c2lkZSB0aGUgbWFpbgorCSAqIHZveWFnZXIuYyBkcml2ZXIgaGF2ZSBubyBrbm93bGVkZ2UgYXMgdG8gd2hhdAorCSAqIGlzIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4KKwkgKi8KKwlzdHJ1Y3QgZmJfaW5mbyBmYjsKKwlzdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggKmRpc3BzdzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXNpZ25lZCBpbnQgY3VycmNvbjsKKworCXN0cnVjdCB7CisJCXU4IHJlZCwgZ3JlZW4sIGJsdWU7CisJfSBwYWxldHRlW05SX1JHQl07CisKKwl1X2ludCBwYWxldHRlX3NpemU7Cit9OworCitzdHJ1Y3QgcGFyX2luZm8geworCS8qCisJICogSGFyZHdhcmUKKwkgKi8KKwl1MTYgY2hpcElEOworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqbV9wTU1JTzsKKwljaGFyIF9faW9tZW0gKm1fcExGQjsKKwljaGFyICptX3BEUFI7CisJY2hhciAqbV9wVlBSOworCWNoYXIgKm1fcENQUjsKKworCXVfaW50IHdpZHRoOworCXVfaW50IGhlaWdodDsKKwl1X2ludCBoejsKKwl1X2xvbmcgQmFzZUFkZHJlc3NJblZSQU07CisJdTggY2hpcFJldklEOworfTsKKworc3RydWN0IHZlc2FfbW9kZV90YWJsZQl7CisJY2hhciBtb2RlX2luZGV4WzZdOworCXUxNiBsZmJfd2lkdGg7CisJdTE2IGxmYl9oZWlnaHQ7CisJdTE2IGxmYl9kZXB0aDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmVzYV9tb2RlX3RhYmxlIHZlc2FfbW9kZVtdID0geworCXsiMHgzMDEiLCA2NDAsICA0ODAsICA4fSwKKwl7IjB4MzAzIiwgODAwLCAgNjAwLCAgOH0sCisJeyIweDMwNSIsIDEwMjQsIDc2OCwJOH0sCisJeyIweDMwNyIsIDEyODAsIDEwMjQsIDh9LAorCisJeyIweDMxMSIsIDY0MCwgIDQ4MCwgIDE2fSwKKwl7IjB4MzE0IiwgODAwLCAgNjAwLCAgMTZ9LAorCXsiMHgzMTciLCAxMDI0LCA3NjgsCTE2fSwKKwl7IjB4MzFBIiwgMTI4MCwgMTAyNCwgMTZ9LAorCisJeyIweDMxMiIsIDY0MCwgIDQ4MCwgIDI0fSwKKwl7IjB4MzE1IiwgODAwLCAgNjAwLCAgMjR9LAorCXsiMHgzMTgiLCAxMDI0LCA3NjgsCTI0fSwKKwl7IjB4MzFCIiwgMTI4MCwgMTAyNCwgMjR9LAorfTsKKworY2hhciBfX2lvbWVtICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOwkvKiBNZW1vcnkgTWFwIElPIHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2NoYXIgX19pb21lbSAqc210Y19WUkFNQmFzZUFkZHJlc3M7CS8qIHZpZGVvIG1lbW9yeSBzdGFydGluZyBhZGRyZXNzICovCisKK2NoYXIgKnNtdGNfMkRCYXNlQWRkcmVzczsJLyogMkQgZW5naW5lIHN0YXJ0aW5nIGFkZHJlc3MgKi8KK2NoYXIgKnNtdGNfMkRkYXRhcG9ydDsJCS8qIDJEIGRhdGEgcG9ydCBvZmZzZXQgKi8KK3Nob3J0IHNtdGNfMkRhY2NlbGVyYXRpb247CisKK3N0YXRpYyB1MzIgY29scmVnWzE3XTsKK3N0YXRpYyBzdHJ1Y3QgcGFyX2luZm8gaHc7CS8qIGhhcmR3YXJlIGluZm9ybWF0aW9uICovCisKK3UxNiBzbXRjX0NoaXBJRHNbXSA9IHsKKwkweDcxMCwKKwkweDcxMiwKKwkweDcyMAorfTsKKworI2RlZmluZSBudW1TTVRDY2hpcElEcyAoc2l6ZW9mKHNtdGNfQ2hpcElEcykgLyBzaXplb2YodTE2KSkKKwordm9pZCBkZVdhaXRGb3JOb3RCdXN5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpID0gMHgxMDAwMDAwOworCXdoaWxlIChpLS0pIHsKKwkJaWYgKChzbXRjX3NlcXIoMHgxNikgJiAweDE4KSA9PSAweDEwKQorCQkJYnJlYWs7CisJfQorCXNtdGNfZGVfYnVzeSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNtNzEyX3NldF90aW1pbmcoc3RydWN0IHNtdGNmYl9pbmZvICpzZmIsCisJCQkgICAgIHN0cnVjdCBwYXJfaW5mbyAqcHBhcl9pbmZvKQoreworCWludCBpID0gMCwgaiA9IDA7CisJdTMyIG1fblNjcmVlblN0cmlkZTsKKworCXNtZGJnKCJcbnBwYXJfaW5mby0+d2lkdGggPSAlZCBwcGFyX2luZm8tPmhlaWdodCA9ICVkIgorCQkJInNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gJWQgcHBhcl9pbmZvLT5oeiA9ICVkXG4iLAorCQkJcHBhcl9pbmZvLT53aWR0aCwgcHBhcl9pbmZvLT5oZWlnaHQsCisJCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCwgcHBhcl9pbmZvLT5oeik7CisKKwlmb3IgKGogPSAwOyBqIDwgbnVtVkdBTW9kZXM7IGorKykgeworCQlpZiAoVkdBTW9kZVtqXS5tbVNpemVYID09IHBwYXJfaW5mby0+d2lkdGggJiYKKwkJICAgIFZHQU1vZGVbal0ubW1TaXplWSA9PSBwcGFyX2luZm8tPmhlaWdodCAmJgorCQkgICAgVkdBTW9kZVtqXS5icHAgPT0gc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgJiYKKwkJICAgIFZHQU1vZGVbal0uaHogPT0gcHBhcl9pbmZvLT5oeikgeworCisJCQlzbWRiZygiXG5WR0FNb2RlW2pdLm1tU2l6ZVggID0gJWQgVkdBTW9kZVtqXS5tbVNpemVZID0iCisJCQkJCSIlZCBWR0FNb2RlW2pdLmJwcCA9ICVkIgorCQkJCQkiVkdBTW9kZVtqXS5oej0lZFxuIiwKKwkJCQkJVkdBTW9kZVtqXS5tbVNpemVYLCBWR0FNb2RlW2pdLm1tU2l6ZVksCisJCQkJCVZHQU1vZGVbal0uYnBwLCBWR0FNb2RlW2pdLmh6KTsKKworCQkJc21kYmcoIlZHQU1vZGUgaW5kZXg9JWRcbiIsIGopOworCisJCQlzbXRjX21taW93YigweDAsIDB4M2M2KTsKKworCQkJc210Y19zZXF3KDAsIDB4MSk7CisKKwkJCXNtdGNfbW1pb3diKFZHQU1vZGVbal0uSW5pdF9NSVNDLCAweDNjMik7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSMDAgLSBTUjA0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjAwX1NSMDQ7IGkrKykKKwkJCQlzbXRjX3NlcXcoaSwgVkdBTW9kZVtqXS5Jbml0X1NSMDBfU1IwNFtpXSk7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSMTAgLSBTUjI0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjEwX1NSMjQ7IGkrKykKKwkJCQlzbXRjX3NlcXcoaSArIDB4MTAsCisJCQkJCSAgVkdBTW9kZVtqXS5Jbml0X1NSMTBfU1IyNFtpXSk7CisKKwkJCS8qIGluaXQgU0VRIHJlZ2lzdGVyIFNSMzAgLSBTUjc1ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9TUjMwX1NSNzU7IGkrKykKKwkJCQlpZiAoKChpICsgMHgzMCkgIT0gMHg2MikgXAorCQkJCQkmJiAoKGkgKyAweDMwKSAhPSAweDZhKSBcCisJCQkJCSYmICgoaSArIDB4MzApICE9IDB4NmIpKQorCQkJCQlzbXRjX3NlcXcoaSArIDB4MzAsCisJCQkJCQlWR0FNb2RlW2pdLkluaXRfU1IzMF9TUjc1W2ldKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1I4MCAtIFNSOTMgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSODBfU1I5MzsgaSsrKQorCQkJCXNtdGNfc2VxdyhpICsgMHg4MCwKKwkJCQkJICBWR0FNb2RlW2pdLkluaXRfU1I4MF9TUjkzW2ldKTsKKworCQkJLyogaW5pdCBTRVEgcmVnaXN0ZXIgU1JBMCAtIFNSQUYgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX1NSQTBfU1JBRjsgaSsrKQorCQkJCXNtdGNfc2VxdyhpICsgMHhhMCwKKwkJCQkJICBWR0FNb2RlW2pdLkluaXRfU1JBMF9TUkFGW2ldKTsKKworCQkJLyogaW5pdCBHcmFwaGljIHJlZ2lzdGVyIEdSMDAgLSBHUjA4ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9HUjAwX0dSMDg7IGkrKykKKwkJCQlzbXRjX2dycGh3KGksIFZHQU1vZGVbal0uSW5pdF9HUjAwX0dSMDhbaV0pOworCisJCQkvKiBpbml0IEF0dHJpYnV0ZSByZWdpc3RlciBBUjAwIC0gQVIxNCAqLworCQkJZm9yIChpID0gMDsgaSA8IFNJWkVfQVIwMF9BUjE0OyBpKyspCisJCQkJc210Y19hdHRydyhpLCBWR0FNb2RlW2pdLkluaXRfQVIwMF9BUjE0W2ldKTsKKworCQkJLyogaW5pdCBDUlRDIHJlZ2lzdGVyIENSMDAgLSBDUjE4ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgU0laRV9DUjAwX0NSMTg7IGkrKykKKwkJCQlzbXRjX2NydGN3KGksIFZHQU1vZGVbal0uSW5pdF9DUjAwX0NSMThbaV0pOworCisJCQkvKiBpbml0IENSVEMgcmVnaXN0ZXIgQ1IzMCAtIENSNEQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0NSMzBfQ1I0RDsgaSsrKQorCQkJCXNtdGNfY3J0Y3coaSArIDB4MzAsCisJCQkJCSAgIFZHQU1vZGVbal0uSW5pdF9DUjMwX0NSNERbaV0pOworCisJCQkvKiBpbml0IENSVEMgcmVnaXN0ZXIgQ1I5MCAtIENSQTcgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBTSVpFX0NSOTBfQ1JBNzsgaSsrKQorCQkJCXNtdGNfY3J0Y3coaSArIDB4OTAsCisJCQkJCSAgIFZHQU1vZGVbal0uSW5pdF9DUjkwX0NSQTdbaV0pOworCQl9CisJfQorCXNtdGNfbW1pb3diKDB4NjcsIDB4M2MyKTsKKworCS8qIHNldCBWUFIgcmVnaXN0ZXJzICovCisJd3JpdGVsKDB4MCwgcHBhcl9pbmZvLT5tX3BWUFIgKyAweDBDKTsKKwl3cml0ZWwoMHgwLCBwcGFyX2luZm8tPm1fcFZQUiArIDB4NDApOworCisJLyogc2V0IGRhdGEgd2lkdGggKi8KKwltX25TY3JlZW5TdHJpZGUgPQorCQkocHBhcl9pbmZvLT53aWR0aCAqIHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKSAvIDY0OworCXN3aXRjaCAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCXdyaXRlbCgweDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJd3JpdGVsKDB4MDAwMjAwMDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJd3JpdGVsKDB4MDAwNDAwMDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJd3JpdGVsKDB4MDAwMzAwMDAsIHBwYXJfaW5mby0+bV9wVlBSICsgMHgwKTsKKwkJYnJlYWs7CisJfQorCXdyaXRlbCgodTMyKSAoKChtX25TY3JlZW5TdHJpZGUgKyAyKSA8PCAxNikgfCBtX25TY3JlZW5TdHJpZGUpLAorCSAgICAgICBwcGFyX2luZm8tPm1fcFZQUiArIDB4MTApOworCit9CisKK3N0YXRpYyB2b2lkIHNtNzEyX3NldHBhbGV0dGUoaW50IHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgICB1bnNpZ25lZCBibHVlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcGFyX2luZm8gKmN1cl9wYXIgPSAoc3RydWN0IHBhcl9pbmZvICopaW5mby0+cGFyOworCisJaWYgKGN1cl9wYXItPkJhc2VBZGRyZXNzSW5WUkFNKQorCQkvKgorCQkgKiBzZWNvbmQgZGlzcGxheSBwYWxldHRlIGZvciBkdWFsIGhlYWQuIEVuYWJsZSBDUlQgUkFNLCA2LWJpdAorCQkgKiBSQU0KKwkJICovCisJCXNtdGNfc2VxdygweDY2LCAoc210Y19zZXFyKDB4NjYpICYgMHhDMykgfCAweDIwKTsKKwllbHNlCisJCS8qIHByaW1hcnkgZGlzcGxheSBwYWxldHRlLiBFbmFibGUgTENEIFJBTSBvbmx5LCA2LWJpdCBSQU0gKi8KKwkJc210Y19zZXF3KDB4NjYsIChzbXRjX3NlcXIoMHg2NikgJiAweEMzKSB8IDB4MTApOworCXNtdGNfbW1pb3diKHJlZ25vLCBkYWNfcmVnKTsKKwlzbXRjX21taW93YihyZWQgPj4gMTAsIGRhY192YWwpOworCXNtdGNfbW1pb3diKGdyZWVuID4+IDEwLCBkYWNfdmFsKTsKKwlzbXRjX21taW93YihibHVlID4+IDEwLCBkYWNfdmFsKTsKK30KKworc3RhdGljIHZvaWQgc210Y19zZXRfdGltaW5nKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiLCBzdHJ1Y3QgcGFyX2luZm8KKwkJKnBwYXJfaW5mbykKK3sKKwlzd2l0Y2ggKHBwYXJfaW5mby0+Y2hpcElEKSB7CisJY2FzZSAweDcxMDoKKwljYXNlIDB4NzEyOgorCWNhc2UgMHg3MjA6CisJCXNtNzEyX3NldF90aW1pbmcoc2ZiLCBwcGFyX2luZm8pOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gc210Y2ZiX3ZhciA9IHsKKwkueHJlcyA9IDEwMjQsCisJLnlyZXMgPSA2MDAsCisJLnhyZXNfdmlydHVhbCA9IDEwMjQsCisJLnlyZXNfdmlydHVhbCA9IDYwMCwKKwkuYml0c19wZXJfcGl4ZWwgPSAxNiwKKwkucmVkID0gezE2LCA4LCAwfSwKKwkuZ3JlZW4gPSB7OCwgOCwgMH0sCisJLmJsdWUgPSB7MCwgOCwgMH0sCisJLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XLAorCS5oZWlnaHQgPSAtMSwKKwkud2lkdGggPSAtMSwKKwkudm1vZGUgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBzbXRjZmJfZml4ID0geworCS5pZCA9ICJzbTcxMmZiIiwKKwkudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUiwKKwkubGluZV9sZW5ndGggPSA4MDAgKiAzLAorCS5hY2NlbCA9IEZCX0FDQ0VMX1NNSV9MWU5YLAorfTsKKworLyogY2hhbl90b19maWVsZAorICoKKyAqIGNvbnZlcnQgYSBjb2xvdXIgdmFsdWUgaW50byBhIGZpZWxkIHBvc2l0aW9uCisgKgorICogZnJvbSBweGFmYi5jCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2hhbl90b19maWVsZCh1bnNpZ25lZCBpbnQgY2hhbiwKKwkJCQkJIHN0cnVjdCBmYl9iaXRmaWVsZCAqYmYpCit7CisJY2hhbiAmPSAweGZmZmY7CisJY2hhbiA+Pj0gMTYgLSBiZi0+bGVuZ3RoOworCXJldHVybiBjaGFuIDw8IGJmLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgc210Y2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwkvKiBjbGVhciBEUE1TIHNldHRpbmcgKi8KKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9uLCBWU3luYyA6IE9uICovCisJCXNtdGNfc2VxdygweDAxLCAoc210Y19zZXFyKDB4MDEpICYgKH4weDIwKSkpOworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4MjEsIChzbXRjX3NlcXIoMHgyMSkgJiAweDc3KSk7CisJCXNtdGNfc2VxdygweDIyLCAoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkpOworCQlzbXRjX3NlcXcoMHgyMywgKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgfCAweDAxKSk7CisJCXNtdGNfc2VxdygweDMxLCAoc210Y19zZXFyKDB4MzEpIHwgMHgwMykpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX05PUk1BTDoKKwkJLyogU2NyZWVuIE9mZjogSFN5bmM6IE9uLCBWU3luYyA6IE9uICAgU29mdCBibGFuayAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSAmICh+MHgyMCkpKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MTYpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCXNtdGNfc2VxdygweDIyLCAoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkpOworCQlzbXRjX3NlcXcoMHgyMywgKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpKTsKKwkJc210Y19zZXF3KDB4MjQsIChzbXRjX3NlcXIoMHgyNCkgfCAweDAxKSk7CisJCXNtdGNfc2VxdygweDMxLCAoKHNtdGNfc2VxcigweDMxKSAmICh+MHgwNykpIHwgMHgwMCkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9uLCBWU3luYyA6IE9mZiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgJiAofjB4QjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDBjKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSB8IDB4ODgpKTsKKwkJc210Y19zZXF3KDB4MjIsICgoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkgfCAweDIwKSk7CisJCXNtdGNfc2VxdygweDIzLCAoKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpIHwgMHgyMCkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSAmICh+MHgwMSkpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHg4MCkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCS8qIFNjcmVlbiBPbjogSFN5bmM6IE9mZiwgVlN5bmMgOiBPbiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgJiAofjB4QjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDBjKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSB8IDB4ODgpKTsKKwkJc210Y19zZXF3KDB4MjIsICgoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkgfCAweDEwKSk7CisJCXNtdGNfc2VxdygweDIzLCAoKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpIHwgMHhEOCkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSAmICh+MHgwMSkpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHg4MCkpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJLyogU2NyZWVuIE9uOiBIU3luYzogT2ZmLCBWU3luYyA6IE9mZiAqLworCQlzbXRjX3NlcXcoMHgwMSwgKHNtdGNfc2VxcigweDAxKSB8IDB4MjApKTsKKwkJc210Y19zZXF3KDB4MjAsIChzbXRjX3NlcXIoMHgyMCkgJiAofjB4QjApKSk7CisJCXNtdGNfc2VxdygweDZhLCAweDBjKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjX3NlcXcoMHgyMSwgKHNtdGNfc2VxcigweDIxKSB8IDB4ODgpKTsKKwkJc210Y19zZXF3KDB4MjIsICgoc210Y19zZXFyKDB4MjIpICYgKH4weDMwKSkgfCAweDMwKSk7CisJCXNtdGNfc2VxdygweDIzLCAoKHNtdGNfc2VxcigweDIzKSAmICh+MHhjMCkpIHwgMHhEOCkpOworCQlzbXRjX3NlcXcoMHgyNCwgKHNtdGNfc2VxcigweDI0KSAmICh+MHgwMSkpKTsKKwkJc210Y19zZXF3KDB4MzEsICgoc210Y19zZXFyKDB4MzEpICYgKH4weDA3KSkgfCAweDAwKSk7CisJCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHg4MCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbXRjX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkJCSAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiID0gKHN0cnVjdCBzbXRjZmJfaW5mbyAqKWluZm87CisJdTMyIHZhbDsKKworCWlmIChyZWdubyA+IDI1NSkKKwkJcmV0dXJuIDE7CisKKwlzd2l0Y2ggKHNmYi0+ZmIuZml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX0RJUkVDVENPTE9SOgorCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJLyoKKwkJICogMTYvMzIgYml0IHRydWUtY29sb3VyLCB1c2UgcHNldW8tcGFsZXR0ZSBmb3IgMTYgYmFzZSBjb2xvcgorCQkgKi8KKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQkJCXUzMiAqcGFsID0gc2ZiLT5mYi5wc2V1ZG9fcGFsZXR0ZTsKKwkJCQl2YWwgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJnNmYi0+ZmIudmFyLnJlZCk7CisJCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sIFwKKwkJCQkJCSZzZmItPmZiLnZhci5ncmVlbik7CisJCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJnNmYi0+ZmIudmFyLmJsdWUpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkJCXBhbFtyZWdub10gPQorCQkJCSAgICAoKHJlZCAmIDB4ZjgwMCkgPj4gOCkgfAorCQkJCSAgICAoKGdyZWVuICYgMHhlMDAwKSA+PiAxMykgfAorCQkJCSAgICAoKGdyZWVuICYgMHgxYzAwKSA8PCAzKSB8CisJCQkJICAgICgoYmx1ZSAmIDB4ZjgwMCkgPj4gMyk7CisjZWxzZQorCQkJCXBhbFtyZWdub10gPSB2YWw7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJCQkJdTMyICpwYWwgPSBzZmItPmZiLnBzZXVkb19wYWxldHRlOworCQkJCXZhbCA9IGNoYW5fdG9fZmllbGQocmVkLCAmc2ZiLT5mYi52YXIucmVkKTsKKwkJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgXAorCQkJCQkJJnNmYi0+ZmIudmFyLmdyZWVuKTsKKwkJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmc2ZiLT5mYi52YXIuYmx1ZSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkJdmFsID0KKwkJCQkgICAgKHZhbCAmIDB4ZmYwMGZmMDAgPj4gOCkgfAorCQkJCSAgICAodmFsICYgMHgwMGZmMDBmZiA8PCA4KTsKKyNlbmRpZgorCQkJCXBhbFtyZWdub10gPSB2YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJLyogY29sb3IgZGVwdGggOCBiaXQgKi8KKwkJc203MTJfc2V0cGFsZXR0ZShyZWdubywgcmVkLCBncmVlbiwgYmx1ZSwgaW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CS8qIHVua25vd24gdHlwZSAqLworCX0KKworCXJldHVybiAwOworCit9CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KK3N0YXRpYyBzc2l6ZV90IHNtdGNmYl9yZWFkKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90CisJCQkJY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKworCXUzMiAqYnVmZmVyLCAqZHN0OworCXUzMiBfX2lvbWVtICpzcmM7CisJaW50IGMsIGksIGNudCA9IDAsIGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKCFpbmZvIHx8ICFpbmZvLT5zY3JlZW5fYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybiAtRVBFUk07CisKKwl0b3RhbF9zaXplID0gaW5mby0+c2NyZWVuX3NpemU7CisKKwlpZiAodG90YWxfc2l6ZSA9PSAwKQorCQl0b3RhbF9zaXplID0gaW5mby0+Zml4LnNtZW1fbGVuOworCisJaWYgKHAgPj0gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY291bnQgPj0gdG90YWxfc2l6ZSkKKwkJY291bnQgPSB0b3RhbF9zaXplOworCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisKKwlidWZmZXIgPSBrbWFsbG9jKChjb3VudCA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOiBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJc3JjID0gKHUzMiBfX2lvbWVtICopIChpbmZvLT5zY3JlZW5fYmFzZSArIHApOworCisJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQorCQlpbmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKKworCXdoaWxlIChjb3VudCkgeworCQljID0gKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50OworCQlkc3QgPSBidWZmZXI7CisJCWZvciAoaSA9IGMgPj4gMjsgaS0tOykgeworCQkJKmRzdCA9IGZiX3JlYWRsKHNyYysrKTsKKwkJCSpkc3QgPQorCQkJICAgICgqZHN0ICYgMHhmZjAwZmYwMCA+PiA4KSB8CisJCQkgICAgKCpkc3QgJiAweDAwZmYwMGZmIDw8IDgpOworCQkJZHN0Kys7CisJCX0KKwkJaWYgKGMgJiAzKSB7CisJCQl1OCAqZHN0OCA9ICh1OCAqKSBkc3Q7CisJCQl1OCBfX2lvbWVtICpzcmM4ID0gKHU4IF9faW9tZW0gKikgc3JjOworCisJCQlmb3IgKGkgPSBjICYgMzsgaS0tOykgeworCQkJCWlmIChpICYgMSkgeworCQkJCQkqZHN0OCsrID0gZmJfcmVhZGIoKytzcmM4KTsKKwkJCQl9IGVsc2UgeworCQkJCQkqZHN0OCsrID0gZmJfcmVhZGIoLS1zcmM4KTsKKwkJCQkJc3JjOCArPSAyOworCQkJCX0KKwkJCX0KKwkJCXNyYyA9ICh1MzIgX19pb21lbSAqKSBzcmM4OworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGJ1ZmZlciwgYykpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQkqcHBvcyArPSBjOworCQlidWYgKz0gYzsKKwkJY250ICs9IGM7CisJCWNvdW50IC09IGM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiAoZXJyKSA/IGVyciA6IGNudDsKK30KKworc3RhdGljIHNzaXplX3QKK3NtdGNmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCSAgICAgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOworCisJdTMyICpidWZmZXIsICpzcmM7CisJdTMyIF9faW9tZW0gKmRzdDsKKwlpbnQgYywgaSwgY250ID0gMCwgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CisKKwlpZiAoIWluZm8gfHwgIWluZm8tPnNjcmVlbl9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKKwkJcmV0dXJuIC1FUEVSTTsKKworCXRvdGFsX3NpemUgPSBpbmZvLT5zY3JlZW5fc2l6ZTsKKworCWlmICh0b3RhbF9zaXplID09IDApCisJCXRvdGFsX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW47CisKKwlpZiAocCA+IHRvdGFsX3NpemUpCisJCXJldHVybiAtRUZCSUc7CisKKwlpZiAoY291bnQgPiB0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FRkJJRzsKKwkJY291bnQgPSB0b3RhbF9zaXplOworCX0KKworCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKSB7CisJCWlmICghZXJyKQorCQkJZXJyID0gLUVOT1NQQzsKKworCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOworCX0KKworCWJ1ZmZlciA9IGttYWxsb2MoKGNvdW50ID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6IGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc3QgPSAodTMyIF9faW9tZW0gKikgKGluZm8tPnNjcmVlbl9iYXNlICsgcCk7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCisJCWluZm8tPmZib3BzLT5mYl9zeW5jKGluZm8pOworCisJd2hpbGUgKGNvdW50KSB7CisJCWMgPSAoY291bnQgPiBQQUdFX1NJWkUpID8gUEFHRV9TSVpFIDogY291bnQ7CisJCXNyYyA9IGJ1ZmZlcjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoc3JjLCBidWYsIGMpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGkgPSBjID4+IDI7IGktLTspIHsKKwkJCWZiX3dyaXRlbCgoKnNyYyAmIDB4ZmYwMGZmMDAgPj4gOCkgfAorCQkJCSAgKCpzcmMgJiAweDAwZmYwMGZmIDw8IDgpLCBkc3QrKyk7CisJCQlzcmMrKzsKKwkJfQorCQlpZiAoYyAmIDMpIHsKKwkJCXU4ICpzcmM4ID0gKHU4ICopIHNyYzsKKwkJCXU4IF9faW9tZW0gKmRzdDggPSAodTggX19pb21lbSAqKSBkc3Q7CisKKwkJCWZvciAoaSA9IGMgJiAzOyBpLS07KSB7CisJCQkJaWYgKGkgJiAxKSB7CisJCQkJCWZiX3dyaXRlYigqc3JjOCsrLCArK2RzdDgpOworCQkJCX0gZWxzZSB7CisJCQkJCWZiX3dyaXRlYigqc3JjOCsrLCAtLWRzdDgpOworCQkJCQlkc3Q4ICs9IDI7CisJCQkJfQorCQkJfQorCQkJZHN0ID0gKHUzMiBfX2lvbWVtICopIGRzdDg7CisJCX0KKworCQkqcHBvcyArPSBjOworCQlidWYgKz0gYzsKKwkJY250ICs9IGM7CisJCWNvdW50IC09IGM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiAoY250KSA/IGNudCA6IGVycjsKK30KKyNlbmRpZgkvKiAhIF9fQklHX0VORElBTiAqLworCisjaW5jbHVkZSAic210YzJkLmMiCisKK3ZvaWQgc210Y2ZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKKworCWlmIChzbXRjXzJEYWNjZWxlcmF0aW9uKSB7CisJCWlmICghYXJlYS0+d2lkdGggfHwgIWFyZWEtPmhlaWdodCkKKwkJCXJldHVybjsKKworCQlkZUNvcHkocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKKwkJICAgICAgIGFyZWEtPmR4LCBhcmVhLT5keSwgYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCwKKwkJICAgICAgIHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCBhcmVhLT5zeCwgYXJlYS0+c3ksIDAsIDB4Qyk7CisKKwl9IGVsc2UKKwkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOworfQorCit2b2lkIHNtdGNmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7CisKKwlpZiAoc210Y18yRGFjY2VsZXJhdGlvbikgeworCQlpZiAoIXJlY3QtPndpZHRoIHx8ICFyZWN0LT5oZWlnaHQpCisJCQlyZXR1cm47CisJCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj0gMjQpCisJCQlkZUZpbGxSZWN0KHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCByZWN0LT5keCAqIDMsCisJCQkJICAgcmVjdC0+ZHkgKiAzLCByZWN0LT53aWR0aCAqIDMsIHJlY3QtPmhlaWdodCwKKwkJCQkgICByZWN0LT5jb2xvcik7CisJCWVsc2UKKwkJCWRlRmlsbFJlY3QocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIHJlY3QtPmR4LCByZWN0LT5keSwKKwkJCQkgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5jb2xvcik7CisJfSBlbHNlCisJCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKK30KKwordm9pZCBzbXRjZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7CisJdTMyIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDA7CisKKwlpZiAoKHNtdGNfMkRhY2NlbGVyYXRpb24pICYmIChpbWFnZS0+ZGVwdGggPT0gMSkpIHsKKwkJaWYgKHNtdGNfZGVfYnVzeSkKKwkJCWRlV2FpdEZvck5vdEJ1c3koKTsKKworCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDg6CisJCQliZ19jb2wgPSBpbWFnZS0+YmdfY29sb3I7CisJCQlmZ19jb2wgPSBpbWFnZS0+ZmdfY29sb3I7CisJCQlicmVhazsKKwkJY2FzZSAxNjoKKwkJCWJnX2NvbCA9CisJCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJCWZnX2NvbCA9CisJCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJYmdfY29sID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCQkJZmdfY29sID0KKwkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQkJYnJlYWs7CisJCX0KKworCQlkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoCisJCQlpbWFnZS0+ZGF0YSwKKwkJCWltYWdlLT53aWR0aCAvIDgsCisJCQkwLAorCQkJcC0+QmFzZUFkZHJlc3NJblZSQU0sCisJCQkwLAorCQkJMCwKKwkJCWltYWdlLT5keCwgaW1hZ2UtPmR5LAorCQkJaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LAorCQkJZmdfY29sLCBiZ19jb2wsCisJCQkweDBDKTsKKworCX0gZWxzZQorCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgc210Y2ZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfc2V0Y29scmVnID0gc210Y19zZXRjb2xyZWcsCisJLmZiX2JsYW5rID0gc210Y2ZiX2JsYW5rLAorCS5mYl9maWxscmVjdCA9IHNtdGNmYl9maWxscmVjdCwKKwkuZmJfaW1hZ2VibGl0ID0gc210Y2ZiX2ltYWdlYmxpdCwKKwkuZmJfY29weWFyZWEgPSBzbXRjZmJfY29weWFyZWEsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJLmZiX3JlYWQgPSBzbXRjZmJfcmVhZCwKKwkuZmJfd3JpdGUgPSBzbXRjZmJfd3JpdGUsCisjZW5kaWYKKworfTsKKwordm9pZCBzbXRjZmJfc2V0bW9kZShzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYikKK3sKKwlzd2l0Y2ggKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAzMjoKKwkJc2ZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJc2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSBzZmItPmZiLnZhci54cmVzICogNDsKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gODsKKwkJc2ZiLT5mYi52YXIucmVkLm9mZnNldCA9IDE2OworCQlzZmItPmZiLnZhci5ncmVlbi5vZmZzZXQgPSA4OworCQlzZmItPmZiLnZhci5ibHVlLm9mZnNldCA9IDA7CisKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlzZmItPmZiLmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJCXNmYi0+ZmIuZml4LmxpbmVfbGVuZ3RoID0gc2ZiLT5mYi52YXIueHJlczsKKwkJc2ZiLT5mYi52YXIucmVkLm9mZnNldCA9IDU7CisJCXNmYi0+ZmIudmFyLnJlZC5sZW5ndGggPSAzOworCQlzZmItPmZiLnZhci5ncmVlbi5vZmZzZXQgPSAyOworCQlzZmItPmZiLnZhci5ncmVlbi5sZW5ndGggPSAzOworCQlzZmItPmZiLnZhci5ibHVlLm9mZnNldCA9IDA7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJc2ZiLT5mYi5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJc2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSBzZmItPmZiLnZhci54cmVzICogMzsKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gODsKKworCQlzZmItPmZiLnZhci5yZWQub2Zmc2V0ID0gMTY7CisJCXNmYi0+ZmIudmFyLmdyZWVuLm9mZnNldCA9IDg7CisJCXNmYi0+ZmIudmFyLmJsdWUub2Zmc2V0ID0gMDsKKworCQlicmVhazsKKwljYXNlIDE2OgorCWRlZmF1bHQ6CisJCXNmYi0+ZmIuZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCXNmYi0+ZmIuZml4LmxpbmVfbGVuZ3RoID0gc2ZiLT5mYi52YXIueHJlcyAqIDI7CisKKwkJc2ZiLT5mYi52YXIucmVkLmxlbmd0aCA9IDU7CisJCXNmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDY7CisJCXNmYi0+ZmIudmFyLmJsdWUubGVuZ3RoID0gNTsKKworCQlzZmItPmZiLnZhci5yZWQub2Zmc2V0ID0gMTE7CisJCXNmYi0+ZmIudmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCXNmYi0+ZmIudmFyLmJsdWUub2Zmc2V0ID0gMDsKKworCQlicmVhazsKKwl9CisKKwlody53aWR0aCA9IHNmYi0+ZmIudmFyLnhyZXM7CisJaHcuaGVpZ2h0ID0gc2ZiLT5mYi52YXIueXJlczsKKwlody5oeiA9IDYwOworCXNtdGNfc2V0X3RpbWluZyhzZmIsICZodyk7CisJaWYgKHNtdGNfMkRhY2NlbGVyYXRpb24pIHsKKwkJcHJpbnRrKCIyRCBhY2NlbGVyYXRpb24gZW5hYmxlZCFcbiIpOworCQkvKiBJbml0IHNtdGMgZHJhd2luZyBlbmdpbmUgKi8KKwkJZGVJbml0KHNmYi0+ZmIudmFyLnhyZXMsIHNmYi0+ZmIudmFyLnlyZXMsCisJCQkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpOworCX0KK30KKworLyoKKyAqIEFsbG9jIHN0cnVjdCBzbXRjZmJfaW5mbyBhbmQgYXNzaWduIHRoZSBkZWZhdWx0IHZhbHVlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNtdGNfYWxsb2NfZmJfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJCWNoYXIgKm5hbWUpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisKKwlzZmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc210Y2ZiX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmICghc2ZiKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChzZmIsIDAsIHNpemVvZihzdHJ1Y3Qgc210Y2ZiX2luZm8pKTsKKworCXNmYi0+Y3VycmNvbiA9IC0xOworCXNmYi0+ZGV2ID0gZGV2OworCisJLyoqKiBJbml0IHNmYi0+ZmIgd2l0aCBkZWZhdWx0IHZhbHVlICoqKi8KKwlzZmItPmZiLmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVDsKKwlzZmItPmZiLmZib3BzID0gJnNtdGNmYl9vcHM7CisJc2ZiLT5mYi52YXIgPSBzbXRjZmJfdmFyOworCXNmYi0+ZmIuZml4ID0gc210Y2ZiX2ZpeDsKKworCXN0cmNweShzZmItPmZiLmZpeC5pZCwgbmFtZSk7CisKKwlzZmItPmZiLmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCXNmYi0+ZmIuZml4LnR5cGVfYXV4ID0gMDsKKwlzZmItPmZiLmZpeC54cGFuc3RlcCA9IDA7CisJc2ZiLT5mYi5maXgueXBhbnN0ZXAgPSAwOworCXNmYi0+ZmIuZml4Lnl3cmFwc3RlcCA9IDA7CisJc2ZiLT5mYi5maXguYWNjZWwgPSBGQl9BQ0NFTF9TTUlfTFlOWDsKKworCXNmYi0+ZmIudmFyLm5vbnN0ZCA9IDA7CisJc2ZiLT5mYi52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisJc2ZiLT5mYi52YXIuaGVpZ2h0ID0gLTE7CisJc2ZiLT5mYi52YXIud2lkdGggPSAtMTsKKwkvKiB0ZXh0IG1vZGUgYWNjZWxlcmF0aW9uICovCisJc2ZiLT5mYi52YXIuYWNjZWxfZmxhZ3MgPSBGQl9BQ0NFTEZfVEVYVDsKKwlzZmItPmZiLnZhci52bW9kZSA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7CisJc2ZiLT5mYi5wYXIgPSAmaHc7CisJc2ZiLT5mYi5wc2V1ZG9fcGFsZXR0ZSA9IGNvbHJlZzsKKworCXJldHVybiBzZmI7Cit9CisKKy8qCisgKiBVbm1hcCBpbiB0aGUgbWVtb3J5IG1hcHBlZCBJTyByZWdpc3RlcnMKKyAqLworCitzdGF0aWMgdm9pZCBzbXRjX3VubWFwX21taW8oc3RydWN0IHNtdGNmYl9pbmZvICpzZmIpCit7CisJaWYgKHNmYiAmJiBzbXRjX1JlZ0Jhc2VBZGRyZXNzKQorCQlzbXRjX1JlZ0Jhc2VBZGRyZXNzID0gTlVMTDsKK30KKworLyoKKyAqIE1hcCBpbiB0aGUgc2NyZWVuIG1lbW9yeQorICovCisKK3N0YXRpYyBpbnQgc210Y19tYXBfc21lbShzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiwKKwkJc3RydWN0IHBjaV9kZXYgKmRldiwgdV9sb25nIHNtZW1fbGVuKQoreworCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikgeworI2lmZGVmIF9fQklHX0VORElBTgorCQlzZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkKKwkJCSsgMHg4MDAwMDA7CisjZWxzZQorCQlzZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzZmItPmZiLmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJfQorCisJc2ZiLT5mYi5maXguc21lbV9sZW4gPSBzbWVtX2xlbjsKKworCXNmYi0+ZmIuc2NyZWVuX2Jhc2UgPSBzbXRjX1ZSQU1CYXNlQWRkcmVzczsKKworCWlmICghc2ZiLT5mYi5zY3JlZW5fYmFzZSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5hYmxlIHRvIG1hcCBzY3JlZW4gbWVtb3J5XG4iLAorCQkJCXNmYi0+ZmIuZml4LmlkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbm1hcCBpbiB0aGUgc2NyZWVuIG1lbW9yeQorICoKKyAqLworc3RhdGljIHZvaWQgc210Y191bm1hcF9zbWVtKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiKQoreworCWlmIChzZmIgJiYgc2ZiLT5mYi5zY3JlZW5fYmFzZSkgeworCQlpb3VubWFwKHNmYi0+ZmIuc2NyZWVuX2Jhc2UpOworCQlzZmItPmZiLnNjcmVlbl9iYXNlID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBXZSBuZWVkIHRvIHdha2UgdXAgdGhlIEx5bnhFTSssIGFuZCBtYWtlIHN1cmUgaXRzIGluIGxpbmVhciBtZW1vcnkgbW9kZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNtN3h4X2luaXRfaHcodm9pZCkKK3sKKwlvdXRiX3AoMHgxOCwgMHgzYzQpOworCW91dGJfcCgweDExLCAweDNjNSk7Cit9CisKK3N0YXRpYyB2b2lkIHNtdGNfZnJlZV9mYl9pbmZvKHN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiKQoreworCWlmIChzZmIpIHsKKwkJZmJfYWxsb2NfY21hcCgmc2ZiLT5mYi5jbWFwLCAwLCAwKTsKKwkJa2ZyZWUoc2ZiKTsKKwl9Cit9CisKKy8qCisgKglzbTcxMnZnYV9zZXR1cCAtIHByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGdldCB2Z2EgcGFyYW1ldGVyCisgKglAb3B0aW9uczogc3RyaW5nIG9mIG9wdGlvbnMKKyAqCVJldHVybnMgemVyby4KKyAqCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IF9fbWF5YmVfdW51c2VkIHNtNzEydmdhX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJaW50IGluZGV4OworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykgeworCQlzbWRiZygiXG4gTm8gdmdhIHBhcmFtZXRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMDsKKwlzbXRjX3NjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSAwOworCXNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMDsKKworCXNtZGJnKCJcbnNtNzEydmdhX3NldHVwID0gJXNcbiIsIG9wdGlvbnMpOworCisJZm9yIChpbmRleCA9IDA7CisJICAgICBpbmRleCA8IChzaXplb2YodmVzYV9tb2RlKSAvIHNpemVvZihzdHJ1Y3QgdmVzYV9tb2RlX3RhYmxlKSk7CisJICAgICBpbmRleCsrKSB7CisJCWlmIChzdHJzdHIob3B0aW9ucywgdmVzYV9tb2RlW2luZGV4XS5tb2RlX2luZGV4KSkgeworCQkJc210Y19zY3JlZW5faW5mby5sZmJfd2lkdGggPSB2ZXNhX21vZGVbaW5kZXhdLmxmYl93aWR0aDsKKwkJCXNtdGNfc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9CisJCQkJCXZlc2FfbW9kZVtpbmRleF0ubGZiX2hlaWdodDsKKwkJCXNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gdmVzYV9tb2RlW2luZGV4XS5sZmJfZGVwdGg7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KK19fc2V0dXAoInZnYT0iLCBzbTcxMnZnYV9zZXR1cCk7CisKKy8qIEphc29uICgwOC8xMy8yMDA5KQorICogT3JpZ2luYWwgaW5pdCBmdW5jdGlvbiBjaGFuZ2VkIHRvIHByb2JlIG1ldGhvZCB0byBiZSB1c2VkIGJ5IHBjaV9kcnYKKyAqIHByb2Nlc3MgdXNlZCB0byBkZXRlY3QgY2hpcHMgcmVwbGFjZWQgd2l0aCBrZXJuZWwgcHJvY2VzcyBpbiBwY2lfZHJ2CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNtdGNmYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKKwl1X2xvbmcgc21lbV9zaXplID0gMHgwMDgwMDAwMDsJLyogZGVmYXVsdCA4TUIgKi8KKwljaGFyIG5hbWVbMTZdOworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBwRnJhbWVidWZmZXJQaHlzaWNhbDsKKworCXByaW50ayhLRVJOX0lORk8KKwkJIlNpbGljb24gTW90aW9uIGRpc3BsYXkgZHJpdmVyICIgU01UQ19MSU5VWF9GQl9WRVJTSU9OICJcbiIpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CS8qIGVuYWJsZSBTTVRDIGNoaXAgKi8KKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gLUVOT01FTTsKKworCWh3LmNoaXBJRCA9IGVudC0+ZGV2aWNlOworCXNwcmludGYobmFtZSwgInNtJVhmYiIsIGh3LmNoaXBJRCk7CisKKwlzZmIgPSBzbXRjX2FsbG9jX2ZiX2luZm8ocGRldiwgbmFtZSk7CisKKwlpZiAoIXNmYikKKwkJZ290byBmYWlsZWQ7CisJLyogSmFzb24gKDA4LzEzLzIwMDkpCisJICogU3RvcmUgZmJfaW5mbyB0byBiZSBmdXJ0aGVyIHVzZWQgd2hlbiBzdXNwZW5kaW5nIGFuZCByZXN1bWluZworCSAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzZmIpOworCisJc203eHhfaW5pdF9odygpOworCisJLypnZXQgbW9kZSBwYXJhbWV0ZXIgZnJvbSBzbXRjX3NjcmVlbl9pbmZvICovCisJaWYgKHNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoICE9IDApIHsKKwkJc2ZiLT5mYi52YXIueHJlcyA9IHNtdGNfc2NyZWVuX2luZm8ubGZiX3dpZHRoOworCQlzZmItPmZiLnZhci55cmVzID0gc210Y19zY3JlZW5faW5mby5sZmJfaGVpZ2h0OworCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9IHNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoOworCX0gZWxzZSB7CisJCS8qIGRlZmF1bHQgcmVzb2x1dGlvbiAxMDI0eDYwMCAxNmJpdCBtb2RlICovCisJCXNmYi0+ZmIudmFyLnhyZXMgPSBTQ1JFRU5fWF9SRVM7CisJCXNmYi0+ZmIudmFyLnlyZXMgPSBTQ1JFRU5fWV9SRVM7CisJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gU0NSRUVOX0JQUDsKKwl9CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMjQpCisJCXNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID0gKHNtdGNfc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzIpOworI2VuZGlmCisJLyogTWFwIGFkZHJlc3MgYW5kIG1lbW9yeSBkZXRlY3Rpb24gKi8KKwlwRnJhbWVidWZmZXJQaHlzaWNhbCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZody5jaGlwUmV2SUQpOworCisJc3dpdGNoIChody5jaGlwSUQpIHsKKwljYXNlIDB4NzEwOgorCWNhc2UgMHg3MTI6CisJCXNmYi0+ZmIuZml4Lm1taW9fc3RhcnQgPSBwRnJhbWVidWZmZXJQaHlzaWNhbCArIDB4MDA0MDAwMDA7CisJCXNmYi0+ZmIuZml4Lm1taW9fbGVuID0gMHgwMDQwMDAwMDsKKwkJc21lbV9zaXplID0gU003MTJfVklERU9NRU1PUllTSVpFOworI2lmZGVmIF9fQklHX0VORElBTgorCQlody5tX3BMRkIgPSAoc210Y19WUkFNQmFzZUFkZHJlc3MgPQorCQkgICAgaW9yZW1hcChwRnJhbWVidWZmZXJQaHlzaWNhbCwgMHgwMGMwMDAwMCkpOworI2Vsc2UKKwkJaHcubV9wTEZCID0gKHNtdGNfVlJBTUJhc2VBZGRyZXNzID0KKwkJICAgIGlvcmVtYXAocEZyYW1lYnVmZmVyUGh5c2ljYWwsIDB4MDA4MDAwMDApKTsKKyNlbmRpZgorCQlody5tX3BNTUlPID0gKHNtdGNfUmVnQmFzZUFkZHJlc3MgPQorCQkgICAgc210Y19WUkFNQmFzZUFkZHJlc3MgKyAweDAwNzAwMDAwKTsKKwkJc210Y18yREJhc2VBZGRyZXNzID0gKGh3Lm1fcERQUiA9CisJCSAgICBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIDB4MDA0MDgwMDApOworCQlzbXRjXzJEZGF0YXBvcnQgPSBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIERFX0RBVEFfUE9SVF83MTI7CisJCWh3Lm1fcFZQUiA9IGh3Lm1fcExGQiArIDB4MDA0MGMwMDA7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWlmIChzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9PSAzMikgeworCQkJc210Y19WUkFNQmFzZUFkZHJlc3MgKz0gMHg4MDAwMDA7CisJCQlody5tX3BMRkIgKz0gMHg4MDAwMDA7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJIlxuc210Y19WUkFNQmFzZUFkZHJlc3M9JXAgaHcubV9wTEZCPSVwXG4iLAorCQkJCQlzbXRjX1ZSQU1CYXNlQWRkcmVzcywgaHcubV9wTEZCKTsKKwkJfQorI2VuZGlmCisJCWlmICghc210Y19SZWdCYXNlQWRkcmVzcykgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSIlczogdW5hYmxlIHRvIG1hcCBtZW1vcnkgbWFwcGVkIElPXG4iLAorCQkJCXNmYi0+ZmIuZml4LmlkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogc2V0IE1DTEsgPSAxNC4zMTgxOCAqICgweDE2IC8gMHgyKSAqLworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4NjIsIDB4M2UpOworCQkvKiBlbmFibGUgUENJIGJ1cnN0ICovCisJCXNtdGNfc2VxdygweDE3LCAweDIwKTsKKwkJLyogZW5hYmxlIHdvcmQgc3dhcCAqLworI2lmZGVmIF9fQklHX0VORElBTgorCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpCisJCQlzbXRjX3NlcXcoMHgxNywgMHgzMCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRkJfU003WFhfQUNDRUwKKwkJc210Y18yRGFjY2VsZXJhdGlvbiA9IDE7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSAweDcyMDoKKwkJc2ZiLT5mYi5maXgubW1pb19zdGFydCA9IHBGcmFtZWJ1ZmZlclBoeXNpY2FsOworCQlzZmItPmZiLmZpeC5tbWlvX2xlbiA9IDB4MDAyMDAwMDA7CisJCXNtZW1fc2l6ZSA9IFNNNzIyX1ZJREVPTUVNT1JZU0laRTsKKwkJc210Y18yREJhc2VBZGRyZXNzID0gKGh3Lm1fcERQUiA9CisJCSAgICBpb3JlbWFwKHBGcmFtZWJ1ZmZlclBoeXNpY2FsLCAweDAwYTAwMDAwKSk7CisJCWh3Lm1fcExGQiA9IChzbXRjX1ZSQU1CYXNlQWRkcmVzcyA9CisJCSAgICBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDAwMjAwMDAwKTsKKwkJaHcubV9wTU1JTyA9IChzbXRjX1JlZ0Jhc2VBZGRyZXNzID0KKwkJICAgIHNtdGNfMkRCYXNlQWRkcmVzcyArIDB4MDAwYzAwMDApOworCQlzbXRjXzJEZGF0YXBvcnQgPSBzbXRjXzJEQmFzZUFkZHJlc3MgKyBERV9EQVRBX1BPUlRfNzIyOworCQlody5tX3BWUFIgPSBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDgwMDsKKworCQlzbXRjX3NlcXcoMHg2MiwgMHhmZik7CisJCXNtdGNfc2VxdygweDZhLCAweDBkKTsKKwkJc210Y19zZXF3KDB4NmIsIDB4MDIpOworCQlzbXRjXzJEYWNjZWxlcmF0aW9uID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkiTm8gdmFsaWQgU2lsaWNvbiBNb3Rpb24gZGlzcGxheSBjaGlwIHdhcyBkZXRlY3RlZCFcbiIpOworCisJCXNtdGNfZnJlZV9mYl9pbmZvKHNmYik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogY2FuIHN1cHBvcnQgMzIgYnBwICovCisJaWYgKDE1ID09IHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsKQorCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCA9IDE2OworCisJc2ZiLT5mYi52YXIueHJlc192aXJ0dWFsID0gc2ZiLT5mYi52YXIueHJlczsKKwlzZmItPmZiLnZhci55cmVzX3ZpcnR1YWwgPSBzZmItPmZiLnZhci55cmVzOworCWVyciA9IHNtdGNfbWFwX3NtZW0oc2ZiLCBwZGV2LCBzbWVtX3NpemUpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbGVkOworCisJc210Y2ZiX3NldG1vZGUoc2ZiKTsKKwkvKiBQcmltYXJ5IGRpc3BsYXkgc3RhcnRpbmcgZnJvbSAwIHBvc3Rpb24gKi8KKwlody5CYXNlQWRkcmVzc0luVlJBTSA9IDA7CisJc2ZiLT5mYi5wYXIgPSAmaHc7CisKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmc2ZiLT5mYik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbGVkOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU2lsaWNvbiBNb3Rpb24gU00lWCBSZXYlWCBwcmltYXJ5IGRpc3BsYXkgbW9kZSIKKwkJCSIlZHglZC0lZCBJbml0IENvbXBsZXRlLlxuIiwgaHcuY2hpcElELCBody5jaGlwUmV2SUQsCisJCQlzZmItPmZiLnZhci54cmVzLCBzZmItPmZiLnZhci55cmVzLAorCQkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpOworCisJcmV0dXJuIDA7CisKKyBmYWlsZWQ6CisJcHJpbnRrKEtFUk5fSU5GTyAiU2lsaWNvbiBNb3Rpb24sIEluYy4gIHByaW1hcnkgZGlzcGxheSBpbml0IGZhaWxcbiIpOworCisJc210Y191bm1hcF9zbWVtKHNmYik7CisJc210Y191bm1hcF9tbWlvKHNmYik7CisJc210Y19mcmVlX2ZiX2luZm8oc2ZiKTsKKworCXJldHVybiBlcnI7Cit9CisKKworLyogSmFzb24gKDA4LzExLzIwMDkpIFBDSV9EUlYgd3JhcHBlciBlc3NlbnRpYWwgc3RydWN0cyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNtdGNmYl9wY2lfdGFibGVbXSA9IHsKKwl7MHgxMjZmLCAweDcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTI2ZiwgMHg3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDEyNmYsIDB4NzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MCx9Cit9OworCisKKy8qIEphc29uICgwOC8xNC8yMDA5KQorICogZG8gc29tZSBjbGVhbiB1cCB3aGVuIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHJlbW92ZWQKKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IHNtdGNmYl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCisJc2ZiID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlzbXRjX3VubWFwX3NtZW0oc2ZiKTsKKwlzbXRjX3VubWFwX21taW8oc2ZiKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZzZmItPmZiKTsKKwlzbXRjX2ZyZWVfZmJfaW5mbyhzZmIpOworfQorCisvKiBKYXNvbiAoMDgvMTQvMjAwOSkKKyAqIHN1c3BlbmQgZnVuY3Rpb24sIGNhbGxlZCB3aGVuIHRoZSBzdXNwZW5kIGV2ZW50IGlzIHRyaWdnZXJlZAorICovCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHNtdGNmYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBzbXRjZmJfaW5mbyAqc2ZiOworCWludCByZXR2OworCisJc2ZiID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogc2V0IHRoZSBodyBpbiBzbGVlcCBtb2RlIHVzZSBleHRlcm5lbCBjbG9jayBhbmQgc2VsZiBtZW1vcnkgcmVmcmVzaAorCSAqIHNvIHRoYXQgd2UgY2FuIHR1cm4gb2ZmIGludGVybmFsIFBMTHMgbGF0ZXIgb24KKwkgKi8KKwlzbXRjX3NlcXcoMHgyMCwgKHNtdGNfc2VxcigweDIwKSB8IDB4YzApKTsKKwlzbXRjX3NlcXcoMHg2OSwgKHNtdGNfc2VxcigweDY5KSAmIDB4ZjcpKTsKKworCXN3aXRjaCAobXNnLmV2ZW50KSB7CisJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CisJY2FzZSBQTV9FVkVOVF9QUkVUSEFXOgorCQlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBtc2c7CisJCXJldHVybiAwOworCX0KKworCS8qIHdoZW4gZG9pbmcgc3VzcGVuZCwgY2FsbCBmYiBhcGlzIGFuZCBwY2kgYXBpcyAqLworCWlmIChtc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWZiX3NldF9zdXNwZW5kKCZzZmItPmZiLCAxKTsKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlyZXR2ID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0diA9IHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgbXNnKTsKKwkJcmV0diA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcmV0dik7CisJfQorCisJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbXNnOworCisJLyogYWRkaXRpb25hbHkgdHVybiBvZmYgYWxsIGZ1bmN0aW9uIGJsb2NrcyBpbmNsdWRpbmcgaW50ZXJuYWwgUExMcyAqLworCXNtdGNfc2VxdygweDIxLCAweGZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHNtdGNmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHNtdGNmYl9pbmZvICpzZmI7CisJaW50IHJldHY7CisKKwlzZmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiB3aGVuIHJlc3VtaW5nLCByZXN0b3JlIHBjaSBkYXRhIGFuZCBmYiBjdXJzb3IgKi8KKwlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX0ZSRUVaRSkgeworCQlyZXR2ID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCQlyZXR2ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJCXJldHVybiAtMTsKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJfQorCisJLyogcmVpbml0IGhhcmR3YXJlICovCisJc203eHhfaW5pdF9odygpOworCXN3aXRjaCAoaHcuY2hpcElEKSB7CisJY2FzZSAweDcxMDoKKwljYXNlIDB4NzEyOgorCQkvKiBzZXQgTUNMSyA9IDE0LjMxODE4ICogICgweDE2IC8gMHgyKSAqLworCQlzbXRjX3NlcXcoMHg2YSwgMHgxNik7CisJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKKwkJc210Y19zZXF3KDB4NjIsIDB4M2UpOworCQkvKiBlbmFibGUgUENJIGJ1cnN0ICovCisJCXNtdGNfc2VxdygweDE3LCAweDIwKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKQorCQkJc210Y19zZXF3KDB4MTcsIDB4MzApOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgMHg3MjA6CisJCXNtdGNfc2VxdygweDYyLCAweGZmKTsKKwkJc210Y19zZXF3KDB4NmEsIDB4MGQpOworCQlzbXRjX3NlcXcoMHg2YiwgMHgwMik7CisJCWJyZWFrOworCX0KKworCXNtdGNfc2VxdygweDM0LCAoc210Y19zZXFyKDB4MzQpIHwgMHhjMCkpOworCXNtdGNfc2VxdygweDMzLCAoKHNtdGNfc2VxcigweDMzKSB8IDB4MDgpICYgMHhmYikpOworCisJc210Y2ZiX3NldG1vZGUoc2ZiKTsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMCk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEphc29uICgwOC8xMy8yMDA5KQorICogcGNpX2RyaXZlciBzdHJ1Y3QgdXNlZCB0byB3cmFwIHRoZSBvcmlnaW5hbCBkcml2ZXIKKyAqIHNvIHRoYXQgaXQgY2FuIGJlIHJlZ2lzdGVyZWQgaW50byB0aGUga2VybmVsIGFuZAorICogdGhlIHByb3BlciBtZXRob2Qgd291bGQgYmUgY2FsbGVkIHdoZW4gc3VzcGVuZGluZyBhbmQgcmVzdW1pbmcKKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNtdGNmYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAic210Y2ZiIiwKKwkuaWRfdGFibGUgPSBzbXRjZmJfcGNpX3RhYmxlLAorCS5wcm9iZSA9IHNtdGNmYl9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNtdGNmYl9wY2lfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHNtdGNmYl9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbXRjZmJfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbXRjZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbXRjZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtdGNmYl9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzbXRjZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc210Y2ZiX2luaXQpOworbW9kdWxlX2V4aXQoc210Y2ZiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTaWxpY29ubW90aW9uICIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFNNSSBHcmFwaGljIENhcmRzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyYzM0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtMCwwICsxLDc5MyBAQAorLyoKKyAqIFNpbGljb24gTW90aW9uIFNNNzEyIGZyYW1lIGJ1ZmZlciBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgorICogQXV0aG9yczoJR2UgV2FuZywgZ2V3YW5nQHNpbGljb25tb3Rpb24uY29tCisgKgkgCUJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIFNNVENfTElOVVhfRkJfVkVSU0lPTgkidmVyc2lvbiAwLjExLjI2MTkuMjEuMDEgSnVseSAyNywgMjAwOCIKKworI2RlZmluZSBOUl9QQUxFVFRFICAgICAgICAyNTYKKyNkZWZpbmUgTlJfUkdCICAgICAgICAgICAgMgorCisjZGVmaW5lIEZCX0FDQ0VMX1NNSV9MWU5YIDg4CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgUENfVkdBICAgICAgICAgICAgMAorI2Vsc2UKKyNkZWZpbmUgUENfVkdBICAgICAgICAgICAgMQorI2VuZGlmCisKKyNkZWZpbmUgU0NSRUVOX1hfUkVTICAgICAgMTAyNAorI2RlZmluZSBTQ1JFRU5fWV9SRVMgICAgICA2MDAKKyNkZWZpbmUgU0NSRUVOX0JQUCAgICAgICAgMTYKKworI2lmbmRlZiBGSUVMRF9PRkZTRVQKKyNkZWZpbmUgRklFTERfT0ZTRkVUKHR5cGUsIGZpZWxkKSBcCisJKCh1bnNpZ25lZCBsb25nKSAoUFVDSEFSKSAmICgoKHR5cGUgKikwKS0+ZmllbGQpKQorI2VuZGlmCisKKy8qQXNzdW1lIFNNNzEyIGdyYXBoaWNzIGNoaXAgaGFzIDRNQiBWUkFNICovCisjZGVmaW5lIFNNNzEyX1ZJREVPTUVNT1JZU0laRQkgIDB4MDA0MDAwMDAKKy8qQXNzdW1lIFNNNzIyIGdyYXBoaWNzIGNoaXAgaGFzIDhNQiBWUkFNICovCisjZGVmaW5lIFNNNzIyX1ZJREVPTUVNT1JZU0laRQkgIDB4MDA4MDAwMDAKKworI2RlZmluZSBkYWNfcmVnCSgweDNjOCkKKyNkZWZpbmUgZGFjX3ZhbAkoMHgzYzkpCisKK2V4dGVybiBjaGFyICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOworI2RlZmluZSBzbXRjX21taW93YihkYXQsIHJlZykJd3JpdGViKGRhdCwgc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKyNkZWZpbmUgc210Y19tbWlvd3coZGF0LCByZWcpCXdyaXRldyhkYXQsIHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisjZGVmaW5lIHNtdGNfbW1pb3dsKGRhdCwgcmVnKQl3cml0ZWwoZGF0LCBzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorCisjZGVmaW5lIHNtdGNfbW1pb3JiKHJlZykJcmVhZGIoc210Y19SZWdCYXNlQWRkcmVzcyArIHJlZykKKyNkZWZpbmUgc210Y19tbWlvcncocmVnKQlyZWFkdyhzbXRjX1JlZ0Jhc2VBZGRyZXNzICsgcmVnKQorI2RlZmluZSBzbXRjX21taW9ybChyZWcpCXJlYWRsKHNtdGNfUmVnQmFzZUFkZHJlc3MgKyByZWcpCisKKyNkZWZpbmUgU0laRV9TUjAwX1NSMDQgICAgICAoMHgwNCAtIDB4MDAgKyAxKQorI2RlZmluZSBTSVpFX1NSMTBfU1IyNCAgICAgICgweDI0IC0gMHgxMCArIDEpCisjZGVmaW5lIFNJWkVfU1IzMF9TUjc1ICAgICAgKDB4NzUgLSAweDMwICsgMSkKKyNkZWZpbmUgU0laRV9TUjgwX1NSOTMgICAgICAoMHg5MyAtIDB4ODAgKyAxKQorI2RlZmluZSBTSVpFX1NSQTBfU1JBRiAgICAgICgweEFGIC0gMHhBMCArIDEpCisjZGVmaW5lIFNJWkVfR1IwMF9HUjA4ICAgICAgKDB4MDggLSAweDAwICsgMSkKKyNkZWZpbmUgU0laRV9BUjAwX0FSMTQgICAgICAoMHgxNCAtIDB4MDAgKyAxKQorI2RlZmluZSBTSVpFX0NSMDBfQ1IxOCAgICAgICgweDE4IC0gMHgwMCArIDEpCisjZGVmaW5lIFNJWkVfQ1IzMF9DUjREICAgICAgKDB4NEQgLSAweDMwICsgMSkKKyNkZWZpbmUgU0laRV9DUjkwX0NSQTcgICAgICAoMHhBNyAtIDB4OTAgKyAxKQorI2RlZmluZSBTSVpFX1ZQUgkJKDB4NkMgKyAxKQorI2RlZmluZSBTSVpFX0RQUgkJKDB4NDQgKyAxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc210Y19jcnRjdyhpbnQgcmVnLCBpbnQgdmFsKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzZDQpOworCXNtdGNfbW1pb3diKHZhbCwgMHgzZDUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbXRjX2NydGNyKGludCByZWcpCit7CisJc210Y19tbWlvd2IocmVnLCAweDNkNCk7CisJcmV0dXJuIHNtdGNfbW1pb3JiKDB4M2Q1KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfZ3JwaHcoaW50IHJlZywgaW50IHZhbCkKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2NlKTsKKwlzbXRjX21taW93Yih2YWwsIDB4M2NmKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc210Y19ncnBocihpbnQgcmVnKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzY2UpOworCXJldHVybiBzbXRjX21taW9yYigweDNjZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2F0dHJ3KGludCByZWcsIGludCB2YWwpCit7CisJc210Y19tbWlvcmIoMHgzZGEpOworCXNtdGNfbW1pb3diKHJlZywgMHgzYzApOworCXNtdGNfbW1pb3JiKDB4M2MxKTsKKwlzbXRjX21taW93Yih2YWwsIDB4M2MwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNtdGNfc2VxdyhpbnQgcmVnLCBpbnQgdmFsKQoreworCXNtdGNfbW1pb3diKHJlZywgMHgzYzQpOworCXNtdGNfbW1pb3diKHZhbCwgMHgzYzUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbXRjX3NlcXIoaW50IHJlZykKK3sKKwlzbXRjX21taW93YihyZWcsIDB4M2M0KTsKKwlyZXR1cm4gc210Y19tbWlvcmIoMHgzYzUpOworfQorCisvKiBUaGUgbmV4dCBzdHJ1Y3R1cmUgaG9sZHMgYWxsIGluZm9ybWF0aW9uIHJlbGV2YW50IGZvciBhIHNwZWNpZmljIHZpZGVvIG1vZGUuCisgKi8KKworc3RydWN0IE1vZGVJbml0IHsKKwlpbnQgbW1TaXplWDsKKwlpbnQgbW1TaXplWTsKKwlpbnQgYnBwOworCWludCBoejsKKwl1bnNpZ25lZCBjaGFyIEluaXRfTUlTQzsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1IwMF9TUjA0W1NJWkVfU1IwMF9TUjA0XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1IxMF9TUjI0W1NJWkVfU1IxMF9TUjI0XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1IzMF9TUjc1W1NJWkVfU1IzMF9TUjc1XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1I4MF9TUjkzW1NJWkVfU1I4MF9TUjkzXTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfU1JBMF9TUkFGW1NJWkVfU1JBMF9TUkFGXTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfR1IwMF9HUjA4W1NJWkVfR1IwMF9HUjA4XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQVIwMF9BUjE0W1NJWkVfQVIwMF9BUjE0XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQ1IwMF9DUjE4W1NJWkVfQ1IwMF9DUjE4XTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQ1IzMF9DUjREW1NJWkVfQ1IzMF9DUjREXTsKKwl1bnNpZ25lZCBjaGFyIEluaXRfQ1I5MF9DUkE3W1NJWkVfQ1I5MF9DUkE3XTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkgU003MTIgTW9kZSB0YWJsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IE1vZGVJbml0IFZHQU1vZGVbXSA9IHsKKwl7CisJIC8qICBtb2RlIzA6IDY0MCB4IDQ4MCAgMTZCcHAgIDYwSHogKi8KKwkgNjQwLCA0ODAsIDE2LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEUzLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMCwgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RkYsIDB4QkUsIDB4RUYsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzIsIDB4MDMsIDB4QTAsIDB4MDksIDB4QzAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDMyLCAweDMyLCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MzIsIDB4MzIsIDB4MzIsCisJICAweDA0LCAweDI0LCAweDYzLCAweDRGLCAweDUyLCAweDBCLCAweERGLCAweEVBLAorCSAgMHgwNCwgMHg1MCwgMHgxOSwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDA3LCAweDgyLCAweDA3LCAweDA0LAorCSAgMHgwMCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgzMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4NkYsIDB4N0YsIDB4N0YsIDB4RkYsIDB4MzIsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEVGLCAweEZGLCAweDMyLCAweDMyLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEVGLCAweEZGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweDVGLCAweDRGLCAweDRGLCAweDAwLCAweDUzLCAweDFGLCAweDBCLCAweDNFLAorCSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4REYsIDB4NTAsIDB4NDAsIDB4REYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RTcsIDB4RkYsIDB4RkQsCisJICAweDVGLCAweDRGLCAweDAwLCAweDU0LCAweDAwLCAweDBCLCAweERGLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHgyRSwgMHgwMCwgMHg0RiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTYsIDB4REQsIDB4NUUsIDB4RUEsIDB4ODcsIDB4NDQsIDB4OEYsIDB4NTUsCisJICAweDBBLCAweDhGLCAweDU1LCAweDBBLCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgxMSwgMHgxMCwgMHgwQiwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwQSwgMHgwMCwKKwkgIH0sCisJIH0sCisJeworCSAvKiAgbW9kZSMxOiA2NDAgeCA0ODAgIDI0QnBwICA2MEh6ICovCisJIDY0MCwgNDgwLCAyNCwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFMywKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVGLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDMyLCAweDAzLCAweEEwLCAweDA5LCAweEMwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDMyLCAweDMyLCAweDMyLAorCSAgMHgwNCwgMHgyNCwgMHg2MywgMHg0RiwgMHg1MiwgMHgwQiwgMHhERiwgMHhFQSwKKwkgIDB4MDQsIDB4NTAsIDB4MTksIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzIsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwNywgMHg4MiwgMHgwNywgMHgwNCwKKwkgIDB4MDAsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MzAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDMyLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhFRiwgMHhGRiwgMHgzMiwgMHgzMiwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhGRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg1RiwgMHg0RiwgMHg0RiwgMHgwMCwgMHg1MywgMHgxRiwgMHgwQiwgMHgzRSwKKwkgIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEVBLCAweDBDLCAweERGLCAweDUwLCAweDQwLCAweERGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEZGLCAweEZELAorCSAgMHg1RiwgMHg0RiwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwQiwgMHhERiwgMHgwMCwKKwkgIDB4RUEsIDB4MEMsIDB4MkUsIDB4MDAsIDB4NEYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweERELCAweDVFLCAweEVBLCAweDg3LCAweDQ0LCAweDhGLCAweDU1LAorCSAgMHgwQSwgMHg4RiwgMHg1NSwgMHgwQSwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MTEsIDB4MTAsIDB4MEIsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MDAsCisJICB9LAorCSB9LAorCXsKKwkgLyogIG1vZGUjMDogNjQwIHggNDgwICAzMkJwcCAgNjBIeiAqLworCSA2NDAsIDQ4MCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RTMsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAwLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRiwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzMiwgMHgwMywgMHhBMCwgMHgwOSwgMHhDMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MzIsIDB4MzIsIDB4MzIsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgzMiwgMHgzMiwgMHgzMiwKKwkgIDB4MDQsIDB4MjQsIDB4NjMsIDB4NEYsIDB4NTIsIDB4MEIsIDB4REYsIDB4RUEsCisJICAweDA0LCAweDUwLCAweDE5LCAweDMyLCAweDMyLCAweDAwLCAweDAwLCAweDMyLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDcsIDB4ODIsIDB4MDcsIDB4MDQsCisJICAweDAwLCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDMwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgzMiwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RUYsIDB4RkYsIDB4MzIsIDB4MzIsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4RkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4NUYsIDB4NEYsIDB4NEYsIDB4MDAsIDB4NTMsIDB4MUYsIDB4MEIsIDB4M0UsCisJICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhFQSwgMHgwQywgMHhERiwgMHg1MCwgMHg0MCwgMHhERiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhGRiwgMHhGRCwKKwkgIDB4NUYsIDB4NEYsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MEIsIDB4REYsIDB4MDAsCisJICAweEVBLCAweDBDLCAweDJFLCAweDAwLCAweDRGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHhERCwgMHg1RSwgMHhFQSwgMHg4NywgMHg0NCwgMHg4RiwgMHg1NSwKKwkgIDB4MEEsIDB4OEYsIDB4NTUsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDExLCAweDEwLCAweDBCLCAweDBBLCAweDBBLCAweDBBLCAweDBBLCAweDAwLAorCSAgfSwKKwkgfSwKKworCXsJCQkvKiAgbW9kZSMyOiA4MDAgeCA2MDAgIDE2QnBwICA2MEh6ICovCisJIDgwMCwgNjAwLCAxNiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHgyQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEZGLCAweEJFLCAweEVFLCAweEZGLCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM0LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDI0LCAweDI0LCAweDI0LAorCSAgMHgyNCwgMHgyNCwgMHgyNCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MzgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDI0LCAweDI0LCAweDI0LAorCSAgMHgwNCwgMHg0OCwgMHg4MywgMHg2MywgMHg2OCwgMHg3MiwgMHg1NywgMHg1OCwKKwkgIDB4MDQsIDB4NTUsIDB4NTksIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjQsCisJICAweDAxLCAweDgwLCAweDdBLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgxQywgMHg4NSwgMHgzNSwgMHgxMywKKwkgIDB4MDIsIDB4NDUsIDB4MzAsIDB4MzUsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDZGLCAweDdGLCAweDdGLCAweEZGLCAweDI0LAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgyNCwgMHgyNCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZGLCAweEJGLCAweEZGLCAweEZGLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhCRiwgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHg3RiwgMHg2MywgMHg2MywgMHgwMCwgMHg2OCwgMHgxOCwgMHg3MiwgMHhGMCwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDU4LCAweDBDLCAweDU3LCAweDY0LCAweDQwLCAweDU3LCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEU3LCAweEJGLCAweEZELAorCSAgMHg3RiwgMHg2MywgMHgwMCwgMHg2OSwgMHgxOCwgMHg3MiwgMHg1NywgMHgwMCwKKwkgIDB4NTgsIDB4MEMsIDB4RTAsIDB4MjAsIDB4NjMsIDB4NTcsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU2LCAweDRCLCAweDVFLCAweDU1LCAweDg2LCAweDlELCAweDhFLCAweEFBLAorCSAgMHhEQiwgMHgyQSwgMHhERiwgMHgzMywgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MjAsIDB4MUYsIDB4MUEsIDB4MTksIDB4MEYsIDB4MEYsIDB4MEYsIDB4MDAsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSMzOiA4MDAgeCA2MDAgIDI0QnBwICA2MEh6ICovCisJIDgwMCwgNjAwLCAyNCwgNjAsCisJIDB4MkIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRSwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzNiwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzNiwgMHgzNiwgMHgzNiwKKwkgIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgzNiwgMHgzNiwgMHgzNiwKKwkgIDB4MDQsIDB4NDgsIDB4ODMsIDB4NjMsIDB4NjgsIDB4NzIsIDB4NTcsIDB4NTgsCisJICAweDA0LCAweDU1LCAweDU5LCAweDM2LCAweDM2LCAweDAwLCAweDAwLCAweDM2LAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MUMsIDB4ODUsIDB4MzUsIDB4MTMsCisJICAweDAyLCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgzNiwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RUYsIDB4RkYsIDB4MzYsIDB4MzYsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4N0YsIDB4NjMsIDB4NjMsIDB4MDAsIDB4NjgsIDB4MTgsIDB4NzIsIDB4RjAsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHg1NywgMHg2NCwgMHg0MCwgMHg1NywgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhCRiwgMHhGRCwKKwkgIDB4N0YsIDB4NjMsIDB4MDAsIDB4NjksIDB4MTgsIDB4NzIsIDB4NTcsIDB4MDAsCisJICAweDU4LCAweDBDLCAweEUwLCAweDIwLCAweDYzLCAweDU3LAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHg0QiwgMHg1RSwgMHg1NSwgMHg4NiwgMHg5RCwgMHg4RSwgMHhBQSwKKwkgIDB4REIsIDB4MkEsIDB4REYsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDIwLCAweDFGLCAweDFBLCAweDE5LCAweDBGLCAweDBGLCAweDBGLCAweDAwLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjNzogODAwIHggNjAwICAzMkJwcCAgNjBIeiAqLworCSA4MDAsIDYwMCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4MkIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGRiwgMHhCRSwgMHhFRSwgMHhGRiwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMwLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzNCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgyNCwgMHgyNCwKKwkgIDB4MjQsIDB4MjQsIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDM4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgyNCwgMHgyNCwgMHgyNCwKKwkgIDB4MDQsIDB4NDgsIDB4ODMsIDB4NjMsIDB4NjgsIDB4NzIsIDB4NTcsIDB4NTgsCisJICAweDA0LCAweDU1LCAweDU5LCAweDI0LCAweDI0LCAweDAwLCAweDAwLCAweDI0LAorCSAgMHgwMSwgMHg4MCwgMHg3QSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MUMsIDB4ODUsIDB4MzUsIDB4MTMsCisJICAweDAyLCAweDQ1LCAweDMwLCAweDM1LCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg2RiwgMHg3RiwgMHg3RiwgMHhGRiwgMHgyNCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4MjQsIDB4MjQsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4N0YsIDB4NjMsIDB4NjMsIDB4MDAsIDB4NjgsIDB4MTgsIDB4NzIsIDB4RjAsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1OCwgMHgwQywgMHg1NywgMHg2NCwgMHg0MCwgMHg1NywgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhFNywgMHhCRiwgMHhGRCwKKwkgIDB4N0YsIDB4NjMsIDB4MDAsIDB4NjksIDB4MTgsIDB4NzIsIDB4NTcsIDB4MDAsCisJICAweDU4LCAweDBDLCAweEUwLCAweDIwLCAweDYzLCAweDU3LAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NiwgMHg0QiwgMHg1RSwgMHg1NSwgMHg4NiwgMHg5RCwgMHg4RSwgMHhBQSwKKwkgIDB4REIsIDB4MkEsIDB4REYsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDIwLCAweDFGLCAweDFBLCAweDE5LCAweDBGLCAweDBGLCAweDBGLCAweDAwLAorCSAgfSwKKwkgfSwKKwkvKiBXZSB1c2UgMTAyNHg3NjggdGFibGUgdG8gbGlnaHQgMTAyNHg2MDAgcGFuZWwgZm9yIGxlbW90ZSAqLworCXsJCQkvKiAgbW9kZSM0OiAxMDI0IHggNjAwICAxNkJwcCAgNjBIeiAgKi8KKwkgMTAyNCwgNjAwLCAxNiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDAsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEM4LCAweDQwLCAweDE0LCAweDYwLCAweDAwLCAweDBBLCAweDE3LCAweDIwLAorCSAgMHg1MSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzAsIDB4MDIsIDB4MDAsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDIyLCAweDAzLCAweDI0LCAweDA5LCAweEMwLCAweDIyLCAweDIyLCAweDIyLAorCSAgMHgyMiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDIyLCAweDIyLCAweDIyLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MjIsCisJICAweDAxLCAweDgwLCAweDdBLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHgxNiwgMHgwMiwgMHgwRCwgMHg4MiwgMHgwOSwgMHgwMiwKKwkgIDB4MDQsIDB4NDUsIDB4M0YsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHhBMywgMHg3RiwgMHgwMCwgMHg4MiwgMHgwYiwgMHg2ZiwgMHg1NywgMHgwMCwKKwkgIDB4NWMsIDB4MGYsIDB4RTAsIDB4ZTAsIDB4N0YsIDB4NTcsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorCXsJCQkvKiAgbW9kZSM1OiAxMDI0IHggNzY4ICAyNEJwcCAgNjBIeiAqLworCSAxMDI0LCA3NjgsIDI0LCA2MCwKKwkgLyogIEluaXRfTUlTQyAqLworCSAweEVCLAorCSB7CQkJLyogIEluaXRfU1IwX1NSNCAqLworCSAgMHgwMywgMHgwMSwgMHgwRiwgMHgwMywgMHgwRSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjEwX1NSMjQgKi8KKwkgIDB4RjMsIDB4QjYsIDB4QzAsIDB4REQsIDB4MDAsIDB4MEUsIDB4MTcsIDB4MkMsCisJICAweDk5LCAweDAyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHhDNCwgMHgzMCwgMHgwMiwgMHgwMSwgMHgwMSwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjMwX1NSNzUgKi8KKwkgIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDksIDB4QzAsIDB4M0EsIDB4M0EsIDB4M0EsCisJICAweDNBLCAweDNBLCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDAzLCAweEZGLAorCSAgMHgwMCwgMHhGQywgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHhGQywKKwkgIDB4MjAsIDB4MEMsIDB4NDQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDA2LCAweDY4LCAweEE3LCAweDdGLCAweDgzLCAweDI0LCAweEZGLCAweDAzLAorCSAgMHgwMCwgMHg2MCwgMHg1OSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDEsIDB4ODAsIDB4N0UsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDUwLCAweDAzLCAweDc0LCAweDE0LCAweDNCLCAweDBELCAweDA5LCAweDAyLAorCSAgMHgwNCwgMHg0NSwgMHgzMCwgMHgzMCwgMHg0MCwgMHgyMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUjgwX1NSOTMgKi8KKwkgIDB4RkYsIDB4MDcsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0EsCisJICAweEY3LCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweDNBLCAweDNBLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9TUkEwX1NSQUYgKi8KKwkgIDB4MDAsIDB4RkIsIDB4OUYsIDB4MDEsIDB4MDAsIDB4RUQsIDB4RUQsIDB4RUQsCisJICAweDdCLCAweEZCLCAweEZGLCAweEZGLCAweDk3LCAweEVGLCAweEJGLCAweERGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0dSMDBfR1IwOCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwRiwKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQVIwMF9BUjE0ICovCisJICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKwkgIDB4NDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IwMF9DUjE4ICovCisJICAweEEzLCAweDdGLCAweDdGLCAweDAwLCAweDg1LCAweDE2LCAweDI0LCAweEY1LAorCSAgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4MDMsIDB4MDksIDB4RkYsIDB4ODAsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RTMsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMzBfQ1I0RCAqLworCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4RkYsIDB4QkYsIDB4RkYsCisJICAweEEzLCAweDdGLCAweDAwLCAweDg2LCAweDE1LCAweDI0LCAweEZGLCAweDAwLAorCSAgMHgwMSwgMHgwNywgMHhFNSwgMHgyMCwgMHg3RiwgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjkwX0NSQTcgKi8KKwkgIDB4NTUsIDB4RDksIDB4NUQsIDB4RTEsIDB4ODYsIDB4MUIsIDB4OEUsIDB4MjYsCisJICAweERBLCAweDhELCAweERFLCAweDk0LCAweDAwLCAweDAwLCAweDE4LCAweDAwLAorCSAgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgxNSwgMHgwMywKKwkgIH0sCisJIH0sCisJewkJCS8qICBtb2RlIzQ6IDEwMjQgeCA3NjggIDMyQnBwICA2MEh6ICovCisJIDEwMjQsIDc2OCwgMzIsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGMywgMHhCNiwgMHhDMCwgMHhERCwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMyLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzOCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzQSwgMHgzQSwgMHgzQSwKKwkgIDB4M0EsIDB4M0EsIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4M0IsIDB4MEQsIDB4MDksIDB4MDIsCisJICAweDA0LCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4QTMsIDB4N0YsIDB4MDAsIDB4ODYsIDB4MTUsIDB4MjQsIDB4RkYsIDB4MDAsCisJICAweDAxLCAweDA3LCAweEU1LCAweDIwLCAweDdGLCAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKKwl7CQkJLyogIG1vZGUjNjogMzIwIHggMjQwICAxNkJwcCAgNjBIeiAqLworCSAzMjAsIDI0MCwgMTYsIDYwLAorCSAvKiAgSW5pdF9NSVNDICovCisJIDB4RUIsCisJIHsJCQkvKiAgSW5pdF9TUjBfU1I0ICovCisJICAweDAzLCAweDAxLCAweDBGLCAweDAzLCAweDBFLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMTBfU1IyNCAqLworCSAgMHhGMywgMHhCNiwgMHhDMCwgMHhERCwgMHgwMCwgMHgwRSwgMHgxNywgMHgyQywKKwkgIDB4OTksIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweEM0LCAweDMyLCAweDAyLCAweDAxLCAweDAxLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSMzBfU1I3NSAqLworCSAgMHgzOCwgMHgwMywgMHgyMCwgMHgwOSwgMHhDMCwgMHgzQSwgMHgzQSwgMHgzQSwKKwkgIDB4M0EsIDB4M0EsIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDMsIDB4RkYsCisJICAweDAwLCAweEZDLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweEZDLAorCSAgMHgyMCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQSwKKwkgIDB4MDYsIDB4NjgsIDB4QTcsIDB4N0YsIDB4ODMsIDB4MjQsIDB4RkYsIDB4MDMsCisJICAweDAwLCAweDYwLCAweDU5LCAweDNBLCAweDNBLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwMSwgMHg4MCwgMHg3RSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4NTAsIDB4MDMsIDB4NzQsIDB4MTQsIDB4MDgsIDB4NDMsIDB4MDgsIDB4NDMsCisJICAweDA0LCAweDQ1LCAweDMwLCAweDMwLCAweDQwLCAweDIwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSODBfU1I5MyAqLworCSAgMHhGRiwgMHgwNywgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgzQSwKKwkgIDB4RjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4M0EsIDB4M0EsCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X1NSQTBfU1JBRiAqLworCSAgMHgwMCwgMHhGQiwgMHg5RiwgMHgwMSwgMHgwMCwgMHhFRCwgMHhFRCwgMHhFRCwKKwkgIDB4N0IsIDB4RkIsIDB4RkYsIDB4RkYsIDB4OTcsIDB4RUYsIDB4QkYsIDB4REYsCisJICB9LAorCSB7CQkJLyogIEluaXRfR1IwMF9HUjA4ICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBGLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9BUjAwX0FSMTQgKi8KKwkgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAgMHg0MSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgwMCwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjAwX0NSMTggKi8KKwkgIDB4QTMsIDB4N0YsIDB4N0YsIDB4MDAsIDB4ODUsIDB4MTYsIDB4MjQsIDB4RjUsCisJICAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHgwMywgMHgwOSwgMHhGRiwgMHg4MCwgMHg0MCwgMHhGRiwgMHgwMCwgMHhFMywKKwkgIDB4RkYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1IzMF9DUjREICovCisJICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorCSAgMHgwMCwgMHgwMCwgMHgzMCwgMHg0MCwgMHgwMCwgMHhGRiwgMHhCRiwgMHhGRiwKKwkgIDB4MkUsIDB4MjcsIDB4MDAsIDB4MmIsIDB4MGMsIDB4MEYsIDB4RUYsIDB4MDAsCisJICAweEZlLCAweDBmLCAweDAxLCAweEMwLCAweDI3LCAweEVGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSOTBfQ1JBNyAqLworCSAgMHg1NSwgMHhEOSwgMHg1RCwgMHhFMSwgMHg4NiwgMHgxQiwgMHg4RSwgMHgyNiwKKwkgIDB4REEsIDB4OEQsIDB4REUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsCisJICAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDE1LCAweDAzLAorCSAgfSwKKwkgfSwKKworCXsJCQkvKiAgbW9kZSM4OiAzMjAgeCAyNDAgIDMyQnBwICA2MEh6ICovCisJIDMyMCwgMjQwLCAzMiwgNjAsCisJIC8qICBJbml0X01JU0MgKi8KKwkgMHhFQiwKKwkgewkJCS8qICBJbml0X1NSMF9TUjQgKi8KKwkgIDB4MDMsIDB4MDEsIDB4MEYsIDB4MDMsIDB4MEUsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IxMF9TUjI0ICovCisJICAweEYzLCAweEI2LCAweEMwLCAweERELCAweDAwLCAweDBFLCAweDE3LCAweDJDLAorCSAgMHg5OSwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkgIDB4QzQsIDB4MzIsIDB4MDIsIDB4MDEsIDB4MDEsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1IzMF9TUjc1ICovCisJICAweDM4LCAweDAzLCAweDIwLCAweDA5LCAweEMwLCAweDNBLCAweDNBLCAweDNBLAorCSAgMHgzQSwgMHgzQSwgMHgzQSwgMHgzQSwgMHgwMCwgMHgwMCwgMHgwMywgMHhGRiwKKwkgIDB4MDAsIDB4RkMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4RkMsCisJICAweDIwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDNBLAorCSAgMHgwNiwgMHg2OCwgMHhBNywgMHg3RiwgMHg4MywgMHgyNCwgMHhGRiwgMHgwMywKKwkgIDB4MDAsIDB4NjAsIDB4NTksIDB4M0EsIDB4M0EsIDB4MDAsIDB4MDAsIDB4M0EsCisJICAweDAxLCAweDgwLCAweDdFLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLAorCSAgMHg1MCwgMHgwMywgMHg3NCwgMHgxNCwgMHgwOCwgMHg0MywgMHgwOCwgMHg0MywKKwkgIDB4MDQsIDB4NDUsIDB4MzAsIDB4MzAsIDB4NDAsIDB4MjAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1I4MF9TUjkzICovCisJICAweEZGLCAweDA3LCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDNBLAorCSAgMHhGNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHgzQSwgMHgzQSwKKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICB9LAorCSB7CQkJLyogIEluaXRfU1JBMF9TUkFGICovCisJICAweDAwLCAweEZCLCAweDlGLCAweDAxLCAweDAwLCAweEVELCAweEVELCAweEVELAorCSAgMHg3QiwgMHhGQiwgMHhGRiwgMHhGRiwgMHg5NywgMHhFRiwgMHhCRiwgMHhERiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9HUjAwX0dSMDggKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MEYsCisJICAweEZGLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0FSMDBfQVIxNCAqLworCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJICAweDQxLCAweDAwLCAweDBGLCAweDAwLCAweDAwLAorCSAgfSwKKwkgewkJCS8qICBJbml0X0NSMDBfQ1IxOCAqLworCSAgMHhBMywgMHg3RiwgMHg3RiwgMHgwMCwgMHg4NSwgMHgxNiwgMHgyNCwgMHhGNSwKKwkgIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJICAweDAzLCAweDA5LCAweEZGLCAweDgwLCAweDQwLCAweEZGLCAweDAwLCAweEUzLAorCSAgMHhGRiwKKwkgIH0sCisJIHsJCQkvKiAgSW5pdF9DUjMwX0NSNEQgKi8KKwkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjAsCisJICAweDAwLCAweDAwLCAweDMwLCAweDQwLCAweDAwLCAweEZGLCAweEJGLCAweEZGLAorCSAgMHgyRSwgMHgyNywgMHgwMCwgMHgyYiwgMHgwYywgMHgwRiwgMHhFRiwgMHgwMCwKKwkgIDB4RmUsIDB4MGYsIDB4MDEsIDB4QzAsIDB4MjcsIDB4RUYsCisJICB9LAorCSB7CQkJLyogIEluaXRfQ1I5MF9DUkE3ICovCisJICAweDU1LCAweEQ5LCAweDVELCAweEUxLCAweDg2LCAweDFCLCAweDhFLCAweDI2LAorCSAgMHhEQSwgMHg4RCwgMHhERSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwKKwkgIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MTUsIDB4MDMsCisJICB9LAorCSB9LAorfTsKKworI2RlZmluZSBudW1WR0FNb2RlcwkJKHNpemVvZihWR0FNb2RlKSAvIHNpemVvZihzdHJ1Y3QgTW9kZUluaXQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnCmluZGV4IDgyNWJiYzQuLjA2MWU3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVlQ2NjU1CiAgICB0cmlzdGF0ZSAiVklBIFRlY2hub2xvZ2llcyBWVDY2NTUgc3VwcG9ydCIKLSAgIGRlcGVuZHMgb24gUENJCisgICBkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAgICBzZWxlY3QgV0lSRUxFU1NfRVhUCiAgICBzZWxlY3QgV0VYVF9QUklWCiAgICAtLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcKaW5kZXggODdiY2QyNi4uMTA1NWI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWVDY2NTYKIAl0cmlzdGF0ZSAiVklBIFRlY2hub2xvZ2llcyBWVDY2NTYgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQgorCWRlcGVuZHMgb24gVVNCICYmIFdMQU4KIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCmluZGV4IDdkNzZhN2YuLmFhYTcwZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCX0KIAl9CiAJKm5mY2h1bmtzID0gMDsKLQltZW1zZXQoZmNodW5rLCAwLCBzaXplb2YoZmNodW5rKSk7CisJbWVtc2V0KGZjaHVuaywgMCwgc2l6ZW9mKCpmY2h1bmspKTsKIAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IDQ3M2FhMWEuLmJlM2M5YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC00NCw1ICs0NCwzIEBACiAKIG9iai0kKENPTkZJR19VU0JfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKQkrPSBhdG0vCi0KLW9iai0kKENPTkZJR19VU0JfVUxQSSkJCSs9IG90Zy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDZkYWMzYjguLjA0OTVmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMTU5Nyw3ICsxNTk3LDkgQEAKIH0KIAogLyoqCi0gKiBDaGVjayB3aGV0aGVyIGEgbmV3IGJhbmR3aWR0aCBzZXR0aW5nIGV4Y2VlZHMgdGhlIGJ1cyBiYW5kd2lkdGguCisgKiB1c2JfaGNkX2FsbG9jX2JhbmR3aWR0aCAtIGNoZWNrIHdoZXRoZXIgYSBuZXcgYmFuZHdpZHRoIHNldHRpbmcgZXhjZWVkcworICoJCQkJdGhlIGJ1cyBiYW5kd2lkdGgKKyAqIEB1ZGV2OiB0YXJnZXQgJnVzYl9kZXZpY2UKICAqIEBuZXdfY29uZmlnOiBuZXcgY29uZmlndXJhdGlvbiB0byBpbnN0YWxsCiAgKiBAY3VyX2FsdDogdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nCiAgKiBAbmV3X2FsdDogYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIHRoYXQgaXMgYmVpbmcgaW5zdGFsbGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCAwNmFmOTcwLi4wY2VjNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTE2NTgsMTIgKzE2NTgsMTIgQEAKICNlbmRpZgogCiAvKioKLSAqIHVzYl9jb25maWd1cmVfZGV2aWNlX290ZyAtIEZJWE1FICh1c2Jjb3JlLWludGVybmFsKQorICogdXNiX2VudW1lcmF0ZV9kZXZpY2Vfb3RnIC0gRklYTUUgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAdWRldjogbmV3bHkgYWRkcmVzc2VkIGRldmljZSAoaW4gQUREUkVTUyBzdGF0ZSkKICAqCi0gKiBEbyBjb25maWd1cmF0aW9uIGZvciBPbi1UaGUtR28gZGV2aWNlcworICogRmluaXNoIGVudW1lcmF0aW9uIGZvciBPbi1UaGUtR28gZGV2aWNlcwogICovCi1zdGF0aWMgaW50IHVzYl9jb25maWd1cmVfZGV2aWNlX290ZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3N0YXRpYyBpbnQgdXNiX2VudW1lcmF0ZV9kZXZpY2Vfb3RnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCBlcnIgPSAwOwogCkBAIC0xNzM0LDcgKzE3MzQsNyBAQAogCiAKIC8qKgotICogdXNiX2NvbmZpZ3VyZV9kZXZpY2UgLSBEZXRlY3QgYW5kIHByb2JlIGRldmljZSBpbnRmcy9vdGcgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiB1c2JfZW51bWVyYXRlX2RldmljZSAtIFJlYWQgZGV2aWNlIGNvbmZpZ3MvaW50ZnMvb3RnICh1c2Jjb3JlLWludGVybmFsKQogICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCiAgKgogICogVGhpcyBpcyBvbmx5IGNhbGxlZCBieSB1c2JfbmV3X2RldmljZSgpIGFuZCB1c2JfYXV0aG9yaXplX2RldmljZSgpCkBAIC0xNzQ1LDcgKzE3NDUsNyBAQAogICogdGhlIHN0cmluZyBkZXNjcmlwdG9ycywgYXMgdGhleSB3aWxsIGJlIGVycm9yZWQgb3V0IGJ5IHRoZSBkZXZpY2UKICAqIHVudGlsIGl0IGhhcyBiZWVuIGF1dGhvcml6ZWQuCiAgKi8KLXN0YXRpYyBpbnQgdXNiX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCitzdGF0aWMgaW50IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludCBlcnI7CiAKQEAgLTE3NjksNyArMTc2OSw3IEBACiAJCQkJCQkgICAgICB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpOwogCQl1ZGV2LT5zZXJpYWwgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcik7CiAJfQotCWVyciA9IHVzYl9jb25maWd1cmVfZGV2aWNlX290Zyh1ZGV2KTsKKwllcnIgPSB1c2JfZW51bWVyYXRlX2RldmljZV9vdGcodWRldik7CiBmYWlsOgogCXJldHVybiBlcnI7CiB9CkBAIC0xNzc5LDggKzE3NzksOCBAQAogICogdXNiX25ld19kZXZpY2UgLSBwZXJmb3JtIGluaXRpYWwgZGV2aWNlIHNldHVwICh1c2Jjb3JlLWludGVybmFsKQogICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCiAgKgotICogVGhpcyBpcyBjYWxsZWQgd2l0aCBkZXZpY2VzIHdoaWNoIGhhdmUgYmVlbiBlbnVtZXJhdGVkLCBidXQgbm90IHlldAotICogY29uZmlndXJlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggZGV2aWNlcyB3aGljaCBoYXZlIGJlZW4gZGV0ZWN0ZWQgYnV0IG5vdCBmdWxseQorICogZW51bWVyYXRlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKICAqIGZvciBhbnkgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBsb2NrZWQgZWl0aGVyCiAgKiB0aGUgcGFyZW50IGh1YiAoaWYgdWRldiBpcyBhIG5vcm1hbCBkZXZpY2UpIG9yIGVsc2UgdGhlCiAgKiB1c2JfYnVzX2xpc3RfbG9jayAoaWYgdWRldiBpcyBhIHJvb3QgaHViKS4gIFRoZSBwYXJlbnQncyBwb2ludGVyIHRvCkBAIC0xODAzLDggKzE4MDMsOCBAQAogCWlmICh1ZGV2LT5wYXJlbnQpCiAJCXVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2LT5wYXJlbnQpOwogCi0JdXNiX2RldGVjdF9xdWlya3ModWRldik7CQkvKiBEZXRlcm1pbmUgcXVpcmtzICovCi0JZXJyID0gdXNiX2NvbmZpZ3VyZV9kZXZpY2UodWRldik7CS8qIGRldGVjdCAmIHByb2JlIGRldi9pbnRmcyAqLworCXVzYl9kZXRlY3RfcXVpcmtzKHVkZXYpOworCWVyciA9IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHVkZXYpOwkvKiBSZWFkIGRlc2NyaXB0b3JzICovCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbDsKIAlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1ZGV2ICVkLCBidXNudW0gJWQsIG1pbm9yID0gJWRcbiIsCkBAIC0xODQ5LDIxICsxODQ5LDIzIEBACiAgKi8KIGludCB1c2JfZGVhdXRob3JpemVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQogewotCXVuc2lnbmVkIGNudDsKIAl1c2JfbG9ja19kZXZpY2UodXNiX2Rldik7CiAJaWYgKHVzYl9kZXYtPmF1dGhvcml6ZWQgPT0gMCkKIAkJZ290byBvdXRfdW5hdXRob3JpemVkOworCiAJdXNiX2Rldi0+YXV0aG9yaXplZCA9IDA7CiAJdXNiX3NldF9jb25maWd1cmF0aW9uKHVzYl9kZXYsIC0xKTsKKworCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOwogCXVzYl9kZXYtPnByb2R1Y3QgPSBrc3RyZHVwKCJuL2EgKHVuYXV0aG9yaXplZCkiLCBHRlBfS0VSTkVMKTsKKwlrZnJlZSh1c2JfZGV2LT5tYW51ZmFjdHVyZXIpOwogCXVzYl9kZXYtPm1hbnVmYWN0dXJlciA9IGtzdHJkdXAoIm4vYSAodW5hdXRob3JpemVkKSIsIEdGUF9LRVJORUwpOworCWtmcmVlKHVzYl9kZXYtPnNlcmlhbCk7CiAJdXNiX2Rldi0+c2VyaWFsID0ga3N0cmR1cCgibi9hICh1bmF1dGhvcml6ZWQpIiwgR0ZQX0tFUk5FTCk7Ci0Ja2ZyZWUodXNiX2Rldi0+Y29uZmlnKTsKLQl1c2JfZGV2LT5jb25maWcgPSBOVUxMOwotCWZvciAoY250ID0gMDsgY250IDwgdXNiX2Rldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGNudCsrKQotCQlrZnJlZSh1c2JfZGV2LT5yYXdkZXNjcmlwdG9yc1tjbnRdKTsKKworCXVzYl9kZXN0cm95X2NvbmZpZ3VyYXRpb24odXNiX2Rldik7CiAJdXNiX2Rldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPSAwOwotCWtmcmVlKHVzYl9kZXYtPnJhd2Rlc2NyaXB0b3JzKTsKKwogb3V0X3VuYXV0aG9yaXplZDoKIAl1c2JfdW5sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlyZXR1cm4gMDsKQEAgLTE4NzMsMTUgKzE4NzUsMTEgQEAKIGludCB1c2JfYXV0aG9yaXplX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKIHsKIAlpbnQgcmVzdWx0ID0gMCwgYzsKKwogCXVzYl9sb2NrX2RldmljZSh1c2JfZGV2KTsKIAlpZiAodXNiX2Rldi0+YXV0aG9yaXplZCA9PSAxKQogCQlnb3RvIG91dF9hdXRob3JpemVkOwotCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOwotCXVzYl9kZXYtPnByb2R1Y3QgPSBOVUxMOwotCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7Ci0JdXNiX2Rldi0+bWFudWZhY3R1cmVyID0gTlVMTDsKLQlrZnJlZSh1c2JfZGV2LT5zZXJpYWwpOwotCXVzYl9kZXYtPnNlcmlhbCA9IE5VTEw7CisKIAlyZXN1bHQgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodXNiX2Rldik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycigmdXNiX2Rldi0+ZGV2LApAQCAtMTg5NCwxMCArMTg5MiwxOCBAQAogCQkJImF1dGhvcml6YXRpb246ICVkXG4iLCByZXN1bHQpOwogCQlnb3RvIGVycm9yX2RldmljZV9kZXNjcmlwdG9yOwogCX0KKworCWtmcmVlKHVzYl9kZXYtPnByb2R1Y3QpOworCXVzYl9kZXYtPnByb2R1Y3QgPSBOVUxMOworCWtmcmVlKHVzYl9kZXYtPm1hbnVmYWN0dXJlcik7CisJdXNiX2Rldi0+bWFudWZhY3R1cmVyID0gTlVMTDsKKwlrZnJlZSh1c2JfZGV2LT5zZXJpYWwpOworCXVzYl9kZXYtPnNlcmlhbCA9IE5VTEw7CisKIAl1c2JfZGV2LT5hdXRob3JpemVkID0gMTsKLQlyZXN1bHQgPSB1c2JfY29uZmlndXJlX2RldmljZSh1c2JfZGV2KTsKKwlyZXN1bHQgPSB1c2JfZW51bWVyYXRlX2RldmljZSh1c2JfZGV2KTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcl9jb25maWd1cmU7CisJCWdvdG8gZXJyb3JfZW51bWVyYXRlOwogCS8qIENob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiAgVGhpcyByZWdpc3RlcnMgdGhlIGludGVyZmFjZXMKIAkgKiB3aXRoIHRoZSBkcml2ZXIgY29yZSBhbmQgbGV0cyBpbnRlcmZhY2UgZHJpdmVycyBiaW5kIHRvIHRoZW0uCiAJICovCkBAIC0xOTEyLDggKzE5MTgsMTAgQEAKIAkJfQogCX0KIAlkZXZfaW5mbygmdXNiX2Rldi0+ZGV2LCAiYXV0aG9yaXplZCB0byBjb25uZWN0XG4iKTsKLWVycm9yX2NvbmZpZ3VyZToKKworZXJyb3JfZW51bWVyYXRlOgogZXJyb3JfZGV2aWNlX2Rlc2NyaXB0b3I6CisJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1c2JfZGV2KTsKIGVycm9yX2F1dG9yZXN1bWU6CiBvdXRfYXV0aG9yaXplZDoKIAl1c2JfdW5sb2NrX2RldmljZSh1c2JfZGV2KTsJLy8gY29tcGxlbWVudHMgbG9ja3RyZWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCAxNTQ3NzAwLi40ODVlZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC04Miw5ICs4MiwxMyBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwlpbnQgcmV0dmFsOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAorCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsJCQkJCQlcCisJcmV0dmFsID0gc3ByaW50ZihidWYsICIlc1xuIiwgdWRldi0+bmFtZSk7CQkJXAorCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwkJCQkJXAorCXJldHVybiByZXR2YWw7CQkJCQkJCVwKIH0JCQkJCQkJCQlcCiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCAyZmI0MjA0Li4wZGFmZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTY2LDkgKzY2LDkgQEAKIC8qKgogICogdXNiX2ZpbmRfYWx0X3NldHRpbmcoKSAtIEdpdmVuIGEgY29uZmlndXJhdGlvbiwgZmluZCB0aGUgYWx0ZXJuYXRlIHNldHRpbmcKICAqIGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlLgotICogQGNvbmZpZyAtIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlYXJjaCAobm90IG5lY2Vzc2FyaWx5IHRoZSBjdXJyZW50IGNvbmZpZykuCi0gKiBAaWZhY2VfbnVtIC0gaW50ZXJmYWNlIG51bWJlciB0byBzZWFyY2ggaW4KLSAqIEBhbHRfbnVtIC0gYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIG51bWJlciB0byBzZWFyY2ggZm9yLgorICogQGNvbmZpZzogdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VhcmNoIChub3QgbmVjZXNzYXJpbHkgdGhlIGN1cnJlbnQgY29uZmlnKS4KKyAqIEBpZmFjZV9udW06IGludGVyZmFjZSBudW1iZXIgdG8gc2VhcmNoIGluCisgKiBAYWx0X251bTogYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIG51bWJlciB0byBzZWFyY2ggZm9yLgogICoKICAqIFNlYXJjaCB0aGUgY29uZmlndXJhdGlvbidzIGludGVyZmFjZSBjYWNoZSBmb3IgdGhlIGdpdmVuIGFsdCBzZXR0aW5nLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCmluZGV4IDEyMDZhMjYuLjI5NThhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCisrKyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCkBAIC02MTMsNyArNjEzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRiZ3BfZXh0ZXJuYWxfc3RhcnR1cCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGVoY2lfcmVzZXRfcG9ydChpbnQgcG9ydCkKK3N0YXRpYyBpbnQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQogewogCXUzMiBwb3J0c2M7CiAJdTMyIGRlbGF5X3RpbWUsIGRlbGF5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYwppbmRleCA1OGYyMjAzLi5hNjJhZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYwpAQCAtMTU4LDYgKzE1OCw3IEBACiAKIHN0YXRpYyBpbnQgX19leGl0IGF1ZGlvX3VuYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CisJZ2F1ZGlvX2NsZWFudXAoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKaW5kZXggYzQzYzg5Zi4uZGY3N2Y2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCkBAIC01NiwxMyArNTYsMTYgQEAKIERFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKDIpOwogCiAjZGVmaW5lIFVBQ19EVF9BQ19IRUFERVJfTEVOR1RICVVBQ19EVF9BQ19IRUFERVJfU0laRShGX0FVRElPX05VTV9JTlRFUkZBQ0VTKQorLyogMSBpbnB1dCB0ZXJtaW5hbCwgMSBvdXRwdXQgdGVybWluYWwgYW5kIDEgZmVhdHVyZSB1bml0ICovCisjZGVmaW5lIFVBQ19EVF9UT1RBTF9MRU5HVEggKFVBQ19EVF9BQ19IRUFERVJfTEVOR1RIICsgVUFDX0RUX0lOUFVUX1RFUk1JTkFMX1NJWkUgXAorCSsgVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFICsgVUFDX0RUX0ZFQVRVUkVfVU5JVF9TSVpFKDApKQogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCiBzdGF0aWMgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8yIGFjX2hlYWRlcl9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVBQ19EVF9BQ19IRUFERVJfTEVOR1RILAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfSEVBREVSLAogCS5iY2RBREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCksCisJLndUb3RhbExlbmd0aCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFVBQ19EVF9UT1RBTF9MRU5HVEgpLAogCS5iSW5Db2xsZWN0aW9uID0JRl9BVURJT19OVU1fSU5URVJGQUNFUywKIAkuYmFJbnRlcmZhY2VOciA9IHsKIAkJWzBdID0JCUZfQVVESU9fQUNfSU5URVJGQUNFLApAQCAtMjUyLDEyICsyNTUsMTIgQEAKIAogCWNvcHlfYnVmID0ga3phbGxvYyhzaXplb2YgKmNvcHlfYnVmLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWNvcHlfYnVmKQotCQlyZXR1cm4gKHN0cnVjdCBmX2F1ZGlvX2J1ZiAqKS1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY29weV9idWYtPmJ1ZiA9IGt6YWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghY29weV9idWYtPmJ1ZikgewogCQlrZnJlZShjb3B5X2J1Zik7Ci0JCXJldHVybiAoc3RydWN0IGZfYXVkaW9fYnVmICopLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCiAJcmV0dXJuIGNvcHlfYnVmOwpAQCAtMzMyLDcgKzMzNSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmNvcHlfYnVmLT5saXN0LCAmYXVkaW8tPnBsYXlfcXVldWUpOwogCQlzY2hlZHVsZV93b3JrKCZhdWRpby0+cGxheWJhY2tfd29yayk7CiAJCWNvcHlfYnVmID0gZl9hdWRpb19idWZmZXJfYWxsb2MoYXVkaW9fYnVmX3NpemUpOwotCQlpZiAoY29weV9idWYgPCAwKQorCQlpZiAoSVNfRVJSKGNvcHlfYnVmKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTc2LDYgKzU3OSw4IEBACiAJCQl1c2JfZXBfZW5hYmxlKG91dF9lcCwgYXVkaW8tPm91dF9kZXNjKTsKIAkJCW91dF9lcC0+ZHJpdmVyX2RhdGEgPSBhdWRpbzsKIAkJCWF1ZGlvLT5jb3B5X2J1ZiA9IGZfYXVkaW9fYnVmZmVyX2FsbG9jKGF1ZGlvX2J1Zl9zaXplKTsKKwkJCWlmIChJU19FUlIoYXVkaW8tPmNvcHlfYnVmKSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkJLyoKIAkJCSAqIGFsbG9jYXRlIGEgYnVuY2ggb2YgcmVhZCBidWZmZXJzCkBAIC03ODcsNyArNzkyLDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogCiBhZGRfZmFpbDoKLQlnYXVkaW9fY2xlYW51cCgmYXVkaW8tPmNhcmQpOworCWdhdWRpb19jbGVhbnVwKCk7CiBzZXR1cF9mYWlsOgogCWtmcmVlKGF1ZGlvKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKaW5kZXggODI1MjU5NS4uMzVlMDkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBnYXVkaW8gKnRoZV9jYXJkOwogLyoqCiAgKiBnYXVkaW9fc2V0dXAgLSBzZXR1cCBBTFNBIGludGVyZmFjZSBhbmQgcHJlcGFyaW5nIGZvciBVU0IgdHJhbnNmZXIKICAqCkBAIC0zMDMsNiArMzA0LDkgQEAKIAlpZiAocmV0KQogCQlFUlJPUihjYXJkLCAid2UgbmVlZCBhdCBsZWFzdCBvbmUgY29udHJvbCBkZXZpY2VcbiIpOwogCisJaWYgKCF0aGVfY2FyZCkKKwkJdGhlX2NhcmQgPSBjYXJkOworCiAJcmV0dXJuIHJldDsKIAogfQpAQCAtMzEyLDkgKzMxNiwxMSBAQAogICoKICAqIFRoaXMgaXMgY2FsbGVkIHRvIGZyZWUgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGdhdWRpb19zZXR1cCgpLgogICovCi12b2lkIGdhdWRpb19jbGVhbnVwKHN0cnVjdCBnYXVkaW8gKmNhcmQpCit2b2lkIGdhdWRpb19jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKGNhcmQpCi0JCWdhdWRpb19jbG9zZV9zbmRfZGV2KGNhcmQpOworCWlmICh0aGVfY2FyZCkgeworCQlnYXVkaW9fY2xvc2Vfc25kX2Rldih0aGVfY2FyZCk7CisJCXRoZV9jYXJkID0gTlVMTDsKKwl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5oCmluZGV4IGNjOGQxNTkuLjA4ZmZjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uaApAQCAtNTEsNiArNTEsNiBAQAogfTsKIAogaW50IGdhdWRpb19zZXR1cChzdHJ1Y3QgZ2F1ZGlvICpjYXJkKTsKLXZvaWQgZ2F1ZGlvX2NsZWFudXAoc3RydWN0IGdhdWRpbyAqY2FyZCk7Cit2b2lkIGdhdWRpb19jbGVhbnVwKHZvaWQpOwogCiAjZW5kaWYgLyogX19VX0FVRElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDEyZjFhZDIuLjc0ZDA3ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKIC8qCiAgKiBPTUFQIFVTQkhPU1QgUmVnaXN0ZXIgYWRkcmVzc2VzOiBWSVJUVUFMIEFERFJFU1NFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYwppbmRleCAwMGEyOTg1Li5mZjQzNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktc2NoZWQuYwpAQCAtMzcsNyArMzcsNyBAQAogCXBrdC0+aW5mbyA9IDA7CiAJcGt0LT5wcml2X2RhdGEgPSBOVUxMOwogCi0JY3FfcHV0KHVzYi0+ZXAwLT5lbXB0eV9mcmFtZV9RLCBwa3QpOworCWNxX3B1dCgmdXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EsIHBrdCk7CiB9CiAKIC8qIGNvbmZpcm0gc3VibWl0dGVkIHBhY2tldCAqLwpAQCAtNTcsNyArNTcsNyBAQAogCQlpZiAoKHRkLT5kYXRhICsgdGQtPmFjdHVhbF9sZW4pICYmIHRyYW5zX2xlbikKIAkJCW1lbWNweSh0ZC0+ZGF0YSArIHRkLT5hY3R1YWxfbGVuLCBwa3QtPmRhdGEsCiAJCQkgICAgICAgdHJhbnNfbGVuKTsKLQkJY3FfcHV0KHVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CisJCWNxX3B1dCgmdXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSwgcGt0LT5kYXRhKTsKIAl9CiAKIAlyZWN5Y2xlX2ZyYW1lKHVzYiwgcGt0KTsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCX0KIAogCS8qIHVwZGF0ZSBmcmFtZSBvYmplY3QgZmllbGRzIGJlZm9yZSB0cmFuc21pdHRpbmcgKi8KLQlwa3QgPSBjcV9nZXQodXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EpOworCXBrdCA9IGNxX2dldCgmdXNiLT5lcDAtPmVtcHR5X2ZyYW1lX1EpOwogCWlmICghcGt0KSB7CiAJCWZoY2lfZGJnKHVzYi0+ZmhjaSwgInRoZXJlIGlzIG5vIGVtcHR5IGZyYW1lXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAKIAlwa3QtPmluZm8gPSAwOwogCWlmIChkYXRhID09IE5VTEwpIHsKLQkJZGF0YSA9IGNxX2dldCh1c2ItPmVwMC0+ZHVtbXlfcGFja2V0c19RKTsKKwkJZGF0YSA9IGNxX2dldCgmdXNiLT5lcDAtPmR1bW15X3BhY2tldHNfUSk7CiAJCUJVR19PTighZGF0YSk7CiAJCXBrdC0+aW5mbyA9IFBLVF9EVU1NWV9QQUNLRVQ7CiAJfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCWxpc3RfZGVsX2luaXQoJnRkLT5mcmFtZV9saCk7CiAJCXRkLT5zdGF0dXMgPSBVU0JfVERfT0s7CiAJCWlmIChwa3QtPmluZm8gJiBQS1RfRFVNTVlfUEFDS0VUKQotCQkJY3FfcHV0KHVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CisJCQljcV9wdXQoJnVzYi0+ZXAwLT5kdW1teV9wYWNrZXRzX1EsIHBrdC0+ZGF0YSk7CiAJCXJlY3ljbGVfZnJhbWUodXNiLCBwa3QpOwogCQl1c2ItPmFjdHVhbF9mcmFtZS0+dG90YWxfYnl0ZXMgLT0gKGxlbiArIFBST1RPQ09MX09WRVJIRUFEKTsKIAkJZmhjaV9lcnIodXNiLT5maGNpLCAiaG9zdCB0cmFuc2FjdGlvbiBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCmluZGV4IGI0MDMzMjIuLmQyMjRhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKQEAgLTEwNiwzMyArMTA2LDMzIEBACiAJCQljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT50ZF9iYXNlKSk7CiAKIAkJaWYgKGVwLT5jb25mX2ZyYW1lX1EpIHsKLQkJCXNpemUgPSBjcV9ob3dtYW55KGVwLT5jb25mX2ZyYW1lX1EpOworCQkJc2l6ZSA9IGNxX2hvd21hbnkoJmVwLT5jb25mX2ZyYW1lX1EpOwogCQkJZm9yICg7IHNpemU7IHNpemUtLSkgewotCQkJCXN0cnVjdCBwYWNrZXQgKnBrdCA9IGNxX2dldChlcC0+Y29uZl9mcmFtZV9RKTsKKwkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoJmVwLT5jb25mX2ZyYW1lX1EpOwogCiAJCQkJa2ZyZWUocGt0KTsKIAkJCX0KLQkJCWNxX2RlbGV0ZShlcC0+Y29uZl9mcmFtZV9RKTsKKwkJCWNxX2RlbGV0ZSgmZXAtPmNvbmZfZnJhbWVfUSk7CiAJCX0KIAogCQlpZiAoZXAtPmVtcHR5X2ZyYW1lX1EpIHsKLQkJCXNpemUgPSBjcV9ob3dtYW55KGVwLT5lbXB0eV9mcmFtZV9RKTsKKwkJCXNpemUgPSBjcV9ob3dtYW55KCZlcC0+ZW1wdHlfZnJhbWVfUSk7CiAJCQlmb3IgKDsgc2l6ZTsgc2l6ZS0tKSB7Ci0JCQkJc3RydWN0IHBhY2tldCAqcGt0ID0gY3FfZ2V0KGVwLT5lbXB0eV9mcmFtZV9RKTsKKwkJCQlzdHJ1Y3QgcGFja2V0ICpwa3QgPSBjcV9nZXQoJmVwLT5lbXB0eV9mcmFtZV9RKTsKIAogCQkJCWtmcmVlKHBrdCk7CiAJCQl9Ci0JCQljcV9kZWxldGUoZXAtPmVtcHR5X2ZyYW1lX1EpOworCQkJY3FfZGVsZXRlKCZlcC0+ZW1wdHlfZnJhbWVfUSk7CiAJCX0KIAogCQlpZiAoZXAtPmR1bW15X3BhY2tldHNfUSkgewotCQkJc2l6ZSA9IGNxX2hvd21hbnkoZXAtPmR1bW15X3BhY2tldHNfUSk7CisJCQlzaXplID0gY3FfaG93bWFueSgmZXAtPmR1bW15X3BhY2tldHNfUSk7CiAJCQlmb3IgKDsgc2l6ZTsgc2l6ZS0tKSB7Ci0JCQkJdTggKmJ1ZmYgPSBjcV9nZXQoZXAtPmR1bW15X3BhY2tldHNfUSk7CisJCQkJdTggKmJ1ZmYgPSBjcV9nZXQoJmVwLT5kdW1teV9wYWNrZXRzX1EpOwogCiAJCQkJa2ZyZWUoYnVmZik7CiAJCQl9Ci0JCQljcV9kZWxldGUoZXAtPmR1bW15X3BhY2tldHNfUSk7CisJCQljcV9kZWxldGUoJmVwLT5kdW1teV9wYWNrZXRzX1EpOwogCQl9CiAKIAkJa2ZyZWUoZXApOwpAQCAtMTc1LDEwICsxNzUsOSBAQAogCWVwLT50ZF9iYXNlID0gY3BtX211cmFtX2FkZHIoZXBfb2Zmc2V0KTsKIAogCS8qIHplcm8gYWxsIHF1ZXVlIHBvaW50ZXJzICovCi0JZXAtPmNvbmZfZnJhbWVfUSA9IGNxX25ldyhyaW5nX2xlbiArIDIpOwotCWVwLT5lbXB0eV9mcmFtZV9RID0gY3FfbmV3KHJpbmdfbGVuICsgMik7Ci0JZXAtPmR1bW15X3BhY2tldHNfUSA9IGNxX25ldyhyaW5nX2xlbiArIDIpOwotCWlmICghZXAtPmNvbmZfZnJhbWVfUSB8fCAhZXAtPmVtcHR5X2ZyYW1lX1EgfHwgIWVwLT5kdW1teV9wYWNrZXRzX1EpIHsKKwlpZiAoY3FfbmV3KCZlcC0+Y29uZl9mcmFtZV9RLCByaW5nX2xlbiArIDIpIHx8CisJICAgIGNxX25ldygmZXAtPmVtcHR5X2ZyYW1lX1EsIHJpbmdfbGVuICsgMikgfHwKKwkgICAgY3FfbmV3KCZlcC0+ZHVtbXlfcGFja2V0c19RLCByaW5nX2xlbiArIDIpKSB7CiAJCWVycl9mb3IgPSAiZnJhbWVfcXVldWVzIjsKIAkJZ290byBlcnI7CiAJfQpAQCAtMTk5LDggKzE5OCw4IEBACiAJCQllcnJfZm9yID0gImJ1ZmZlciI7CiAJCQlnb3RvIGVycjsKIAkJfQotCQljcV9wdXQoZXAtPmVtcHR5X2ZyYW1lX1EsIHBrdCk7Ci0JCWNxX3B1dChlcC0+ZHVtbXlfcGFja2V0c19RLCBidWZmKTsKKwkJY3FfcHV0KCZlcC0+ZW1wdHlfZnJhbWVfUSwgcGt0KTsKKwkJY3FfcHV0KCZlcC0+ZHVtbXlfcGFja2V0c19RLCBidWZmKTsKIAl9CiAKIAkvKiB3ZSBwdXQgdGhlIGVuZHBvaW50IHBhcmFtZXRlciBSQU0gcmlnaHQgYmVoaW5kIHRoZSBURCByaW5nICovCkBAIC0zMTksNyArMzE4LDcgQEAKIAkJaWYgKChidWYgPT0gRFVNTVkyX0JEX0JVRkZFUikgJiYgISh0ZF9zdGF0dXMgJiB+VERfVykpCiAJCQljb250aW51ZTsKIAotCQlwa3QgPSBjcV9nZXQoZXAtPmNvbmZfZnJhbWVfUSk7CisJCXBrdCA9IGNxX2dldCgmZXAtPmNvbmZfZnJhbWVfUSk7CiAJCWlmICghcGt0KQogCQkJZmhjaV9lcnIodXNiLT5maGNpLCAibm8gZnJhbWUgdG8gY29uZmlybVxuIik7CiAKQEAgLTQ2MCw5ICs0NTksOSBAQAogCQlvdXRfYmUxNigmdGQtPmxlbmd0aCwgcGt0LT5sZW4pOwogCiAJLyogcHV0IHRoZSBmcmFtZSB0byB0aGUgY29uZmlybWF0aW9uIHF1ZXVlICovCi0JY3FfcHV0KGVwLT5jb25mX2ZyYW1lX1EsIHBrdCk7CisJY3FfcHV0KCZlcC0+Y29uZl9mcmFtZV9RLCBwa3QpOwogCi0JaWYgKGNxX2hvd21hbnkoZXAtPmNvbmZfZnJhbWVfUSkgPT0gMSkKKwlpZiAoY3FfaG93bWFueSgmZXAtPmNvbmZfZnJhbWVfUSkgPT0gMSkKIAkJb3V0XzgoJnVzYi0+ZmhjaS0+cmVncy0+dXNiX2NvbW0sIFVTQl9DTURfU1RSX0ZJRk8pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCmluZGV4IDcxMTYyODQuLjcyZGFlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS5oCkBAIC00MjMsOSArNDIzLDkgQEAKIAlzdHJ1Y3QgdXNiX3RkIF9faW9tZW0gKnRkX2Jhc2U7IC8qIGZpcnN0IFREIGluIHRoZSByaW5nICovCiAJc3RydWN0IHVzYl90ZCBfX2lvbWVtICpjb25mX3RkOyAvKiBuZXh0IFREIGZvciBjb25maXJtIGFmdGVyIHRyYW5zYWMgKi8KIAlzdHJ1Y3QgdXNiX3RkIF9faW9tZW0gKmVtcHR5X3RkOy8qIG5leHQgVEQgZm9yIG5ldyB0cmFuc2FjdGlvbiByZXEuICovCi0Jc3RydWN0IGtmaWZvICplbXB0eV9mcmFtZV9ROyAgLyogRW1wdHkgZnJhbWVzIGxpc3QgdG8gdXNlICovCi0Jc3RydWN0IGtmaWZvICpjb25mX2ZyYW1lX1E7ICAgLyogZnJhbWVzIHBhc3NlZCB0byBURHMsd2FpdGluZyBmb3IgdHggKi8KLQlzdHJ1Y3Qga2ZpZm8gKmR1bW15X3BhY2tldHNfUTsvKiBkdW1teSBwYWNrZXRzIGZvciB0aGUgQ1JDIG92ZXJ1biAqLworCXN0cnVjdCBrZmlmbyBlbXB0eV9mcmFtZV9ROyAgLyogRW1wdHkgZnJhbWVzIGxpc3QgdG8gdXNlICovCisJc3RydWN0IGtmaWZvIGNvbmZfZnJhbWVfUTsgICAvKiBmcmFtZXMgcGFzc2VkIHRvIFREcyx3YWl0aW5nIGZvciB0eCAqLworCXN0cnVjdCBrZmlmbyBkdW1teV9wYWNrZXRzX1E7LyogZHVtbXkgcGFja2V0cyBmb3IgdGhlIENSQyBvdmVydW4gKi8KIAogCWJvb2wgYWxyZWFkeV9wdXNoZWRfZHVtbXlfYmQ7CiB9OwpAQCAtNDkzLDkgKzQ5Myw5IEBACiB9CiAKIC8qIGZpZm8gb2YgcG9pbnRlcnMgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGtmaWZvICpjcV9uZXcoaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBjcV9uZXcoc3RydWN0IGtmaWZvICpmaWZvLCBpbnQgc2l6ZSkKIHsKLQlyZXR1cm4ga2ZpZm9fYWxsb2Moc2l6ZSAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMLCBOVUxMKTsKKwlyZXR1cm4ga2ZpZm9fYWxsb2MoZmlmbywgc2l6ZSAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNxX2RlbGV0ZShzdHJ1Y3Qga2ZpZm8gKmtmaWZvKQpAQCAtNTA1LDE5ICs1MDUsMTkgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3FfaG93bWFueShzdHJ1Y3Qga2ZpZm8gKmtmaWZvKQogewotCXJldHVybiBfX2tmaWZvX2xlbihrZmlmbykgLyBzaXplb2Yodm9pZCAqKTsKKwlyZXR1cm4ga2ZpZm9fbGVuKGtmaWZvKSAvIHNpemVvZih2b2lkICopOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjcV9wdXQoc3RydWN0IGtmaWZvICprZmlmbywgdm9pZCAqcCkKIHsKLQlyZXR1cm4gX19rZmlmb19wdXQoa2ZpZm8sICh2b2lkICopJnAsIHNpemVvZihwKSk7CisJcmV0dXJuIGtmaWZvX2luKGtmaWZvLCAodm9pZCAqKSZwLCBzaXplb2YocCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmNxX2dldChzdHJ1Y3Qga2ZpZm8gKmtmaWZvKQogewogCXZvaWQgKnAgPSBOVUxMOwogCi0JX19rZmlmb19nZXQoa2ZpZm8sICh2b2lkICopJnAsIHNpemVvZihwKSk7CisJa2ZpZm9fb3V0KGtmaWZvLCAodm9pZCAqKSZwLCBzaXplb2YocCkpOwogCXJldHVybiBwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwppbmRleCAxZDhlMzlhLi4xZWI5ZTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKQEAgLTYwLDYgKzYwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhcHBsZWRpc3BsYXlfdGFibGUgW10gPSB7CiAJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxOCkgfSwKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjE5KSB9LAorCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMWMpIH0sCiAJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxZCkgfSwKIAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC03Miw4ICs3Myw4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIHVzYiBkZXZpY2UgKi8KIAlzdHJ1Y3QgdXJiICp1cmI7CQkvKiB1c2IgcmVxdWVzdCBibG9jayAqLwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsJLyogYmFja2xpZ2h0IGRldmljZSAqLwotCWNoYXIgKnVyYmRhdGE7CQkJLyogaW50ZXJydXB0IFVSQiBkYXRhIGJ1ZmZlciAqLwotCWNoYXIgKm1zZ2RhdGE7CQkJLyogY29udHJvbCBtZXNzYWdlIGRhdGEgYnVmZmVyICovCisJdTggKnVyYmRhdGE7CQkJLyogaW50ZXJydXB0IFVSQiBkYXRhIGJ1ZmZlciAqLworCXU4ICptc2dkYXRhOwkJCS8qIGNvbnRyb2wgbWVzc2FnZSBkYXRhIGJ1ZmZlciAqLwogCiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCWludCBidXR0b25fcHJlc3NlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwppbmRleCA2MDJlZTA1Li41OTg2MGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19mdW5jX18sIGVycik7CiAJCQlnb3RvIHdyYXBlcnI7CiAJCX0KLQl9IHdoaWxlIChpID4gMCk7CisJfSB3aGlsZSAocmVjKTsKIAogCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCiAJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBmZTQ5MzRkLi5hZDI2ZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0yOSw2ICsyOSw4IEBACiB7CiAJdm9pZCBfX2lvbWVtICpmaWZvID0gaHdfZXAtPmZpZm87CiAJdm9pZCBfX2lvbWVtICplcGlvID0gaHdfZXAtPnJlZ3M7CisJdTggZXBudW0gPSBod19lcC0+ZXBudW07CisJdTE2IGRtYV9yZWcgPSAwOwogCiAJcHJlZmV0Y2goKHU4ICopc3JjKTsKIApAQCAtMzksNjcgKzQxLDExMyBAQAogCiAJZHVtcF9maWZvX2RhdGEoc3JjLCBsZW4pOwogCi0JaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKXNyYyAmIDB4MDEpKQotCQlvdXRzd184KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKLQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKLQllbHNlCi0JCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKLQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKLX0KKwlpZiAoIUFOT01BTFlfMDUwMDAzODAgJiYgZXBudW0gIT0gMCkgeworCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGludClzcmMsCisJCQkodW5zaWduZWQgaW50KShzcmMgKyBsZW4pKTsKIAorCQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLworCQlkbWFfcmVnID0gKHUxNikgKCh1MzIpIHNyYyAmIDB4RkZGRik7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9MT1cpLCBkbWFfcmVnKTsKKwkJU1NZTkMoKTsKKworCQlkbWFfcmVnID0gKHUxNikgKCgodTMyKSBzcmMgPj4gMTYpICYgMHhGRkZGKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0hJR0gpLCBkbWFfcmVnKTsKKwkJU1NZTkMoKTsKKworCQkvKiBTZXR1cCBETUEgY291bnQgcmVnaXN0ZXIgKi8KKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9MT1cpLCBsZW4pOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NPVU5UX0hJR0gpLCAwKTsKKwkJU1NZTkMoKTsKKworCQkvKiBFbmFibGUgdGhlIERNQSAqLworCQlkbWFfcmVnID0gKGVwbnVtIDw8IDQpIHwgRE1BX0VOQSB8IElOVF9FTkEgfCBESVJFQ1RJT047CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIGRtYV9yZWcpOworCQlTU1lOQygpOworCisJCS8qIFdhaXQgZm9yIGNvbXBlbGV0ZSAqLworCQl3aGlsZSAoIShiZmluX3JlYWRfVVNCX0RNQV9JTlRFUlJVUFQoKSAmICgxIDw8IGVwbnVtKSkpCisJCQljcHVfcmVsYXgoKTsKKworCQkvKiBhY2tub3dsZWRnZSBkbWEgaW50ZXJydXB0ICovCisJCWJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQoMSA8PCBlcG51bSk7CisJCVNTWU5DKCk7CisKKwkJLyogUmVzZXQgRE1BICovCisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIDApOworCQlTU1lOQygpOworCX0gZWxzZSB7CisJCVNTWU5DKCk7CisKKwkJaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKXNyYyAmIDB4MDEpKQorCQkJb3V0c3dfOCgodW5zaWduZWQgbG9uZylmaWZvLCBzcmMsCisJCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOworCQllbHNlCisJCQlvdXRzdygodW5zaWduZWQgbG9uZylmaWZvLCBzcmMsCisJCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOworCisJfQorfQogLyoKICAqIFVubG9hZCBhbiBlbmRwb2ludCdzIEZJRk8KICAqLwogdm9pZCBtdXNiX3JlYWRfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4sIHU4ICpkc3QpCiB7CiAJdm9pZCBfX2lvbWVtICpmaWZvID0gaHdfZXAtPmZpZm87Ci0KLSNpZmRlZiBDT05GSUdfQkY1MngKIAl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKIAl1MTYgZG1hX3JlZyA9IDA7CiAKLQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgaW50KWRzdCwKLQkJKHVuc2lnbmVkIGludCkoZHN0ICsgbGVuKSk7CisJaWYgKEFOT01BTFlfMDUwMDA0NjcgJiYgZXBudW0gIT0gMCkgewogCi0JLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLQlkbWFfcmVnID0gKHUxNikgKCh1MzIpIGRzdCAmIDB4RkZGRik7Ci0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOwotCVNTWU5DKCk7CisJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpZHN0LAorCQkJKHVuc2lnbmVkIGludCkoZHN0ICsgbGVuKSk7CiAKLQlkbWFfcmVnID0gKHUxNikgKCgodTMyKSBkc3QgPj4gMTYpICYgMHhGRkZGKTsKLQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOwotCVNTWU5DKCk7CisJCS8qIFNldHVwIERNQSBhZGRyZXNzIHJlZ2lzdGVyICovCisJCWRtYV9yZWcgPSAodTE2KSAoKHUzMikgZHN0ICYgMHhGRkZGKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOworCQlTU1lOQygpOwogCi0JLyogU2V0dXAgRE1BIGNvdW50IHJlZ2lzdGVyICovCi0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9MT1cpLCBsZW4pOwotCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfSElHSCksIDApOwotCVNTWU5DKCk7CisJCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIGRzdCA+PiAxNikgJiAweEZGRkYpOworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOworCQlTU1lOQygpOwogCi0JLyogRW5hYmxlIHRoZSBETUEgKi8KLQlkbWFfcmVnID0gKGVwbnVtIDw8IDQpIHwgRE1BX0VOQSB8IElOVF9FTkE7Ci0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgZG1hX3JlZyk7Ci0JU1NZTkMoKTsKKwkJLyogU2V0dXAgRE1BIGNvdW50IHJlZ2lzdGVyICovCisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ09VTlRfTE9XKSwgbGVuKTsKKwkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DT1VOVF9ISUdIKSwgMCk7CisJCVNTWU5DKCk7CiAKLQkvKiBXYWl0IGZvciBjb21wZWxldGUgKi8KLQl3aGlsZSAoIShiZmluX3JlYWRfVVNCX0RNQV9JTlRFUlJVUFQoKSAmICgxIDw8IGVwbnVtKSkpCi0JCWNwdV9yZWxheCgpOworCQkvKiBFbmFibGUgdGhlIERNQSAqLworCQlkbWFfcmVnID0gKGVwbnVtIDw8IDQpIHwgRE1BX0VOQSB8IElOVF9FTkE7CisJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQ1RSTCksIGRtYV9yZWcpOworCQlTU1lOQygpOwogCi0JLyogYWNrbm93bGVkZ2UgZG1hIGludGVycnVwdCAqLwotCWJmaW5fd3JpdGVfVVNCX0RNQV9JTlRFUlJVUFQoMSA8PCBlcG51bSk7Ci0JU1NZTkMoKTsKKwkJLyogV2FpdCBmb3IgY29tcGVsZXRlICovCisJCXdoaWxlICghKGJmaW5fcmVhZF9VU0JfRE1BX0lOVEVSUlVQVCgpICYgKDEgPDwgZXBudW0pKSkKKwkJCWNwdV9yZWxheCgpOwogCi0JLyogUmVzZXQgRE1BICovCi0JYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9DVFJMKSwgMCk7Ci0JU1NZTkMoKTsKLSNlbHNlCi0JaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKWRzdCAmIDB4MDEpKQotCQlpbnN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgZHN0LAotCQkJbGVuICYgMHgwMSA/IChsZW4gPj4gMSkgKyAxIDogbGVuID4+IDEpOwotCWVsc2UKLQkJaW5zdygodW5zaWduZWQgbG9uZylmaWZvLCBkc3QsCi0JCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0jZW5kaWYKKwkJLyogYWNrbm93bGVkZ2UgZG1hIGludGVycnVwdCAqLworCQliZmluX3dyaXRlX1VTQl9ETUFfSU5URVJSVVBUKDEgPDwgZXBudW0pOworCQlTU1lOQygpOwogCisJCS8qIFJlc2V0IERNQSAqLworCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0NUUkwpLCAwKTsKKwkJU1NZTkMoKTsKKwl9IGVsc2UgeworCQlTU1lOQygpOworCQkvKiBSZWFkIHRoZSBsYXN0IGJ5dGUgb2YgcGFja2V0IHdpdGggb2RkIHNpemUgZnJvbSBhZGRyZXNzIGZpZm8gKyA0CisJCSAqIHRvIHRyaWdnZXIgMSBieXRlIGFjY2VzcyB0byBFUDAgRklGTy4KKwkJICovCisJCWlmIChsZW4gPT0gMSkKKwkJCSpkc3QgPSAodTgpaW53KCh1bnNpZ25lZCBsb25nKWZpZm8gKyA0KTsKKwkJZWxzZSB7CisJCQlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMHgwMSkpCisJCQkJaW5zd184KCh1bnNpZ25lZCBsb25nKWZpZm8sIGRzdCwgbGVuID4+IDEpOworCQkJZWxzZQorCQkJCWluc3coKHVuc2lnbmVkIGxvbmcpZmlmbywgZHN0LCBsZW4gPj4gMSk7CisKKwkJCWlmIChsZW4gJiAweDAxKQorCQkJCSooZHN0ICsgbGVuIC0gMSkgPSAodTgpaW53KCh1bnNpZ25lZCBsb25nKWZpZm8gKyA0KTsKKwkJfQorCX0KIAlEQkcoNCwgIiVjWCBlcCVkIGZpZm8gJXAgY291bnQgJWQgYnVmICVwXG4iLAogCQkJJ1InLCBod19lcC0+ZXBudW0sIGZpZm8sIGxlbiwgZHN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5oIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5oCmluZGV4IDEwYjdkNzUuLmJkOTM1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmgKQEAgLTY5LDcgKzY5LDYgQEAKICNkZWZpbmUgZHVtcF9maWZvX2RhdGEoYnVmLCBsZW4pCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQkY1MngKIAogI2RlZmluZSBVU0JfRE1BX0JBU0UJCVVTQl9ETUFfSU5URVJSVVBUCiAjZGVmaW5lIFVTQl9ETUF4X0NUUkwJCTB4MDQKQEAgLTc5LDcgKzc4LDYgQEAKICNkZWZpbmUgVVNCX0RNQXhfQ09VTlRfSElHSAkweDE0CiAKICNkZWZpbmUgVVNCX0RNQV9SRUcoZXAsIHJlZykJKFVTQl9ETUFfQkFTRSArIDB4MjAgKiBlcCArIHJlZykKLSNlbmRpZgogCiAvKiBBbG1vc3QgMSBzZWNvbmQgKi8KICNkZWZpbmUgVElNRVJfREVMQVkJKDEgKiBIWikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwppbmRleCBlZjIzMzJhLi5hNDRhNDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCkBAIC0xMTU0LDggKzExNTQsMTEgQEAKIAlzdHJ1Y3QgbXVzYl9od19lcAkqaHdfZXAgPSBOVUxMOwogCXUzMgkJCXJ4LCB0eDsKIAlpbnQJCQlpLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCWNwcGkgPSBjb250YWluZXJfb2YobXVzYi0+ZG1hX2NvbnRyb2xsZXIsIHN0cnVjdCBjcHBpLCBjb250cm9sbGVyKTsKKwlpZiAoY3BwaS0+aXJxKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJdGliYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCkBAIC0xMjg1LDYgKzEyODgsOSBAQAogCS8qIHdyaXRlIHRvIENQUEkgRU9JIHJlZ2lzdGVyIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCiAJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX0NQUElfRU9JX1JFRywgMCk7CiAKKwlpZiAoY3BwaS0+aXJxKQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggZTE2ZmY2MC4uNjY5MTM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCi0jZGVmaW5lIEdQSU9fblZCVVNfRFJWCQkxNDQKKyNkZWZpbmUgR1BJT19uVkJVU19EUlYJCTE2MAogI2VuZGlmCiAKICNpbmNsdWRlICJkYXZpbmNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCBiZmUwOGY0Li41ZWI5MzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTEzMTksNyArMTMxOSw3IEBACiAjZW5kaWYKIAl1OCByZWc7CiAJY2hhciAqdHlwZTsKLQljaGFyIGFJbmZvWzc4XSwgYVJldmlzaW9uWzMyXSwgYURhdGVbMTJdOworCWNoYXIgYUluZm9bOTBdLCBhUmV2aXNpb25bMzJdLCBhRGF0ZVsxMl07CiAJdm9pZCBfX2lvbWVtCSptYmFzZSA9IG11c2ItPm1yZWdzOwogCWludAkJc3RhdHVzID0gMDsKIAlpbnQJCWk7CkBAIC0xNTIxLDYgKzE1MjEsMTQgQEAKIAkJKGRldmN0bCAmIE1VU0JfREVWQ1RMX0hNKSA/ICJob3N0IiA6ICJwZXJpcGhlcmFsIiwKIAkJbXVzYi0+aW50X3VzYiwgbXVzYi0+aW50X3R4LCBtdXNiLT5pbnRfcngpOwogCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCisJaWYgKGlzX290Z19lbmFibGVkKG11c2IpIHx8IGlzX3BlcmlwaGVyYWxfZW5hYmxlZChtdXNiKSkKKwkJaWYgKCFtdXNiLT5nYWRnZXRfZHJpdmVyKSB7CisJCQlEQkcoNSwgIk5vIGdhZGdldCBkcml2ZXIgbG9hZGVkXG4iKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorI2VuZGlmCisKIAkvKiB0aGUgY29yZSBjYW4gaW50ZXJydXB0IHVzIGZvciBtdWx0aXBsZSByZWFzb25zOyBkb2NzIGhhdmUKIAkgKiBhIGdlbmVyaWMgaW50ZXJydXB0IGZsb3djaGFydCB0byBmb2xsb3cKIAkgKi8KQEAgLTIxMzksNyArMjE0Nyw3IEBACiAJcmV0dXJuIG11c2JfaW5pdF9jb250cm9sbGVyKGRldiwgaXJxLCBiYXNlKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgbXVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19leGl0IG11c2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG11c2IJKm11c2IgPSBkZXZfdG9fbXVzYigmcGRldi0+ZGV2KTsKIAl2b2lkIF9faW9tZW0JKmN0cmxfYmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKQEAgLTIyMzEsNyArMjIzOSw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBtCQk9IE1VU0JfREVWX1BNX09QUywKIAl9LAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXVzYl9yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19leGl0X3AobXVzYl9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IG11c2Jfc2h1dGRvd24sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggYzQ5YjliYS4uY2JjZjE0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTMwOSw3ICszMDksNyBAQAogCQkJc2l6ZV90IHJlcXVlc3Rfc2l6ZTsKIAogCQkJLyogc2V0dXAgRE1BLCB0aGVuIHByb2dyYW0gZW5kcG9pbnQgQ1NSICovCi0JCQlyZXF1ZXN0X3NpemUgPSBtaW4ocmVxdWVzdC0+bGVuZ3RoLAorCQkJcmVxdWVzdF9zaXplID0gbWluX3Qoc2l6ZV90LCByZXF1ZXN0LT5sZW5ndGgsCiAJCQkJCQltdXNiX2VwLT5kbWEtPm1heF9sZW4pOwogCQkJaWYgKHJlcXVlc3Rfc2l6ZSA8IG11c2JfZXAtPnBhY2tldF9zeikKIAkJCQltdXNiX2VwLT5kbWEtPmRlc2lyZWRfbW9kZSA9IDA7CkBAIC0zMTksNyArMzE5LDcgQEAKIAkJCXVzZV9kbWEgPSB1c2VfZG1hICYmIGMtPmNoYW5uZWxfcHJvZ3JhbSgKIAkJCQkJbXVzYl9lcC0+ZG1hLCBtdXNiX2VwLT5wYWNrZXRfc3osCiAJCQkJCW11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlLAotCQkJCQlyZXF1ZXN0LT5kbWEsIHJlcXVlc3Rfc2l6ZSk7CisJCQkJCXJlcXVlc3QtPmRtYSArIHJlcXVlc3QtPmFjdHVhbCwgcmVxdWVzdF9zaXplKTsKIAkJCWlmICh1c2VfZG1hKSB7CiAJCQkJaWYgKG11c2JfZXAtPmRtYS0+ZGVzaXJlZF9tb2RlID09IDApIHsKIAkJCQkJLyoKQEAgLTUxNSwxMiArNTE1LDEyIEBACiAJCQlpZiAoY3NyICYgTVVTQl9UWENTUl9GSUZPTk9URU1QVFkpCiAJCQkJcmV0dXJuOwogCi0JCQlpZiAoIW11c2JfZXAtPmRlc2MpIHsKKwkJCXJlcXVlc3QgPSBtdXNiX2VwLT5kZXNjID8gbmV4dF9yZXF1ZXN0KG11c2JfZXApIDogTlVMTDsKKwkJCWlmICghcmVxdWVzdCkgewogCQkJCURCRyg0LCAiJXMgaWRsZSBub3dcbiIsCiAJCQkJCW11c2JfZXAtPmVuZF9wb2ludC5uYW1lKTsKIAkJCQlyZXR1cm47Ci0JCQl9IGVsc2UKLQkJCQlyZXF1ZXN0ID0gbmV4dF9yZXF1ZXN0KG11c2JfZXApOworCQkJfQogCQl9CiAKIAkJdHhzdGF0ZShtdXNiLCB0b19tdXNiX3JlcXVlc3QocmVxdWVzdCkpOwpAQCAtNzQ2LDYgKzc0Niw4IEBACiAJbXVzYl9lcF9zZWxlY3QobWJhc2UsIGVwbnVtKTsKIAogCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3QobXVzYl9lcCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm47CiAKIAljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOwogCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBtdXNiX2VwLT5kbWEgOiBOVUxMOwpAQCAtMTczMSw2ICsxNzMzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAogCQlvdGdfc2V0X3BlcmlwaGVyYWwobXVzYi0+eGNlaXYsICZtdXNiLT5nKTsKKwkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKIAkJbXVzYi0+aXNfYWN0aXZlID0gMTsKIAogCQkvKiBGSVhNRSB0aGlzIGlnbm9yZXMgdGhlIHNvZnRjb25uZWN0IGZsYWcuICBEcml2ZXJzIGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKaW5kZXggOGZiYTNmMS4uNTNkMDY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJCW11c2ItPmVwMF9zdGF0ZSA9IE1VU0JfRVAwX1NUQUdFX1NUQVRVU0lOOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlFUlIoIlNldHVwRW5kIGNhbWUgaW4gYSB3cm9uZyBlcDBzdGFnZSAlcyIsCisJCQlFUlIoIlNldHVwRW5kIGNhbWUgaW4gYSB3cm9uZyBlcDBzdGFnZSAlc1xuIiwKIAkJCSAgICBkZWNvZGVfZXAwc3RhZ2UobXVzYi0+ZXAwX3N0YXRlKSk7CiAJCX0KIAkJY3NyID0gbXVzYl9yZWFkdyhyZWdzLCBNVVNCX0NTUjApOwpAQCAtNzg3LDEyICs3ODcsMTggQEAKIAkJCQloYW5kbGVkID0gc2VydmljZV96ZXJvX2RhdGFfcmVxdWVzdCgKIAkJCQkJCW11c2IsICZzZXR1cCk7CiAKKwkJCQkvKgorCQkJCSAqIFdlJ3JlIGV4cGVjdGluZyBubyBkYXRhIGluIGFueSBjYXNlLCBzbworCQkJCSAqIGFsd2F5cyBzZXQgdGhlIERBVEFFTkQgYml0IC0tIGRvaW5nIHRoaXMKKwkJCQkgKiBoZXJlIGhlbHBzIGF2b2lkIFNldHVwRW5kIGludGVycnVwdCBjb21pbmcKKwkJCQkgKiBpbiB0aGUgaWRsZSBzdGFnZSB3aGVuIHdlJ3JlIHN0YWxsaW5nLi4uCisJCQkJICovCisJCQkJbXVzYi0+YWNrcGVuZCB8PSBNVVNCX0NTUjBfUF9EQVRBRU5EOworCiAJCQkJLyogc3RhdHVzIHN0YWdlIG1pZ2h0IGJlIGltbWVkaWF0ZSAqLwotCQkJCWlmIChoYW5kbGVkID4gMCkgewotCQkJCQltdXNiLT5hY2twZW5kIHw9IE1VU0JfQ1NSMF9QX0RBVEFFTkQ7CisJCQkJaWYgKGhhbmRsZWQgPiAwKQogCQkJCQltdXNiLT5lcDBfc3RhdGUgPQogCQkJCQkJTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47Ci0JCQkJfQogCQkJCWJyZWFrOwogCiAJCQkvKiBzZXF1ZW5jZSAjMSAoSU4gdG8gaG9zdCksIGluY2x1ZGVzIEdFVF9TVEFUVVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwppbmRleCBkNTQ0NjBhLi43OGEyMDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCkBAIC04NDMsNyArODQzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm90Z19kZXY7CiAKLXN0YXRpYyBpbnQgb3RnX2luaXQoc3RydWN0IGlzcDEzMDEgKmlzcCkKK3N0YXRpYyBpbnQgaXNwMTMwMV9vdGdfaW5pdChzdHJ1Y3QgaXNwMTMwMSAqaXNwKQogewogCXUzMiBsOwogCkBAIC0xMjc1LDcgKzEyNzUsNyBAQAogc3RhdGljIGludCBpc3AxMzAxX290Z19lbmFibGUoc3RydWN0IGlzcDEzMDEgKmlzcCkKIHsKIAlwb3dlcl91cChpc3ApOwotCW90Z19pbml0KGlzcCk7CisJaXNwMTMwMV9vdGdfaW5pdChpc3ApOwogCiAJLyogTk9URTogIHNpbmNlIHdlIGRvbid0IGNoYW5nZSB0aGlzLCB0aGlzIHByb3ZpZGVzCiAJICogYSBmZXcgbW9yZSBpbnRlcnJ1cHRzIHRoYW4gYXJlIHN0cmljdGx5IG5lZWRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggZjk5NDk4Zi4uMjE2ZjE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSAiZnRkaV9zaW8uaCIKKyNpbmNsdWRlICJmdGRpX3Npb19pZHMuaCIKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggNDU4NmEyNC4uYjBlMGQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTEsNyArMSwxMCBAQAogLyoKLSAqIERlZmluaXRpb25zIGZvciB0aGUgRlRESSBVU0IgU2luZ2xlIFBvcnQgU2VyaWFsIENvbnZlcnRlciAtCisgKiBEcml2ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0KICAqIGtub3duIGFzIEZURElfU0lPIChTZXJpYWwgSW5wdXQvT3V0cHV0IGFwcGxpY2F0aW9uIG9mIHRoZSBjaGlwc2V0KQogICoKKyAqIEZvciBVU0IgdmVuZG9yL3Byb2R1Y3QgSURzIChWSUQvUElEKSwgcGxlYXNlIHNlZSBmdGRpX3Npb19pZHMuaAorICoKKyAqCiAgKiBUaGUgZXhhbXBsZSBJIGhhdmUgaXMga25vd24gYXMgdGhlIFVTQy0xMDAwIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tCiAgKiBodHRwOi8vd3d3LmRzZS5jby5ueiAtIGNhdCBubyBYSDQyMTQgSXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOgogICogaHR0cDovL3d3dy5kYW5zZGF0YS5jb20vdXNic2VyLmh0bSBidXQgSSBjYW4ndCBiZSBzdXJlIFRoZXJlIGFyZSBvdGhlcgpAQCAtMTcsODgxICsyMCw4IEBACiAgKiBCaWxsIFJ5ZGVyIC0gYnJ5ZGVyQHNnaS5jb20gZm9ybWVybHkgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLi0gd3JvdGUgdGhlCiAgKiBGVERJX1NJTyBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBQaGlsaXBwIEfDvGhyaW5nIC0gcGdAZnV0dXJld2FyZS5hdCAtIGFkZGVkIHRoZSBEZXZpY2UgSUQgb2YgdGhlIFVTQiByZWxhaXMKLSAqIGZyb20gUnVkb2xmIEd1Z2xlcgotICoKICAqLwogCi0jZGVmaW5lIEZURElfVklECTB4MDQwMwkvKiBWZW5kb3IgSWQgKi8KLSNkZWZpbmUgRlRESV9TSU9fUElECTB4ODM3MgkvKiBQcm9kdWN0IElkIFNJTyBhcHBsaWNhdGlvbiBvZiA4VTEwMEFYICAqLwotI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KLSNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9QSUQgMHg2MDA2IC8qIEZUREkncyBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLwotI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCi0jZGVmaW5lIEZURElfMjMyUkxfUElEICAweEZCRkEgIC8qIFByb2R1Y3QgSUQgZm9yIEZUMjMyUkwgKi8KLSNkZWZpbmUgRlRESV80MjMySF9QSUQgMHg2MDExIC8qIFF1YWQgY2hhbm5lbCBoaS1zcGVlZCBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9SRUxBSVNfUElECTB4RkExMCAgLyogUmVsYWlzIGRldmljZSBmcm9tIFJ1ZG9sZiBHdWdsZXIgKi8KLSNkZWZpbmUgRlRESV9ORl9SSUNfVklECTB4MERDRAkvKiBWZW5kb3IgSWQgKi8KLSNkZWZpbmUgRlRESV9ORl9SSUNfUElECTB4MDAwMQkvKiBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfVVNCWF83MDdfUElEIDB4Rjg1NwkvKiBBRFNUZWNoIElSIEJsYXN0ZXIgVVNCWC03MDcgKi8KLQotLyogTGFyc2VuIGFuZCBCcnVzZ2FhcmQgQWx0aVRyYWNrL1VTQnRyYWNrICAqLwotI2RlZmluZSBMQVJTRU5CUlVTR0FBUkRfVklECQkweDBGRDgKLSNkZWZpbmUgTEJfQUxUSVRSQUNLX1BJRAkJMHgwMDAxCi0KLS8qIHd3dy5jYW51c2IuY29tIExhd2ljZWwgQ0FOVVNCIGRldmljZSAqLwotI2RlZmluZSBGVERJX0NBTlVTQl9QSUQgMHhGRkE4IC8qIFByb2R1Y3QgSWQgKi8KLQotLyogQWxwaGFNaWNybyBDb21wb25lbnRzIEFNQy0yMzJVU0IwMSBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9BTUMyMzJfUElEIDB4RkYwMCAvKiBQcm9kdWN0IElkICovCi0KLS8qIHd3dy5jYW5kYXB0ZXIuY29tIEV3ZXJ0IEVuZXJneSBTeXN0ZW1zIENBTmRhcHRlciBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9DQU5EQVBURVJfUElEIDB4OUY4MCAvKiBQcm9kdWN0IElkICovCi0KLS8qIFNDUyBIRiBSYWRpbyBNb2RlbXMgUElEJ3MgKGh0dHA6Ly93d3cuc2NzLXB0Yy5jb20pICovCi0vKiB0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpICovCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8wX1BJRCAweEQwMTAgICAgLyogU0NTIFBUQy1JSXVzYiAqLwotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfMV9QSUQgMHhEMDExICAgIC8qIFNDUyBUcmFja2VyIC8gRFNQIFROQyAqLwotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfMl9QSUQgMHhEMDEyCi0jZGVmaW5lIEZURElfU0NTX0RFVklDRV8zX1BJRCAweEQwMTMKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzRfUElEIDB4RDAxNAotI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNV9QSUQgMHhEMDE1Ci0jZGVmaW5lIEZURElfU0NTX0RFVklDRV82X1BJRCAweEQwMTYKLSNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzdfUElEIDB4RDAxNwotCi0vKiBBQ1QgU29sdXRpb25zIEhvbWVQcm8gWldhdmUgaW50ZXJmYWNlIChodHRwOi8vd3d3LmFjdC1zb2x1dGlvbnMuY29tL0hvbWVQcm8uaHRtKSAqLwotI2RlZmluZSBGVERJX0FDVFpXQVZFX1BJRAkweEYyRDAKLQotCi0vKiB3d3cuc3RhcnRpbmctcG9pbnQtc3lzdGVtcy5jb20gwrVDaGFtZWxlb24gZGV2aWNlICovCi0jZGVmaW5lIEZURElfTUlDUk9fQ0hBTUVMRU9OX1BJRAkweENBQTAJLyogUHJvZHVjdCBJZCAqLwotCi0vKiB3d3cuaXJ0cmFucy5kZSBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9JUlRSQU5TX1BJRCAweEZDNjAgLyogUHJvZHVjdCBJZCAqLwotCi0KLS8qIHd3dy50aG91Z2h0dGVjaG5vbG9neS5jb20vIFRULVVTQiBwcm92aWRlIHdpdGggcHJvY29tcCB1c2UgZnRkaV9zaW8gKi8KLSNkZWZpbmUgRlRESV9UVFVTQl9QSUQgMHhGRjIwIC8qIFByb2R1Y3QgSWQgKi8KLQotLyogaVBsdXMgZGV2aWNlICovCi0jZGVmaW5lIEZURElfSVBMVVNfUElEIDB4RDA3MCAvKiBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfSVBMVVMyX1BJRCAweEQwNzEgLyogUHJvZHVjdCBJZCAqLwotCi0vKiBETVg0QUxMIERNWCBJbnRlcmZhY2VzICovCi0jZGVmaW5lIEZURElfRE1YNEFMTCAweEM4NTAKLQotLyogT3BlbkRDQyAod3d3Lm9wZW5kY2MuZGUpIHByb2R1Y3QgaWQgKi8KLSNkZWZpbmUgRlRESV9PUEVORENDX1BJRAkweEJGRDgKLSNkZWZpbmUgRlRESV9PUEVORENDX1NOSUZGRVJfUElECTB4QkZEOQotI2RlZmluZSBGVERJX09QRU5EQ0NfVEhST1RUTEVfUElECTB4QkZEQQotI2RlZmluZSBGVERJX09QRU5EQ0NfR0FURVdBWV9QSUQJMHhCRkRCCi0KLS8qIFNwcm9nIElJIChBbmRyZXcgQ3Jvc2xhbmQncyBTcHJvZ0lJIERDQyBpbnRlcmZhY2UpICovCi0jZGVmaW5lIEZURElfU1BST0dfSUkJCTB4RjBDOAotCi0vKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzIC0gdGhhbnggZm9yIHByb3ZpZGluZyBmcmVlIGRldmljZXMgZm9yIGV2YWx1YXRpb24gISAqLwotLyogdGhleSB1c2UgdGhlIGZ0ZGkgY2hpcHNldCBmb3IgdGhlIFVTQiBpbnRlcmZhY2UgYW5kIHRoZSB2ZW5kb3IgaWQgaXMgdGhlIHNhbWUgKi8KLSNkZWZpbmUgRlRESV9YRl82MzJfUElEIDB4RkMwOAkvKiA2MzI6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82MzRfUElEIDB4RkMwOQkvKiA2MzQ6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl81NDdfUElEIDB4RkMwQQkvKiA1NDc6IFR3byBsaW5lIERpc3BsYXkgKi8KLSNkZWZpbmUgRlRESV9YRl82MzNfUElEIDB4RkMwQgkvKiA2MzM6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgd2l0aCBLZXlzICovCi0jZGVmaW5lIEZURElfWEZfNjMxX1BJRCAweEZDMEMJLyogNjMxOiAyMHgyIENoYXJhY3RlciBEaXNwbGF5ICovCi0jZGVmaW5lIEZURElfWEZfNjM1X1BJRCAweEZDMEQJLyogNjM1OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCi0jZGVmaW5lIEZURElfWEZfNjQwX1BJRCAweEZDMEUJLyogNjQwOiBUd28gbGluZSBEaXNwbGF5ICovCi0jZGVmaW5lIEZURElfWEZfNjQyX1BJRCAweEZDMEYJLyogNjQyOiBUd28gbGluZSBEaXNwbGF5ICovCi0KLS8qIFZpZGVvIE5ldHdvcmtzIExpbWl0ZWQgLyBIb21lY2hvaWNlIGluIHRoZSBVSyB1c2UgYW4gZnRkaS1iYXNlZCBkZXZpY2UgZm9yIHRoZWlyIDFNYiAqLwotLyogYnJvYWRiYW5kIGludGVybmV0IHNlcnZpY2UuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBleGhpYml0ZWQgYnkgdGhlIHVzYiBkZXZpY2Ugc3VwcGxpZWQgKi8KLS8qICh0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpICovCi0jZGVmaW5lIEZURElfVk5IQ1BDVVNCX0RfUElEIDB4ZmUzOCAvKiBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBQQ0RKIHVzZSBmdGRpIGJhc2VkIGRqLWNvbnRyb2xsZXJzLiAgVGhlIGZvbGxvd2luZyBQSUQgaXMgZm9yIHRoZWlyIERBQy0yIGRldmljZQotICogaHR0cDovL3d3dy5wY2RqaGFyZHdhcmUuY29tL0RBQzIuYXNwIChQSUQgc2VudCBieSBXb3V0ZXIgUGFlc2VuKQotICogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KLSNkZWZpbmUgRlRESV9QQ0RKX0RBQzJfUElEIDB4RkE4OAotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIE1hdHJpeCBPcmJpdGFsIExDRCBkaXNwbGF5cywKLSAqIHdoaWNoIGFyZSB0aGUgRlQyMzJCTSAoIHNpbWlsYXIgdG8gdGhlIDhVMjMyQU0gKQotICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzBfUElEICAgICAgMHhGQTAwICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzFfUElEICAgICAgMHhGQTAxICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzJfUElEICAgICAgMHhGQTAyICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzNfUElEICAgICAgMHhGQTAzICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzRfUElEICAgICAgMHhGQTA0ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzVfUElEICAgICAgMHhGQTA1ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0jZGVmaW5lIEZURElfTVRYT1JCXzZfUElEICAgICAgMHhGQTA2ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCi0KLS8qIE9PQ0RsaW5rIGJ5IEpvZXJuIEthaXBmIDxqb2VybmtAd2ViLmRlPgotICogKGh0dHA6Ly93d3cuam9lcm5vbmxpbmUuZGUvZHcvZG9rdS5waHA/aWQ9c3RhcnQmaWR4PXByb2plY3RzOm9vY2RsaW5rKSAqLwotI2RlZmluZSBGVERJX09PQ0RMSU5LX1BJRAkweGJhZjgJLyogQW1vbnRlYyBKVEFHa2V5ICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgRlRESSBSYW5nZQotICogQW55dGhpbmcgaW4gdGhpcyByYW5nZSB3aWxsIHVzZSBhbiBGVDIzMlJMLgotICovCi0jZGVmaW5lIE1UWE9SQl9WSUQJCQkweDFCM0QKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMF9QSUQJMHgwMTAwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDFfUElECTB4MDEwMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAyX1BJRAkweDAxMDIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwM19QSUQJMHgwMTAzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDRfUElECTB4MDEwNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA1X1BJRAkweDAxMDUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNl9QSUQJMHgwMTA2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDdfUElECTB4MDEwNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA4X1BJRAkweDAxMDgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwOV9QSUQJMHgwMTA5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEFfUElECTB4MDEwQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBCX1BJRAkweDAxMEIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQ19QSUQJMHgwMTBDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMERfUElECTB4MDEwRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBFX1BJRAkweDAxMEUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRl9QSUQJMHgwMTBGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTBfUElECTB4MDExMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTExX1BJRAkweDAxMTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMl9QSUQJMHgwMTEyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTNfUElECTB4MDExMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE0X1BJRAkweDAxMTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNV9QSUQJMHgwMTE1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTZfUElECTB4MDExNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE3X1BJRAkweDAxMTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExOF9QSUQJMHgwMTE4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTlfUElECTB4MDExOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFBX1BJRAkweDAxMUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQl9QSUQJMHgwMTFCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUNfUElECTB4MDExQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFEX1BJRAkweDAxMUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRV9QSUQJMHgwMTFFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUZfUElECTB4MDExRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIwX1BJRAkweDAxMjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMV9QSUQJMHgwMTIxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjJfUElECTB4MDEyMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIzX1BJRAkweDAxMjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNF9QSUQJMHgwMTI0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjVfUElECTB4MDEyNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI2X1BJRAkweDAxMjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyN19QSUQJMHgwMTI3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjhfUElECTB4MDEyOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI5X1BJRAkweDAxMjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQV9QSUQJMHgwMTJBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkJfUElECTB4MDEyQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJDX1BJRAkweDAxMkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRF9QSUQJMHgwMTJECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkVfUElECTB4MDEyRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJGX1BJRAkweDAxMkYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMF9QSUQJMHgwMTMwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzFfUElECTB4MDEzMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMyX1BJRAkweDAxMzIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzM19QSUQJMHgwMTMzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzRfUElECTB4MDEzNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM1X1BJRAkweDAxMzUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNl9QSUQJMHgwMTM2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzdfUElECTB4MDEzNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM4X1BJRAkweDAxMzgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzOV9QSUQJMHgwMTM5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0FfUElECTB4MDEzQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNCX1BJRAkweDAxM0IKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQ19QSUQJMHgwMTNDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0RfUElECTB4MDEzRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNFX1BJRAkweDAxM0UKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRl9QSUQJMHgwMTNGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDBfUElECTB4MDE0MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQxX1BJRAkweDAxNDEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ml9QSUQJMHgwMTQyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDNfUElECTB4MDE0MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ0X1BJRAkweDAxNDQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0NV9QSUQJMHgwMTQ1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDZfUElECTB4MDE0NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ3X1BJRAkweDAxNDcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0OF9QSUQJMHgwMTQ4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDlfUElECTB4MDE0OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRBX1BJRAkweDAxNEEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0Ql9QSUQJMHgwMTRCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNENfUElECTB4MDE0QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTREX1BJRAkweDAxNEQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0RV9QSUQJMHgwMTRFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEZfUElECTB4MDE0RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUwX1BJRAkweDAxNTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1MV9QSUQJMHgwMTUxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTJfUElECTB4MDE1MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUzX1BJRAkweDAxNTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1NF9QSUQJMHgwMTU0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTVfUElECTB4MDE1NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU2X1BJRAkweDAxNTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1N19QSUQJMHgwMTU3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNThfUElECTB4MDE1OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU5X1BJRAkweDAxNTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1QV9QSUQJMHgwMTVBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUJfUElECTB4MDE1QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVDX1BJRAkweDAxNUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1RF9QSUQJMHgwMTVECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUVfUElECTB4MDE1RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVGX1BJRAkweDAxNUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2MF9QSUQJMHgwMTYwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjFfUElECTB4MDE2MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYyX1BJRAkweDAxNjIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2M19QSUQJMHgwMTYzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjRfUElECTB4MDE2NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY1X1BJRAkweDAxNjUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Nl9QSUQJMHgwMTY2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjdfUElECTB4MDE2NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY4X1BJRAkweDAxNjgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2OV9QSUQJMHgwMTY5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkFfUElECTB4MDE2QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZCX1BJRAkweDAxNkIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Q19QSUQJMHgwMTZDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkRfUElECTB4MDE2RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZFX1BJRAkweDAxNkUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Rl9QSUQJMHgwMTZGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzBfUElECTB4MDE3MAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcxX1BJRAkweDAxNzEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ml9QSUQJMHgwMTcyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzNfUElECTB4MDE3MwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc0X1BJRAkweDAxNzQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3NV9QSUQJMHgwMTc1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzZfUElECTB4MDE3NgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc3X1BJRAkweDAxNzcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3OF9QSUQJMHgwMTc4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzlfUElECTB4MDE3OQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdBX1BJRAkweDAxN0EKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3Ql9QSUQJMHgwMTdCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0NfUElECTB4MDE3QwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdEX1BJRAkweDAxN0QKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3RV9QSUQJMHgwMTdFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0ZfUElECTB4MDE3RgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgwX1BJRAkweDAxODAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4MV9QSUQJMHgwMTgxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODJfUElECTB4MDE4MgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgzX1BJRAkweDAxODMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4NF9QSUQJMHgwMTg0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODVfUElECTB4MDE4NQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg2X1BJRAkweDAxODYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4N19QSUQJMHgwMTg3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODhfUElECTB4MDE4OAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg5X1BJRAkweDAxODkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4QV9QSUQJMHgwMThBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEJfUElECTB4MDE4QgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThDX1BJRAkweDAxOEMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4RF9QSUQJMHgwMThECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEVfUElECTB4MDE4RQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThGX1BJRAkweDAxOEYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5MF9QSUQJMHgwMTkwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTFfUElECTB4MDE5MQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkyX1BJRAkweDAxOTIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5M19QSUQJMHgwMTkzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTRfUElECTB4MDE5NAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk1X1BJRAkweDAxOTUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Nl9QSUQJMHgwMTk2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTdfUElECTB4MDE5NwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk4X1BJRAkweDAxOTgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5OV9QSUQJMHgwMTk5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUFfUElECTB4MDE5QQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlCX1BJRAkweDAxOUIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Q19QSUQJMHgwMTlDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOURfUElECTB4MDE5RAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlFX1BJRAkweDAxOUUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Rl9QSUQJMHgwMTlGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTBfUElECTB4MDFBMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUExX1BJRAkweDAxQTEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMl9QSUQJMHgwMUEyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTNfUElECTB4MDFBMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE0X1BJRAkweDAxQTQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNV9QSUQJMHgwMUE1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTZfUElECTB4MDFBNgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE3X1BJRAkweDAxQTcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBOF9QSUQJMHgwMUE4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTlfUElECTB4MDFBOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFBX1BJRAkweDAxQUEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQl9QSUQJMHgwMUFCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUNfUElECTB4MDFBQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFEX1BJRAkweDAxQUQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRV9QSUQJMHgwMUFFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUZfUElECTB4MDFBRgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIwX1BJRAkweDAxQjAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMV9QSUQJMHgwMUIxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjJfUElECTB4MDFCMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIzX1BJRAkweDAxQjMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNF9QSUQJMHgwMUI0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjVfUElECTB4MDFCNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI2X1BJRAkweDAxQjYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCN19QSUQJMHgwMUI3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjhfUElECTB4MDFCOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI5X1BJRAkweDAxQjkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQV9QSUQJMHgwMUJBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkJfUElECTB4MDFCQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJDX1BJRAkweDAxQkMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRF9QSUQJMHgwMUJECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkVfUElECTB4MDFCRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJGX1BJRAkweDAxQkYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMF9QSUQJMHgwMUMwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzFfUElECTB4MDFDMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMyX1BJRAkweDAxQzIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDM19QSUQJMHgwMUMzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzRfUElECTB4MDFDNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM1X1BJRAkweDAxQzUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNl9QSUQJMHgwMUM2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzdfUElECTB4MDFDNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM4X1BJRAkweDAxQzgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDOV9QSUQJMHgwMUM5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0FfUElECTB4MDFDQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNCX1BJRAkweDAxQ0IKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQ19QSUQJMHgwMUNDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0RfUElECTB4MDFDRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNFX1BJRAkweDAxQ0UKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRl9QSUQJMHgwMUNGCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDBfUElECTB4MDFEMAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQxX1BJRAkweDAxRDEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMl9QSUQJMHgwMUQyCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDNfUElECTB4MDFEMwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ0X1BJRAkweDAxRDQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENV9QSUQJMHgwMUQ1Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDZfUElECTB4MDFENgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ3X1BJRAkweDAxRDcKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEOF9QSUQJMHgwMUQ4Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDlfUElECTB4MDFEOQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURBX1BJRAkweDAxREEKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQl9QSUQJMHgwMURCCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRENfUElECTB4MDFEQwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUREX1BJRAkweDAxREQKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERV9QSUQJMHgwMURFCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREZfUElECTB4MDFERgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUwX1BJRAkweDAxRTAKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMV9QSUQJMHgwMUUxCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTJfUElECTB4MDFFMgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUzX1BJRAkweDAxRTMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNF9QSUQJMHgwMUU0Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTVfUElECTB4MDFFNQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU2X1BJRAkweDAxRTYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFN19QSUQJMHgwMUU3Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRThfUElECTB4MDFFOAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU5X1BJRAkweDAxRTkKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQV9QSUQJMHgwMUVBCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUJfUElECTB4MDFFQgotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVDX1BJRAkweDAxRUMKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRF9QSUQJMHgwMUVECi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUVfUElECTB4MDFFRQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVGX1BJRAkweDAxRUYKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMF9QSUQJMHgwMUYwCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjFfUElECTB4MDFGMQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYyX1BJRAkweDAxRjIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGM19QSUQJMHgwMUYzCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjRfUElECTB4MDFGNAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY1X1BJRAkweDAxRjUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNl9QSUQJMHgwMUY2Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjdfUElECTB4MDFGNwotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY4X1BJRAkweDAxRjgKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGOV9QSUQJMHgwMUY5Ci0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkFfUElECTB4MDFGQQotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZCX1BJRAkweDAxRkIKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQ19QSUQJMHgwMUZDCi0jZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkRfUElECTB4MDFGRAotI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZFX1BJRAkweDAxRkUKLSNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRl9QSUQJMHgwMUZGCi0KLQotCi0vKiBJbnRlcmJpb21ldHJpY3MgVVNCIEkvTyBCb2FyZCAqLwotLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLwotI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKLSNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX0lPQk9BUkRfUElEICAgICAgMHgxMDAyCi0jZGVmaW5lIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEIDB4MTAwNgotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFBlcmxlIFN5c3RlbXMKLSAqIFVsdHJhUG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMKLSAqLwotI2RlZmluZSBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQgMHhGMEMwCS8qIFBlcmxlIFVsdHJhUG9ydCBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgU2VhbGV2ZWwgU2VhTElOSysgYWRhcHRlcnMuCi0gKiAoT3JpZ2luYWwgbGlzdCBzZW50IGJ5IFR1YW4gSG9hbmcuICBJYW4gQWJib3R0IHJlbmFtZWQgdGhlIG1hY3JvcyBhbmQKLSAqIHJlbW92ZWQgc29tZSBQSURzIHRoYXQgZG9uJ3Qgc2VlbSB0byBtYXRjaCBhbnkgZXhpc3RpbmcgcHJvZHVjdHMuKQotICovCi0jZGVmaW5lIFNFQUxFVkVMX1ZJRAkJMHgwYzUyCS8qIFNlYWxldmVsIFZlbmRvciBJRCAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTAxX1BJRAkweDIxMDEJLyogU2VhTElOSysyMzIgKDIxMDEvMjEwNSkgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjEwMl9QSUQJMHgyMTAyCS8qIFNlYUxJTksrNDg1ICgyMTAyKSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTAzX1BJRAkweDIxMDMJLyogU2VhTElOSysyMzJJICgyMTAzKSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTA0X1BJRAkweDIxMDQJLyogU2VhTElOSys0ODVJICgyMTA0KSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMTA2X1BJRAkweDkwMjAJLyogU2VhTElOSys0MjIgKDIxMDYpICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDFfMV9QSUQJMHgyMjExCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAxXzJfUElECTB4MjIyMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzIyMDJfMl9QSUQJMHgyMjIyCS8qIFNlYVBPUlQrMi80ODUgKDIyMDIpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAzXzFfUElECTB4MjIxMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yMjAzXzJfUElECTB4MjIyMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAxXzFfUElECTB4MjQxMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDEgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMV8yX1BJRAkweDI0MjEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDFfM19QSUQJMHgyNDMxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMyAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAxXzRfUElECTB4MjQ0MQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDQgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMl8xX1BJRAkweDI0MTIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDJfMl9QSUQJMHgyNDIyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yNDAyXzNfUElECTB4MjQzMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjQwMl80X1BJRAkweDI0NDIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDNfMV9QSUQJMHgyNDEzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDNfMl9QSUQJMHgyNDIzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAyICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDNfM19QSUQJMHgyNDMzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI0MDNfNF9QSUQJMHgyNDQzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfMV9QSUQJMFgyODExCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzJfUElECTBYMjgyMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV8zX1BJRAkwWDI4MzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfNF9QSUQJMFgyODQxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzVfUElECTBYMjg1MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDUgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMV82X1BJRAkwWDI4NjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA2ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDFfN19QSUQJMFgyODcxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAxXzhfUElECTBYMjg4MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDggKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl8xX1BJRAkwWDI4MTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAxICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfMl9QSUQJMFgyODIyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMiAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzNfUElECTBYMjgzMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDMgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl80X1BJRAkwWDI4NDIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA0ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfNV9QSUQJMFgyODUyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAyXzZfUElECTBYMjg2MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDYgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwMl83X1BJRAkwWDI4NzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA3ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDJfOF9QSUQJMFgyODgyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgOCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzFfUElECTBYMjgxMwkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMSAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzJfUElECTBYMjgyMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDIgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM18zX1BJRAkwWDI4MzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAzICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfNF9QSUQJMFgyODQzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNCAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzVfUElECTBYMjg1MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDUgKi8KLSNkZWZpbmUgU0VBTEVWRUxfMjgwM182X1BJRAkwWDI4NjMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA2ICovCi0jZGVmaW5lIFNFQUxFVkVMXzI4MDNfN19QSUQJMFgyODczIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNyAqLwotI2RlZmluZSBTRUFMRVZFTF8yODAzXzhfUElECTBYMjg4MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDggKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHR3byBLT0JJTCBjaGlwY2FyZCB0ZXJtaW5hbHMuCi0gKi8KLSNkZWZpbmUgS09CSUxfVklECQkweDBkNDYJLyogS09CSUwgVmVuZG9yIElEICovCi0jZGVmaW5lIEtPQklMX0NPTlZfQjFfUElECTB4MjAyMAkvKiBLT0JJTCBLb252ZXJ0ZXIgZm9yIEIxICovCi0jZGVmaW5lIEtPQklMX0NPTlZfS0FBTl9QSUQJMHgyMDIxCS8qIEtPQklMX0tvbnZlcnRlciBmb3IgS0FBTiAqLwotCi0vKgotICogSWNvbSBJRC0xIGRpZ2l0YWwgdHJhbnNjZWl2ZXIKLSAqLwotCi0jZGVmaW5lIElDT01fSUQxX1ZJRCAgICAgICAgICAgIDB4MEMyNgotI2RlZmluZSBJQ09NX0lEMV9QSUQgICAgICAgICAgICAweDAwMDQKLQotLyoKLSAqIEFTSy5mciBkZXZpY2VzCi0gKi8KLSNkZWZpbmUgRlRESV9BU0tfUkRSNDAwX1BJRAkweEM5OTEJLyogQVNLIFJEUiA0MDAgc2VyaWVzIGNhcmQgcmVhZGVyICovCi0KLS8qCi0gKiBGVERJIFVTQiBVQVJUIGNoaXBzIHVzZWQgaW4gY29uc3RydWN0aW9uIHByb2plY3RzIGZyb20gdGhlCi0gKiBFbGVrdG9yIEVsZWN0cm9uaWNzIG1hZ2F6aW5lIChodHRwOi8vZWxla3Rvci1lbGVjdHJvbmljcy5jby51aykKLSAqLwotI2RlZmluZSBFTEVLVE9SX1ZJRAkJMHgwQzdECi0jZGVmaW5lIEVMRUtUT1JfRlQzMjNSX1BJRAkweDAwMDUJLyogUkZJRC1SZWFkZXIsIGlzc3VlIDA5LTIwMDYgKi8KLQotLyoKLSAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAotICovCi0jZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MgotCi0vKgotICogSG9tZSBFbGVjdHJvbmljcyAod3d3LmhvbWUtZWxlY3Ryby5jb20pIFVTQiBnYWRnZXRzCi0gKi8KLSNkZWZpbmUgRlRESV9IRV9USVJBMV9QSUQJMHhGQTc4CS8qIFRpcmEtMSBJUiB0cmFuc2NlaXZlciAqLwotCi0vKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCi0vKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KLSNkZWZpbmUgRlRESV9VU0JfVUlSVF9QSUQJMHhGODUwCS8qIFByb2R1Y3QgSWQgKi8KLQotLyogVE5DLVggVVNCLXRvLXBhY2tldC1yYWRpbyBhZGFwdGVyLCB2ZXJzaW9ucyBwcmlvciB0byAzLjAgKERMUCBtb2R1bGUpICovCi0KLSNkZWZpbmUgRlRESV9UTkNfWF9QSUQJCTB4RUJFMAotCi0vKgotICogRUxWIFVTQiBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDaHJpc3RpYW4gQWJ0IG9mIEVMViAod3d3LmVsdi5kZSkuCi0gKiBBbGwgb2YgdGhlc2UgZGV2aWNlcyB1c2UgRlRESSdzIHZlbmRvciBJRCAoMHgwNDAzKS4KLSAqCi0gKiBUaGUgcHJldmlvdXNseSBpbmNsdWRlZCBQSUQgZm9yIHRoZSBVTyAxMDAgbW9kdWxlIHdhcyBpbmNvcnJlY3QuCi0gKiBJbiBmYWN0LCB0aGF0IFBJRCB3YXMgZm9yIEVMVidzIFVSIDEwMCBVU0ItUlMyMzIgY29udmVydGVyICgweEZCNTgpLgotICoKLSAqIEFybWluIExhZXVnZXIgb3JpZ2luYWxseSBzZW50IHRoZSBQSUQgZm9yIHRoZSBVTSAxMDAgbW9kdWxlLgotICovCi0jZGVmaW5lIEZURElfUjIwMDBLVV9UUlVFX1JORwkweEZCODAgIC8qIFIyMDAwS1UgVFJVRSBSTkcgKi8KLSNkZWZpbmUgRlRESV9FTFZfVVIxMDBfUElECTB4RkI1OAkvKiBVU0ItUlMyMzItVW1zZXR6ZXIgKFVSIDEwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVU0xMDBfUElECTB4RkI1QQkvKiBVU0ItTW9kdWwgVU0gMTAwICovCi0jZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNUIJLyogVVNCLU1vZHVsIFVPIDEwMCAqLwotI2RlZmluZSBGVERJX0VMVl9BTEM4NTAwX1BJRAkweEYwNkUJLyogQUxDIDg1MDAgRXhwZXJ0ICovCi0vKiBBZGRpdGlvbmFsIEVMViBQSURzIHRoYXQgZGVmYXVsdCB0byB1c2luZyB0aGUgRlRESSBEMlhYIGRyaXZlcnMgb24KLSAqIE1TIFdpbmRvd3MsIHJhdGhlciB0aGFuIHRoZSBGVERJIFZpcnR1YWwgQ29tIFBvcnQgZHJpdmVycy4KLSAqIE1heWJlIHRoZXNlIHdpbGwgYmUgZWFzaWVyIHRvIHVzZSB3aXRoIHRoZSBsaWJmdGRpL2xpYnVzYiB1c2VyLXNwYWNlCi0gKiBkcml2ZXJzLCBvciBwb3NzaWJseSB0aGUgQ29tZWRpIGRyaXZlcnMgaW4gc29tZSBjYXNlcy4gKi8KLSNkZWZpbmUgRlRESV9FTFZfQ0xJNzAwMF9QSUQJMHhGQjU5CS8qIENvbXB1dGVyLUxpZ2h0LUludGVyZmFjZSAoQ0xJIDcwMDApICovCi0jZGVmaW5lIEZURElfRUxWX1BQUzczMzBfUElECTB4RkI1QwkvKiBQcm9jZXNzb3ItUG93ZXItU3VwcGx5IChQUFMgNzMzMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVEZNMTAwX1BJRAkweEZCNUQJLyogVGVtcGVyYXJ0dXItRmV1Y2h0ZSBNZXNzZ2VyYWV0IChURk0gMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9VREY3N19QSUQJMHhGQjVFCS8qIFVTQiBEQ0YgRnVua3VyaCAoVURGIDc3KSAqLwotI2RlZmluZSBGVERJX0VMVl9VSU84OF9QSUQJMHhGQjVGCS8qIFVTQi1JL08gSW50ZXJmYWNlIChVSU8gODgpICovCi0jZGVmaW5lIEZURElfRUxWX1VBRDhfUElECTB4RjA2OAkvKiBVU0ItQUQtV2FuZGxlciAoVUFEIDgpICovCi0jZGVmaW5lIEZURElfRUxWX1VEQTdfUElECTB4RjA2OQkvKiBVU0ItREEtV2FuZGxlciAoVURBIDcpICovCi0jZGVmaW5lIEZURElfRUxWX1VTSTJfUElECTB4RjA2QQkvKiBVU0ItU2Nocml0dG1vdG9yZW4tSW50ZXJmYWNlIChVU0kgMikgKi8KLSNkZWZpbmUgRlRESV9FTFZfVDExMDBfUElECTB4RjA2QgkvKiBUaGVybW9tZXRlciAoVCAxMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9QQ0QyMDBfUElECTB4RjA2QwkvKiBQQy1EYXRlbmxvZ2dlciAoUENEIDIwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfVUxBMjAwX1BJRAkweEYwNkQJLyogVVNCLUxDRC1BbnN0ZXVlcnVuZyAoVUxBIDIwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfRkhaMTAwMFBDX1BJRAkweEYwNkYJLyogRkhaIDEwMDAgUEMgKi8KLSNkZWZpbmUgRlRESV9FTFZfQ1NJOF9QSUQJMHhFMEYwCS8qIENvbXB1dGVyLVNjaGFsdC1JbnRlcmZhY2UgKENTSSA4KSAqLwotI2RlZmluZSBGVERJX0VMVl9FTTEwMDBETF9QSUQJMHhFMEYxCS8qIFBDLURhdGVubG9nZ2VyIGZ1ZXIgRW5lcmdpZW1vbml0b3IgKEVNIDEwMDAgREwpICovCi0jZGVmaW5lIEZURElfRUxWX1BDSzEwMF9QSUQJMHhFMEYyCS8qIFBDLUthYmVsdGVzdGVyIChQQ0sgMTAwKSAqLwotI2RlZmluZSBGVERJX0VMVl9SRlA1MDBfUElECTB4RTBGMwkvKiBIRi1MZWlzdHVuZ3NtZXNzZXIgKFJGUCA1MDApICovCi0jZGVmaW5lIEZURElfRUxWX0ZTMjBTSUdfUElECTB4RTBGNAkvKiBTaWduYWxnZWJlciAoRlMgMjAgU0lHKSAqLwotI2RlZmluZSBGVERJX0VMVl9XUzMwMFBDX1BJRAkweEUwRjYJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgMzAwIFBDKSAqLwotI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLwotI2RlZmluZSBGVERJX0VMVl9XUzUwMF9QSUQJMHhFMEU5CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDUwMCkgKi8KLSNkZWZpbmUgRlRESV9FTFZfSFM0ODVfUElECTB4RTBFQQkvKiBVU0IgdG8gUlMtNDg1IGFkYXB0ZXIgKi8KLSNkZWZpbmUgRlRESV9FTFZfRU0xMDEwUENfUElECTB4RTBFRgkvKiBFbmdlcnkgbW9uaXRvciBFTSAxMDEwIFBDICovCi0jZGVmaW5lIEZURElfUEhJX0ZJU0NPX1BJRCAgICAgIDB4RTQwQiAgLyogUEhJIEZpc2NvIFVTQiB0byBTZXJpYWwgY2FibGUgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBJRCBURUNIICh3d3cuaWR0LW5ldC5jb20pIGRldmljZXMKLSAqLwotI2RlZmluZSBJRFRFQ0hfVklECQkweDBBQ0QJLyogSUQgVEVDSCBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgSURURUNIX0lEVDEyMjFVX1BJRAkweDAzMDAJLyogSURUMTIyMVUgVVNCIHRvIFJTLTIzMiBhZGFwdGVyICovCi0KLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgT21uaWRpcmVjdGlvbmFsIENvbnRyb2wgVGVjaG5vbG9neSwgSW5jLiBkZXZpY2VzCi0gKi8KLSNkZWZpbmUgT0NUX1ZJRAkJCTB4MEIzOQkvKiBPQ1QgdmVuZG9yIElEICovCi0vKiBOb3RlOiBPQ1QgVVMxMDEgaXMgYWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChOWikgWEg2MzgxICovCi0vKiBBbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKEF1cykgWEg2NDUxICovCi0vKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggaGFyZHdhcmUgdmVyc2lvbiAxICovCi0jZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwotCi0vKiBhbiBpbmZyYXJlZCByZWNlaXZlciBmb3IgdXNlciBhY2Nlc3MgY29udHJvbCB3aXRoIElSIHRhZ3MgKi8KLSNkZWZpbmUgRlRESV9QSUVHUk9VUF9QSUQJMHhGMjA4CS8qIFByb2R1Y3QgSWQgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBBcnRlbWlzIGFzdHJvbm9taWNhbCBVU0IgYmFzZWQgY2FtZXJhcwotICogQ2hlY2sgaXQgYXQgaHR0cDovL3d3dy5hcnRlbWlzY2NkLmNvLnVrLwotICovCi0jZGVmaW5lIEZURElfQVJURU1JU19QSUQJMHhERjI4CS8qIEFsbCBBcnRlbWlzIENhbWVyYXMgKi8KLQotLyoKLSAqIERlZmluaXRpb25zIGZvciBBVElLIEluc3RydW1lbnRzIGFzdHJvbm9taWNhbCBVU0IgYmFzZWQgY2FtZXJhcwotICogQ2hlY2sgaXQgYXQgaHR0cDovL3d3dy5hdGlrLWluc3RydW1lbnRzLmNvbS8KLSAqLwotI2RlZmluZSBGVERJX0FUSUtfQVRLMTZfUElECTB4REYzMAkvKiBBVElLIEFUSy0xNiBHcmF5c2NhbGUgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNkNfUElECTB4REYzMgkvKiBBVElLIEFUSy0xNkMgQ29sb3VyIENhbWVyYSAqLwotI2RlZmluZSBGVERJX0FUSUtfQVRLMTZIUl9QSUQJMHhERjMxCS8qIEFUSUsgQVRLLTE2SFIgR3JheXNjYWxlIENhbWVyYSAqLwotI2RlZmluZSBGVERJX0FUSUtfQVRLMTZIUkNfUElECTB4REYzMwkvKiBBVElLIEFUSy0xNkhSQyBDb2xvdXIgQ2FtZXJhICovCi0jZGVmaW5lIEZURElfQVRJS19BVEsxNklDX1BJRCAgIDB4REYzNSAgLyogQVRJSyBBVEstMTZJQyBHcmF5c2NhbGUgQ2FtZXJhICovCi0KLS8qCi0gKiBQcm90ZWdvIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KLSNkZWZpbmUgUFJPVEVHT19SMlgwCQkweEZDNzEJLyogUjIwMC1VU0IgVFJORyB1bml0IChSMjEwLCBSMjIwLCBhbmQgUjIzMCkgKi8KLSNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzMJMHhGQzcyCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KLSNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KLQotLyoKLSAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAotICovCi0jZGVmaW5lIEZURElfR1VERUFEU19FODA4X1BJRCAgICAweEU4MDgKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQV9QSUQgICAgMHhFODBBCi0jZGVmaW5lIEZURElfR1VERUFEU19FODBCX1BJRCAgICAweEU4MEIKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQwotI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRF9QSUQgICAgMHhFODBECi0jZGVmaW5lIEZURElfR1VERUFEU19FODBFX1BJRCAgICAweEU4MEUKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OF9QSUQgICAgMHhFODg4ICAvKiBFeHBlcnQgSVNETiBDb250cm9sIFVTQiAqLwotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OV9QSUQgICAgMHhFODg5ICAvKiBVU0IgUlMtMjMyIE9wdG9CcmlkZ2UgKi8KLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Ql9QSUQgICAgMHhFODhCCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhDX1BJRCAgICAweEU4OEMKLSNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAotI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RV9QSUQgICAgMHhFODhFCi0jZGVmaW5lIEZURElfR1VERUFEU19FODhGX1BJRCAgICAweEU4OEYKLQotLyoKLSAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCi0gKi8KLSNkZWZpbmUgTElOWF9TRE1VU0JRU1NfUElECTB4RjQ0OAkvKiBMaW54IFNETS1VU0ItUVMtUyAqLwotI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KLSNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KLQotLyogQ0NTIEluYy4gSUNEVS9JQ0RVNDAgcHJvZHVjdCBJRCAtIHRoZSBGVDIzMkJNIGlzIHVzZWQgaW4gYW4gaW4tY2lyY3VpdC1kZWJ1Z2dlciAqLwotLyogdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCi0jZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMAotI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEKLSNkZWZpbmUgRlRESV9DQ1NNQUNIWF8yX1BJRCAgICAgMHhGOUQyCi0jZGVmaW5lIEZURElfQ0NTTE9BRF9OX0dPXzNfUElEIDB4RjlEMwotI2RlZmluZSBGVERJX0NDU0lDRFU2NF80X1BJRCAgICAweEY5RDQKLSNkZWZpbmUgRlRESV9DQ1NQUklNRThfNV9QSUQgICAgMHhGOUQ1Ci0KLS8qIEluc2lkZSBBY2Nlc3NvIGNvbnRhY3RsZXNzIHJlYWRlciAoaHR0cDovL3d3dy5pbnNpZGVmci5jb20pICovCi0jZGVmaW5lIElOU0lERV9BQ0NFU1NPCQkweEZBRDAKLQotLyoKLSAqIEludHJlcGlkIENvbnRyb2wgU3lzdGVtcyAoaHR0cDovL3d3dy5pbnRyZXBpZGNzLmNvbS8pIFZhbHVlQ0FOIGFuZCBOZW9WSQotICovCi0jZGVmaW5lIElOVFJFUElEX1ZJRAkJMHgwOTNDCi0jZGVmaW5lIElOVFJFUElEX1ZBTFVFQ0FOX1BJRAkweDA2MDEKLSNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQotCi0vKgotICogRmFsY29tIFdpcmVsZXNzIENvbW11bmljYXRpb25zIEdtYkgKLSAqLwotI2RlZmluZSBGQUxDT01fVklECQkweDBGOTQJLyogVmVuZG9yIElkICovCi0jZGVmaW5lIEZBTENPTV9UV0lTVF9QSUQJMHgwMDAxCS8qIEZhbGNvbSBUd2lzdCBVU0IgR1BSUyBtb2RlbSAqLwotI2RlZmluZSBGQUxDT01fU0FNQkFfUElECTB4MDAwNQkvKiBGYWxjb20gU2FtYmEgVVNCIEdQUlMgbW9kZW0gKi8KLQotLyoKLSAqIFNVVU5UTyBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLwotCi0vKgotICogT2NlYW5pYyBwcm9kdWN0IGlkcwotICovCi0jZGVmaW5lIEZURElfT0NFQU5JQ19QSUQJMHhGNDYwICAvKiBPY2VhbmljIGRpdmUgaW5zdHJ1bWVudCAqLwotCi0vKgotICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCi0gKi8KLSNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KLSNkZWZpbmUgVFRJX1FMMzU1UF9QSUQJCTB4MDNFOAkvKiBUVGkgUUwzNTVQIHBvd2VyIHN1cHBseSAqLwotCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KLSAqLwotI2RlZmluZSBCQU5EQl9WSUQJCTB4MDg1NgkvKiBCJkIgRWxlY3Ryb25pY3MgVmVuZG9yIElEICovCi0jZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCi0jZGVmaW5lIEJBTkRCX1VTVEw0X1BJRAkJMHhBQzAyCS8qIFVTVEw0IFJTLTQ4NSBDb252ZXJ0ZXIgKi8KLSNkZWZpbmUgQkFOREJfVVNPOU1MMl9QSUQJMHhBQzAzCS8qIFVTTzlNTDIgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLwotI2RlZmluZSBCQU5EQl9VU09QVEw0X1BJRAkweEFDMTEKLSNkZWZpbmUgQkFOREJfVVNQVEw0X1BJRAkweEFDMTIKLSNkZWZpbmUgQkFOREJfVVNPOU1MMkRSXzJfUElECTB4QUMxNgotI2RlZmluZSBCQU5EQl9VU085TUwyRFJfUElECTB4QUMxNwotI2RlZmluZSBCQU5EQl9VU09QVEw0RFIyX1BJRAkweEFDMTgJLyogVVNPUFRMNFItMiAyLXBvcnQgSXNvbGF0ZWQgUlMtMjMyIENvbnZlcnRlciAqLwotI2RlZmluZSBCQU5EQl9VU09QVEw0RFJfUElECTB4QUMxOQotI2RlZmluZSBCQU5EQl80ODVVU0I5Rl8yV19QSUQJMHhBQzI1Ci0jZGVmaW5lIEJBTkRCXzQ4NVVTQjlGXzRXX1BJRAkweEFDMjYKLSNkZWZpbmUgQkFOREJfMjMyVVNCOU1fUElECTB4QUMyNwotI2RlZmluZSBCQU5EQl80ODVVU0JUQl8yV19QSUQJMHhBQzMzCi0jZGVmaW5lIEJBTkRCXzQ4NVVTQlRCXzRXX1BJRAkweEFDMzQKLSNkZWZpbmUgQkFOREJfVFRMNVVTQjlNX1BJRAkweEFDNDkKLSNkZWZpbmUgQkFOREJfVFRMM1VTQjlNX1BJRAkweEFDNTAKLSNkZWZpbmUgQkFOREJfWlpfUFJPRzFfVVNCX1BJRAkweEJBMDIKLQotLyoKLSAqIFJNIE1pY2hhZWxpZGVzIENBTnZpZXcgVVNCIChodHRwOi8vd3d3LnJtY2FuLmNvbSkKLSAqIENBTiBmaWVsZGJ1cyBpbnRlcmZhY2UgYWRhcHRlciwgYWRkZWQgYnkgcG9ydCBHbWJIIHd3dy5wb3J0LmRlKQotICogSWFuIEFiYm90dCBjaGFuZ2VkIHRoZSBtYWNybyBuYW1lcyBmb3IgY29uc2lzdGVuY3kuCi0gKi8KLSNkZWZpbmUgRlRESV9STV9DQU5WSUVXX1BJRAkweGZkNjAJLyogUHJvZHVjdCBJZCAqLwotCi0vKgotICogRVZFUiBFY28gUHJvIFVQUyAoaHR0cDovL3d3dy5ldmVyLmNvbS5wbC8pCi0gKi8KLQotI2RlZmluZQlFVkVSX0VDT19QUk9fQ0RTCTB4ZTUyMAkvKiBSUy0yMzIgY29udmVydGVyICovCi0KLS8qCi0gKiA0Ti1HQUxBWFkuREUgUElEcyBmb3IgQ0FOLVVTQiwgVVNCLVJTMjMyLCBVU0ItUlM0MjIsIFVTQi1SUzQ4NSwKLSAqIFVTQi1UVFkgYWN0aXYsIFVTQi1UVFkgcGFzc2l2LiAgU29tZSBQSURzIGFyZSB1c2VkIGJ5IHNldmVyYWwgZGV2aWNlcwotICogYW5kIEknbSBub3QgZW50aXJlbHkgc3VyZSB3aGljaCBhcmUgdXNlZCBieSB3aGljaC4KLSAqLwotI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8xX1BJRAkweEYzQzAKLSNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMl9QSUQJMHhGM0MxCi0KLS8qCi0gKiBNb2JpbGl0eSBFbGVjdHJvbmljcyBwcm9kdWN0cy4KLSAqLwotI2RlZmluZSBNT0JJTElUWV9WSUQJCQkweDEzNDIKLSNkZWZpbmUgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQJCTB4MDIwMgkvKiBFYXNpRG9jayBVU0IgMjAwIHNlcmlhbCAqLwotCi0vKgotICogbWljcm9IQU0gcHJvZHVjdCBJRHMgKGh0dHA6Ly93d3cubWljcm9oYW0uY29tKS4KLSAqIFN1Ym1pdHRlZCBieSBKdXN0aW4gQnVya2V0IChLTDFSTCkgPHpvcnRvbkBqdGFuLmNvbT4KLSAqIGFuZCBNaWtlIFN0dWRlciAoSzZFRVApIDxrNmVlcEBoYW1zb2Z0d2FyZS5vcmc+LgotICogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+IGFkZGVkIGEgZmV3IG1vcmUgZnJvbSB0aGUgZHJpdmVyIElORiBmaWxlLgotICovCi0jZGVmaW5lIEZURElfTUhBTV9LV19QSUQgMHhFRUU4CQkvKiBVU0ItS1cgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9ZU19QSUQgMHhFRUU5CQkvKiBVU0ItWVMgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9ZNl9QSUQgMHhFRUVBCQkvKiBVU0ItWTYgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9ZOF9QSUQgMHhFRUVCCQkvKiBVU0ItWTggaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9JQ19QSUQgMHhFRUVDCQkvKiBVU0ItSUMgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9EQjlfUElEIDB4RUVFRAkvKiBVU0ItREI5IGludGVyZmFjZSAqLwotI2RlZmluZSBGVERJX01IQU1fUlMyMzJfUElEIDB4RUVFRQkvKiBVU0ItUlMyMzIgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZURElfTUhBTV9ZOV9QSUQgMHhFRUVGCQkvKiBVU0ItWTkgaW50ZXJmYWNlICovCi0KLS8qCi0gKiBBY3RpdmUgUm9ib3RzIHByb2R1Y3QgaWRzLgotICovCi0jZGVmaW5lIEZURElfQUNUSVZFX1JPQk9UU19QSUQJMHhFNTQ4CS8qIFVTQiBjb21tcyBib2FyZCAqLwotCi0vKgotICogWHNlbnMgVGVjaG5vbG9naWVzIEJWIHByb2R1Y3RzIChodHRwOi8vd3d3LnhzZW5zLmNvbSkuCi0gKi8KLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzBfUElECTB4RDM4OAotI2RlZmluZSBYU0VOU19DT05WRVJURVJfMV9QSUQJMHhEMzg5Ci0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8yX1BJRAkweEQzOEEKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzNfUElECTB4RDM4QgotI2RlZmluZSBYU0VOU19DT05WRVJURVJfNF9QSUQJMHhEMzhDCi0jZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl81X1BJRAkweEQzOEQKLSNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzZfUElECTB4RDM4RQotI2RlZmluZSBYU0VOU19DT05WRVJURVJfN19QSUQJMHhEMzhGCi0KLS8qCi0gKiBUZXJhdHJvbmlrIHByb2R1Y3QgaWRzLgotICogU3VibWl0dGVkIGJ5IE8uIFfDtmxmZWxzY2huZWlkZXIuCi0gKi8KLSNkZWZpbmUgRlRESV9URVJBVFJPTklLX1ZDUF9QSUQJIDB4RUM4OAkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBWQ1AgZHJpdmVyIG9uIHdpbmRvd3MpICovCi0jZGVmaW5lIEZURElfVEVSQVRST05JS19EMlhYX1BJRCAweEVDODkJLyogVGVyYXRyb25payBkZXZpY2UgKHByZWZlcnJpbmcgRDJYWCBkcml2ZXIgb24gd2luZG93cykgKi8KLQotLyoKLSAqIEV2b2x1dGlvbiBSb2JvdGljcyBwcm9kdWN0cyAoaHR0cDovL3d3dy5ldm9sdXRpb24uY29tLykuCi0gKiBTdWJtaXR0ZWQgYnkgU2hhd24gTS4gTGF2ZWxsZS4KLSAqLwotI2RlZmluZSBFVk9MVVRJT05fVklECQkweERFRUUJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIEVWT0xVVElPTl9FUjFfUElECTB4MDMwMAkvKiBFUjEgQ29udHJvbCBNb2R1bGUgKi8KLSNkZWZpbmUgRVZPXzhVMjMyQU1fUElECTB4MDJGRgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNMiAoRlQyMzJBTSkqLwotI2RlZmluZSBFVk9fSFlCUklEX1BJRAkJMHgwMzAyCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAoRlQyMzJCTSkqLwotI2RlZmluZSBFVk9fUkNNNF9QSUQJCTB4MDMwMwkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKi8KLQotLyogUHlyYW1pZCBDb21wdXRlciBHbWJIICovCi0jZGVmaW5lIEZURElfUFlSQU1JRF9QSUQJMHhFNkM4CS8qIFB5cmFtaWQgQXBwbGlhbmNlIERpc3BsYXkgKi8KLQotLyoKLSAqIE5ESSAod3d3Lm5kaWdpdGFsLmNvbSkgcHJvZHVjdCBpZHMKLSAqLwotI2RlZmluZSBGVERJX05ESV9IVUNfUElECQkweERBNzAJLyogTkRJIEhvc3QgVVNCIENvbnZlcnRlciAqLwotI2RlZmluZSBGVERJX05ESV9TUEVDVFJBX1NDVV9QSUQJMHhEQTcxCS8qIE5ESSBTcGVjdHJhIFNDVSAqLwotI2RlZmluZSBGVERJX05ESV9GVVRVUkVfMl9QSUQJCTB4REE3MgkvKiBOREkgZnV0dXJlIGRldmljZSAjMiAqLwotI2RlZmluZSBGVERJX05ESV9GVVRVUkVfM19QSUQJCTB4REE3MwkvKiBOREkgZnV0dXJlIGRldmljZSAjMyAqLwotI2RlZmluZSBGVERJX05ESV9BVVJPUkFfU0NVX1BJRAkJMHhEQTc0CS8qIE5ESSBBdXJvcmEgU0NVICovCi0KLS8qCi0gKiBQb3NpZmxleCBpbmMgcmV0YWlsIGVxdWlwbWVudCAoaHR0cDovL3d3dy5wb3NpZmxleC5jb20udHcpCi0gKi8KLSNkZWZpbmUgUE9TSUZMRVhfVklECQkweDBkM2EgIC8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBQT1NJRkxFWF9QUDcwMDBfUElECTB4MDMwMCAgLyogUFAtNzAwMElJIHRoZXJtYWwgcHJpbnRlciAqLwotCi0vKgotICogV2VzdHJleCBJbnRlcm5hdGlvbmFsIGRldmljZXMgc3VibWl0dGVkIGJ5IENvcnkgTGVlCi0gKi8KLSNkZWZpbmUgRlRESV9XRVNUUkVYX01PREVMXzc3N19QSUQJMHhEQzAwCS8qIE1vZGVsIDc3NyAqLwotI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfODkwMEZfUElECTB4REMwMQkvKiBNb2RlbCA4OTAwRiAqLwotCi0vKgotICogUlItQ2lyS2l0cyBMb2NvQnVmZmVyIFVTQiAoaHR0cDovL3d3dy5yci1jaXJraXRzLmNvbSkKLSAqLwotI2RlZmluZSBGVERJX1JSQ0lSS0lUU19MT0NPQlVGRkVSX1BJRAkweGM3ZDAJLyogTG9jb0J1ZmZlciBVU0IgKi8KLQotLyoKLSAqIEVjbG8gKGh0dHA6Ly93d3cuZWNsby5wdC8pIHByb2R1Y3QgSURzLgotICogUElEIDB4RUE5MCBzdWJtaXR0ZWQgYnkgTWFydGluIEdyaWxsLgotICovCi0jZGVmaW5lIEZURElfRUNMT19DT01fMVdJUkVfUElECTB4RUE5MAkvKiBDT00gdG8gMS1XaXJlIFVTQiBhZGFwdG9yICovCi0KLS8qCi0gKiBQYXBvdWNoIHByb2R1Y3RzIChodHRwOi8vd3d3LnBhcG91Y2guY29tLykKLSAqIFN1Ym1pdHRlZCBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuCi0gKi8KLQotI2RlZmluZSBQQVBPVUNIX1ZJRAkJCTB4NTA1MAkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgUEFQT1VDSF9UTVVfUElECQkJMHgwNDAwCS8qIFRNVSBVU0IgVGhlcm1vbWV0ZXIgKi8KLSNkZWZpbmUgUEFQT1VDSF9RVUlETzR4NF9QSUQJCTB4MDkwMAkvKiBRdWlkbyA0LzQgTW9kdWxlICovCi0KLS8qCi0gKiBBQ0cgSWRlbnRpZmljYXRpb24gVGVjaG5vbG9naWVzIEdtYkggcHJvZHVjdHMgKGh0dHA6Ly93d3cuYWNnLmRlLykuCi0gKiBTdWJtaXR0ZWQgYnkgYW50b24gLWF0LSBnb3RvMTAgLWRvdC0gb3JnLgotICovCi0jZGVmaW5lIEZURElfQUNHX0hGRFVBTF9QSUQJCTB4REQyMAkvKiBIRiBEdWFsIElTTyBSZWFkZXIgKFJGSUQpICovCi0KLS8qCi0gKiBZb3N0IEVuZ2luZWVyaW5nLCBJbmMuIHByb2R1Y3RzICh3d3cueW9zdGVuZ2luZWVyaW5nLmNvbSkuCi0gKiBQSUQgMHhFMDUwIHN1Ym1pdHRlZCBieSBBYXJvbiBQcm9zZS4KLSAqLwotI2RlZmluZSBGVERJX1lFSV9TRVJWT0NFTlRFUjMxX1BJRAkweEUwNTAJLyogWUVJIFNlcnZvQ2VudGVyMy4xIFVTQiAqLwotCi0vKgotICogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMKLSAqLwotI2RlZmluZSBGVERJX1RIT1JMQUJTX1BJRAkJMHhmYWYwIC8qIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzICovCi0KLS8qCi0gKiBUZXN0byBwcm9kdWN0cyAoaHR0cDovL3d3dy50ZXN0by5jb20vKQotICogU3VibWl0dGVkIGJ5IENvbGluIExlcm95Ci0gKi8KLSNkZWZpbmUgVEVTVE9fVklECQkJMHgxMjhECi0jZGVmaW5lIFRFU1RPX1VTQl9JTlRFUkZBQ0VfUElECQkweDAwMDEKLQotLyoKLSAqIEdhbW1hIFNjb3V0IChodHRwOi8vZ2FtbWEtc2NvdXQuY29tLykuIFN1Ym1pdHRlZCBieSByc2NAcnVudHV4LmNvbS4KLSAqLwotI2RlZmluZSBGVERJX0dBTU1BX1NDT1VUX1BJRAkJMHhENjc4CS8qIEdhbW1hIFNjb3V0IG9ubGluZSAqLwotCi0vKgotICogVGFjdHJpeCBPcGVuUG9ydCAoRUNVKSBkZXZpY2VzLgotICogT3BlblBvcnQgMS4zTSBzdWJtaXR0ZWQgYnkgRG9ub3VyIFNpemVtb3JlLgotICogT3BlblBvcnQgMS4zUyBhbmQgMS4zVSBzdWJtaXR0ZWQgYnkgSWFuIEFiYm90dC4KLSAqLwotI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNNX1BJRAkweENDNDgJLyogT3BlblBvcnQgMS4zIE1pdHN1YmlzaGkgKi8KLSNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzU19QSUQJMHhDQzQ5CS8qIE9wZW5Qb3J0IDEuMyBTdWJhcnUgKi8KLSNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzVV9QSUQJMHhDQzRBCS8qIE9wZW5Qb3J0IDEuMyBVbml2ZXJzYWwgKi8KLQotLyoKLSAqIFRlbGxkdXMgVGVjaG5vbG9naWVzCi0gKi8KLSNkZWZpbmUgVEVMTERVU19WSUQJCQkweDE3ODEJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFRFTExEVVNfVEVMTFNUSUNLX1BJRAkJMHgwQzMwCS8qIFJGIGNvbnRyb2wgZG9uZ2xlIDQzMyBNSHogdXNpbmcgRlQyMzJSTCAqLwotCi0vKgotICogSUJTIGVsZWt0cm9uaWsgcHJvZHVjdCBpZHMKLSAqIFN1Ym1pdHRlZCBieSBUaG9tYXMgU2NobGV1c2VuZXIKLSAqLwotI2RlZmluZSBGVERJX0lCU19VUzQ4NV9QSUQJMHhmZjM4ICAvKiBJQlMgVVM0ODUgKFVTQjwtLT5SUzQyMi80ODUgaW50ZXJmYWNlKSAqLwotI2RlZmluZSBGVERJX0lCU19QSUNQUk9fUElECTB4ZmYzOSAgLyogSUJTIFBJQy1Qcm9ncmFtbWVyICovCi0jZGVmaW5lIEZURElfSUJTX1BDTUNJQV9QSUQJMHhmZjNhICAvKiBJQlMgQ2FyZCByZWFkZXIgZm9yIFBDTUNJQSBTUkFNLWNhcmRzICovCi0jZGVmaW5lIEZURElfSUJTX1BLMV9QSUQJMHhmZjNiICAvKiBJQlMgUEsxIC0gUGFydGljZWwgY291bnRlciAqLwotI2RlZmluZSBGVERJX0lCU19SUzIzMk1PTl9QSUQJMHhmZjNjICAvKiBJQlMgUlMyMzIgLSBNb25pdG9yICovCi0jZGVmaW5lIEZURElfSUJTX0FQUDcwX1BJRAkweGZmM2QgIC8qIEFQUCA3MCAoZHVzdCBtb25pdG9yaW5nIHN5c3RlbSkgKi8KLSNkZWZpbmUgRlRESV9JQlNfUEVET19QSUQJMHhmZjNlICAvKiBJQlMgUEVETy1Nb2RlbSAoUkYgbW9kZW0gODY4LjM1IE1IeikgKi8KLSNkZWZpbmUgRlRESV9JQlNfUFJPRF9QSUQJMHhmZjNmICAvKiBmdXR1cmUgZGV2aWNlICovCi0KLS8qCi0gKiAgTWF4U3RyZWFtIGRldmljZXMJd3d3Lm1heHN0cmVhbS5uZXQKLSAqLwotI2RlZmluZSBGVERJX01BWFNUUkVBTV9QSUQJMHhFRTE4CS8qIFhiZWUgUEtHLVUgTW9kdWxlICovCi0KLS8qIE9saW1leCAqLwotI2RlZmluZSBPTElNRVhfVklECQkJMHgxNUJBCi0jZGVmaW5lIE9MSU1FWF9BUk1fVVNCX09DRF9QSUQJCTB4MDAwMwotCi0vKiBMdW1pbmFyeSBNaWNybyBTdGVsbGFyaXMgQm9hcmRzLCBWSUQgPSBGVERJX1ZJRCAqLwotLyogRlRESSAyMzMyQyBEdWFsIGNoYW5uZWwgZGV2aWNlLCBzaWRlIEE9MjQ1IEZJRk8gKEpUQUcpLCBTaWRlIEI9UlMyMzIgVUFSVCAqLwotI2RlZmluZSBMTUlfTE0zU19ERVZFTF9CT0FSRF9QSUQJMHhiY2Q4Ci0jZGVmaW5lIExNSV9MTTNTX0VWQUxfQk9BUkRfUElECQkweGJjZDkKLQotLyogd3d3LmVsc3RlcmVsZWN0cmljaXR5LmNvbSBFbHN0ZXIgVW5pY29tIElJSSBPcHRpY2FsIFByb2JlICovCi0jZGVmaW5lIEZURElfRUxTVEVSX1VOSUNPTV9QSUQJCTB4RTcwMCAvKiBQcm9kdWN0IElkICovCi0KLS8qCi0gKiBUaGUgTW9iaWxpdHkgTGFiIChUTUwpCi0gKiBTdWJtaXR0ZWQgYnkgUGllcnJlIENhc3RlbGxhCi0gKi8KLSNkZWZpbmUgVE1MX1ZJRAkJCTB4MUI5MQkvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgVE1MX1VTQl9TRVJJQUxfUElECTB4MDA2NAkvKiBVU0IgLSBTZXJpYWwgQ29udmVydGVyICovCi0KLS8qIFByb3BveCBkZXZpY2VzICovCi0jZGVmaW5lIEZURElfUFJPUE9YX0pUQUdDQUJMRUlJX1BJRAkweEQ3MzgKLQotLyogUmlnIEV4cGVydCBVa3JhaW5lIGRldmljZXMgKi8KLSNkZWZpbmUgRlRESV9SRVVfVElOWV9QSUQJCTB4RUQyMgkvKiBSaWdFeHBlcnQgVGlueSAqLwotCi0vKiBEb21pbnRlbGwgcHJvZHVjdHMgIGh0dHA6Ly93d3cuZG9taW50ZWxsLmNvbSAqLwotI2RlZmluZSBGVERJX0RPTUlOVEVMTF9ER1FHX1BJRAkweEVGNTAJLyogTWFzdGVyICovCi0jZGVmaW5lIEZURElfRE9NSU5URUxMX0RVU0JfUElECTB4RUY1MQkvKiBEVVNCMDEgbW9kdWxlICovCi0KLS8qIEFsdGktMiBwcm9kdWN0cyAgaHR0cDovL3d3dy5hbHRpLTIuY29tICovCi0jZGVmaW5lIEFMVEkyX1ZJRAkweDFCQzkKLSNkZWZpbmUgQUxUSTJfTjNfUElECTB4NjAwMQkvKiBOZXB0dW5lIDMgKi8KLQogLyogQ29tbWFuZHMgKi8KICNkZWZpbmUgRlRESV9TSU9fUkVTRVQgCQkwIC8qIFJlc2V0IHRoZSBwb3J0ICovCiAjZGVmaW5lIEZURElfU0lPX01PREVNX0NUUkwgCTEgLyogU2V0IHRoZSBtb2RlbSBjb250cm9sIHJlZ2lzdGVyICovCkBAIC05MTAsODYgKzQwLDYgQEAKICNkZWZpbmUgSU5URVJGQUNFX0MJCTMKICNkZWZpbmUgSU5URVJGQUNFX0QJCTQKIAotLyoKLSAqIEZJQyAvIE9wZW5Nb2tvLCBJbmMuIGh0dHA6Ly93aWtpLm9wZW5tb2tvLm9yZy93aWtpL05lbzE5NzNfRGVidWdfQm9hcmRfdjMKLSAqIFN1Ym1pdHRlZCBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAb3Blbm1va28ub3JnPgotICovCi0jZGVmaW5lCUZJQ19WSUQJCQkweDE0NTcKLSNkZWZpbmUJRklDX05FTzE5NzNfREVCVUdfUElECTB4NTExOAotCi0vKgotICogUkFUT0MgUkVYLVVTQjYwRgotICovCi0jZGVmaW5lIFJBVE9DX1ZFTkRPUl9JRAkJMHgwNTg0Ci0jZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAotCi0vKgotICogRElFQk9MRCBCQ1MgU0U5MjMKLSAqLwotI2RlZmluZSBESUVCT0xEX0JDU19TRTkyM19QSUQJMHhmYjk5Ci0KLS8qCi0gKiBBdG1lbCBTVEs1NDEKLSAqLwotI2RlZmluZSBBVE1FTF9WSUQJCTB4MDNlYiAvKiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgU1RLNTQxX1BJRAkJMHgyMTA5IC8qIFppZ2JlZSBDb250cm9sbGVyICovCi0KLS8qCi0gKiBEcmVzZGVuIEVsZWt0cm9uaWMgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCi0gKi8KLSNkZWZpbmUgREVfVklECQkJMHgxY2YxIC8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBTVEJfUElECQkJMHgwMDAxIC8qIFNlbnNvciBUZXJtaW5hbCBCb2FyZCAqLwotI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCi0KLS8qCi0gKiBCbGFja2ZpbiBnbklDRSBKVEFHCi0gKiBodHRwOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1odzpqdGFnOmduaWNlCi0gKi8KLSNkZWZpbmUgQURJX1ZJRCAJCTB4MDQ1NgotI2RlZmluZSBBRElfR05JQ0VfUElEIAkJMHhGMDAwCi0jZGVmaW5lIEFESV9HTklDRVBMVVNfUElEIAkweEYwMDEKLQotLyoKLSAqIEpFVEkgU1BFQ1RST01FVEVSIFNQRUNCT1MgMTIwMQotICogaHR0cDovL3d3dy5qZXRpLmNvbS9wcm9kdWN0cy9zeXMvc2NiL3NjYjEyMDEucGhwCi0gKi8KLSNkZWZpbmUgSkVUSV9WSUQJCTB4MGM2YwotI2RlZmluZSBKRVRJX1NQQzEyMDFfUElECTB4MDRiMgotCi0vKgotICogTWFydmVsbCBTaGVldmFQbHVnCi0gKi8KLSNkZWZpbmUgTUFSVkVMTF9WSUQJCTB4OWU4OAotI2RlZmluZSBNQVJWRUxMX1NIRUVWQVBMVUdfUElECTB4OWU4ZgotCi0jZGVmaW5lIEZURElfVFVSVEVMSVpFUl9QSUQJMHhCREM4IC8qIEpUQUcvUlMtMjMyIGFkYXB0ZXIgYnkgZWduaXRlIEdtQkggKi8KLQotLyoKLSAqIEdOIE90b21ldHJpY3MgKGh0dHA6Ly93d3cub3RvbWV0cmljcy5jb20pCi0gKiBTdWJtaXR0ZWQgYnkgVmlsbGUgU3VuZGJlcmcuCi0gKi8KLSNkZWZpbmUgR05fT1RPTUVUUklDU19WSUQJMHgwYzMzCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBBVVJJQ0FMX1VTQl9QSUQJCTB4MDAxMAkvKiBBdXJpY2FsIFVTQiBBdWRpb21ldGVyICovCi0KLS8qCi0gKiBCYXllciBBc2NlbnNpYSBDb250b3VyIGJsb29kIGdsdWNvc2UgbWV0ZXIgVVNCLWNvbnZlcnRlciBjYWJsZS4KLSAqIGh0dHA6Ly93aW5nbHVjb2ZhY3RzLmNvbS9jYWJsZXMvCi0gKi8KLSNkZWZpbmUgQkFZRVJfVklEICAgICAgICAgICAgICAgICAgICAgIDB4MUE3OQotI2RlZmluZSBCQVlFUl9DT05UT1VSX0NBQkxFX1BJRCAgICAgICAgMHg2MDAxCi0KLS8qCi0gKiBNYXJ2ZWxsIE9wZW5SRCBCYXNlLCBDbGllbnQKLSAqIGh0dHA6Ly93d3cub3Blbi1yZC5vcmcKLSAqIE9wZW5SRCBCYXNlLCBDbGllbnQgdXNlIFZJRCAweDA0MDMKLSAqLwotI2RlZmluZSBNQVJWRUxMX09QRU5SRF9QSUQJMHg5ZTkwCi0KLS8qCi0gKiBIYW1lZyBITzgyMCBhbmQgSE84NzAgaW50ZXJmYWNlICh1c2luZyBWSUQgMHgwNDAzKQotICovCi0jZGVmaW5lICAgICAgICBIQU1FR19ITzgyMF9QSUQgICAgICAgICAweGVkNzQKLSNkZWZpbmUgICAgICAgIEhBTUVHX0hPODcwX1BJRCAgICAgICAgIDB4ZWQ3MQogCiAvKgogICogICBCbVJlcXVlc3RUeXBlOiAgMTEwMCAwMDAwYgpAQCAtMTUwNCw0ICs1NTQsMyBAQAogICogQjIuLjcJTGVuZ3RoIG9mIG1lc3NhZ2UgLSAobm90IGluY2x1ZGluZyBCeXRlIDApCiAgKgogICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTkyYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC0wLDAgKzEsOTg2IEBACisvKgorICogdmVuZG9yL3Byb2R1Y3QgSURzIChWSUQvUElEKSBvZiBkZXZpY2VzIHVzaW5nIEZUREkgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzLgorICogUGxlYXNlIGtlZXAgbnVtZXJpY2FsbHkgc29ydGVkIHdpdGhpbiBpbmRpdmlkdWFsIGFyZWFzLCB0aGFua3MhCisgKgorICogUGhpbGlwcCBH/GhyaW5nIC0gcGdAZnV0dXJld2FyZS5hdCAtIGFkZGVkIHRoZSBEZXZpY2UgSUQgb2YgdGhlIFVTQiByZWxhaXMKKyAqIGZyb20gUnVkb2xmIEd1Z2xlcgorICoKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqIGRldmljZXMgdXNpbmcgRlRESSBWSUQgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIEZURElfVklECTB4MDQwMwkvKiBWZW5kb3IgSWQgKi8KKworCisvKioqICJvcmlnaW5hbCIgRlRESSBkZXZpY2UgUElEcyAqKiovCisKKyNkZWZpbmUgRlRESV84VTIzMkFNX1BJRCAweDYwMDEgLyogU2ltaWxhciBkZXZpY2UgdG8gU0lPIGFib3ZlICovCisjZGVmaW5lIEZURElfOFUyMzJBTV9BTFRfUElEIDB4NjAwNiAvKiBGVERJJ3MgYWx0ZXJuYXRlIFBJRCBmb3IgYWJvdmUgKi8KKyNkZWZpbmUgRlRESV84VTIyMzJDX1BJRCAweDYwMTAgLyogRHVhbCBjaGFubmVsIGRldmljZSAqLworI2RlZmluZSBGVERJXzQyMzJIX1BJRCAweDYwMTEgLyogUXVhZCBjaGFubmVsIGhpLXNwZWVkIGRldmljZSAqLworI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggICovCisjZGVmaW5lIEZURElfMjMyUkxfUElEICAweEZCRkEgIC8qIFByb2R1Y3QgSUQgZm9yIEZUMjMyUkwgKi8KKworCisvKioqIHRoaXJkLXBhcnR5IFBJRHMgKHVzaW5nIEZURElfVklEKSAqKiovCisKKy8qCisgKiBNYXJ2ZWxsIE9wZW5SRCBCYXNlLCBDbGllbnQKKyAqIGh0dHA6Ly93d3cub3Blbi1yZC5vcmcKKyAqIE9wZW5SRCBCYXNlLCBDbGllbnQgdXNlIFZJRCAweDA0MDMKKyAqLworI2RlZmluZSBNQVJWRUxMX09QRU5SRF9QSUQJMHg5ZTkwCisKKy8qIHd3dy5jYW5kYXB0ZXIuY29tIEV3ZXJ0IEVuZXJneSBTeXN0ZW1zIENBTmRhcHRlciBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9DQU5EQVBURVJfUElEIDB4OUY4MCAvKiBQcm9kdWN0IElkICovCisKKy8qIE9PQ0RsaW5rIGJ5IEpvZXJuIEthaXBmIDxqb2VybmtAd2ViLmRlPgorICogKGh0dHA6Ly93d3cuam9lcm5vbmxpbmUuZGUvZHcvZG9rdS5waHA/aWQ9c3RhcnQmaWR4PXByb2plY3RzOm9vY2RsaW5rKSAqLworI2RlZmluZSBGVERJX09PQ0RMSU5LX1BJRAkweGJhZjgJLyogQW1vbnRlYyBKVEFHa2V5ICovCisKKy8qIEx1bWluYXJ5IE1pY3JvIFN0ZWxsYXJpcyBCb2FyZHMsIFZJRCA9IEZURElfVklEICovCisvKiBGVERJIDIzMzJDIER1YWwgY2hhbm5lbCBkZXZpY2UsIHNpZGUgQT0yNDUgRklGTyAoSlRBRyksIFNpZGUgQj1SUzIzMiBVQVJUICovCisjZGVmaW5lIExNSV9MTTNTX0RFVkVMX0JPQVJEX1BJRAkweGJjZDgKKyNkZWZpbmUgTE1JX0xNM1NfRVZBTF9CT0FSRF9QSUQJCTB4YmNkOQorCisjZGVmaW5lIEZURElfVFVSVEVMSVpFUl9QSUQJMHhCREM4IC8qIEpUQUcvUlMtMjMyIGFkYXB0ZXIgYnkgZWduaXRlIEdtQkggKi8KKworLyogT3BlbkRDQyAod3d3Lm9wZW5kY2MuZGUpIHByb2R1Y3QgaWQgKi8KKyNkZWZpbmUgRlRESV9PUEVORENDX1BJRAkweEJGRDgKKyNkZWZpbmUgRlRESV9PUEVORENDX1NOSUZGRVJfUElECTB4QkZEOQorI2RlZmluZSBGVERJX09QRU5EQ0NfVEhST1RUTEVfUElECTB4QkZEQQorI2RlZmluZSBGVERJX09QRU5EQ0NfR0FURVdBWV9QSUQJMHhCRkRCCisKKy8qCisgKiBSUi1DaXJLaXRzIExvY29CdWZmZXIgVVNCIChodHRwOi8vd3d3LnJyLWNpcmtpdHMuY29tKQorICovCisjZGVmaW5lIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElECTB4YzdkMAkvKiBMb2NvQnVmZmVyIFVTQiAqLworCisvKiBETVg0QUxMIERNWCBJbnRlcmZhY2VzICovCisjZGVmaW5lIEZURElfRE1YNEFMTCAweEM4NTAKKworLyoKKyAqIEFTSy5mciBkZXZpY2VzCisgKi8KKyNkZWZpbmUgRlRESV9BU0tfUkRSNDAwX1BJRAkweEM5OTEJLyogQVNLIFJEUiA0MDAgc2VyaWVzIGNhcmQgcmVhZGVyICovCisKKy8qIHd3dy5zdGFydGluZy1wb2ludC1zeXN0ZW1zLmNvbSC1Q2hhbWVsZW9uIGRldmljZSAqLworI2RlZmluZSBGVERJX01JQ1JPX0NIQU1FTEVPTl9QSUQJMHhDQUEwCS8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIFRhY3RyaXggT3BlblBvcnQgKEVDVSkgZGV2aWNlcy4KKyAqIE9wZW5Qb3J0IDEuM00gc3VibWl0dGVkIGJ5IERvbm91ciBTaXplbW9yZS4KKyAqIE9wZW5Qb3J0IDEuM1MgYW5kIDEuM1Ugc3VibWl0dGVkIGJ5IElhbiBBYmJvdHQuCisgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzTV9QSUQJMHhDQzQ4CS8qIE9wZW5Qb3J0IDEuMyBNaXRzdWJpc2hpICovCisjZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1NfUElECTB4Q0M0OQkvKiBPcGVuUG9ydCAxLjMgU3ViYXJ1ICovCisjZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1VfUElECTB4Q0M0QQkvKiBPcGVuUG9ydCAxLjMgVW5pdmVyc2FsICovCisKKy8qIFNDUyBIRiBSYWRpbyBNb2RlbXMgUElEJ3MgKGh0dHA6Ly93d3cuc2NzLXB0Yy5jb20pICovCisvKiB0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8wX1BJRCAweEQwMTAgICAgLyogU0NTIFBUQy1JSXVzYiAqLworI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfMV9QSUQgMHhEMDExICAgIC8qIFNDUyBUcmFja2VyIC8gRFNQIFROQyAqLworI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfMl9QSUQgMHhEMDEyCisjZGVmaW5lIEZURElfU0NTX0RFVklDRV8zX1BJRCAweEQwMTMKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzRfUElEIDB4RDAxNAorI2RlZmluZSBGVERJX1NDU19ERVZJQ0VfNV9QSUQgMHhEMDE1CisjZGVmaW5lIEZURElfU0NTX0RFVklDRV82X1BJRCAweEQwMTYKKyNkZWZpbmUgRlRESV9TQ1NfREVWSUNFXzdfUElEIDB4RDAxNworCisvKiBpUGx1cyBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9JUExVUzJfUElEIDB4RDA3MSAvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBHYW1tYSBTY291dCAoaHR0cDovL2dhbW1hLXNjb3V0LmNvbS8pLiBTdWJtaXR0ZWQgYnkgcnNjQHJ1bnR1eC5jb20uCisgKi8KKyNkZWZpbmUgRlRESV9HQU1NQV9TQ09VVF9QSUQJCTB4RDY3OAkvKiBHYW1tYSBTY291dCBvbmxpbmUgKi8KKworLyogUHJvcG94IGRldmljZXMgKi8KKyNkZWZpbmUgRlRESV9QUk9QT1hfSlRBR0NBQkxFSUlfUElECTB4RDczOAorCisvKgorICogWHNlbnMgVGVjaG5vbG9naWVzIEJWIHByb2R1Y3RzIChodHRwOi8vd3d3LnhzZW5zLmNvbSkuCisgKi8KKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzBfUElECTB4RDM4OAorI2RlZmluZSBYU0VOU19DT05WRVJURVJfMV9QSUQJMHhEMzg5CisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8yX1BJRAkweEQzOEEKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzNfUElECTB4RDM4QgorI2RlZmluZSBYU0VOU19DT05WRVJURVJfNF9QSUQJMHhEMzhDCisjZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl81X1BJRAkweEQzOEQKKyNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzZfUElECTB4RDM4RQorI2RlZmluZSBYU0VOU19DT05WRVJURVJfN19QSUQJMHhEMzhGCisKKy8qCisgKiBOREkgKHd3dy5uZGlnaXRhbC5jb20pIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgRlRESV9ORElfSFVDX1BJRAkJMHhEQTcwCS8qIE5ESSBIb3N0IFVTQiBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgRlRESV9ORElfU1BFQ1RSQV9TQ1VfUElECTB4REE3MQkvKiBOREkgU3BlY3RyYSBTQ1UgKi8KKyNkZWZpbmUgRlRESV9ORElfRlVUVVJFXzJfUElECQkweERBNzIJLyogTkRJIGZ1dHVyZSBkZXZpY2UgIzIgKi8KKyNkZWZpbmUgRlRESV9ORElfRlVUVVJFXzNfUElECQkweERBNzMJLyogTkRJIGZ1dHVyZSBkZXZpY2UgIzMgKi8KKyNkZWZpbmUgRlRESV9ORElfQVVST1JBX1NDVV9QSUQJCTB4REE3NAkvKiBOREkgQXVyb3JhIFNDVSAqLworCisvKgorICogV2VzdHJleCBJbnRlcm5hdGlvbmFsIGRldmljZXMgc3VibWl0dGVkIGJ5IENvcnkgTGVlCisgKi8KKyNkZWZpbmUgRlRESV9XRVNUUkVYX01PREVMXzc3N19QSUQJMHhEQzAwCS8qIE1vZGVsIDc3NyAqLworI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfODkwMEZfUElECTB4REMwMQkvKiBNb2RlbCA4OTAwRiAqLworCisvKgorICogQUNHIElkZW50aWZpY2F0aW9uIFRlY2hub2xvZ2llcyBHbWJIIHByb2R1Y3RzIChodHRwOi8vd3d3LmFjZy5kZS8pLgorICogU3VibWl0dGVkIGJ5IGFudG9uIC1hdC0gZ290bzEwIC1kb3QtIG9yZy4KKyAqLworI2RlZmluZSBGVERJX0FDR19IRkRVQUxfUElECQkweEREMjAJLyogSEYgRHVhbCBJU08gUmVhZGVyIChSRklEKSAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEFydGVtaXMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCisgKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmFydGVtaXNjY2QuY28udWsvCisgKi8KKyNkZWZpbmUgRlRESV9BUlRFTUlTX1BJRAkweERGMjgJLyogQWxsIEFydGVtaXMgQ2FtZXJhcyAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIEFUSUsgSW5zdHJ1bWVudHMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCisgKiBDaGVjayBpdCBhdCBodHRwOi8vd3d3LmF0aWstaW5zdHJ1bWVudHMuY29tLworICovCisjZGVmaW5lIEZURElfQVRJS19BVEsxNl9QSUQJMHhERjMwCS8qIEFUSUsgQVRLLTE2IEdyYXlzY2FsZSBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2Q19QSUQJMHhERjMyCS8qIEFUSUsgQVRLLTE2QyBDb2xvdXIgQ2FtZXJhICovCisjZGVmaW5lIEZURElfQVRJS19BVEsxNkhSX1BJRAkweERGMzEJLyogQVRJSyBBVEstMTZIUiBHcmF5c2NhbGUgQ2FtZXJhICovCisjZGVmaW5lIEZURElfQVRJS19BVEsxNkhSQ19QSUQJMHhERjMzCS8qIEFUSUsgQVRLLTE2SFJDIENvbG91ciBDYW1lcmEgKi8KKyNkZWZpbmUgRlRESV9BVElLX0FUSzE2SUNfUElEICAgMHhERjM1ICAvKiBBVElLIEFUSy0xNklDIEdyYXlzY2FsZSBDYW1lcmEgKi8KKworLyoKKyAqIFlvc3QgRW5naW5lZXJpbmcsIEluYy4gcHJvZHVjdHMgKHd3dy55b3N0ZW5naW5lZXJpbmcuY29tKS4KKyAqIFBJRCAweEUwNTAgc3VibWl0dGVkIGJ5IEFhcm9uIFByb3NlLgorICovCisjZGVmaW5lIEZURElfWUVJX1NFUlZPQ0VOVEVSMzFfUElECTB4RTA1MAkvKiBZRUkgU2Vydm9DZW50ZXIzLjEgVVNCICovCisKKy8qCisgKiBFTFYgVVNCIGRldmljZXMgc3VibWl0dGVkIGJ5IENocmlzdGlhbiBBYnQgb2YgRUxWICh3d3cuZWx2LmRlKS4KKyAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgorICoKKyAqIFRoZSBwcmV2aW91c2x5IGluY2x1ZGVkIFBJRCBmb3IgdGhlIFVPIDEwMCBtb2R1bGUgd2FzIGluY29ycmVjdC4KKyAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCisgKgorICogQXJtaW4gTGFldWdlciBvcmlnaW5hbGx5IHNlbnQgdGhlIFBJRCBmb3IgdGhlIFVNIDEwMCBtb2R1bGUuCisgKi8KKyNkZWZpbmUgRlRESV9FTFZfRkhaMTMwMFBDX1BJRAkweEUwRTgJLyogRkhaIDEzMDAgUEMgKi8KKyNkZWZpbmUgRlRESV9FTFZfV1M1MDBfUElECTB4RTBFOQkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyA1MDApICovCisjZGVmaW5lIEZURElfRUxWX0hTNDg1X1BJRAkweEUwRUEJLyogVVNCIHRvIFJTLTQ4NSBhZGFwdGVyICovCisjZGVmaW5lIEZURElfRUxWX0VNMTAxMFBDX1BJRAkweEUwRUYJLyogRW5nZXJ5IG1vbml0b3IgRU0gMTAxMCBQQyAqLworI2RlZmluZSBGVERJX0VMVl9DU0k4X1BJRAkweEUwRjAJLyogQ29tcHV0ZXItU2NoYWx0LUludGVyZmFjZSAoQ1NJIDgpICovCisjZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUENLMTAwX1BJRAkweEUwRjIJLyogUEMtS2FiZWx0ZXN0ZXIgKFBDSyAxMDApICovCisjZGVmaW5lIEZURElfRUxWX1JGUDUwMF9QSUQJMHhFMEYzCS8qIEhGLUxlaXN0dW5nc21lc3NlciAoUkZQIDUwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCisjZGVmaW5lIEZURElfRUxWX1dTMzAwUENfUElECTB4RTBGNgkvKiBQQy1XZXR0ZXJzdGF0aW9uIChXUyAzMDAgUEMpICovCisjZGVmaW5lIEZURElfUEhJX0ZJU0NPX1BJRCAgICAgIDB4RTQwQiAgLyogUEhJIEZpc2NvIFVTQiB0byBTZXJpYWwgY2FibGUgKi8KKyNkZWZpbmUgRlRESV9FTFZfVUFEOF9QSUQJMHhGMDY4CS8qIFVTQi1BRC1XYW5kbGVyIChVQUQgOCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfVURBN19QSUQJMHhGMDY5CS8qIFVTQi1EQS1XYW5kbGVyIChVREEgNykgKi8KKyNkZWZpbmUgRlRESV9FTFZfVVNJMl9QSUQJMHhGMDZBCS8qIFVTQi1TY2hyaXR0bW90b3Jlbi1JbnRlcmZhY2UgKFVTSSAyKSAqLworI2RlZmluZSBGVERJX0VMVl9UMTEwMF9QSUQJMHhGMDZCCS8qIFRoZXJtb21ldGVyIChUIDExMDApICovCisjZGVmaW5lIEZURElfRUxWX1BDRDIwMF9QSUQJMHhGMDZDCS8qIFBDLURhdGVubG9nZ2VyIChQQ0QgMjAwKSAqLworI2RlZmluZSBGVERJX0VMVl9VTEEyMDBfUElECTB4RjA2RAkvKiBVU0ItTENELUFuc3RldWVydW5nIChVTEEgMjAwKSAqLworI2RlZmluZSBGVERJX0VMVl9BTEM4NTAwX1BJRAkweEYwNkUJLyogQUxDIDg1MDAgRXhwZXJ0ICovCisjZGVmaW5lIEZURElfRUxWX0ZIWjEwMDBQQ19QSUQJMHhGMDZGCS8qIEZIWiAxMDAwIFBDICovCisjZGVmaW5lIEZURElfRUxWX1VSMTAwX1BJRAkweEZCNTgJLyogVVNCLVJTMjMyLVVtc2V0emVyIChVUiAxMDApICovCisjZGVmaW5lIEZURElfRUxWX1VNMTAwX1BJRAkweEZCNUEJLyogVVNCLU1vZHVsIFVNIDEwMCAqLworI2RlZmluZSBGVERJX0VMVl9VTzEwMF9QSUQJMHhGQjVCCS8qIFVTQi1Nb2R1bCBVTyAxMDAgKi8KKy8qIEFkZGl0aW9uYWwgRUxWIFBJRHMgdGhhdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSBGVERJIEQyWFggZHJpdmVycyBvbgorICogTVMgV2luZG93cywgcmF0aGVyIHRoYW4gdGhlIEZUREkgVmlydHVhbCBDb20gUG9ydCBkcml2ZXJzLgorICogTWF5YmUgdGhlc2Ugd2lsbCBiZSBlYXNpZXIgdG8gdXNlIHdpdGggdGhlIGxpYmZ0ZGkvbGlidXNiIHVzZXItc3BhY2UKKyAqIGRyaXZlcnMsIG9yIHBvc3NpYmx5IHRoZSBDb21lZGkgZHJpdmVycyBpbiBzb21lIGNhc2VzLiAqLworI2RlZmluZSBGVERJX0VMVl9DTEk3MDAwX1BJRAkweEZCNTkJLyogQ29tcHV0ZXItTGlnaHQtSW50ZXJmYWNlIChDTEkgNzAwMCkgKi8KKyNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLworI2RlZmluZSBGVERJX0VMVl9URk0xMDBfUElECTB4RkI1RAkvKiBUZW1wZXJhcnR1ci1GZXVjaHRlIE1lc3NnZXJhZXQgKFRGTSAxMDApICovCisjZGVmaW5lIEZURElfRUxWX1VERjc3X1BJRAkweEZCNUUJLyogVVNCIERDRiBGdW5rdXJoIChVREYgNzcpICovCisjZGVmaW5lIEZURElfRUxWX1VJTzg4X1BJRAkweEZCNUYJLyogVVNCLUkvTyBJbnRlcmZhY2UgKFVJTyA4OCkgKi8KKworLyoKKyAqIEVWRVIgRWNvIFBybyBVUFMgKGh0dHA6Ly93d3cuZXZlci5jb20ucGwvKQorICovCisKKyNkZWZpbmUJRVZFUl9FQ09fUFJPX0NEUwkweGU1MjAJLyogUlMtMjMyIGNvbnZlcnRlciAqLworCisvKgorICogQWN0aXZlIFJvYm90cyBwcm9kdWN0IGlkcy4KKyAqLworI2RlZmluZSBGVERJX0FDVElWRV9ST0JPVFNfUElECTB4RTU0OAkvKiBVU0IgY29tbXMgYm9hcmQgKi8KKworLyogUHlyYW1pZCBDb21wdXRlciBHbWJIICovCisjZGVmaW5lIEZURElfUFlSQU1JRF9QSUQJMHhFNkM4CS8qIFB5cmFtaWQgQXBwbGlhbmNlIERpc3BsYXkgKi8KKworLyogd3d3LmVsc3RlcmVsZWN0cmljaXR5LmNvbSBFbHN0ZXIgVW5pY29tIElJSSBPcHRpY2FsIFByb2JlICovCisjZGVmaW5lIEZURElfRUxTVEVSX1VOSUNPTV9QSUQJCTB4RTcwMCAvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBHdWRlIEFuYWxvZy0gdW5kIERpZ2l0YWxzeXN0ZW1lIEdtYkgKKyAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOF9QSUQgICAgMHhFODA4CisjZGVmaW5lIEZURElfR1VERUFEU19FODA5X1BJRCAgICAweEU4MDkKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEFfUElEICAgIDB4RTgwQQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQl9QSUQgICAgMHhFODBCCisjZGVmaW5lIEZURElfR1VERUFEU19FODBDX1BJRCAgICAweEU4MEMKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MERfUElEICAgIDB4RTgwRAorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRV9QSUQgICAgMHhFODBFCisjZGVmaW5lIEZURElfR1VERUFEU19FODBGX1BJRCAgICAweEU4MEYKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4ODhfUElEICAgIDB4RTg4OCAgLyogRXhwZXJ0IElTRE4gQ29udHJvbCBVU0IgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4ODlfUElEICAgIDB4RTg4OSAgLyogVVNCIFJTLTIzMiBPcHRvQnJpZGdlICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODhBX1BJRCAgICAweEU4OEEKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEJfUElEICAgIDB4RTg4QgorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Q19QSUQgICAgMHhFODhDCisjZGVmaW5lIEZURElfR1VERUFEU19FODhEX1BJRCAgICAweEU4OEQKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEVfUElEICAgIDB4RTg4RQorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Rl9QSUQgICAgMHhFODhGCisKKy8qCisgKiBFY2xvIChodHRwOi8vd3d3LmVjbG8ucHQvKSBwcm9kdWN0IElEcy4KKyAqIFBJRCAweEVBOTAgc3VibWl0dGVkIGJ5IE1hcnRpbiBHcmlsbC4KKyAqLworI2RlZmluZSBGVERJX0VDTE9fQ09NXzFXSVJFX1BJRAkweEVBOTAJLyogQ09NIHRvIDEtV2lyZSBVU0IgYWRhcHRvciAqLworCisvKiBUTkMtWCBVU0ItdG8tcGFja2V0LXJhZGlvIGFkYXB0ZXIsIHZlcnNpb25zIHByaW9yIHRvIDMuMCAoRExQIG1vZHVsZSkgKi8KKyNkZWZpbmUgRlRESV9UTkNfWF9QSUQJCTB4RUJFMAorCisvKgorICogVGVyYXRyb25payBwcm9kdWN0IGlkcy4KKyAqIFN1Ym1pdHRlZCBieSBPLiBX9mxmZWxzY2huZWlkZXIuCisgKi8KKyNkZWZpbmUgRlRESV9URVJBVFJPTklLX1ZDUF9QSUQJIDB4RUM4OAkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBWQ1AgZHJpdmVyIG9uIHdpbmRvd3MpICovCisjZGVmaW5lIEZURElfVEVSQVRST05JS19EMlhYX1BJRCAweEVDODkJLyogVGVyYXRyb25payBkZXZpY2UgKHByZWZlcnJpbmcgRDJYWCBkcml2ZXIgb24gd2luZG93cykgKi8KKworLyogUmlnIEV4cGVydCBVa3JhaW5lIGRldmljZXMgKi8KKyNkZWZpbmUgRlRESV9SRVVfVElOWV9QSUQJCTB4RUQyMgkvKiBSaWdFeHBlcnQgVGlueSAqLworCisvKgorICogSGFtZWcgSE84MjAgYW5kIEhPODcwIGludGVyZmFjZSAodXNpbmcgVklEIDB4MDQwMykKKyAqLworI2RlZmluZSAgICAgICAgSEFNRUdfSE84MjBfUElEICAgICAgICAgMHhlZDc0CisjZGVmaW5lICAgICAgICBIQU1FR19ITzg3MF9QSUQgICAgICAgICAweGVkNzEKKworLyoKKyAqICBNYXhTdHJlYW0gZGV2aWNlcwl3d3cubWF4c3RyZWFtLm5ldAorICovCisjZGVmaW5lIEZURElfTUFYU1RSRUFNX1BJRAkweEVFMTgJLyogWGJlZSBQS0ctVSBNb2R1bGUgKi8KKworLyoKKyAqIG1pY3JvSEFNIHByb2R1Y3QgSURzIChodHRwOi8vd3d3Lm1pY3JvaGFtLmNvbSkuCisgKiBTdWJtaXR0ZWQgYnkgSnVzdGluIEJ1cmtldCAoS0wxUkwpIDx6b3J0b25AanRhbi5jb20+CisgKiBhbmQgTWlrZSBTdHVkZXIgKEs2RUVQKSA8azZlZXBAaGFtc29mdHdhcmUub3JnPi4KKyAqIElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPiBhZGRlZCBhIGZldyBtb3JlIGZyb20gdGhlIGRyaXZlciBJTkYgZmlsZS4KKyAqLworI2RlZmluZSBGVERJX01IQU1fS1dfUElEIDB4RUVFOAkJLyogVVNCLUtXIGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fWVNfUElEIDB4RUVFOQkJLyogVVNCLVlTIGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fWTZfUElEIDB4RUVFQQkJLyogVVNCLVk2IGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fWThfUElEIDB4RUVFQgkJLyogVVNCLVk4IGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fSUNfUElEIDB4RUVFQwkJLyogVVNCLUlDIGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fREI5X1BJRCAweEVFRUQJLyogVVNCLURCOSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgRlRESV9NSEFNX1JTMjMyX1BJRCAweEVFRUUJLyogVVNCLVJTMjMyIGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fWTlfUElEIDB4RUVFRgkJLyogVVNCLVk5IGludGVyZmFjZSAqLworCisvKiBEb21pbnRlbGwgcHJvZHVjdHMgIGh0dHA6Ly93d3cuZG9taW50ZWxsLmNvbSAqLworI2RlZmluZSBGVERJX0RPTUlOVEVMTF9ER1FHX1BJRAkweEVGNTAJLyogTWFzdGVyICovCisjZGVmaW5lIEZURElfRE9NSU5URUxMX0RVU0JfUElECTB4RUY1MQkvKiBEVVNCMDEgbW9kdWxlICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgUGVybGUgU3lzdGVtcworICogVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycworICovCisjZGVmaW5lIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCAweEYwQzAJLyogUGVybGUgVWx0cmFQb3J0IFByb2R1Y3QgSWQgKi8KKworLyogU3Byb2cgSUkgKEFuZHJldyBDcm9zbGFuZCdzIFNwcm9nSUkgRENDIGludGVyZmFjZSkgKi8KKyNkZWZpbmUgRlRESV9TUFJPR19JSQkJMHhGMEM4CisKKy8qIGFuIGluZnJhcmVkIHJlY2VpdmVyIGZvciB1c2VyIGFjY2VzcyBjb250cm9sIHdpdGggSVIgdGFncyAqLworI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLworCisvKiBBQ1QgU29sdXRpb25zIEhvbWVQcm8gWldhdmUgaW50ZXJmYWNlCisgICAoaHR0cDovL3d3dy5hY3Qtc29sdXRpb25zLmNvbS9Ib21lUHJvLmh0bSkgKi8KKyNkZWZpbmUgRlRESV9BQ1RaV0FWRV9QSUQJMHhGMkQwCisKKy8qCisgKiA0Ti1HQUxBWFkuREUgUElEcyBmb3IgQ0FOLVVTQiwgVVNCLVJTMjMyLCBVU0ItUlM0MjIsIFVTQi1SUzQ4NSwKKyAqIFVTQi1UVFkgYWN0aXYsIFVTQi1UVFkgcGFzc2l2LiAgU29tZSBQSURzIGFyZSB1c2VkIGJ5IHNldmVyYWwgZGV2aWNlcworICogYW5kIEknbSBub3QgZW50aXJlbHkgc3VyZSB3aGljaCBhcmUgdXNlZCBieSB3aGljaC4KKyAqLworI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8xX1BJRAkweEYzQzAKKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMl9QSUQJMHhGM0MxCisKKy8qCisgKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIExJTlhfU0RNVVNCUVNTX1BJRAkweEY0NDgJLyogTGlueCBTRE0tVVNCLVFTLVMgKi8KKyNkZWZpbmUgTElOWF9NQVNURVJERVZFTDJfUElEICAgMHhGNDQ5ICAgLyogTGlueCBNYXN0ZXIgRGV2ZWxvcG1lbnQgMi4wICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzBfUElEICAgMHhGNDRBICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzFfUElEICAgMHhGNDRCICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzJfUElEICAgMHhGNDRDICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCisKKy8qCisgKiBPY2VhbmljIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgRlRESV9PQ0VBTklDX1BJRAkweEY0NjAgIC8qIE9jZWFuaWMgZGl2ZSBpbnN0cnVtZW50ICovCisKKy8qCisgKiBTVVVOVE8gcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX1NVVU5UT19TUE9SVFNfUElECTB4RjY4MAkvKiBTdXVudG8gU3BvcnRzIGluc3RydW1lbnQgKi8KKworLyogVVNCLVVJUlQgLSBBbiBpbmZyYXJlZCByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgdXNpbmcgdGhlIDhVMjMyQU0gY2hpcCAqLworLyogaHR0cDovL2hvbWUuZWFydGhsaW5rLm5ldC9+anJoZWVzL1VTQlVJUlQvaW5kZXguaHRtICovCisjZGVmaW5lIEZURElfVVNCX1VJUlRfUElECTB4Rjg1MAkvKiBQcm9kdWN0IElkICovCisKKy8qIENDUyBJbmMuIElDRFUvSUNEVTQwIHByb2R1Y3QgSUQgLQorICogdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyIHVuaXQgZm9yIFBJQzE2J3MvUElDMTgncyAqLworI2RlZmluZSBGVERJX0NDU0lDRFUyMF8wX1BJRCAgICAweEY5RDAKKyNkZWZpbmUgRlRESV9DQ1NJQ0RVNDBfMV9QSUQgICAgMHhGOUQxCisjZGVmaW5lIEZURElfQ0NTTUFDSFhfMl9QSUQgICAgIDB4RjlEMgorI2RlZmluZSBGVERJX0NDU0xPQURfTl9HT18zX1BJRCAweEY5RDMKKyNkZWZpbmUgRlRESV9DQ1NJQ0RVNjRfNF9QSUQgICAgMHhGOUQ0CisjZGVmaW5lIEZURElfQ0NTUFJJTUU4XzVfUElEICAgIDB4RjlENQorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIE1hdHJpeCBPcmJpdGFsIExDRCBkaXNwbGF5cywKKyAqIHdoaWNoIGFyZSB0aGUgRlQyMzJCTSAoIHNpbWlsYXIgdG8gdGhlIDhVMjMyQU0gKQorICovCisjZGVmaW5lIEZURElfTVRYT1JCXzBfUElEICAgICAgMHhGQTAwICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzFfUElEICAgICAgMHhGQTAxICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzJfUElEICAgICAgMHhGQTAyICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzNfUElEICAgICAgMHhGQTAzICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzRfUElEICAgICAgMHhGQTA0ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzVfUElEICAgICAgMHhGQTA1ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisjZGVmaW5lIEZURElfTVRYT1JCXzZfUElEICAgICAgMHhGQTA2ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCisKKy8qCisgKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKKyAqLworI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5zY2VpdmVyICovCisKKy8qIEluc2lkZSBBY2Nlc3NvIGNvbnRhY3RsZXNzIHJlYWRlciAoaHR0cDovL3d3dy5pbnNpZGVmci5jb20pICovCisjZGVmaW5lIElOU0lERV9BQ0NFU1NPCQkweEZBRDAKKworLyoKKyAqIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzCisgKi8KKyNkZWZpbmUgRlRESV9USE9STEFCU19QSUQJCTB4ZmFmMCAvKiBUaG9yTGFicyBVU0IgbW90b3IgZHJpdmVycyAqLworCisvKgorICogUHJvdGVnbyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8xCTB4RkM3MAkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCisjZGVmaW5lIFBST1RFR09fUjJYMAkJMHhGQzcxCS8qIFIyMDAtVVNCIFRSTkcgdW5pdCAoUjIxMCwgUjIyMCwgYW5kIFIyMzApICovCisjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8zCTB4RkM3MgkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCisjZGVmaW5lIFBST1RFR09fU1BFQ0lBTF80CTB4RkM3MwkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCisKKy8qCisgKiBEU1MtMjAgU3luYyBTdGF0aW9uIGZvciBTb255IEVyaWNzc29uIFA4MDAKKyAqLworI2RlZmluZSBGVERJX0RTUzIwX1BJRCAgICAgICAgICAweEZDODIKKworLyogd3d3LmlydHJhbnMuZGUgZGV2aWNlICovCisjZGVmaW5lIEZURElfSVJUUkFOU19QSUQgMHhGQzYwIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIFJNIE1pY2hhZWxpZGVzIENBTnZpZXcgVVNCIChodHRwOi8vd3d3LnJtY2FuLmNvbSkgKEZURElfVklEKQorICogQ0FOIGZpZWxkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRlZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCisgKiBJYW4gQWJib3R0IGNoYW5nZWQgdGhlIG1hY3JvIG5hbWVzIGZvciBjb25zaXN0ZW5jeS4KKyAqLworI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCisvKiB3d3cudGhvdWdodHRlY2hub2xvZ3kuY29tLyBUVC1VU0IgcHJvdmlkZSB3aXRoIHByb2NvbXAgdXNlIGZ0ZGlfc2lvICovCisjZGVmaW5lIEZURElfVFRVU0JfUElEIDB4RkYyMCAvKiBQcm9kdWN0IElkICovCisKKyNkZWZpbmUgRlRESV9VU0JYXzcwN19QSUQgMHhGODU3CS8qIEFEU1RlY2ggSVIgQmxhc3RlciBVU0JYLTcwNyAoRlRESV9WSUQpICovCisKKyNkZWZpbmUgRlRESV9SRUxBSVNfUElECTB4RkExMCAgLyogUmVsYWlzIGRldmljZSBmcm9tIFJ1ZG9sZiBHdWdsZXIgKi8KKworLyoKKyAqIFBDREogdXNlIGZ0ZGkgYmFzZWQgZGotY29udHJvbGxlcnMuIFRoZSBmb2xsb3dpbmcgUElEIGlzCisgKiBmb3IgdGhlaXIgREFDLTIgZGV2aWNlIGh0dHA6Ly93d3cucGNkamhhcmR3YXJlLmNvbS9EQUMyLmFzcAorICogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCksIFBJRCBzZW50IGJ5IFdvdXRlciBQYWVzZW4pCisgKi8KKyNkZWZpbmUgRlRESV9QQ0RKX0RBQzJfUElEIDB4RkE4OAorCisjZGVmaW5lIEZURElfUjIwMDBLVV9UUlVFX1JORwkweEZCODAgIC8qIFIyMDAwS1UgVFJVRSBSTkcgKEZURElfVklEKSAqLworCisvKgorICogRElFQk9MRCBCQ1MgU0U5MjMgKEZURElfVklEKQorICovCisjZGVmaW5lIERJRUJPTERfQkNTX1NFOTIzX1BJRAkweGZiOTkKKworLyogd3d3LmNyeXN0YWxmb250ei5jb20gZGV2aWNlcworICogLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhCisgKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZQorICogYW5kIHRoZSB2ZW5kb3IgaWQgaXMgdGhlIHNhbWUKKyAqLworI2RlZmluZSBGVERJX1hGXzYzMl9QSUQgMHhGQzA4CS8qIDYzMjogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzU0N19QSUQgMHhGQzBBCS8qIDU0NzogVHdvIGxpbmUgRGlzcGxheSAqLworI2RlZmluZSBGVERJX1hGXzYzM19QSUQgMHhGQzBCCS8qIDYzMzogMTZ4MiBDaGFyYWN0ZXIgRGlzcGxheSB3aXRoIEtleXMgKi8KKyNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82MzVfUElEIDB4RkMwRAkvKiA2MzU6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82NDBfUElEIDB4RkMwRQkvKiA2NDA6IFR3byBsaW5lIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KKworLyoKKyAqIFZpZGVvIE5ldHdvcmtzIExpbWl0ZWQgLyBIb21lY2hvaWNlIGluIHRoZSBVSyB1c2UgYW4gZnRkaS1iYXNlZCBkZXZpY2UKKyAqIGZvciB0aGVpciAxTWIgYnJvYWRiYW5kIGludGVybmV0IHNlcnZpY2UuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBleGhpYml0ZWQKKyAqIGJ5IHRoZSB1c2IgZGV2aWNlIHN1cHBsaWVkICh0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpCisgKi8KKyNkZWZpbmUgRlRESV9WTkhDUENVU0JfRF9QSUQgMHhmZTM4IC8qIFByb2R1Y3QgSWQgKi8KKworLyogQWxwaGFNaWNybyBDb21wb25lbnRzIEFNQy0yMzJVU0IwMSBkZXZpY2UgKEZURElfVklEKSAqLworI2RlZmluZSBGVERJX0FNQzIzMl9QSUQgMHhGRjAwIC8qIFByb2R1Y3QgSWQgKi8KKworLyoKKyAqIElCUyBlbGVrdHJvbmlrIHByb2R1Y3QgaWRzIChGVERJX1ZJRCkKKyAqIFN1Ym1pdHRlZCBieSBUaG9tYXMgU2NobGV1c2VuZXIKKyAqLworI2RlZmluZSBGVERJX0lCU19VUzQ4NV9QSUQJMHhmZjM4ICAvKiBJQlMgVVM0ODUgKFVTQjwtLT5SUzQyMi80ODUgaW50ZXJmYWNlKSAqLworI2RlZmluZSBGVERJX0lCU19QSUNQUk9fUElECTB4ZmYzOSAgLyogSUJTIFBJQy1Qcm9ncmFtbWVyICovCisjZGVmaW5lIEZURElfSUJTX1BDTUNJQV9QSUQJMHhmZjNhICAvKiBJQlMgQ2FyZCByZWFkZXIgZm9yIFBDTUNJQSBTUkFNLWNhcmRzICovCisjZGVmaW5lIEZURElfSUJTX1BLMV9QSUQJMHhmZjNiICAvKiBJQlMgUEsxIC0gUGFydGljZWwgY291bnRlciAqLworI2RlZmluZSBGVERJX0lCU19SUzIzMk1PTl9QSUQJMHhmZjNjICAvKiBJQlMgUlMyMzIgLSBNb25pdG9yICovCisjZGVmaW5lIEZURElfSUJTX0FQUDcwX1BJRAkweGZmM2QgIC8qIEFQUCA3MCAoZHVzdCBtb25pdG9yaW5nIHN5c3RlbSkgKi8KKyNkZWZpbmUgRlRESV9JQlNfUEVET19QSUQJMHhmZjNlICAvKiBJQlMgUEVETy1Nb2RlbSAoUkYgbW9kZW0gODY4LjM1IE1IeikgKi8KKyNkZWZpbmUgRlRESV9JQlNfUFJPRF9QSUQJMHhmZjNmICAvKiBmdXR1cmUgZGV2aWNlICovCisvKiB3d3cuY2FudXNiLmNvbSBMYXdpY2VsIENBTlVTQiBkZXZpY2UgKEZURElfVklEKSAqLworI2RlZmluZSBGVERJX0NBTlVTQl9QSUQgMHhGRkE4IC8qIFByb2R1Y3QgSWQgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiB0aGlyZC1wYXJ0eSBWSUQvUElEIGNvbWJvcyAqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKy8qCisgKiBBdG1lbCBTVEs1NDEKKyAqLworI2RlZmluZSBBVE1FTF9WSUQJCTB4MDNlYiAvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU1RLNTQxX1BJRAkJMHgyMTA5IC8qIFppZ2JlZSBDb250cm9sbGVyICovCisKKy8qCisgKiBCbGFja2ZpbiBnbklDRSBKVEFHCisgKiBodHRwOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1odzpqdGFnOmduaWNlCisgKi8KKyNkZWZpbmUgQURJX1ZJRCAJCTB4MDQ1NgorI2RlZmluZSBBRElfR05JQ0VfUElEIAkJMHhGMDAwCisjZGVmaW5lIEFESV9HTklDRVBMVVNfUElEIAkweEYwMDEKKworLyoKKyAqIFJBVE9DIFJFWC1VU0I2MEYKKyAqLworI2RlZmluZSBSQVRPQ19WRU5ET1JfSUQJCTB4MDU4NAorI2RlZmluZSBSQVRPQ19QUk9EVUNUX0lEX1VTQjYwRgkweGIwMjAKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBCJkIgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCisgKi8KKyNkZWZpbmUgQkFOREJfVklECQkweDA4NTYJLyogQiZCIEVsZWN0cm9uaWNzIFZlbmRvciBJRCAqLworI2RlZmluZSBCQU5EQl9VU09UTDRfUElECTB4QUMwMQkvKiBVU09UTDQgSXNvbGF0ZWQgUlMtNDg1IENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU1RMNF9QSUQJCTB4QUMwMgkvKiBVU1RMNCBSUy00ODUgQ29udmVydGVyICovCisjZGVmaW5lIEJBTkRCX1VTTzlNTDJfUElECTB4QUMwMwkvKiBVU085TUwyIElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNPUFRMNF9QSUQJMHhBQzExCisjZGVmaW5lIEJBTkRCX1VTUFRMNF9QSUQJMHhBQzEyCisjZGVmaW5lIEJBTkRCX1VTTzlNTDJEUl8yX1BJRAkweEFDMTYKKyNkZWZpbmUgQkFOREJfVVNPOU1MMkRSX1BJRAkweEFDMTcKKyNkZWZpbmUgQkFOREJfVVNPUFRMNERSMl9QSUQJMHhBQzE4CS8qIFVTT1BUTDRSLTIgMi1wb3J0IElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNPUFRMNERSX1BJRAkweEFDMTkKKyNkZWZpbmUgQkFOREJfNDg1VVNCOUZfMldfUElECTB4QUMyNQorI2RlZmluZSBCQU5EQl80ODVVU0I5Rl80V19QSUQJMHhBQzI2CisjZGVmaW5lIEJBTkRCXzIzMlVTQjlNX1BJRAkweEFDMjcKKyNkZWZpbmUgQkFOREJfNDg1VVNCVEJfMldfUElECTB4QUMzMworI2RlZmluZSBCQU5EQl80ODVVU0JUQl80V19QSUQJMHhBQzM0CisjZGVmaW5lIEJBTkRCX1RUTDVVU0I5TV9QSUQJMHhBQzQ5CisjZGVmaW5lIEJBTkRCX1RUTDNVU0I5TV9QSUQJMHhBQzUwCisjZGVmaW5lIEJBTkRCX1paX1BST0cxX1VTQl9QSUQJMHhCQTAyCisKKy8qCisgKiBJbnRyZXBpZCBDb250cm9sIFN5c3RlbXMgKGh0dHA6Ly93d3cuaW50cmVwaWRjcy5jb20vKSBWYWx1ZUNBTiBhbmQgTmVvVkkKKyAqLworI2RlZmluZSBJTlRSRVBJRF9WSUQJCTB4MDkzQworI2RlZmluZSBJTlRSRVBJRF9WQUxVRUNBTl9QSUQJMHgwNjAxCisjZGVmaW5lIElOVFJFUElEX05FT1ZJX1BJRAkweDA3MDEKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBJRCBURUNIICh3d3cuaWR0LW5ldC5jb20pIGRldmljZXMKKyAqLworI2RlZmluZSBJRFRFQ0hfVklECQkweDBBQ0QJLyogSUQgVEVDSCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgSURURUNIX0lEVDEyMjFVX1BJRAkweDAzMDAJLyogSURUMTIyMVUgVVNCIHRvIFJTLTIzMiBhZGFwdGVyICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgT21uaWRpcmVjdGlvbmFsIENvbnRyb2wgVGVjaG5vbG9neSwgSW5jLiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgT0NUX1ZJRAkJCTB4MEIzOQkvKiBPQ1QgdmVuZG9yIElEICovCisvKiBOb3RlOiBPQ1QgVVMxMDEgaXMgYWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChOWikgWEg2MzgxICovCisvKiBBbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKEF1cykgWEg2NDUxICovCisvKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggaGFyZHdhcmUgdmVyc2lvbiAxICovCisjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLworCisvKgorICogSWNvbSBJRC0xIGRpZ2l0YWwgdHJhbnNjZWl2ZXIKKyAqLworCisjZGVmaW5lIElDT01fSUQxX1ZJRCAgICAgICAgICAgIDB4MEMyNgorI2RlZmluZSBJQ09NX0lEMV9QSUQgICAgICAgICAgICAweDAwMDQKKworLyoKKyAqIEdOIE90b21ldHJpY3MgKGh0dHA6Ly93d3cub3RvbWV0cmljcy5jb20pCisgKiBTdWJtaXR0ZWQgYnkgVmlsbGUgU3VuZGJlcmcuCisgKi8KKyNkZWZpbmUgR05fT1RPTUVUUklDU19WSUQJMHgwYzMzCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBBVVJJQ0FMX1VTQl9QSUQJCTB4MDAxMAkvKiBBdXJpY2FsIFVTQiBBdWRpb21ldGVyICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgU2VhbGV2ZWwgU2VhTElOSysgYWRhcHRlcnMuCisgKiAoT3JpZ2luYWwgbGlzdCBzZW50IGJ5IFR1YW4gSG9hbmcuICBJYW4gQWJib3R0IHJlbmFtZWQgdGhlIG1hY3JvcyBhbmQKKyAqIHJlbW92ZWQgc29tZSBQSURzIHRoYXQgZG9uJ3Qgc2VlbSB0byBtYXRjaCBhbnkgZXhpc3RpbmcgcHJvZHVjdHMuKQorICovCisjZGVmaW5lIFNFQUxFVkVMX1ZJRAkJMHgwYzUyCS8qIFNlYWxldmVsIFZlbmRvciBJRCAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAxX1BJRAkweDIxMDEJLyogU2VhTElOSysyMzIgKDIxMDEvMjEwNSkgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwMl9QSUQJMHgyMTAyCS8qIFNlYUxJTksrNDg1ICgyMTAyKSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTAzX1BJRAkweDIxMDMJLyogU2VhTElOSysyMzJJICgyMTAzKSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTA0X1BJRAkweDIxMDQJLyogU2VhTElOSys0ODVJICgyMTA0KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTA2X1BJRAkweDkwMjAJLyogU2VhTElOSys0MjIgKDIxMDYpICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMV9QSUQJMHgyMjExCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAxXzJfUElECTB4MjIyMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDJfMl9QSUQJMHgyMjIyCS8qIFNlYVBPUlQrMi80ODUgKDIyMDIpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAzXzFfUElECTB4MjIxMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAzXzJfUElECTB4MjIyMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzFfUElECTB4MjQxMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8yX1BJRAkweDI0MjEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfM19QSUQJMHgyNDMxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzRfUElECTB4MjQ0MQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8xX1BJRAkweDI0MTIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfMl9QSUQJMHgyNDIyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzNfUElECTB4MjQzMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl80X1BJRAkweDI0NDIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfMV9QSUQJMHgyNDEzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfMl9QSUQJMHgyNDIzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfM19QSUQJMHgyNDMzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDNfNF9QSUQJMHgyNDQzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfMV9QSUQJMFgyODExCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzJfUElECTBYMjgyMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8zX1BJRAkwWDI4MzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNF9QSUQJMFgyODQxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzVfUElECTBYMjg1MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDUgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV82X1BJRAkwWDI4NjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA2ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfN19QSUQJMFgyODcxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzhfUElECTBYMjg4MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDggKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8xX1BJRAkwWDI4MTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfMl9QSUQJMFgyODIyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzNfUElECTBYMjgzMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl80X1BJRAkwWDI4NDIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNV9QSUQJMFgyODUyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzZfUElECTBYMjg2MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl83X1BJRAkwWDI4NzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfOF9QSUQJMFgyODgyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgOCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzFfUElECTBYMjgxMwkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzJfUElECTBYMjgyMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM18zX1BJRAkwWDI4MzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNF9QSUQJMFgyODQzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzVfUElECTBYMjg1MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDUgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM182X1BJRAkwWDI4NjMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA2ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfN19QSUQJMFgyODczIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzhfUElECTBYMjg4MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDggKi8KKworLyoKKyAqIEpFVEkgU1BFQ1RST01FVEVSIFNQRUNCT1MgMTIwMQorICogaHR0cDovL3d3dy5qZXRpLmNvbS9wcm9kdWN0cy9zeXMvc2NiL3NjYjEyMDEucGhwCisgKi8KKyNkZWZpbmUgSkVUSV9WSUQJCTB4MGM2YworI2RlZmluZSBKRVRJX1NQQzEyMDFfUElECTB4MDRiMgorCisvKgorICogRlRESSBVU0IgVUFSVCBjaGlwcyB1c2VkIGluIGNvbnN0cnVjdGlvbiBwcm9qZWN0cyBmcm9tIHRoZQorICogRWxla3RvciBFbGVjdHJvbmljcyBtYWdhemluZSAoaHR0cDovL2VsZWt0b3ItZWxlY3Ryb25pY3MuY28udWspCisgKi8KKyNkZWZpbmUgRUxFS1RPUl9WSUQJCTB4MEM3RAorI2RlZmluZSBFTEVLVE9SX0ZUMzIzUl9QSUQJMHgwMDA1CS8qIFJGSUQtUmVhZGVyLCBpc3N1ZSAwOS0yMDA2ICovCisKKy8qCisgKiBQb3NpZmxleCBpbmMgcmV0YWlsIGVxdWlwbWVudCAoaHR0cDovL3d3dy5wb3NpZmxleC5jb20udHcpCisgKi8KKyNkZWZpbmUgUE9TSUZMRVhfVklECQkweDBkM2EgIC8qIFZlbmRvciBJRCAqLworI2RlZmluZSBQT1NJRkxFWF9QUDcwMDBfUElECTB4MDMwMCAgLyogUFAtNzAwMElJIHRoZXJtYWwgcHJpbnRlciAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdHdvIEtPQklMIGNoaXBjYXJkIHRlcm1pbmFscy4KKyAqLworI2RlZmluZSBLT0JJTF9WSUQJCTB4MGQ0NgkvKiBLT0JJTCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgS09CSUxfQ09OVl9CMV9QSUQJMHgyMDIwCS8qIEtPQklMIEtvbnZlcnRlciBmb3IgQjEgKi8KKyNkZWZpbmUgS09CSUxfQ09OVl9LQUFOX1BJRAkweDIwMjEJLyogS09CSUxfS29udmVydGVyIGZvciBLQUFOICovCisKKyNkZWZpbmUgRlRESV9ORl9SSUNfVklECTB4MERDRAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgRlRESV9ORl9SSUNfUElECTB4MDAwMQkvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBGYWxjb20gV2lyZWxlc3MgQ29tbXVuaWNhdGlvbnMgR21iSAorICovCisjZGVmaW5lIEZBTENPTV9WSUQJCTB4MEY5NAkvKiBWZW5kb3IgSWQgKi8KKyNkZWZpbmUgRkFMQ09NX1RXSVNUX1BJRAkweDAwMDEJLyogRmFsY29tIFR3aXN0IFVTQiBHUFJTIG1vZGVtICovCisjZGVmaW5lIEZBTENPTV9TQU1CQV9QSUQJMHgwMDA1CS8qIEZhbGNvbSBTYW1iYSBVU0IgR1BSUyBtb2RlbSAqLworCisvKiBMYXJzZW4gYW5kIEJydXNnYWFyZCBBbHRpVHJhY2svVVNCdHJhY2sgICovCisjZGVmaW5lIExBUlNFTkJSVVNHQUFSRF9WSUQJCTB4MEZEOAorI2RlZmluZSBMQl9BTFRJVFJBQ0tfUElECQkweDAwMDEKKworLyoKKyAqIFRUaSAoVGh1cmxieSBUaGFuZGFyIEluc3RydW1lbnRzKQorICovCisjZGVmaW5lIFRUSV9WSUQJCQkweDEwM0UJLyogVmVuZG9yIElkICovCisjZGVmaW5lIFRUSV9RTDM1NVBfUElECQkweDAzRTgJLyogVFRpIFFMMzU1UCBwb3dlciBzdXBwbHkgKi8KKworLyogSW50ZXJiaW9tZXRyaWNzIFVTQiBJL08gQm9hcmQgKi8KKy8qIERldmVsb3BlZCBmb3IgSW50ZXJiaW9tZXRyaWNzIGJ5IFJ1ZG9sZiBHdWdsZXIgKi8KKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX1ZJRCAgICAgICAgICAgICAgMHgxMjA5CisjZGVmaW5lIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCAgICAgIDB4MTAwMgorI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCAweDEwMDYKKworLyoKKyAqIFRlc3RvIHByb2R1Y3RzIChodHRwOi8vd3d3LnRlc3RvLmNvbS8pCisgKiBTdWJtaXR0ZWQgYnkgQ29saW4gTGVyb3kKKyAqLworI2RlZmluZSBURVNUT19WSUQJCQkweDEyOEQKKyNkZWZpbmUgVEVTVE9fVVNCX0lOVEVSRkFDRV9QSUQJCTB4MDAwMQorCisvKgorICogTW9iaWxpdHkgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCisgKi8KKyNkZWZpbmUgTU9CSUxJVFlfVklECQkJMHgxMzQyCisjZGVmaW5lIE1PQklMSVRZX1VTQl9TRVJJQUxfUElECQkweDAyMDIJLyogRWFzaURvY2sgVVNCIDIwMCBzZXJpYWwgKi8KKworLyoKKyAqIEZJQyAvIE9wZW5Nb2tvLCBJbmMuIGh0dHA6Ly93aWtpLm9wZW5tb2tvLm9yZy93aWtpL05lbzE5NzNfRGVidWdfQm9hcmRfdjMKKyAqIFN1Ym1pdHRlZCBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAb3Blbm1va28ub3JnPgorICovCisjZGVmaW5lCUZJQ19WSUQJCQkweDE0NTcKKyNkZWZpbmUJRklDX05FTzE5NzNfREVCVUdfUElECTB4NTExOAorCisvKiBPbGltZXggKi8KKyNkZWZpbmUgT0xJTUVYX1ZJRAkJCTB4MTVCQQorI2RlZmluZSBPTElNRVhfQVJNX1VTQl9PQ0RfUElECQkweDAwMDMKKworLyoKKyAqIFRlbGxkdXMgVGVjaG5vbG9naWVzCisgKi8KKyNkZWZpbmUgVEVMTERVU19WSUQJCQkweDE3ODEJLyogVmVuZG9yIElEICovCisjZGVmaW5lIFRFTExEVVNfVEVMTFNUSUNLX1BJRAkJMHgwQzMwCS8qIFJGIGNvbnRyb2wgZG9uZ2xlIDQzMyBNSHogdXNpbmcgRlQyMzJSTCAqLworCisvKgorICogQmF5ZXIgQXNjZW5zaWEgQ29udG91ciBibG9vZCBnbHVjb3NlIG1ldGVyIFVTQi1jb252ZXJ0ZXIgY2FibGUuCisgKiBodHRwOi8vd2luZ2x1Y29mYWN0cy5jb20vY2FibGVzLworICovCisjZGVmaW5lIEJBWUVSX1ZJRCAgICAgICAgICAgICAgICAgICAgICAweDFBNzkKKyNkZWZpbmUgQkFZRVJfQ09OVE9VUl9DQUJMRV9QSUQgICAgICAgIDB4NjAwMQorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIE1hdHJpeCBPcmJpdGFsIEZUREkgUmFuZ2UKKyAqIEFueXRoaW5nIGluIHRoaXMgcmFuZ2Ugd2lsbCB1c2UgYW4gRlQyMzJSTC4KKyAqLworI2RlZmluZSBNVFhPUkJfVklECQkJMHgxQjNECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDBfUElECTB4MDEwMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTAxX1BJRAkweDAxMDEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwMl9QSUQJMHgwMTAyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDNfUElECTB4MDEwMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA0X1BJRAkweDAxMDQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwNV9QSUQJMHgwMTA1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDZfUElECTB4MDEwNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTA3X1BJRAkweDAxMDcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwOF9QSUQJMHgwMTA4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMDlfUElECTB4MDEwOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBBX1BJRAkweDAxMEEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwQl9QSUQJMHgwMTBCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMENfUElECTB4MDEwQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTBEX1BJRAkweDAxMEQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEwRV9QSUQJMHgwMTBFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMEZfUElECTB4MDEwRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEwX1BJRAkweDAxMTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExMV9QSUQJMHgwMTExCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTJfUElECTB4MDExMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTEzX1BJRAkweDAxMTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExNF9QSUQJMHgwMTE0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMTVfUElECTB4MDExNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE2X1BJRAkweDAxMTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExN19QSUQJMHgwMTE3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMThfUElECTB4MDExOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTE5X1BJRAkweDAxMTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExQV9QSUQJMHgwMTFBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUJfUElECTB4MDExQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFDX1BJRAkweDAxMUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDExRF9QSUQJMHgwMTFECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMUVfUElECTB4MDExRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTFGX1BJRAkweDAxMUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyMF9QSUQJMHgwMTIwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjFfUElECTB4MDEyMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTIyX1BJRAkweDAxMjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyM19QSUQJMHgwMTIzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjRfUElECTB4MDEyNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI1X1BJRAkweDAxMjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyNl9QSUQJMHgwMTI2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMjdfUElECTB4MDEyNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTI4X1BJRAkweDAxMjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyOV9QSUQJMHgwMTI5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkFfUElECTB4MDEyQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJCX1BJRAkweDAxMkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyQ19QSUQJMHgwMTJDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMkRfUElECTB4MDEyRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTJFX1BJRAkweDAxMkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEyRl9QSUQJMHgwMTJGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzBfUElECTB4MDEzMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTMxX1BJRAkweDAxMzEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzMl9QSUQJMHgwMTMyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzNfUElECTB4MDEzMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM0X1BJRAkweDAxMzQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzNV9QSUQJMHgwMTM1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzZfUElECTB4MDEzNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTM3X1BJRAkweDAxMzcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzOF9QSUQJMHgwMTM4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxMzlfUElECTB4MDEzOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNBX1BJRAkweDAxM0EKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzQl9QSUQJMHgwMTNCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0NfUElECTB4MDEzQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTNEX1BJRAkweDAxM0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDEzRV9QSUQJMHgwMTNFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxM0ZfUElECTB4MDEzRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQwX1BJRAkweDAxNDAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0MV9QSUQJMHgwMTQxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDJfUElECTB4MDE0MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQzX1BJRAkweDAxNDMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0NF9QSUQJMHgwMTQ0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDVfUElECTB4MDE0NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ2X1BJRAkweDAxNDYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0N19QSUQJMHgwMTQ3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNDhfUElECTB4MDE0OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTQ5X1BJRAkweDAxNDkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0QV9QSUQJMHgwMTRBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEJfUElECTB4MDE0QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRDX1BJRAkweDAxNEMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE0RF9QSUQJMHgwMTRECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNEVfUElECTB4MDE0RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTRGX1BJRAkweDAxNEYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1MF9QSUQJMHgwMTUwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTFfUElECTB4MDE1MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTUyX1BJRAkweDAxNTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1M19QSUQJMHgwMTUzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTRfUElECTB4MDE1NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU1X1BJRAkweDAxNTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Nl9QSUQJMHgwMTU2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNTdfUElECTB4MDE1NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTU4X1BJRAkweDAxNTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1OV9QSUQJMHgwMTU5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNUFfUElECTB4MDE1QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVCX1BJRAkweDAxNUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Q19QSUQJMHgwMTVDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNURfUElECTB4MDE1RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTVFX1BJRAkweDAxNUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE1Rl9QSUQJMHgwMTVGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjBfUElECTB4MDE2MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTYxX1BJRAkweDAxNjEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Ml9QSUQJMHgwMTYyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjNfUElECTB4MDE2MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY0X1BJRAkweDAxNjQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2NV9QSUQJMHgwMTY1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjZfUElECTB4MDE2NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTY3X1BJRAkweDAxNjcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2OF9QSUQJMHgwMTY4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNjlfUElECTB4MDE2OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZBX1BJRAkweDAxNkEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2Ql9QSUQJMHgwMTZCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkNfUElECTB4MDE2QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTZEX1BJRAkweDAxNkQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE2RV9QSUQJMHgwMTZFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNkZfUElECTB4MDE2RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTcwX1BJRAkweDAxNzAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3MV9QSUQJMHgwMTcxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzJfUElECTB4MDE3MgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTczX1BJRAkweDAxNzMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3NF9QSUQJMHgwMTc0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzVfUElECTB4MDE3NQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc2X1BJRAkweDAxNzYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3N19QSUQJMHgwMTc3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxNzhfUElECTB4MDE3OAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTc5X1BJRAkweDAxNzkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3QV9QSUQJMHgwMTdBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0JfUElECTB4MDE3QgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdDX1BJRAkweDAxN0MKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE3RF9QSUQJMHgwMTdECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxN0VfUElECTB4MDE3RQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTdGX1BJRAkweDAxN0YKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4MF9QSUQJMHgwMTgwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODFfUElECTB4MDE4MQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTgyX1BJRAkweDAxODIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4M19QSUQJMHgwMTgzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODRfUElECTB4MDE4NAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg1X1BJRAkweDAxODUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Nl9QSUQJMHgwMTg2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxODdfUElECTB4MDE4NworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTg4X1BJRAkweDAxODgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4OV9QSUQJMHgwMTg5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOEFfUElECTB4MDE4QQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThCX1BJRAkweDAxOEIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Q19QSUQJMHgwMThDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOERfUElECTB4MDE4RAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMThFX1BJRAkweDAxOEUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE4Rl9QSUQJMHgwMThGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTBfUElECTB4MDE5MAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTkxX1BJRAkweDAxOTEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Ml9QSUQJMHgwMTkyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTNfUElECTB4MDE5MworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk0X1BJRAkweDAxOTQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5NV9QSUQJMHgwMTk1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTZfUElECTB4MDE5NgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTk3X1BJRAkweDAxOTcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5OF9QSUQJMHgwMTk4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOTlfUElECTB4MDE5OQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlBX1BJRAkweDAxOUEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5Ql9QSUQJMHgwMTlCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUNfUElECTB4MDE5QworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMTlEX1BJRAkweDAxOUQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDE5RV9QSUQJMHgwMTlFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxOUZfUElECTB4MDE5RgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEwX1BJRAkweDAxQTAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBMV9QSUQJMHgwMUExCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTJfUElECTB4MDFBMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUEzX1BJRAkweDAxQTMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBNF9QSUQJMHgwMUE0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQTVfUElECTB4MDFBNQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE2X1BJRAkweDAxQTYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBN19QSUQJMHgwMUE3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQThfUElECTB4MDFBOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUE5X1BJRAkweDAxQTkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBQV9QSUQJMHgwMUFBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUJfUElECTB4MDFBQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFDX1BJRAkweDAxQUMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFBRF9QSUQJMHgwMUFECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQUVfUElECTB4MDFBRQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUFGX1BJRAkweDAxQUYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCMF9QSUQJMHgwMUIwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjFfUElECTB4MDFCMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUIyX1BJRAkweDAxQjIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCM19QSUQJMHgwMUIzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjRfUElECTB4MDFCNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI1X1BJRAkweDAxQjUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCNl9QSUQJMHgwMUI2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQjdfUElECTB4MDFCNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUI4X1BJRAkweDAxQjgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCOV9QSUQJMHgwMUI5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkFfUElECTB4MDFCQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJCX1BJRAkweDAxQkIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCQ19QSUQJMHgwMUJDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQkRfUElECTB4MDFCRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUJFX1BJRAkweDAxQkUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFCRl9QSUQJMHgwMUJGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzBfUElECTB4MDFDMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUMxX1BJRAkweDAxQzEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDMl9QSUQJMHgwMUMyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzNfUElECTB4MDFDMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM0X1BJRAkweDAxQzQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDNV9QSUQJMHgwMUM1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzZfUElECTB4MDFDNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUM3X1BJRAkweDAxQzcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDOF9QSUQJMHgwMUM4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQzlfUElECTB4MDFDOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNBX1BJRAkweDAxQ0EKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDQl9QSUQJMHgwMUNCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0NfUElECTB4MDFDQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUNEX1BJRAkweDAxQ0QKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFDRV9QSUQJMHgwMUNFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxQ0ZfUElECTB4MDFDRgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQwX1BJRAkweDAxRDAKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEMV9QSUQJMHgwMUQxCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDJfUElECTB4MDFEMgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQzX1BJRAkweDAxRDMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFENF9QSUQJMHgwMUQ0CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDVfUElECTB4MDFENQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ2X1BJRAkweDAxRDYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEN19QSUQJMHgwMUQ3CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRDhfUElECTB4MDFEOAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUQ5X1BJRAkweDAxRDkKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFEQV9QSUQJMHgwMURBCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREJfUElECTB4MDFEQgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURDX1BJRAkweDAxREMKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFERF9QSUQJMHgwMURECisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxREVfUElECTB4MDFERQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMURGX1BJRAkweDAxREYKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFMF9QSUQJMHgwMUUwCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTFfUElECTB4MDFFMQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUUyX1BJRAkweDAxRTIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFM19QSUQJMHgwMUUzCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTRfUElECTB4MDFFNAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU1X1BJRAkweDAxRTUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFNl9QSUQJMHgwMUU2CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRTdfUElECTB4MDFFNworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUU4X1BJRAkweDAxRTgKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFOV9QSUQJMHgwMUU5CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRUFfUElECTB4MDFFQQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVCX1BJRAkweDAxRUIKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFQ19QSUQJMHgwMUVDCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRURfUElECTB4MDFFRAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUVFX1BJRAkweDAxRUUKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFFRl9QSUQJMHgwMUVGCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjBfUElECTB4MDFGMAorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUYxX1BJRAkweDAxRjEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGMl9QSUQJMHgwMUYyCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjNfUElECTB4MDFGMworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY0X1BJRAkweDAxRjQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGNV9QSUQJMHgwMUY1CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjZfUElECTB4MDFGNgorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUY3X1BJRAkweDAxRjcKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGOF9QSUQJMHgwMUY4CisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRjlfUElECTB4MDFGOQorI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZBX1BJRAkweDAxRkEKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGQl9QSUQJMHgwMUZCCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkNfUElECTB4MDFGQworI2RlZmluZSBNVFhPUkJfRlRESV9SQU5HRV8wMUZEX1BJRAkweDAxRkQKKyNkZWZpbmUgTVRYT1JCX0ZURElfUkFOR0VfMDFGRV9QSUQJMHgwMUZFCisjZGVmaW5lIE1UWE9SQl9GVERJX1JBTkdFXzAxRkZfUElECTB4MDFGRgorCisKKworLyoKKyAqIFRoZSBNb2JpbGl0eSBMYWIgKFRNTCkKKyAqIFN1Ym1pdHRlZCBieSBQaWVycmUgQ2FzdGVsbGEKKyAqLworI2RlZmluZSBUTUxfVklECQkJMHgxQjkxCS8qIFZlbmRvciBJRCAqLworI2RlZmluZSBUTUxfVVNCX1NFUklBTF9QSUQJMHgwMDY0CS8qIFVTQiAtIFNlcmlhbCBDb252ZXJ0ZXIgKi8KKworLyogQWx0aS0yIHByb2R1Y3RzICBodHRwOi8vd3d3LmFsdGktMi5jb20gKi8KKyNkZWZpbmUgQUxUSTJfVklECTB4MUJDOQorI2RlZmluZSBBTFRJMl9OM19QSUQJMHg2MDAxCS8qIE5lcHR1bmUgMyAqLworCisvKgorICogRHJlc2RlbiBFbGVrdHJvbmljIFNlbnNvciBUZXJtaW5hbCBCb2FyZAorICovCisjZGVmaW5lIERFX1ZJRAkJCTB4MWNmMSAvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU1RCX1BJRAkJCTB4MDAwMSAvKiBTZW5zb3IgVGVybWluYWwgQm9hcmQgKi8KKyNkZWZpbmUgV0hUX1BJRAkJCTB4MDAwNCAvKiBXaXJlbGVzcyBIYW5kaGVsZCBUZXJtaW5hbCAqLworCisvKgorICogUGFwb3VjaCBwcm9kdWN0cyAoaHR0cDovL3d3dy5wYXBvdWNoLmNvbS8pCisgKiBTdWJtaXR0ZWQgYnkgRm9sa2VydCB2YW4gSGV1c2RlbgorICovCisKKyNkZWZpbmUgUEFQT1VDSF9WSUQJCQkweDUwNTAJLyogVmVuZG9yIElEICovCisjZGVmaW5lIFBBUE9VQ0hfVE1VX1BJRAkJCTB4MDQwMAkvKiBUTVUgVVNCIFRoZXJtb21ldGVyICovCisjZGVmaW5lIFBBUE9VQ0hfUVVJRE80eDRfUElECQkweDA5MDAJLyogUXVpZG8gNC80IE1vZHVsZSAqLworCisvKgorICogTWFydmVsbCBTaGVldmFQbHVnCisgKi8KKyNkZWZpbmUgTUFSVkVMTF9WSUQJCTB4OWU4OAorI2RlZmluZSBNQVJWRUxMX1NIRUVWQVBMVUdfUElECTB4OWU4ZgorCisvKgorICogRXZvbHV0aW9uIFJvYm90aWNzIHByb2R1Y3RzIChodHRwOi8vd3d3LmV2b2x1dGlvbi5jb20vKS4KKyAqIFN1Ym1pdHRlZCBieSBTaGF3biBNLiBMYXZlbGxlLgorICovCisjZGVmaW5lIEVWT0xVVElPTl9WSUQJCTB4REVFRQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgRVZPTFVUSU9OX0VSMV9QSUQJMHgwMzAwCS8qIEVSMSBDb250cm9sIE1vZHVsZSAqLworI2RlZmluZSBFVk9fOFUyMzJBTV9QSUQJMHgwMkZGCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ00yIChGVDIzMkFNKSovCisjZGVmaW5lIEVWT19IWUJSSURfUElECQkweDAzMDIJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEIChGVDIzMkJNKSovCisjZGVmaW5lIEVWT19SQ000X1BJRAkJMHgwMzAzCS8qIEV2b2x1dGlvbiByb2JvdGljcyBSQ000IFBJRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggYmJlMDA1Yy4uZjFlYTNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlpZiAocG9ydC0+d3JpdGVfdXJiX2J1c3kpCiAJCXN0YXJ0X2lvID0gZmFsc2U7CiAJZWxzZSB7Ci0JCXN0YXJ0X2lvID0gKF9fa2ZpZm9fbGVuKHBvcnQtPndyaXRlX2ZpZm8pICE9IDApOworCQlzdGFydF9pbyA9IChrZmlmb19sZW4oJnBvcnQtPndyaXRlX2ZpZm8pICE9IDApOwogCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IHN0YXJ0X2lvOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CkBAIC0yODUsNyArMjg1LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JY291bnQgPSBrZmlmb19nZXQocG9ydC0+d3JpdGVfZmlmbywgZGF0YSwgcG9ydC0+YnVsa19vdXRfc2l6ZSk7CisJY291bnQgPSBrZmlmb19vdXRfbG9ja2VkKCZwb3J0LT53cml0ZV9maWZvLCBkYXRhLCBwb3J0LT5idWxrX291dF9zaXplLCAmcG9ydC0+bG9jayk7CiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywgY291bnQsIGRhdGEpOwogCiAJLyogc2V0IHVwIG91ciB1cmIgKi8KQEAgLTM0NSw3ICszNDUsNyBAQAogCQlyZXR1cm4gdXNiX3NlcmlhbF9tdWx0aV91cmJfd3JpdGUodHR5LCBwb3J0LAogCQkJCQkJICBidWYsIGNvdW50KTsKIAotCWNvdW50ID0ga2ZpZm9fcHV0KHBvcnQtPndyaXRlX2ZpZm8sIGJ1ZiwgY291bnQpOworCWNvdW50ID0ga2ZpZm9faW5fbG9ja2VkKCZwb3J0LT53cml0ZV9maWZvLCBidWYsIGNvdW50LCAmcG9ydC0+bG9jayk7CiAJcmVzdWx0ID0gdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX3N0YXJ0KHBvcnQpOwogCiAJaWYgKHJlc3VsdCA+PSAwKQpAQCAtMzcwLDcgKzM3MCw3IEBACiAJCQkJKHNlcmlhbC0+dHlwZS0+bWF4X2luX2ZsaWdodF91cmJzIC0KIAkJCQkgcG9ydC0+dXJic19pbl9mbGlnaHQpOwogCX0gZWxzZSBpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCi0JCXJvb20gPSBwb3J0LT53cml0ZV9maWZvLT5zaXplIC0gX19rZmlmb19sZW4ocG9ydC0+d3JpdGVfZmlmbyk7CisJCXJvb20gPSBrZmlmb19hdmFpbCgmcG9ydC0+d3JpdGVfZmlmbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgcm9vbSk7CkBAIC0zOTEsNyArMzkxLDcgQEAKIAkJY2hhcnMgPSBwb3J0LT50eF9ieXRlc19mbGlnaHQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQotCQljaGFycyA9IGtmaWZvX2xlbihwb3J0LT53cml0ZV9maWZvKTsKKwkJY2hhcnMgPSBrZmlmb19sZW4oJnBvcnQtPndyaXRlX2ZpZm8pOwogCiAJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX2Z1bmNfXywgY2hhcnMpOwogCXJldHVybiBjaGFyczsKQEAgLTUwNyw3ICs1MDcsNyBAQAogCQlpZiAoc3RhdHVzKSB7CiAJCQlkYmcoIiVzIC0gbm9uemVybyBtdWx0aS11cmIgd3JpdGUgYnVsayBzdGF0dXMgIgogCQkJCSJyZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJCWtmaWZvX3Jlc2V0KHBvcnQtPndyaXRlX2ZpZm8pOworCQkJa2ZpZm9fcmVzZXRfb3V0KCZwb3J0LT53cml0ZV9maWZvKTsKIAkJfSBlbHNlCiAJCQl1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfc3RhcnQocG9ydCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKaW5kZXggNDg1ZmE5Yy4uMmNmZTI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCkBAIC0xMjcsOCArMTI3LDkgQEAKICNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTOU1MMl80CTB4QUMzMAogI2RlZmluZSBCQU5EQl9ERVZJQ0VfSURfVVNQVEw0XzIJMHhBQzMxCiAjZGVmaW5lIEJBTkRCX0RFVklDRV9JRF9VU1BUTDRfNAkweEFDMzIKLSNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfMiAgICAgICAweEFDNDIKLSNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfNCAgICAgICAweEFDNDQKKyNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfMgkweEFDNDIKKyNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfNAkweEFDNDQKKyNkZWZpbmUgQkFOREJfREVWSUNFX0lEX1VTT1BUTDJfNAkweEFDMjQKIAogLyogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cwogICogQVRFTiBVQzIzMjQgZGV2aWNlIHVzaW5nIE1vc2NoaXAgTUNTNzg0MApAQCAtMTkxLDYgKzE5Miw3IEBACiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTUFRMNF80KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfMil9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEw0XzQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMMl80KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEX1VDMjMyNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVRFTklOVEwsIEFURU5JTlRMX0RFVklDRV9JRF9VQzIzMjIpfSwKIAl7fQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0yMDcsNiArMjA5LDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNQVEw0XzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPUFRMNF8yKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTT1BUTDRfNCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkFOREIsIEJBTkRCX0RFVklDRV9JRF9VU09QVEwyXzQpfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfVUMyMzI0KX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEX1VDMjMyMil9LAogCXt9CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA5YTJiOTAzLi42ZTk0YTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zNDAsNiArMzQwLDEwIEBACiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1ZFTkRPUl9JRAkJMHgxYzllCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKIAorLyogSGFpZXIgcHJvZHVjdHMgKi8KKyNkZWZpbmUgSEFJRVJfVkVORE9SX0lECQkJCTB4MjAxZQorI2RlZmluZSBIQUlFUl9QUk9EVUNUX0NFMTAwCQkJMHgyMDA5CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTY0MSw2ICs2NDUsNyBAQAogCXsgVVNCX0RFVklDRShBSVJQTFVTX1ZFTkRPUl9JRCwgQUlSUExVU19QUk9EVUNUX01DRDY1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVExBWVRFQ0hfVkVORE9SX0lELCBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoRk9VUl9HX1NZU1RFTVNfVkVORE9SX0lELCBGT1VSX0dfU1lTVEVNU19QUk9EVUNUX1cxNCkgfSwKKwl7IFVTQl9ERVZJQ0UoSEFJRVJfVkVORE9SX0lELCBIQUlFUl9QUk9EVUNUX0NFMTAwKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDQ1NDNmMzUuLjMzYzg1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtNTk1LDggKzU5NSw3IEBACiAJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CiAJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwogCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7Ci0JaWYgKCFJU19FUlIocG9ydC0+d3JpdGVfZmlmbykgJiYgcG9ydC0+d3JpdGVfZmlmbykKLQkJa2ZpZm9fZnJlZShwb3J0LT53cml0ZV9maWZvKTsKKwlrZmlmb19mcmVlKCZwb3J0LT53cml0ZV9maWZvKTsKIAlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CiAJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKIAlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKQEAgLTkzOSw5ICs5MzgsNyBAQAogCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJObyBmcmVlIHVyYnMgYXZhaWxhYmxlXG4iKTsKIAkJCWdvdG8gcHJvYmVfZXJyb3I7CiAJCX0KLQkJcG9ydC0+d3JpdGVfZmlmbyA9IGtmaWZvX2FsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCwKLQkJCSZwb3J0LT5sb2NrKTsKLQkJaWYgKElTX0VSUihwb3J0LT53cml0ZV9maWZvKSkKKwkJaWYgKGtmaWZvX2FsbG9jKCZwb3J0LT53cml0ZV9maWZvLCBQQUdFX1NJWkUsIEdGUF9LRVJORUwpKQogCQkJZ290byBwcm9iZV9lcnJvcjsKIAkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQlwb3J0LT5idWxrX291dF9zaXplID0gYnVmZmVyX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKaW5kZXggNGMxMGVkZWNmLi44NmQ5NWMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDU1MjBfYmwuYwpAQCAtODUsNyArODUsNyBAQAogCXJldHVybiBlcnJvciA/IGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA6IHJlZ192YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHA1NTIwX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHA1NTIwX2JsX29wcyA9IHsKIAkudXBkYXRlX3N0YXR1cwk9IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cywKIAkuZ2V0X2JyaWdodG5lc3MJPSBhZHA1NTIwX2JsX2dldF9icmlnaHRuZXNzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKaW5kZXggMmMzYmRmYy4uZDc2OWIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFkeF9iYWNrbGlnaHRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFkeF9iYWNrbGlnaHRfb3BzID0gewogCS5vcHRpb25zID0gMCwKIAkudXBkYXRlX3N0YXR1cyA9IGFkeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKIAkuZ2V0X2JyaWdodG5lc3MgPSBhZHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYXRtZWwtcHdtLWJsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYwppbmRleCAyY2Y3YmE1Li5mNjI1ZmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hdG1lbC1wd20tYmwuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJcmV0dXJuIHB3bV9jaGFubmVsX2VuYWJsZSgmcHdtYmwtPnB3bWMpOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXRtZWxfcHdtX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhdG1lbF9wd21fYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IGF0bWVsX3B3bV9ibF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IGF0bWVsX3B3bV9ibF9zZXRfaW50ZW5zaXR5LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKaW5kZXggNjYxNWFjNy4uMTg4MjljZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKQEAgLTI2OSw3ICsyNjksNyBAQAogICogRVJSX1BUUigpIG9yIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIGRldmljZS4KICAqLwogc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKLQkJc3RydWN0IGRldmljZSAqcGFyZW50LCB2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzKQorCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHZvaWQgKmRldmRhdGEsIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpCiB7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKm5ld19iZDsKIAlpbnQgcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCmluZGV4IDk2Nzc0OTQuLmI0YmNmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCkBAIC00NTEsNyArNDUxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY29yZ2lfbGNkX2xpbWl0X2ludGVuc2l0eSk7CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjb3JnaV9ibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgY29yZ2lfYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcwk9IGNvcmdpX2JsX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gY29yZ2lfYmxfdXBkYXRlX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jcl9ibGxjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY3JfYmxsY2QuYwppbmRleCBiOWZlNjJiLi5kYTg2ZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jcl9ibGxjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXJldHVybiBpbnRlbnNpdHk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBjcl9iYWNrbGlnaHRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGNyX2JhY2tsaWdodF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gY3JfYmFja2xpZ2h0X2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgPSBjcl9iYWNrbGlnaHRfc2V0X2ludGVuc2l0eSwKIH07CkBAIC0yMDEsNyArMjAxLDcgQEAKIAlpZiAoSVNfRVJSKGxkcCkpIHsKIAkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJkcCk7CiAJCXBjaV9kZXZfcHV0KGxwY19kZXYpOwotCQlyZXR1cm4gUFRSX0VSUihiZHApOworCQlyZXR1cm4gUFRSX0VSUihsZHApOwogCX0KIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChscGNfZGV2LCBDUlZNTF9SRUdfR1BJT0JBUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMKaW5kZXggZjJkNzZkYS4uNzRjZGM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAlyZXR1cm4gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgZGE5MDN4X2JhY2tsaWdodF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgZGE5MDN4X2JhY2tsaWdodF9vcHMgPSB7CiAJLnVwZGF0ZV9zdGF0dXMJPSBkYTkwM3hfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCiAJLmdldF9icmlnaHRuZXNzCT0gZGE5MDN4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9nZW5lcmljX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9nZW5lcmljX2JsLmMKaW5kZXggNmQyN2Y2Mi4uZTZkMzQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ2VuZXJpY19ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dlbmVyaWNfYmwuYwpAQCAtNzAsNyArNzAsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjb3JnaWJsX2xpbWl0X2ludGVuc2l0eSk7CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBnZW5lcmljYmxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGdlbmVyaWNibF9vcHMgPSB7CiAJLm9wdGlvbnMgPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCiAJLmdldF9icmlnaHRuZXNzID0gZ2VuZXJpY2JsX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gZ2VuZXJpY2JsX3NlbmRfaW50ZW5zaXR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggN2ZiNGVlZi4uZjdjYzUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC05OCw3ICs5OCw3IEBACiAJcmV0dXJuIGN1cnJlbnRfaW50ZW5zaXR5OwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgaHA2ODBibF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgaHA2ODBibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gaHA2ODBibF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IGhwNjgwYmxfc2V0X2ludGVuc2l0eSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMKaW5kZXggN2FlZDI1Ni4uZGI5MDcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2pvcm5hZGE3MjBfYmwuYwpAQCAtOTMsNyArOTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBqb3JuYWRhX2JsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBqb3JuYWRhX2JsX29wcyA9IHsKIAkuZ2V0X2JyaWdodG5lc3MgPSBqb3JuYWRhX2JsX2dldF9icmlnaHRuZXNzLAogCS51cGRhdGVfc3RhdHVzID0gam9ybmFkYV9ibF91cGRhdGVfc3RhdHVzLAogCS5vcHRpb25zID0gQkxfQ09SRV9TVVNQRU5EUkVTVU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQva2IzODg2X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwppbmRleCBhMzhmZGExLi45MzllN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9rYjM4ODZfYmwuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmV0dXJuIGtiMzg4NmJsX2ludGVuc2l0eTsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGtiMzg4NmJsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBrYjM4ODZibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzID0ga2IzODg2YmxfZ2V0X2ludGVuc2l0eSwKIAkudXBkYXRlX3N0YXR1cyAgPSBrYjM4ODZibF9zZW5kX2ludGVuc2l0eSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCmluZGV4IDZiNDg4YjguLjAwYTk1OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4gY3VycmVudF9pbnRlbnNpdHk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBsb2NvbW9ibF9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGxvY29tb2JsX2RhdGEgPSB7CiAJLmdldF9icmlnaHRuZXNzID0gbG9jb21vbGNkX2dldF9pbnRlbnNpdHksCiAJLnVwZGF0ZV9zdGF0dXMgID0gbG9jb21vbGNkX3NldF9pbnRlbnNpdHksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCmluZGV4IDllZGI4ZDcuLjJlNzhiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlvc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBpb2xlbjsKIAkvKiBCYWNrbGlnaHQgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuICovCi0Jc3RydWN0IGJhY2tsaWdodF9vcHMgYmFja2xpZ2h0X29wczsKKwljb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBiYWNrbGlnaHRfb3BzOwogfTsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMuICovCkBAIC0yMjAsNiArMjIwLDI0IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IG1icF9kbWlfbWF0Y2gsCisJCS5pZGVudAkJPSAiTWFjQm9va1BybyA1LDMiLAorCQkubWF0Y2hlcwk9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUsMyIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAorCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSw0IiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDQiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsNSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvb21hcDFfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L29tYXAxX2JsLmMKaW5kZXggODY5M2U1Zi4uYTNhN2Y4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvb21hcDFfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9ibC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlyZXR1cm4gYmwtPmN1cnJlbnRfaW50ZW5zaXR5OwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgb21hcGJsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBvbWFwYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IG9tYXBibF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzICA9IG9tYXBibF91cGRhdGVfc3RhdHVzLAogfTsKQEAgLTEzOSw4ICsxMzksNiBAQAogCWlmICghcGRhdGEpCiAJCXJldHVybiAtRU5YSU87CiAKLQlvbWFwYmxfb3BzLmNoZWNrX2ZiID0gcGRhdGEtPmNoZWNrX2ZiOwotCiAJYmwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9iYWNrbGlnaHQpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWJsKSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMKaW5kZXggOWVkYWYyNGYuLjA3NTc4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Byb2dlYXJfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wcm9nZWFyX2JsLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlyZXR1cm4gaW50ZW5zaXR5IC0gSFdfTEVWRUxfTUlOOwogfQogCi1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcHJvZ2VhcmJsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBwcm9nZWFyYmxfb3BzID0gewogCS5nZXRfYnJpZ2h0bmVzcyA9IHByb2dlYXJibF9nZXRfaW50ZW5zaXR5LAogCS51cGRhdGVfc3RhdHVzID0gcHJvZ2VhcmJsX3NldF9pbnRlbnNpdHksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wd21fYmwuYwppbmRleCA4ODcxNjYyLi45ZDJlYzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wd21fYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wd21fYmwuYwpAQCAtMjIsOCArMjIsMTAgQEAKIAogc3RydWN0IHB3bV9ibF9kYXRhIHsKIAlzdHJ1Y3QgcHdtX2RldmljZQkqcHdtOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJdW5zaWduZWQgaW50CQlwZXJpb2Q7Ci0JaW50CQkJKCpub3RpZnkpKGludCBicmlnaHRuZXNzKTsKKwlpbnQJCQkoKm5vdGlmeSkoc3RydWN0IGRldmljZSAqLAorCQkJCQkgIGludCBicmlnaHRuZXNzKTsKIH07CiAKIHN0YXRpYyBpbnQgcHdtX2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKQEAgLTM5LDcgKzQxLDcgQEAKIAkJYnJpZ2h0bmVzcyA9IDA7CiAKIAlpZiAocGItPm5vdGlmeSkKLQkJYnJpZ2h0bmVzcyA9IHBiLT5ub3RpZnkoYnJpZ2h0bmVzcyk7CisJCWJyaWdodG5lc3MgPSBwYi0+bm90aWZ5KHBiLT5kZXYsIGJyaWdodG5lc3MpOwogCiAJaWYgKGJyaWdodG5lc3MgPT0gMCkgewogCQlwd21fY29uZmlnKHBiLT5wd20sIDAsIHBiLT5wZXJpb2QpOwpAQCAtNTYsNyArNTgsNyBAQAogCXJldHVybiBibC0+cHJvcHMuYnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHB3bV9iYWNrbGlnaHRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIHB3bV9iYWNrbGlnaHRfb3BzID0gewogCS51cGRhdGVfc3RhdHVzCT0gcHdtX2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAogCS5nZXRfYnJpZ2h0bmVzcwk9IHB3bV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCiB9OwpAQCAtODgsNiArOTAsNyBAQAogCiAJcGItPnBlcmlvZCA9IGRhdGEtPnB3bV9wZXJpb2RfbnM7CiAJcGItPm5vdGlmeSA9IGRhdGEtPm5vdGlmeTsKKwlwYi0+ZGV2ID0gJnBkZXYtPmRldjsKIAogCXBiLT5wd20gPSBwd21fcmVxdWVzdChkYXRhLT5wd21faWQsICJiYWNrbGlnaHQiKTsKIAlpZiAoSVNfRVJSKHBiLT5wd20pKSB7CkBAIC0xNDYsNyArMTQ5LDcgQEAKIAlzdHJ1Y3QgcHdtX2JsX2RhdGEgKnBiID0gZGV2X2dldF9kcnZkYXRhKCZibC0+ZGV2KTsKIAogCWlmIChwYi0+bm90aWZ5KQotCQlwYi0+bm90aWZ5KDApOworCQlwYi0+bm90aWZ5KHBiLT5kZXYsIDApOwogCXB3bV9jb25maWcocGItPnB3bSwgMCwgcGItPnBlcmlvZCk7CiAJcHdtX2Rpc2FibGUocGItPnB3bSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC90b3NhX2JsLmMKaW5kZXggNDNlZGJhZC4uZTE0Y2U0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfYmwuYwpAQCAtNzIsNyArNzIsNyBAQAogCXJldHVybiBwcm9wcy0+YnJpZ2h0bmVzczsKIH0KIAotc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGJsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBibF9vcHMgPSB7CiAJLmdldF9icmlnaHRuZXNzCQk9IHRvc2FfYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJCT0gdG9zYV9ibF91cGRhdGVfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKaW5kZXggNDY3YmRiNy4uZTMyYWRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCXJldHVybiBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB3bTgzMXhfYmFja2xpZ2h0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB3bTgzMXhfYmFja2xpZ2h0X29wcyA9IHsKIAkub3B0aW9ucyA9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKIAkudXBkYXRlX3N0YXR1cwk9IHdtODMxeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKIAkuZ2V0X2JyaWdodG5lc3MJPSB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCmluZGV4IGRhN2MwMWIuLjNhNTYxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKQEAgLTE1NzMsMTUgKzE1NzMsMTUgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIG5hbWUpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAllcnIgPSAtRU5PTUVNOwogCWNmYiA9IGN5YmVycHJvX2FsbG9jX2ZiX2luZm8oaWQtPmRyaXZlcl9kYXRhLCBuYW1lKTsKIAlpZiAoIWNmYikKIAkJZ290byBmYWlsZWRfcmVsZWFzZTsKIAorCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBjZmItPmZiLmZpeC5pZCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsZWRfcmVnaW9uczsKKwogCWNmYi0+ZGV2ID0gZGV2OwogCWNmYi0+cmVnaW9uID0gcGNpX2lvcmVtYXBfYmFyKGRldiwgMCk7CiAJaWYgKCFjZmItPnJlZ2lvbikKQEAgLTE2MzMsMTAgKzE2MzMsMTAgQEAKIGZhaWxlZDoKIAlpb3VubWFwKGNmYi0+cmVnaW9uKTsKIGZhaWxlZF9pb3JlbWFwOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKK2ZhaWxlZF9yZWdpb25zOgogCWN5YmVycHJvX2ZyZWVfZmJfaW5mbyhjZmIpOwogZmFpbGVkX3JlbGVhc2U6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwotCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYwppbmRleCBjN2M2NDU1Li5lMTkyYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYwpAQCAtMTg5LDExICsxODksNiBAQAogCXN0cnVjdCBvbWFwZmJfY29sb3Jfa2V5CWNvbG9yX2tleTsKIH0gZGlzcGM7CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBkc3NfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZHNzIiwKLQkuaWQJCT0gLTEsCi19OwotCiBzdGF0aWMgdm9pZCBlbmFibGVfbGNkX2Nsb2NrcyhpbnQgZW5hYmxlKTsKIAogc3RhdGljIHZvaWQgaW5saW5lIGRpc3BjX3dyaXRlX3JlZyhpbnQgaWR4LCB1MzIgdmFsKQpAQCAtOTIwLDIwICs5MTUsMjAgQEAKIAogc3RhdGljIGludCBnZXRfZHNzX2Nsb2Nrcyh2b2lkKQogewotCWRpc3BjLmRzc19pY2sgPSBjbGtfZ2V0KCZvbWFwZHNzX2RldmljZS5kZXYsICJpY2siKTsKKwlkaXNwYy5kc3NfaWNrID0gY2xrX2dldCgmZGlzcGMuZmJkZXYtPmRzc2Rldi0+ZGV2LCAiaWNrIik7CiAJaWYgKElTX0VSUihkaXNwYy5kc3NfaWNrKSkgewogCQlkZXZfZXJyKGRpc3BjLmZiZGV2LT5kZXYsICJjYW4ndCBnZXQgaWNrXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIoZGlzcGMuZHNzX2ljayk7CiAJfQogCi0JZGlzcGMuZHNzMV9mY2sgPSBjbGtfZ2V0KCZvbWFwZHNzX2RldmljZS5kZXYsICJkc3MxX2ZjayIpOworCWRpc3BjLmRzczFfZmNrID0gY2xrX2dldCgmZGlzcGMuZmJkZXYtPmRzc2Rldi0+ZGV2LCAiZHNzMV9mY2siKTsKIAlpZiAoSVNfRVJSKGRpc3BjLmRzczFfZmNrKSkgewogCQlkZXZfZXJyKGRpc3BjLmZiZGV2LT5kZXYsICJjYW4ndCBnZXQgZHNzMV9mY2tcbiIpOwogCQljbGtfcHV0KGRpc3BjLmRzc19pY2spOwogCQlyZXR1cm4gUFRSX0VSUihkaXNwYy5kc3MxX2Zjayk7CiAJfQogCi0JZGlzcGMuZHNzXzU0bV9mY2sgPSBjbGtfZ2V0KCZvbWFwZHNzX2RldmljZS5kZXYsICJ0dl9mY2siKTsKKwlkaXNwYy5kc3NfNTRtX2ZjayA9IGNsa19nZXQoJmRpc3BjLmZiZGV2LT5kc3NkZXYtPmRldiwgInR2X2ZjayIpOwogCWlmIChJU19FUlIoZGlzcGMuZHNzXzU0bV9mY2spKSB7CiAJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0IGdldCB0dl9mY2tcbiIpOwogCQljbGtfcHV0KGRpc3BjLmRzc19pY2spOwpAQCAtMTM4NSwxMiArMTM4MCw2IEBACiAJaW50IHNraXBfaW5pdCA9IDA7CiAJaW50IGk7CiAKLQlyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwZHNzX2RldmljZSk7Ci0JaWYgKHIpIHsKLQkJZGV2X2VycihmYmRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgb21hcGRzcyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAltZW1zZXQoJmRpc3BjLCAwLCBzaXplb2YoZGlzcGMpKTsKIAogCWRpc3BjLmJhc2UgPSBpb3JlbWFwKERJU1BDX0JBU0UsIFNaXzFLKTsKQEAgLTE1MzQsNyArMTUyMyw2IEBACiAJZnJlZV9pcnEoSU5UXzI0WFhfRFNTX0lSUSwgZGlzcGMuZmJkZXYpOwogCXB1dF9kc3NfY2xvY2tzKCk7CiAJaW91bm1hcChkaXNwYy5iYXNlKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmb21hcGRzc19kZXZpY2UpOwogfQogCiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfaW50X2N0cmwgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2h0Y2hlcmFsZC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9odGNoZXJhbGQuYwppbmRleCBhOTAwN2M1Li40ODAyNDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2h0Y2hlcmFsZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaHRjaGVyYWxkLmMKQEAgLTExNSwxMiArMTE1LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgaHRjaGVyYWxkX3BhbmVsX2Rydl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBodGNoZXJhbGRfcGFuZWxfZHJ2X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZodGNoZXJhbGRfcGFuZWxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgaHRjaGVyYWxkX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaHRjaGVyYWxkX3BhbmVsX2Rydl9jbGVhbnVwKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmh0Y2hlcmFsZF9wYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbGRwLmMKaW5kZXggNWJiN2Y2Zi4uMGY1OTUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9sZHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2xkcC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CkBAIC01OSw3ICs1OSw3IEBACiAjZGVmaW5lIFRXTDQwMzBfVlBMTDJfREVWX0dSUCAgICAgICAgICAgMHgzMwogI2RlZmluZSBUV0w0MDMwX1ZQTEwyX0RFRElDQVRFRCAgICAgICAgIDB4MzYKIAotI2RlZmluZSB0Ml9vdXQoYywgciwgdikgdHdsNDAzMF9pMmNfd3JpdGVfdTgoYywgciwgdikKKyNkZWZpbmUgdDJfb3V0KGMsIHIsIHYpIHR3bF9pMmNfd3JpdGVfdTgoYywgciwgdikKIAogCiBzdGF0aWMgaW50IGxkcF9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwMmV2bS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwMmV2bS5jCmluZGV4IDAwNmMyZmUuLjdlN2E2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDJldm0uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAyZXZtLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAKICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC02MSw5ICs2MSw5IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9MUiwgMSk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9VRCwgMSk7CiAKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIDB4MTEsIFRXTF9MRURfTEVERU4pOwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDEsIFRXTF9QV01BX1BXTUFPTik7Ci0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgMHgwMiwgVFdMX1BXTUFfUFdNQU9GRik7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIDB4MTEsIFRXTF9MRURfTEVERU4pOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgMHgwMSwgVFdMX1BXTUFfUFdNQU9OKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDIsIFRXTF9QV01BX1BXTUFPRkYpOwogCWJrbGlnaHRfbGV2ZWwgPSAxMDA7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCXU4IGM7CiAJaWYgKChsZXZlbCA+PSAwKSAmJiAobGV2ZWwgPD0gMTAwKSkgewogCQljID0gKDEyNSAqICgxMDAgLSBsZXZlbCkpIC8gMTAwICsgMjsKLQkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgYywgVFdMX1BXTUFfUFdNQU9GRik7CisJCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUFdNQSwgYywgVFdMX1BXTUFfUFdNQU9GRik7CiAJCWJrbGlnaHRfbGV2ZWwgPSBsZXZlbDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzYmVhZ2xlLmMKaW5kZXggZmM1MDNkOC4uY2E3NWNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2JlYWdsZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNiZWFnbGUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb21hcDNldm0uYwppbmRleCBhZTJlZGM0Li4wNjg0MGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29tYXAzZXZtLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vbWFwM2V2bS5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNjMsOSArNjMsOSBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfTFIsIDEpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChMQ0RfUEFORUxfVUQsIDEpOwogCi0JdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDExLCBUV0xfTEVEX0xFREVOKTsKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAxLCBUV0xfUFdNQV9QV01BT04pOwotCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDIsIFRXTF9QV01BX1BXTUFPRkYpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDExLCBUV0xfTEVEX0xFREVOKTsKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIDB4MDEsIFRXTF9QV01BX1BXTUFPTik7CisJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QV01BLCAweDAyLCBUV0xfUFdNQV9QV01BT0ZGKTsKIAlia2xpZ2h0X2xldmVsID0gMTAwOwogCiAJcmV0dXJuIDA7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1OCBjOwogCWlmICgobGV2ZWwgPj0gMCkgJiYgKGxldmVsIDw9IDEwMCkpIHsKIAkJYyA9ICgxMjUgKiAoMTAwIC0gbGV2ZWwpKSAvIDEwMCArIDI7Ci0JCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIGMsIFRXTF9QV01BX1BXTUFPRkYpOworCQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BXTUEsIGMsIFRXTF9QV01BX1BXTUFPRkYpOwogCQlia2xpZ2h0X2xldmVsID0gbGV2ZWw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vdmVyby5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vdmVyby5jCmluZGV4IDU2ZWUxOTIuLjU2NDkzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3Zlcm8uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX292ZXJvLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmIuaCBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmIuaAppbmRleCA0NmU0NzE0Li5hZjNjOWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYi5oCkBAIC0yMDMsNiArMjAzLDggQEAKIAogCXN0cnVjdCBvbWFwZmJfbWVtX2Rlc2MJCW1lbV9kZXNjOwogCXN0cnVjdCBmYl9pbmZvCQkJKmZiX2luZm9bT01BUEZCX1BMQU5FX05VTV07CisKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpkc3NkZXY7CS8qIGR1bW15IGRldiBmb3IgY2xvY2tzICovCiB9OwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKaW5kZXggYzdmNTlhNS4uMmM0ZjQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKQEAgLTgzLDYgKzgzLDE5IEBACiAJeyAxIDw8IE9NQVBGQl9DT0xPUl9ZVVk0MjIsCSJZVVk0MjIiLCB9LAogfTsKIAorc3RhdGljIHZvaWQgb21hcGRzc19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKworLyogZHVtbXkgZGV2aWNlIGZvciBjbG9ja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBkc3NfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwZHNzIiwKKwkuaWQJCT0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucmVsZWFzZSA9IG9tYXBkc3NfcmVsZWFzZSwKKwl9LAorfTsKKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTENEIHBhbmVsCkBAIC0xNzAwLDYgKzE3MTMsNyBAQAogCiAJZmJkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJZmJkZXYtPnBhbmVsID0gcGFuZWw7CisJZmJkZXYtPmRzc2RldiA9ICZvbWFwZHNzX2RldmljZTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmYmRldik7CiAKIAltdXRleF9pbml0KCZmYmRldi0+cnF1ZXVlX211dGV4KTsKQEAgLTE4MTQsOCArMTgyOCwxNiBAQAogCiBzdGF0aWMgaW50IG9tYXBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWludCByOworCiAJQlVHX09OKGZiZGV2X3BkZXYgIT0gTlVMTCk7CiAKKwlyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwZHNzX2RldmljZSk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgb21hcGRzcyBkZXZpY2VcbiIpOworCQlyZXR1cm4gcjsKKwl9CisKIAkvKiBEZWxheSBhY3R1YWwgaW5pdGlhbGl6YXRpb24gdW50aWwgdGhlIExDRCBpcyByZWdpc3RlcmVkICovCiAJZmJkZXZfcGRldiA9IHBkZXY7CiAJaWYgKGZiZGV2X3BhbmVsICE9IE5VTEwpCkBAIC0xODQzLDYgKzE4NjUsOSBAQAogCWZiZGV2LT5zdGF0ZSA9IE9NQVBGQl9ESVNBQkxFRDsKIAlvbWFwZmJfZnJlZV9yZXNvdXJjZXMoZmJkZXYsIHNhdmVkX3N0YXRlKTsKIAorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZvbWFwZHNzX2RldmljZSk7CisJZmJkZXYtPmRzc2RldiA9IE5VTEw7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKaW5kZXggZmVkN2IxYi4uMTE2MjYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCkBAIC04MywxMyArODMsMTMgQEAKIAogc3RhdGljIGludCByZmJpX2dldF9jbG9ja3Modm9pZCkKIHsKLQlyZmJpLmRzc19pY2sgPSBjbGtfZ2V0KHJmYmkuZmJkZXYtPmRldiwgImljayIpOworCXJmYmkuZHNzX2ljayA9IGNsa19nZXQoJmRpc3BjLmZiZGV2LT5kc3NkZXYtPmRldiwgImljayIpOwogCWlmIChJU19FUlIocmZiaS5kc3NfaWNrKSkgewogCQlkZXZfZXJyKHJmYmkuZmJkZXYtPmRldiwgImNhbid0IGdldCBpY2tcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihyZmJpLmRzc19pY2spOwogCX0KIAotCXJmYmkuZHNzMV9mY2sgPSBjbGtfZ2V0KHJmYmkuZmJkZXYtPmRldiwgImRzczFfZmNrIik7CisJcmZiaS5kc3MxX2ZjayA9IGNsa19nZXQoJmRpc3BjLmZiZGV2LT5kc3NkZXYtPmRldiwgImRzczFfZmNrIik7CiAJaWYgKElTX0VSUihyZmJpLmRzczFfZmNrKSkgewogCQlkZXZfZXJyKHJmYmkuZmJkZXYtPmRldiwgImNhbid0IGdldCBkc3MxX2Zja1xuIik7CiAJCWNsa19wdXQocmZiaS5kc3NfaWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9LY29uZmlnCmluZGV4IDcxZDhkZWMuLmM2M2NlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTMgQEAKIAkgIFRoaXMgZW5hYmxlcyBkZWJ1ZyBtZXNzYWdlcy4gWW91IG5lZWQgdG8gZW5hYmxlIHByaW50aW5nCiAJICB3aXRoICdkZWJ1ZycgbW9kdWxlIHBhcmFtZXRlci4KIAorY29uZmlnIE9NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUworCWJvb2wgIkNvbGxlY3QgRFNTIElSUSBzdGF0aXN0aWNzIgorCWRlcGVuZHMgb24gT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBDb2xsZWN0IERTUyBJUlEgc3RhdGlzdGljcywgcHJpbnRhYmxlIHZpYSBkZWJ1Z2ZzCisKIGNvbmZpZyBPTUFQMl9EU1NfUkZCSQogCWJvb2wgIlJGQkkgc3VwcG9ydCIKICAgICAgICAgZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMKaW5kZXggMjk0OTdhMC4uODI5MThlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2NvcmUuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJZHNzX2Nsa19kaXNhYmxlX2FsbF9ub19jdHgoKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVCkKIC8qIENMT0NLUyAqLwogc3RhdGljIHZvaWQgY29yZV9kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiB7CkBAIC0xNDksNiArMTUwLDcgQEAKIAkJCQljbG9ja3NbaV0tPnVzZWNvdW50KTsKIAl9CiB9CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUKSAqLwogCiBzdGF0aWMgaW50IGRzc19nZXRfY2xvY2soc3RydWN0IGNsayAqKmNsb2NrLCBjb25zdCBjaGFyICpjbGtfbmFtZSkKIHsKQEAgLTM5NSw2ICszOTcsMTQgQEAKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjbGsiLCBTX0lSVUdPLCBkc3NfZGVidWdmc19kaXIsCiAJCQkmZHNzX2RlYnVnX2R1bXBfY2xvY2tzLCAmZHNzX2RlYnVnX2ZvcHMpOwogCisJZGVidWdmc19jcmVhdGVfZmlsZSgiZGlzcGNfaXJxIiwgU19JUlVHTywgZHNzX2RlYnVnZnNfZGlyLAorCQkJJmRpc3BjX2R1bXBfaXJxcywgJmRzc19kZWJ1Z19mb3BzKTsKKworI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfRFNJCisJZGVidWdmc19jcmVhdGVfZmlsZSgiZHNpX2lycSIsIFNfSVJVR08sIGRzc19kZWJ1Z2ZzX2RpciwKKwkJCSZkc2lfZHVtcF9pcnFzLCAmZHNzX2RlYnVnX2ZvcHMpOworI2VuZGlmCisKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkc3MiLCBTX0lSVUdPLCBkc3NfZGVidWdmc19kaXIsCiAJCQkmZHNzX2R1bXBfcmVncywgJmRzc19kZWJ1Z19mb3BzKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkaXNwYyIsIFNfSVJVR08sIGRzc19kZWJ1Z2ZzX2RpciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BjLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jCmluZGV4IDZkYWJmNGIuLmRlOGJmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYwpAQCAtMTQ4LDYgKzE0OCwxMiBAQAogCURJU1BDX1ZJRF9BVFRSSUJVVEVTKDApLAogCURJU1BDX1ZJRF9BVFRSSUJVVEVTKDEpIH07CiAKK3N0cnVjdCBkaXNwY19pcnFfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgbGFzdF9yZXNldDsKKwl1bnNpZ25lZCBpcnFfY291bnQ7CisJdW5zaWduZWQgaXJxc1szMl07Cit9OworCiBzdGF0aWMgc3RydWN0IHsKIAl2b2lkIF9faW9tZW0gICAgKmJhc2U7CiAKQEAgLTE2MCw2ICsxNjYsMTEgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXJyb3Jfd29yazsKIAogCXUzMgkJY3R4W0RJU1BDX1NaX1JFR1MgLyBzaXplb2YodTMyKV07CisKKyNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTCisJc3BpbmxvY2tfdCBpcnFfc3RhdHNfbG9jazsKKwlzdHJ1Y3QgZGlzcGNfaXJxX3N0YXRzIGlycV9zdGF0czsKKyNlbmRpZgogfSBkaXNwYzsKIAogc3RhdGljIHZvaWQgX29tYXBfZGlzcGNfc2V0X2lycXModm9pZCk7CkBAIC0xNDQzLDcgKzE0NTQsMTAgQEAKIAkJZG9fZGl2KHRtcCwgMiAqIG91dF9oZWlnaHQgKiBwcGwpOwogCQlmY2xrID0gdG1wOwogCi0JCWlmIChoZWlnaHQgPiAyICogb3V0X2hlaWdodCAmJiBwcGwgIT0gb3V0X3dpZHRoKSB7CisJCWlmIChoZWlnaHQgPiAyICogb3V0X2hlaWdodCkgeworCQkJaWYgKHBwbCA9PSBvdXRfd2lkdGgpCisJCQkJcmV0dXJuIDA7CisKIAkJCXRtcCA9IHBjbGsgKiAoaGVpZ2h0IC0gMiAqIG91dF9oZWlnaHQpICogb3V0X3dpZHRoOwogCQkJZG9fZGl2KHRtcCwgMiAqIG91dF9oZWlnaHQgKiAocHBsIC0gb3V0X3dpZHRoKSk7CiAJCQlmY2xrID0gbWF4KGZjbGssICh1MzIpIHRtcCk7CkBAIC0xNjIzLDcgKzE2MzcsNyBAQAogCQlEU1NEQkcoInJlcXVpcmVkIGZjbGsgcmF0ZSA9ICVsdSBIelxuIiwgZmNsayk7CiAJCURTU0RCRygiY3VycmVudCBmY2xrIHJhdGUgPSAlbHUgSHpcbiIsIGRpc3BjX2ZjbGtfcmF0ZSgpKTsKIAotCQlpZiAoZmNsayA+IGRpc3BjX2ZjbGtfcmF0ZSgpKSB7CisJCWlmICghZmNsayB8fCBmY2xrID4gZGlzcGNfZmNsa19yYXRlKCkpIHsKIAkJCURTU0VSUigiZmFpbGVkIHRvIHNldCB1cCBzY2FsaW5nLCAiCiAJCQkJCSJyZXF1aXJlZCBmY2xrIHJhdGUgPSAlbHUgSHosICIKIAkJCQkJImN1cnJlbnQgZmNsayByYXRlID0gJWx1IEh6XG4iLApAQCAtMjI0Nyw2ICsyMjYxLDUwIEBACiAJZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAorI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKK3ZvaWQgZGlzcGNfZHVtcF9pcnFzKHN0cnVjdCBzZXFfZmlsZSAqcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkaXNwY19pcnFfc3RhdHMgc3RhdHM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGlzcGMuaXJxX3N0YXRzX2xvY2ssIGZsYWdzKTsKKworCXN0YXRzID0gZGlzcGMuaXJxX3N0YXRzOworCW1lbXNldCgmZGlzcGMuaXJxX3N0YXRzLCAwLCBzaXplb2YoZGlzcGMuaXJxX3N0YXRzKSk7CisJZGlzcGMuaXJxX3N0YXRzLmxhc3RfcmVzZXQgPSBqaWZmaWVzOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlzcGMuaXJxX3N0YXRzX2xvY2ssIGZsYWdzKTsKKworCXNlcV9wcmludGYocywgInBlcmlvZCAldSBtc1xuIiwKKwkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXRzLmxhc3RfcmVzZXQpKTsKKworCXNlcV9wcmludGYocywgImlycXMgJWRcbiIsIHN0YXRzLmlycV9jb3VudCk7CisjZGVmaW5lIFBJUyh4KSBcCisJc2VxX3ByaW50ZihzLCAiJS0yMHMgJTEwZFxuIiwgI3gsIHN0YXRzLmlycXNbZmZzKERJU1BDX0lSUV8jI3gpLTFdKTsKKworCVBJUyhGUkFNRURPTkUpOworCVBJUyhWU1lOQyk7CisJUElTKEVWU1lOQ19FVkVOKTsKKwlQSVMoRVZTWU5DX09ERCk7CisJUElTKEFDQklBU19DT1VOVF9TVEFUKTsKKwlQSVMoUFJPR19MSU5FX05VTSk7CisJUElTKEdGWF9GSUZPX1VOREVSRkxPVyk7CisJUElTKEdGWF9FTkRfV0lOKTsKKwlQSVMoUEFMX0dBTU1BX01BU0spOworCVBJUyhPQ1BfRVJSKTsKKwlQSVMoVklEMV9GSUZPX1VOREVSRkxPVyk7CisJUElTKFZJRDFfRU5EX1dJTik7CisJUElTKFZJRDJfRklGT19VTkRFUkZMT1cpOworCVBJUyhWSUQyX0VORF9XSU4pOworCVBJUyhTWU5DX0xPU1QpOworCVBJUyhTWU5DX0xPU1RfRElHSVQpOworCVBJUyhXQUtFVVApOworI3VuZGVmIFBJUworfQorI2Vsc2UKK3ZvaWQgZGlzcGNfZHVtcF9pcnFzKHN0cnVjdCBzZXFfZmlsZSAqcykgeyB9CisjZW5kaWYKKwogdm9pZCBkaXNwY19kdW1wX3JlZ3Moc3RydWN0IHNlcV9maWxlICpzKQogewogI2RlZmluZSBEVU1QUkVHKHIpIHNlcV9wcmludGYocywgIiUtMzVzICUwOHhcbiIsICNyLCBkaXNwY19yZWFkX3JlZyhyKSkKQEAgLTI2NjUsNiArMjcyMywxMyBAQAogCiAJaXJxc3RhdHVzID0gZGlzcGNfcmVhZF9yZWcoRElTUENfSVJRU1RBVFVTKTsKIAorI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKKwlzcGluX2xvY2soJmRpc3BjLmlycV9zdGF0c19sb2NrKTsKKwlkaXNwYy5pcnFfc3RhdHMuaXJxX2NvdW50Kys7CisJZHNzX2NvbGxlY3RfaXJxX3N0YXRzKGlycXN0YXR1cywgZGlzcGMuaXJxX3N0YXRzLmlycXMpOworCXNwaW5fdW5sb2NrKCZkaXNwYy5pcnFfc3RhdHNfbG9jayk7CisjZW5kaWYKKwogI2lmZGVmIERFQlVHCiAJaWYgKGRzc19kZWJ1ZykKIAkJcHJpbnRfaXJxX3N0YXR1cyhpcnFzdGF0dXMpOwpAQCAtMzAxMiw2ICszMDc3LDExIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmZGlzcGMuaXJxX2xvY2spOwogCisjaWZkZWYgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUworCXNwaW5fbG9ja19pbml0KCZkaXNwYy5pcnFfc3RhdHNfbG9jayk7CisJZGlzcGMuaXJxX3N0YXRzLmxhc3RfcmVzZXQgPSBqaWZmaWVzOworI2VuZGlmCisKIAlJTklUX1dPUksoJmRpc3BjLmVycm9yX3dvcmssIGRpc3BjX2Vycm9yX3dvcmtlcik7CiAKIAlkaXNwYy5iYXNlID0gaW9yZW1hcChESVNQQ19CQVNFLCBESVNQQ19TWl9SRUdTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNpLmMKaW5kZXggNTkzNjQ4Ny4uNjEyMjE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNpLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNpLmMKQEAgLTIwNCw2ICsyMDQsMTQgQEAKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkZXZpY2U7CiB9OwogCitzdHJ1Y3QgZHNpX2lycV9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBsYXN0X3Jlc2V0OworCXVuc2lnbmVkIGlycV9jb3VudDsKKwl1bnNpZ25lZCBkc2lfaXJxc1szMl07CisJdW5zaWduZWQgdmNfaXJxc1s0XVszMl07CisJdW5zaWduZWQgY2lvX2lycXNbMzJdOworfTsKKwogc3RhdGljIHN0cnVjdAogewogCXZvaWQgX19pb21lbQkqYmFzZTsKQEAgLTI1OCw2ICsyNjYsMTEgQEAKICNlbmRpZgogCWludCBkZWJ1Z19yZWFkOwogCWludCBkZWJ1Z193cml0ZTsKKworI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKKwlzcGlubG9ja190IGlycV9zdGF0c19sb2NrOworCXN0cnVjdCBkc2lfaXJxX3N0YXRzIGlycV9zdGF0czsKKyNlbmRpZgogfSBkc2k7CiAKICNpZmRlZiBERUJVRwpAQCAtNTI4LDYgKzU0MSwxMiBAQAogCiAJaXJxc3RhdHVzID0gZHNpX3JlYWRfcmVnKERTSV9JUlFTVEFUVVMpOwogCisjaWZkZWYgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUworCXNwaW5fbG9jaygmZHNpLmlycV9zdGF0c19sb2NrKTsKKwlkc2kuaXJxX3N0YXRzLmlycV9jb3VudCsrOworCWRzc19jb2xsZWN0X2lycV9zdGF0cyhpcnFzdGF0dXMsIGRzaS5pcnFfc3RhdHMuZHNpX2lycXMpOworI2VuZGlmCisKIAlpZiAoaXJxc3RhdHVzICYgRFNJX0lSUV9FUlJPUl9NQVNLKSB7CiAJCURTU0VSUigiRFNJIGVycm9yLCBpcnFzdGF0dXMgJXhcbiIsIGlycXN0YXR1cyk7CiAJCXByaW50X2lycV9zdGF0dXMoaXJxc3RhdHVzKTsKQEAgLTU0OSw2ICs1NjgsMTAgQEAKIAogCQl2Y3N0YXR1cyA9IGRzaV9yZWFkX3JlZyhEU0lfVkNfSVJRU1RBVFVTKGkpKTsKIAorI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKKwkJZHNzX2NvbGxlY3RfaXJxX3N0YXRzKHZjc3RhdHVzLCBkc2kuaXJxX3N0YXRzLnZjX2lycXNbaV0pOworI2VuZGlmCisKIAkJaWYgKHZjc3RhdHVzICYgRFNJX1ZDX0lSUV9CVEEpCiAJCQljb21wbGV0ZSgmZHNpLmJ0YV9jb21wbGV0aW9uKTsKIApAQCAtNTY4LDYgKzU5MSwxMCBAQAogCWlmIChpcnFzdGF0dXMgJiBEU0lfSVJRX0NPTVBMRVhJT19FUlIpIHsKIAkJY2lvc3RhdHVzID0gZHNpX3JlYWRfcmVnKERTSV9DT01QTEVYSU9fSVJRX1NUQVRVUyk7CiAKKyNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTCisJCWRzc19jb2xsZWN0X2lycV9zdGF0cyhjaW9zdGF0dXMsIGRzaS5pcnFfc3RhdHMuY2lvX2lycXMpOworI2VuZGlmCisKIAkJZHNpX3dyaXRlX3JlZyhEU0lfQ09NUExFWElPX0lSUV9TVEFUVVMsIGNpb3N0YXR1cyk7CiAJCS8qIGZsdXNoIHBvc3RlZCB3cml0ZSAqLwogCQlkc2lfcmVhZF9yZWcoRFNJX0NPTVBMRVhJT19JUlFfU1RBVFVTKTsKQEAgLTU3OSw2ICs2MDYsMTAgQEAKIAlkc2lfd3JpdGVfcmVnKERTSV9JUlFTVEFUVVMsIGlycXN0YXR1cyAmIH5EU0lfSVJRX0NIQU5ORUxfTUFTSyk7CiAJLyogZmx1c2ggcG9zdGVkIHdyaXRlICovCiAJZHNpX3JlYWRfcmVnKERTSV9JUlFTVEFUVVMpOworCisjaWZkZWYgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUworCXNwaW5fdW5sb2NrKCZkc2kuaXJxX3N0YXRzX2xvY2spOworI2VuZGlmCiB9CiAKIApAQCAtNzk3LDEyICs4MjgsMTIgQEAKIAogCS8qIFBMTF9QV1JfU1RBVFVTICovCiAJd2hpbGUgKEZMRF9HRVQoZHNpX3JlYWRfcmVnKERTSV9DTEtfQ1RSTCksIDI5LCAyOCkgIT0gc3RhdGUpIHsKLQkJdWRlbGF5KDEpOwotCQlpZiAodCsrID4gMTAwMCkgeworCQlpZiAoKyt0ID4gMTAwMCkgewogCQkJRFNTRVJSKCJGYWlsZWQgdG8gc2V0IERTSSBQTEwgcG93ZXIgbW9kZSB0byAlZFxuIiwKIAkJCQkJc3RhdGUpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KKwkJdWRlbGF5KDEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTIyNiw2ICsxMjU3LDk1IEBACiAJZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAorI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKK3ZvaWQgZHNpX2R1bXBfaXJxcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZHNpX2lycV9zdGF0cyBzdGF0czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkc2kuaXJxX3N0YXRzX2xvY2ssIGZsYWdzKTsKKworCXN0YXRzID0gZHNpLmlycV9zdGF0czsKKwltZW1zZXQoJmRzaS5pcnFfc3RhdHMsIDAsIHNpemVvZihkc2kuaXJxX3N0YXRzKSk7CisJZHNpLmlycV9zdGF0cy5sYXN0X3Jlc2V0ID0gamlmZmllczsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzaS5pcnFfc3RhdHNfbG9jaywgZmxhZ3MpOworCisJc2VxX3ByaW50ZihzLCAicGVyaW9kICV1IG1zXG4iLAorCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhdHMubGFzdF9yZXNldCkpOworCisJc2VxX3ByaW50ZihzLCAiaXJxcyAlZFxuIiwgc3RhdHMuaXJxX2NvdW50KTsKKyNkZWZpbmUgUElTKHgpIFwKKwlzZXFfcHJpbnRmKHMsICIlLTIwcyAlMTBkXG4iLCAjeCwgc3RhdHMuZHNpX2lycXNbZmZzKERTSV9JUlFfIyN4KS0xXSk7CisKKwlzZXFfcHJpbnRmKHMsICItLSBEU0kgaW50ZXJydXB0cyAtLVxuIik7CisJUElTKFZDMCk7CisJUElTKFZDMSk7CisJUElTKFZDMik7CisJUElTKFZDMyk7CisJUElTKFdBS0VVUCk7CisJUElTKFJFU1lOQyk7CisJUElTKFBMTF9MT0NLKTsKKwlQSVMoUExMX1VOTE9DSyk7CisJUElTKFBMTF9SRUNBTEwpOworCVBJUyhDT01QTEVYSU9fRVJSKTsKKwlQSVMoSFNfVFhfVElNRU9VVCk7CisJUElTKExQX1JYX1RJTUVPVVQpOworCVBJUyhURV9UUklHR0VSKTsKKwlQSVMoQUNLX1RSSUdHRVIpOworCVBJUyhTWU5DX0xPU1QpOworCVBJUyhMRE9fUE9XRVJfR09PRCk7CisJUElTKFRBX1RJTUVPVVQpOworI3VuZGVmIFBJUworCisjZGVmaW5lIFBJUyh4KSBcCisJc2VxX3ByaW50ZihzLCAiJS0yMHMgJTEwZCAlMTBkICUxMGQgJTEwZFxuIiwgI3gsIFwKKwkJCXN0YXRzLnZjX2lycXNbMF1bZmZzKERTSV9WQ19JUlFfIyN4KS0xXSwgXAorCQkJc3RhdHMudmNfaXJxc1sxXVtmZnMoRFNJX1ZDX0lSUV8jI3gpLTFdLCBcCisJCQlzdGF0cy52Y19pcnFzWzJdW2ZmcyhEU0lfVkNfSVJRXyMjeCktMV0sIFwKKwkJCXN0YXRzLnZjX2lycXNbM11bZmZzKERTSV9WQ19JUlFfIyN4KS0xXSk7CisKKwlzZXFfcHJpbnRmKHMsICItLSBWQyBpbnRlcnJ1cHRzIC0tXG4iKTsKKwlQSVMoQ1MpOworCVBJUyhFQ0NfQ09SUik7CisJUElTKFBBQ0tFVF9TRU5UKTsKKwlQSVMoRklGT19UWF9PVkYpOworCVBJUyhGSUZPX1JYX09WRik7CisJUElTKEJUQSk7CisJUElTKEVDQ19OT19DT1JSKTsKKwlQSVMoRklGT19UWF9VREYpOworCVBJUyhQUF9CVVNZX0NIQU5HRSk7CisjdW5kZWYgUElTCisKKyNkZWZpbmUgUElTKHgpIFwKKwlzZXFfcHJpbnRmKHMsICIlLTIwcyAlMTBkXG4iLCAjeCwgXAorCQkJc3RhdHMuY2lvX2lycXNbZmZzKERTSV9DSU9fSVJRXyMjeCktMV0pOworCisJc2VxX3ByaW50ZihzLCAiLS0gQ0lPIGludGVycnVwdHMgLS1cbiIpOworCVBJUyhFUlJTWU5DRVNDMSk7CisJUElTKEVSUlNZTkNFU0MyKTsKKwlQSVMoRVJSU1lOQ0VTQzMpOworCVBJUyhFUlJFU0MxKTsKKwlQSVMoRVJSRVNDMik7CisJUElTKEVSUkVTQzMpOworCVBJUyhFUlJDT05UUk9MMSk7CisJUElTKEVSUkNPTlRST0wyKTsKKwlQSVMoRVJSQ09OVFJPTDMpOworCVBJUyhTVEFURVVMUFMxKTsKKwlQSVMoU1RBVEVVTFBTMik7CisJUElTKFNUQVRFVUxQUzMpOworCVBJUyhFUlJDT05URU5USU9OTFAwXzEpOworCVBJUyhFUlJDT05URU5USU9OTFAxXzEpOworCVBJUyhFUlJDT05URU5USU9OTFAwXzIpOworCVBJUyhFUlJDT05URU5USU9OTFAxXzIpOworCVBJUyhFUlJDT05URU5USU9OTFAwXzMpOworCVBJUyhFUlJDT05URU5USU9OTFAxXzMpOworCVBJUyhVTFBTQUNUSVZFTk9UX0FMTDApOworCVBJUyhVTFBTQUNUSVZFTk9UX0FMTDEpOworI3VuZGVmIFBJUworfQorI2VuZGlmCisKIHZvaWQgZHNpX2R1bXBfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiB7CiAjZGVmaW5lIERVTVBSRUcocikgc2VxX3ByaW50ZihzLCAiJS0zNXMgJTA4eFxuIiwgI3IsIGRzaV9yZWFkX3JlZyhyKSkKQEAgLTEzMjEsMTIgKzE0NDEsMTIgQEAKIAogCS8qIFBXUl9TVEFUVVMgKi8KIAl3aGlsZSAoRkxEX0dFVChkc2lfcmVhZF9yZWcoRFNJX0NPTVBMRVhJT19DRkcxKSwgMjYsIDI1KSAhPSBzdGF0ZSkgewotCQl1ZGVsYXkoMSk7Ci0JCWlmICh0KysgPiAxMDAwKSB7CisJCWlmICgrK3QgPiAxMDAwKSB7CiAJCQlEU1NFUlIoImZhaWxlZCB0byBzZXQgY29tcGxleGlvIHBvd2VyIHN0YXRlIHRvICIKIAkJCQkJIiVkXG4iLCBzdGF0ZSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQorCQl1ZGVsYXkoMSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTI2LDEwICsxNjQ2LDEwIEBACiAKIHN0YXRpYyBpbnQgX2RzaV93YWl0X3Jlc2V0KHZvaWQpCiB7Ci0JaW50IGkgPSAwOworCWludCB0ID0gMDsKIAogCXdoaWxlIChSRUdfR0VUKERTSV9TWVNTVEFUVVMsIDAsIDApID09IDApIHsKLQkJaWYgKGkrKyA+IDUpIHsKKwkJaWYgKCsrdCA+IDUpIHsKIAkJCURTU0VSUigic29mdCByZXNldCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTE5OTksNyArMjExOSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRhdGFfaWQgPSBkYXRhX3R5cGUgfCBjaGFubmVsIDw8IDY7CisJZGF0YV9pZCA9IGRhdGFfdHlwZSB8IGRzaS52Y1tjaGFubmVsXS5kZXN0X3BlciA8PCA2OwogCiAJciA9IChkYXRhX2lkIDw8IDApIHwgKGRhdGEgPDwgOCkgfCAoZWNjIDw8IDI0KTsKIApAQCAtMjAxMSw3ICsyMTMxLDcgQEAKIGludCBkc2lfdmNfc2VuZF9udWxsKGludCBjaGFubmVsKQogewogCXU4IG51bGxwa2dbXSA9IHswLCAwLCAwLCAwfTsKLQlyZXR1cm4gZHNpX3ZjX3NlbmRfbG9uZygwLCBEU0lfRFRfTlVMTF9QQUNLRVQsIG51bGxwa2csIDQsIDApOworCXJldHVybiBkc2lfdmNfc2VuZF9sb25nKGNoYW5uZWwsIERTSV9EVF9OVUxMX1BBQ0tFVCwgbnVsbHBrZywgNCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKGRzaV92Y19zZW5kX251bGwpOwogCkBAIC0yMDU4LDcgKzIxNzgsNyBAQAogCWludCByOwogCiAJaWYgKGRzaS5kZWJ1Z19yZWFkKQotCQlEU1NEQkcoImRzaV92Y19kY3NfcmVhZChjaCVkLCBkY3NfY21kICV1KVxuIiwgY2hhbm5lbCwgZGNzX2NtZCk7CisJCURTU0RCRygiZHNpX3ZjX2Rjc19yZWFkKGNoJWQsIGRjc19jbWQgJXgpXG4iLCBjaGFubmVsLCBkY3NfY21kKTsKIAogCXIgPSBkc2lfdmNfc2VuZF9zaG9ydChjaGFubmVsLCBEU0lfRFRfRENTX1JFQUQsIGRjc19jbWQsIDApOwogCWlmIChyKQpAQCAtMjU4Niw3ICsyNzA2LDYgQEAKIAkJLyogdXNpbmcgZmlmbyBub3QgZW1wdHkgKi8KIAkJLyogVFhfRklGT19OT1RfRU1QVFkgKi8KIAkJd2hpbGUgKEZMRF9HRVQoZHNpX3JlYWRfcmVnKERTSV9WQ19DVFJMKDApKSwgNSwgNSkpIHsKLQkJCXVkZWxheSgxKTsKIAkJCWZpZm9fc3RhbGxzKys7CiAJCQlpZiAoZmlmb19zdGFsbHMgPiAweGZmZmZmKSB7CiAJCQkJRFNTRVJSKCJmaWZvIHN0YWxscyBvdmVyZmxvdywgcGl4ZWxzIGxlZnQgJWRcbiIsCkBAIC0yNTk0LDYgKzI3MTMsNyBAQAogCQkJCWRzaV9pZl9lbmFibGUoMCk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CisJCQl1ZGVsYXkoMSk7CiAJCX0KICNlbGlmIDEKIAkJLyogdXNpbmcgZmlmbyBlbXB0aW5lc3MgKi8KQEAgLTI4MTIsMTEgKzI5MzIsMTUgQEAKIAogc3RhdGljIGludCBkc2lfc2V0X3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpCiB7Ci0JaW50IHI7Ci0JciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOwotCS8qIFhYWCBmb3Igc29tZSByZWFzb24sIERTSSBURSBicmVha3MgaWYgd2UgZG9uJ3Qgd2FpdCBoZXJlLgotCSAqIFBhbmVsIGJ1Zz8gTmVlZHMgbW9yZSBzdHVkeWluZyAqLwotCW1zbGVlcCgxMDApOworCWludCByID0gMDsKKworCWlmIChkc3NkZXYtPmRyaXZlci0+ZW5hYmxlX3RlKSB7CisJCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlX3RlKGRzc2RldiwgZW5hYmxlKTsKKwkJLyogWFhYIGZvciBzb21lIHJlYXNvbiwgRFNJIFRFIGJyZWFrcyBpZiB3ZSBkb24ndCB3YWl0IGhlcmUuCisJCSAqIFBhbmVsIGJ1Zz8gTmVlZHMgbW9yZSBzdHVkeWluZyAqLworCQltc2xlZXAoMTAwKTsKKwl9CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtMzYzNyw2ICszNzYxLDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJmRzaS5lcnJvcnNfbG9jayk7CiAJZHNpLmVycm9ycyA9IDA7CiAKKyNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTCisJc3Bpbl9sb2NrX2luaXQoJmRzaS5pcnFfc3RhdHNfbG9jayk7CisJZHNpLmlycV9zdGF0cy5sYXN0X3Jlc2V0ID0gamlmZmllczsKKyNlbmRpZgorCiAJaW5pdF9jb21wbGV0aW9uKCZkc2kuYnRhX2NvbXBsZXRpb24pOwogCWluaXRfY29tcGxldGlvbigmZHNpLnVwZGF0ZV9jb21wbGV0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYwppbmRleCA5YjA1ZWU2Li4wYTI2YjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYwpAQCAtNDY3LDE0ICs0NjcsMTQgQEAKIAogc3RhdGljIGludCBfb21hcF9kc3Nfd2FpdF9yZXNldCh2b2lkKQogewotCXVuc2lnbmVkIHRpbWVvdXQgPSAxMDAwOworCWludCB0ID0gMDsKIAogCXdoaWxlIChSRUdfR0VUKERTU19TWVNTVEFUVVMsIDAsIDApID09IDApIHsKLQkJdWRlbGF5KDEpOwotCQlpZiAoIS0tdGltZW91dCkgeworCQlpZiAoKyt0ID4gMTAwMCkgewogCQkJRFNTRVJSKCJzb2Z0IHJlc2V0IGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQorCQl1ZGVsYXkoMSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaCBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCmluZGV4IDhkYTVhYzQuLjJiY2IxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCkBAIC0yNDAsNiArMjQwLDcgQEAKIHZvaWQgZHNpX2V4aXQodm9pZCk7CiAKIHZvaWQgZHNpX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcyk7Cit2b2lkIGRzaV9kdW1wX2lycXMoc3RydWN0IHNlcV9maWxlICpzKTsKIHZvaWQgZHNpX2R1bXBfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpOwogCiB2b2lkIGRzaV9zYXZlX2NvbnRleHQodm9pZCk7CkBAIC0yNjgsNiArMjY5LDcgQEAKIGludCBkaXNwY19pbml0KHZvaWQpOwogdm9pZCBkaXNwY19leGl0KHZvaWQpOwogdm9pZCBkaXNwY19kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpOwordm9pZCBkaXNwY19kdW1wX2lycXMoc3RydWN0IHNlcV9maWxlICpzKTsKIHZvaWQgZGlzcGNfZHVtcF9yZWdzKHN0cnVjdCBzZXFfZmlsZSAqcyk7CiB2b2lkIGRpc3BjX2lycV9oYW5kbGVyKHZvaWQpOwogdm9pZCBkaXNwY19mYWtlX3ZzeW5jX2lycSh2b2lkKTsKQEAgLTM2Nyw0ICszNjksMTYgQEAKIHVuc2lnbmVkIGxvbmcgcmZiaV9nZXRfbWF4X3R4X3JhdGUodm9pZCk7CiBpbnQgcmZiaV9pbml0X2Rpc3BsYXkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSk7CiAKKworI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3NfY29sbGVjdF9pcnFfc3RhdHModTMyIGlycXN0YXR1cywgdW5zaWduZWQgKmlycV9hcnIpCit7CisJaW50IGI7CisJZm9yIChiID0gMDsgYiA8IDMyOyArK2IpIHsKKwkJaWYgKGlycXN0YXR1cyAmICgxIDw8IGIpKQorCQkJaXJxX2FycltiXSsrOworCX0KK30KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYwppbmRleCBkMGIzMDA2Li5iOTM2NDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9yZmJpLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldlsyXTsKIAotCXN0cnVjdCBrZmlmbyAgICAgICpjbWRfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8gICAgICBjbWRfZmlmbzsKIAlzcGlubG9ja190ICAgICAgICBjbWRfbG9jazsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfZG9uZTsKIAlhdG9taWNfdCAgICAgICAgICBjbWRfZmlmb19mdWxsOwpAQCAtMTAxMSwyMCArMTAxMSwyMCBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSAodHJ1ZSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZShyZmJpLmNtZF9maWZvLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZyZmJpLmNtZF9sb2NrLCBmbGFncyk7CiAKLQkJbGVuID0gX19rZmlmb19nZXQocmZiaS5jbWRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmcCwKKwkJbGVuID0ga2ZpZm9fb3V0KCZyZmJpLmNtZF9maWZvLCAodW5zaWduZWQgY2hhciAqKSZwLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKTsKIAkJaWYgKGxlbiA9PSAwKSB7CiAJCQlEU1NEQkcoIm5vdGhpbmcgbW9yZSBpbiBmaWZvXG4iKTsKIAkJCWF0b21pY19zZXQoJnJmYmkuY21kX3BlbmRpbmcsIDApOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyZmJpLmNtZF9maWZvLT5sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZmJpLmNtZF9sb2NrLCBmbGFncyk7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIERTU0RCRygiZmlmbyBmdWxsICVkXG4iLCByZmJpLmNtZF9maWZvX2Z1bGwuY291bnRlcik7Ki8KIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJmYmkuY21kX2ZpZm8tPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmZiaS5jbWRfbG9jaywgZmxhZ3MpOwogCiAJCUJVR19PTihsZW4gIT0gc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKTsKIAkJQlVHX09OKHAucmZiaV9tb2R1bGUgPiAxKTsKQEAgLTEwNTIsMjUgKzEwNTIsMjUgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJaW50IGF2YWlsYWJsZTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZShyZmJpLmNtZF9maWZvLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZyZmJpLmNtZF9sb2NrLCBmbGFncyk7CiAJCWF2YWlsYWJsZSA9IFJGQklfQ01EX0ZJRk9fTEVOX0JZVEVTIC0KLQkJCV9fa2ZpZm9fbGVuKHJmYmkuY21kX2ZpZm8pOworCQkJa2ZpZm9fbGVuKCZyZmJpLmNtZF9maWZvKTsKIAogLyoJCURTU0RCRygiJWQgYnl0ZXMgbGVmdCBpbiBmaWZvXG4iLCBhdmFpbGFibGUpOyAqLwogCQlpZiAoYXZhaWxhYmxlIDwgc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKSB7CiAJCQlEU1NEQkcoIkdvaW5nIHRvIHdhaXQgYmVjYXVzZSBGSUZPIEZVTEwuLlxuIik7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJmYmkuY21kX2ZpZm8tPmxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKIAkJCWF0b21pY19pbmMoJnJmYmkuY21kX2ZpZm9fZnVsbCk7CiAJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZmJpLmNtZF9kb25lKTsKIAkJCS8qRFNTREJHKCJXb2tlIHVwIGJlY2F1c2UgZmlmbyBub3QgZnVsbCBhbnltb3JlXG4iKTsqLwogCQkJY29udGludWU7CiAJCX0KIAotCQlyZXQgPSBfX2tmaWZvX3B1dChyZmJpLmNtZF9maWZvLCAodW5zaWduZWQgY2hhciAqKXAsCisJCXJldCA9IGtmaWZvX2luKCZyZmJpLmNtZF9maWZvLCAodW5zaWduZWQgY2hhciAqKXAsCiAJCQkJICBzaXplb2Yoc3RydWN0IHVwZGF0ZV9wYXJhbSkpOwogLyoJCURTU0RCRygicHVzaGVkICVkIGJ5dGVzXG4iLCByZXQpOyovCiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyZmJpLmNtZF9maWZvLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKIAogCQlCVUdfT04ocmV0ICE9IHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7CiAKQEAgLTExNTUsMTIgKzExNTUsMTIgQEAKIHsKIAl1MzIgcmV2OwogCXUzMiBsOworCWludCByOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJmYmkuY21kX2xvY2spOwotCXJmYmkuY21kX2ZpZm8gPSBrZmlmb19hbGxvYyhSRkJJX0NNRF9GSUZPX0xFTl9CWVRFUywgR0ZQX0tFUk5FTCwKLQkJCQkgICAgJnJmYmkuY21kX2xvY2spOwotCWlmIChJU19FUlIocmZiaS5jbWRfZmlmbykpCi0JCXJldHVybiAtRU5PTUVNOworCXIgPSBrZmlmb19hbGxvYygmcmZiaS5jbWRfZmlmbywgUkZCSV9DTURfRklGT19MRU5fQllURVMsIEdGUF9LRVJORUwpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAogCWluaXRfY29tcGxldGlvbigmcmZiaS5jbWRfZG9uZSk7CiAJYXRvbWljX3NldCgmcmZiaS5jbWRfZmlmb19mdWxsLCAwKTsKQEAgLTExOTYsNyArMTE5Niw3IEBACiB7CiAJRFNTREJHKCJyZmJpX2V4aXRcbiIpOwogCi0Ja2ZpZm9fZnJlZShyZmJpLmNtZF9maWZvKTsKKwlrZmlmb19mcmVlKCZyZmJpLmNtZF9maWZvKTsKIAogCWlvdW5tYXAocmZiaS5iYXNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItbWFpbi5jCmluZGV4IGVmMjk5ODMuLmQxN2NhZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLW1haW4uYwpAQCAtMTMxMSw2ICsxMzExLDcgQEAKIAkJaWYgKHJnLT52cmZiLnZhZGRyWzBdKSB7CiAJCQlpb3VubWFwKHJnLT52cmZiLnZhZGRyWzBdKTsKIAkJCW9tYXBfdnJmYl9yZWxlYXNlX2N0eCgmcmctPnZyZmIpOworCQkJcmctPnZyZmIudmFkZHJbMF0gPSBOVUxMOwogCQl9CiAJfQogCkBAIC0yMTE0LDYgKzIxMTUsMTEgQEAKIAlkc3NkZXYgPSBOVUxMOwogCWZvcl9lYWNoX2Rzc19kZXYoZHNzZGV2KSB7CiAJCW9tYXBfZHNzX2dldF9kZXZpY2UoZHNzZGV2KTsKKwkJaWYgKCFkc3NkZXYtPmRyaXZlcikgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gZHJpdmVyIGZvciBkaXNwbGF5XG4iKTsKKwkJCXIgPSAtRUlOVkFMOworCQkJZ290byBjbGVhbnVwOworCQl9CiAJCWZiZGV2LT5kaXNwbGF5c1tmYmRldi0+bnVtX2Rpc3BsYXlzKytdID0gZHNzZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IDQxNTg1OGIuLjgyNWI2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTEyMjEsOSArMTIyMSw5IEBACiBzdGF0aWMgaW50IHB4YWZiX3NtYXJ0X3RocmVhZCh2b2lkICphcmcpCiB7CiAJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGFyZzsKLQlzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvICppbmY7CisJc3RydWN0IHB4YWZiX21hY2hfaW5mbyAqaW5mID0gZmJpLT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlpZiAoIWZiaSB8fCAhZmJpLT5kZXYtPnBsYXRmb3JtX2RhdGEtPnNtYXJ0X3VwZGF0ZSkgeworCWlmICghaW5mLT5zbWFydF91cGRhdGUpIHsKIAkJcHJfZXJyKCIlczogbm90IHByb3Blcmx5IGluaXRpYWxpemVkLCB0aHJlYWQgdGVybWluYXRlZFxuIiwKIAkJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKaW5kZXggMTBkOGM0Yi4uZDhkZjE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC02ODAsNyArNjgwLDcgQEAKIAkJaWYgKCF2aWFmYl9nYW1tYV90YWJsZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlpZiAoY29weV9mcm9tX3VzZXIodmlhZmJfZ2FtbWFfdGFibGUsIGFyZ3AsCi0JCQkJc2l6ZW9mKHZpYWZiX2dhbW1hX3RhYmxlKSkpIHsKKwkJCQkyNTYgKiBzaXplb2YodTMyKSkpIHsKIAkJCWtmcmVlKHZpYWZiX2dhbW1hX3RhYmxlKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC02OTQsNyArNjk0LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl2aWFmYl9nZXRfZ2FtbWFfdGFibGUodmlhZmJfZ2FtbWFfdGFibGUpOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHZpYWZiX2dhbW1hX3RhYmxlLAotCQkJc2l6ZW9mKHZpYWZiX2dhbW1hX3RhYmxlKSkpIHsKKwkJCTI1NiAqIHNpemVvZih1MzIpKSkgewogCQkJa2ZyZWUodmlhZmJfZ2FtbWFfdGFibGUpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBkOTU4Yjc2Li4wODhmMzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogY29uZmlnIEdFT0RFX1dEVAogCXRyaXN0YXRlICJBTUQgR2VvZGUgQ1M1NTM1L0NTNTUzNiBXYXRjaGRvZyIKLQlkZXBlbmRzIG9uIE1HRU9ERV9MWAorCWRlcGVuZHMgb24gQ1M1NTM1X01GR1BUCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBhIHdhdGNoZG9nIGNhcGFiaWxpdHkgYnVpbHQgaW50byB0aGUKIAkgIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXBzIGZvciB0aGUgQU1EIEdlb2RlIEdYIGFuZCBMWApAQCAtODE1LDE2ICs4MTUsNiBAQAogCSAgdGltZXIgaGFzIGV4cGlyZWQgYW5kIG5vIHByb2Nlc3MgaGFzIHdyaXR0ZW4gdG8gL2Rldi93YXRjaGRvZyBkdXJpbmcKIAkgIHRoYXQgdGltZS4KIAotY29uZmlnIFdEVF9STTlLX0dQSQotCXRyaXN0YXRlICJSTTkwMDAvR1BJIGhhcmR3YXJlIHdhdGNoZG9nIgotCWRlcGVuZHMgb24gQ1BVX1JNOTAwMAotCWhlbHAKLQkgIFdhdGNoZG9nIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBHUEkgaGFyZHdhcmUgZm91bmQgb24KLQkgIFBNQy1TaWVycmEgUk05eHh4IENQVXMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJtOWtfd2R0LgotCiBjb25maWcgU0lCWVRFX1dET0cKIAl0cmlzdGF0ZSAiU2lieXRlIFNvQyBoYXJkd2FyZSB3YXRjaGRvZyIKIAlkZXBlbmRzIG9uIENQVV9TQjEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IDg5YzA0NWQuLjQ3NWM2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMTA5LDcgKzEwOSw2IEBACiBvYmotJChDT05GSUdfSU5EWURPRykgKz0gaW5keWRvZy5vCiBvYmotJChDT05GSUdfV0RUX01UWDEpICs9IG10eC0xX3dkdC5vCiBvYmotJChDT05GSUdfUE5YODMzWF9XRFQpICs9IHBueDgzM3hfd2R0Lm8KLW9iai0kKENPTkZJR19XRFRfUk05S19HUEkpICs9IHJtOWtfd2R0Lm8KIG9iai0kKENPTkZJR19TSUJZVEVfV0RPRykgKz0gc2Jfd2RvZy5vCiBvYmotJChDT05GSUdfQVI3X1dEVCkgKz0gYXI3X3dkdC5vCiBvYmotJChDT05GSUdfVFhYOV9XRFQpICs9IHR4eDl3ZHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYwppbmRleCA5YzY1OTQ0Li45ZDdkMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYwpAQCAtMjQyLDE0ICsyNDIsMTQgQEAKIAl9CiAKIAlyZXMgPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAotCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwkJCXJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKIAlpZiAoIXJlcykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCiAJd2R0LT5iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKLQkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCQkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXdkdC0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSS9PIG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jCmluZGV4IGU4YWU2MzguLjAzNzg0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl3ZHQtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCXdkdC0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVncykpOwogCWlmICghd2R0LT5yZWdzKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBtYXAgSS9PIG1lbW9yeVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKaW5kZXggOWQ3NTIwZi4uODg3MTM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJd2R0X21lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKIAogCWlmICh3ZHRfbWVtID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwppbmRleCA5YWNmMDAxLi4zODI1MmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCkBAIC0xLDYgKzEsNyBAQAotLyogV2F0Y2hkb2cgdGltZXIgZm9yIHRoZSBHZW9kZSBHWC9MWCB3aXRoIHRoZSBDUzU1MzUvQ1M1NTM2IGNvbXBhbmlvbiBjaGlwCisvKiBXYXRjaGRvZyB0aW1lciBmb3IgbWFjaGluZXMgd2l0aCB0aGUgQ1M1NTM1L0NTNTUzNiBjb21wYW5pb24gY2hpcAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlcyBTYWxvbW9uIDxkaWxpbmdlckBjb2xsYWJvcmEuY28udWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE5LDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jczU1MzUuaD4KIAogI2RlZmluZSBHRU9ERVdEVF9IWiA1MDAKICNkZWZpbmUgR0VPREVXRFRfU0NBTEUgNgpAQCAtNDYsMjUgKzQ3LDI1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfZmxhZ3M7Ci1zdGF0aWMgaW50IHdkdF90aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgY3M1NTM1X21mZ3B0X3RpbWVyICp3ZHRfdGltZXI7CiBzdGF0aWMgaW50IHNhZmVfY2xvc2U7CiAKIHN0YXRpYyB2b2lkIGdlb2Rld2R0X3Bpbmcodm9pZCkKIHsKIAkvKiBTdG9wIHRoZSBjb3VudGVyICovCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7CiAKIAkvKiBSZXNldCB0aGUgY291bnRlciAqLwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NPVU5URVIsIDApOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKIAogCS8qIEVuYWJsZSB0aGUgY291bnRlciAqLwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CiB9CiAKIHN0YXRpYyB2b2lkIGdlb2Rld2R0X2Rpc2FibGUodm9pZCkKIHsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7Ci0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCAwKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2VvZGV3ZHRfc2V0X2hlYXJ0YmVhdChpbnQgdmFsKQpAQCAtNzIsMTAgKzczLDEwIEBACiAJaWYgKHZhbCA8IDEgfHwgdmFsID4gR0VPREVXRFRfTUFYX1NFQ09ORFMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfU0VUVVAsIDApOwotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NNUDIsIHZhbCAqIEdFT0RFV0RUX0haKTsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19DT1VOVEVSLCAwKTsKLQlnZW9kZV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgTUZHUFRfU0VUVVBfQ05URU4pOworCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX0NNUDIsIHZhbCAqIEdFT0RFV0RUX0haKTsKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ09VTlRFUiwgMCk7CisJY3M1NTM1X21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLCBNRkdQVF9TRVRVUF9DTlRFTik7CiAKIAl0aW1lb3V0ID0gdmFsOwogCXJldHVybiAwOwpAQCAtMjE1LDI4ICsyMTYsMjUgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2VvZGV3ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWludCByZXQsIHRpbWVyOworCWludCByZXQ7CiAKLQl0aW1lciA9IGdlb2RlX21mZ3B0X2FsbG9jX3RpbWVyKE1GR1BUX1RJTUVSX0FOWSwgTUZHUFRfRE9NQUlOX1dPUktJTkcpOwotCi0JaWYgKHRpbWVyID09IC0xKSB7CisJd2R0X3RpbWVyID0gY3M1NTM1X21mZ3B0X2FsbG9jX3RpbWVyKE1GR1BUX1RJTUVSX0FOWSwgTUZHUFRfRE9NQUlOX1dPUktJTkcpOworCWlmICghd2R0X3RpbWVyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZ2VvZGV3ZHQ6ICBObyB0aW1lcnMgd2VyZSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQl3ZHRfdGltZXIgPSB0aW1lcjsKLQogCS8qIFNldCB1cCB0aGUgdGltZXIgKi8KIAotCWdlb2RlX21mZ3B0X3dyaXRlKHdkdF90aW1lciwgTUZHUFRfUkVHX1NFVFVQLAorCWNzNTUzNV9tZmdwdF93cml0ZSh3ZHRfdGltZXIsIE1GR1BUX1JFR19TRVRVUCwKIAkJCSAgR0VPREVXRFRfU0NBTEUgfCAoMyA8PCA4KSk7CiAKIAkvKiBTZXQgdXAgY29tcGFyYXRvciAyIHRvIHJlc2V0IHdoZW4gdGhlIGV2ZW50IGZpcmVzICovCi0JZ2VvZGVfbWZncHRfdG9nZ2xlX2V2ZW50KHdkdF90aW1lciwgTUZHUFRfQ01QMiwgTUZHUFRfRVZFTlRfUkVTRVQsIDEpOworCWNzNTUzNV9tZmdwdF90b2dnbGVfZXZlbnQod2R0X3RpbWVyLCBNRkdQVF9DTVAyLCBNRkdQVF9FVkVOVF9SRVNFVCwgMSk7CiAKIAkvKiBTZXQgdXAgdGhlIGluaXRpYWwgdGltZW91dCAqLwogCi0JZ2VvZGVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ01QMiwKKwljczU1MzVfbWZncHRfd3JpdGUod2R0X3RpbWVyLCBNRkdQVF9SRUdfQ01QMiwKIAkJdGltZW91dCAqIEdFT0RFV0RUX0haKTsKIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmdlb2Rld2R0X21pc2NkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCmluZGV4IGU0NGZiYjMuLmM4YTNiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqCWRvY3VtZW50IG51bWJlciAzMTY5NzItMDA0LCAzMTY5NzMtMDEyOiA4MjgwMUkgKElDSDkpCiAgKglkb2N1bWVudCBudW1iZXIgMzE5OTczLTAwMiwgMzE5OTc0LTAwMjogODI4MDFKIChJQ0gxMCkKICAqCWRvY3VtZW50IG51bWJlciAzMjIxNjktMDAxLCAzMjIxNzAtMDAxOiA1IFNlcmllcywgMzQwMCBTZXJpZXMgKFBDSCkKKyAqCWRvY3VtZW50IG51bWJlciAzMjAwNjYtMDAzLCAzMjAyNTctMDA4OiBFUDgwNTk3IChJSUNIKQogICovCiAKIC8qCkBAIC0xMDAsNiArMTAxLDcgQEAKIAlUQ09fUENILAkvKiBQQ0ggRGVza3RvcCBGdWxsIEZlYXR1cmVkICovCiAJVENPX1BDSE0sCS8qIFBDSCBNb2JpbGUgRnVsbCBGZWF0dXJlZCAqLwogCVRDT19QQ0hNU0ZGLAkvKiBQQ0ggTW9iaWxlIFNGRiBGdWxsIEZlYXR1cmVkICovCisJVENPX0VQODA1NzksCS8qIEVQODA1NzkgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMTQzLDYgKzE0NSw3IEBACiAJeyJQQ0ggRGVza3RvcCBGdWxsIEZlYXR1cmVkIiwgMn0sCiAJeyJQQ0ggTW9iaWxlIEZ1bGwgRmVhdHVyZWQiLCAyfSwKIAl7IlBDSCBNb2JpbGUgU0ZGIEZ1bGwgRmVhdHVyZWQiLCAyfSwKKwl7IkVQODA1NzkiLCAyfSwKIAl7TlVMTCwgMH0KIH07CiAKQEAgLTIxNCw2ICsyMTcsNyBAQAogCXsgSVRDT19QQ0lfREVWSUNFKDB4M2IwMCwJCQkJVENPX1BDSCl9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4M2IwMSwJCQkJVENPX1BDSE0pfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDNiMGQsCQkJCVRDT19QQ0hNU0ZGKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHg1MDMxLAkJCQlUQ09fRVA4MDU3OSl9LAogCXsgMCwgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpVENPX3dkdF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggODNmYTM0Yi4uYTJkYzA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQotCXdkdC0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJd2R0LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghd2R0LT5iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKaW5kZXggYWNmNTg5ZC4uYTUxZGJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJaWYgKCFyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW12NjR4NjBfd2R0X3JlZ3MgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCW12NjR4NjBfd2R0X3JlZ3MgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAobXY2NHg2MF93ZHRfcmVncyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCmluZGV4IDQyOWVhOTkuLmM2YWFmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKQEAgLTI3Nyw4ICsyNzcsNyBAQAogCQlnb3RvIGVycl9idXN5OwogCX0KIAotCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJCSBwZGV2LT5uYW1lKTsKKwltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKIAlpZiAoIW1lbSkgewogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2J1c3k7CkBAIC0zMDYsNyArMzA1LDcgQEAKIAkJZ290byBlcnJfY2xrOwogCX0KIAotCXdkZXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXdkZXYtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF3ZGV2LT5iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CkBAIC0zNTgsNyArMzU3LDcgQEAKIAlrZnJlZSh3ZGV2KTsKIAogZXJyX2t6YWxsb2M6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCiBlcnJfYnVzeToKIGVycl9nZXRfcmVzb3VyY2U6CkBAIC0zODMsNyArMzgyLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJih3ZGV2LT5vbWFwX3dkdF9taXNjZGV2KSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJY2xrX3B1dCh3ZGV2LT5pY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDRkMjI3YjE1Li40MzBhNTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAl3ZHRfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPm5hbWUpOwogCiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjY2OTU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcm05a193ZHQuYworKysgL2Rldi9udWxsCkBAIC0xLDQxOSArMCwwIEBACi0vKgotICogIFdhdGNoZG9nIGltcGxlbWVudGF0aW9uIGZvciBHUEkgaC93IGZvdW5kIG9uIFBNQy1TaWVycmEgUk05eHh4Ci0gKiAgY2hpcHMuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNCBieSBCYXNsZXIgVmlzaW9uIFRlY2hub2xvZ2llcyBBRwotICogIEF1dGhvcjogVGhvbWFzIEtvZWxsZXIgPHRob21hcy5rb2VsbGVyQGJhc2xlcndlYi5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9ybTlrLW9jZC5oPgotCi0jaW5jbHVkZSA8cm05a193ZHQuaD4KLQotCi0jZGVmaW5lIENMT0NLICAgICAgICAgICAgICAgICAgMTI1MDAwMDAwCi0jZGVmaW5lIE1BWF9USU1FT1VUX1NFQ09ORFMgICAgMzIKLSNkZWZpbmUgQ1BDQ1IgICAgICAgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUgQ1BHSUcxU1IgICAgICAgICAgICAgICAweDAwNDQKLSNkZWZpbmUgQ1BHSUcxRVIgICAgICAgICAgICAgICAweDAwNTQKLQotCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2R0X2dwaV9pcnFoZGwoaW50LCB2b2lkICopOwotc3RhdGljIHZvaWQgd2R0X2dwaV9zdGFydCh2b2lkKTsKLXN0YXRpYyB2b2lkIHdkdF9ncGlfc3RvcCh2b2lkKTsKLXN0YXRpYyB2b2lkIHdkdF9ncGlfc2V0X3RpbWVvdXQodW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgd2R0X2dwaV9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBpbnQgd2R0X2dwaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBzc2l6ZV90IHdkdF9ncGlfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LAotCQkJCQkJCQlsb2ZmX3QgKik7Ci1zdGF0aWMgbG9uZyB3ZHRfZ3BpX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgaW50IHdkdF9ncGlfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLAotCQkJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKLQotCi1zdGF0aWMgY29uc3QgY2hhciB3ZHRfZ3BpX25hbWVbXSA9ICJ3ZHRfZ3BpIjsKLXN0YXRpYyBhdG9taWNfdCBvcGVuY250Owotc3RhdGljIGludCBleHBlY3RfY2xvc2U7Ci1zdGF0aWMgaW50IGxvY2tlZDsKLQotCi0vKiBUaGVzZSBhcmUgc2V0IGZyb20gZGV2aWNlIHJlc291cmNlcyAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqd2RfcmVnczsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgd2RfaXJxLCB3ZF9jdHI7Ci0KLQotLyogTW9kdWxlIGFyZ3VtZW50cyAqLwotc3RhdGljIGludCB0aW1lb3V0ID0gTUFYX1RJTUVPVVRfU0VDT05EUzsKLW1vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlc2V0YWRkciA9IDB4YmZmZGMyMDA7Ci1tb2R1bGVfcGFyYW0ocmVzZXRhZGRyLCB1bG9uZywgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlc2V0YWRkciwgIkFkZHJlc3MgdG8gd3JpdGUgdG8gdG8gZm9yY2UgYSByZXNldCIpOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmbGFnYWRkciA9IDB4YmZmZGMxMDQ7Ci1tb2R1bGVfcGFyYW0oZmxhZ2FkZHIsIHVsb25nLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZmxhZ2FkZHIsICJBZGRyZXNzIHRvIHdyaXRlIHRvIGJvb3QgZmxhZ3MgdG8iKTsKLQotc3RhdGljIGludCBwb3dlcmN5Y2xlOwotbW9kdWxlX3BhcmFtKHBvd2VyY3ljbGUsIGJvb2wsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwb3dlcmN5Y2xlLCAiQ3ljbGUgcG93ZXIgaWYgd2F0Y2hkb2cgZXhwaXJlcyIpOwotCi1zdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Ci1tb2R1bGVfcGFyYW0obm93YXlvdXQsIGJvb2wsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBkaXNhYmxlZCBvbmNlIHN0YXJ0ZWQiKTsKLQotCi0vKiBLZXJuZWwgaW50ZXJmYWNlcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gd2R0X2dwaV9vcGVuLAotCS5yZWxlYXNlCT0gd2R0X2dwaV9yZWxlYXNlLAotCS53cml0ZQkJPSB3ZHRfZ3BpX3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bAk9IHdkdF9ncGlfaW9jdGwsCi19OwotCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9IHsKLQkubWlub3IJCT0gV0FUQ0hET0dfTUlOT1IsCi0JLm5hbWUJCT0gd2R0X2dwaV9uYW1lLAotCS5mb3BzCQk9ICZmb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3ZHRfZ3BpX3NodXRkb3duID0gewotCS5ub3RpZmllcl9jYWxsCT0gd2R0X2dwaV9ub3RpZnksCi19OwotCi0KLS8qIEludGVycnVwdCBoYW5kbGVyICovCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2R0X2dwaV9pcnFoZGwoaW50IGlycSwgdm9pZCAqY3R4dCkKLXsKLQlpZiAoIXVubGlrZWx5KF9fcmF3X3JlYWRsKHdkX3JlZ3MgKyAweDAwMDgpICYgMHgxKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCV9fcmF3X3dyaXRlbCgweDEsIHdkX3JlZ3MgKyAweDAwMDgpOwotCi0KLQlwcmludGsoS0VSTl9DUklUICIlczogd2F0Y2hkb2cgZXhwaXJlZCAtIHJlc2V0dGluZyBzeXN0ZW1cbiIsCi0JCXdkdF9ncGlfbmFtZSk7Ci0KLQkqKHZvbGF0aWxlIGNoYXIgKikgZmxhZ2FkZHIgfD0gMHgwMTsKLQkqKHZvbGF0aWxlIGNoYXIgKikgcmVzZXRhZGRyID0gcG93ZXJjeWNsZSA/IDB4MDEgOiAweDI7Ci0JaW9iKCk7Ci0Jd2hpbGUgKDEpCi0JCWNwdV9yZWxheCgpOwotfQotCi0KLS8qIFdhdGNoZG9nIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgd2R0X2dwaV9zdGFydCh2b2lkKQotewotCXUzMiByZWc7Ci0KLQlsb2NrX3RpdGFuX3JlZ3MoKTsKLQlyZWcgPSB0aXRhbl9yZWFkbChDUEdJRzFFUik7Ci0JdGl0YW5fd3JpdGVsKHJlZyB8ICgweDEwMCA8PCB3ZF9jdHIpLCBDUEdJRzFFUik7Ci0JaW9iKCk7Ci0JdW5sb2NrX3RpdGFuX3JlZ3MoKTsKLX0KLQotc3RhdGljIHZvaWQgd2R0X2dwaV9zdG9wKHZvaWQpCi17Ci0JdTMyIHJlZzsKLQotCWxvY2tfdGl0YW5fcmVncygpOwotCXJlZyA9IHRpdGFuX3JlYWRsKENQQ0NSKSAmIH4oMHhmIDw8ICh3ZF9jdHIgKiA0KSk7Ci0JdGl0YW5fd3JpdGVsKHJlZywgQ1BDQ1IpOwotCXJlZyA9IHRpdGFuX3JlYWRsKENQR0lHMUVSKTsKLQl0aXRhbl93cml0ZWwocmVnICYgfigweDEwMCA8PCB3ZF9jdHIpLCBDUEdJRzFFUik7Ci0JaW9iKCk7Ci0JdW5sb2NrX3RpdGFuX3JlZ3MoKTsKLX0KLQotc3RhdGljIHZvaWQgd2R0X2dwaV9zZXRfdGltZW91dCh1bnNpZ25lZCBpbnQgdG8pCi17Ci0JdTMyIHJlZzsKLQljb25zdCB1MzIgd2R2YWwgPSAodG8gKiBDTE9DSykgJiB+MHgwMDAwMDAwZjsKLQotCWxvY2tfdGl0YW5fcmVncygpOwotCXJlZyA9IHRpdGFuX3JlYWRsKENQQ0NSKSAmIH4oMHhmIDw8ICh3ZF9jdHIgKiA0KSk7Ci0JdGl0YW5fd3JpdGVsKHJlZywgQ1BDQ1IpOwotCXdtYigpOwotCV9fcmF3X3dyaXRlbCh3ZHZhbCwgd2RfcmVncyArIDB4MDAwMCk7Ci0Jd21iKCk7Ci0JdGl0YW5fd3JpdGVsKHJlZyB8ICgweDIgPDwgKHdkX2N0ciAqIDQpKSwgQ1BDQ1IpOwotCXdtYigpOwotCXRpdGFuX3dyaXRlbChyZWcgfCAoMHg1IDw8ICh3ZF9jdHIgKiA0KSksIENQQ0NSKTsKLQlpb2IoKTsKLQl1bmxvY2tfdGl0YW5fcmVncygpOwotfQotCi0KLS8qIC9kZXYvd2F0Y2hkb2cgb3BlcmF0aW9ucyAqLwotc3RhdGljIGludCB3ZHRfZ3BpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50IHJlczsKLQotCWlmICh1bmxpa2VseShhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZvcGVuY250KSA8IDApKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXhwZWN0X2Nsb3NlID0gMDsKLQlpZiAobG9ja2VkKSB7Ci0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCQlmcmVlX2lycSh3ZF9pcnEsICZtaXNjZGV2KTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KLQlyZXMgPSByZXF1ZXN0X2lycSh3ZF9pcnEsIHdkdF9ncGlfaXJxaGRsLCBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCi0JCQkgIHdkdF9ncGlfbmFtZSwgJm1pc2NkZXYpOwotCWlmICh1bmxpa2VseShyZXMpKQotCQlyZXR1cm4gcmVzOwotCi0Jd2R0X2dwaV9zZXRfdGltZW91dCh0aW1lb3V0KTsKLQl3ZHRfZ3BpX3N0YXJ0KCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogd2F0Y2hkb2cgc3RhcnRlZCwgdGltZW91dCA9ICV1IHNlY29uZHNcbiIsCi0JCXdkdF9ncGlfbmFtZSwgdGltZW91dCk7Ci0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwotfQotCi1zdGF0aWMgaW50IHdkdF9ncGlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpZiAobm93YXlvdXQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIHdheSBvdXQgLSB3YXRjaGRvZyBsZWZ0IHJ1bm5pbmdcbiIsCi0JCQl3ZHRfZ3BpX25hbWUpOwotCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCQlsb2NrZWQgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChleHBlY3RfY2xvc2UpIHsKLQkJCXdkdF9ncGlfc3RvcCgpOwotCQkJZnJlZV9pcnEod2RfaXJxLCAmbWlzY2Rldik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogd2F0Y2hkb2cgc3RvcHBlZFxuIiwKLQkJCQkJCQl3ZHRfZ3BpX25hbWUpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IHVuZXhwZWN0ZWQgY2xvc2UoKSAtIgotCQkJCSIgd2F0Y2hkb2cgbGVmdCBydW5uaW5nXG4iLAotCQkJCXdkdF9ncGlfbmFtZSk7Ci0JCQl3ZHRfZ3BpX3NldF90aW1lb3V0KHRpbWVvdXQpOwotCQkJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKLQkJCWxvY2tlZCA9IDE7Ci0JCX0KLQl9Ci0KLQlhdG9taWNfaW5jKCZvcGVuY250KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3Qgd2R0X2dwaV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmQsIHNpemVfdCBzLAotCQkJCQkJCQlsb2ZmX3QgKm8pCi17Ci0JY2hhciB2YWw7Ci0KLQl3ZHRfZ3BpX3NldF90aW1lb3V0KHRpbWVvdXQpOwotCWV4cGVjdF9jbG9zZSA9IChzID4gMCkgJiYgIWdldF91c2VyKHZhbCwgZCkgJiYgKHZhbCA9PSAnVicpOwotCXJldHVybiBzID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBsb25nIHdkdF9ncGlfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWxvbmcgcmVzID0gLUVOT1RUWTsKLQljb25zdCBsb25nIHNpemUgPSBfSU9DX1NJWkUoY21kKTsKLQlpbnQgc3RhdDsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gd2RpbmZvID0gewotCQkuaWRlbnRpdHkgICAgICAgICAgICAgICA9ICJSTTl4eHgvR1BJIHdhdGNoZG9nIiwKLQkJLmZpcm13YXJlX3ZlcnNpb24gICAgICAgPSAwLAotCQkub3B0aW9ucyAgICAgICAgICAgICAgICA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HCi0JfTsKLQotCWlmICh1bmxpa2VseShfSU9DX1RZUEUoY21kKSAhPSBXQVRDSERPR19JT0NUTF9CQVNFKSkKLQkJcmV0dXJuIC1FTk9UVFk7Ci0KLQlpZiAoKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpCi0JICAgICYmICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBhcmcsIHNpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICgoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpCi0JICAgICYmICFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGFyZywgc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXhwZWN0X2Nsb3NlID0gMDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBXRElPQ19HRVRTVVBQT1JUOgotCQl3ZGluZm8ub3B0aW9ucyA9IG5vd2F5b3V0ID8KLQkJCVdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HIDoKLQkJCVdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HIHwKLQkJCVdESU9GX01BR0lDQ0xPU0U7Ci0JCXJlcyA9IF9fY29weV90b191c2VyKGFyZ3AsICZ3ZGluZm8sIHNpemUpID8gIC1FRkFVTFQgOiBzaXplOwotCQlicmVhazsKLQotCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgotCQlicmVhazsKLQotCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKLQkJc3RhdCA9ICgqKHZvbGF0aWxlIGNoYXIgKikgZmxhZ2FkZHIgJiAweDAxKQotCQkJPyBXRElPRl9DQVJEUkVTRVQgOiAwOwotCQlyZXMgPSBfX2NvcHlfdG9fdXNlcihhcmdwLCAmc3RhdCwgc2l6ZSkgPwotCQkJLUVGQVVMVCA6IHNpemU7Ci0JCWJyZWFrOwotCi0JY2FzZSBXRElPQ19TRVRPUFRJT05TOgotCQlicmVhazsKLQotCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQl3ZHRfZ3BpX3NldF90aW1lb3V0KHRpbWVvdXQpOwotCQlyZXMgPSBzaXplOwotCQlicmVhazsKLQotCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKLQkJewotCQkJaW50IHZhbDsKLQkJCWlmICh1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZ2YWwsIGFyZ3AsIHNpemUpKSkgewotCQkJCXJlcyA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWlmICh2YWwgPiBNQVhfVElNRU9VVF9TRUNPTkRTKQotCQkJCXZhbCA9IE1BWF9USU1FT1VUX1NFQ09ORFM7Ci0JCQl0aW1lb3V0ID0gdmFsOwotCQkJd2R0X2dwaV9zZXRfdGltZW91dCh2YWwpOwotCQkJcmVzID0gc2l6ZTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0aW1lb3V0IHNldCB0byAldSBzZWNvbmRzXG4iLAotCQkJCXdkdF9ncGlfbmFtZSwgdGltZW91dCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFdESU9DX0dFVFRJTUVPVVQ6Ci0JCXJlcyA9IF9fY29weV90b191c2VyKGFyZ3AsICZ0aW1lb3V0LCBzaXplKSA/Ci0JCQktRUZBVUxUIDogc2l6ZTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQotCi0vKiBTaHV0ZG93biBub3RpZmllciAqLwotc3RhdGljIGludCB3ZHRfZ3BpX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKLQkJCSAgdm9pZCAqdW51c2VkKQotewotCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCi0JCXdkdF9ncGlfc3RvcCgpOwotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi0KLS8qIEluaXQgJiBleGl0IHByb2NlZHVyZXMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKndkdF9ncGlfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkdiwKLQkJCQkJY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JY2hhciBidWZbODBdOwotCWlmIChzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXNfMCIsIG5hbWUpID49IHNpemVvZihidWYpKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZHYsIHR5cGUsIGJ1Zik7Ci19Ci0KLS8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19kZXZpbml0ICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkdikKLXsKLQlpbnQgcmVzOwotCWNvbnN0IHN0cnVjdCByZXNvdXJjZQotCQkqIGNvbnN0IHJyID0gd2R0X2dwaV9nZXRfcmVzb3VyY2UocGR2LCBXRFRfUkVTT1VSQ0VfUkVHUywKLQkJCQkJCSAgSU9SRVNPVVJDRV9NRU0pLAotCQkqIGNvbnN0IHJpID0gd2R0X2dwaV9nZXRfcmVzb3VyY2UocGR2LCBXRFRfUkVTT1VSQ0VfSVJRLAotCQkJCQkJICBJT1JFU09VUkNFX0lSUSksCi0JCSogY29uc3QgcmMgPSB3ZHRfZ3BpX2dldF9yZXNvdXJjZShwZHYsIFdEVF9SRVNPVVJDRV9DT1VOVEVSLAotCQkJCQkJICAwKTsKLQotCWlmICh1bmxpa2VseSghcnIgfHwgIXJpIHx8ICFyYykpCi0JCXJldHVybiAtRU5YSU87Ci0KLQl3ZF9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHJyLT5zdGFydCwgcnItPmVuZCArIDEgLSByci0+c3RhcnQpOwotCWlmICh1bmxpa2VseSghd2RfcmVncykpCi0JCXJldHVybiAtRU5PTUVNOwotCXdkX2lycSA9IHJpLT5zdGFydDsKLQl3ZF9jdHIgPSByYy0+c3RhcnQ7Ci0JcmVzID0gbWlzY19yZWdpc3RlcigmbWlzY2Rldik7Ci0JaWYgKHJlcykKLQkJaW91bm1hcCh3ZF9yZWdzKTsKLQllbHNlCi0JCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X2dwaV9zaHV0ZG93bik7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCWludCByZXM7Ci0KLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X2dwaV9zaHV0ZG93bik7Ci0JcmVzID0gbWlzY19kZXJlZ2lzdGVyKCZtaXNjZGV2KTsKLQlpb3VubWFwKHdkX3JlZ3MpOwotCXdkX3JlZ3MgPSBOVUxMOwotCXJldHVybiByZXM7Ci19Ci0KLQotLyogRGV2aWNlIGRyaXZlciBpbml0ICYgZXhpdCAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2d0X2dwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJCT0gd2R0X2dwaV9uYW1lLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gd2R0X2dwaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlhdG9taWNfc2V0KCZvcGVuY250LCAxKTsKLQlpZiAodGltZW91dCA+IE1BWF9USU1FT1VUX1NFQ09ORFMpCi0JCXRpbWVvdXQgPSBNQVhfVElNRU9VVF9TRUNPTkRTOwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHdkdF9ncGlfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh3ZHRfZ3BpX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KHdkdF9ncGlfY2xlYW51cF9tb2R1bGUpOwotCi1NT0RVTEVfQVVUSE9SKCJUaG9tYXMgS29lbGxlciA8dGhvbWFzLmtvZWxsZXJAYmFzbGVyd2ViLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQmFzbGVyIGVYY2l0ZSB3YXRjaGRvZyBkcml2ZXIgZm9yIGdwaSBkZXZpY2VzIik7Ci1NT0RVTEVfVkVSU0lPTigiMC4xIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwppbmRleCA4NWI5M2UxLi44NzYwYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCkBAIC00MjEsNyArNDIxLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jc2l6ZSA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMTsKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAJaWYgKHdkdF9tZW0gPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCmluZGV4IDZhZGFiNzcuLmQ2MzU1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHh4OXdkdC5jCkBAIC0yMTQsMTIgKzIxNCwxMCBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykKIAkJZ290byBleGl0X2J1c3k7Ci0JaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmZGV2LT5kZXYsCi0JCQkJICAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJmRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCiAJCQkJICAgICAidHh4OXdkdCIpKQogCQlnb3RvIGV4aXRfYnVzeTsKLQl0eHg5d2R0X3JlZyA9IGRldm1faW9yZW1hcCgmZGV2LT5kZXYsCi0JCQkJICAgcmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJdHh4OXdkdF9yZWcgPSBkZXZtX2lvcmVtYXAoJmRldi0+ZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghdHh4OXdkdF9yZWcpCiAJCWdvdG8gZXhpdF9idXN5OwogCmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDZkNWMzYWIuLjFjMDBkMDUgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC02OSw3ICs2OSw4IEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX01ZUklfU0JVUykgKz0gbXlyaWNvbS9sYW5haS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfUENNQ0lBX1BDTkVUKSArPSBjaXMvTEEtUENNLmNpcyBjaXMvUENNTE0yOC5jaXMgXAogCQkJCSAgICAgY2lzL0RQODM5MDMuY2lzIGNpcy9ORTJLLmNpcyBcCi0JCQkJICAgICBjaXMvdGFtYXJhY2suY2lzIGNpcy9QRS0yMDAuY2lzCisJCQkJICAgICBjaXMvdGFtYXJhY2suY2lzIGNpcy9QRS0yMDAuY2lzIFwKKwkJCQkgICAgIGNpcy9QRTUyMC5jaXMKIGZ3LXNoaXBwZWQtJChDT05GSUdfUENNQ0lBXzNDNTg5KSArPSBjaXMvM0NYRU01NTYuY2lzCiBmdy1zaGlwcGVkLSQoQ09ORklHX1BDTUNJQV8zQzU3NCkgKz0gY2lzLzNDQ0ZFTTU1Ni5jaXMKIGZ3LXNoaXBwZWQtJChDT05GSUdfU0VSSUFMXzgyNTBfQ1MpICs9IGNpcy9NVDU2MzRaTFguY2lzIGNpcy9SUy1DT00tMlAuY2lzIFwKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCAzNGI1ZDBhLi5hYzE3NGZlIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC02MDEsNiArNjAxLDcgQEAKICAgICAgIGNpcy9ORTJLLmNpcwogICAgICAgY2lzL3RhbWFyYWNrLmNpcwogICAgICAgY2lzL1BFLTIwMC5jaXMKKyAgICAgIGNpcy9QRTUyMC5jaXMKIAogTGljZW5jZTogR1BMCiAKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2Npcy9QRTUyMC5jaXMuaWhleCBiL2Zpcm13YXJlL2Npcy9QRTUyMC5jaXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E3NDViCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY2lzL1BFNTIwLmNpcy5paGV4CkBAIC0wLDAgKzEsOSBAQAorOjEwMDAwMDAwMDEwMzAwMDBGRjE1MjMwNDAxNEI1NDQ5MDA1MDQ1MzVGRQorOjEwMDAxMDAwMzIzMDIwNTA0QzU1NTMwMDUwNDM0RDQzNDk0MTIwNDUwOAorOjEwMDAyMDAwNzQ2ODY1NzI2RTY1NzQwMDAwRkYyMDA0NjEwMTEwMDA0MQorOjEwMDAzMDAwMjEwMjA2MDAxQTA1MDEwMUQwMEYwQjFCMDlDMTAxMTk4RAorOjBBMDA0MDAwMDE1NTY1MzBGRkZGMTQwMEZGMDBCQQorOjAwMDAwMDAxRkYKKyMKKyMgUmVwbGFjZW1lbnQgQ0lTIGZvciBQRTUyMCBldGhlcm5ldCBjYXJkCisjCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBmOGZjY2FhLi42NGQ0NGVmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTYsMTAgKzYsNiBAQAogCiBpZiBCTE9DSwogCi1jb25maWcgRlNfSk9VUk5BTF9JTkZPCi0JYm9vbAotCWRlZmF1bHQgbgotCiBzb3VyY2UgImZzL2V4dDIvS2NvbmZpZyIKIHNvdXJjZSAiZnMvZXh0My9LY29uZmlnIgogc291cmNlICJmcy9leHQ0L0tjb25maWciCmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCAyYzk5NDU5Li45ZjBiZjEzIDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTEyMSwxMyArMTIxLDEzIEBACiAJZF9pbnN0YW50aWF0ZShwYXRoLmRlbnRyeSwgYW5vbl9pbm9kZV9pbm9kZSk7CiAKIAllcnJvciA9IC1FTkZJTEU7Ci0JZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgZm9wcyk7CisJZmlsZSA9IGFsbG9jX2ZpbGUoJnBhdGgsIE9QRU5fRk1PREUoZmxhZ3MpLCBmb3BzKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gZXJyX2RwdXQ7CiAJZmlsZS0+Zl9tYXBwaW5nID0gYW5vbl9pbm9kZV9pbm9kZS0+aV9tYXBwaW5nOwogCiAJZmlsZS0+Zl9wb3MgPSAwOwotCWZpbGUtPmZfZmxhZ3MgPSBPX1JEV1IgfCAoZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlmaWxlLT5mX2ZsYWdzID0gZmxhZ3MgJiAoT19BQ0NNT0RFIHwgT19OT05CTE9DSyk7CiAJZmlsZS0+Zl92ZXJzaW9uID0gMDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfYW91dC5jIGIvZnMvYmluZm10X2FvdXQuYwppbmRleCBiNjM5ZGNmLi4zNDZiNjk0IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfYW91dC5jCisrKyBiL2ZzL2JpbmZtdF9hb3V0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIGludCBsb2FkX2FvdXRfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIHN0YXRpYyBpbnQgbG9hZF9hb3V0X2xpYnJhcnkoc3RydWN0IGZpbGUqKTsKLXN0YXRpYyBpbnQgYW91dF9jb3JlX2R1bXAobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGxpbWl0KTsKK3N0YXRpYyBpbnQgYW91dF9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAKIHN0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IGFvdXRfZm9ybWF0ID0gewogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCkBAIC04OSw4ICs4OSw5IEBACiAgKiBkdW1waW5nIG9mIHRoZSBwcm9jZXNzIHJlc3VsdHMgaW4gYW5vdGhlciBlcnJvci4uCiAgKi8KIAotc3RhdGljIGludCBhb3V0X2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGltaXQpCitzdGF0aWMgaW50IGFvdXRfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiB7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBjcHJtLT5maWxlOwogCW1tX3NlZ21lbnRfdCBmczsKIAlpbnQgaGFzX2R1bXBlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBkdW1wX3N0YXJ0LCBkdW1wX3NpemU7CkBAIC0xMDgsMTYgKzEwOSwxNiBAQAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0RVTVBDT1JFOwogICAgICAgIAlzdHJuY3B5KGR1bXAudV9jb21tLCBjdXJyZW50LT5jb21tLCBzaXplb2YoZHVtcC51X2NvbW0pKTsKIAlkdW1wLnVfYXIwID0gb2Zmc2V0b2Yoc3RydWN0IHVzZXIsIHJlZ3MpOwotCWR1bXAuc2lnbmFsID0gc2lnbnI7Ci0JYW91dF9kdW1wX3RocmVhZChyZWdzLCAmZHVtcCk7CisJZHVtcC5zaWduYWwgPSBjcHJtLT5zaWducjsKKwlhb3V0X2R1bXBfdGhyZWFkKGNwcm0tPnJlZ3MsICZkdW1wKTsKIAogLyogSWYgdGhlIHNpemUgb2YgdGhlIGR1bXAgZmlsZSBleGNlZWRzIHRoZSBybGltaXQsIHRoZW4gc2VlIHdoYXQgd291bGQgaGFwcGVuCiAgICBpZiB3ZSB3cm90ZSB0aGUgc3RhY2ssIGJ1dCBub3QgdGhlIGRhdGEgYXJlYS4gICovCi0JaWYgKChkdW1wLnVfZHNpemUgKyBkdW1wLnVfc3NpemUrMSkgKiBQQUdFX1NJWkUgPiBsaW1pdCkKKwlpZiAoKGR1bXAudV9kc2l6ZSArIGR1bXAudV9zc2l6ZSsxKSAqIFBBR0VfU0laRSA+IGNwcm0tPmxpbWl0KQogCQlkdW1wLnVfZHNpemUgPSAwOwogCiAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byB3cml0ZSB0aGUgc3RhY2sgYW5kIGRhdGEgYXJlYXMuICovCi0JaWYgKChkdW1wLnVfc3NpemUgKyAxKSAqIFBBR0VfU0laRSA+IGxpbWl0KQorCWlmICgoZHVtcC51X3NzaXplICsgMSkgKiBQQUdFX1NJWkUgPiBjcHJtLT5saW1pdCkKIAkJZHVtcC51X3NzaXplID0gMDsKIAogLyogbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhdmUgYSBkYXRhIGFuZCBzdGFjayBhcmVhIHRvIGR1bXAgKi8KZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCA5N2I2ZTllLi5lZGQ5MGM0IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC00NSw3ICs0NSw3IEBACiAgKiBkb24ndCBldmVuIHRyeS4KICAqLwogI2lmZGVmIENPTkZJR19FTEZfQ09SRQotc3RhdGljIGludCBlbGZfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBsaW1pdCk7CitzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAjZWxzZQogI2RlZmluZSBlbGZfY29yZV9kdW1wCU5VTEwKICNlbmRpZgpAQCAtMTI3Miw4ICsxMjcyLDkgQEAKIH0KICN1bmRlZiBEVU1QX1dSSVRFCiAKLSNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJXAotCWlmICgoc2l6ZSArPSAobnIpKSA+IGxpbWl0IHx8ICFkdW1wX3dyaXRlKGZpbGUsIChhZGRyKSwgKG5yKSkpIFwKKyNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJCQkJXAorCWlmICgoc2l6ZSArPSAobnIpKSA+IGNwcm0tPmxpbWl0IHx8CQlcCisJICAgICFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIChhZGRyKSwgKG5yKSkpCVwKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKIHN0YXRpYyB2b2lkIGZpbGxfZWxmX2hlYWRlcihzdHJ1Y3QgZWxmaGRyICplbGYsIGludCBzZWdzLApAQCAtMTkwMSw3ICsxOTAyLDcgQEAKICAqIGFuZCB0aGVuIHRoZXkgYXJlIGFjdHVhbGx5IHdyaXR0ZW4gb3V0LiAgSWYgd2UgcnVuIG91dCBvZiBjb3JlIGxpbWl0CiAgKiB3ZSBqdXN0IHRydW5jYXRlLgogICovCi1zdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGxpbWl0KQorc3RhdGljIGludCBlbGZfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiB7CiAJaW50IGhhc19kdW1wZWQgPSAwOwogCW1tX3NlZ21lbnRfdCBmczsKQEAgLTE5NDcsNyArMTk0OCw3IEBACiAJICogbm90ZXMuICBUaGlzIGFsc28gc2V0cyB1cCB0aGUgZmlsZSBoZWFkZXIuCiAJICovCiAJaWYgKCFmaWxsX25vdGVfaW5mbyhlbGYsIHNlZ3MgKyAxLCAvKiBpbmNsdWRpbmcgbm90ZXMgc2VjdGlvbiAqLwotCQkJICAgICZpbmZvLCBzaWduciwgcmVncykpCisJCQkgICAgJmluZm8sIGNwcm0tPnNpZ25yLCBjcHJtLT5yZWdzKSkKIAkJZ290byBjbGVhbnVwOwogCiAJaGFzX2R1bXBlZCA9IDE7CkBAIC0yMDA5LDE0ICsyMDEwLDE0IEBACiAjZW5kaWYKIAogIAkvKiB3cml0ZSBvdXQgdGhlIG5vdGVzIHNlY3Rpb24gKi8KLQlpZiAoIXdyaXRlX25vdGVfaW5mbygmaW5mbywgZmlsZSwgJmZvZmZzZXQpKQorCWlmICghd3JpdGVfbm90ZV9pbmZvKCZpbmZvLCBjcHJtLT5maWxlLCAmZm9mZnNldCkpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCi0JaWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShmaWxlLCAmZm9mZnNldCkpCisJaWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtLT5maWxlLCAmZm9mZnNldCkpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJLyogQWxpZ24gdG8gcGFnZSAqLwotCWlmICghZHVtcF9zZWVrKGZpbGUsIGRhdGFvZmYgLSBmb2Zmc2V0KSkKKwlpZiAoIWR1bXBfc2VlayhjcHJtLT5maWxlLCBkYXRhb2ZmIC0gZm9mZnNldCkpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJZm9yICh2bWEgPSBmaXJzdF92bWEoY3VycmVudCwgZ2F0ZV92bWEpOyB2bWEgIT0gTlVMTDsKQEAgLTIwMzMsMTIgKzIwMzQsMTMgQEAKIAkJCXBhZ2UgPSBnZXRfZHVtcF9wYWdlKGFkZHIpOwogCQkJaWYgKHBhZ2UpIHsKIAkJCQl2b2lkICprYWRkciA9IGttYXAocGFnZSk7Ci0JCQkJc3RvcCA9ICgoc2l6ZSArPSBQQUdFX1NJWkUpID4gbGltaXQpIHx8Ci0JCQkJCSFkdW1wX3dyaXRlKGZpbGUsIGthZGRyLCBQQUdFX1NJWkUpOworCQkJCXN0b3AgPSAoKHNpemUgKz0gUEFHRV9TSVpFKSA+IGNwcm0tPmxpbWl0KSB8fAorCQkJCQkhZHVtcF93cml0ZShjcHJtLT5maWxlLCBrYWRkciwKKwkJCQkJCSAgICBQQUdFX1NJWkUpOwogCQkJCWt1bm1hcChwYWdlKTsKIAkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCQl9IGVsc2UKLQkJCQlzdG9wID0gIWR1bXBfc2VlayhmaWxlLCBQQUdFX1NJWkUpOworCQkJCXN0b3AgPSAhZHVtcF9zZWVrKGNwcm0tPmZpbGUsIFBBR0VfU0laRSk7CiAJCQlpZiAoc3RvcCkKIAkJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IDdiMDU1MzguLmM1N2Q5Y2UgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCQkJICAgICBzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgbW1fc3RydWN0ICopOwogCiAjaWZkZWYgQ09ORklHX0VMRl9DT1JFCi1zdGF0aWMgaW50IGVsZl9mZHBpY19jb3JlX2R1bXAobG9uZywgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyBsaW1pdCk7CitzdGF0aWMgaW50IGVsZl9mZHBpY19jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgZWxmX2ZkcGljX2Zvcm1hdCA9IHsKQEAgLTE3MSw2ICsxNzEsOSBAQAogI2lmZGVmIEVMRl9GRFBJQ19QTEFUX0lOSVQKIAl1bnNpZ25lZCBsb25nIGR5bmFkZHI7CiAjZW5kaWYKKyNpZm5kZWYgQ09ORklHX01NVQorCXVuc2lnbmVkIGxvbmcgc3RhY2tfcHJvdDsKKyNlbmRpZgogCXN0cnVjdCBmaWxlICppbnRlcnByZXRlciA9IE5VTEw7IC8qIHRvIHNodXQgZ2NjIHVwICovCiAJY2hhciAqaW50ZXJwcmV0ZXJfbmFtZSA9IE5VTEw7CiAJaW50IGV4ZWN1dGFibGVfc3RhY2s7CkBAIC0zMTYsNiArMzE5LDggQEAKIAkgKiBkZWZ1bmN0LCBkZWNlYXNlZCwgZXRjLiBhZnRlciB0aGlzIHBvaW50IHdlIGhhdmUgdG8gZXhpdCB2aWEKIAkgKiBlcnJvcl9raWxsICovCiAJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF9GRFBJQyk7CisJaWYgKGVsZl9yZWFkX2ltcGxpZXNfZXhlYygmZXhlY19wYXJhbXMuaGRyLCBleGVjdXRhYmxlX3N0YWNrKSkKKwkJY3VycmVudC0+cGVyc29uYWxpdHkgfD0gUkVBRF9JTVBMSUVTX0VYRUM7CiAJc2V0X2JpbmZtdCgmZWxmX2ZkcGljX2Zvcm1hdCk7CiAKIAljdXJyZW50LT5tbS0+c3RhcnRfY29kZSA9IDA7CkBAIC0zNzcsOSArMzgyLDEzIEBACiAJaWYgKHN0YWNrX3NpemUgPCBQQUdFX1NJWkUgKiAyKQogCQlzdGFja19zaXplID0gUEFHRV9TSVpFICogMjsKIAorCXN0YWNrX3Byb3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOworCWlmIChleGVjdXRhYmxlX3N0YWNrID09IEVYU1RBQ0tfRU5BQkxFX1ggfHwKKwkgICAgKGV4ZWN1dGFibGVfc3RhY2sgPT0gRVhTVEFDS19ERUZBVUxUICYmIFZNX1NUQUNLX0ZMQUdTICYgVk1fRVhFQykpCisJCXN0YWNrX3Byb3QgfD0gUFJPVF9FWEVDOworCiAJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQljdXJyZW50LT5tbS0+c3RhcnRfYnJrID0gZG9fbW1hcChOVUxMLCAwLCBzdGFja19zaXplLAotCQkJCQkgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwljdXJyZW50LT5tbS0+c3RhcnRfYnJrID0gZG9fbW1hcChOVUxMLCAwLCBzdGFja19zaXplLCBzdGFja19wcm90LAogCQkJCQkgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwKIAkJCQkJIE1BUF9VTklOSVRJQUxJWkVEIHwgTUFQX0dST1dTRE9XTiwKIAkJCQkJIDApOwpAQCAtMTMyNiw4ICsxMzM1LDkgQEAKICN1bmRlZiBEVU1QX1dSSVRFCiAjdW5kZWYgRFVNUF9TRUVLCiAKLSNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJXAotCWlmICgoc2l6ZSArPSAobnIpKSA+IGxpbWl0IHx8ICFkdW1wX3dyaXRlKGZpbGUsIChhZGRyKSwgKG5yKSkpIFwKKyNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJCQkJXAorCWlmICgoc2l6ZSArPSAobnIpKSA+IGNwcm0tPmxpbWl0IHx8CQlcCisJICAgICFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIChhZGRyKSwgKG5yKSkpCVwKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX2VsZl9mZHBpY19oZWFkZXIoc3RydWN0IGVsZmhkciAqZWxmLCBpbnQgc2VncykKQEAgLTE1ODIsOCArMTU5Miw3IEBACiAgKiBhbmQgdGhlbiB0aGV5IGFyZSBhY3R1YWxseSB3cml0dGVuIG91dC4gIElmIHdlIHJ1biBvdXQgb2YgY29yZSBsaW1pdAogICogd2UganVzdCB0cnVuY2F0ZS4KICAqLwotc3RhdGljIGludCBlbGZfZmRwaWNfY29yZV9kdW1wKGxvbmcgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGxpbWl0KQorc3RhdGljIGludCBlbGZfZmRwaWNfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiB7CiAjZGVmaW5lCU5VTV9OT1RFUwk2CiAJaW50IGhhc19kdW1wZWQgPSAwOwpAQCAtMTY0Miw3ICsxNjUxLDcgQEAKIAkJZ290byBjbGVhbnVwOwogI2VuZGlmCiAKLQlpZiAoc2lnbnIpIHsKKwlpZiAoY3BybS0+c2lnbnIpIHsKIAkJc3RydWN0IGNvcmVfdGhyZWFkICpjdDsKIAkJc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzICp0bXA7CiAKQEAgLTE2NjEsMTQgKzE2NzAsMTQgQEAKIAkJCWludCBzejsKIAogCQkJdG1wID0gbGlzdF9lbnRyeSh0LCBzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMsIGxpc3QpOwotCQkJc3ogPSBlbGZfZHVtcF90aHJlYWRfc3RhdHVzKHNpZ25yLCB0bXApOworCQkJc3ogPSBlbGZfZHVtcF90aHJlYWRfc3RhdHVzKGNwcm0tPnNpZ25yLCB0bXApOwogCQkJdGhyZWFkX3N0YXR1c19zaXplICs9IHN6OwogCQl9CiAJfQogCiAJLyogbm93IGNvbGxlY3QgdGhlIGR1bXAgZm9yIHRoZSBjdXJyZW50ICovCi0JZmlsbF9wcnN0YXR1cyhwcnN0YXR1cywgY3VycmVudCwgc2lnbnIpOwotCWVsZl9jb3JlX2NvcHlfcmVncygmcHJzdGF0dXMtPnByX3JlZywgcmVncyk7CisJZmlsbF9wcnN0YXR1cyhwcnN0YXR1cywgY3VycmVudCwgY3BybS0+c2lnbnIpOworCWVsZl9jb3JlX2NvcHlfcmVncygmcHJzdGF0dXMtPnByX3JlZywgY3BybS0+cmVncyk7CiAKIAlzZWdzID0gY3VycmVudC0+bW0tPm1hcF9jb3VudDsKICNpZmRlZiBFTEZfQ09SRV9FWFRSQV9QSERSUwpAQCAtMTcwMyw3ICsxNzEyLDcgQEAKIAogICAJLyogVHJ5IHRvIGR1bXAgdGhlIEZQVS4gKi8KIAlpZiAoKHByc3RhdHVzLT5wcl9mcHZhbGlkID0KLQkgICAgIGVsZl9jb3JlX2NvcHlfdGFza19mcHJlZ3MoY3VycmVudCwgcmVncywgZnB1KSkpCisJICAgICBlbGZfY29yZV9jb3B5X3Rhc2tfZnByZWdzKGN1cnJlbnQsIGNwcm0tPnJlZ3MsIGZwdSkpKQogCQlmaWxsX25vdGUobm90ZXMgKyBudW1ub3RlKyssCiAJCQkgICJDT1JFIiwgTlRfUFJGUFJFRywgc2l6ZW9mKCpmcHUpLCBmcHUpOwogI2lmZGVmIEVMRl9DT1JFX0NPUFlfWEZQUkVHUwpAQCAtMTc3NCw3ICsxNzgzLDcgQEAKIAogIAkvKiB3cml0ZSBvdXQgdGhlIG5vdGVzIHNlY3Rpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtbm90ZTsgaSsrKQotCQlpZiAoIXdyaXRlbm90ZShub3RlcyArIGksIGZpbGUpKQorCQlpZiAoIXdyaXRlbm90ZShub3RlcyArIGksIGNwcm0tPmZpbGUpKQogCQkJZ290byBlbmRfY29yZWR1bXA7CiAKIAkvKiB3cml0ZSBvdXQgdGhlIHRocmVhZCBzdGF0dXMgbm90ZXMgc2VjdGlvbiAqLwpAQCAtMTc4MywyNSArMTc5MiwyNiBAQAogCQkJCWxpc3RfZW50cnkodCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgdG1wLT5udW1fbm90ZXM7IGkrKykKLQkJCWlmICghd3JpdGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBmaWxlKSkKKwkJCWlmICghd3JpdGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBjcHJtLT5maWxlKSkKIAkJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAl9CiAKLQlpZiAoIWR1bXBfc2VlayhmaWxlLCBkYXRhb2ZmKSkKKwlpZiAoIWR1bXBfc2VlayhjcHJtLT5maWxlLCBkYXRhb2ZmKSkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKLQlpZiAoZWxmX2ZkcGljX2R1bXBfc2VnbWVudHMoZmlsZSwgJnNpemUsICZsaW1pdCwgbW1fZmxhZ3MpIDwgMCkKKwlpZiAoZWxmX2ZkcGljX2R1bXBfc2VnbWVudHMoY3BybS0+ZmlsZSwgJnNpemUsICZjcHJtLT5saW1pdCwKKwkJCQkgICAgbW1fZmxhZ3MpIDwgMCkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKICNpZmRlZiBFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBCiAJRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQTsKICNlbmRpZgogCi0JaWYgKGZpbGUtPmZfcG9zICE9IG9mZnNldCkgeworCWlmIChjcHJtLT5maWxlLT5mX3BvcyAhPSBvZmZzZXQpIHsKIAkJLyogU2FuaXR5IGNoZWNrICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJlbGZfY29yZV9kdW1wOiBmaWxlLT5mX3BvcyAoJWxsZCkgIT0gb2Zmc2V0ICglbGxkKVxuIiwKLQkJICAgICAgIGZpbGUtPmZfcG9zLCBvZmZzZXQpOworCQkgICAgICAgY3BybS0+ZmlsZS0+Zl9wb3MsIG9mZnNldCk7CiAJfQogCiBlbmRfY29yZWR1bXA6CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZmxhdC5jIGIvZnMvYmluZm10X2ZsYXQuYwppbmRleCBhMjc5NjY1Li5kNGEwMGVhIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZmxhdC5jCisrKyBiL2ZzL2JpbmZtdF9mbGF0LmMKQEAgLTg3LDcgKzg3LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwotc3RhdGljIGludCBmbGF0X2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGltaXQpOworc3RhdGljIGludCBmbGF0X2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKIAogc3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgZmxhdF9mb3JtYXQgPSB7CiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKQEAgLTEwMiwxMCArMTAyLDEwIEBACiAgKiBDdXJyZW50bHkgb25seSBhIHN0dWItZnVuY3Rpb24uCiAgKi8KIAotc3RhdGljIGludCBmbGF0X2NvcmVfZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGltaXQpCitzdGF0aWMgaW50IGZsYXRfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiB7CiAJcHJpbnRrKCJQcm9jZXNzICVzOiVkIHJlY2VpdmVkIHNpZ25yICVkIGFuZCBzaG91bGQgaGF2ZSBjb3JlIGR1bXBlZFxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKGludCkgc2lnbnIpOworCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAoaW50KSBjcHJtLT5zaWducik7CiAJcmV0dXJuKDEpOwogfQogCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfc29tLmMgYi9mcy9iaW5mbXRfc29tLmMKaW5kZXggZWZmNzRiOS4uMmE5YjUzMyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X3NvbS5jCisrKyBiL2ZzL2JpbmZtdF9zb20uYwpAQCAtNDMsNyArNDMsNyBAQAogICogZG9uJ3QgZXZlbiB0cnkuCiAgKi8KICNpZiAwCi1zdGF0aWMgaW50IHNvbV9jb3JlX2R1bXAobG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbGltaXQpOworc3RhdGljIGludCBzb21fY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwogI2Vsc2UKICNkZWZpbmUgc29tX2NvcmVfZHVtcAlOVUxMCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL0tjb25maWcgYi9mcy9idHJmcy9LY29uZmlnCmluZGV4IDQwMmFmZTAuLjdiYjNjMDIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL0tjb25maWcKKysrIGIvZnMvYnRyZnMvS2NvbmZpZwpAQCAtNCw3ICs0LDYgQEAKIAlzZWxlY3QgTElCQ1JDMzJDCiAJc2VsZWN0IFpMSUJfSU5GTEFURQogCXNlbGVjdCBaTElCX0RFRkxBVEUKLQlzZWxlY3QgRlNfSk9VUk5BTF9JTkZPCiAJaGVscAogCSAgQnRyZnMgaXMgYSBuZXcgZmlsZXN5c3RlbSB3aXRoIGV4dGVudHMsIHdyaXRhYmxlIHNuYXBzaG90dGluZywKIAkgIHN1cHBvcnQgZm9yIG11bHRpcGxlIGRldmljZXMgYW5kIG1hbnkgbW9yZSBmZWF0dXJlcy4KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggNTJjYmU0Ny4uMmU5ZTY5OSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTk0LDcgKzk0LDggQEAKIC8qCiAgKiBOZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBmc19tdXRleCBoZWxkCiAgKi8KLXN0YXRpYyBpbnQgYnRyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKQorc3RhdGljIGludCBidHJmc19zZXRfYWNsKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpCiB7CiAJaW50IHJldCwgc2l6ZSA9IDA7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTE0MCw4ICsxNDEsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gX19idHJmc19zZXR4YXR0cihpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIDApOwotCisJcmV0ID0gX19idHJmc19zZXR4YXR0cih0cmFucywgaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKIG91dDoKIAlrZnJlZSh2YWx1ZSk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQAogc3RhdGljIGludCBidHJmc194YXR0cl9hY2xfc2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGludCB0eXBlKQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKIAogCWlmICh2YWx1ZSkgewpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBidHJmc19zZXRfYWNsKGRlbnRyeS0+ZF9pbm9kZSwgYWNsLCB0eXBlKTsKKwlyZXQgPSBidHJmc19zZXRfYWNsKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSwgYWNsLCB0eXBlKTsKIAogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CiAKQEAgLTE5Niw3ICsxOTYsOCBAQAogICogc3R1ZmYgaGFzIGJlZW4gZml4ZWQgdG8gd29yayB3aXRoIHRoYXQuICBJZiB0aGUgbG9ja2luZyBzdHVmZiBjaGFuZ2VzLCB3ZQogICogbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgYWNsIGxvY2tpbmcgc3R1ZmYuCiAgKi8KLWludCBidHJmc19pbml0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcikKK2ludCBidHJmc19pbml0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKQEAgLTIyMSw3ICsyMjIsOCBAQAogCQltb2RlX3QgbW9kZTsKIAogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJcmV0ID0gYnRyZnNfc2V0X2FjbChpbm9kZSwgYWNsLCBBQ0xfVFlQRV9ERUZBVUxUKTsKKwkJCXJldCA9IGJ0cmZzX3NldF9hY2wodHJhbnMsIGlub2RlLCBhY2wsCisJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxUKTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KQEAgLTIzNiw3ICsyMzgsNyBAQAogCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCQlpZiAocmV0ID4gMCkgewogCQkJCS8qIHdlIG5lZWQgYW4gYWNsICovCi0JCQkJcmV0ID0gYnRyZnNfc2V0X2FjbChpbm9kZSwgY2xvbmUsCisJCQkJcmV0ID0gYnRyZnNfc2V0X2FjbCh0cmFucywgaW5vZGUsIGNsb25lLAogCQkJCQkJICAgIEFDTF9UWVBFX0FDQ0VTUyk7CiAJCQl9CiAJCX0KQEAgLTI2OSw3ICsyNzEsNyBAQAogCiAJcmV0ID0gcG9zaXhfYWNsX2NobW9kX21hc3EoY2xvbmUsIGlub2RlLT5pX21vZGUpOwogCWlmICghcmV0KQotCQlyZXQgPSBidHJmc19zZXRfYWNsKGlub2RlLCBjbG9uZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwkJcmV0ID0gYnRyZnNfc2V0X2FjbChOVUxMLCBpbm9kZSwgY2xvbmUsIEFDTF9UWVBFX0FDQ0VTUyk7CiAKIAlwb3NpeF9hY2xfcmVsZWFzZShjbG9uZSk7CiAKQEAgLTI5Nyw3ICsyOTksOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCitpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaCBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKaW5kZXggZjY3ODNhNC4uM2YxZjUwZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAorKysgYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCkBAIC00NCw5ICs0NCw2IEBACiAJICovCiAJc3RydWN0IGV4dGVudF9pb190cmVlIGlvX2ZhaWx1cmVfdHJlZTsKIAotCS8qIGhlbGQgd2hpbGUgaW5lc3J0aW5nIG9yIGRlbGV0aW5nIGV4dGVudHMgZnJvbSBmaWxlcyAqLwotCXN0cnVjdCBtdXRleCBleHRlbnRfbXV0ZXg7Ci0KIAkvKiBoZWxkIHdoaWxlIGxvZ2dpbmcgdGhlIGlub2RlIGluIHRyZWUtbG9nLmMgKi8KIAlzdHJ1Y3QgbXV0ZXggbG9nX211dGV4OwogCkBAIC0xNjYsNyArMTYzLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGJ0cmZzX2lfc2l6ZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc2l6ZSkKIHsKLQlpbm9kZS0+aV9zaXplID0gc2l6ZTsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIHNpemUpOwogCUJUUkZTX0koaW5vZGUpLT5kaXNrX2lfc2l6ZSA9IHNpemU7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmMgYi9mcy9idHJmcy9jdHJlZS5jCmluZGV4IGVjOTZmM2EuLmM0YmM1NzAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtMzcsNiArMzcsMTEgQEAKIAkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpzcmNfYnVmKTsKIHN0YXRpYyBpbnQgZGVsX3B0cihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCSAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgbGV2ZWwsIGludCBzbG90KTsKK3N0YXRpYyBpbnQgc2V0dXBfaXRlbXNfZm9yX2luc2VydChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCXN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCXN0cnVjdCBidHJmc19rZXkgKmNwdV9rZXksIHUzMiAqZGF0YV9zaXplLAorCQkJdTMyIHRvdGFsX2RhdGEsIHUzMiB0b3RhbF9zaXplLCBpbnQgbnIpOworCiAKIHN0cnVjdCBidHJmc19wYXRoICpidHJmc19hbGxvY19wYXRoKHZvaWQpCiB7CkBAIC00NTEsOSArNDU2LDggQEAKIAkJZXh0ZW50X2J1ZmZlcl9nZXQoY293KTsKIAkJc3Bpbl91bmxvY2soJnJvb3QtPm5vZGVfbG9jayk7CiAKLQkJYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ1Zi0+c3RhcnQsIGJ1Zi0+bGVuLAotCQkJCSAgcGFyZW50X3N0YXJ0LCByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkgIGxldmVsLCAwKTsKKwkJYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHRyYW5zLCByb290LCBidWYtPnN0YXJ0LCBidWYtPmxlbiwKKwkJCQlwYXJlbnRfc3RhcnQsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLCBsZXZlbCk7CiAJCWZyZWVfZXh0ZW50X2J1ZmZlcihidWYpOwogCQlhZGRfcm9vdF90b19kaXJ0eV9saXN0KHJvb3QpOwogCX0gZWxzZSB7CkBAIC00NjgsOSArNDcyLDggQEAKIAkJYnRyZnNfc2V0X25vZGVfcHRyX2dlbmVyYXRpb24ocGFyZW50LCBwYXJlbnRfc2xvdCwKIAkJCQkJICAgICAgdHJhbnMtPnRyYW5zaWQpOwogCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXJlbnQpOwotCQlidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnVmLT5zdGFydCwgYnVmLT5sZW4sCi0JCQkJICBwYXJlbnRfc3RhcnQsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCSAgbGV2ZWwsIDApOworCQlidHJmc19mcmVlX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsIGJ1Zi0+c3RhcnQsIGJ1Zi0+bGVuLAorCQkJCXBhcmVudF9zdGFydCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsKTsKIAl9CiAJaWYgKHVubG9ja19vcmlnKQogCQlidHJmc190cmVlX3VubG9jayhidWYpOwpAQCAtMTAzMCw4ICsxMDMzLDggQEAKIAkJYnRyZnNfdHJlZV91bmxvY2sobWlkKTsKIAkJLyogb25jZSBmb3IgdGhlIHBhdGggKi8KIAkJZnJlZV9leHRlbnRfYnVmZmVyKG1pZCk7Ci0JCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBtaWQtPnN0YXJ0LCBtaWQtPmxlbiwKLQkJCQkJMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsLCAxKTsKKwkJcmV0ID0gYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHRyYW5zLCByb290LCBtaWQtPnN0YXJ0LCBtaWQtPmxlbiwKKwkJCQkJICAgIDAsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLCBsZXZlbCk7CiAJCS8qIG9uY2UgZm9yIHRoZSByb290IHB0ciAqLwogCQlmcmVlX2V4dGVudF9idWZmZXIobWlkKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEwOTUsMTAgKzEwOTgsMTAgQEAKIAkJCQkgICAgICAgMSk7CiAJCQlpZiAod3JldCkKIAkJCQlyZXQgPSB3cmV0OwotCQkJd3JldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCi0JCQkJCQkgYmxvY2tzaXplLCAwLAotCQkJCQkJIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCQkJIGxldmVsLCAwKTsKKwkJCXdyZXQgPSBidHJmc19mcmVlX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsCisJCQkJCQkgICAgIGJ5dGVuciwgYmxvY2tzaXplLCAwLAorCQkJCQkJICAgICByb290LT5yb290X2tleS5vYmplY3RpZCwKKwkJCQkJCSAgICAgbGV2ZWwpOwogCQkJaWYgKHdyZXQpCiAJCQkJcmV0ID0gd3JldDsKIAkJfSBlbHNlIHsKQEAgLTExNDMsOSArMTE0Niw4IEBACiAJCXdyZXQgPSBkZWxfcHRyKHRyYW5zLCByb290LCBwYXRoLCBsZXZlbCArIDEsIHBzbG90KTsKIAkJaWYgKHdyZXQpCiAJCQlyZXQgPSB3cmV0OwotCQl3cmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAotCQkJCQkgMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCSBsZXZlbCwgMCk7CisJCXdyZXQgPSBidHJmc19mcmVlX3RyZWVfYmxvY2sodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCQkJCQkgMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsKTsKIAkJaWYgKHdyZXQpCiAJCQlyZXQgPSB3cmV0OwogCX0gZWxzZSB7CkBAIC0yOTk3LDc1ICsyOTk5LDg1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIGEgc2luZ2xlIGl0ZW0gaW50byB0d28gaXRlbXMsCi0gKiBnaXZpbmcgJ25ld19rZXknIHRvIHRoZSBuZXcgaXRlbSBhbmQgc3BsaXR0aW5nIHRoZQotICogb2xkIG9uZSBhdCBzcGxpdF9vZmZzZXQgKGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBpdGVtKS4KLSAqCi0gKiBUaGUgcGF0aCBtYXkgYmUgcmVsZWFzZWQgYnkgdGhpcyBvcGVyYXRpb24uICBBZnRlcgotICogdGhlIHNwbGl0LCB0aGUgcGF0aCBpcyBwb2ludGluZyB0byB0aGUgb2xkIGl0ZW0uICBUaGUKLSAqIG5ldyBpdGVtIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBzYW1lIG5vZGUgYXMgdGhlIG9sZCBvbmUuCi0gKgotICogTm90ZSwgdGhlIGl0ZW0gYmVpbmcgc3BsaXQgbXVzdCBiZSBzbWFsbGVyIGVub3VnaCB0byBsaXZlIGFsb25lIG9uCi0gKiBhIHRyZWUgYmxvY2sgd2l0aCByb29tIGZvciBvbmUgZXh0cmEgc3RydWN0IGJ0cmZzX2l0ZW0KLSAqCi0gKiBUaGlzIGFsbG93cyB1cyB0byBzcGxpdCB0aGUgaXRlbSBpbiBwbGFjZSwga2VlcGluZyBhIGxvY2sgb24gdGhlCi0gKiBsZWFmIHRoZSBlbnRpcmUgdGltZS4KLSAqLwotaW50IGJ0cmZzX3NwbGl0X2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCSAgICAgc3RydWN0IGJ0cmZzX2tleSAqbmV3X2tleSwKLQkJICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X29mZnNldCkKK3N0YXRpYyBub2lubGluZSBpbnQgc2V0dXBfbGVhZl9mb3Jfc3BsaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgaW5zX2xlbikKIHsKLQl1MzIgaXRlbV9zaXplOworCXN0cnVjdCBidHJmc19rZXkga2V5OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwotCXN0cnVjdCBidHJmc19rZXkgb3JpZ19rZXk7Ci0Jc3RydWN0IGJ0cmZzX2l0ZW0gKml0ZW07Ci0Jc3RydWN0IGJ0cmZzX2l0ZW0gKm5ld19pdGVtOwotCWludCByZXQgPSAwOwotCWludCBzbG90OwotCXUzMiBucml0ZW1zOwotCXUzMiBvcmlnX29mZnNldDsKLQlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICpmaTsKKwl1NjQgZXh0ZW50X2xlbiA9IDA7CisJdTMyIGl0ZW1fc2l6ZTsKKwlpbnQgcmV0OwogCiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwotCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCAmb3JpZ19rZXksIHBhdGgtPnNsb3RzWzBdKTsKLQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpID49IHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpCi0JCWdvdG8gc3BsaXQ7CisJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKKworCUJVR19PTihrZXkudHlwZSAhPSBCVFJGU19FWFRFTlRfREFUQV9LRVkgJiYKKwkgICAgICAga2V5LnR5cGUgIT0gQlRSRlNfRVhURU5UX0NTVU1fS0VZKTsKKworCWlmIChidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgbGVhZikgPj0gaW5zX2xlbikKKwkJcmV0dXJuIDA7CiAKIAlpdGVtX3NpemUgPSBidHJmc19pdGVtX3NpemVfbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pOworCWlmIChrZXkudHlwZSA9PSBCVFJGU19FWFRFTlRfREFUQV9LRVkpIHsKKwkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKKwkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCQlleHRlbnRfbGVuID0gYnRyZnNfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpKTsKKwl9CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCi0JcGF0aC0+c2VhcmNoX2Zvcl9zcGxpdCA9IDE7CiAJcGF0aC0+a2VlcF9sb2NrcyA9IDE7Ci0KLQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJm9yaWdfa2V5LCBwYXRoLCAwLCAxKTsKKwlwYXRoLT5zZWFyY2hfZm9yX3NwbGl0ID0gMTsKKwlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgMCwgMSk7CiAJcGF0aC0+c2VhcmNoX2Zvcl9zcGxpdCA9IDA7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOwogCisJcmV0ID0gLUVBR0FJTjsKKwlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJLyogaWYgb3VyIGl0ZW0gaXNuJ3QgdGhlcmUgb3IgZ290IHNtYWxsZXIsIHJldHVybiBub3cgKi8KLQlpZiAocmV0ICE9IDAgfHwgaXRlbV9zaXplICE9IGJ0cmZzX2l0ZW1fc2l6ZV9ucihwYXRoLT5ub2Rlc1swXSwKLQkJCQkJCQlwYXRoLT5zbG90c1swXSkpIHsKLQkJcGF0aC0+a2VlcF9sb2NrcyA9IDA7Ci0JCXJldHVybiAtRUFHQUlOOworCWlmIChyZXQgPiAwIHx8IGl0ZW1fc2l6ZSAhPSBidHJmc19pdGVtX3NpemVfbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pKQorCQlnb3RvIGVycjsKKworCWlmIChrZXkudHlwZSA9PSBCVFJGU19FWFRFTlRfREFUQV9LRVkpIHsKKwkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKKwkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCQlpZiAoZXh0ZW50X2xlbiAhPSBidHJmc19maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmkpKQorCQkJZ290byBlcnI7CiAJfQogCiAJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7Ci0JcmV0ID0gc3BsaXRfbGVhZih0cmFucywgcm9vdCwgJm9yaWdfa2V5LCBwYXRoLAotCQkJIHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSksIDEpOwotCXBhdGgtPmtlZXBfbG9ja3MgPSAwOworCXJldCA9IHNwbGl0X2xlYWYodHJhbnMsIHJvb3QsICZrZXksIHBhdGgsIGluc19sZW4sIDEpOwogCUJVR19PTihyZXQpOwogCisJcGF0aC0+a2VlcF9sb2NrcyA9IDA7CiAJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CisJcmV0dXJuIDA7CitlcnI6CisJcGF0aC0+a2VlcF9sb2NrcyA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBzcGxpdF9pdGVtKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19rZXkgKm5ld19rZXksCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9vZmZzZXQpCit7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CisJc3RydWN0IGJ0cmZzX2l0ZW0gKml0ZW07CisJc3RydWN0IGJ0cmZzX2l0ZW0gKm5ld19pdGVtOworCWludCBzbG90OworCWNoYXIgKmJ1ZjsKKwl1MzIgbnJpdGVtczsKKwl1MzIgaXRlbV9zaXplOworCXUzMiBvcmlnX29mZnNldDsKKwlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CisKIAlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJQlVHX09OKGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWFmKSA8IHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpOwogCi1zcGxpdDoKLQkvKgotCSAqIG1ha2Ugc3VyZSBhbnkgY2hhbmdlcyB0byB0aGUgcGF0aCBmcm9tIHNwbGl0X2xlYWYgbGVhdmUgaXQKLQkgKiBpbiBhIGJsb2NraW5nIHN0YXRlCi0JICovCiAJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CiAKIAlpdGVtID0gYnRyZnNfaXRlbV9ucihsZWFmLCBwYXRoLT5zbG90c1swXSk7CkBAIC0zMDczLDE5ICszMDg1LDE5IEBACiAJaXRlbV9zaXplID0gYnRyZnNfaXRlbV9zaXplKGxlYWYsIGl0ZW0pOwogCiAJYnVmID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgYnVmLCBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwKIAkJCSAgICBwYXRoLT5zbG90c1swXSksIGl0ZW1fc2l6ZSk7CisKIAlzbG90ID0gcGF0aC0+c2xvdHNbMF0gKyAxOwotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKLQogCWlmIChzbG90ICE9IG5yaXRlbXMpIHsKIAkJLyogc2hpZnQgdGhlIGl0ZW1zICovCiAJCW1lbW1vdmVfZXh0ZW50X2J1ZmZlcihsZWFmLCBidHJmc19pdGVtX25yX29mZnNldChzbG90ICsgMSksCi0JCQkgICAgICBidHJmc19pdGVtX25yX29mZnNldChzbG90KSwKLQkJCSAgICAgIChucml0ZW1zIC0gc2xvdCkgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKLQorCQkJCWJ0cmZzX2l0ZW1fbnJfb2Zmc2V0KHNsb3QpLAorCQkJCShucml0ZW1zIC0gc2xvdCkgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKIAl9CiAKIAlidHJmc19jcHVfa2V5X3RvX2Rpc2soJmRpc2tfa2V5LCBuZXdfa2V5KTsKQEAgLTMxMTMsMTYgKzMxMjUsODEgQEAKIAkJCSAgICBpdGVtX3NpemUgLSBzcGxpdF9vZmZzZXQpOwogCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCi0JcmV0ID0gMDsKLQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpIDwgMCkgewotCQlidHJmc19wcmludF9sZWFmKHJvb3QsIGxlYWYpOwotCQlCVUcoKTsKLQl9CisJQlVHX09OKGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWFmKSA8IDApOwogCWtmcmVlKGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNwbGl0cyBhIHNpbmdsZSBpdGVtIGludG8gdHdvIGl0ZW1zLAorICogZ2l2aW5nICduZXdfa2V5JyB0byB0aGUgbmV3IGl0ZW0gYW5kIHNwbGl0dGluZyB0aGUKKyAqIG9sZCBvbmUgYXQgc3BsaXRfb2Zmc2V0IChmcm9tIHRoZSBzdGFydCBvZiB0aGUgaXRlbSkuCisgKgorICogVGhlIHBhdGggbWF5IGJlIHJlbGVhc2VkIGJ5IHRoaXMgb3BlcmF0aW9uLiAgQWZ0ZXIKKyAqIHRoZSBzcGxpdCwgdGhlIHBhdGggaXMgcG9pbnRpbmcgdG8gdGhlIG9sZCBpdGVtLiAgVGhlCisgKiBuZXcgaXRlbSBpcyBnb2luZyB0byBiZSBpbiB0aGUgc2FtZSBub2RlIGFzIHRoZSBvbGQgb25lLgorICoKKyAqIE5vdGUsIHRoZSBpdGVtIGJlaW5nIHNwbGl0IG11c3QgYmUgc21hbGxlciBlbm91Z2ggdG8gbGl2ZSBhbG9uZSBvbgorICogYSB0cmVlIGJsb2NrIHdpdGggcm9vbSBmb3Igb25lIGV4dHJhIHN0cnVjdCBidHJmc19pdGVtCisgKgorICogVGhpcyBhbGxvd3MgdXMgdG8gc3BsaXQgdGhlIGl0ZW0gaW4gcGxhY2UsIGtlZXBpbmcgYSBsb2NrIG9uIHRoZQorICogbGVhZiB0aGUgZW50aXJlIHRpbWUuCisgKi8KK2ludCBidHJmc19zcGxpdF9pdGVtKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkgICAgIHN0cnVjdCBidHJmc19rZXkgKm5ld19rZXksCisJCSAgICAgdW5zaWduZWQgbG9uZyBzcGxpdF9vZmZzZXQpCit7CisJaW50IHJldDsKKwlyZXQgPSBzZXR1cF9sZWFmX2Zvcl9zcGxpdCh0cmFucywgcm9vdCwgcGF0aCwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3BsaXRfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgbmV3X2tleSwgc3BsaXRfb2Zmc2V0KTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiBkdXBsaWNhdGUgYSBpdGVtLCBnaXZpbmcgJ25ld19rZXknIHRvIHRoZSBuZXcgaXRlbS4KKyAqIEl0IGd1YXJhbnRlZXMgYm90aCBpdGVtcyBsaXZlIGluIHRoZSBzYW1lIHRyZWUgbGVhZiBhbmQgdGhlIG5ldyBpdGVtCisgKiBpcyBjb250aWd1b3VzIHdpdGggdGhlIG9yaWdpbmFsIGl0ZW0uCisgKgorICogVGhpcyBhbGxvd3MgdXMgdG8gc3BsaXQgZmlsZSBleHRlbnQgaW4gcGxhY2UsIGtlZXBpbmcgYSBsb2NrIG9uIHRoZQorICogbGVhZiB0aGUgZW50aXJlIHRpbWUuCisgKi8KK2ludCBidHJmc19kdXBsaWNhdGVfaXRlbShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCSBzdHJ1Y3QgYnRyZnNfa2V5ICpuZXdfa2V5KQoreworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOworCWludCByZXQ7CisJdTMyIGl0ZW1fc2l6ZTsKKworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKKwlpdGVtX3NpemUgPSBidHJmc19pdGVtX3NpemVfbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pOworCXJldCA9IHNldHVwX2xlYWZfZm9yX3NwbGl0KHRyYW5zLCByb290LCBwYXRoLAorCQkJCSAgIGl0ZW1fc2l6ZSArIHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwYXRoLT5zbG90c1swXSsrOworCXJldCA9IHNldHVwX2l0ZW1zX2Zvcl9pbnNlcnQodHJhbnMsIHJvb3QsIHBhdGgsIG5ld19rZXksICZpdGVtX3NpemUsCisJCQkJICAgICBpdGVtX3NpemUsIGl0ZW1fc2l6ZSArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pLCAxKTsKKwlCVUdfT04ocmV0KTsKKworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKKwltZW1jcHlfZXh0ZW50X2J1ZmZlcihsZWFmLAorCQkJICAgICBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwgcGF0aC0+c2xvdHNbMF0pLAorCQkJICAgICBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwgcGF0aC0+c2xvdHNbMF0gLSAxKSwKKwkJCSAgICAgaXRlbV9zaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIG1ha2UgdGhlIGl0ZW0gcG9pbnRlZCB0byBieSB0aGUgcGF0aCBzbWFsbGVyLiAgbmV3X3NpemUgaW5kaWNhdGVzCiAgKiBob3cgc21hbGwgdG8gbWFrZSBpdCwgYW5kIGZyb21fZW5kIHRlbGxzIHVzIGlmIHdlIGp1c3QgY2hvcCBieXRlcwogICogb2ZmIHRoZSBlbmQgb2YgdGhlIGl0ZW0gb3IgaWYgd2Ugc2hpZnQgdGhlIGl0ZW0gdG8gY2hvcCBieXRlcyBvZmYKQEAgLTM3MTQsOCArMzc5MSw4IEBACiAJICovCiAJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMCk7CiAKLQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgbGVhZi0+c3RhcnQsIGxlYWYtPmxlbiwKLQkJCQkwLCByb290LT5yb290X2tleS5vYmplY3RpZCwgMCwgMCk7CisJcmV0ID0gYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHRyYW5zLCByb290LCBsZWFmLT5zdGFydCwgbGVhZi0+bGVuLAorCQkJCSAgICAwLCByb290LT5yb290X2tleS5vYmplY3RpZCwgMCk7CiAJcmV0dXJuIHJldDsKIH0KIC8qCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA0NDRiM2U5Li45ZjgwNmRkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTMxMCw2ICszMTAsOSBAQAogI2RlZmluZSBCVFJGU19NQVhfSU5MSU5FX0RBVEFfU0laRShyKSAoQlRSRlNfTEVBRl9EQVRBX1NJWkUocikgLSBcCiAJCQkJCXNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkgLSBcCiAJCQkJCXNpemVvZihzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSkpCisjZGVmaW5lIEJUUkZTX01BWF9YQVRUUl9TSVpFKHIpCShCVFJGU19MRUFGX0RBVEFfU0laRShyKSAtIFwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSAtXAorCQkJCSBzaXplb2Yoc3RydWN0IGJ0cmZzX2Rpcl9pdGVtKSkKIAogCiAvKgpAQCAtODU5LDggKzg2Miw5IEBACiAJc3RydWN0IG11dGV4IG9yZGVyZWRfb3BlcmF0aW9uc19tdXRleDsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGV4dGVudF9jb21taXRfc2VtOwogCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSBzdWJ2b2xfc2VtOworCXN0cnVjdCByd19zZW1hcGhvcmUgY2xlYW51cF93b3JrX3NlbTsKIAorCXN0cnVjdCByd19zZW1hcGhvcmUgc3Vidm9sX3NlbTsKIAlzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qgc3Vidm9sX3NyY3U7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zX2xpc3Q7CkBAIC04NjgsNiArODcyLDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlYWRfcm9vdHM7CiAJc3RydWN0IGxpc3RfaGVhZCBjYWNoaW5nX2Jsb2NrX2dyb3VwczsKIAorCXNwaW5sb2NrX3QgZGVsYXllZF9pcHV0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBkZWxheWVkX2lwdXRzOworCiAJYXRvbWljX3QgbnJfYXN5bmNfc3VibWl0czsKIAlhdG9taWNfdCBhc3luY19zdWJtaXRfZHJhaW5pbmc7CiAJYXRvbWljX3QgbnJfYXN5bmNfYmlvczsKQEAgLTEwMzQsMTIgKzEwNDEsMTIgQEAKIAlpbnQgcmVmX2Nvd3M7CiAJaW50IHRyYWNrX2RpcnR5OwogCWludCBpbl9yYWRpeDsKKwlpbnQgY2xlYW5fb3JwaGFuczsKIAogCXU2NCBkZWZyYWdfdHJhbnNfc3RhcnQ7CiAJc3RydWN0IGJ0cmZzX2tleSBkZWZyYWdfcHJvZ3Jlc3M7CiAJc3RydWN0IGJ0cmZzX2tleSBkZWZyYWdfbWF4OwogCWludCBkZWZyYWdfcnVubmluZzsKLQlpbnQgZGVmcmFnX2xldmVsOwogCWNoYXIgKm5hbWU7CiAJaW50IGluX3N5c2ZzOwogCkBAIC0xOTc1LDYgKzE5ODIsMTAgQEAKIAkJCQkJdTY0IHBhcmVudCwgdTY0IHJvb3Rfb2JqZWN0aWQsCiAJCQkJCXN0cnVjdCBidHJmc19kaXNrX2tleSAqa2V5LCBpbnQgbGV2ZWwsCiAJCQkJCXU2NCBoaW50LCB1NjQgZW1wdHlfc2l6ZSk7CitpbnQgYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgdTY0IGJ5dGVuciwgdTMyIGJsb2Nrc2l6ZSwKKwkJCSAgdTY0IHBhcmVudCwgdTY0IHJvb3Rfb2JqZWN0aWQsIGludCBsZXZlbCk7CiBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnRyZnNfaW5pdF9uZXdfYnVmZmVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCSAgICB1NjQgYnl0ZW5yLCB1MzIgYmxvY2tzaXplLApAQCAtMjA4OSw2ICsyMTAwLDEwIEBACiAJCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCiAJCSAgICAgc3RydWN0IGJ0cmZzX2tleSAqbmV3X2tleSwKIAkJICAgICB1bnNpZ25lZCBsb25nIHNwbGl0X29mZnNldCk7CitpbnQgYnRyZnNfZHVwbGljYXRlX2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkgc3RydWN0IGJ0cmZzX2tleSAqbmV3X2tleSk7CiBpbnQgYnRyZnNfc2VhcmNoX3Nsb3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHN0cnVjdCBidHJmc19yb290CiAJCSAgICAgICpyb290LCBzdHJ1Y3QgYnRyZnNfa2V5ICprZXksIHN0cnVjdCBidHJmc19wYXRoICpwLCBpbnQKIAkJICAgICAgaW5zX2xlbiwgaW50IGNvdyk7CkBAIC0yMTk2LDkgKzIyMTEsMTAgQEAKIAkJCSAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAogCQkJICAgICAgc3RydWN0IGJ0cmZzX2Rpcl9pdGVtICpkaSk7CiBpbnQgYnRyZnNfaW5zZXJ0X3hhdHRyX2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgdTE2IG5hbWVfbGVuLCBjb25zdCB2b2lkICpkYXRhLCB1MTYgZGF0YV9sZW4sCi0JCQkgICAgdTY0IGRpcik7CisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBvYmplY3RpZCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgbmFtZV9sZW4sCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGRhdGFfbGVuKTsKIHN0cnVjdCBidHJmc19kaXJfaXRlbSAqYnRyZnNfbG9va3VwX3hhdHRyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCB1NjQgZGlyLApAQCAtMjI5Miw3ICsyMzA4LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgbmV3X3NpemUsCiAJCQkgICAgICAgdTMyIG1pbl90eXBlKTsKIAotaW50IGJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2RlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CitpbnQgYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgZGVsYXlfaXB1dCk7CiBpbnQgYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwogaW50IGJ0cmZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwpAQCAtMjMzMiw2ICsyMzQ4LDggQEAKIHZvaWQgYnRyZnNfb3JwaGFuX2NsZWFudXAoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTsKIGludCBidHJmc19pbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7Cit2b2lkIGJ0cmZzX2FkZF9kZWxheWVkX2lwdXQoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qIGlvY3RsLmMgKi8KQEAgLTIzNDUsMTIgKzIzNjMsOSBAQAogCQkJICAgIGludCBza2lwX3Bpbm5lZCk7CiBpbnQgYnRyZnNfY2hlY2tfZmlsZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7Ci1pbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBsb2NrZWRfZW5kLAotCQkgICAgICAgdTY0IGlubGluZV9saW1pdCwgdTY0ICpoaW50X2Jsb2NrLCBpbnQgZHJvcF9jYWNoZSk7CitpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgKmhpbnRfYnl0ZSwgaW50IGRyb3BfY2FjaGUpOwogaW50IGJ0cmZzX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCk7CiBpbnQgYnRyZnNfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIApAQCAtMjM4MCw3ICsyMzk1LDggQEAKICNlbHNlCiAjZGVmaW5lIGJ0cmZzX2NoZWNrX2FjbCBOVUxMCiAjZW5kaWYKLWludCBidHJmc19pbml0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CitpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKTsKIGludCBidHJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qIHJlbG9jYXRpb24uYyAqLwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlyLWl0ZW0uYyBiL2ZzL2J0cmZzL2Rpci1pdGVtLmMKaW5kZXggZjNhNjA3NS4uZTkxMDNiMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlyLWl0ZW0uYworKysgYi9mcy9idHJmcy9kaXItaXRlbS5jCkBAIC02OCwxMiArNjgsMTIgQEAKICAqIGludG8gdGhlIHRyZWUKICAqLwogaW50IGJ0cmZzX2luc2VydF94YXR0cl9pdGVtKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBjb25zdCBjaGFyICpuYW1lLAotCQkJICAgIHUxNiBuYW1lX2xlbiwgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGRhdGFfbGVuLAotCQkJICAgIHU2NCBkaXIpCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBvYmplY3RpZCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgbmFtZV9sZW4sCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IGRhdGFfbGVuKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBidHJmc19kaXJfaXRlbSAqZGlyX2l0ZW07CiAJdW5zaWduZWQgbG9uZyBuYW1lX3B0ciwgZGF0YV9wdHI7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXksIGxvY2F0aW9uOwpAQCAtODEsMTUgKzgxLDExIEBACiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJdTMyIGRhdGFfc2l6ZTsKIAotCWtleS5vYmplY3RpZCA9IGRpcjsKKwlCVUdfT04obmFtZV9sZW4gKyBkYXRhX2xlbiA+IEJUUkZTX01BWF9YQVRUUl9TSVpFKHJvb3QpKTsKKworCWtleS5vYmplY3RpZCA9IG9iamVjdGlkOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19YQVRUUl9JVEVNX0tFWSk7CiAJa2V5Lm9mZnNldCA9IGJ0cmZzX25hbWVfaGFzaChuYW1lLCBuYW1lX2xlbik7Ci0JcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlpZiAoIXBhdGgpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChuYW1lX2xlbiArIGRhdGFfbGVuICsgc2l6ZW9mKHN0cnVjdCBidHJmc19kaXJfaXRlbSkgPgotCSAgICBCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSAtIHNpemVvZihzdHJ1Y3QgYnRyZnNfaXRlbSkpCi0JCXJldHVybiAtRU5PU1BDOwogCiAJZGF0YV9zaXplID0gc2l6ZW9mKCpkaXJfaXRlbSkgKyBuYW1lX2xlbiArIGRhdGFfbGVuOwogCWRpcl9pdGVtID0gaW5zZXJ0X3dpdGhfb3ZlcmZsb3codHJhbnMsIHJvb3QsIHBhdGgsICZrZXksIGRhdGFfc2l6ZSwKQEAgLTExNyw3ICsxMTMsNiBAQAogCXdyaXRlX2V4dGVudF9idWZmZXIobGVhZiwgZGF0YSwgZGF0YV9wdHIsIGRhdGFfbGVuKTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CiAKLQlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDAyYjZhZmIuLjAwOWUzYmQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTg5Miw2ICs4OTIsOCBAQAogCXJvb3QtPnN0cmlwZXNpemUgPSBzdHJpcGVzaXplOwogCXJvb3QtPnJlZl9jb3dzID0gMDsKIAlyb290LT50cmFja19kaXJ0eSA9IDA7CisJcm9vdC0+aW5fcmFkaXggPSAwOworCXJvb3QtPmNsZWFuX29ycGhhbnMgPSAwOwogCiAJcm9vdC0+ZnNfaW5mbyA9IGZzX2luZm87CiAJcm9vdC0+b2JqZWN0aWQgPSBvYmplY3RpZDsKQEAgLTkyOCw3ICs5MzAsNiBAQAogCXJvb3QtPmRlZnJhZ190cmFuc19zdGFydCA9IGZzX2luZm8tPmdlbmVyYXRpb247CiAJaW5pdF9jb21wbGV0aW9uKCZyb290LT5rb2JqX3VucmVnaXN0ZXIpOwogCXJvb3QtPmRlZnJhZ19ydW5uaW5nID0gMDsKLQlyb290LT5kZWZyYWdfbGV2ZWwgPSAwOwogCXJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkID0gb2JqZWN0aWQ7CiAJcm9vdC0+YW5vbl9zdXBlci5zX3Jvb3QgPSBOVUxMOwogCXJvb3QtPmFub25fc3VwZXIuc19kZXYgPSAwOwpAQCAtOTgwLDEyICs5ODEsMTIgQEAKIAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdCgmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzLAotCQkJCSAgICAwLCAmc3RhcnQsICZlbmQsIEVYVEVOVF9ESVJUWSk7CisJCQkJMCwgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfTkVXKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWNsZWFyX2V4dGVudF9kaXJ0eSgmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzLAotCQkJCSAgIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKKwkJY2xlYXJfZXh0ZW50X2JpdHMoJmxvZ19yb290X3RyZWUtPmRpcnR5X2xvZ19wYWdlcywgc3RhcnQsIGVuZCwKKwkJCQkgIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ORVcsIEdGUF9OT0ZTKTsKIAl9CiAJZWIgPSBmc19pbmZvLT5sb2dfcm9vdF90cmVlLT5ub2RlOwogCkBAIC0xMjEwLDggKzEyMTEsMTAgQEAKIAlyZXQgPSByYWRpeF90cmVlX2luc2VydCgmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXgsCiAJCQkJKHVuc2lnbmVkIGxvbmcpcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJcm9vdCk7Ci0JaWYgKHJldCA9PSAwKQorCWlmIChyZXQgPT0gMCkgewogCQlyb290LT5pbl9yYWRpeCA9IDE7CisJCXJvb3QtPmNsZWFuX29ycGhhbnMgPSAxOworCX0KIAlzcGluX3VubG9jaygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCWlmIChyZXQpIHsKQEAgLTEyMjUsMTAgKzEyMjgsNiBAQAogCXJldCA9IGJ0cmZzX2ZpbmRfZGVhZF9yb290cyhmc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkKTsKIAlXQVJOX09OKHJldCk7Ci0KLQlpZiAoIShmc19pbmZvLT5zYi0+c19mbGFncyAmIE1TX1JET05MWSkpCi0JCWJ0cmZzX29ycGhhbl9jbGVhbnVwKHJvb3QpOwotCiAJcmV0dXJuIHJvb3Q7CiBmYWlsOgogCWZyZWVfZnNfcm9vdChyb290KTsKQEAgLTE0NzcsNiArMTQ3Niw3IEBACiAKIAkJaWYgKCEocm9vdC0+ZnNfaW5mby0+c2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmCiAJCSAgICBtdXRleF90cnlsb2NrKCZyb290LT5mc19pbmZvLT5jbGVhbmVyX211dGV4KSkgeworCQkJYnRyZnNfcnVuX2RlbGF5ZWRfaXB1dHMocm9vdCk7CiAJCQlidHJmc19jbGVhbl9vbGRfc25hcHNob3RzKHJvb3QpOwogCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5jbGVhbmVyX211dGV4KTsKIAkJfQpAQCAtMTYwNiw2ICsxNjA2LDcgQEAKIAlJTklUX1JBRElYX1RSRUUoJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LCBHRlBfQVRPTUlDKTsKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+dHJhbnNfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmRlYWRfcm9vdHMpOworCUlOSVRfTElTVF9IRUFEKCZmc19pbmZvLT5kZWxheWVkX2lwdXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+aGFzaGVycyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmRlbGFsbG9jX2lub2Rlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucyk7CkBAIC0xNjE0LDYgKzE2MTUsNyBAQAogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPnJlZl9jYWNoZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dF9sb2NrKTsKIAogCWluaXRfY29tcGxldGlvbigmZnNfaW5mby0+a29ial91bnJlZ2lzdGVyKTsKIAlmc19pbmZvLT50cmVlX3Jvb3QgPSB0cmVlX3Jvb3Q7CkBAIC0xNjg5LDYgKzE2OTEsNyBAQAogCW11dGV4X2luaXQoJmZzX2luZm8tPmNsZWFuZXJfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnZvbHVtZV9tdXRleCk7CiAJaW5pdF9yd3NlbSgmZnNfaW5mby0+ZXh0ZW50X2NvbW1pdF9zZW0pOworCWluaXRfcndzZW0oJmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCWluaXRfcndzZW0oJmZzX2luZm8tPnN1YnZvbF9zZW0pOwogCiAJYnRyZnNfaW5pdF9mcmVlX2NsdXN0ZXIoJmZzX2luZm8tPm1ldGFfYWxsb2NfY2x1c3Rlcik7CkBAIC0yMzg2LDggKzIzODksMTQgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+Y2xlYW5lcl9tdXRleCk7CisJYnRyZnNfcnVuX2RlbGF5ZWRfaXB1dHMocm9vdCk7CiAJYnRyZnNfY2xlYW5fb2xkX3NuYXBzaG90cyhyb290KTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPmNsZWFuZXJfbXV0ZXgpOworCisJLyogd2FpdCB1bnRpbCBvbmdvaW5nIGNsZWFudXAgd29yayBkb25lICovCisJZG93bl93cml0ZSgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CisJdXBfd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCUJVR19PTihyZXQpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggOTQ2MjdjNC4uNTZlNTAxMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0xOTUsNiArMTk1LDE0IEBACiAJaW50IHN0cmlwZV9sZW47CiAJaW50IGksIG5yLCByZXQ7CiAKKwlpZiAoY2FjaGUtPmtleS5vYmplY3RpZCA8IEJUUkZTX1NVUEVSX0lORk9fT0ZGU0VUKSB7CisJCXN0cmlwZV9sZW4gPSBCVFJGU19TVVBFUl9JTkZPX09GRlNFVCAtIGNhY2hlLT5rZXkub2JqZWN0aWQ7CisJCWNhY2hlLT5ieXRlc19zdXBlciArPSBzdHJpcGVfbGVuOworCQlyZXQgPSBhZGRfZXhjbHVkZWRfZXh0ZW50KHJvb3QsIGNhY2hlLT5rZXkub2JqZWN0aWQsCisJCQkJCSAgc3RyaXBlX2xlbik7CisJCUJVR19PTihyZXQpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBCVFJGU19TVVBFUl9NSVJST1JfTUFYOyBpKyspIHsKIAkJYnl0ZW5yID0gYnRyZnNfc2Jfb2Zmc2V0KGkpOwogCQlyZXQgPSBidHJmc19ybWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsCkBAIC0yNTUsNyArMjYzLDcgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWlmIChleHRlbnRfc3RhcnQgPT0gc3RhcnQpIHsKKwkJaWYgKGV4dGVudF9zdGFydCA8PSBzdGFydCkgewogCQkJc3RhcnQgPSBleHRlbnRfZW5kICsgMTsKIAkJfSBlbHNlIGlmIChleHRlbnRfc3RhcnQgPiBzdGFydCAmJiBleHRlbnRfc3RhcnQgPCBlbmQpIHsKIAkJCXNpemUgPSBleHRlbnRfc3RhcnQgLSBzdGFydDsKQEAgLTI4ODAsOSArMjg4OCw5IEBACiAJcm9vdCA9IGFzeW5jLT5yb290OwogCWluZm8gPSBhc3luYy0+aW5mbzsKIAotCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKKwlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCwgMCk7CiAJd2FrZV91cCgmaW5mby0+Zmx1c2hfd2FpdCk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCwgMCk7CiAKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwogCWluZm8tPmZsdXNoaW5nID0gMDsKQEAgLTI5NTYsOCArMjk2NCw4IEBACiAJcmV0dXJuOwogCiBmbHVzaDoKLQlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QsIDApOworCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDAsIDApOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpbmZvLT5mbHVzaGluZyA9IDA7CkBAIC0zNDU0LDE0ICszNDYyLDYgQEAKIAllbHNlCiAJCW9sZF92YWwgLT0gbnVtX2J5dGVzOwogCWJ0cmZzX3NldF9zdXBlcl9ieXRlc191c2VkKCZpbmZvLT5zdXBlcl9jb3B5LCBvbGRfdmFsKTsKLQotCS8qIGJsb2NrIGFjY291bnRpbmcgZm9yIHJvb3QgaXRlbSAqLwotCW9sZF92YWwgPSBidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSk7Ci0JaWYgKGFsbG9jKQotCQlvbGRfdmFsICs9IG51bV9ieXRlczsKLQllbHNlCi0JCW9sZF92YWwgLT0gbnVtX2J5dGVzOwotCWJ0cmZzX3NldF9yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSwgb2xkX3ZhbCk7CiAJc3Bpbl91bmxvY2soJmluZm8tPmRlbGFsbG9jX2xvY2spOwogCiAJd2hpbGUgKHRvdGFsKSB7CkBAIC00MDQ5LDYgKzQwNDksMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgYnRyZnNfZnJlZV90cmVlX2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgdTY0IGJ5dGVuciwgdTMyIGJsb2Nrc2l6ZSwKKwkJCSAgdTY0IHBhcmVudCwgdTY0IHJvb3Rfb2JqZWN0aWQsIGludCBsZXZlbCkKK3sKKwl1NjQgdXNlZDsKKwlzcGluX2xvY2soJnJvb3QtPm5vZGVfbG9jayk7CisJdXNlZCA9IGJ0cmZzX3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtKSAtIGJsb2Nrc2l6ZTsKKwlidHJmc19zZXRfcm9vdF91c2VkKCZyb290LT5yb290X2l0ZW0sIHVzZWQpOworCXNwaW5fdW5sb2NrKCZyb290LT5ub2RlX2xvY2spOworCisJcmV0dXJuIGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkgcGFyZW50LCByb290X29iamVjdGlkLCBsZXZlbCwgMCk7Cit9CisKIHN0YXRpYyB1NjQgc3RyaXBlX2FsaWduKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgdmFsKQogewogCXU2NCBtYXNrID0gKCh1NjQpcm9vdC0+c3RyaXBlc2l6ZSAtIDEpOwpAQCAtNDU3OCw3ICs0NTkzLDYgQEAKIHsKIAlpbnQgcmV0OwogCXU2NCBzZWFyY2hfc3RhcnQgPSAwOwotCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAogCWRhdGEgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCBkYXRhKTsKIGFnYWluOgpAQCAtNDU4NiwxNyArNDYwMCw5IEBACiAJICogdGhlIG9ubHkgcGxhY2UgdGhhdCBzZXRzIGVtcHR5X3NpemUgaXMgYnRyZnNfcmVhbGxvY19ub2RlLCB3aGljaAogCSAqIGlzIG5vdCBjYWxsZWQgcmVjdXJzaXZlbHkgb24gYWxsb2NhdGlvbnMKIAkgKi8KLQlpZiAoZW1wdHlfc2l6ZSB8fCByb290LT5yZWZfY293cykgewotCQlpZiAoIShkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpKSB7Ci0JCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCi0JCQkJICAgICAyICogMTAyNCAqIDEwMjQsCi0JCQkJICAgICBCVFJGU19CTE9DS19HUk9VUF9NRVRBREFUQSB8Ci0JCQkJICAgICAoaW5mby0+bWV0YWRhdGFfYWxsb2NfcHJvZmlsZSAmCi0JCQkJICAgICAgaW5mby0+YXZhaWxfbWV0YWRhdGFfYWxsb2NfYml0cyksIDApOwotCQl9CisJaWYgKGVtcHR5X3NpemUgfHwgcm9vdC0+cmVmX2Nvd3MpCiAJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKIAkJCQkgICAgIG51bV9ieXRlcyArIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwgMCk7Ci0JfQogCiAJV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKIAlyZXQgPSBmaW5kX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBudW1fYnl0ZXMsIGVtcHR5X3NpemUsCkBAIC00ODk3LDYgKzQ5MDMsMTQgQEAKIAkJCQkJZXh0ZW50X29wKTsKIAkJQlVHX09OKHJldCk7CiAJfQorCisJaWYgKHJvb3Rfb2JqZWN0aWQgPT0gcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQpIHsKKwkJdTY0IHVzZWQ7CisJCXNwaW5fbG9jaygmcm9vdC0+bm9kZV9sb2NrKTsKKwkJdXNlZCA9IGJ0cmZzX3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtKSArIG51bV9ieXRlczsKKwkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtLCB1c2VkKTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPm5vZGVfbG9jayk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQ5MTksOCArNDkzMywxNiBAQAogCWJ0cmZzX3NldF9idWZmZXJfdXB0b2RhdGUoYnVmKTsKIAogCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCkgewotCQlzZXRfZXh0ZW50X2RpcnR5KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsIGJ1Zi0+c3RhcnQsCi0JCQkgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSwgR0ZQX05PRlMpOworCQkvKgorCQkgKiB3ZSBhbGxvdyB0d28gbG9nIHRyYW5zYWN0aW9ucyBhdCBhIHRpbWUsIHVzZSBkaWZmZXJlbnQKKwkJICogRVhFTlQgYml0IHRvIGRpZmZlcmVudGlhdGUgZGlydHkgcGFnZXMuCisJCSAqLworCQlpZiAocm9vdC0+bG9nX3RyYW5zaWQgJSAyID09IDApCisJCQlzZXRfZXh0ZW50X2RpcnR5KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsIGJ1Zi0+c3RhcnQsCisJCQkJCWJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEsIEdGUF9OT0ZTKTsKKwkJZWxzZQorCQkJc2V0X2V4dGVudF9uZXcoJnJvb3QtPmRpcnR5X2xvZ19wYWdlcywgYnVmLT5zdGFydCwKKwkJCQkJYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSwgR0ZQX05PRlMpOwogCX0gZWxzZSB7CiAJCXNldF9leHRlbnRfZGlydHkoJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGlydHlfcGFnZXMsIGJ1Zi0+c3RhcnQsCiAJCQkgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSwgR0ZQX05PRlMpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IDc3Zjc1OTMuLmZlYWExM2IgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTE3OSwxOCArMTc5LDE0IEBACiAJCX0KIAkJZmxhZ3MgPSBlbS0+ZmxhZ3M7CiAJCWlmIChza2lwX3Bpbm5lZCAmJiB0ZXN0X2JpdChFWFRFTlRfRkxBR19QSU5ORUQsICZlbS0+ZmxhZ3MpKSB7Ci0JCQlpZiAoZW0tPnN0YXJ0IDw9IHN0YXJ0ICYmCi0JCQkgICAgKCF0ZXN0ZW5kIHx8IGVtLT5zdGFydCArIGVtLT5sZW4gPj0gc3RhcnQgKyBsZW4pKSB7CisJCQlpZiAodGVzdGVuZCAmJiBlbS0+c3RhcnQgKyBlbS0+bGVuID49IHN0YXJ0ICsgbGVuKSB7CiAJCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJCQl3cml0ZV91bmxvY2soJmVtX3RyZWUtPmxvY2spOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKHN0YXJ0IDwgZW0tPnN0YXJ0KSB7Ci0JCQkJbGVuID0gZW0tPnN0YXJ0IC0gc3RhcnQ7Ci0JCQl9IGVsc2UgeworCQkJc3RhcnQgPSBlbS0+c3RhcnQgKyBlbS0+bGVuOworCQkJaWYgKHRlc3RlbmQpCiAJCQkJbGVuID0gc3RhcnQgKyBsZW4gLSAoZW0tPnN0YXJ0ICsgZW0tPmxlbik7Ci0JCQkJc3RhcnQgPSBlbS0+c3RhcnQgKyBlbS0+bGVuOwotCQkJfQogCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJCXdyaXRlX3VubG9jaygmZW1fdHJlZS0+bG9jayk7CiAJCQljb250aW51ZTsKQEAgLTI2NSwzMTkgKzI2MSwyNDcgQEAKICAqIElmIGFuIGV4dGVudCBpbnRlcnNlY3RzIHRoZSByYW5nZSBidXQgaXMgbm90IGVudGlyZWx5IGluc2lkZSB0aGUgcmFuZ2UKICAqIGl0IGlzIGVpdGhlciB0cnVuY2F0ZWQgb3Igc3BsaXQuICBBbnl0aGluZyBlbnRpcmVseSBpbnNpZGUgdGhlIHJhbmdlCiAgKiBpcyBkZWxldGVkIGZyb20gdGhlIHRyZWUuCi0gKgotICogaW5saW5lX2xpbWl0IGlzIHVzZWQgdG8gdGVsbCB0aGlzIGNvZGUgd2hpY2ggb2Zmc2V0cyBpbiB0aGUgZmlsZSB0byBrZWVwCi0gKiBpZiB0aGV5IGNvbnRhaW4gaW5saW5lIGV4dGVudHMuCiAgKi8KLW5vaW5saW5lIGludCBidHJmc19kcm9wX2V4dGVudHMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IGxvY2tlZF9lbmQsCi0JCSAgICAgICB1NjQgaW5saW5lX2xpbWl0LCB1NjQgKmhpbnRfYnl0ZSwgaW50IGRyb3BfY2FjaGUpCitpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgKmhpbnRfYnl0ZSwgaW50IGRyb3BfY2FjaGUpCiB7Ci0JdTY0IGV4dGVudF9lbmQgPSAwOwotCXU2NCBzZWFyY2hfc3RhcnQgPSBzdGFydDsKLQl1NjQgcmFtX2J5dGVzID0gMDsKLQl1NjQgZGlza19ieXRlbnIgPSAwOwotCXU2NCBvcmlnX2xvY2tlZF9lbmQgPSBsb2NrZWRfZW5kOwotCXU4IGNvbXByZXNzaW9uOwotCXU4IGVuY3J5cHRpb247Ci0JdTE2IG90aGVyX2VuY29kaW5nID0gMDsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwotCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICpleHRlbnQ7CisJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmZpOwogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBidHJmc19rZXkga2V5OwotCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtIG9sZDsKLQlpbnQga2VlcDsKLQlpbnQgc2xvdDsKLQlpbnQgYm9va2VuZDsKLQlpbnQgZm91bmRfdHlwZSA9IDA7Ci0JaW50IGZvdW5kX2V4dGVudDsKLQlpbnQgZm91bmRfaW5saW5lOworCXN0cnVjdCBidHJmc19rZXkgbmV3X2tleTsKKwl1NjQgc2VhcmNoX3N0YXJ0ID0gc3RhcnQ7CisJdTY0IGRpc2tfYnl0ZW5yID0gMDsKKwl1NjQgbnVtX2J5dGVzID0gMDsKKwl1NjQgZXh0ZW50X29mZnNldCA9IDA7CisJdTY0IGV4dGVudF9lbmQgPSAwOworCWludCBkZWxfbnIgPSAwOworCWludCBkZWxfc2xvdCA9IDA7CisJaW50IGV4dGVudF90eXBlOwogCWludCByZWNvdzsKIAlpbnQgcmV0OwogCi0JaW5saW5lX2xpbWl0ID0gMDsKIAlpZiAoZHJvcF9jYWNoZSkKIAkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBlbmQgLSAxLCAwKTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwogCXdoaWxlICgxKSB7CiAJCXJlY293ID0gMDsKLQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQlyZXQgPSBidHJmc19sb29rdXBfZmlsZV9leHRlbnQodHJhbnMsIHJvb3QsIHBhdGgsIGlub2RlLT5pX2lubywKIAkJCQkJICAgICAgIHNlYXJjaF9zdGFydCwgLTEpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlpZiAocmV0ID4gMCkgewotCQkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApIHsKLQkJCQlyZXQgPSAwOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJcGF0aC0+c2xvdHNbMF0tLTsKKwkJCWJyZWFrOworCQlpZiAocmV0ID4gMCAmJiBwYXRoLT5zbG90c1swXSA+IDAgJiYgc2VhcmNoX3N0YXJ0ID09IHN0YXJ0KSB7CisJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmtleSwgcGF0aC0+c2xvdHNbMF0gLSAxKTsKKwkJCWlmIChrZXkub2JqZWN0aWQgPT0gaW5vZGUtPmlfaW5vICYmCisJCQkgICAga2V5LnR5cGUgPT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKQorCQkJCXBhdGgtPnNsb3RzWzBdLS07CiAJCX0KLW5leHRfc2xvdDoKLQkJa2VlcCA9IDA7Ci0JCWJvb2tlbmQgPSAwOwotCQlmb3VuZF9leHRlbnQgPSAwOwotCQlmb3VuZF9pbmxpbmUgPSAwOwotCQljb21wcmVzc2lvbiA9IDA7Ci0JCWVuY3J5cHRpb24gPSAwOwotCQlleHRlbnQgPSBOVUxMOwotCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKIAkJcmV0ID0gMDsKLQkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHNsb3QpOwotCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmtleSkgPT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZICYmCi0JCSAgICBrZXkub2Zmc2V0ID49IGVuZCkgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGJ0cmZzX2tleV90eXBlKCZrZXkpID4gQlRSRlNfRVhURU5UX0RBVEFfS0VZIHx8Ci0JCSAgICBrZXkub2JqZWN0aWQgIT0gaW5vZGUtPmlfaW5vKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAocmVjb3cpIHsKLQkJCXNlYXJjaF9zdGFydCA9IG1heChrZXkub2Zmc2V0LCBzdGFydCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmtleSkgPT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKSB7Ci0JCQlleHRlbnQgPSBidHJmc19pdGVtX3B0cihsZWFmLCBzbG90LAotCQkJCQkJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCQkJZm91bmRfdHlwZSA9IGJ0cmZzX2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZXh0ZW50KTsKLQkJCWNvbXByZXNzaW9uID0gYnRyZnNfZmlsZV9leHRlbnRfY29tcHJlc3Npb24obGVhZiwKLQkJCQkJCQkJICAgIGV4dGVudCk7Ci0JCQllbmNyeXB0aW9uID0gYnRyZnNfZmlsZV9leHRlbnRfZW5jcnlwdGlvbihsZWFmLAotCQkJCQkJCQkgIGV4dGVudCk7Ci0JCQlvdGhlcl9lbmNvZGluZyA9IGJ0cmZzX2ZpbGVfZXh0ZW50X290aGVyX2VuY29kaW5nKGxlYWYsCi0JCQkJCQkJCSAgZXh0ZW50KTsKLQkJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX1JFRyB8fAotCQkJICAgIGZvdW5kX3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpIHsKLQkJCQlleHRlbnRfZW5kID0KLQkJCQkgICAgIGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfYnl0ZW5yKGxlYWYsCi0JCQkJCQkJCSAgIGV4dGVudCk7Ci0JCQkJaWYgKGV4dGVudF9lbmQpCi0JCQkJCSpoaW50X2J5dGUgPSBleHRlbnRfZW5kOwotCi0JCQkJZXh0ZW50X2VuZCA9IGtleS5vZmZzZXQgKwotCQkJCSAgICAgYnRyZnNfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGV4dGVudCk7Ci0JCQkJcmFtX2J5dGVzID0gYnRyZnNfZmlsZV9leHRlbnRfcmFtX2J5dGVzKGxlYWYsCi0JCQkJCQkJCWV4dGVudCk7Ci0JCQkJZm91bmRfZXh0ZW50ID0gMTsKLQkJCX0gZWxzZSBpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9JTkxJTkUpIHsKLQkJCQlmb3VuZF9pbmxpbmUgPSAxOwotCQkJCWV4dGVudF9lbmQgPSBrZXkub2Zmc2V0ICsKLQkJCQkgICAgIGJ0cmZzX2ZpbGVfZXh0ZW50X2lubGluZV9sZW4obGVhZiwgZXh0ZW50KTsKK25leHRfc2xvdDoKKwkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQlpZiAocGF0aC0+c2xvdHNbMF0gPj0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZikpIHsKKwkJCUJVR19PTihkZWxfbnIgPiAwKTsKKwkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCQkJaWYgKHJldCA+IDApIHsKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOwogCQkJfQorCQkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQkJcmVjb3cgPSAxOworCQl9CisKKwkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKKwkJaWYgKGtleS5vYmplY3RpZCA+IGlub2RlLT5pX2lubyB8fAorCQkgICAga2V5LnR5cGUgPiBCVFJGU19FWFRFTlRfREFUQV9LRVkgfHwga2V5Lm9mZnNldCA+PSBlbmQpCisJCQlicmVhazsKKworCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CisJCWV4dGVudF90eXBlID0gYnRyZnNfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBmaSk7CisKKwkJaWYgKGV4dGVudF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX1JFRyB8fAorCQkgICAgZXh0ZW50X3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpIHsKKwkJCWRpc2tfYnl0ZW5yID0gYnRyZnNfZmlsZV9leHRlbnRfZGlza19ieXRlbnIobGVhZiwgZmkpOworCQkJbnVtX2J5dGVzID0gYnRyZnNfZmlsZV9leHRlbnRfZGlza19udW1fYnl0ZXMobGVhZiwgZmkpOworCQkJZXh0ZW50X29mZnNldCA9IGJ0cmZzX2ZpbGVfZXh0ZW50X29mZnNldChsZWFmLCBmaSk7CisJCQlleHRlbnRfZW5kID0ga2V5Lm9mZnNldCArCisJCQkJYnRyZnNfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpKTsKKwkJfSBlbHNlIGlmIChleHRlbnRfdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9JTkxJTkUpIHsKKwkJCWV4dGVudF9lbmQgPSBrZXkub2Zmc2V0ICsKKwkJCQlidHJmc19maWxlX2V4dGVudF9pbmxpbmVfbGVuKGxlYWYsIGZpKTsKIAkJfSBlbHNlIHsKKwkJCVdBUk5fT04oMSk7CiAJCQlleHRlbnRfZW5kID0gc2VhcmNoX3N0YXJ0OwogCQl9CiAKLQkJLyogd2UgZm91bmQgbm90aGluZyB3ZSBjYW4gZHJvcCAqLwotCQlpZiAoKCFmb3VuZF9leHRlbnQgJiYgIWZvdW5kX2lubGluZSkgfHwKLQkJICAgIHNlYXJjaF9zdGFydCA+PSBleHRlbnRfZW5kKSB7Ci0JCQlpbnQgbmV4dHJldDsKLQkJCXUzMiBucml0ZW1zOwotCQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwotCQkJaWYgKHNsb3QgPj0gbnJpdGVtcyAtIDEpIHsKLQkJCQluZXh0cmV0ID0gYnRyZnNfbmV4dF9sZWFmKHJvb3QsIHBhdGgpOwotCQkJCWlmIChuZXh0cmV0KQotCQkJCQlnb3RvIG91dDsKLQkJCQlyZWNvdyA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCXBhdGgtPnNsb3RzWzBdKys7Ci0JCQl9CisJCWlmIChleHRlbnRfZW5kIDw9IHNlYXJjaF9zdGFydCkgeworCQkJcGF0aC0+c2xvdHNbMF0rKzsKIAkJCWdvdG8gbmV4dF9zbG90OwogCQl9CiAKLQkJaWYgKGVuZCA8PSBleHRlbnRfZW5kICYmIHN0YXJ0ID49IGtleS5vZmZzZXQgJiYgZm91bmRfaW5saW5lKQotCQkJKmhpbnRfYnl0ZSA9IEVYVEVOVF9NQVBfSU5MSU5FOwotCi0JCWlmIChmb3VuZF9leHRlbnQpIHsKLQkJCXJlYWRfZXh0ZW50X2J1ZmZlcihsZWFmLCAmb2xkLCAodW5zaWduZWQgbG9uZylleHRlbnQsCi0JCQkJCSAgIHNpemVvZihvbGQpKTsKLQkJfQotCi0JCWlmIChlbmQgPCBleHRlbnRfZW5kICYmIGVuZCA+PSBrZXkub2Zmc2V0KSB7Ci0JCQlib29rZW5kID0gMTsKLQkJCWlmIChmb3VuZF9pbmxpbmUgJiYgc3RhcnQgPD0ga2V5Lm9mZnNldCkKLQkJCQlrZWVwID0gMTsKLQkJfQotCi0JCWlmIChib29rZW5kICYmIGZvdW5kX2V4dGVudCkgewotCQkJaWYgKGxvY2tlZF9lbmQgPCBleHRlbnRfZW5kKSB7Ci0JCQkJcmV0ID0gdHJ5X2xvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCWxvY2tlZF9lbmQsIGV4dGVudF9lbmQgLSAxLAotCQkJCQkJR0ZQX05PRlMpOwotCQkJCWlmICghcmV0KSB7Ci0JCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQkJCQkJbG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkJbG9ja2VkX2VuZCwgZXh0ZW50X2VuZCAtIDEsCi0JCQkJCQlHRlBfTk9GUyk7Ci0JCQkJCWxvY2tlZF9lbmQgPSBleHRlbnRfZW5kOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJbG9ja2VkX2VuZCA9IGV4dGVudF9lbmQ7Ci0JCQl9Ci0JCQlkaXNrX2J5dGVuciA9IGxlNjRfdG9fY3B1KG9sZC5kaXNrX2J5dGVucik7Ci0JCQlpZiAoZGlza19ieXRlbnIgIT0gMCkgewotCQkJCXJldCA9IGJ0cmZzX2luY19leHRlbnRfcmVmKHRyYW5zLCByb290LAotCQkJCQkgICBkaXNrX2J5dGVuciwKLQkJCQkJICAgbGU2NF90b19jcHUob2xkLmRpc2tfbnVtX2J5dGVzKSwgMCwKLQkJCQkJICAgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCSAgIGtleS5vYmplY3RpZCwga2V5Lm9mZnNldCAtCi0JCQkJCSAgIGxlNjRfdG9fY3B1KG9sZC5vZmZzZXQpKTsKLQkJCQlCVUdfT04ocmV0KTsKLQkJCX0KLQkJfQotCi0JCWlmIChmb3VuZF9pbmxpbmUpIHsKLQkJCXU2NCBtYXNrID0gcm9vdC0+c2VjdG9yc2l6ZSAtIDE7Ci0JCQlzZWFyY2hfc3RhcnQgPSAoZXh0ZW50X2VuZCArIG1hc2spICYgfm1hc2s7Ci0JCX0gZWxzZQotCQkJc2VhcmNoX3N0YXJ0ID0gZXh0ZW50X2VuZDsKLQotCQkvKiB0cnVuY2F0ZSBleGlzdGluZyBleHRlbnQgKi8KLQkJaWYgKHN0YXJ0ID4ga2V5Lm9mZnNldCkgewotCQkJdTY0IG5ld19udW07Ci0JCQl1NjQgb2xkX251bTsKLQkJCWtlZXAgPSAxOwotCQkJV0FSTl9PTihzdGFydCAmIChyb290LT5zZWN0b3JzaXplIC0gMSkpOwotCQkJaWYgKGZvdW5kX2V4dGVudCkgewotCQkJCW5ld19udW0gPSBzdGFydCAtIGtleS5vZmZzZXQ7Ci0JCQkJb2xkX251bSA9IGJ0cmZzX2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLAotCQkJCQkJCQkgICAgICBleHRlbnQpOwotCQkJCSpoaW50X2J5dGUgPQotCQkJCQlidHJmc19maWxlX2V4dGVudF9kaXNrX2J5dGVucihsZWFmLAotCQkJCQkJCQkgICAgICBleHRlbnQpOwotCQkJCWlmIChidHJmc19maWxlX2V4dGVudF9kaXNrX2J5dGVucihsZWFmLAotCQkJCQkJCQkgIGV4dGVudCkpIHsKLQkJCQkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBvbGRfbnVtIC0KLQkJCQkJCQluZXdfbnVtKTsKLQkJCQl9Ci0JCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLAotCQkJCQkJCWV4dGVudCwgbmV3X251bSk7Ci0JCQkJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7Ci0JCQl9IGVsc2UgaWYgKGtleS5vZmZzZXQgPCBpbmxpbmVfbGltaXQgJiYKLQkJCQkgICAoZW5kID4gZXh0ZW50X2VuZCkgJiYKLQkJCQkgICAoaW5saW5lX2xpbWl0IDwgZXh0ZW50X2VuZCkpIHsKLQkJCQl1MzIgbmV3X3NpemU7Ci0JCQkJbmV3X3NpemUgPSBidHJmc19maWxlX2V4dGVudF9jYWxjX2lubGluZV9zaXplKAotCQkJCQkJICAgaW5saW5lX2xpbWl0IC0ga2V5Lm9mZnNldCk7Ci0JCQkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBleHRlbnRfZW5kIC0KLQkJCQkJCWlubGluZV9saW1pdCk7Ci0JCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3JhbV9ieXRlcyhsZWFmLCBleHRlbnQsCi0JCQkJCQkJbmV3X3NpemUpOwotCQkJCWlmICghY29tcHJlc3Npb24gJiYgIWVuY3J5cHRpb24pIHsKLQkJCQkJYnRyZnNfdHJ1bmNhdGVfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwKLQkJCQkJCQkgICAgbmV3X3NpemUsIDEpOwotCQkJCX0KLQkJCX0KLQkJfQotCQkvKiBkZWxldGUgdGhlIGVudGlyZSBleHRlbnQgKi8KLQkJaWYgKCFrZWVwKSB7Ci0JCQlpZiAoZm91bmRfaW5saW5lKQotCQkJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgZXh0ZW50X2VuZCAtCi0JCQkJCQlrZXkub2Zmc2V0KTsKLQkJCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKLQkJCS8qIFRPRE8gdXBkYXRlIHByb2dyZXNzIG1hcmtlciBhbmQgcmV0dXJuICovCi0JCQlCVUdfT04ocmV0KTsKLQkJCWV4dGVudCA9IE5VTEw7CisJCXNlYXJjaF9zdGFydCA9IG1heChrZXkub2Zmc2V0LCBzdGFydCk7CisJCWlmIChyZWNvdykgewogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJLyogdGhlIGV4dGVudCB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJCQljb250aW51ZTsKIAkJfQotCQlpZiAoYm9va2VuZCAmJiBmb3VuZF9pbmxpbmUgJiYgc3RhcnQgPD0ga2V5Lm9mZnNldCkgewotCQkJdTMyIG5ld19zaXplOwotCQkJbmV3X3NpemUgPSBidHJmc19maWxlX2V4dGVudF9jYWxjX2lubGluZV9zaXplKAotCQkJCQkJICAgZXh0ZW50X2VuZCAtIGVuZCk7Ci0JCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIGVuZCAtIGtleS5vZmZzZXQpOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3JhbV9ieXRlcyhsZWFmLCBleHRlbnQsCi0JCQkJCQkJbmV3X3NpemUpOwotCQkJaWYgKCFjb21wcmVzc2lvbiAmJiAhZW5jcnlwdGlvbikKLQkJCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pdGVtKHRyYW5zLCByb290LCBwYXRoLAotCQkJCQkJCSAgbmV3X3NpemUsIDApOwotCQkJQlVHX09OKHJldCk7Ci0JCX0KLQkJLyogY3JlYXRlIGJvb2tlbmQsIHNwbGl0dGluZyB0aGUgZXh0ZW50IGluIHR3byAqLwotCQlpZiAoYm9va2VuZCAmJiBmb3VuZF9leHRlbnQpIHsKLQkJCXN0cnVjdCBidHJmc19rZXkgaW5zOwotCQkJaW5zLm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOwotCQkJaW5zLm9mZnNldCA9IGVuZDsKLQkJCWJ0cmZzX3NldF9rZXlfdHlwZSgmaW5zLCBCVFJGU19FWFRFTlRfREFUQV9LRVkpOwogCi0JCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7Ci0JCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7Ci0JCQlyZXQgPSBidHJmc19pbnNlcnRfZW1wdHlfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgJmlucywKLQkJCQkJCSAgICAgIHNpemVvZigqZXh0ZW50KSk7Ci0JCQlCVUdfT04ocmV0KTsKKwkJLyoKKwkJICogICAgIHwgLSByYW5nZSB0byBkcm9wIC0gfAorCQkgKiAgfCAtLS0tLS0tLSBleHRlbnQgLS0tLS0tLS0gfAorCQkgKi8KKwkJaWYgKHN0YXJ0ID4ga2V5Lm9mZnNldCAmJiBlbmQgPCBleHRlbnRfZW5kKSB7CisJCQlCVUdfT04oZGVsX25yID4gMCk7CisJCQlCVUdfT04oZXh0ZW50X3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfSU5MSU5FKTsKKworCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOworCQkJbmV3X2tleS5vZmZzZXQgPSBzdGFydDsKKwkJCXJldCA9IGJ0cmZzX2R1cGxpY2F0ZV9pdGVtKHRyYW5zLCByb290LCBwYXRoLAorCQkJCQkJICAgJm5ld19rZXkpOworCQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHJldCA8IDApCisJCQkJYnJlYWs7CiAKIAkJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQkJCWV4dGVudCA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAotCQkJCQkJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCQkJd3JpdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCAmb2xkLAotCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpZXh0ZW50LCBzaXplb2Yob2xkKSk7CisJCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdIC0gMSwKKwkJCQkJICAgIHN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtKTsKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJc3RhcnQgLSBrZXkub2Zmc2V0KTsKIAotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2NvbXByZXNzaW9uKGxlYWYsIGV4dGVudCwKLQkJCQkJCQkgIGNvbXByZXNzaW9uKTsKLQkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9lbmNyeXB0aW9uKGxlYWYsIGV4dGVudCwKLQkJCQkJCQkgZW5jcnlwdGlvbik7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfb3RoZXJfZW5jb2RpbmcobGVhZiwgZXh0ZW50LAotCQkJCQkJCSAgICAgb3RoZXJfZW5jb2RpbmcpOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X29mZnNldChsZWFmLCBleHRlbnQsCi0JCQkJICAgIGxlNjRfdG9fY3B1KG9sZC5vZmZzZXQpICsgZW5kIC0ga2V5Lm9mZnNldCk7Ci0JCQlXQVJOX09OKGxlNjRfdG9fY3B1KG9sZC5udW1fYnl0ZXMpIDwKLQkJCQkoZXh0ZW50X2VuZCAtIGVuZCkpOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBleHRlbnQsCi0JCQkJCQkJZXh0ZW50X2VuZCAtIGVuZCk7CisJCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwogCi0JCQkvKgotCQkJICogc2V0IHRoZSByYW0gYnl0ZXMgdG8gdGhlIHNpemUgb2YgdGhlIGZ1bGwgZXh0ZW50Ci0JCQkgKiBiZWZvcmUgc3BsaXR0aW5nLiAgVGhpcyBpcyBhIHdvcnN0IGNhc2UgZmxhZywKLQkJCSAqIGJ1dCBpdHMgdGhlIGJlc3Qgd2UgY2FuIGRvIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdwotCQkJICogaG93IHNwbGl0dGluZyBhZmZlY3RzIGNvbXByZXNzaW9uCi0JCQkgKi8KLQkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9yYW1fYnl0ZXMobGVhZiwgZXh0ZW50LAotCQkJCQkJCXJhbV9ieXRlcyk7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBleHRlbnQsIGZvdW5kX3R5cGUpOworCQkJZXh0ZW50X29mZnNldCArPSBzdGFydCAtIGtleS5vZmZzZXQ7CisJCQlidHJmc19zZXRfZmlsZV9leHRlbnRfb2Zmc2V0KGxlYWYsIGZpLCBleHRlbnRfb2Zmc2V0KTsKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJZXh0ZW50X2VuZCAtIHN0YXJ0KTsKKwkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCi0JCQlidHJmc191bmxvY2tfdXBfc2FmZShwYXRoLCAxKTsKLQkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHBhdGgtPm5vZGVzWzBdKTsKLQkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKHBhdGgtPm5vZGVzWzBdKTsKLQotCQkJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAwOwotCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJaWYgKGRpc2tfYnl0ZW5yICE9IDApCi0JCQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBleHRlbnRfZW5kIC0gZW5kKTsKLQkJfQotCi0JCWlmIChmb3VuZF9leHRlbnQgJiYgIWtlZXApIHsKLQkJCXU2NCBvbGRfZGlza19ieXRlbnIgPSBsZTY0X3RvX2NwdShvbGQuZGlza19ieXRlbnIpOwotCi0JCQlpZiAob2xkX2Rpc2tfYnl0ZW5yICE9IDApIHsKLQkJCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsCi0JCQkJCQlsZTY0X3RvX2NwdShvbGQubnVtX2J5dGVzKSk7Ci0JCQkJcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsCi0JCQkJCQlvbGRfZGlza19ieXRlbnIsCi0JCQkJCQlsZTY0X3RvX2NwdShvbGQuZGlza19udW1fYnl0ZXMpLAotCQkJCQkJMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCQlrZXkub2JqZWN0aWQsIGtleS5vZmZzZXQgLQotCQkJCQkJbGU2NF90b19jcHUob2xkLm9mZnNldCkpOworCQkJaWYgKGRpc2tfYnl0ZW5yID4gMCkgeworCQkJCXJldCA9IGJ0cmZzX2luY19leHRlbnRfcmVmKHRyYW5zLCByb290LAorCQkJCQkJZGlza19ieXRlbnIsIG51bV9ieXRlcywgMCwKKwkJCQkJCXJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAorCQkJCQkJbmV3X2tleS5vYmplY3RpZCwKKwkJCQkJCXN0YXJ0IC0gZXh0ZW50X29mZnNldCk7CiAJCQkJQlVHX09OKHJldCk7Ci0JCQkJKmhpbnRfYnl0ZSA9IG9sZF9kaXNrX2J5dGVucjsKKwkJCQkqaGludF9ieXRlID0gZGlza19ieXRlbnI7CiAJCQl9CisJCQlrZXkub2Zmc2V0ID0gc3RhcnQ7CisJCX0KKwkJLyoKKwkJICogIHwgLS0tLSByYW5nZSB0byBkcm9wIC0tLS0tIHwKKwkJICogICAgICB8IC0tLS0tLS0tIGV4dGVudCAtLS0tLS0tLSB8CisJCSAqLworCQlpZiAoc3RhcnQgPD0ga2V5Lm9mZnNldCAmJiBlbmQgPCBleHRlbnRfZW5kKSB7CisJCQlCVUdfT04oZXh0ZW50X3R5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfSU5MSU5FKTsKKworCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOworCQkJbmV3X2tleS5vZmZzZXQgPSBlbmQ7CisJCQlidHJmc19zZXRfaXRlbV9rZXlfc2FmZSh0cmFucywgcm9vdCwgcGF0aCwgJm5ld19rZXkpOworCisJCQlleHRlbnRfb2Zmc2V0ICs9IGVuZCAtIGtleS5vZmZzZXQ7CisJCQlidHJmc19zZXRfZmlsZV9leHRlbnRfb2Zmc2V0KGxlYWYsIGZpLCBleHRlbnRfb2Zmc2V0KTsKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJZXh0ZW50X2VuZCAtIGVuZCk7CisJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKKwkJCWlmIChkaXNrX2J5dGVuciA+IDApIHsKKwkJCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIGVuZCAtIGtleS5vZmZzZXQpOworCQkJCSpoaW50X2J5dGUgPSBkaXNrX2J5dGVucjsKKwkJCX0KKwkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHNlYXJjaF9zdGFydCA+PSBlbmQpIHsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKKwkJc2VhcmNoX3N0YXJ0ID0gZXh0ZW50X2VuZDsKKwkJLyoKKwkJICogICAgICAgfCAtLS0tIHJhbmdlIHRvIGRyb3AgLS0tLS0gfAorCQkgKiAgfCAtLS0tLS0tLSBleHRlbnQgLS0tLS0tLS0gfAorCQkgKi8KKwkJaWYgKHN0YXJ0ID4ga2V5Lm9mZnNldCAmJiBlbmQgPj0gZXh0ZW50X2VuZCkgeworCQkJQlVHX09OKGRlbF9uciA+IDApOworCQkJQlVHX09OKGV4dGVudF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX0lOTElORSk7CisKKwkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQkJc3RhcnQgLSBrZXkub2Zmc2V0KTsKKwkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOworCQkJaWYgKGRpc2tfYnl0ZW5yID4gMCkgeworCQkJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgZXh0ZW50X2VuZCAtIHN0YXJ0KTsKKwkJCQkqaGludF9ieXRlID0gZGlza19ieXRlbnI7CisJCQl9CisJCQlpZiAoZW5kID09IGV4dGVudF9lbmQpCisJCQkJYnJlYWs7CisKKwkJCXBhdGgtPnNsb3RzWzBdKys7CisJCQlnb3RvIG5leHRfc2xvdDsKIAkJfQorCisJCS8qCisJCSAqICB8IC0tLS0gcmFuZ2UgdG8gZHJvcCAtLS0tLSB8CisJCSAqICAgIHwgLS0tLS0tIGV4dGVudCAtLS0tLS0gfAorCQkgKi8KKwkJaWYgKHN0YXJ0IDw9IGtleS5vZmZzZXQgJiYgZW5kID49IGV4dGVudF9lbmQpIHsKKwkJCWlmIChkZWxfbnIgPT0gMCkgeworCQkJCWRlbF9zbG90ID0gcGF0aC0+c2xvdHNbMF07CisJCQkJZGVsX25yID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJQlVHX09OKGRlbF9zbG90ICsgZGVsX25yICE9IHBhdGgtPnNsb3RzWzBdKTsKKwkJCQlkZWxfbnIrKzsKKwkJCX0KKworCQkJaWYgKGV4dGVudF90eXBlID09IEJUUkZTX0ZJTEVfRVhURU5UX0lOTElORSkgeworCQkJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwKKwkJCQkJCWV4dGVudF9lbmQgLSBrZXkub2Zmc2V0KTsKKwkJCQlleHRlbnRfZW5kID0gQUxJR04oZXh0ZW50X2VuZCwKKwkJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUpOworCQkJfSBlbHNlIGlmIChkaXNrX2J5dGVuciA+IDApIHsKKwkJCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwKKwkJCQkJCWRpc2tfYnl0ZW5yLCBudW1fYnl0ZXMsIDAsCisJCQkJCQlyb290LT5yb290X2tleS5vYmplY3RpZCwKKwkJCQkJCWtleS5vYmplY3RpZCwga2V5Lm9mZnNldCAtCisJCQkJCQlleHRlbnRfb2Zmc2V0KTsKKwkJCQlCVUdfT04ocmV0KTsKKwkJCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsCisJCQkJCQlleHRlbnRfZW5kIC0ga2V5Lm9mZnNldCk7CisJCQkJKmhpbnRfYnl0ZSA9IGRpc2tfYnl0ZW5yOworCQkJfQorCisJCQlpZiAoZW5kID09IGV4dGVudF9lbmQpCisJCQkJYnJlYWs7CisKKwkJCWlmIChwYXRoLT5zbG90c1swXSArIDEgPCBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKSkgeworCQkJCXBhdGgtPnNsb3RzWzBdKys7CisJCQkJZ290byBuZXh0X3Nsb3Q7CisJCQl9CisKKwkJCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwgZGVsX3Nsb3QsCisJCQkJCSAgICAgIGRlbF9ucik7CisJCQlCVUdfT04ocmV0KTsKKworCQkJZGVsX25yID0gMDsKKwkJCWRlbF9zbG90ID0gMDsKKworCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCQkJY29udGludWU7CisJCX0KKworCQlCVUdfT04oMSk7CiAJfQotb3V0OgorCisJaWYgKGRlbF9uciA+IDApIHsKKwkJcmV0ID0gYnRyZnNfZGVsX2l0ZW1zKHRyYW5zLCByb290LCBwYXRoLCBkZWxfc2xvdCwgZGVsX25yKTsKKwkJQlVHX09OKHJldCk7CisJfQorCiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCWlmIChsb2NrZWRfZW5kID4gb3JpZ19sb2NrZWRfZW5kKSB7Ci0JCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBvcmlnX2xvY2tlZF9lbmQsCi0JCQkgICAgICBsb2NrZWRfZW5kIC0gMSwgR0ZQX05PRlMpOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjAsMjMgKzU0NCwyMyBAQAogICogdHdvIG9yIHRocmVlLgogICovCiBpbnQgYnRyZnNfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogeworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmZpOwogCXN0cnVjdCBidHJmc19rZXkga2V5OworCXN0cnVjdCBidHJmc19rZXkgbmV3X2tleTsKIAl1NjQgYnl0ZW5yOwogCXU2NCBudW1fYnl0ZXM7CiAJdTY0IGV4dGVudF9lbmQ7CiAJdTY0IG9yaWdfb2Zmc2V0OwogCXU2NCBvdGhlcl9zdGFydDsKIAl1NjQgb3RoZXJfZW5kOwotCXU2NCBzcGxpdCA9IHN0YXJ0OwotCXU2NCBsb2NrZWRfZW5kID0gZW5kOwotCWludCBleHRlbnRfdHlwZTsKLQlpbnQgc3BsaXRfZW5kID0gMTsKKwl1NjQgc3BsaXQ7CisJaW50IGRlbF9uciA9IDA7CisJaW50IGRlbF9zbG90ID0gMDsKIAlpbnQgcmV0OwogCiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBlbmQgLSAxLCAwKTsKQEAgLTY0NCwxMiArNTY4LDEwIEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOwogYWdhaW46CisJc3BsaXQgPSBzdGFydDsKIAlrZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJa2V5LnR5cGUgPSBCVFJGU19FWFRFTlRfREFUQV9LRVk7Ci0JaWYgKHNwbGl0ID09IHN0YXJ0KQotCQlrZXkub2Zmc2V0ID0gc3BsaXQ7Ci0JZWxzZQotCQlrZXkub2Zmc2V0ID0gc3BsaXQgLSAxOworCWtleS5vZmZzZXQgPSBzcGxpdDsKIAogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJaWYgKHJldCA+IDAgJiYgcGF0aC0+c2xvdHNbMF0gPiAwKQpAQCAtNjYxLDggKzU4Myw4IEBACiAJICAgICAgIGtleS50eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7Ci0JZXh0ZW50X3R5cGUgPSBidHJmc19maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpKTsKLQlCVUdfT04oZXh0ZW50X3R5cGUgIT0gQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpOworCUJVR19PTihidHJmc19maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpKSAhPQorCSAgICAgICBCVFJGU19GSUxFX0VYVEVOVF9QUkVBTExPQyk7CiAJZXh0ZW50X2VuZCA9IGtleS5vZmZzZXQgKyBidHJmc19maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmkpOwogCUJVR19PTihrZXkub2Zmc2V0ID4gc3RhcnQgfHwgZXh0ZW50X2VuZCA8IGVuZCk7CiAKQEAgLTY3MCwxNTAgKzU5Miw5MSBAQAogCW51bV9ieXRlcyA9IGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfbnVtX2J5dGVzKGxlYWYsIGZpKTsKIAlvcmlnX29mZnNldCA9IGtleS5vZmZzZXQgLSBidHJmc19maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmkpOwogCi0JaWYgKGtleS5vZmZzZXQgPT0gc3RhcnQpCi0JCXNwbGl0ID0gZW5kOworCXdoaWxlIChzdGFydCA+IGtleS5vZmZzZXQgfHwgZW5kIDwgZXh0ZW50X2VuZCkgeworCQlpZiAoa2V5Lm9mZnNldCA9PSBzdGFydCkKKwkJCXNwbGl0ID0gZW5kOwogCi0JaWYgKGtleS5vZmZzZXQgPT0gc3RhcnQgJiYgZXh0ZW50X2VuZCA9PSBlbmQpIHsKLQkJaW50IGRlbF9uciA9IDA7Ci0JCWludCBkZWxfc2xvdCA9IDA7Ci0JCW90aGVyX3N0YXJ0ID0gZW5kOwotCQlvdGhlcl9lbmQgPSAwOwotCQlpZiAoZXh0ZW50X21lcmdlYWJsZShsZWFmLCBwYXRoLT5zbG90c1swXSArIDEsIGlub2RlLT5pX2lubywKLQkJCQkgICAgIGJ5dGVuciwgJm90aGVyX3N0YXJ0LCAmb3RoZXJfZW5kKSkgewotCQkJZXh0ZW50X2VuZCA9IG90aGVyX2VuZDsKLQkJCWRlbF9zbG90ID0gcGF0aC0+c2xvdHNbMF0gKyAxOwotCQkJZGVsX25yKys7Ci0JCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsCi0JCQkJCQkwLCByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkJCWlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOwotCQkJQlVHX09OKHJldCk7CisJCW1lbWNweSgmbmV3X2tleSwgJmtleSwgc2l6ZW9mKG5ld19rZXkpKTsKKwkJbmV3X2tleS5vZmZzZXQgPSBzcGxpdDsKKwkJcmV0ID0gYnRyZnNfZHVwbGljYXRlX2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsICZuZXdfa2V5KTsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CisJCQlnb3RvIGFnYWluOwogCQl9Ci0JCW90aGVyX3N0YXJ0ID0gMDsKLQkJb3RoZXJfZW5kID0gc3RhcnQ7Ci0JCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdIC0gMSwgaW5vZGUtPmlfaW5vLAotCQkJCSAgICAgYnl0ZW5yLCAmb3RoZXJfc3RhcnQsICZvdGhlcl9lbmQpKSB7Ci0JCQlrZXkub2Zmc2V0ID0gb3RoZXJfc3RhcnQ7Ci0JCQlkZWxfc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQkJZGVsX25yKys7Ci0JCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsCi0JCQkJCQkwLCByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkJCWlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOwotCQkJQlVHX09OKHJldCk7Ci0JCX0KLQkJc3BsaXRfZW5kID0gMDsKLQkJaWYgKGRlbF9uciA9PSAwKSB7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfdHlwZShsZWFmLCBmaSwKLQkJCQkJCSAgIEJUUkZTX0ZJTEVfRVhURU5UX1JFRyk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KKwkJQlVHX09OKHJldCA8IDApOwogCi0JCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgZGVsX3Nsb3QgLSAxLAorCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0gLSAxLAogCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7Ci0JCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLCBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOwogCQlidHJmc19zZXRfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpLAotCQkJCQkJZXh0ZW50X2VuZCAtIGtleS5vZmZzZXQpOworCQkJCQkJc3BsaXQgLSBrZXkub2Zmc2V0KTsKKworCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CisKKwkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X29mZnNldChsZWFmLCBmaSwgc3BsaXQgLSBvcmlnX29mZnNldCk7CisJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCQlleHRlbnRfZW5kIC0gc3BsaXQpOwogCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAotCQlyZXQgPSBidHJmc19kZWxfaXRlbXModHJhbnMsIHJvb3QsIHBhdGgsIGRlbF9zbG90LCBkZWxfbnIpOworCQlyZXQgPSBidHJmc19pbmNfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDAsCisJCQkJCSAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAorCQkJCQkgICBpbm9kZS0+aV9pbm8sIG9yaWdfb2Zmc2V0KTsKIAkJQlVHX09OKHJldCk7Ci0JCWdvdG8gcmVsZWFzZTsKLQl9IGVsc2UgaWYgKHNwbGl0ID09IHN0YXJ0KSB7Ci0JCWlmIChsb2NrZWRfZW5kIDwgZXh0ZW50X2VuZCkgewotCQkJcmV0ID0gdHJ5X2xvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJbG9ja2VkX2VuZCwgZXh0ZW50X2VuZCAtIDEsIEdGUF9OT0ZTKTsKLQkJCWlmICghcmV0KSB7Ci0JCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJCWxvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJbG9ja2VkX2VuZCwgZXh0ZW50X2VuZCAtIDEsIEdGUF9OT0ZTKTsKLQkJCQlsb2NrZWRfZW5kID0gZXh0ZW50X2VuZDsKLQkJCQlnb3RvIGFnYWluOwotCQkJfQotCQkJbG9ja2VkX2VuZCA9IGV4dGVudF9lbmQ7Ci0JCX0KLQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgc3BsaXQgLSBrZXkub2Zmc2V0KTsKLQl9IGVsc2UgIHsKLQkJQlVHX09OKGtleS5vZmZzZXQgIT0gc3RhcnQpOwotCQlrZXkub2Zmc2V0ID0gc3BsaXQ7Ci0JCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmksIGtleS5vZmZzZXQgLQotCQkJCQkgICAgIG9yaWdfb2Zmc2V0KTsKLQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgZXh0ZW50X2VuZCAtIHNwbGl0KTsKLQkJYnRyZnNfc2V0X2l0ZW1fa2V5X3NhZmUodHJhbnMsIHJvb3QsIHBhdGgsICZrZXkpOwotCQlleHRlbnRfZW5kID0gc3BsaXQ7Ci0JfQogCi0JaWYgKGV4dGVudF9lbmQgPT0gZW5kKSB7Ci0JCXNwbGl0X2VuZCA9IDA7Ci0JCWV4dGVudF90eXBlID0gQlRSRlNfRklMRV9FWFRFTlRfUkVHOwotCX0KLQlpZiAoZXh0ZW50X2VuZCA9PSBlbmQgJiYgc3BsaXQgPT0gc3RhcnQpIHsKLQkJb3RoZXJfc3RhcnQgPSBlbmQ7Ci0JCW90aGVyX2VuZCA9IDA7Ci0JCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdICsgMSwgaW5vZGUtPmlfaW5vLAotCQkJCSAgICAgYnl0ZW5yLCAmb3RoZXJfc3RhcnQsICZvdGhlcl9lbmQpKSB7Ci0JCQlwYXRoLT5zbG90c1swXSsrOwotCQkJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKLQkJCQkJICAgIHN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtKTsKLQkJCWtleS5vZmZzZXQgPSBzcGxpdDsKLQkJCWJ0cmZzX3NldF9pdGVtX2tleV9zYWZlKHRyYW5zLCByb290LCBwYXRoLCAma2V5KTsKLQkJCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmksIGtleS5vZmZzZXQgLQotCQkJCQkJICAgICBvcmlnX29mZnNldCk7Ci0JCQlidHJmc19zZXRfZmlsZV9leHRlbnRfbnVtX2J5dGVzKGxlYWYsIGZpLAotCQkJCQkJCW90aGVyX2VuZCAtIHNwbGl0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQlpZiAoZXh0ZW50X2VuZCA9PSBlbmQgJiYgc3BsaXQgPT0gZW5kKSB7Ci0JCW90aGVyX3N0YXJ0ID0gMDsKLQkJb3RoZXJfZW5kID0gc3RhcnQ7Ci0JCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdIC0gMSAsIGlub2RlLT5pX2lubywKLQkJCQkgICAgIGJ5dGVuciwgJm90aGVyX3N0YXJ0LCAmb3RoZXJfZW5kKSkgeworCQlpZiAoc3BsaXQgPT0gc3RhcnQpIHsKKwkJCWtleS5vZmZzZXQgPSBzdGFydDsKKwkJfSBlbHNlIHsKKwkJCUJVR19PTihzdGFydCAhPSBrZXkub2Zmc2V0KTsKIAkJCXBhdGgtPnNsb3RzWzBdLS07Ci0JCQlmaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAotCQkJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgZXh0ZW50X2VuZCAtCi0JCQkJCQkJb3RoZXJfc3RhcnQpOwotCQkJZ290byBkb25lOworCQkJZXh0ZW50X2VuZCA9IGVuZDsKIAkJfQogCX0KIAotCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwotCi0JcmV0ID0gYnRyZnNfaW5jX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAwLAotCQkJCSAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCSAgIGlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOwotCUJVR19PTihyZXQpOwotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQotCWtleS5vZmZzZXQgPSBzdGFydDsKLQlyZXQgPSBidHJmc19pbnNlcnRfZW1wdHlfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgJmtleSwgc2l6ZW9mKCpmaSkpOwotCUJVR19PTihyZXQpOwotCi0JbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwogCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCiAJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwotCWJ0cmZzX3NldF9maWxlX2V4dGVudF9nZW5lcmF0aW9uKGxlYWYsIGZpLCB0cmFucy0+dHJhbnNpZCk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZmksIGV4dGVudF90eXBlKTsKLQlidHJmc19zZXRfZmlsZV9leHRlbnRfZGlza19ieXRlbnIobGVhZiwgZmksIGJ5dGVucik7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2Rpc2tfbnVtX2J5dGVzKGxlYWYsIGZpLCBudW1fYnl0ZXMpOwotCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vZmZzZXQobGVhZiwgZmksIGtleS5vZmZzZXQgLSBvcmlnX29mZnNldCk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X251bV9ieXRlcyhsZWFmLCBmaSwgZXh0ZW50X2VuZCAtIGtleS5vZmZzZXQpOwotCWJ0cmZzX3NldF9maWxlX2V4dGVudF9yYW1fYnl0ZXMobGVhZiwgZmksIG51bV9ieXRlcyk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2NvbXByZXNzaW9uKGxlYWYsIGZpLCAwKTsKLQlidHJmc19zZXRfZmlsZV9leHRlbnRfZW5jcnlwdGlvbihsZWFmLCBmaSwgMCk7Ci0JYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X290aGVyX2VuY29kaW5nKGxlYWYsIGZpLCAwKTsKLWRvbmU6CisKKwlvdGhlcl9zdGFydCA9IGVuZDsKKwlvdGhlcl9lbmQgPSAwOworCWlmIChleHRlbnRfbWVyZ2VhYmxlKGxlYWYsIHBhdGgtPnNsb3RzWzBdICsgMSwgaW5vZGUtPmlfaW5vLAorCQkJICAgICBieXRlbnIsICZvdGhlcl9zdGFydCwgJm90aGVyX2VuZCkpIHsKKwkJZXh0ZW50X2VuZCA9IG90aGVyX2VuZDsKKwkJZGVsX3Nsb3QgPSBwYXRoLT5zbG90c1swXSArIDE7CisJCWRlbF9ucisrOworCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsCisJCQkJCTAsIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAorCQkJCQlpbm9kZS0+aV9pbm8sIG9yaWdfb2Zmc2V0KTsKKwkJQlVHX09OKHJldCk7CisJfQorCW90aGVyX3N0YXJ0ID0gMDsKKwlvdGhlcl9lbmQgPSBzdGFydDsKKwlpZiAoZXh0ZW50X21lcmdlYWJsZShsZWFmLCBwYXRoLT5zbG90c1swXSAtIDEsIGlub2RlLT5pX2lubywKKwkJCSAgICAgYnl0ZW5yLCAmb3RoZXJfc3RhcnQsICZvdGhlcl9lbmQpKSB7CisJCWtleS5vZmZzZXQgPSBvdGhlcl9zdGFydDsKKwkJZGVsX3Nsb3QgPSBwYXRoLT5zbG90c1swXTsKKwkJZGVsX25yKys7CisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcywKKwkJCQkJMCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCisJCQkJCWlub2RlLT5pX2lubywgb3JpZ19vZmZzZXQpOworCQlCVUdfT04ocmV0KTsKKwl9CisJaWYgKGRlbF9uciA9PSAwKSB7CisJCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLAorCQkJCQkgICBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOworCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKKwkJZ290byBvdXQ7CisJfQorCisJZmkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBkZWxfc2xvdCAtIDEsCisJCQkgICAgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOworCWJ0cmZzX3NldF9maWxlX2V4dGVudF90eXBlKGxlYWYsIGZpLCBCVFJGU19GSUxFX0VYVEVOVF9SRUcpOworCWJ0cmZzX3NldF9maWxlX2V4dGVudF9udW1fYnl0ZXMobGVhZiwgZmksCisJCQkJCWV4dGVudF9lbmQgLSBrZXkub2Zmc2V0KTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAotcmVsZWFzZToKLQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7Ci0JaWYgKHNwbGl0X2VuZCAmJiBzcGxpdCA9PSBzdGFydCkgewotCQlzcGxpdCA9IGVuZDsKLQkJZ290byBhZ2FpbjsKLQl9Ci0JaWYgKGxvY2tlZF9lbmQgPiBlbmQpIHsKLQkJdW5sb2NrX2V4dGVudCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIGVuZCwgbG9ja2VkX2VuZCAtIDEsCi0JCQkgICAgICBHRlBfTk9GUyk7Ci0JfQorCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwgZGVsX3Nsb3QsIGRlbF9ucik7CisJQlVHX09OKHJldCk7CitvdXQ6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggYjNhZDE2OC4uNTQ0MGJhYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC04OCwxMyArODgsMTQgQEAKIAkJCQkgICB1NjQgc3RhcnQsIHU2NCBlbmQsIGludCAqcGFnZV9zdGFydGVkLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgKm5yX3dyaXR0ZW4sIGludCB1bmxvY2spOwogCi1zdGF0aWMgaW50IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgIHN0cnVjdCBpbm9kZSAqZGlyKQorc3RhdGljIGludCBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgIHN0cnVjdCBpbm9kZSAqZGlyKQogewogCWludCBlcnI7CiAKLQllcnIgPSBidHJmc19pbml0X2FjbChpbm9kZSwgZGlyKTsKKwllcnIgPSBidHJmc19pbml0X2FjbCh0cmFucywgaW5vZGUsIGRpcik7CiAJaWYgKCFlcnIpCi0JCWVyciA9IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQoaW5vZGUsIGRpcik7CisJCWVyciA9IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQodHJhbnMsIGlub2RlLCBkaXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4OCw4ICsxODksMTggQEAKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAKKwkvKgorCSAqIHdlJ3JlIGFuIGlubGluZSBleHRlbnQsIHNvIG5vYm9keSBjYW4KKwkgKiBleHRlbmQgdGhlIGZpbGUgcGFzdCBpX3NpemUgd2l0aG91dCBsb2NraW5nCisJICogYSBwYWdlIHdlIGFscmVhZHkgaGF2ZSBsb2NrZWQuCisJICoKKwkgKiBXZSBtdXN0IGRvIGFueSBpc2l6ZSBhbmQgaW5vZGUgdXBkYXRlcworCSAqIGJlZm9yZSB3ZSB1bmxvY2sgdGhlIHBhZ2VzLiAgT3RoZXJ3aXNlIHdlCisJICogY291bGQgZW5kIHVwIHJhY2luZyB3aXRoIHVubGluay4KKwkgKi8KIAlCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUgPSBpbm9kZS0+aV9zaXplOwogCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOworCiAJcmV0dXJuIDA7CiBmYWlsOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTIzMCw4ICsyNDEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIHJvb3QsIGlub2RlLCBzdGFydCwKLQkJCQkgYWxpZ25lZF9lbmQsIGFsaWduZWRfZW5kLCBzdGFydCwKKwlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBzdGFydCwgYWxpZ25lZF9lbmQsCiAJCQkJICZoaW50X2J5dGUsIDEpOwogCUJVR19PTihyZXQpOwogCkBAIC00MTYsNyArNDI2LDYgQEAKIAkJCQkJCSAgICBzdGFydCwgZW5kLAogCQkJCQkJICAgIHRvdGFsX2NvbXByZXNzZWQsIHBhZ2VzKTsKIAkJfQotCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCS8qCiAJCQkgKiBpbmxpbmUgZXh0ZW50IGNyZWF0aW9uIHdvcmtlZCwgd2UgZG9uJ3QgbmVlZApAQCAtNDMwLDkgKzQzOSwxMSBAQAogCQkJICAgICBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAogCQkJICAgICBFWFRFTlRfQ0xFQVJfQUNDT1VOVElORyB8CiAJCQkgICAgIEVYVEVOVF9TRVRfV1JJVEVCQUNLIHwgRVhURU5UX0VORF9XUklURUJBQ0spOwotCQkJcmV0ID0gMDsKKworCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWdvdG8gZnJlZV9wYWdlc19vdXQ7CiAJCX0KKwkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CiAKIAlpZiAod2lsbF9jb21wcmVzcykgewpAQCAtNTQzLDcgKzU1NCw2IEBACiAJaWYgKGxpc3RfZW1wdHkoJmFzeW5jX2Nvdy0+ZXh0ZW50cykpCiAJCXJldHVybiAwOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhc3luY19jb3ctPmV4dGVudHMpKSB7CiAJCWFzeW5jX2V4dGVudCA9IGxpc3RfZW50cnkoYXN5bmNfY293LT5leHRlbnRzLm5leHQsCkBAIC01OTAsMTkgKzYwMCwxNSBAQAogCQlsb2NrX2V4dGVudChpb190cmVlLCBhc3luY19leHRlbnQtPnN0YXJ0LAogCQkJICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKyBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwKIAkJCSAgICBHRlBfTk9GUyk7Ci0JCS8qCi0JCSAqIGhlcmUgd2UncmUgZG9pbmcgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIG9mIHRoZQotCQkgKiBjb21wcmVzc2VkIHBhZ2VzCi0JCSAqLwotCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKLQkJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJCWFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCAwKTsKIAorCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgYXN5bmNfZXh0ZW50LT5jb21wcmVzc2VkX3NpemUsCiAJCQkJCSAgIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCiAJCWlmIChyZXQpIHsKIAkJCWludCBpOwogCQkJZm9yIChpID0gMDsgaSA8IGFzeW5jX2V4dGVudC0+bnJfcGFnZXM7IGkrKykgewpAQCAtNjE4LDYgKzYyNCwxNCBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCisJCS8qCisJCSAqIGhlcmUgd2UncmUgZG9pbmcgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIG9mIHRoZQorCQkgKiBjb21wcmVzc2VkIHBhZ2VzCisJCSAqLworCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKKwkJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJCWFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCAwKTsKKwogCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwogCQllbS0+c3RhcnQgPSBhc3luY19leHRlbnQtPnN0YXJ0OwogCQllbS0+bGVuID0gYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZTsKQEAgLTY0OSw4ICs2NjMsNiBAQAogCQkJCQkgICAgICAgQlRSRlNfT1JERVJFRF9DT01QUkVTU0VEKTsKIAkJQlVHX09OKHJldCk7CiAKLQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQogCQkvKgogCQkgKiBjbGVhciBkaXJ0eSwgc2V0IHdyaXRlYmFjayBhbmQgdW5sb2NrIHRoZSBwYWdlcy4KIAkJICovCkBAIC02NzIsMTMgKzY4NCwxMSBAQAogCQkJCSAgICBhc3luY19leHRlbnQtPm5yX3BhZ2VzKTsKIAogCQlCVUdfT04ocmV0KTsKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCQlhbGxvY19oaW50ID0gaW5zLm9iamVjdGlkICsgaW5zLm9mZnNldDsKIAkJa2ZyZWUoYXN5bmNfZXh0ZW50KTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQyLDYgKzc1Miw3IEBACiAJCQkJICAgICBFWFRFTlRfQ0xFQVJfRElSVFkgfAogCQkJCSAgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfAogCQkJCSAgICAgRVhURU5UX0VORF9XUklURUJBQ0spOworCiAJCQkqbnJfd3JpdHRlbiA9ICpucl93cml0dGVuICsKIAkJCSAgICAgKGVuZCAtIHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFKSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCSpwYWdlX3N0YXJ0ZWQgPSAxOwpAQCAtMTU5Niw3ICsxNjA3LDYgQEAKIAkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZpbGVfcG9zLAogCQkJCSAgICAgICB1NjQgZGlza19ieXRlbnIsIHU2NCBkaXNrX251bV9ieXRlcywKIAkJCQkgICAgICAgdTY0IG51bV9ieXRlcywgdTY0IHJhbV9ieXRlcywKLQkJCQkgICAgICAgdTY0IGxvY2tlZF9lbmQsCiAJCQkJICAgICAgIHU4IGNvbXByZXNzaW9uLCB1OCBlbmNyeXB0aW9uLAogCQkJCSAgICAgICB1MTYgb3RoZXJfZW5jb2RpbmcsIGludCBleHRlbnRfdHlwZSkKIHsKQEAgLTE2MjIsOSArMTYzMiw4IEBACiAJICogdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byB1bnBpbiBpdCBhbmQgYWxsb3cgaXQgdG8gYmUgbWVyZ2VkCiAJICogd2l0aCB0aGUgb3RoZXJzLgogCSAqLwotCXJldCA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgcm9vdCwgaW5vZGUsIGZpbGVfcG9zLAotCQkJCSBmaWxlX3BvcyArIG51bV9ieXRlcywgbG9ja2VkX2VuZCwKLQkJCQkgZmlsZV9wb3MsICZoaW50LCAwKTsKKwlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBmaWxlX3BvcywgZmlsZV9wb3MgKyBudW1fYnl0ZXMsCisJCQkJICZoaW50LCAwKTsKIAlCVUdfT04ocmV0KTsKIAogCWlucy5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKQEAgLTE3MzAsMjMgKzE3MzksMzIgQEAKIAkJfQogCX0KIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQogCWlmICghb3JkZXJlZF9leHRlbnQpCiAJCW9yZGVyZWRfZXh0ZW50ID0gYnRyZnNfbG9va3VwX29yZGVyZWRfZXh0ZW50KGlub2RlLCBzdGFydCk7CiAJQlVHX09OKCFvcmRlcmVkX2V4dGVudCk7Ci0JaWYgKHRlc3RfYml0KEJUUkZTX09SREVSRURfTk9DT1csICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKQotCQlnb3RvIG5vY293OworCWlmICh0ZXN0X2JpdChCVFJGU19PUkRFUkVEX05PQ09XLCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJm9yZGVyZWRfZXh0ZW50LT5saXN0KSk7CisJCXJldCA9IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZF9leHRlbnQpOworCQlpZiAoIXJldCkgeworCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJCQlCVUdfT04ocmV0KTsKKwkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwkJZ290byBvdXQ7CisJfQogCiAJbG9ja19leHRlbnQoaW9fdHJlZSwgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkgICAgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0ICsgb3JkZXJlZF9leHRlbnQtPmxlbiAtIDEsCiAJCSAgICBHRlBfTk9GUyk7CiAKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisKIAlpZiAodGVzdF9iaXQoQlRSRlNfT1JERVJFRF9DT01QUkVTU0VELCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkKIAkJY29tcHJlc3NlZCA9IDE7CiAJaWYgKHRlc3RfYml0KEJUUkZTX09SREVSRURfUFJFQUxMT0MsICZvcmRlcmVkX2V4dGVudC0+ZmxhZ3MpKSB7CiAJCUJVR19PTihjb21wcmVzc2VkKTsKLQkJcmV0ID0gYnRyZnNfbWFya19leHRlbnRfd3JpdHRlbih0cmFucywgcm9vdCwgaW5vZGUsCisJCXJldCA9IGJ0cmZzX21hcmtfZXh0ZW50X3dyaXR0ZW4odHJhbnMsIGlub2RlLAogCQkJCQkJb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkJCQkJb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0ICsKIAkJCQkJCW9yZGVyZWRfZXh0ZW50LT5sZW4pOwpAQCAtMTc1OCw4ICsxNzc2LDYgQEAKIAkJCQkJCW9yZGVyZWRfZXh0ZW50LT5kaXNrX2xlbiwKIAkJCQkJCW9yZGVyZWRfZXh0ZW50LT5sZW4sCiAJCQkJCQlvcmRlcmVkX2V4dGVudC0+bGVuLAotCQkJCQkJb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0ICsKLQkJCQkJCW9yZGVyZWRfZXh0ZW50LT5sZW4sCiAJCQkJCQljb21wcmVzc2VkLCAwLCAwLAogCQkJCQkJQlRSRlNfRklMRV9FWFRFTlRfUkVHKTsKIAkJdW5waW5fZXh0ZW50X2NhY2hlKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWUsCkBAIC0xNzcwLDIyICsxNzg2LDIwIEBACiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBvcmRlcmVkX2V4dGVudC0+ZmlsZV9vZmZzZXQsCiAJCSAgICBvcmRlcmVkX2V4dGVudC0+ZmlsZV9vZmZzZXQgKyBvcmRlcmVkX2V4dGVudC0+bGVuIC0gMSwKIAkJICAgIEdGUF9OT0ZTKTsKLW5vY293OgogCWFkZF9wZW5kaW5nX2NzdW1zKHRyYW5zLCBpbm9kZSwgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkJICAmb3JkZXJlZF9leHRlbnQtPmxpc3QpOwogCi0JbXV0ZXhfbG9jaygmQlRSRlNfSShpbm9kZSktPmV4dGVudF9tdXRleCk7Ci0JYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBvcmRlcmVkX2V4dGVudCk7Ci0JYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7Ci0JYnRyZnNfcmVtb3ZlX29yZGVyZWRfZXh0ZW50KGlub2RlLCBvcmRlcmVkX2V4dGVudCk7Ci0JbXV0ZXhfdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X211dGV4KTsKLQorCS8qIHRoaXMgYWxzbyByZW1vdmVzIHRoZSBvcmRlcmVkIGV4dGVudCBmcm9tIHRoZSB0cmVlICovCisJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7CisJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJQlVHX09OKHJldCk7CisJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKK291dDoKIAkvKiBvbmNlIGZvciB1cyAqLwogCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkX2V4dGVudCk7CiAJLyogb25jZSBmb3IgdGhlIHRyZWUgKi8KIAlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZF9leHRlbnQpOwogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwOCw2ICsyMDIyLDU0IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0cnVjdCBkZWxheWVkX2lwdXQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworfTsKKwordm9pZCBidHJmc19hZGRfZGVsYXllZF9pcHV0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+ZnNfaW5mbzsKKwlzdHJ1Y3QgZGVsYXllZF9pcHV0ICpkZWxheWVkOworCisJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZpbm9kZS0+aV9jb3VudCwgLTEsIDEpKQorCQlyZXR1cm47CisKKwlkZWxheWVkID0ga21hbGxvYyhzaXplb2YoKmRlbGF5ZWQpLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7CisJZGVsYXllZC0+aW5vZGUgPSBpbm9kZTsKKworCXNwaW5fbG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRlbGF5ZWQtPmxpc3QsICZmc19pbmZvLT5kZWxheWVkX2lwdXRzKTsKKwlzcGluX3VubG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworfQorCit2b2lkIGJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHN0cnVjdCBidHJmc19yb290ICpyb290KQoreworCUxJU1RfSEVBRChsaXN0KTsKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGRlbGF5ZWRfaXB1dCAqZGVsYXllZDsKKwlpbnQgZW1wdHk7CisKKwlzcGluX2xvY2soJmZzX2luZm8tPmRlbGF5ZWRfaXB1dF9sb2NrKTsKKwllbXB0eSA9IGxpc3RfZW1wdHkoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dHMpOworCXNwaW5fdW5sb2NrKCZmc19pbmZvLT5kZWxheWVkX2lwdXRfbG9jayk7CisJaWYgKGVtcHR5KQorCQlyZXR1cm47CisKKwlkb3duX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCXNwaW5fbG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dHMsICZsaXN0KTsKKwlzcGluX3VubG9jaygmZnNfaW5mby0+ZGVsYXllZF9pcHV0X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCQlkZWxheWVkID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBkZWxheWVkX2lwdXQsIGxpc3QpOworCQlsaXN0X2RlbCgmZGVsYXllZC0+bGlzdCk7CisJCWlwdXQoZGVsYXllZC0+aW5vZGUpOworCQlrZnJlZShkZWxheWVkKTsKKwl9CisJdXBfcmVhZCgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7Cit9CisKIC8qCiAgKiBUaGlzIGNyZWF0ZXMgYW4gb3JwaGFuIGVudHJ5IGZvciB0aGUgZ2l2ZW4gaW5vZGUgaW4gY2FzZSBzb21ldGhpbmcgZ29lcwogICogd3JvbmcgaW4gdGhlIG1pZGRsZSBvZiBhbiB1bmxpbmsvdHJ1bmNhdGUuCkBAIC0yMDgwLDE2ICsyMTQyLDE3IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgcmV0ID0gMCwgbnJfdW5saW5rID0gMCwgbnJfdHJ1bmNhdGUgPSAwOwogCi0JcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlpZiAoIXBhdGgpCisJaWYgKCF4Y2hnKCZyb290LT5jbGVhbl9vcnBoYW5zLCAwKSkKIAkJcmV0dXJuOworCisJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlCVUdfT04oIXBhdGgpOwogCXBhdGgtPnJlYWRhID0gLTE7CiAKIAlrZXkub2JqZWN0aWQgPSBCVFJGU19PUlBIQU5fT0JKRUNUSUQ7CiAJYnRyZnNfc2V0X2tleV90eXBlKCZrZXksIEJUUkZTX09SUEhBTl9JVEVNX0tFWSk7CiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAKLQogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkgewpAQCAtMjgzNCwzNyArMjg5Nyw0MCBAQAogICogbWluX3R5cGUgaXMgdGhlIG1pbmltdW0ga2V5IHR5cGUgdG8gdHJ1bmNhdGUgZG93biB0by4gIElmIHNldCB0byAwLCB0aGlzCiAgKiB3aWxsIGtpbGwgYWxsIHRoZSBpdGVtcyBvbiB0aGlzIGlub2RlLCBpbmNsdWRpbmcgdGhlIElOT0RFX0lURU1fS0VZLgogICovCi1ub2lubGluZSBpbnQgYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQl1NjQgbmV3X3NpemUsIHUzMiBtaW5fdHlwZSkKK2ludCBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHU2NCBuZXdfc2l6ZSwgdTMyIG1pbl90eXBlKQogewotCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7Ci0Jc3RydWN0IGJ0cmZzX2tleSBrZXk7Ci0Jc3RydWN0IGJ0cmZzX2tleSBmb3VuZF9rZXk7Ci0JdTMyIGZvdW5kX3R5cGUgPSAodTgpLTE7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKmZpOworCXN0cnVjdCBidHJmc19rZXkga2V5OworCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwogCXU2NCBleHRlbnRfc3RhcnQgPSAwOwogCXU2NCBleHRlbnRfbnVtX2J5dGVzID0gMDsKIAl1NjQgZXh0ZW50X29mZnNldCA9IDA7CiAJdTY0IGl0ZW1fZW5kID0gMDsKKwl1NjQgbWFzayA9IHJvb3QtPnNlY3RvcnNpemUgLSAxOworCXUzMiBmb3VuZF90eXBlID0gKHU4KS0xOwogCWludCBmb3VuZF9leHRlbnQ7CiAJaW50IGRlbF9pdGVtOwogCWludCBwZW5kaW5nX2RlbF9uciA9IDA7CiAJaW50IHBlbmRpbmdfZGVsX3Nsb3QgPSAwOwogCWludCBleHRlbnRfdHlwZSA9IC0xOwogCWludCBlbmNvZGluZzsKLQl1NjQgbWFzayA9IHJvb3QtPnNlY3RvcnNpemUgLSAxOworCWludCByZXQ7CisJaW50IGVyciA9IDA7CisKKwlCVUdfT04obmV3X3NpemUgPiAwICYmIG1pbl90eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAKIAlpZiAocm9vdC0+cmVmX2Nvd3MpCiAJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBuZXdfc2l6ZSAmICh+bWFzayksICh1NjQpLTEsIDApOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOwogCXBhdGgtPnJlYWRhID0gLTE7CiAKLQkvKiBGSVhNRSwgYWRkIHJlZG8gbGluayB0byB0cmVlIHNvIHdlIGRvbid0IGxlYWsgb24gY3Jhc2ggKi8KIAlrZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAJa2V5LnR5cGUgPSAodTgpLTE7CkBAIC0yODcyLDE3ICsyOTM4LDE3IEBACiBzZWFyY2hfYWdhaW46CiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyID0gcmV0OworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAocmV0ID4gMCkgewogCQkvKiB0aGVyZSBhcmUgbm8gaXRlbXMgaW4gdGhlIHRyZWUgZm9yIHVzIHRvIHRydW5jYXRlLCB3ZSdyZQogCQkgKiBkb25lCiAJCSAqLwotCQlpZiAocGF0aC0+c2xvdHNbMF0gPT0gMCkgewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KKwkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApCisJCQlnb3RvIG91dDsKIAkJcGF0aC0+c2xvdHNbMF0tLTsKIAl9CiAKQEAgLTI5MTcsMjggKzI5ODMsMTcgQEAKIAkJCX0KIAkJCWl0ZW1fZW5kLS07CiAJCX0KLQkJaWYgKGl0ZW1fZW5kIDwgbmV3X3NpemUpIHsKLQkJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0RJUl9JVEVNX0tFWSkKLQkJCQlmb3VuZF90eXBlID0gQlRSRlNfSU5PREVfSVRFTV9LRVk7Ci0JCQllbHNlIGlmIChmb3VuZF90eXBlID09IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSkKLQkJCQlmb3VuZF90eXBlID0gQlRSRlNfRVhURU5UX0RBVEFfS0VZOwotCQkJZWxzZSBpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19FWFRFTlRfREFUQV9LRVkpCi0JCQkJZm91bmRfdHlwZSA9IEJUUkZTX1hBVFRSX0lURU1fS0VZOwotCQkJZWxzZSBpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19YQVRUUl9JVEVNX0tFWSkKLQkJCQlmb3VuZF90eXBlID0gQlRSRlNfSU5PREVfUkVGX0tFWTsKLQkJCWVsc2UgaWYgKGZvdW5kX3R5cGUpCi0JCQkJZm91bmRfdHlwZS0tOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQkJYnRyZnNfc2V0X2tleV90eXBlKCZrZXksIGZvdW5kX3R5cGUpOwotCQkJZ290byBuZXh0OwotCQl9Ci0JCWlmIChmb3VuZF9rZXkub2Zmc2V0ID49IG5ld19zaXplKQorCQlpZiAoZm91bmRfdHlwZSA+IG1pbl90eXBlKSB7CiAJCQlkZWxfaXRlbSA9IDE7Ci0JCWVsc2UKLQkJCWRlbF9pdGVtID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpdGVtX2VuZCA8IG5ld19zaXplKQorCQkJCWJyZWFrOworCQkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPj0gbmV3X3NpemUpCisJCQkJZGVsX2l0ZW0gPSAxOworCQkJZWxzZQorCQkJCWRlbF9pdGVtID0gMDsKKwkJfQogCQlmb3VuZF9leHRlbnQgPSAwOwotCiAJCS8qIEZJWE1FLCBzaHJpbmsgdGhlIGV4dGVudCBpZiB0aGUgcmVmIGNvdW50IGlzIG9ubHkgMSAqLwogCQlpZiAoZm91bmRfdHlwZSAhPSBCVFJGU19FWFRFTlRfREFUQV9LRVkpCiAJCQlnb3RvIGRlbGV0ZTsKQEAgLTMwMjUsNDIgKzMwODAsMzYgQEAKIAkJCQkJCWlub2RlLT5pX2lubywgZXh0ZW50X29mZnNldCk7CiAJCQlCVUdfT04ocmV0KTsKIAkJfQotbmV4dDoKLQkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApIHsKLQkJCWlmIChwZW5kaW5nX2RlbF9ucikKLQkJCQlnb3RvIGRlbF9wZW5kaW5nOwotCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCQkJaWYgKGZvdW5kX3R5cGUgPT0gQlRSRlNfSU5PREVfSVRFTV9LRVkpCi0JCQkJYnJlYWs7Ci0JCQlnb3RvIHNlYXJjaF9hZ2FpbjsKLQkJfQogCi0JCXBhdGgtPnNsb3RzWzBdLS07Ci0JCWlmIChwZW5kaW5nX2RlbF9uciAmJgotCQkgICAgcGF0aC0+c2xvdHNbMF0gKyAxICE9IHBlbmRpbmdfZGVsX3Nsb3QpIHsKLQkJCXN0cnVjdCBidHJmc19rZXkgZGVidWc7Ci1kZWxfcGVuZGluZzoKLQkJCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShwYXRoLT5ub2Rlc1swXSwgJmRlYnVnLAotCQkJCQkgICAgICBwZW5kaW5nX2RlbF9zbG90KTsKLQkJCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwKLQkJCQkJICAgICAgcGVuZGluZ19kZWxfc2xvdCwKLQkJCQkJICAgICAgcGVuZGluZ19kZWxfbnIpOwotCQkJQlVHX09OKHJldCk7Ci0JCQlwZW5kaW5nX2RlbF9uciA9IDA7CisJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0lOT0RFX0lURU1fS0VZKQorCQkJYnJlYWs7CisKKwkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDAgfHwKKwkJICAgIHBhdGgtPnNsb3RzWzBdICE9IHBlbmRpbmdfZGVsX3Nsb3QpIHsKKwkJCWlmIChyb290LT5yZWZfY293cykgeworCQkJCWVyciA9IC1FQUdBSU47CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpZiAocGVuZGluZ19kZWxfbnIpIHsKKwkJCQlyZXQgPSBidHJmc19kZWxfaXRlbXModHJhbnMsIHJvb3QsIHBhdGgsCisJCQkJCQlwZW5kaW5nX2RlbF9zbG90LAorCQkJCQkJcGVuZGluZ19kZWxfbnIpOworCQkJCUJVR19PTihyZXQpOworCQkJCXBlbmRpbmdfZGVsX25yID0gMDsKKwkJCX0KIAkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKLQkJCWlmIChmb3VuZF90eXBlID09IEJUUkZTX0lOT0RFX0lURU1fS0VZKQotCQkJCWJyZWFrOwogCQkJZ290byBzZWFyY2hfYWdhaW47CisJCX0gZWxzZSB7CisJCQlwYXRoLT5zbG90c1swXS0tOwogCQl9CiAJfQotCXJldCA9IDA7Ci1lcnJvcjoKK291dDoKIAlpZiAocGVuZGluZ19kZWxfbnIpIHsKIAkJcmV0ID0gYnRyZnNfZGVsX2l0ZW1zKHRyYW5zLCByb290LCBwYXRoLCBwZW5kaW5nX2RlbF9zbG90LAogCQkJCSAgICAgIHBlbmRpbmdfZGVsX25yKTsKIAl9CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTMxODAsMTAgKzMyMjksNiBAQAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JZXJyID0gYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOwogCQlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGhvbGVfc3RhcnQsCkBAIC0zMTk2LDkgKzMyNDEsNiBAQAogCQlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZCk7CiAJfQogCi0JdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQogCWN1cl9vZmZzZXQgPSBob2xlX3N0YXJ0OwogCXdoaWxlICgxKSB7CiAJCWVtID0gYnRyZnNfZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgY3VyX29mZnNldCwKQEAgLTMyMDYsNDAgKzMyNDgsMTIwIEBACiAJCUJVR19PTihJU19FUlIoZW0pIHx8ICFlbSk7CiAJCWxhc3RfYnl0ZSA9IG1pbihleHRlbnRfbWFwX2VuZChlbSksIGJsb2NrX2VuZCk7CiAJCWxhc3RfYnl0ZSA9IChsYXN0X2J5dGUgKyBtYXNrKSAmIH5tYXNrOwotCQlpZiAodGVzdF9iaXQoRVhURU5UX0ZMQUdfVkFDQU5DWSwgJmVtLT5mbGFncykpIHsKKwkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfRkxBR19QUkVBTExPQywgJmVtLT5mbGFncykpIHsKIAkJCXU2NCBoaW50X2J5dGUgPSAwOwogCQkJaG9sZV9zaXplID0gbGFzdF9ieXRlIC0gY3VyX29mZnNldDsKLQkJCWVyciA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgcm9vdCwgaW5vZGUsCi0JCQkJCQkgY3VyX29mZnNldCwKLQkJCQkJCSBjdXJfb2Zmc2V0ICsgaG9sZV9zaXplLAotCQkJCQkJIGJsb2NrX2VuZCwKLQkJCQkJCSBjdXJfb2Zmc2V0LCAmaGludF9ieXRlLCAxKTsKKworCQkJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAyKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAKLQkJCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7Ci0JCQlpZiAoZXJyKQotCQkJCWJyZWFrOworCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCisJCQllcnIgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLCBjdXJfb2Zmc2V0LAorCQkJCQkJIGN1cl9vZmZzZXQgKyBob2xlX3NpemUsCisJCQkJCQkgJmhpbnRfYnl0ZSwgMSk7CisJCQlCVUdfT04oZXJyKTsKIAogCQkJZXJyID0gYnRyZnNfaW5zZXJ0X2ZpbGVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQlpbm9kZS0+aV9pbm8sIGN1cl9vZmZzZXQsIDAsCiAJCQkJCTAsIGhvbGVfc2l6ZSwgMCwgaG9sZV9zaXplLAogCQkJCQkwLCAwLCAwKTsKKwkJCUJVR19PTihlcnIpOworCiAJCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgaG9sZV9zdGFydCwKIAkJCQkJbGFzdF9ieXRlIC0gMSwgMCk7Ci0JCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CisKKwkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMik7CiAJCX0KIAkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJY3VyX29mZnNldCA9IGxhc3RfYnl0ZTsKLQkJaWYgKGVyciB8fCBjdXJfb2Zmc2V0ID49IGJsb2NrX2VuZCkKKwkJaWYgKGN1cl9vZmZzZXQgPj0gYmxvY2tfZW5kKQogCQkJYnJlYWs7CiAJfQogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIGhvbGVfc3RhcnQsIGJsb2NrX2VuZCAtIDEsIEdGUF9OT0ZTKTsKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGJ0cmZzX3NldGF0dHJfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKKwl1bnNpZ25lZCBsb25nIG5yOworCWludCByZXQ7CisKKwlpZiAoYXR0ci0+aWFfc2l6ZSA9PSBpbm9kZS0+aV9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkgeworCQl1bnNpZ25lZCBsb25nIGxpbWl0OworCQlsaW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfRlNJWkVdLnJsaW1fY3VyOworCQlpZiAoYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NiLT5zX21heGJ5dGVzKQorCQkJcmV0dXJuIC1FRkJJRzsKKwkJaWYgKGxpbWl0ICE9IFJMSU1fSU5GSU5JVFkgJiYgYXR0ci0+aWFfc2l6ZSA+IGxpbWl0KSB7CisJCQlzZW5kX3NpZyhTSUdYRlNaLCBjdXJyZW50LCAwKTsKKwkJCXJldHVybiAtRUZCSUc7CisJCX0KKwl9CisKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCisJcmV0ID0gYnRyZnNfb3JwaGFuX2FkZCh0cmFucywgaW5vZGUpOworCUJVR19PTihyZXQpOworCisJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CisJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CisKKwlpZiAoYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpIHsKKwkJcmV0ID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAocmV0KSB7CisJCQlidHJmc190cnVuY2F0ZShpbm9kZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBpbm9kZS0+aV9zaXplLCBOVUxMKTsKKworCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKKworCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwkJQlVHX09OKHJldCk7CisJCWlmIChpbm9kZS0+aV9ubGluayA+IDApIHsKKwkJCXJldCA9IGJ0cmZzX29ycGhhbl9kZWwodHJhbnMsIGlub2RlKTsKKwkJCUJVR19PTihyZXQpOworCQl9CisJCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSdyZSB0cnVuY2F0aW5nIGEgZmlsZSB0aGF0IHVzZWQgdG8gaGF2ZSBnb29kIGRhdGEgZG93biB0bworCSAqIHplcm8uIE1ha2Ugc3VyZSBpdCBnZXRzIGludG8gdGhlIG9yZGVyZWQgZmx1c2ggbGlzdCBzbyB0aGF0CisJICogYW55IG5ldyB3cml0ZXMgZ2V0IGRvd24gdG8gZGlzayBxdWlja2x5LgorCSAqLworCWlmIChhdHRyLT5pYV9zaXplID09IDApCisJCUJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UgPSAxOworCisJLyogd2UgZG9uJ3Qgc3VwcG9ydCBzd2FwZmlsZXMsIHNvIHZtdHJ1bmNhdGUgc2hvdWxkbid0IGZhaWwgKi8KKwlyZXQgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwlCVUdfT04ocmV0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJ0cmZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKQEAgLTMyNTAsMjMgKzMzNzIsMTQgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkpIHsKLQkJaWYgKGF0dHItPmlhX3NpemUgPiBpbm9kZS0+aV9zaXplKSB7Ci0JCQllcnIgPSBidHJmc19jb250X2V4cGFuZChpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZSBpZiAoaW5vZGUtPmlfc2l6ZSA+IDAgJiYKLQkJCSAgIGF0dHItPmlhX3NpemUgPT0gMCkgewotCi0JCQkvKiB3ZSdyZSB0cnVuY2F0aW5nIGEgZmlsZSB0aGF0IHVzZWQgdG8gaGF2ZSBnb29kCi0JCQkgKiBkYXRhIGRvd24gdG8gemVyby4gIE1ha2Ugc3VyZSBpdCBnZXRzIGludG8KLQkJCSAqIHRoZSBvcmRlcmVkIGZsdXNoIGxpc3Qgc28gdGhhdCBhbnkgbmV3IHdyaXRlcwotCQkJICogZ2V0IGRvd24gdG8gZGlzayBxdWlja2x5LgotCQkJICovCi0JCQlCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9kYXRhX2Nsb3NlID0gMTsKLQkJfQorCQllcnIgPSBidHJmc19zZXRhdHRyX3NpemUoaW5vZGUsIGF0dHIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CisJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKIAotCWVyciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCWlmIChhdHRyLT5pYV92YWxpZCkKKwkJZXJyID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CiAKIAlpZiAoIWVyciAmJiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkpCiAJCWVyciA9IGJ0cmZzX2FjbF9jaG1vZChpbm9kZSk7CkBAIC0zMjg3LDM2ICszNDAwLDQzIEBACiAJfQogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CiAKKwlpZiAocm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfcmVjb3ZlcmluZykgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5pX29ycGhhbikpOworCQlnb3RvIG5vX2RlbGV0ZTsKKwl9CisKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPiAwKSB7CiAJCUJVR19PTihidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgIT0gMCk7CiAJCWdvdG8gbm9fZGVsZXRlOwogCX0KIAogCWJ0cmZzX2lfc2l6ZV93cml0ZShpbm9kZSwgMCk7Ci0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JcmV0ID0gYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXModHJhbnMsIHJvb3QsIGlub2RlLCBpbm9kZS0+aV9zaXplLCAwKTsKLQlpZiAocmV0KSB7Ci0JCWJ0cmZzX29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwotCQlnb3RvIG5vX2RlbGV0ZV9sb2NrOworCXdoaWxlICgxKSB7CisJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsIDAsIDApOworCisJCWlmIChyZXQgIT0gLUVBR0FJTikKKwkJCWJyZWFrOworCisJCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQl0cmFucyA9IE5VTEw7CisJCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCX0KIAotCWJ0cmZzX29ycGhhbl9kZWwodHJhbnMsIGlub2RlKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOworCQlCVUdfT04ocmV0KTsKKwl9CiAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKLQljbGVhcl9pbm9kZShpbm9kZSk7Ci0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwotCXJldHVybjsKLQotbm9fZGVsZXRlX2xvY2s6Ci0JbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIG5vX2RlbGV0ZToKIAljbGVhcl9pbm9kZShpbm9kZSk7CisJcmV0dXJuOwogfQogCiAvKgpAQCAtMzU2OSw3ICszNjg5LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CiAJUkJfQ0xFQVJfTk9ERSgmQlRSRlNfSShpbm9kZSktPnJiX25vZGUpOwogCWJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZV9pbml0KCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF90cmVlKTsKLQltdXRleF9pbml0KCZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X211dGV4KTsKIAltdXRleF9pbml0KCZCVFJGU19JKGlub2RlKS0+bG9nX211dGV4KTsKIH0KIApAQCAtMzY5NSw2ICszODE0LDEzIEBACiAJfQogCXNyY3VfcmVhZF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnN1YnZvbF9zcmN1LCBpbmRleCk7CiAKKwlpZiAocm9vdCAhPSBzdWJfcm9vdCkgeworCQlkb3duX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCQlpZiAoIShpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCQlidHJmc19vcnBoYW5fY2xlYW51cChzdWJfcm9vdCk7CisJCXVwX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOworCX0KKwogCXJldHVybiBpbm9kZTsKIH0KIApAQCAtNDIxOSw3ICs0MzQ1LDcgQEAKIAlpZiAoSVNfRVJSKGlub2RlKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eShpbm9kZSwgZGlyKTsKKwllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyKTsKIAlpZiAoZXJyKSB7CiAJCWRyb3BfaW5vZGUgPSAxOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC00MjkwLDcgKzQ0MTYsNyBAQAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KGlub2RlLCBkaXIpOworCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIpOwogCWlmIChlcnIpIHsKIAkJZHJvcF9pbm9kZSA9IDE7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQzMzYsNiArNDQ2MiwxMCBAQAogCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCS8qIGRvIG5vdCBhbGxvdyBzeXNfbGluaydzIHdpdGggb3RoZXIgc3Vidm9scyBvZiB0aGUgc2FtZSBkZXZpY2UgKi8KKwlpZiAocm9vdC0+b2JqZWN0aWQgIT0gQlRSRlNfSShpbm9kZSktPnJvb3QtPm9iamVjdGlkKQorCQlyZXR1cm4gLUVQRVJNOworCiAJLyoKIAkgKiAxIGl0ZW0gZm9yIGlub2RlIHJlZgogCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcwpAQCAtNDQyMyw3ICs0NTUzLDcgQEAKIAogCWRyb3Bfb25fZXJyID0gMTsKIAotCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkoaW5vZGUsIGRpcik7CisJZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eSh0cmFucywgaW5vZGUsIGRpcik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZmFpbDsKIApAQCAtNTA3NCwxNyArNTIwNCwyMCBAQAogCXVuc2lnbmVkIGxvbmcgbnI7CiAJdTY0IG1hc2sgPSByb290LT5zZWN0b3JzaXplIC0gMTsKIAotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwotCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCi0JCXJldHVybjsKKwl9CiAKIAlyZXQgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwogCWlmIChyZXQpCiAJCXJldHVybjsKKwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSAmICh+bWFzayksICh1NjQpLTEpOworCWJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSwgTlVMTCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJLyoKIAkgKiBzZXRhdHRyIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBvcmRlcmVkX2RhdGFfY2xvc2UgZmxhZywKQEAgLTUxMDYsMjEgKzUyMzksMzIgQEAKIAlpZiAoaW5vZGUtPmlfc2l6ZSA9PSAwICYmIEJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UpCiAJCWJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbih0cmFucywgcm9vdCwgaW5vZGUpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKKwl3aGlsZSAoMSkgeworCQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsCisJCQkJCQkgaW5vZGUtPmlfc2l6ZSwKKwkJCQkJCSBCVFJGU19FWFRFTlRfREFUQV9LRVkpOworCQlpZiAocmV0ICE9IC1FQUdBSU4pCisJCQlicmVhazsKIAotCXJldCA9IGJ0cmZzX29ycGhhbl9hZGQodHJhbnMsIGlub2RlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQkvKiBGSVhNRSwgYWRkIHJlZG8gbGluayB0byB0cmVlIHNvIHdlIGRvbid0IGxlYWsgb24gY3Jhc2ggKi8KLQlyZXQgPSBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlLT5pX3NpemUsCi0JCQkJICAgICAgQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKLQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJCUJVR19PTihyZXQpOwogCi0JcmV0ID0gYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOworCQluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKKwkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CisKKwkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CisJfQorCisJaWYgKHJldCA9PSAwICYmIGlub2RlLT5pX25saW5rID4gMCkgeworCQlyZXQgPSBidHJmc19vcnBoYW5fZGVsKHRyYW5zLCBpbm9kZSk7CisJCUJVR19PTihyZXQpOworCX0KKworCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCUJVR19PTihyZXQpOwogCi1vdXQ6CiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIAlCVUdfT04ocmV0KTsKQEAgLTUyMTcsOSArNTM2MSw5IEBACiAKIAlzcGluX2xvY2soJnJvb3QtPmxpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZCVFJGU19JKGlub2RlKS0+aV9vcnBoYW4pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQlRSRlM6IGlub2RlICVsdTogaW5vZGUgc3RpbGwgb24gdGhlIG9ycGhhbiIKLQkJICAgICAgICIgbGlzdFxuIiwgaW5vZGUtPmlfaW5vKTsKLQkJZHVtcF9zdGFjaygpOworCQlwcmludGsoS0VSTl9JTkZPICJCVFJGUzogaW5vZGUgJWx1IHN0aWxsIG9uIHRoZSBvcnBoYW4gbGlzdFxuIiwKKwkJICAgICAgIGlub2RlLT5pX2lubyk7CisJCWxpc3RfZGVsX2luaXQoJkJUUkZTX0koaW5vZGUpLT5pX29ycGhhbik7CiAJfQogCXNwaW5fdW5sb2NrKCZyb290LT5saXN0X2xvY2spOwogCkBAIC01NDc2LDcgKzU2MjAsNyBAQAogICogc29tZSBmYWlybHkgc2xvdyBjb2RlIHRoYXQgbmVlZHMgb3B0aW1pemF0aW9uLiBUaGlzIHdhbGtzIHRoZSBsaXN0CiAgKiBvZiBhbGwgdGhlIGlub2RlcyB3aXRoIHBlbmRpbmcgZGVsYWxsb2MgYW5kIGZvcmNlcyB0aGVtIHRvIGRpc2suCiAgKi8KLWludCBidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgZGVsYXlfaXB1dCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2lub2RlczsKIAlzdHJ1Y3QgYnRyZnNfaW5vZGUgKmJpbm9kZTsKQEAgLTU0OTUsNyArNTYzOSwxMCBAQAogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJCWlmIChpbm9kZSkgewogCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKLQkJCWlwdXQoaW5vZGUpOworCQkJaWYgKGRlbGF5X2lwdXQpCisJCQkJYnRyZnNfYWRkX2RlbGF5ZWRfaXB1dChpbm9kZSk7CisJCQllbHNlCisJCQkJaXB1dChpbm9kZSk7CiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CkBAIC01NTY5LDcgKzU3MTYsNyBAQAogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KGlub2RlLCBkaXIpOworCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIpOwogCWlmIChlcnIpIHsKIAkJZHJvcF9pbm9kZSA9IDE7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTU2NDEsMTAgKzU3ODgsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHByZWFsbG9jX2ZpbGVfcmFuZ2Uoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJICAgICAgIHU2NCBsb2NrZWRfZW5kLCB1NjQgYWxsb2NfaGludCwgaW50IG1vZGUpCitzdGF0aWMgaW50IHByZWFsbG9jX2ZpbGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAorCQkJICAgICAgIHU2NCBhbGxvY19oaW50LCBpbnQgbW9kZSkKIHsKKwlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc19rZXkgaW5zOwogCXU2NCBhbGxvY19zaXplOwpAQCAtNTY1NSw0MyArNTgwMiw1NiBAQAogCXdoaWxlIChudW1fYnl0ZXMgPiAwKSB7CiAJCWFsbG9jX3NpemUgPSBtaW4obnVtX2J5dGVzLCByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKIAotCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsIGFsbG9jX3NpemUsCiAJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUsIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlXQVJOX09OKDEpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIHN0b3BfdHJhbnM7CiAJCX0KKworCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDMpOworCQlpZiAocmV0KSB7CisJCQlidHJmc19mcmVlX3Jlc2VydmVkX2V4dGVudChyb290LCBpbnMub2JqZWN0aWQsCisJCQkJCQkgICBpbnMub2Zmc2V0KTsKKwkJCWdvdG8gc3RvcF90cmFuczsKKwkJfQorCiAJCXJldCA9IGluc2VydF9yZXNlcnZlZF9maWxlX2V4dGVudCh0cmFucywgaW5vZGUsCiAJCQkJCQkgIGN1cl9vZmZzZXQsIGlucy5vYmplY3RpZCwKIAkJCQkJCSAgaW5zLm9mZnNldCwgaW5zLm9mZnNldCwKLQkJCQkJCSAgaW5zLm9mZnNldCwgbG9ja2VkX2VuZCwKLQkJCQkJCSAgMCwgMCwgMCwKKwkJCQkJCSAgaW5zLm9mZnNldCwgMCwgMCwgMCwKIAkJCQkJCSAgQlRSRlNfRklMRV9FWFRFTlRfUFJFQUxMT0MpOwogCQlCVUdfT04ocmV0KTsKIAkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIGN1cl9vZmZzZXQsCiAJCQkJCWN1cl9vZmZzZXQgKyBpbnMub2Zmc2V0IC0xLCAwKTsKKwogCQludW1fYnl0ZXMgLT0gaW5zLm9mZnNldDsKIAkJY3VyX29mZnNldCArPSBpbnMub2Zmc2V0OwogCQlhbGxvY19oaW50ID0gaW5zLm9iamVjdGlkICsgaW5zLm9mZnNldDsKLQkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOwotCX0KLW91dDoKLQlpZiAoY3VyX29mZnNldCA+IHN0YXJ0KSB7CisKIAkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJCUJUUkZTX0koaW5vZGUpLT5mbGFncyB8PSBCVFJGU19JTk9ERV9QUkVBTExPQzsKIAkJaWYgKCEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpICYmCi0JCSAgICBjdXJfb2Zmc2V0ID4gaV9zaXplX3JlYWQoaW5vZGUpKQotCQkJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCBjdXJfb2Zmc2V0KTsKKwkJICAgIGN1cl9vZmZzZXQgPiBpbm9kZS0+aV9zaXplKSB7CisJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGN1cl9vZmZzZXQpOworCQkJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBjdXJfb2Zmc2V0LCBOVUxMKTsKKwkJfQorCiAJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCQlCVUdfT04ocmV0KTsKLQl9CiAKKwkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDMpOworCX0KIAlyZXR1cm4gcmV0OworCitzdG9wX3RyYW5zOgorCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJcmV0dXJuIHJldDsKKwogfQogCiBzdGF0aWMgbG9uZyBidHJmc19mYWxsb2NhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsCkBAIC01NzA1LDggKzU4NjUsNiBAQAogCXU2NCBsb2NrZWRfZW5kOwogCXU2NCBtYXNrID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPnNlY3RvcnNpemUgLSAxOwogCXN0cnVjdCBleHRlbnRfbWFwICplbTsKLQlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKIAlpbnQgcmV0OwogCiAJYWxsb2Nfc3RhcnQgPSBvZmZzZXQgJiB+bWFzazsKQEAgLTU3MjUsOSArNTg4Myw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7Ci0KLQlyZXQgPSBidHJmc19jaGVja19kYXRhX2ZyZWVfc3BhY2Uocm9vdCwgaW5vZGUsCisJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKEJUUkZTX0koaW5vZGUpLT5yb290LCBpbm9kZSwKIAkJCQkJICBhbGxvY19lbmQgLSBhbGxvY19zdGFydCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC01NzM2LDEyICs1ODkyLDYgQEAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CiAKLQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihCVFJGU19JKGlub2RlKS0+cm9vdCwgMSk7Ci0JCWlmICghdHJhbnMpIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dF9mcmVlOwotCQl9Ci0KIAkJLyogdGhlIGV4dGVudCBsb2NrIGlzIG9yZGVyZWQgaW5zaWRlIHRoZSBydW5uaW5nCiAJCSAqIHRyYW5zYWN0aW9uCiAJCSAqLwpAQCAtNTc1NSw4ICs1OTA1LDYgQEAKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKIAkJCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAogCQkJCSAgICAgIGFsbG9jX3N0YXJ0LCBsb2NrZWRfZW5kLCBHRlBfTk9GUyk7Ci0JCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIEJUUkZTX0koaW5vZGUpLT5yb290KTsKLQogCQkJLyoKIAkJCSAqIHdlIGNhbid0IHdhaXQgb24gdGhlIHJhbmdlIHdpdGggdGhlIHRyYW5zYWN0aW9uCiAJCQkgKiBydW5uaW5nIG9yIHdpdGggdGhlIGV4dGVudCBsb2NrIGhlbGQKQEAgLTU3NzcsMTAgKzU5MjUsMTIgQEAKIAkJQlVHX09OKElTX0VSUihlbSkgfHwgIWVtKTsKIAkJbGFzdF9ieXRlID0gbWluKGV4dGVudF9tYXBfZW5kKGVtKSwgYWxsb2NfZW5kKTsKIAkJbGFzdF9ieXRlID0gKGxhc3RfYnl0ZSArIG1hc2spICYgfm1hc2s7Ci0JCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9IT0xFKSB7Ci0JCQlyZXQgPSBwcmVhbGxvY19maWxlX3JhbmdlKHRyYW5zLCBpbm9kZSwgY3VyX29mZnNldCwKLQkJCQkJbGFzdF9ieXRlLCBsb2NrZWRfZW5kICsgMSwKLQkJCQkJYWxsb2NfaGludCwgbW9kZSk7CisJCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9IT0xFIHx8CisJCSAgICAoY3VyX29mZnNldCA+PSBpbm9kZS0+aV9zaXplICYmCisJCSAgICAgIXRlc3RfYml0KEVYVEVOVF9GTEFHX1BSRUFMTE9DLCAmZW0tPmZsYWdzKSkpIHsKKwkJCXJldCA9IHByZWFsbG9jX2ZpbGVfcmFuZ2UoaW5vZGUsCisJCQkJCQkgIGN1cl9vZmZzZXQsIGxhc3RfYnl0ZSwKKwkJCQkJCSAgYWxsb2NfaGludCwgbW9kZSk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJCQkJYnJlYWs7CkBAIC01Nzk5LDkgKzU5NDksOCBAQAogCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBhbGxvY19zdGFydCwgbG9ja2VkX2VuZCwKIAkJICAgICAgR0ZQX05PRlMpOwogCi0JYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCBCVFJGU19JKGlub2RlKS0+cm9vdCk7Ci1vdXRfZnJlZToKLQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsIGFsbG9jX2VuZCAtIGFsbG9jX3N0YXJ0KTsKKwlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2UoQlRSRlNfSShpbm9kZSktPnJvb3QsIGlub2RlLAorCQkJCSAgICAgICBhbGxvY19lbmQgLSBhbGxvY19zdGFydCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGNkYmIwNTQuLjY0NWExNzkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjM3LDcgKzIzNyw2IEBACiAJdTY0IG9iamVjdGlkOwogCXU2NCBuZXdfZGlyaWQgPSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEOwogCXU2NCBpbmRleCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKIAkvKgogCSAqIDEgLSBpbm9kZSBpdGVtCkBAIC0yOTAsNyArMjg5LDcgQEAKIAlidHJmc19zZXRfcm9vdF9nZW5lcmF0aW9uKCZyb290X2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAlidHJmc19zZXRfcm9vdF9sZXZlbCgmcm9vdF9pdGVtLCAwKTsKIAlidHJmc19zZXRfcm9vdF9yZWZzKCZyb290X2l0ZW0sIDEpOwotCWJ0cmZzX3NldF9yb290X3VzZWQoJnJvb3RfaXRlbSwgMCk7CisJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdF9pdGVtLCBsZWFmLT5sZW4pOwogCWJ0cmZzX3NldF9yb290X2xhc3Rfc25hcHNob3QoJnJvb3RfaXRlbSwgMCk7CiAKIAltZW1zZXQoJnJvb3RfaXRlbS5kcm9wX3Byb2dyZXNzLCAwLCBzaXplb2Yocm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MpKTsKQEAgLTM0MiwyNCArMzQxLDIxIEBACiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgYnRyZnNfbG9va3VwX2RlbnRyeShkaXIsIGRlbnRyeSkpOwogZmFpbDoKLQluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAllcnIgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCWlmIChlcnIgJiYgIXJldCkKIAkJcmV0ID0gZXJyOwogCiAJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwotCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY3JlYXRlX3NuYXBzaG90KHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBidHJmc19wZW5kaW5nX3NuYXBzaG90ICpwZW5kaW5nX3NuYXBzaG90OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCWludCByZXQgPSAwOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBuciA9IDA7CisJaW50IHJldDsKIAogCWlmICghcm9vdC0+cmVmX2Nvd3MpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzcyLDIwICszNjgsMjAgQEAKIAkgKi8KIAlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF91bmxvY2s7CisJCWdvdG8gZmFpbDsKIAogCXBlbmRpbmdfc25hcHNob3QgPSBremFsbG9jKHNpemVvZigqcGVuZGluZ19zbmFwc2hvdCksIEdGUF9OT0ZTKTsKIAlpZiAoIXBlbmRpbmdfc25hcHNob3QpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwotCQlnb3RvIGZhaWxfdW5sb2NrOworCQlnb3RvIGZhaWw7CiAJfQogCXBlbmRpbmdfc25hcHNob3QtPm5hbWUgPSBrbWFsbG9jKG5hbWVsZW4gKyAxLCBHRlBfTk9GUyk7CiAJaWYgKCFwZW5kaW5nX3NuYXBzaG90LT5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWtmcmVlKHBlbmRpbmdfc25hcHNob3QpOwogCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7Ci0JCWdvdG8gZmFpbF91bmxvY2s7CisJCWdvdG8gZmFpbDsKIAl9CiAJbWVtY3B5KHBlbmRpbmdfc25hcHNob3QtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCXBlbmRpbmdfc25hcHNob3QtPm5hbWVbbmFtZWxlbl0gPSAnXDAnOwpAQCAtMzk1LDEwICszOTEsMTkgQEAKIAlwZW5kaW5nX3NuYXBzaG90LT5yb290ID0gcm9vdDsKIAlsaXN0X2FkZCgmcGVuZGluZ19zbmFwc2hvdC0+bGlzdCwKIAkJICZ0cmFucy0+dHJhbnNhY3Rpb24tPnBlbmRpbmdfc25hcHNob3RzKTsKLQllcnIgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJQlVHX09OKHJldCk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCi1mYWlsX3VubG9jazoKLQlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKKwlpbm9kZSA9IGJ0cmZzX2xvb2t1cF9kZW50cnkoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQlyZXQgPSBQVFJfRVJSKGlub2RlKTsKKwkJZ290byBmYWlsOworCX0KKwlCVUdfT04oIWlub2RlKTsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCXJldCA9IDA7CitmYWlsOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMjcsOCArMTAzMiw3IEBACiAJQlVHX09OKCF0cmFucyk7CiAKIAkvKiBwdW5jaCBob2xlIGluIGRlc3RpbmF0aW9uIGZpcnN0ICovCi0JYnRyZnNfZHJvcF9leHRlbnRzKHRyYW5zLCByb290LCBpbm9kZSwgb2ZmLCBvZmYgKyBsZW4sCi0JCQkgICBvZmYgKyBsZW4sIDAsICZoaW50X2J5dGUsIDEpOworCWJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgaW5vZGUsIG9mZiwgb2ZmICsgbGVuLCAmaGludF9ieXRlLCAxKTsKIAogCS8qIGNsb25lIGRhdGEgKi8KIAlrZXkub2JqZWN0aWQgPSBzcmMtPmlfaW5vOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwppbmRleCA1Nzk5YmM0Li5iMTBhNDlkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYworKysgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYwpAQCAtMjkxLDE2ICsyOTEsMTYgQEAKIAogLyoKICAqIHJlbW92ZSBhbiBvcmRlcmVkIGV4dGVudCBmcm9tIHRoZSB0cmVlLiAgTm8gcmVmZXJlbmNlcyBhcmUgZHJvcHBlZAotICogYnV0LCBhbnlvbmUgd2FpdGluZyBvbiB0aGlzIGV4dGVudCBpcyB3b2tlbiB1cC4KKyAqIGFuZCB5b3UgbXVzdCB3YWtlX3VwIGVudHJ5LT53YWl0LiAgWW91IG11c3QgaG9sZCB0aGUgdHJlZSBtdXRleAorICogd2hpbGUgeW91IGNhbGwgdGhpcyBmdW5jdGlvbi4KICAqLwotaW50IGJ0cmZzX3JlbW92ZV9vcmRlcmVkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBfX2J0cmZzX3JlbW92ZV9vcmRlcmVkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqZW50cnkpCiB7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZSAqdHJlZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAogCXRyZWUgPSAmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfdHJlZTsKLQltdXRleF9sb2NrKCZ0cmVlLT5tdXRleCk7CiAJbm9kZSA9ICZlbnRyeS0+cmJfbm9kZTsKIAlyYl9lcmFzZShub2RlLCAmdHJlZS0+dHJlZSk7CiAJdHJlZS0+bGFzdCA9IE5VTEw7CkBAIC0zMjYsMTYgKzMyNiwzNCBAQAogCX0KIAlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOwogCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZW1vdmUgYW4gb3JkZXJlZCBleHRlbnQgZnJvbSB0aGUgdHJlZS4gIE5vIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQKKyAqIGJ1dCBhbnkgd2FpdGVycyBhcmUgd29rZW4uCisgKi8KK2ludCBidHJmc19yZW1vdmVfb3JkZXJlZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKmVudHJ5KQoreworCXN0cnVjdCBidHJmc19vcmRlcmVkX2lub2RlX3RyZWUgKnRyZWU7CisJaW50IHJldDsKKworCXRyZWUgPSAmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfdHJlZTsKKwltdXRleF9sb2NrKCZ0cmVlLT5tdXRleCk7CisJcmV0ID0gX19idHJmc19yZW1vdmVfb3JkZXJlZF9leHRlbnQoaW5vZGUsIGVudHJ5KTsKIAltdXRleF91bmxvY2soJnRyZWUtPm11dGV4KTsKIAl3YWtlX3VwKCZlbnRyeS0+d2FpdCk7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgogICogd2FpdCBmb3IgYWxsIHRoZSBvcmRlcmVkIGV4dGVudHMgaW4gYSByb290LiAgVGhpcyBpcyBkb25lIHdoZW4gYmFsYW5jaW5nCiAgKiBzcGFjZSBiZXR3ZWVuIGRyaXZlcy4KICAqLwotaW50IGJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9jb3dfb25seSkKK2ludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgICBpbnQgbm9jb3dfb25seSwgaW50IGRlbGF5X2lwdXQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBzcGxpY2U7CiAJc3RydWN0IGxpc3RfaGVhZCAqY3VyOwpAQCAtMzcyLDcgKzM5MCwxMCBAQAogCQlpZiAoaW5vZGUpIHsKIAkJCWJ0cmZzX3N0YXJ0X29yZGVyZWRfZXh0ZW50KGlub2RlLCBvcmRlcmVkLCAxKTsKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKLQkJCWlwdXQoaW5vZGUpOworCQkJaWYgKGRlbGF5X2lwdXQpCisJCQkJYnRyZnNfYWRkX2RlbGF5ZWRfaXB1dChpbm9kZSk7CisJCQllbHNlCisJCQkJaXB1dChpbm9kZSk7CiAJCX0gZWxzZSB7CiAJCQlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZCk7CiAJCX0KQEAgLTQzMCw3ICs0NTEsNyBAQAogCQkJCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CiAJCQllbHNlCiAJCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKLQkJCWlwdXQoaW5vZGUpOworCQkJYnRyZnNfYWRkX2RlbGF5ZWRfaXB1dChpbm9kZSk7CiAJCX0KIAogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTU4OSw3ICs2MTAsNyBAQAogICogQWZ0ZXIgYW4gZXh0ZW50IGlzIGRvbmUsIGNhbGwgdGhpcyB0byBjb25kaXRpb25hbGx5IHVwZGF0ZSB0aGUgb24gZGlzawogICogaV9zaXplLiAgaV9zaXplIGlzIHVwZGF0ZWQgdG8gY292ZXIgYW55IGZ1bGx5IHdyaXR0ZW4gcGFydCBvZiB0aGUgZmlsZS4KICAqLwotaW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZCkKIHsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9pbm9kZV90cmVlICp0cmVlID0gJkJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX3RyZWU7CkBAIC01OTcsMTggKzYxOCwzMCBAQAogCXU2NCBkaXNrX2lfc2l6ZTsKIAl1NjQgbmV3X2lfc2l6ZTsKIAl1NjQgaV9zaXplX3Rlc3Q7CisJdTY0IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICp0ZXN0OworCWludCByZXQgPSAxOworCisJaWYgKG9yZGVyZWQpCisJCW9mZnNldCA9IGVudHJ5X2VuZChvcmRlcmVkKTsKIAogCW11dGV4X2xvY2soJnRyZWUtPm11dGV4KTsKIAlkaXNrX2lfc2l6ZSA9IEJUUkZTX0koaW5vZGUpLT5kaXNrX2lfc2l6ZTsKIAorCS8qIHRydW5jYXRlIGZpbGUgKi8KKwlpZiAoZGlza19pX3NpemUgPiBpX3NpemUpIHsKKwkJQlRSRlNfSShpbm9kZSktPmRpc2tfaV9zaXplID0gaV9zaXplOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAkvKgogCSAqIGlmIHRoZSBkaXNrIGlfc2l6ZSBpcyBhbHJlYWR5IGF0IHRoZSBpbm9kZS0+aV9zaXplLCBvcgogCSAqIHRoaXMgb3JkZXJlZCBleHRlbnQgaXMgaW5zaWRlIHRoZSBkaXNrIGlfc2l6ZSwgd2UncmUgZG9uZQogCSAqLwotCWlmIChkaXNrX2lfc2l6ZSA+PSBpbm9kZS0+aV9zaXplIHx8Ci0JICAgIG9yZGVyZWQtPmZpbGVfb2Zmc2V0ICsgb3JkZXJlZC0+bGVuIDw9IGRpc2tfaV9zaXplKSB7CisJaWYgKGRpc2tfaV9zaXplID09IGlfc2l6ZSB8fCBvZmZzZXQgPD0gZGlza19pX3NpemUpIHsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC02MTYsOCArNjQ5LDcgQEAKIAkgKiB3ZSBjYW4ndCB1cGRhdGUgdGhlIGRpc2tfaXNpemUgaWYgdGhlcmUgYXJlIGRlbGFsbG9jIGJ5dGVzCiAJICogYmV0d2VlbiBkaXNrX2lfc2l6ZSBhbmQgIHRoaXMgb3JkZXJlZCBleHRlbnQKIAkgKi8KLQlpZiAodGVzdF9yYW5nZV9iaXQoaW9fdHJlZSwgZGlza19pX3NpemUsCi0JCQkgICBvcmRlcmVkLT5maWxlX29mZnNldCArIG9yZGVyZWQtPmxlbiAtIDEsCisJaWYgKHRlc3RfcmFuZ2VfYml0KGlvX3RyZWUsIGRpc2tfaV9zaXplLCBvZmZzZXQgLSAxLAogCQkJICAgRVhURU5UX0RFTEFMTE9DLCAwLCBOVUxMKSkgewogCQlnb3RvIG91dDsKIAl9CkBAIC02MjYsMjAgKzY1OCwzMiBAQAogCSAqIGlmIHdlIGZpbmQgYW4gb3JkZXJlZCBleHRlbnQgdGhlbiB3ZSBjYW4ndCB1cGRhdGUgZGlzayBpX3NpemUKIAkgKiB5ZXQKIAkgKi8KLQlub2RlID0gJm9yZGVyZWQtPnJiX25vZGU7Ci0Jd2hpbGUgKDEpIHsKLQkJbm9kZSA9IHJiX3ByZXYobm9kZSk7Ci0JCWlmICghbm9kZSkKLQkJCWJyZWFrOworCWlmIChvcmRlcmVkKSB7CisJCW5vZGUgPSByYl9wcmV2KCZvcmRlcmVkLT5yYl9ub2RlKTsKKwl9IGVsc2UgeworCQlwcmV2ID0gdHJlZV9zZWFyY2godHJlZSwgb2Zmc2V0KTsKKwkJLyoKKwkJICogd2UgaW5zZXJ0IGZpbGUgZXh0ZW50cyB3aXRob3V0IGludm9sdmluZyBvcmRlcmVkIHN0cnVjdCwKKwkJICogc28gdGhlcmUgc2hvdWxkIGJlIG5vIG9yZGVyZWQgc3RydWN0IGNvdmVyIHRoaXMgb2Zmc2V0CisJCSAqLworCQlpZiAocHJldikgeworCQkJdGVzdCA9IHJiX2VudHJ5KHByZXYsIHN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCwKKwkJCQkJcmJfbm9kZSk7CisJCQlCVUdfT04ob2Zmc2V0X2luX2VudHJ5KHRlc3QsIG9mZnNldCkpOworCQl9CisJCW5vZGUgPSBwcmV2OworCX0KKwl3aGlsZSAobm9kZSkgewogCQl0ZXN0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50LCByYl9ub2RlKTsKIAkJaWYgKHRlc3QtPmZpbGVfb2Zmc2V0ICsgdGVzdC0+bGVuIDw9IGRpc2tfaV9zaXplKQogCQkJYnJlYWs7Ci0JCWlmICh0ZXN0LT5maWxlX29mZnNldCA+PSBpbm9kZS0+aV9zaXplKQorCQlpZiAodGVzdC0+ZmlsZV9vZmZzZXQgPj0gaV9zaXplKQogCQkJYnJlYWs7CiAJCWlmICh0ZXN0LT5maWxlX29mZnNldCA+PSBkaXNrX2lfc2l6ZSkKIAkJCWdvdG8gb3V0OworCQlub2RlID0gcmJfcHJldihub2RlKTsKIAl9Ci0JbmV3X2lfc2l6ZSA9IG1pbl90KHU2NCwgZW50cnlfZW5kKG9yZGVyZWQpLCBpX3NpemVfcmVhZChpbm9kZSkpOworCW5ld19pX3NpemUgPSBtaW5fdCh1NjQsIG9mZnNldCwgaV9zaXplKTsKIAogCS8qCiAJICogYXQgdGhpcyBwb2ludCwgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IHVwZGF0ZSBpX3NpemUgdG8gYXQgbGVhc3QKQEAgLTY0Nyw3ICs2OTEsMTQgQEAKIAkgKiB3YWxrIGZvcndhcmQgYW5kIHNlZSBpZiBpb3MgZnJvbSBoaWdoZXIgdXAgaW4gdGhlIGZpbGUgaGF2ZQogCSAqIGZpbmlzaGVkLgogCSAqLwotCW5vZGUgPSByYl9uZXh0KCZvcmRlcmVkLT5yYl9ub2RlKTsKKwlpZiAob3JkZXJlZCkgeworCQlub2RlID0gcmJfbmV4dCgmb3JkZXJlZC0+cmJfbm9kZSk7CisJfSBlbHNlIHsKKwkJaWYgKHByZXYpCisJCQlub2RlID0gcmJfbmV4dChwcmV2KTsKKwkJZWxzZQorCQkJbm9kZSA9IHJiX2ZpcnN0KCZ0cmVlLT50cmVlKTsKKwl9CiAJaV9zaXplX3Rlc3QgPSAwOwogCWlmIChub2RlKSB7CiAJCS8qCkBAIC02NTUsMTAgKzcwNiwxMCBAQAogCQkgKiBiZXR3ZWVuIG91ciBvcmRlcmVkIGV4dGVudCBhbmQgdGhlIG5leHQgb25lLgogCQkgKi8KIAkJdGVzdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCwgcmJfbm9kZSk7Ci0JCWlmICh0ZXN0LT5maWxlX29mZnNldCA+IGVudHJ5X2VuZChvcmRlcmVkKSkKKwkJaWYgKHRlc3QtPmZpbGVfb2Zmc2V0ID4gb2Zmc2V0KQogCQkJaV9zaXplX3Rlc3QgPSB0ZXN0LT5maWxlX29mZnNldDsKIAl9IGVsc2UgewotCQlpX3NpemVfdGVzdCA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJaV9zaXplX3Rlc3QgPSBpX3NpemU7CiAJfQogCiAJLyoKQEAgLTY2NywxNSArNzE4LDI1IEBACiAJICogYXJlIG5vIGRlbGFsbG9jIGJ5dGVzIGluIHRoaXMgYXJlYSwgaXQgaXMgc2FmZSB0byB1cGRhdGUKIAkgKiBkaXNrX2lfc2l6ZSB0byB0aGUgZW5kIG9mIHRoZSByZWdpb24uCiAJICovCi0JaWYgKGlfc2l6ZV90ZXN0ID4gZW50cnlfZW5kKG9yZGVyZWQpICYmCi0JICAgICF0ZXN0X3JhbmdlX2JpdChpb190cmVlLCBlbnRyeV9lbmQob3JkZXJlZCksIGlfc2l6ZV90ZXN0IC0gMSwKLQkJCSAgIEVYVEVOVF9ERUxBTExPQywgMCwgTlVMTCkpIHsKLQkJbmV3X2lfc2l6ZSA9IG1pbl90KHU2NCwgaV9zaXplX3Rlc3QsIGlfc2l6ZV9yZWFkKGlub2RlKSk7CisJaWYgKGlfc2l6ZV90ZXN0ID4gb2Zmc2V0ICYmCisJICAgICF0ZXN0X3JhbmdlX2JpdChpb190cmVlLCBvZmZzZXQsIGlfc2l6ZV90ZXN0IC0gMSwKKwkJCSAgICBFWFRFTlRfREVMQUxMT0MsIDAsIE5VTEwpKSB7CisJCW5ld19pX3NpemUgPSBtaW5fdCh1NjQsIGlfc2l6ZV90ZXN0LCBpX3NpemUpOwogCX0KIAlCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUgPSBuZXdfaV9zaXplOworCXJldCA9IDA7CiBvdXQ6CisJLyoKKwkgKiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgb3JkZXJlZCBleHRlbnQgd2l0aCB0aGUgdHJlZSBsb2NrIGhlbGQKKwkgKiBzbyB0aGF0IG90aGVyIHBlb3BsZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9uJ3QgZmluZCBvdXIgZnVsbHkKKwkgKiBwcm9jZXNzZWQgb3JkZXJlZCBlbnRyeSBhbmQgc2tpcCB1cGRhdGluZyB0aGUgaV9zaXplCisJICovCisJaWYgKG9yZGVyZWQpCisJCV9fYnRyZnNfcmVtb3ZlX29yZGVyZWRfZXh0ZW50KGlub2RlLCBvcmRlcmVkKTsKIAltdXRleF91bmxvY2soJnRyZWUtPm11dGV4KTsKLQlyZXR1cm4gMDsKKwlpZiAob3JkZXJlZCkKKwkJd2FrZV91cCgmb3JkZXJlZC0+d2FpdCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKaW5kZXggZjgyZTg3NC4uMWZlMTI4MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKQEAgLTE1MCwxMiArMTUwLDEzIEBACiBpbnQgYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGxlbik7CiBzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKgogYnRyZnNfbG9va3VwX2ZpcnN0X29yZGVyZWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqIGlub2RlLCB1NjQgZmlsZV9vZmZzZXQpOwotaW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZCk7CiBpbnQgYnRyZnNfZmluZF9vcmRlcmVkX3N1bShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LCB1NjQgZGlza19ieXRlbnIsIHUzMiAqc3VtKTsKLWludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG5vY293X29ubHkpOwogaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KTsKIGludCBidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgaW50IG5vY293X29ubHksIGludCBkZWxheV9pcHV0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IGNmY2M5M2MuLmE5NzI4NjggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTE1NjEsNiArMTU2MSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBwdXRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGlub2RldmVjICppdmVjOworCXdoaWxlICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlpdmVjID0gbGlzdF9lbnRyeShsaXN0LT5uZXh0LCBzdHJ1Y3QgaW5vZGV2ZWMsIGxpc3QpOworCQlsaXN0X2RlbCgmaXZlYy0+bGlzdCk7CisJCXdoaWxlIChpdmVjLT5uciA+IDApIHsKKwkJCWl2ZWMtPm5yLS07CisJCQlpcHV0KGl2ZWMtPmlub2RlW2l2ZWMtPm5yXSk7CisJCX0KKwkJa2ZyZWUoaXZlYyk7CisJfQorfQorCiBzdGF0aWMgaW50IGZpbmRfbmV4dF9rZXkoc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBsZXZlbCwKIAkJCSBzdHJ1Y3QgYnRyZnNfa2V5ICprZXkpCiAKQEAgLTE3MjMsNiArMTczNywxMSBAQAogCiAJCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogCisJCS8qCisJCSAqIHB1dCBpbm9kZXMgb3V0c2lkZSB0cmFuc2FjdGlvbiwgb3RoZXJ3aXNlIHdlIG1heSBkZWFkbG9jay4KKwkJICovCisJCXB1dF9pbm9kZXMoJmlub2RlX2xpc3QpOworCiAJCWlmIChyZXBsYWNlZCAmJiByYy0+c3RhZ2UgPT0gVVBEQVRFX0RBVEFfUFRSUykKIAkJCWludmFsaWRhdGVfZXh0ZW50X2NhY2hlKHJvb3QsICZrZXksICZuZXh0X2tleSk7CiAJfQpAQCAtMTc1MiwxOSArMTc3MSw3IEBACiAKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIAotCS8qCi0JICogcHV0IGlub2RlcyB3aGlsZSB3ZSBhcmVuJ3QgaG9sZGluZyB0aGUgdHJlZSBsb2NrcwotCSAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmaW5vZGVfbGlzdCkpIHsKLQkJc3RydWN0IGlub2RldmVjICppdmVjOwotCQlpdmVjID0gbGlzdF9lbnRyeShpbm9kZV9saXN0Lm5leHQsIHN0cnVjdCBpbm9kZXZlYywgbGlzdCk7Ci0JCWxpc3RfZGVsKCZpdmVjLT5saXN0KTsKLQkJd2hpbGUgKGl2ZWMtPm5yID4gMCkgewotCQkJaXZlYy0+bnItLTsKLQkJCWlwdXQoaXZlYy0+aW5vZGVbaXZlYy0+bnJdKTsKLQkJfQotCQlrZnJlZShpdmVjKTsKLQl9CisJcHV0X2lub2RlcygmaW5vZGVfbGlzdCk7CiAKIAlpZiAocmVwbGFjZWQgJiYgcmMtPnN0YWdlID09IFVQREFURV9EQVRBX1BUUlMpCiAJCWludmFsaWRhdGVfZXh0ZW50X2NhY2hlKHJvb3QsICZrZXksICZuZXh0X2tleSk7CkBAIC0zNTM0LDggKzM1NDEsOCBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJjLT5ibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJjLT5ibG9ja19ncm91cC0+ZmxhZ3MpOwogCi0JYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKGZzX2luZm8tPnRyZWVfcm9vdCk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMoZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMoZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhmc19pbmZvLT50cmVlX3Jvb3QsIDAsIDApOwogCiAJd2hpbGUgKDEpIHsKIAkJcmMtPmV4dGVudHNfZm91bmQgPSAwOwpAQCAtMzc1NSw2ICszNzYyLDcgQEAKIAkJCQkgICAgICAgQlRSRlNfREFUQV9SRUxPQ19UUkVFX09CSkVDVElEKTsKIAkJaWYgKElTX0VSUihmc19yb290KSkKIAkJCWVyciA9IFBUUl9FUlIoZnNfcm9vdCk7CisJCWJ0cmZzX29ycGhhbl9jbGVhbnVwKGZzX3Jvb3QpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggNzUyYTU0Ni4uM2Y5YjQ1NyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CiAJY2hhciAqcCwgKm51bTsKIAlpbnQgaW50YXJnOworCWludCByZXQgPSAwOwogCiAJaWYgKCFvcHRpb25zKQogCQlyZXR1cm4gMDsKQEAgLTI2MiwxMiArMjYzLDE4IEBACiAJCWNhc2UgT3B0X2Rpc2NhcmQ6CiAJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRElTQ0FSRCk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyOgorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IHVucmVjb2duaXplZCBtb3VudCBvcHRpb24gIgorCQkJICAgICAgICInJXMnXG4iLCBwKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAJfQorb3V0OgogCWtmcmVlKG9wdGlvbnMpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC00MDUsOCArNDEyLDggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOwotCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDApOworCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290LCAwKTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAwKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTQ1MCw2ICs0NTcsOCBAQAogCQlzZXFfcHV0cyhzZXEsICIsbm90cmVlbG9nIik7CiAJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIEZMVVNIT05DT01NSVQpKQogCQlzZXFfcHV0cyhzZXEsICIsZmx1c2hvbmNvbW1pdCIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGRpc2NhcmQiKTsKIAlpZiAoIShyb290LT5mc19pbmZvLT5zYi0+c19mbGFncyAmIE1TX1BPU0lYQUNMKSkKIAkJc2VxX3B1dHMoc2VxLCAiLG5vYWNsIik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBjMjA3ZThjLi5iMmFjYzc5IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTMzMyw2ICszMzMsOSBAQAogCW1lbXNldCh0cmFucywgMCwgc2l6ZW9mKCp0cmFucykpOwogCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCB0cmFucyk7CiAKKwlpZiAodGhyb3R0bGUpCisJCWJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHJvb3QpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NCw3ICszNTcsNyBAQAogICogdGhvc2UgZXh0ZW50cyBhcmUgc2VudCB0byBkaXNrIGJ1dCBkb2VzIG5vdCB3YWl0IG9uIHRoZW0KICAqLwogaW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJICAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcywgaW50IG1hcmspCiB7CiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKQEAgLTM2Nyw3ICszNzAsNyBAQAogCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KGRpcnR5X3BhZ2VzLCBzdGFydCwgJnN0YXJ0LCAmZW5kLAotCQkJCQkgICAgRVhURU5UX0RJUlRZKTsKKwkJCQkJICAgIG1hcmspOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKQEAgLTQxMyw3ICs0MTYsNyBAQAogICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCiAgKi8KIGludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKKwkJCSAgICAgIHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMsIGludCBtYXJrKQogewogCWludCByZXQ7CiAJaW50IGVyciA9IDA7CkBAIC00MjUsMTIgKzQyOCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAl3aGlsZSAoMSkgewotCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKLQkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CisJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdChkaXJ0eV9wYWdlcywgc3RhcnQsICZzdGFydCwgJmVuZCwKKwkJCQkJICAgIG1hcmspOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJY2xlYXJfZXh0ZW50X2RpcnR5KGRpcnR5X3BhZ2VzLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7CisJCWNsZWFyX2V4dGVudF9iaXRzKGRpcnR5X3BhZ2VzLCBzdGFydCwgZW5kLCBtYXJrLCBHRlBfTk9GUyk7CiAJCXdoaWxlIChzdGFydCA8PSBlbmQpIHsKIAkJCWluZGV4ID0gc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAkJCXN0YXJ0ID0gKHU2NCkoaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtNDYwLDEzICs0NjMsMTMgQEAKICAqIHRob3NlIGV4dGVudHMgYXJlIG9uIGRpc2sgZm9yIHRyYW5zYWN0aW9uIG9yIGxvZyBjb21taXQKICAqLwogaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKQorCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMsIGludCBtYXJrKQogewogCWludCByZXQ7CiAJaW50IHJldDI7CiAKLQlyZXQgPSBidHJmc193cml0ZV9tYXJrZWRfZXh0ZW50cyhyb290LCBkaXJ0eV9wYWdlcyk7Ci0JcmV0MiA9IGJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzLCBtYXJrKTsKKwlyZXQyID0gYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhyb290LCBkaXJ0eV9wYWdlcywgbWFyayk7CiAJcmV0dXJuIHJldCB8fCByZXQyOwogfQogCkBAIC00NzksNyArNDgyLDggQEAKIAkJcmV0dXJuIGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoYnRyZWVfaW5vZGUtPmlfbWFwcGluZyk7CiAJfQogCXJldHVybiBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhyb290LAotCQkJCQkgICAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kaXJ0eV9wYWdlcyk7CisJCQkJCSAgICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRpcnR5X3BhZ2VzLAorCQkJCQkgICBFWFRFTlRfRElSVFkpOwogfQogCiAvKgpAQCAtNDk3LDEzICs1MDEsMTYgQEAKIHsKIAlpbnQgcmV0OwogCXU2NCBvbGRfcm9vdF9ieXRlbnI7CisJdTY0IG9sZF9yb290X3VzZWQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnRyZWVfcm9vdCA9IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdDsKIAorCW9sZF9yb290X3VzZWQgPSBidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSk7CiAJYnRyZnNfd3JpdGVfZGlydHlfYmxvY2tfZ3JvdXBzKHRyYW5zLCByb290KTsKIAogCXdoaWxlICgxKSB7CiAJCW9sZF9yb290X2J5dGVuciA9IGJ0cmZzX3Jvb3RfYnl0ZW5yKCZyb290LT5yb290X2l0ZW0pOwotCQlpZiAob2xkX3Jvb3RfYnl0ZW5yID09IHJvb3QtPm5vZGUtPnN0YXJ0KQorCQlpZiAob2xkX3Jvb3RfYnl0ZW5yID09IHJvb3QtPm5vZGUtPnN0YXJ0ICYmCisJCSAgICBvbGRfcm9vdF91c2VkID09IGJ0cmZzX3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtKSkKIAkJCWJyZWFrOwogCiAJCWJ0cmZzX3NldF9yb290X25vZGUoJnJvb3QtPnJvb3RfaXRlbSwgcm9vdC0+bm9kZSk7CkBAIC01MTIsNiArNTE5LDcgQEAKIAkJCQkJJnJvb3QtPnJvb3RfaXRlbSk7CiAJCUJVR19PTihyZXQpOwogCisJCW9sZF9yb290X3VzZWQgPSBidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSk7CiAJCXJldCA9IGJ0cmZzX3dyaXRlX2RpcnR5X2Jsb2NrX2dyb3Vwcyh0cmFucywgcm9vdCk7CiAJCUJVR19PTihyZXQpOwogCX0KQEAgLTc5NSw3ICs4MDMsNiBAQAogCW1lbWNweSgmcGVuZGluZy0+cm9vdF9rZXksICZrZXksIHNpemVvZihrZXkpKTsKIGZhaWw6CiAJa2ZyZWUobmV3X3Jvb3RfaXRlbSk7Ci0JYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgwNyw3ICs4MTQsNiBAQAogCXU2NCBpbmRleCA9IDA7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CiAJc3RydWN0IGlub2RlICpwYXJlbnRfaW5vZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcGFyZW50X3Jvb3Q7CiAKIAlwYXJlbnRfaW5vZGUgPSBwZW5kaW5nLT5kZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwpAQCAtODM5LDggKzg0NSw2IEBACiAKIAlCVUdfT04ocmV0KTsKIAotCWlub2RlID0gYnRyZnNfbG9va3VwX2RlbnRyeShwYXJlbnRfaW5vZGUsIHBlbmRpbmctPmRlbnRyeSk7Ci0JZF9pbnN0YW50aWF0ZShwZW5kaW5nLT5kZW50cnksIGlub2RlKTsKIGZhaWw6CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCBmc19pbmZvLT5mc19yb290KTsKIAlyZXR1cm4gcmV0OwpAQCAtOTk0LDExICs5OTgsMTEgQEAKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAkJaWYgKGZsdXNoX29uX2NvbW1pdCkgewotCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOwotCQkJcmV0ID0gYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCk7CisJCQlidHJmc19zdGFydF9kZWxhbGxvY19pbm9kZXMocm9vdCwgMSk7CisJCQlyZXQgPSBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAxKTsKIAkJCUJVR19PTihyZXQpOwogCQl9IGVsc2UgaWYgKHNuYXBfcGVuZGluZykgewotCQkJcmV0ID0gYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMSk7CisJCQlyZXQgPSBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwLCAxKTsKIAkJCUJVR19PTihyZXQpOwogCQl9CiAKQEAgLTExMTYsNiArMTEyMCwxMCBAQAogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOwogCiAJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIHRyYW5zKTsKKworCWlmIChjdXJyZW50ICE9IHJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWQpCisJCWJ0cmZzX3J1bl9kZWxheWVkX2lwdXRzKHJvb3QpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaCBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKaW5kZXggZDRlM2U3YS4uOTNjN2NjYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAorKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogaW50IGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CisJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcywgaW50IG1hcmspOwogaW50IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzKTsKKwkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmRpcnR5X3BhZ2VzLCBpbnQgbWFyayk7CiBpbnQgYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CisJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcywgaW50IG1hcmspOwogaW50IGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDc0MTY2NmEuLjRhOTQzNGIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtNTQyLDggKzU0Miw4IEBACiAKIAlzYXZlZF9uYnl0ZXMgPSBpbm9kZV9nZXRfYnl0ZXMoaW5vZGUpOwogCS8qIGRyb3AgYW55IG92ZXJsYXBwaW5nIGV4dGVudHMgKi8KLQlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIHJvb3QsIGlub2RlLAotCQkJIHN0YXJ0LCBleHRlbnRfZW5kLCBleHRlbnRfZW5kLCBzdGFydCwgJmFsbG9jX2hpbnQsIDEpOworCXJldCA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgaW5vZGUsIHN0YXJ0LCBleHRlbnRfZW5kLAorCQkJCSAmYWxsb2NfaGludCwgMSk7CiAJQlVHX09OKHJldCk7CiAKIAlpZiAoZm91bmRfdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9SRUcgfHwKQEAgLTkzMCw2ICs5MzAsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpbnNlcnRfb3JwaGFuX2l0ZW0oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IG9mZnNldCkKK3sKKwlpbnQgcmV0OworCXJldCA9IGJ0cmZzX2ZpbmRfb3JwaGFuX2l0ZW0ocm9vdCwgb2Zmc2V0KTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gYnRyZnNfaW5zZXJ0X29ycGhhbl9pdGVtKHRyYW5zLCByb290LCBvZmZzZXQpOworCXJldHVybiByZXQ7Cit9CisKKwogLyoKICAqIFRoZXJlIGFyZSBhIGZldyBjb3JuZXJzIHdoZXJlIHRoZSBsaW5rIGNvdW50IG9mIHRoZSBmaWxlIGNhbid0CiAgKiBiZSBwcm9wZXJseSBtYWludGFpbmVkIGR1cmluZyByZXBsYXkuICBTbywgaW5zdGVhZCBvZiBhZGRpbmcKQEAgLTk5Nyw5ICsxMDA4LDEzIEBACiAJfQogCUJUUkZTX0koaW5vZGUpLT5pbmRleF9jbnQgPSAodTY0KS0xOwogCi0JaWYgKGlub2RlLT5pX25saW5rID09IDAgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQlyZXQgPSByZXBsYXlfZGlyX2RlbGV0ZXModHJhbnMsIHJvb3QsIE5VTEwsIHBhdGgsCi0JCQkJCSBpbm9kZS0+aV9pbm8sIDEpOworCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCQlyZXQgPSByZXBsYXlfZGlyX2RlbGV0ZXModHJhbnMsIHJvb3QsIE5VTEwsIHBhdGgsCisJCQkJCQkgaW5vZGUtPmlfaW5vLCAxKTsKKwkJCUJVR19PTihyZXQpOworCQl9CisJCXJldCA9IGluc2VydF9vcnBoYW5faXRlbSh0cmFucywgcm9vdCwgaW5vZGUtPmlfaW5vKTsKIAkJQlVHX09OKHJldCk7CiAJfQogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTE1ODcsNyArMTYwMiw2IEBACiAJCS8qIGlub2RlIGtleXMgYXJlIGRvbmUgZHVyaW5nIHRoZSBmaXJzdCBzdGFnZSAqLwogCQlpZiAoa2V5LnR5cGUgPT0gQlRSRlNfSU5PREVfSVRFTV9LRVkgJiYKIAkJICAgIHdjLT5zdGFnZSA9PSBMT0dfV0FMS19SRVBMQVlfSU5PREVTKSB7Ci0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCQkJc3RydWN0IGJ0cmZzX2lub2RlX2l0ZW0gKmlub2RlX2l0ZW07CiAJCQl1MzIgbW9kZTsKIApAQCAtMTYwMywzMSArMTYxNywxNiBAQAogCQkJCQkgICAgIGViLCBpLCAma2V5KTsKIAkJCUJVR19PTihyZXQpOwogCi0JCQkvKiBmb3IgcmVndWxhciBmaWxlcywgdHJ1bmNhdGUgYXdheQotCQkJICogZXh0ZW50cyBwYXN0IHRoZSBuZXcgRU9GCisJCQkvKiBmb3IgcmVndWxhciBmaWxlcywgbWFrZSBzdXJlIGNvcnJlc3BvbmRpbmcKKwkJCSAqIG9yaHBhbiBpdGVtIGV4aXN0LiBleHRlbnRzIHBhc3QgdGhlIG5ldyBFT0YKKwkJCSAqIHdpbGwgYmUgdHJ1bmNhdGVkIGxhdGVyIGJ5IG9ycGhhbiBjbGVhbnVwLgogCQkJICovCiAJCQlpZiAoU19JU1JFRyhtb2RlKSkgewotCQkJCWlub2RlID0gcmVhZF9vbmVfaW5vZGUocm9vdCwKLQkJCQkJCSAgICAgICBrZXkub2JqZWN0aWQpOwotCQkJCUJVR19PTighaW5vZGUpOwotCi0JCQkJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXMod2MtPnRyYW5zLAotCQkJCQlyb290LCBpbm9kZSwgaW5vZGUtPmlfc2l6ZSwKLQkJCQkJQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKKwkJCQlyZXQgPSBpbnNlcnRfb3JwaGFuX2l0ZW0od2MtPnRyYW5zLCByb290LAorCQkJCQkJCSBrZXkub2JqZWN0aWQpOwogCQkJCUJVR19PTihyZXQpOwotCi0JCQkJLyogaWYgdGhlIG5saW5rIGNvdW50IGlzIHplcm8gaGVyZSwgdGhlIGlwdXQKLQkJCQkgKiB3aWxsIGZyZWUgdGhlIGlub2RlLiAgV2UgYnVtcCBpdCB0byBtYWtlCi0JCQkJICogc3VyZSBpdCBkb2Vzbid0IGdldCBmcmVlZCB1bnRpbCB0aGUgbGluawotCQkJCSAqIGNvdW50IGZpeHVwIGlzIGRvbmUKLQkJCQkgKi8KLQkJCQlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkgewotCQkJCQlidHJmc19pbmNfbmxpbmsoaW5vZGUpOwotCQkJCQlidHJmc191cGRhdGVfaW5vZGUod2MtPnRyYW5zLAotCQkJCQkJCSAgIHJvb3QsIGlub2RlKTsKLQkJCQl9Ci0JCQkJaXB1dChpbm9kZSk7CiAJCQl9CisKIAkJCXJldCA9IGxpbmtfdG9fZml4dXBfZGlyKHdjLT50cmFucywgcm9vdCwKIAkJCQkJCXBhdGgsIGtleS5vYmplY3RpZCk7CiAJCQlCVUdfT04ocmV0KTsKQEAgLTE5NzcsMTAgKzE5NzYsMTEgQEAKIHsKIAlpbnQgaW5kZXgxOwogCWludCBpbmRleDI7CisJaW50IG1hcms7CiAJaW50IHJldDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZ19yb290X3RyZWUgPSByb290LT5mc19pbmZvLT5sb2dfcm9vdF90cmVlOwotCXU2NCBsb2dfdHJhbnNpZCA9IDA7CisJdW5zaWduZWQgbG9uZyBsb2dfdHJhbnNpZCA9IDA7CiAKIAltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCWluZGV4MSA9IHJvb3QtPmxvZ190cmFuc2lkICUgMjsKQEAgLTIwMTQsMjQgKzIwMTQsMjkgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbG9nX3RyYW5zaWQgPSByb290LT5sb2dfdHJhbnNpZDsKKwlpZiAobG9nX3RyYW5zaWQgJSAyID09IDApCisJCW1hcmsgPSBFWFRFTlRfRElSVFk7CisJZWxzZQorCQltYXJrID0gRVhURU5UX05FVzsKKwogCS8qIHdlIHN0YXJ0IElPIG9uICBhbGwgdGhlIG1hcmtlZCBleHRlbnRzIGhlcmUsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogCSAqIHdhaXQgZm9yIHRoZW0gdW50aWwgbGF0ZXIuCiAJICovCi0JcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOworCXJldCA9IGJ0cmZzX3dyaXRlX21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzLCBtYXJrKTsKIAlCVUdfT04ocmV0KTsKIAogCWJ0cmZzX3NldF9yb290X25vZGUoJmxvZy0+cm9vdF9pdGVtLCBsb2ctPm5vZGUpOwogCiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKLQlsb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ190cmFuc2lkKys7CiAJbG9nLT5sb2dfdHJhbnNpZCA9IHJvb3QtPmxvZ190cmFuc2lkOwogCXJvb3QtPmxvZ19zdGFydF9waWQgPSAwOwogCXNtcF9tYigpOwogCS8qCi0JICogbG9nIHRyZWUgaGFzIGJlZW4gZmx1c2hlZCB0byBkaXNrLCBuZXcgbW9kaWZpY2F0aW9ucyBvZgotCSAqIHRoZSBsb2cgd2lsbCBiZSB3cml0dGVuIHRvIG5ldyBwb3NpdGlvbnMuIHNvIGl0J3Mgc2FmZSB0bwotCSAqIGFsbG93IGxvZyB3cml0ZXJzIHRvIGdvIGluLgorCSAqIElPIGhhcyBiZWVuIHN0YXJ0ZWQsIGJsb2NrcyBvZiB0aGUgbG9nIHRyZWUgaGF2ZSBXUklUVEVOIGZsYWcgc2V0CisJICogaW4gdGhlaXIgaGVhZGVycy4gbmV3IG1vZGlmaWNhdGlvbnMgb2YgdGhlIGxvZyB3aWxsIGJlIHdyaXR0ZW4gdG8KKwkgKiBuZXcgcG9zaXRpb25zLiBzbyBpdCdzIHNhZmUgdG8gYWxsb3cgbG9nIHdyaXRlcnMgdG8gZ28gaW4uCiAJICovCiAJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCkBAIC0yMDUyLDcgKzIwNTcsNyBAQAogCiAJaW5kZXgyID0gbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdKSkgewotCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcywgbWFyayk7CiAJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKIAkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKQEAgLTIwNzIsMTYgKzIwNzcsMTcgQEAKIAkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgogCSAqLwogCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgewotCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKKwkJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcywgbWFyayk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXRfd2FrZV9sb2dfcm9vdDsKIAl9CiAKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2dfcm9vdF90cmVlLAotCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMpOworCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMsCisJCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX05FVyk7CiAJQlVHX09OKHJldCk7Ci0JYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcyk7CisJYnRyZnNfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2csICZsb2ctPmRpcnR5X2xvZ19wYWdlcywgbWFyayk7CiAKIAlidHJmc19zZXRfc3VwZXJfbG9nX3Jvb3QoJnJvb3QtPmZzX2luZm8tPnN1cGVyX2Zvcl9jb21taXQsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bm9kZS0+c3RhcnQpOwpAQCAtMjE0NywxMiArMjE1MywxMiBAQAogCiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZsb2ctPmRpcnR5X2xvZ19wYWdlcywKLQkJCQkgICAgMCwgJnN0YXJ0LCAmZW5kLCBFWFRFTlRfRElSVFkpOworCQkJCTAsICZzdGFydCwgJmVuZCwgRVhURU5UX0RJUlRZIHwgRVhURU5UX05FVyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQljbGVhcl9leHRlbnRfZGlydHkoJmxvZy0+ZGlydHlfbG9nX3BhZ2VzLAotCQkJCSAgIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKKwkJY2xlYXJfZXh0ZW50X2JpdHMoJmxvZy0+ZGlydHlfbG9nX3BhZ2VzLCBzdGFydCwgZW5kLAorCQkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX05FVywgR0ZQX05PRlMpOwogCX0KIAogCWlmIChsb2ctPmxvZ190cmFuc2lkID4gMCkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IDdlZGE0ODMuLjE5OGNmZjIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTIyMDksNyArMjIwOSw3IEBACiAJCW1heF9jaHVua19zaXplID0gMTAgKiBjYWxjX3NpemU7CiAJCW1pbl9zdHJpcGVfc2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CiAJfSBlbHNlIGlmICh0eXBlICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpIHsKLQkJbWF4X2NodW5rX3NpemUgPSA0ICogY2FsY19zaXplOworCQltYXhfY2h1bmtfc2l6ZSA9IDI1NiAqIDEwMjQgKiAxMDI0OwogCQltaW5fc3RyaXBlX3NpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogCX0gZWxzZSBpZiAodHlwZSAmIEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTSkgewogCQljYWxjX3NpemUgPSA4ICogMTAyNCAqIDEwMjQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5jIGIvZnMvYnRyZnMveGF0dHIuYwppbmRleCBiNmRkNTk2Li4xOTNiNThmIDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTg1LDIyICs4NSwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2J0cmZzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGRvX3NldHhhdHRyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBidHJmc19kaXJfaXRlbSAqZGk7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKLQlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlpbnQgcmV0ID0gMCwgbW9kID0gMDsKKwlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHJldCA9IDA7CisKKwlpZiAobmFtZV9sZW4gKyBzaXplID4gQlRSRlNfTUFYX1hBVFRSX1NJWkUocm9vdCkpCisJCXJldHVybiAtRU5PU1BDOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCiAJLyogZmlyc3QgbGV0cyBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgeGF0dHIgKi8KIAlkaSA9IGJ0cmZzX2xvb2t1cF94YXR0cih0cmFucywgcm9vdCwgcGF0aCwgaW5vZGUtPmlfaW5vLCBuYW1lLAogCQkJCXN0cmxlbihuYW1lKSwgLTEpOwpAQCAtMTE4LDE1ICsxMTksMTIgQEAKIAkJfQogCiAJCXJldCA9IGJ0cmZzX2RlbGV0ZV9vbmVfZGlyX25hbWUodHJhbnMsIHJvb3QsIHBhdGgsIGRpKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQlCVUdfT04ocmV0KTsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCiAJCS8qIGlmIHdlIGRvbid0IGhhdmUgYSB2YWx1ZSB0aGVuIHdlIGFyZSByZW1vdmluZyB0aGUgeGF0dHIgKi8KLQkJaWYgKCF2YWx1ZSkgewotCQkJbW9kID0gMTsKKwkJaWYgKCF2YWx1ZSkKIAkJCWdvdG8gb3V0OwotCQl9CiAJfSBlbHNlIHsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCkBAIC0xMzgsMjAgKzEzNiw0NSBAQAogCX0KIAogCS8qIG9rIHdlIGhhdmUgdG8gY3JlYXRlIGEgY29tcGxldGVseSBuZXcgeGF0dHIgKi8KLQlyZXQgPSBidHJmc19pbnNlcnRfeGF0dHJfaXRlbSh0cmFucywgcm9vdCwgbmFtZSwgc3RybGVuKG5hbWUpLAotCQkJCSAgICAgIHZhbHVlLCBzaXplLCBpbm9kZS0+aV9pbm8pOworCXJldCA9IGJ0cmZzX2luc2VydF94YXR0cl9pdGVtKHRyYW5zLCByb290LCBwYXRoLCBpbm9kZS0+aV9pbm8sCisJCQkJICAgICAgbmFtZSwgbmFtZV9sZW4sIHZhbHVlLCBzaXplKTsKKwlCVUdfT04ocmV0KTsKK291dDoKKwlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IF9fYnRyZnNfc2V0eGF0dHIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCWludCByZXQ7CisKKwlpZiAodHJhbnMpCisJCXJldHVybiBkb19zZXR4YXR0cih0cmFucywgaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CisKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOworCisJcmV0ID0gZG9fc2V0eGF0dHIodHJhbnMsIGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCW1vZCA9IDE7CiAKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwlCVUdfT04ocmV0KTsKIG91dDoKLQlpZiAobW9kKSB7Ci0JCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKLQl9Ci0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAyKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTQsNyArMzM3LDkgQEAKIAogCWlmIChzaXplID09IDApCiAJCXZhbHVlID0gIiI7ICAvKiBlbXB0eSBFQSwgZG8gbm90IHJlbW92ZSAqLwotCXJldHVybiBfX2J0cmZzX3NldHhhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKKworCXJldHVybiBfX2J0cmZzX3NldHhhdHRyKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsCisJCQkJZmxhZ3MpOwogfQogCiBpbnQgYnRyZnNfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtMzI5LDEwICszNTQsMTMgQEAKIAogCWlmICghYnRyZnNfaXNfdmFsaWRfeGF0dHIobmFtZSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gX19idHJmc19zZXR4YXR0cihkZW50cnktPmRfaW5vZGUsIG5hbWUsIE5VTEwsIDAsIFhBVFRSX1JFUExBQ0UpOworCisJcmV0dXJuIF9fYnRyZnNfc2V0eGF0dHIoTlVMTCwgZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBOVUxMLCAwLAorCQkJCVhBVFRSX1JFUExBQ0UpOwogfQogCi1pbnQgYnRyZnNfeGF0dHJfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcikKK2ludCBidHJmc194YXR0cl9zZWN1cml0eV9pbml0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCiB7CiAJaW50IGVycjsKIAlzaXplX3QgbGVuOwpAQCAtMzU0LDcgKzM4Miw3IEBACiAJfSBlbHNlIHsKIAkJc3RyY3B5KG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCk7CiAJCXN0cmNweShuYW1lICsgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiwgc3VmZml4KTsKLQkJZXJyID0gX19idHJmc19zZXR4YXR0cihpbm9kZSwgbmFtZSwgdmFsdWUsIGxlbiwgMCk7CisJCWVyciA9IF9fYnRyZnNfc2V0eGF0dHIodHJhbnMsIGlub2RlLCBuYW1lLCB2YWx1ZSwgbGVuLCAwKTsKIAkJa2ZyZWUobmFtZSk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5oIGIvZnMvYnRyZnMveGF0dHIuaAppbmRleCBjNzFlOWMzLi43MjFlZmEwIDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5oCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmgKQEAgLTI3LDE1ICsyNywxNiBAQAogCiBleHRlcm4gc3NpemVfdCBfX2J0cmZzX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwotZXh0ZXJuIGludCBfX2J0cmZzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLQorZXh0ZXJuIGludCBfX2J0cmZzX3NldHhhdHRyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHNzaXplX3QgYnRyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgYnRyZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gaW50IGJ0cmZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSk7CiAKLWV4dGVybiBpbnQgYnRyZnNfeGF0dHJfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CitleHRlcm4gaW50IGJ0cmZzX3hhdHRyX3NlY3VyaXR5X2luaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CiAKICNlbmRpZiAvKiBfX1hBVFRSX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCAwOTRlYTY1Li43YjI2MDBiIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC01LDcgKzUsOSBAQAogbW91bnRpbmcgdG8gT1MvNDAwIE5ldHNlcnZlLiBGaXggb29wcyBpbiBjaWZzX2dldF90Y3Bfc2Vzc2lvbi4KIERpc2FibGUgdXNlIG9mIHNlcnZlciBpbm9kZSBudW1iZXJzIHdoZW4gc2VydmVyIG9ubHkKIHBhcnRpYWxseSBzdXBwb3J0cyB0aGVtIChlLmcuIGZvciBvbmUgc2VydmVyIHF1ZXJ5aW5nIGlub2RlIG51bWJlcnMgb24KLUZpbmRGaXJzdCBmYWlscyBidXQgUVBhdGhJbmZvIHF1ZXJpZXMgd29ya3MpLgorRmluZEZpcnN0IGZhaWxzIGJ1dCBRUGF0aEluZm8gcXVlcmllcyB3b3JrcykuIEZpeCBvb3BzIHdpdGggZGZzIGluIAorY2lmc19wdXRfc21iX3Nlcy4gRml4IG1tYXAgdG8gd29yayBvbiBkaXJlY3RpbyBtb3VudHMgKG5lZWRlZAorZm9yIE9wZW5PZmZpY2Ugd2hlbiBvbiBmb3JjZWRpcmVjdGlvIG1vdW50IGUuZy4pCiAKIFZlcnNpb24gMS42MAogLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggMjlmMWRhNy4uOGM2YTAzNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC03NTgsNyArNzU4LDcgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19maWxlX2RpcmVjdF9vcHMgPSB7Ci0JLyogbm8gbW1hcCwgbm8gYWlvLCBubyByZWFkdiAtCisJLyogbm8gYWlvLCBubyByZWFkdiAtCiAJICAgQkIgcmVldmFsdWF0ZSB3aGV0aGVyIHRoZXkgY2FuIGJlIGRvbmUgd2l0aCBkaXJlY3Rpbywgbm8gY2FjaGUgKi8KIAkucmVhZCA9IGNpZnNfdXNlcl9yZWFkLAogCS53cml0ZSA9IGNpZnNfdXNlcl93cml0ZSwKQEAgLTc2Nyw2ICs3NjcsNyBAQAogCS5sb2NrID0gY2lmc19sb2NrLAogCS5mc3luYyA9IGNpZnNfZnN5bmMsCiAJLmZsdXNoID0gY2lmc19mbHVzaCwKKwkubW1hcCA9IGNpZnNfZmlsZV9tbWFwLAogCS5zcGxpY2VfcmVhZCA9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKICNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAogCS51bmxvY2tlZF9pb2N0bCAgPSBjaWZzX2lvY3RsLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCA2M2VhODNmLi4zYmJjYWE3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMjI4NywxMiArMjI4NywxMiBAQAogY2lmc19tb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAogCQljaGFyICptb3VudF9kYXRhX2dsb2JhbCwgY29uc3QgY2hhciAqZGV2bmFtZSkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYzsKIAlpbnQgeGlkOwogCXN0cnVjdCBzbWJfdm9sICp2b2x1bWVfaW5mbzsKLQlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnBTZXNJbmZvID0gTlVMTDsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uID0gTlVMTDsKLQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnZUY3AgPSBOVUxMOworCXN0cnVjdCBjaWZzU2VzSW5mbyAqcFNlc0luZm87CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKKwlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnZUY3A7CiAJY2hhciAgICpmdWxsX3BhdGg7CiAJY2hhciAqbW91bnRfZGF0YSA9IG1vdW50X2RhdGFfZ2xvYmFsOwogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKQEAgLTIzMDEsNiArMjMwMSwxMCBAQAogCWludCByZWZlcnJhbF93YWxrc19jb3VudCA9IDA7CiB0cnlfbW91bnRfYWdhaW46CiAjZW5kaWYKKwlyYyA9IDA7CisJdGNvbiA9IE5VTEw7CisJcFNlc0luZm8gPSBOVUxMOworCXNydlRjcCA9IE5VTEw7CiAJZnVsbF9wYXRoID0gTlVMTDsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMjU5Nyw2ICsyNjAxLDcgQEAKIAogCQkJY2xlYW51cF92b2x1bWVfaW5mbygmdm9sdW1lX2luZm8pOwogCQkJcmVmZXJyYWxfd2Fsa3NfY291bnQrKzsKKwkJCUZyZWVYaWQoeGlkKTsKIAkJCWdvdG8gdHJ5X21vdW50X2FnYWluOwogCQl9CiAjZWxzZSAvKiBObyBERlMgc3VwcG9ydCwgcmV0dXJuIGVycm9yIG9uIG1vdW50ICovCmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDE0Y2JjODMuLjMzMmRkMDAgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xNjAwLDggKzE2MDAsNiBAQAogCWNhc2UgS0RTS0JNRVRBOgogCWNhc2UgS0RTS0JMRUQ6CiAJY2FzZSBLRFNFVExFRDoKLQkvKiBTRyBzdHVmZiAqLwotCWNhc2UgU0dfU0VUX1RSQU5TRk9STToKIAkvKiBBVVRPRlMgKi8KIAljYXNlIEFVVE9GU19JT0NfUkVBRFk6CiAJY2FzZSBBVVRPRlNfSU9DX0ZBSUw6CmRpZmYgLS1naXQgYS9mcy9ldmVudGZkLmMgYi9mcy9ldmVudGZkLmMKaW5kZXggOGI0N2U0Mi4uZDI2NDAyZiAxMDA2NDQKLS0tIGEvZnMvZXZlbnRmZC5jCisrKyBiL2ZzL2V2ZW50ZmQuYwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJY3R4LT5mbGFncyA9IGZsYWdzOwogCiAJZmlsZSA9IGFub25faW5vZGVfZ2V0ZmlsZSgiW2V2ZW50ZmRdIiwgJmV2ZW50ZmRfZm9wcywgY3R4LAotCQkJCSAgZmxhZ3MgJiBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKTsKKwkJCQkgIE9fUkRXUiB8IChmbGFncyAmIEVGRF9TSEFSRURfRkNOVExfRkxBR1MpKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQogCQlldmVudGZkX2ZyZWVfY3R4KGN0eCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMzY2YzUwMy4uYmQwNTZhNSAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTEyMDYsNyArMTIwNiw3IEBACiAJICogYSBmaWxlIHN0cnVjdHVyZSBhbmQgYSBmcmVlIGZpbGUgZGVzY3JpcHRvci4KIAkgKi8KIAllcnJvciA9IGFub25faW5vZGVfZ2V0ZmQoIltldmVudHBvbGxdIiwgJmV2ZW50cG9sbF9mb3BzLCBlcCwKLQkJCQkgZmxhZ3MgJiBPX0NMT0VYRUMpOworCQkJCSBPX1JEV1IgfCAoZmxhZ3MgJiBPX0NMT0VYRUMpKTsKIAlpZiAoZXJyb3IgPCAwKQogCQllcF9mcmVlKGVwKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDYyM2E1Y2MuLjYzMmIwMmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTgyNiw3ICs4MjYsOSBAQAogCQlhdHRhY2hfcGlkKHRzaywgUElEVFlQRV9QSUQsICB0YXNrX3BpZChsZWFkZXIpKTsKIAkJdHJhbnNmZXJfcGlkKGxlYWRlciwgdHNrLCBQSURUWVBFX1BHSUQpOwogCQl0cmFuc2Zlcl9waWQobGVhZGVyLCB0c2ssIFBJRFRZUEVfU0lEKTsKKwogCQlsaXN0X3JlcGxhY2VfcmN1KCZsZWFkZXItPnRhc2tzLCAmdHNrLT50YXNrcyk7CisJCWxpc3RfcmVwbGFjZV9pbml0KCZsZWFkZXItPnNpYmxpbmcsICZ0c2stPnNpYmxpbmcpOwogCiAJCXRzay0+Z3JvdXBfbGVhZGVyID0gdHNrOwogCQlsZWFkZXItPmdyb3VwX2xlYWRlciA9IHRzazsKQEAgLTE3NjEsMTcgKzE3NjMsMjAgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXN0cnVjdCBsaW51eF9iaW5mbXQgKiBiaW5mbXQ7CiAJc3RydWN0IGlub2RlICogaW5vZGU7Ci0Jc3RydWN0IGZpbGUgKiBmaWxlOwogCWNvbnN0IHN0cnVjdCBjcmVkICpvbGRfY3JlZDsKIAlzdHJ1Y3QgY3JlZCAqY3JlZDsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgZmxhZyA9IDA7CiAJaW50IGlzcGlwZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DT1JFXS5ybGltX2N1cjsKIAljaGFyICoqaGVscGVyX2FyZ3YgPSBOVUxMOwogCWludCBoZWxwZXJfYXJnYyA9IDA7CiAJaW50IGR1bXBfY291bnQgPSAwOwogCXN0YXRpYyBhdG9taWNfdCBjb3JlX2R1bXBfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zIGNwcm0gPSB7CisJCS5zaWduciA9IHNpZ25yLAorCQkucmVncyA9IHJlZ3MsCisJCS5saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ09SRV0ucmxpbV9jdXIsCisJfTsKIAogCWF1ZGl0X2NvcmVfZHVtcHMoc2lnbnIpOwogCkBAIC0xODI3LDE1ICsxODMyLDE1IEBACiAJaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCBzaWducik7CiAJdW5sb2NrX2tlcm5lbCgpOwogCi0JaWYgKCghaXNwaXBlKSAmJiAoY29yZV9saW1pdCA8IGJpbmZtdC0+bWluX2NvcmVkdW1wKSkKKwlpZiAoKCFpc3BpcGUpICYmIChjcHJtLmxpbWl0IDwgYmluZm10LT5taW5fY29yZWR1bXApKQogCQlnb3RvIGZhaWxfdW5sb2NrOwogCiAgCWlmIChpc3BpcGUpIHsKLQkJaWYgKGNvcmVfbGltaXQgPT0gMCkgeworCQlpZiAoY3BybS5saW1pdCA9PSAwKSB7CiAJCQkvKgogCQkJICogTm9ybWFsbHkgY29yZSBsaW1pdHMgYXJlIGlycmVsZXZhbnQgdG8gcGlwZXMsIHNpbmNlCiAJCQkgKiB3ZSdyZSBub3Qgd3JpdGluZyB0byB0aGUgZmlsZSBzeXN0ZW0sIGJ1dCB3ZSB1c2UKLQkJCSAqIGNvcmVfbGltaXQgb2YgMCBoZXJlIGFzIGEgc3BlYWNpYWwgdmFsdWUuIEFueQorCQkJICogY3BybS5saW1pdCBvZiAwIGhlcmUgYXMgYSBzcGVhY2lhbCB2YWx1ZS4gQW55CiAJCQkgKiBub24temVybyBsaW1pdCBnZXRzIHNldCB0byBSTElNX0lORklOSVRZIGJlbG93LCBidXQKIAkJCSAqIGEgbGltaXQgb2YgMCBza2lwcyB0aGUgZHVtcC4gIFRoaXMgaXMgYSBjb25zaXN0ZW50CiAJCQkgKiB3YXkgdG8gY2F0Y2ggcmVjdXJzaXZlIGNyYXNoZXMuICBXZSBjYW4gc3RpbGwgY3Jhc2gKQEAgLTE4NjgsMjUgKzE4NzMsMjUgQEAKIAkJCWdvdG8gZmFpbF9kcm9wY291bnQ7CiAJCX0KIAotCQljb3JlX2xpbWl0ID0gUkxJTV9JTkZJTklUWTsKKwkJY3BybS5saW1pdCA9IFJMSU1fSU5GSU5JVFk7CiAKIAkJLyogU0lHUElQRSBjYW4gaGFwcGVuLCBidXQgaXQncyBqdXN0IG5ldmVyIHByb2Nlc3NlZCAqLwogCQlpZiAoY2FsbF91c2VybW9kZWhlbHBlcl9waXBlKGhlbHBlcl9hcmd2WzBdLCBoZWxwZXJfYXJndiwgTlVMTCwKLQkJCQkmZmlsZSkpIHsKKwkJCQkmY3BybS5maWxlKSkgewogIAkJCXByaW50ayhLRVJOX0lORk8gIkNvcmUgZHVtcCB0byAlcyBwaXBlIGZhaWxlZFxuIiwKIAkJCSAgICAgICBjb3JlbmFtZSk7CiAJCQlnb3RvIGZhaWxfZHJvcGNvdW50OwogIAkJfQogIAl9IGVsc2UKLSAJCWZpbGUgPSBmaWxwX29wZW4oY29yZW5hbWUsCisJCWNwcm0uZmlsZSA9IGZpbHBfb3Blbihjb3JlbmFtZSwKIAkJCQkgT19DUkVBVCB8IDIgfCBPX05PRk9MTE9XIHwgT19MQVJHRUZJTEUgfCBmbGFnLAogCQkJCSAwNjAwKTsKLQlpZiAoSVNfRVJSKGZpbGUpKQorCWlmIChJU19FUlIoY3BybS5maWxlKSkKIAkJZ290byBmYWlsX2Ryb3Bjb3VudDsKLQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBjcHJtLmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKGlub2RlLT5pX25saW5rID4gMSkKIAkJZ290byBjbG9zZV9mYWlsOwkvKiBtdWx0aXBsZSBsaW5rcyAtIGRvbid0IGR1bXAgKi8KLQlpZiAoIWlzcGlwZSAmJiBkX3VuaGFzaGVkKGZpbGUtPmZfcGF0aC5kZW50cnkpKQorCWlmICghaXNwaXBlICYmIGRfdW5oYXNoZWQoY3BybS5maWxlLT5mX3BhdGguZGVudHJ5KSkKIAkJZ290byBjbG9zZV9mYWlsOwogCiAJLyogQUs6IGFjdHVhbGx5IGkgc2VlIG5vIHJlYXNvbiB0byBub3QgYWxsb3cgdGhpcyBmb3IgbmFtZWQgcGlwZXMgZXRjLiwKQEAgLTE4OTksMjEgKzE5MDQsMjIgQEAKIAkgKi8KIAlpZiAoaW5vZGUtPmlfdWlkICE9IGN1cnJlbnRfZnN1aWQoKSkKIAkJZ290byBjbG9zZV9mYWlsOwotCWlmICghZmlsZS0+Zl9vcCkKKwlpZiAoIWNwcm0uZmlsZS0+Zl9vcCkKIAkJZ290byBjbG9zZV9mYWlsOwotCWlmICghZmlsZS0+Zl9vcC0+d3JpdGUpCisJaWYgKCFjcHJtLmZpbGUtPmZfb3AtPndyaXRlKQogCQlnb3RvIGNsb3NlX2ZhaWw7Ci0JaWYgKCFpc3BpcGUgJiYgZG9fdHJ1bmNhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCwgMCwgZmlsZSkgIT0gMCkKKwlpZiAoIWlzcGlwZSAmJgorCSAgICBkb190cnVuY2F0ZShjcHJtLmZpbGUtPmZfcGF0aC5kZW50cnksIDAsIDAsIGNwcm0uZmlsZSkgIT0gMCkKIAkJZ290byBjbG9zZV9mYWlsOwogCi0JcmV0dmFsID0gYmluZm10LT5jb3JlX2R1bXAoc2lnbnIsIHJlZ3MsIGZpbGUsIGNvcmVfbGltaXQpOworCXJldHZhbCA9IGJpbmZtdC0+Y29yZV9kdW1wKCZjcHJtKTsKIAogCWlmIChyZXR2YWwpCiAJCWN1cnJlbnQtPnNpZ25hbC0+Z3JvdXBfZXhpdF9jb2RlIHw9IDB4ODA7CiBjbG9zZV9mYWlsOgogCWlmIChpc3BpcGUgJiYgY29yZV9waXBlX2xpbWl0KQotCQl3YWl0X2Zvcl9kdW1wX2hlbHBlcnMoZmlsZSk7Ci0JZmlscF9jbG9zZShmaWxlLCBOVUxMKTsKKwkJd2FpdF9mb3JfZHVtcF9oZWxwZXJzKGNwcm0uZmlsZSk7CisJZmlscF9jbG9zZShjcHJtLmZpbGUsIE5VTEwpOwogZmFpbF9kcm9wY291bnQ6CiAJaWYgKGR1bXBfY291bnQpCiAJCWF0b21pY19kZWMoJmNvcmVfZHVtcF9jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9pbm9kZS5jIGIvZnMvZXhvZnMvaW5vZGUuYwppbmRleCA2OThhODYzLi4yYWZiY2ViIDEwMDY0NAotLS0gYS9mcy9leG9mcy9pbm9kZS5jCisrKyBiL2ZzL2V4b2ZzL2lub2RlLmMKQEAgLTczOCwxMyArNzM4LDI4IEBACiAJCQkJCWZzZGF0YSk7CiB9CiAKK3N0YXRpYyBpbnQgZXhvZnNfd3JpdGVfZW5kKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAorCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwkvKiBBY2NvcmRpbmcgdG8gY29tbWVudCBpbiBzaW1wbGVfd3JpdGVfZW5kIGlfbXV0ZXggaXMgaGVsZCAqLworCWxvZmZfdCBpX3NpemUgPSBpbm9kZS0+aV9zaXplOworCWludCByZXQ7CisKKwlyZXQgPSBzaW1wbGVfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcscG9zLCBsZW4sIGNvcGllZCwgcGFnZSwgZnNkYXRhKTsKKwlpZiAoaV9zaXplICE9IGlub2RlLT5pX3NpemUpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiByZXQ7Cit9CisKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXhvZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBleG9mc19yZWFkcGFnZSwKIAkucmVhZHBhZ2VzCT0gZXhvZnNfcmVhZHBhZ2VzLAogCS53cml0ZXBhZ2UJPSBleG9mc193cml0ZXBhZ2UsCiAJLndyaXRlcGFnZXMJPSBleG9mc193cml0ZXBhZ2VzLAogCS53cml0ZV9iZWdpbgk9IGV4b2ZzX3dyaXRlX2JlZ2luX2V4cG9ydCwKLQkud3JpdGVfZW5kCT0gc2ltcGxlX3dyaXRlX2VuZCwKKwkud3JpdGVfZW5kCT0gZXhvZnNfd3JpdGVfZW5kLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvcG5mcy5oIGIvZnMvZXhvZnMvcG5mcy5oCmluZGV4IDQyMzAzM2EuLmM1MmU5ODggMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL3BuZnMuaAorKysgYi9mcy9leG9mcy9wbmZzLmgKQEAgLTE1LDEzICsxNSw3IEBACiAjaWZuZGVmIF9fRVhPRlNfUE5GU19IX18KICNkZWZpbmUgX19FWE9GU19QTkZTX0hfXwogCi0jaWYgZGVmaW5lZChDT05GSUdfUE5GUykKLQotCi0vKiBGSVhNRTogbW92ZSB0aGlzIGZpbGUgdG86IGxpbnV4L2V4cG9ydGZzL3BuZnNfb3NkX3hkci5oICovCi0jaW5jbHVkZSAiLi4vbmZzL29iamxheW91dC9wbmZzX29zZF94ZHIuaCIKLQotI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfUE5GUykgKi8KKyNpZiAhIGRlZmluZWQoX19QTkZTX09TRF9YRFJfSF9fKQogCiBlbnVtIHBuZnNfaW9tb2RlIHsKIAlJT01PREVfUkVBRCA9IDEsCkBAIC00Niw2ICs0MCw2IEBACiAJdTMyCW9kbV9yYWlkX2FsZ29yaXRobTsKIH07CiAKLSNlbmRpZiAvKiBlbHNlIGRlZmluZWQoQ09ORklHX1BORlMpICovCisjZW5kaWYgLyogISBkZWZpbmVkKF9fUE5GU19PU0RfWERSX0hfXykgKi8KIAogI2VuZGlmIC8qIF9fRVhPRlNfUE5GU19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBhZDE0MjI3Li40NTVlNmU2IDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAkJaWYgKG1heF9ibG9ja3MgPiBESU9fTUFYX0JMT0NLUykKIAkJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCBESU9fQ1JFRElUUyArCi0JCQkJMiAqIEVYVDNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSk7CisJCQkJRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBvdXQ7CkBAIC0zMTQ2LDggKzMxNDYsOCBAQAogCiAJCS8qICh1c2VyK2dyb3VwKSoob2xkK25ldykgc3RydWN0dXJlLCBpbm9kZSB3cml0ZSAoc2IsCiAJCSAqIGlub2RlIGJsb2NrLCA/IC0gYnV0IHRydW5jYXRlIGlub2RlIHVwZGF0ZSBoYXMgaXQpICovCi0JCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgMiooRVhUM19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikrCi0JCQkJCUVYVDNfUVVPVEFfREVMX0JMT0NLUyhpbm9kZS0+aV9zYikpKzMpOworCQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGlub2RlLT5pX3NiKSsKKwkJCQkJRVhUM19NQVhRVU9UQVNfREVMX0JMT0NLUyhpbm9kZS0+aV9zYikrMyk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJZXJyb3IgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIGVycl9vdXQ7CkBAIC0zMjM5LDcgKzMyMzksNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCS8qIFdlIGtub3cgdGhhdCBzdHJ1Y3R1cmUgd2FzIGFscmVhZHkgYWxsb2NhdGVkIGR1cmluZyB2ZnNfZHFfaW5pdCBzbwogCSAqIHdlIHdpbGwgYmUgdXBkYXRpbmcgb25seSB0aGUgZGF0YSBibG9ja3MgKyBpbm9kZXMgKi8KLQlyZXQgKz0gMipFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYik7CisJcmV0ICs9IEVYVDNfTUFYUVVPVEFTX1RSQU5TX0JMT0NLUyhpbm9kZS0+aV9zYik7CiAjZW5kaWYKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggYWFkNjQwMC4uN2IwZTQ0ZiAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMTY5OSw3ICsxNjk5LDcgQEAKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCi0JCQkJCTIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKKwkJCQkJRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCkBAIC0xNzMzLDcgKzE3MzMsNyBAQAogcmV0cnk6CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAzICsKLQkJCQkJMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOworCQkJCQlFWFQzX01BWFFVT1RBU19JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKQEAgLTE3NjksNyArMTc2OSw3IEBACiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwotCQkJCQkyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CisJCQkJCUVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApAQCAtMTkyMCw3ICsxOTIwLDcgQEAKIAlzdHJ1Y3QgZXh0M19pbG9jIGlsb2M7CiAJaW50IGVyciA9IDAsIHJjOwogCi0JbG9ja19zdXBlcihzYik7CisJbXV0ZXhfbG9jaygmRVhUM19TQihzYiktPnNfb3JwaGFuX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmRVhUM19JKGlub2RlKS0+aV9vcnBoYW4pKQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTE5MjksOSArMTkyOSwxMyBAQAogCiAJLyogQEBAIEZJWE1FOiBPYnNlcnZhdGlvbiBmcm9tIGF2aXJvOgogCSAqIEkgdGhpbmsgSSBjYW4gdHJpZ2dlciBKX0FTU0VSVCBpbiBleHQzX29ycGhhbl9hZGQoKS4gIFdlIGJsb2NrCi0JICogaGVyZSAob24gbG9ja19zdXBlcigpKSwgc28gcmFjZSB3aXRoIGV4dDNfbGluaygpIHdoaWNoIG1pZ2h0IGJ1bXAKKwkgKiBoZXJlIChvbiBzX29ycGhhbl9sb2NrKSwgc28gcmFjZSB3aXRoIGV4dDNfbGluaygpIHdoaWNoIG1pZ2h0IGJ1bXAKIAkgKiAtPmlfbmxpbmsuIEZvciwgc2F5IGl0LCBjaGFyYWN0ZXIgZGV2aWNlLiBOb3QgYSByZWd1bGFyIGZpbGUsCiAJICogbm90IGEgZGlyZWN0b3J5LCBub3QgYSBzeW1saW5rIGFuZCAtPmlfbmxpbmsgPiAwLgorCSAqCisJICogdHl0c28sIDQvMjUvMjAwOTogSSdtIG5vdCBzdXJlIGhvdyB0aGF0IGNvdWxkIGhhcHBlbjsKKwkgKiBzaG91bGRuJ3QgdGhlIGZzIGNvcmUgcHJvdGVjdCB1cyBmcm9tIHRoZXNlIHNvcnQgb2YKKwkgKiB1bmxpbmsoKS9saW5rKCkgcmFjZXM/CiAJICovCiAJSl9BU1NFUlQgKChTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKIAkJU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgfHwgaW5vZGUtPmlfbmxpbmsgPT0gMCk7CkBAIC0xOTY4LDcgKzE5NzIsNyBAQAogCWpiZF9kZWJ1Zyg0LCAib3JwaGFuIGlub2RlICVsdSB3aWxsIHBvaW50IHRvICVkXG4iLAogCQkJaW5vZGUtPmlfaW5vLCBORVhUX09SUEhBTihpbm9kZSkpOwogb3V0X3VubG9jazoKLQl1bmxvY2tfc3VwZXIoc2IpOworCW11dGV4X3VubG9jaygmRVhUM19TQihzYiktPnNfb3JwaGFuX2xvY2spOwogCWV4dDNfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xOTg2LDExICsxOTkwLDkgQEAKIAlzdHJ1Y3QgZXh0M19pbG9jIGlsb2M7CiAJaW50IGVyciA9IDA7CiAKLQlsb2NrX3N1cGVyKGlub2RlLT5pX3NiKTsKLQlpZiAobGlzdF9lbXB0eSgmZWktPmlfb3JwaGFuKSkgewotCQl1bmxvY2tfc3VwZXIoaW5vZGUtPmlfc2IpOwotCQlyZXR1cm4gMDsKLQl9CisJbXV0ZXhfbG9jaygmRVhUM19TQihpbm9kZS0+aV9zYiktPnNfb3JwaGFuX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZlaS0+aV9vcnBoYW4pKQorCQlnb3RvIG91dDsKIAogCWlub19uZXh0ID0gTkVYVF9PUlBIQU4oaW5vZGUpOwogCXByZXYgPSBlaS0+aV9vcnBoYW4ucHJldjsKQEAgLTIwNDAsNyArMjA0Miw3IEBACiBvdXRfZXJyOgogCWV4dDNfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOwogb3V0OgotCXVubG9ja19zdXBlcihpbm9kZS0+aV9zYik7CisJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19vcnBoYW5fbG9jayk7CiAJcmV0dXJuIGVycjsKIAogb3V0X2JyZWxzZToKQEAgLTIxNzUsNyArMjE3Nyw3IEBACiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDUgKwotCQkJCQkyKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSk7CisJCQkJCUVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNWY4M2I2MS4uNTQzNTFhYyAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKLQlsb2NrX3N1cGVyKHNiKTsKKwltdXRleF9sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmIChpbnB1dC0+Z3JvdXAgIT0gc2JpLT5zX2dyb3Vwc19jb3VudCkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXhpdF9qb3VybmFsOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJYnJlbHNlKGJoKTsKIAogZXhpdF9qb3VybmFsOgotCXVubG9ja19zdXBlcihzYik7CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmICgoZXJyMiA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSkpICYmICFlcnIpCiAJCWVyciA9IGVycjI7CiAKQEAgLTY2MiwxMSArNjYyLDEyIEBACiAgKiBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IHRoZSBuZXcgYmxvY2sgYW5kIGlub2RlIGNvdW50cyBhcmUgaW4gdGhlIGJhY2t1cAogICogc3VwZXJibG9ja3MsIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldyBncm91cCBtZXRhZGF0YSBpbiB0aGUgR0RUIGJhY2t1cHMuCiAgKgotICogV2UgZG8gbm90IG5lZWQgbG9ja19zdXBlcigpIGZvciB0aGlzLCBiZWNhdXNlIHRoZXNlIGJsb2NrcyBhcmUgbm90Ci0gKiBvdGhlcndpc2UgdG91Y2hlZCBieSB0aGUgZmlsZXN5c3RlbSBjb2RlIHdoZW4gaXQgaXMgbW91bnRlZC4gIFdlIGRvbid0Ci0gKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGxhc3QgY2hhbmdpbmcgZnJvbSBzYmktPnNfZ3JvdXBzX2NvdW50LCBiZWNhdXNlIHRoZQotICogd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIHRoYXQgd2UgZG8gbm90IGNvcHkgdGhlIGZ1bGwgbnVtYmVyIG9mIGJhY2t1cHMKLSAqIGF0IHRoaXMgdGltZS4gIFRoZSByZXNpemUgd2hpY2ggY2hhbmdlZCBzX2dyb3Vwc19jb3VudCB3aWxsIGJhY2t1cCBhZ2Fpbi4KKyAqIFdlIGRvIG5vdCBuZWVkIHRha2UgdGhlIHNfcmVzaXplX2xvY2sgZm9yIHRoaXMsIGJlY2F1c2UgdGhlc2UKKyAqIGJsb2NrcyBhcmUgbm90IG90aGVyd2lzZSB0b3VjaGVkIGJ5IHRoZSBmaWxlc3lzdGVtIGNvZGUgd2hlbiBpdCBpcworICogbW91bnRlZC4gIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbGFzdCBjaGFuZ2luZyBmcm9tCisgKiBzYmktPnNfZ3JvdXBzX2NvdW50LCBiZWNhdXNlIHRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB3ZQorICogZG8gbm90IGNvcHkgdGhlIGZ1bGwgbnVtYmVyIG9mIGJhY2t1cHMgYXQgdGhpcyB0aW1lLiAgVGhlIHJlc2l6ZQorICogd2hpY2ggY2hhbmdlZCBzX2dyb3Vwc19jb3VudCB3aWxsIGJhY2t1cCBhZ2Fpbi4KICAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2JhY2t1cHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgIGludCBibGtfb2ZmLCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKQEAgLTgyNSw3ICs4MjYsNyBAQAogCQlnb3RvIGV4aXRfcHV0OwogCX0KIAotCWxvY2tfc3VwZXIoc2IpOworCW11dGV4X2xvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKGlucHV0LT5ncm91cCAhPSBzYmktPnNfZ3JvdXBzX2NvdW50KSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKQEAgLTg1Niw3ICs4NTcsNyBAQAogCS8qCiAJICogT0ssIG5vdyB3ZSd2ZSBzZXQgdXAgdGhlIG5ldyBncm91cC4gIFRpbWUgdG8gbWFrZSBpdCBhY3RpdmUuCiAJICoKLQkgKiBDdXJyZW50IGtlcm5lbHMgZG9uJ3QgbG9jayBhbGwgYWxsb2NhdGlvbnMgdmlhIGxvY2tfc3VwZXIoKSwKKwkgKiBXZSBkbyBub3QgbG9jayBhbGwgYWxsb2NhdGlvbnMgdmlhIHNfcmVzaXplX2xvY2sKIAkgKiBzbyB3ZSBoYXZlIHRvIGJlIHNhZmUgd3J0LiBjb25jdXJyZW50IGFjY2Vzc2VzIHRoZSBncm91cAogCSAqIGRhdGEuICBTbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gc2V0IGFsbCBvZiB0aGUgcmVsZXZhbnQKIAkgKiBncm91cCBkZXNjcmlwdG9yIGRhdGEgZXRjLiAqYmVmb3JlKiB3ZSBlbmFibGUgdGhlIGdyb3VwLgpAQCAtOTAwLDEyICs5MDEsMTIgQEAKIAkgKgogCSAqIFRoZSBwcmVjaXNlIHJ1bGVzIHdlIHVzZSBhcmU6CiAJICoKLQkgKiAqIFdyaXRlcnMgb2Ygc19ncm91cHNfY291bnQgKm11c3QqIGhvbGQgbG9ja19zdXBlcgorCSAqICogV3JpdGVycyBvZiBzX2dyb3Vwc19jb3VudCAqbXVzdCogaG9sZCBzX3Jlc2l6ZV9sb2NrCiAJICogQU5ECiAJICogKiBXcml0ZXJzIG11c3QgcGVyZm9ybSBhIHNtcF93bWIoKSBhZnRlciB1cGRhdGluZyBhbGwgZGVwZW5kZW50CiAJICogICBkYXRhIGFuZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBncm91cHMgY291bnQKIAkgKgotCSAqICogUmVhZGVycyBtdXN0IGhvbGQgbG9ja19zdXBlcigpIG92ZXIgdGhlIGFjY2VzcworCSAqICogUmVhZGVycyBtdXN0IGhvbGQgc19yZXNpemVfbG9jayBvdmVyIHRoZSBhY2Nlc3MKIAkgKiBPUgogCSAqICogUmVhZGVycyBtdXN0IHBlcmZvcm0gYW4gc21wX3JtYigpIGFmdGVyIHJlYWRpbmcgdGhlIGdyb3VwcyBjb3VudAogCSAqICAgYW5kIGJlZm9yZSByZWFkaW5nIGFueSBkZXBlbmRlbnQgZGF0YS4KQEAgLTkzNiw3ICs5MzcsNyBAQAogCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIHNiaS0+c19zYmgpOwogCiBleGl0X2pvdXJuYWw6Ci0JdW5sb2NrX3N1cGVyKHNiKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKChlcnIyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKSkgJiYgIWVycikKIAkJZXJyID0gZXJyMjsKIAlpZiAoIWVycikgewpAQCAtOTczLDcgKzk3NCw3IEBACiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgd3J0IG90aGVyIHJlc2l6ZXJzIGp1c3QKIAkgKiB5ZXQ6IHdlJ3JlIGdvaW5nIHRvIHJldmFsaWRhdGUgZXMtPnNfYmxvY2tzX2NvdW50IGFmdGVyCi0JICogdGFraW5nIGxvY2tfc3VwZXIoKSBiZWxvdy4gKi8KKwkgKiB0YWtpbmcgdGhlIHNfcmVzaXplX2xvY2sgYmVsb3cuICovCiAJb19ibG9ja3NfY291bnQgPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpOwogCW9fZ3JvdXBzX2NvdW50ID0gRVhUM19TQihzYiktPnNfZ3JvdXBzX2NvdW50OwogCkBAIC0xMDQ1LDExICsxMDQ2LDExIEBACiAJCWdvdG8gZXhpdF9wdXQ7CiAJfQogCi0JbG9ja19zdXBlcihzYik7CisJbXV0ZXhfbG9jaygmRVhUM19TQihzYiktPnNfcmVzaXplX2xvY2spOwogCWlmIChvX2Jsb2Nrc19jb3VudCAhPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKSB7CiAJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCiAJCQkgICAgICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKLQkJdW5sb2NrX3N1cGVyKHNiKTsKKwkJbXV0ZXhfdW5sb2NrKCZFWFQzX1NCKHNiKS0+c19yZXNpemVfbG9jayk7CiAJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0X3B1dDsKQEAgLTEwNTksMTMgKzEwNjAsMTMgQEAKIAkJCQkJCSBFWFQzX1NCKHNiKS0+c19zYmgpKSkgewogCQlleHQzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAogCQkJICAgICAiZXJyb3IgJWQgb24gam91cm5hbCB3cml0ZSBhY2Nlc3MiLCBlcnIpOwotCQl1bmxvY2tfc3VwZXIoc2IpOworCQltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJZ290byBleGl0X3B1dDsKIAl9CiAJZXMtPnNfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIob19ibG9ja3NfY291bnQgKyBhZGQpOwogCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIEVYVDNfU0Ioc2IpLT5zX3NiaCk7Ci0JdW5sb2NrX3N1cGVyKHNiKTsKKwltdXRleF91bmxvY2soJkVYVDNfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlleHQzX2RlYnVnKCJmcmVlaW5nIGJsb2NrcyAlbHUgdGhyb3VnaCAiRTNGU0JMSyJcbiIsIG9fYmxvY2tzX2NvdW50LAogCQkgICBvX2Jsb2Nrc19jb3VudCArIGFkZCk7CiAJZXh0M19mcmVlX2Jsb2Nrc19zYihoYW5kbGUsIHNiLCBvX2Jsb2Nrc19jb3VudCwgYWRkLCAmZnJlZWRfYmxvY2tzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA3YWQxZThjLi5hZmEyYjU2IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC0xOTI4LDYgKzE5MjgsOCBAQAogCXNiLT5kcV9vcCA9ICZleHQzX3F1b3RhX29wZXJhdGlvbnM7CiAjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmc2JpLT5zX29ycGhhbik7IC8qIHVubGlua2VkIGJ1dCBvcGVuIGZpbGVzICovCisJbXV0ZXhfaW5pdCgmc2JpLT5zX29ycGhhbl9sb2NrKTsKKwltdXRleF9pbml0KCZzYmktPnNfcmVzaXplX2xvY2spOwogCiAJc2ItPnNfcm9vdCA9IE5VTEw7CiAKQEAgLTIwMTQsMTQgKzIwMTYsNyBAQAogCX0KIAogCWV4dDNfc2V0dXBfc3VwZXIgKHNiLCBlcywgc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpOwotCS8qCi0JICogYWtwbTogY29yZSByZWFkX3N1cGVyKCkgY2FsbHMgaW4gaGVyZSB3aXRoIHRoZSBzdXBlcmJsb2NrIGxvY2tlZC4KLQkgKiBUaGF0IGRlYWRsb2NrcywgYmVjYXVzZSBvcnBoYW4gY2xlYW51cCBuZWVkcyB0byBsb2NrIHRoZSBzdXBlcmJsb2NrCi0JICogaW4gbnVtZXJvdXMgcGxhY2VzLiAgSGVyZSB3ZSBqdXN0IHBvcCB0aGUgbG9jayAtIGl0J3MgcmVsYXRpdmVseQotCSAqIGhhcm1sZXNzLCBiZWNhdXNlIHdlIGFyZSBub3cgcmVhZHkgdG8gYWNjZXB0IHdyaXRlX3N1cGVyKCkgcmVxdWVzdHMsCi0JICogYW5kIGF2aXJvIHNheXMgdGhhdCdzIHRoZSBvbmx5IHJlYXNvbiBmb3IgaGFuZ2luZyBvbnRvIHRoZQotCSAqIHN1cGVyYmxvY2sgbG9jay4KLQkgKi8KKwogCUVYVDNfU0Ioc2IpLT5zX21vdW50X3N0YXRlIHw9IEVYVDNfT1JQSEFOX0ZTOwogCWV4dDNfb3JwaGFuX2NsZWFudXAoc2IsIGVzKTsKIAlFWFQzX1NCKHNiKS0+c19tb3VudF9zdGF0ZSAmPSB+RVhUM19PUlBIQU5fRlM7CkBAIC0yNDAzLDEzICsyMzk4LDExIEBACiAJaWYgKGpvdXJuYWxfZmx1c2goam91cm5hbCkgPCAwKQogCQlnb3RvIG91dDsKIAotCWxvY2tfc3VwZXIoc2IpOwogCWlmIChFWFQzX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikgJiYKIAkgICAgc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKIAkJRVhUM19DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUik7CiAJCWV4dDNfY29tbWl0X3N1cGVyKHNiLCBlcywgMSk7CiAJfQotCXVubG9ja19zdXBlcihzYik7CiAKIG91dDoKIAlqb3VybmFsX3VubG9ja191cGRhdGVzKGpvdXJuYWwpOwpAQCAtMjYwMSwxMyArMjU5NCw3IEBACiAJCQkgICAgKHNiaS0+c19tb3VudF9zdGF0ZSAmIEVYVDNfVkFMSURfRlMpKQogCQkJCWVzLT5zX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLT5zX21vdW50X3N0YXRlKTsKIAotCQkJLyoKLQkJCSAqIFdlIGhhdmUgdG8gdW5sb2NrIHN1cGVyIHNvIHRoYXQgd2UgY2FuIHdhaXQgZm9yCi0JCQkgKiB0cmFuc2FjdGlvbnMuCi0JCQkgKi8KLQkJCXVubG9ja19zdXBlcihzYik7CiAJCQlleHQzX21hcmtfcmVjb3ZlcnlfY29tcGxldGUoc2IsIGVzKTsKLQkJCWxvY2tfc3VwZXIoc2IpOwogCQl9IGVsc2UgewogCQkJX19sZTMyIHJldDsKIAkJCWlmICgocmV0ID0gRVhUM19IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCmRpZmYgLS1naXQgYS9mcy9leHQ0L0tjb25maWcgYi9mcy9leHQ0L0tjb25maWcKaW5kZXggZTVmNjc3NC4uOWVkMWJiMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9LY29uZmlnCisrKyBiL2ZzL2V4dDQvS2NvbmZpZwpAQCAtMiw3ICsyLDYgQEAKIAl0cmlzdGF0ZSAiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW0iCiAJc2VsZWN0IEpCRDIKIAlzZWxlY3QgQ1JDMTYKLQlzZWxlY3QgRlNfSk9VUk5BTF9JTkZPCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uCiAKQEAgLTI5LDYgKzI4LDcgQEAKIAogY29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyMwogCWJvb2wgIlVzZSBleHQ0IGZvciBleHQyL2V4dDMgZmlsZSBzeXN0ZW1zIgorCWRlcGVuZHMgb24gRVhUNF9GUwogCWRlcGVuZHMgb24gRVhUM19GUz1uIHx8IEVYVDJfRlM9bgogCWRlZmF1bHQgeQogCWhlbHAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmxvY2tfdmFsaWRpdHkuYyBiL2ZzL2V4dDQvYmxvY2tfdmFsaWRpdHkuYwppbmRleCA0ZGY4NjIxLi5hNjBhYjlhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMKKysrIGIvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJleHQ0LmgiCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IGFiMzFlNjUuLmFmN2I2MjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC02OTksMTEgKzY5OSwxNyBAQAogCXVuc2lnbmVkIGludCBpX3Jlc2VydmVkX21ldGFfYmxvY2tzOwogCXVuc2lnbmVkIGludCBpX2FsbG9jYXRlZF9tZXRhX2Jsb2NrczsKIAl1bnNpZ25lZCBzaG9ydCBpX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWc7CisJc2VjdG9yX3QgaV9kYV9tZXRhZGF0YV9jYWxjX2xhc3RfbGJsb2NrOworCWludCBpX2RhX21ldGFkYXRhX2NhbGNfbGVuOwogCiAJLyogb24tZGlzayBhZGRpdGlvbmFsIGxlbmd0aCAqLwogCV9fdTE2IGlfZXh0cmFfaXNpemU7CiAKIAlzcGlubG9ja190IGlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jazsKKyNpZmRlZiBDT05GSUdfUVVPVEEKKwkvKiBxdW90YSBzcGFjZSByZXNlcnZhdGlvbiwgbWFuYWdlZCBpbnRlcm5hbGx5IGJ5IHF1b3RhIGNvZGUgKi8KKwlxc2l6ZV90IGlfcmVzZXJ2ZWRfcXVvdGE7CisjZW5kaWYKIAogCS8qIGNvbXBsZXRlZCBhc3luYyBESU9zIHRoYXQgbWlnaHQgbmVlZCB1bndyaXR0ZW4gZXh0ZW50cyBoYW5kbGluZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaV9haW9fZGlvX2NvbXBsZXRlX2xpc3Q7CkBAIC0xNDM1LDcgKzE0NDEsNyBAQAogZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3RydW5jYXRlX3BhZ2UoaGFuZGxlX3QgKmhhbmRsZSwKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBmcm9tKTsKIGV4dGVybiBpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKLWV4dGVybiBxc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIC8qIGlvY3RsLmMgKi8KIGV4dGVybiBsb25nIGV4dDRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmggYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCmluZGV4IDJjYTY4NjQuLmJkYjZjZTcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKKysrIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaApAQCAtMjI1LDcgKzIyNSw4IEBACiAJZXh0LT5lZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleHQpKTsKIH0KIAotZXh0ZXJuIGludCBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2tzKTsKK2V4dGVybiBpbnQgZXh0NF9leHRfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHNlY3Rvcl90IGxibG9ja3MpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBleHRfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgpOwogZXh0ZXJuIGV4dDRfZnNibGtfdCBpZHhfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudF9pZHggKik7CiBleHRlcm4gdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICosIGV4dDRfZnNibGtfdCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDNhNzkyOGYuLjdkN2I3NGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0yOTYsMjkgKzI5Niw0NCBAQAogICogdG8gYWxsb2NhdGUgQGJsb2NrcwogICogV29yc2UgY2FzZSBpcyBvbmUgYmxvY2sgcGVyIGV4dGVudAogICovCi1pbnQgZXh0NF9leHRfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2NrcykKK2ludCBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBsYmxvY2spCiB7Ci0JaW50IGxjYXAsIGljYXAsIHJjYXAsIGxlYWZzLCBpZHhzLCBudW07Ci0JaW50IG5ld2V4dGVudHMgPSBibG9ja3M7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCWludCBpZHhzLCBudW0gPSAwOwogCi0JcmNhcCA9IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4KGlub2RlLCAwKTsKLQlsY2FwID0gZXh0NF9leHRfc3BhY2VfYmxvY2soaW5vZGUsIDApOwotCWljYXAgPSBleHQ0X2V4dF9zcGFjZV9ibG9ja19pZHgoaW5vZGUsIDApOwotCi0JLyogbnVtYmVyIG9mIG5ldyBsZWFmIGJsb2NrcyBuZWVkZWQgKi8KLQludW0gPSBsZWFmcyA9IChuZXdleHRlbnRzICsgbGNhcCAtIDEpIC8gbGNhcDsKKwlpZHhzID0gKChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlcikpCisJCS8gc2l6ZW9mKHN0cnVjdCBleHQ0X2V4dGVudF9pZHgpKTsKIAogCS8qCi0JICogV29yc2UgY2FzZSwgd2UgbmVlZCBzZXBhcmF0ZSBpbmRleCBibG9jayhzKQotCSAqIHRvIGxpbmsgYWxsIG5ldyBsZWFmIGJsb2NrcworCSAqIElmIHRoZSBuZXcgZGVsYXllZCBhbGxvY2F0aW9uIGJsb2NrIGlzIGNvbnRpZ3VvdXMgd2l0aCB0aGUKKwkgKiBwcmV2aW91cyBkYSBibG9jaywgaXQgY2FuIHNoYXJlIGluZGV4IGJsb2NrcyB3aXRoIHRoZQorCSAqIHByZXZpb3VzIGJsb2NrLCBzbyB3ZSBvbmx5IG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgaW5kZXgKKwkgKiBibG9jayBldmVyeSBpZHhzIGxlYWYgYmxvY2tzLiAgQXQgbGR4cyoqMiBibG9ja3MsIHdlIG5lZWQKKwkgKiBhbiBhZGRpdGlvbmFsIGluZGV4IGJsb2NrLCBhbmQgYXQgbGR4cyoqMyBibG9ja3MsIHlldAorCSAqIGFub3RoZXIgaW5kZXggYmxvY2tzLgogCSAqLwotCWlkeHMgPSAobGVhZnMgKyBpY2FwIC0gMSkgLyBpY2FwOwotCWRvIHsKLQkJbnVtICs9IGlkeHM7Ci0JCWlkeHMgPSAoaWR4cyArIGljYXAgLSAxKSAvIGljYXA7Ci0JfSB3aGlsZSAoaWR4cyA+IHJjYXApOworCWlmIChlaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiAmJgorCSAgICBlaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xhc3RfbGJsb2NrKzEgPT0gbGJsb2NrKSB7CisJCWlmICgoZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gJSBpZHhzKSA9PSAwKQorCQkJbnVtKys7CisJCWlmICgoZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gJSAoaWR4cyppZHhzKSkgPT0gMCkKKwkJCW51bSsrOworCQlpZiAoKGVpLT5pX2RhX21ldGFkYXRhX2NhbGNfbGVuICUgKGlkeHMqaWR4cyppZHhzKSkgPT0gMCkgeworCQkJbnVtKys7CisJCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDA7CisJCX0gZWxzZQorCQkJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4rKzsKKwkJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jaysrOworCQlyZXR1cm4gbnVtOworCX0KIAotCXJldHVybiBudW07CisJLyoKKwkgKiBJbiB0aGUgd29yc3QgY2FzZSB3ZSBuZWVkIGEgbmV3IHNldCBvZiBpbmRleCBibG9ja3MgYXQKKwkgKiBldmVyeSBsZXZlbCBvZiB0aGUgaW5vZGUncyBleHRlbnQgdHJlZS4KKwkgKi8KKwllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDE7CisJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jayA9IGxibG9jazsKKwlyZXR1cm4gZXh0X2RlcHRoKGlub2RlKSArIDE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMwMjMsNiArMzAzOCwxNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIHVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGFfYmxvY2tzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCQlzZWN0b3JfdCBibG9jaywgaW50IGNvdW50KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGEoYmRldiwgYmxvY2sgKyBpKTsKK30KKwogc3RhdGljIGludAogZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0NF9sYmxrX3QgaWJsb2NrLCB1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcywKQEAgLTMwOTgsNiArMzEyMSwxOCBAQAogCX0gZWxzZQogCQlhbGxvY2F0ZWQgPSByZXQ7CiAJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKKwkvKgorCSAqIGlmIHdlIGFsbG9jYXRlZCBtb3JlIGJsb2NrcyB0aGFuIHJlcXVlc3RlZAorCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIHVubWFwIHRoZSBleHRyYSBibG9jaworCSAqIGFsbG9jYXRlZC4gVGhlIGFjdHVhbCBuZWVkZWQgYmxvY2sgd2lsbCBnZXQKKwkgKiB1bm1hcHBlZCBsYXRlciB3aGVuIHdlIGZpbmQgdGhlIGJ1ZmZlcl9oZWFkIG1hcmtlZAorCSAqIG5ldy4KKwkgKi8KKwlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykgeworCQl1bm1hcF91bmRlcmx5aW5nX21ldGFkYXRhX2Jsb2Nrcyhpbm9kZS0+aV9zYi0+c19iZGV2LAorCQkJCQluZXdibG9jayArIG1heF9ibG9ja3MsCisJCQkJCWFsbG9jYXRlZCAtIG1heF9ibG9ja3MpOworCX0KIG1hcF9vdXQ6CiAJc2V0X2J1ZmZlcl9tYXBwZWQoYmhfcmVzdWx0KTsKIG91dDE6CkBAIC0zMTkwLDcgKzMyMjUsMTMgQEAKIAkgKiB0aGlzIHNpdHVhdGlvbiBpcyBwb3NzaWJsZSwgdGhvdWdoLCBfZHVyaW5nXyB0cmVlIG1vZGlmaWNhdGlvbjsKIAkgKiB0aGlzIGlzIHdoeSBhc3NlcnQgY2FuJ3QgYmUgcHV0IGluIGV4dDRfZXh0X2ZpbmRfZXh0ZW50KCkKIAkgKi8KLQlCVUdfT04ocGF0aFtkZXB0aF0ucF9leHQgPT0gTlVMTCAmJiBkZXB0aCAhPSAwKTsKKwlpZiAocGF0aFtkZXB0aF0ucF9leHQgPT0gTlVMTCAmJiBkZXB0aCAhPSAwKSB7CisJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLCAiYmFkIGV4dGVudCBhZGRyZXNzICIKKwkJCSAgICJpbm9kZTogJWx1LCBpYmxvY2s6ICVkLCBkZXB0aDogJWQiLAorCQkJICAgaW5vZGUtPmlfaW5vLCBpYmxvY2ssIGRlcHRoKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQyOworCX0KIAllaCA9IHBhdGhbZGVwdGhdLnBfaGRyOwogCiAJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuYwppbmRleCAwYjIyNDk3Li45OGJkMTQwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZzeW5jLmMKKysrIGIvZnMvZXh0NC9mc3luYy5jCkBAIC04OCw5ICs4OCwyMSBAQAogCQlyZXR1cm4gZXh0NF9mb3JjZV9jb21taXQoaW5vZGUtPmlfc2IpOwogCiAJY29tbWl0X3RpZCA9IGRhdGFzeW5jID8gZWktPmlfZGF0YXN5bmNfdGlkIDogZWktPmlfc3luY190aWQ7Ci0JaWYgKGpiZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKSkKKwlpZiAoamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpKSB7CisJCS8qCisJCSAqIFdoZW4gdGhlIGpvdXJuYWwgaXMgb24gYSBkaWZmZXJlbnQgZGV2aWNlIHRoYW4gdGhlCisJCSAqIGZzIGRhdGEgZGlzaywgd2UgbmVlZCB0byBpc3N1ZSB0aGUgYmFycmllciBpbgorCQkgKiB3cml0ZWJhY2sgbW9kZS4gIChJbiBvcmRlcmVkIG1vZGUsIHRoZSBqYmQyIGxheWVyCisJCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGlzc3VpbmcgdGhlIGJhcnJpZXIuICBJbgorCQkgKiBkYXRhPWpvdXJuYWwsIGFsbCBvZiB0aGUgZGF0YSBibG9ja3MgYXJlIHdyaXR0ZW4gdG8KKwkJICogdGhlIGpvdXJuYWwgZGV2aWNlLikKKwkJICovCisJCWlmIChleHQ0X3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkgJiYKKwkJICAgIChqb3VybmFsLT5qX2ZzX2RldiAhPSBqb3VybmFsLT5qX2RldikgJiYKKwkJICAgIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9CQVJSSUVSKSkKKwkJCWJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS0+aV9zYi0+c19iZGV2LCBOVUxMKTsKIAkJamJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7Ci0JZWxzZSBpZiAoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQkFSUklFUikKKwl9IGVsc2UgaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0JBUlJJRVIpCiAJCWJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS0+aV9zYi0+c19iZGV2LCBOVUxMKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDUzNTJkYjEuLmM4MTg5NzIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYworKysgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTEwMDMsODMgKzEwMDMsOTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1xc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCisjaWZkZWYgQ09ORklHX1FVT1RBCitxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbDsKLQotCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKLQl0b3RhbCA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgKwotCQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzOwotCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwotCi0JcmV0dXJuICh0b3RhbCA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKKwlyZXR1cm4gJkVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfcXVvdGE7CiB9Ci0vKgotICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQotICogdG8gYWxsb2NhdGUgQGJsb2NrcyBmb3Igbm9uIGV4dGVudCBmaWxlIGJhc2VkIGZpbGUKLSAqLwotc3RhdGljIGludCBleHQ0X2luZGlyZWN0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpCi17Ci0JaW50IGljYXAgPSBFWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKTsKLQlpbnQgaW5kX2Jsa3MsIGRpbmRfYmxrcywgdGluZF9ibGtzOwotCi0JLyogbnVtYmVyIG9mIG5ldyBpbmRpcmVjdCBibG9ja3MgbmVlZGVkICovCi0JaW5kX2Jsa3MgPSAoYmxvY2tzICsgaWNhcCAtIDEpIC8gaWNhcDsKLQotCWRpbmRfYmxrcyA9IChpbmRfYmxrcyArIGljYXAgLSAxKSAvIGljYXA7Ci0KLQl0aW5kX2Jsa3MgPSAxOwotCi0JcmV0dXJuIGluZF9ibGtzICsgZGluZF9ibGtzICsgdGluZF9ibGtzOwotfQorI2VuZGlmCiAKIC8qCiAgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBtZXRhZGF0YSBibG9ja3MgbmVlZCB0byByZXNlcnZlCi0gKiB0byBhbGxvY2F0ZSBnaXZlbiBudW1iZXIgb2YgYmxvY2tzCisgKiB0byBhbGxvY2F0ZSBhIG5ldyBibG9jayBhdCBAbGJsb2NrcyBmb3Igbm9uIGV4dGVudCBmaWxlIGJhc2VkIGZpbGUKICAqLwotc3RhdGljIGludCBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpCitzdGF0aWMgaW50IGV4dDRfaW5kaXJlY3RfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc2VjdG9yX3QgbGJsb2NrKQogewotCWlmICghYmxvY2tzKQorCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKKwlpbnQgZGluZF9tYXNrID0gRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYikgLSAxOworCWludCBibGtfYml0czsKKworCWlmIChsYmxvY2sgPCBFWFQ0X05ESVJfQkxPQ0tTKQogCQlyZXR1cm4gMDsKIAotCWlmIChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQotCQlyZXR1cm4gZXh0NF9leHRfY2FsY19tZXRhZGF0YV9hbW91bnQoaW5vZGUsIGJsb2Nrcyk7CisJbGJsb2NrIC09IEVYVDRfTkRJUl9CTE9DS1M7CiAKLQlyZXR1cm4gZXh0NF9pbmRpcmVjdF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgYmxvY2tzKTsKKwlpZiAoZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gJiYKKwkgICAgKGxibG9jayAmIGRpbmRfbWFzaykgPT0gZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jaykgeworCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbisrOworCQlyZXR1cm4gMDsKKwl9CisJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jayA9IGxibG9jayAmIGRpbmRfbWFzazsKKwllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDE7CisJYmxrX2JpdHMgPSByb3VuZHVwX3Bvd19vZl90d28obGJsb2NrICsgMSk7CisJcmV0dXJuIChibGtfYml0cyAvIEVYVDRfQUREUl9QRVJfQkxPQ0tfQklUUyhpbm9kZS0+aV9zYikpICsgMTsKIH0KIAorLyoKKyAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG1ldGFkYXRhIGJsb2NrcyBuZWVkIHRvIHJlc2VydmUKKyAqIHRvIGFsbG9jYXRlIGEgYmxvY2sgbG9jYXRlZCBhdCBAbGJsb2NrCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBsYmxvY2spCit7CisJaWYgKEVYVDRfSShpbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpCisJCXJldHVybiBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgbGJsb2NrKTsKKworCXJldHVybiBleHQ0X2luZGlyZWN0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCBsYmxvY2spOworfQorCisvKgorICogQ2FsbGVkIHdpdGggaV9kYXRhX3NlbSBkb3duLCB3aGljaCBpcyBpbXBvcnRhbnQgc2luY2Ugd2UgY2FuIGNhbGwKKyAqIGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucygpIGZyb20gaGVyZS4KKyAqLwogc3RhdGljIHZvaWQgZXh0NF9kYV91cGRhdGVfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdXNlZCkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKLQlpbnQgdG90YWwsIG1kYiwgbWRiX2ZyZWU7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCWludCBtZGJfZnJlZSA9IDA7CiAKLQlzcGluX2xvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0JLyogcmVjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBtZXRhYmxvY2tzIHN0aWxsIG5lZWQgdG8gYmUgcmVzZXJ2ZWQgKi8KLQl0b3RhbCA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLSB1c2VkOwotCW1kYiA9IGV4dDRfY2FsY19tZXRhZGF0YV9hbW91bnQoaW5vZGUsIHRvdGFsKTsKLQotCS8qIGZpZ3VyZSBvdXQgaG93IG1hbnkgbWV0YWJsb2NrcyB0byByZWxlYXNlICovCi0JQlVHX09OKG1kYiA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpOwotCW1kYl9mcmVlID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyAtIG1kYjsKLQotCWlmIChtZGJfZnJlZSkgewotCQkvKiBBY2NvdW50IGZvciBhbGxvY2F0ZWQgbWV0YV9ibG9ja3MgKi8KLQkJbWRiX2ZyZWUgLT0gRVhUNF9JKGlub2RlKS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3M7Ci0KLQkJLyogdXBkYXRlIGZzIGRpcnR5IGJsb2NrcyBjb3VudGVyICovCi0JCXBlcmNwdV9jb3VudGVyX3N1Yigmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIsIG1kYl9mcmVlKTsKLQkJRVhUNF9JKGlub2RlKS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSAwOwotCQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzID0gbWRiOworCXNwaW5fbG9jaygmZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJaWYgKHVubGlrZWx5KHVzZWQgPiBlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcykpIHsKKwkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fTk9USUNFLCAiJXM6IGlubyAlbHUsIHVzZWQgJWQgIgorCQkJICJ3aXRoIG9ubHkgJWQgcmVzZXJ2ZWQgZGF0YSBibG9ja3NcbiIsCisJCQkgX19mdW5jX18sIGlub2RlLT5pX2lubywgdXNlZCwKKwkJCSBlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7CisJCVdBUk5fT04oMSk7CisJCXVzZWQgPSBlaS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrczsKIAl9CiAKLQkvKiB1cGRhdGUgcGVyLWlub2RlIHJlc2VydmF0aW9ucyAqLwotCUJVR19PTih1c2VkICA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOwotCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgLT0gdXNlZDsKKwkvKiBVcGRhdGUgcGVyLWlub2RlIHJlc2VydmF0aW9ucyAqLworCWVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzIC09IHVzZWQ7CisJdXNlZCArPSBlaS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3M7CisJZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgLT0gZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzOworCWVpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrcyA9IDA7CisJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgdXNlZCk7CisKKwlpZiAoZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgPT0gMCkgeworCQkvKgorCQkgKiBXZSBjYW4gcmVsZWFzZSBhbGwgb2YgdGhlIHJlc2VydmVkIG1ldGFkYXRhIGJsb2NrcworCQkgKiBvbmx5IHdoZW4gd2UgaGF2ZSB3cml0dGVuIGFsbCBvZiB0aGUgZGVsYXllZAorCQkgKiBhbGxvY2F0aW9uIGJsb2Nrcy4KKwkJICovCisJCW1kYl9mcmVlID0gZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CisJCWVpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzID0gMDsKKwkJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gPSAwOworCQlwZXJjcHVfY291bnRlcl9zdWIoJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyLCBtZGJfZnJlZSk7CisJfQogCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCi0JLyoKLQkgKiBmcmVlIHRob3NlIG92ZXItYm9va2luZyBxdW90YSBmb3IgbWV0YWRhdGEgYmxvY2tzCi0JICovCisJLyogVXBkYXRlIHF1b3RhIHN1YnN5c3RlbSAqLworCXZmc19kcV9jbGFpbV9ibG9jayhpbm9kZSwgdXNlZCk7CiAJaWYgKG1kYl9mcmVlKQogCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgbWRiX2ZyZWUpOwogCkBAIC0xMDg4LDcgKzEwOTksOCBAQAogCSAqIHRoZXJlIGFyZW4ndCBhbnkgd3JpdGVycyBvbiB0aGUgaW5vZGUsIHdlIGNhbiBkaXNjYXJkIHRoZQogCSAqIGlub2RlJ3MgcHJlYWxsb2NhdGlvbnMuCiAJICovCi0JaWYgKCF0b3RhbCAmJiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID09IDApKQorCWlmICgoZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgPT0gMCkgJiYKKwkgICAgKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAwKSkKIAkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKIH0KIApAQCAtMTc5NywxMSArMTgwOSwxNSBAQAogCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7CiB9CiAKLXN0YXRpYyBpbnQgZXh0NF9kYV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2NrcykKKy8qCisgKiBSZXNlcnZlIGEgc2luZ2xlIGJsb2NrIGxvY2F0ZWQgYXQgbGJsb2NrCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9kYV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGxibG9jaykKIHsKIAlpbnQgcmV0cmllcyA9IDA7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7Ci0JdW5zaWduZWQgbG9uZyBtZF9uZWVkZWQsIG1kYmxvY2tzLCB0b3RhbCA9IDA7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCXVuc2lnbmVkIGxvbmcgbWRfbmVlZGVkLCBtZF9yZXNlcnZlZDsKIAogCS8qCiAJICogcmVjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBtZXRhZGF0YSBibG9ja3MgdG8gcmVzZXJ2ZQpAQCAtMTgwOSw4NiArMTgyNSw5MCBAQAogCSAqIHdvcnNlIGNhc2UgaXMgb25lIGV4dGVudCBwZXIgYmxvY2sKIAkgKi8KIHJlcGVhdDoKLQlzcGluX2xvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0JdG90YWwgPSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICsgbnJibG9ja3M7Ci0JbWRibG9ja3MgPSBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCB0b3RhbCk7Ci0JQlVHX09OKG1kYmxvY2tzIDwgRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7Ci0KLQltZF9uZWVkZWQgPSBtZGJsb2NrcyAtIEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7Ci0JdG90YWwgPSBtZF9uZWVkZWQgKyBucmJsb2NrczsKKwlzcGluX2xvY2soJmVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCW1kX3Jlc2VydmVkID0gZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CisJbWRfbmVlZGVkID0gZXh0NF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgbGJsb2NrKTsKKwlzcGluX3VubG9jaygmZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAKIAkvKgogCSAqIE1ha2UgcXVvdGEgcmVzZXJ2YXRpb24gaGVyZSB0byBwcmV2ZW50IHF1b3RhIG92ZXJmbG93CiAJICogbGF0ZXIuIFJlYWwgcXVvdGEgYWNjb3VudGluZyBpcyBkb25lIGF0IHBhZ2VzIHdyaXRlb3V0CiAJICogdGltZS4KIAkgKi8KLQlpZiAodmZzX2RxX3Jlc2VydmVfYmxvY2soaW5vZGUsIHRvdGFsKSkgewotCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKwlpZiAodmZzX2RxX3Jlc2VydmVfYmxvY2soaW5vZGUsIG1kX25lZWRlZCArIDEpKSB7CisJCS8qIAorCQkgKiBXZSB0ZW5kIHRvIGJhZGx5IG92ZXItZXN0aW1hdGUgdGhlIGFtb3VudCBvZgorCQkgKiBtZXRhZGF0YSBibG9ja3Mgd2hpY2ggYXJlIG5lZWRlZCwgc28gaWYgd2UgaGF2ZQorCQkgKiByZXNlcnZlZCBhbnkgbWV0YWRhdGEgYmxvY2tzLCB0cnkgdG8gZm9yY2Ugb3V0IHRoZQorCQkgKiBpbm9kZSBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IGJldHRlciBsdWNrLgorCQkgKi8KKwkJaWYgKG1kX3Jlc2VydmVkICYmIHJldHJpZXMrKyA8PSAzKQorCQkJZ290byByZXRyeTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQogCi0JaWYgKGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCB0b3RhbCkpIHsKLQkJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7Ci0JCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b3RhbCk7CisJaWYgKGV4dDRfY2xhaW1fZnJlZV9ibG9ja3Moc2JpLCBtZF9uZWVkZWQgKyAxKSkgeworCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgbWRfbmVlZGVkICsgMSk7CiAJCWlmIChleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKSB7CisJCXJldHJ5OgorCQkJaWYgKG1kX3Jlc2VydmVkKQorCQkJCXdyaXRlX2lub2RlX25vdyhpbm9kZSwgKHJldHJpZXMgPT0gMykpOwogCQkJeWllbGQoKTsKIAkJCWdvdG8gcmVwZWF0OwogCQl9CiAJCXJldHVybiAtRU5PU1BDOwogCX0KLQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICs9IG5yYmxvY2tzOwotCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSBtZGJsb2NrczsKKwlzcGluX2xvY2soJmVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCWVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKys7CisJZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgKz0gbWRfbmVlZGVkOworCXNwaW5fdW5sb2NrKCZlaS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAotCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwogCXJldHVybiAwOyAgICAgICAvKiBzdWNjZXNzICovCiB9CiAKIHN0YXRpYyB2b2lkIGV4dDRfZGFfcmVsZWFzZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdG9fZnJlZSkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKLQlpbnQgdG90YWwsIG1kYiwgbWRiX2ZyZWUsIHJlbGVhc2U7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCiAJaWYgKCF0b19mcmVlKQogCQlyZXR1cm47CQkvKiBOb3RoaW5nIHRvIHJlbGVhc2UsIGV4aXQgKi8KIAogCXNwaW5fbG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAotCWlmICghRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcykgeworCWlmICh1bmxpa2VseSh0b19mcmVlID4gZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpKSB7CiAJCS8qCi0JCSAqIGlmIHRoZXJlIGlzIG5vIHJlc2VydmVkIGJsb2NrcywgYnV0IHdlIHRyeSB0byBmcmVlIHNvbWUKLQkJICogdGhlbiB0aGUgY291bnRlciBpcyBtZXNzZWQgdXAgc29tZXdoZXJlLgotCQkgKiBidXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBpbnZhbGlkYXRlCi0JCSAqIHBhZ2UsIGl0J3MgaGFybWxlc3MgdG8gcmV0dXJuIHdpdGhvdXQgYW55IGFjdGlvbgorCQkgKiBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJlc2VydmVkIGJsb2NrcywgdGhlbiB0aGUKKwkJICogY291bnRlciBpcyBtZXNzZWQgdXAgc29tZXdoZXJlLiAgU2luY2UgdGhpcworCQkgKiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBpbnZhbGlkYXRlIHBhZ2UsIGl0J3MKKwkJICogaGFybWxlc3MgdG8gcmV0dXJuIHdpdGhvdXQgYW55IGFjdGlvbi4KIAkJICovCi0JCXByaW50ayhLRVJOX0lORk8gImV4dDQgZGVsYWxsb2MgdHJ5IHRvIHJlbGVhc2UgJWQgcmVzZXJ2ZWQgIgotCQkJICAgICJibG9ja3MgZm9yIGlub2RlICVsdSwgYnV0IHRoZXJlIGlzIG5vIHJlc2VydmVkICIKLQkJCSAgICAiZGF0YSBibG9ja3NcbiIsIHRvX2ZyZWUsIGlub2RlLT5pX2lubyk7Ci0JCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOwotCQlyZXR1cm47CisJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX05PVElDRSwgImV4dDRfZGFfcmVsZWFzZV9zcGFjZTogIgorCQkJICJpbm8gJWx1LCB0b19mcmVlICVkIHdpdGggb25seSAlZCByZXNlcnZlZCAiCisJCQkgImRhdGEgYmxvY2tzXG4iLCBpbm9kZS0+aV9pbm8sIHRvX2ZyZWUsCisJCQkgZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOworCQlXQVJOX09OKDEpOworCQl0b19mcmVlID0gZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3M7CisJfQorCWVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzIC09IHRvX2ZyZWU7CisKKwlpZiAoZWktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgPT0gMCkgeworCQkvKgorCQkgKiBXZSBjYW4gcmVsZWFzZSBhbGwgb2YgdGhlIHJlc2VydmVkIG1ldGFkYXRhIGJsb2NrcworCQkgKiBvbmx5IHdoZW4gd2UgaGF2ZSB3cml0dGVuIGFsbCBvZiB0aGUgZGVsYXllZAorCQkgKiBhbGxvY2F0aW9uIGJsb2Nrcy4KKwkJICovCisJCXRvX2ZyZWUgKz0gZWktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CisJCWVpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzID0gMDsKKwkJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gPSAwOwogCX0KIAotCS8qIHJlY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWJsb2NrcyBzdGlsbCBuZWVkIHRvIGJlIHJlc2VydmVkICovCi0JdG90YWwgPSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzIC0gdG9fZnJlZTsKLQltZGIgPSBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCB0b3RhbCk7CisJLyogdXBkYXRlIGZzIGRpcnR5IGJsb2NrcyBjb3VudGVyICovCisJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgdG9fZnJlZSk7CiAKLQkvKiBmaWd1cmUgb3V0IGhvdyBtYW55IG1ldGFibG9ja3MgdG8gcmVsZWFzZSAqLwotCUJVR19PTihtZGIgPiBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKLQltZGJfZnJlZSA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgLSBtZGI7Ci0KLQlyZWxlYXNlID0gdG9fZnJlZSArIG1kYl9mcmVlOwotCi0JLyogdXBkYXRlIGZzIGRpcnR5IGJsb2NrcyBjb3VudGVyIGZvciB0cnVuY2F0ZSBjYXNlICovCi0JcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgcmVsZWFzZSk7Ci0KLQkvKiB1cGRhdGUgcGVyLWlub2RlIHJlc2VydmF0aW9ucyAqLwotCUJVR19PTih0b19mcmVlID4gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7Ci0JRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyAtPSB0b19mcmVlOwotCi0JQlVHX09OKG1kYiA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpOwotCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSBtZGI7CiAJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAKLQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgcmVsZWFzZSk7CisJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvX2ZyZWUpOwogfQogCiBzdGF0aWMgdm9pZCBleHQ0X2RhX3BhZ2VfcmVsZWFzZV9yZXNlcnZhdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwKQEAgLTI0OTQsNyArMjUxNCw3IEBACiAJCSAqIFhYWDogX19ibG9ja19wcmVwYXJlX3dyaXRlKCkgdW5tYXBzIHBhc3NlZCBibG9jaywKIAkJICogaXMgaXQgT0s/CiAJCSAqLwotCQlyZXQgPSBleHQ0X2RhX3Jlc2VydmVfc3BhY2UoaW5vZGUsIDEpOworCQlyZXQgPSBleHQ0X2RhX3Jlc2VydmVfc3BhY2UoaW5vZGUsIGlibG9jayk7CiAJCWlmIChyZXQpCiAJCQkvKiBub3QgZW5vdWdoIHNwYWNlIHRvIHJlc2VydmUgKi8KIAkJCXJldHVybiByZXQ7CkBAIC0yOTY4LDggKzI5ODgsNyBAQAogb3V0X3dyaXRlcGFnZXM6CiAJaWYgKCFub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKIAkJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDA7Ci0JaWYgKHdiYy0+bnJfdG9fd3JpdGUgPiBucl90b193cml0ZWJ1bXApCi0JCXdiYy0+bnJfdG9fd3JpdGUgLT0gbnJfdG9fd3JpdGVidW1wOworCXdiYy0+bnJfdG9fd3JpdGUgLT0gbnJfdG9fd3JpdGVidW1wOwogCXdiYy0+cmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydDsKIAl0cmFjZV9leHQ0X2RhX3dyaXRlcGFnZXNfcmVzdWx0KGlub2RlLCB3YmMsIHJldCwgcGFnZXNfd3JpdHRlbik7CiAJcmV0dXJuIHJldDsKQEAgLTI5OTQsMTEgKzMwMTMsMTggQEAKIAlpZiAoMiAqIGZyZWVfYmxvY2tzIDwgMyAqIGRpcnR5X2Jsb2NrcyB8fAogCQlmcmVlX2Jsb2NrcyA8IChkaXJ0eV9ibG9ja3MgKyBFWFQ0X0ZSRUVCTE9DS1NfV0FURVJNQVJLKSkgewogCQkvKgotCQkgKiBmcmVlIGJsb2NrIGNvdW50IGlzIGxlc3MgdGhhdCAxNTAlIG9mIGRpcnR5IGJsb2NrcwotCQkgKiBvciBmcmVlIGJsb2NrcyBpcyBsZXNzIHRoYXQgd2F0ZXJtYXJrCisJCSAqIGZyZWUgYmxvY2sgY291bnQgaXMgbGVzcyB0aGFuIDE1MCUgb2YgZGlydHkgYmxvY2tzCisJCSAqIG9yIGZyZWUgYmxvY2tzIGlzIGxlc3MgdGhhbiB3YXRlcm1hcmsKIAkJICovCiAJCXJldHVybiAxOwogCX0KKwkvKgorCSAqIEV2ZW4gaWYgd2UgZG9uJ3Qgc3dpdGNoIGJ1dCBhcmUgbmVhcmluZyBjYXBhY2l0eSwKKwkgKiBzdGFydCBwdXNoaW5nIGRlbGFsbG9jIHdoZW4gMS8yIG9mIGZyZWUgYmxvY2tzIGFyZSBkaXJ0eS4KKwkgKi8KKwlpZiAoZnJlZV9ibG9ja3MgPCAyICogZGlydHlfYmxvY2tzKQorCQl3cml0ZWJhY2tfaW5vZGVzX3NiX2lmX2lkbGUoc2IpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3OTQsNiArNDgyMCw5IEBACiAJCQkoKF9fdTY0KWxlMTZfdG9fY3B1KHJhd19pbm9kZS0+aV9maWxlX2FjbF9oaWdoKSkgPDwgMzI7CiAJaW5vZGUtPmlfc2l6ZSA9IGV4dDRfaXNpemUocmF3X2lub2RlKTsKIAllaS0+aV9kaXNrc2l6ZSA9IGlub2RlLT5pX3NpemU7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJZWktPmlfcmVzZXJ2ZWRfcXVvdGEgPSAwOworI2VuZGlmCiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9nZW5lcmF0aW9uKTsKIAllaS0+aV9ibG9ja19ncm91cCA9IGlsb2MuYmxvY2tfZ3JvdXA7CiAJZWktPmlfbGFzdF9hbGxvY19ncm91cCA9IH4wOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCBiMWZkM2RhLi5kMzRhZmFkIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMjc1NSwxMiArMjc1NSw2IEBACiAJaWYgKCEoYWMtPmFjX2ZsYWdzICYgRVhUNF9NQl9ERUxBTExPQ19SRVNFUlZFRCkpCiAJCS8qIHJlbGVhc2UgYWxsIHRoZSByZXNlcnZlZCBibG9ja3MgaWYgbm9uIGRlbGFsbG9jICovCiAJCXBlcmNwdV9jb3VudGVyX3N1Yigmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIsIHJlc2Vydl9ibGtzKTsKLQllbHNlIHsKLQkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwKLQkJCQkJCWFjLT5hY19iX2V4LmZlX2xlbik7Ci0JCS8qIGNvbnZlcnQgcmVzZXJ2ZWQgcXVvdGEgYmxvY2tzIHRvIHJlYWwgcXVvdGEgYmxvY2tzICovCi0JCXZmc19kcV9jbGFpbV9ibG9jayhhYy0+YWNfaW5vZGUsIGFjLT5hY19iX2V4LmZlX2xlbik7Ci0JfQogCiAJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CiAJCWV4dDRfZ3JvdXBfdCBmbGV4X2dyb3VwID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5oIGIvZnMvZXh0NC9tYmFsbG9jLmgKaW5kZXggMGNhODExMC4uNDM2NTIxYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmgKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAiZXh0NF9qYmQyLmgiCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggODI3YmRlMS4uNzM1YzIwZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNzAyLDggKzcwMiwxMiBAQAogCWVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzID0gMDsKIAllaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcyA9IDA7CiAJZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzID0gMDsKKwllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDA7CiAJZWktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZyA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJihlaS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKSk7CisjaWZkZWYgQ09ORklHX1FVT1RBCisJZWktPmlfcmVzZXJ2ZWRfcXVvdGEgPSAwOworI2VuZGlmCiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCk7CiAJZWktPmN1cl9haW9fZGlvID0gTlVMTDsKIAllaS0+aV9zeW5jX3RpZCA9IDA7CkBAIC0xMDE0LDcgKzEwMTgsOSBAQAogCS5yZXNlcnZlX3NwYWNlCT0gZHF1b3RfcmVzZXJ2ZV9zcGFjZSwKIAkuY2xhaW1fc3BhY2UJPSBkcXVvdF9jbGFpbV9zcGFjZSwKIAkucmVsZWFzZV9yc3YJPSBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlLAorI2lmZGVmIENPTkZJR19RVU9UQQogCS5nZXRfcmVzZXJ2ZWRfc3BhY2UgPSBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZSwKKyNlbmRpZgogCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAogCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKIAkuZnJlZV9pbm9kZQk9IGRxdW90X2ZyZWVfaW5vZGUsCkBAIC0yMTY5LDkgKzIxNzUsOSBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktPnNfYnVkZHlfY2FjaGUtPmlfc2I7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLAotCQkJc2JpLT5zX2tieXRlc193cml0dGVuICsgCisJCQkodW5zaWduZWQgbG9uZyBsb25nKShzYmktPnNfa2J5dGVzX3dyaXR0ZW4gKwogCQkJKChwYXJ0X3N0YXRfcmVhZChzYi0+c19iZGV2LT5iZF9wYXJ0LCBzZWN0b3JzWzFdKSAtCi0JCQkgIEVYVDRfU0Ioc2IpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCkgPj4gMSkpOworCQkJICBFWFQ0X1NCKHNiKS0+c19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQpID4+IDEpKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGlub2RlX3JlYWRhaGVhZF9ibGtzX3N0b3JlKHN0cnVjdCBleHQ0X2F0dHIgKmEsCkBAIC00MDAwLDYgKzQwMDYsNyBAQAogewogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0Ml9mc190eXBlKTsKIH0KK01PRFVMRV9BTElBUygiZXh0MiIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9hc19leHQyKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfYXNfZXh0Mih2b2lkKSB7IH0KQEAgLTQwMjYsNiArNDAzMyw3IEBACiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleHQzX2ZzX3R5cGUpOwogfQorTU9EVUxFX0FMSUFTKCJleHQzIik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9hc19leHQzKHZvaWQpIHsgfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDgzMjE4YmUuLmYzYTJmN2UgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYworKysgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTEzMzIsNiArMTMzMiw4IEBACiAJCQlnb3RvIGNsZWFudXA7CiAJCWtmcmVlKGJfZW50cnlfbmFtZSk7CiAJCWtmcmVlKGJ1ZmZlcik7CisJCWJfZW50cnlfbmFtZSA9IE5VTEw7CisJCWJ1ZmZlciA9IE5VTEw7CiAJCWJyZWxzZShpcy0+aWxvYy5iaCk7CiAJCWtmcmVlKGlzKTsKIAkJa2ZyZWUoYnMpOwpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDBhZmFjZjYuLjY5NjUyYzUgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTE4NiwxMCArMTg2LDggQEAKIAkgKiB0aGF0IHdlIGNhbiBkbyBkZWJ1Z2dpbmcgY2hlY2tzIGF0IF9fZnB1dCgpCiAJICovCiAJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmICFzcGVjaWFsX2ZpbGUocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7Ci0JCWludCBlcnJvciA9IDA7CiAJCWZpbGVfdGFrZV93cml0ZShmaWxlKTsKLQkJZXJyb3IgPSBtbnRfY2xvbmVfd3JpdGUocGF0aC0+bW50KTsKLQkJV0FSTl9PTihlcnJvcik7CisJCVdBUk5fT04obW50X2Nsb25lX3dyaXRlKHBhdGgtPm1udCkpOwogCX0KIAlpbWFfY291bnRzX2dldChmaWxlKTsKIAlyZXR1cm4gZmlsZTsKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggNDliYzFiOC4uMWE3YzQyYyAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTI0Miw2ICsyNDIsNyBAQAogLyoqCiAgKiBiZGlfc3RhcnRfd3JpdGViYWNrIC0gc3RhcnQgd3JpdGViYWNrCiAgKiBAYmRpOiB0aGUgYmFja2luZyBkZXZpY2UgdG8gd3JpdGUgZnJvbQorICogQHNiOiB3cml0ZSBpbm9kZXMgZnJvbSB0aGlzIHN1cGVyX2Jsb2NrCiAgKiBAbnJfcGFnZXM6IHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUKICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTExODcsNiArMTE4OCwyMyBAQAogRVhQT1JUX1NZTUJPTCh3cml0ZWJhY2tfaW5vZGVzX3NiKTsKIAogLyoqCisgKiB3cml0ZWJhY2tfaW5vZGVzX3NiX2lmX2lkbGUJLQlzdGFydCB3cml0ZWJhY2sgaWYgbm9uZSB1bmRlcndheQorICogQHNiOiB0aGUgc3VwZXJibG9jaworICoKKyAqIEludm9rZSB3cml0ZWJhY2tfaW5vZGVzX3NiIGlmIG5vIHdyaXRlYmFjayBpcyBjdXJyZW50bHkgdW5kZXJ3YXkuCisgKiBSZXR1cm5zIDEgaWYgd3JpdGViYWNrIHdhcyBzdGFydGVkLCAwIGlmIG5vdC4KKyAqLworaW50IHdyaXRlYmFja19pbm9kZXNfc2JfaWZfaWRsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWlmICghd3JpdGViYWNrX2luX3Byb2dyZXNzKHNiLT5zX2JkaSkpIHsKKwkJd3JpdGViYWNrX2lub2Rlc19zYihzYik7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wod3JpdGViYWNrX2lub2Rlc19zYl9pZl9pZGxlKTsKKworLyoqCiAgKiBzeW5jX2lub2Rlc19zYgktCXN5bmMgc2IgaW5vZGUgcGFnZXMKICAqIEBzYjogdGhlIHN1cGVyYmxvY2sKICAqCmRpZmYgLS1naXQgYS9mcy9nZnMyL0tjb25maWcgYi9mcy9nZnMyL0tjb25maWcKaW5kZXggYjE5MmM2Ni4uNGRjZGRmOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9LY29uZmlnCisrKyBiL2ZzL2dmczIvS2NvbmZpZwpAQCAtMTAsNyArMTAsNiBAQAogCXNlbGVjdCBTTE9XX1dPUksKIAlzZWxlY3QgUVVPVEEKIAlzZWxlY3QgUVVPVEFDVEwKLQlzZWxlY3QgRlNfSk9VUk5BTF9JTkZPCiAJaGVscAogCSAgQSBjbHVzdGVyIGZpbGVzeXN0ZW0uCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZmlsZS5jIGIvZnMvZ2ZzMi9maWxlLmMKaW5kZXggNGViMzA4YS4uYTZhYmJhZTggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC01NjksNiArNTY5LDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBnZnMyX2ZpbGVfYWlvX3dyaXRlIC0gUGVyZm9ybSBhIHdyaXRlIHRvIGEgZmlsZQorICogQGlvY2I6IFRoZSBpbyBjb250ZXh0CisgKiBAaW92OiBUaGUgZGF0YSB0byB3cml0ZQorICogQG5yX3NlZ3M6IE51bWJlciBvZiBAaW92IHNlZ21lbnRzCisgKiBAcG9zOiBUaGUgZmlsZSBwb3NpdGlvbgorICoKKyAqIFdlIGhhdmUgdG8gZG8gYSBsb2NrL3VubG9jayBoZXJlIHRvIHJlZnJlc2ggdGhlIGlub2RlIHNpemUgZm9yCisgKiBPX0FQUEVORCB3cml0ZXMsIG90aGVyd2lzZSB3ZSBjYW4gbGFuZCB1cCB3cml0aW5nIGF0IHRoZSB3cm9uZworICogb2Zmc2V0LiBUaGVyZSBpcyBzdGlsbCBhIHJhY2UsIGJ1dCBwcm92aWRlZCB0aGUgYXBwIGlzIHVzaW5nIGl0cworICogb3duIGZpbGUgbG9ja2luZywgdGhpcyB3aWxsIG1ha2UgT19BUFBFTkQgd29yayBhcyBleHBlY3RlZC4KKyAqCisgKi8KKworc3RhdGljIHNzaXplX3QgZ2ZzMl9maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisKKwlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSB7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koZGVudHJ5LT5kX2lub2RlKTsKKwkJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCQlpbnQgcmV0OworCisJCXJldCA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCAwLCAmZ2gpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKKwl9CisKKwlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Cit9CisKICNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQogCiAvKioKQEAgLTcxMSw3ICs3NDUsNyBAQAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCi0JLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCisJLmFpb193cml0ZQk9IGdmczJfZmlsZV9haW9fd3JpdGUsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ2ZzMl9pb2N0bCwKIAkubW1hcAkJPSBnZnMyX21tYXAsCiAJLm9wZW4JCT0gZ2ZzMl9vcGVuLApAQCAtNzQxLDcgKzc3NSw3IEBACiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKLQkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2ZzMl9maWxlX2Fpb193cml0ZSwKIAkudW5sb2NrZWRfaW9jdGwJPSBnZnMyX2lvY3RsLAogCS5tbWFwCQk9IGdmczJfbW1hcCwKIAkub3BlbgkJPSBnZnMyX29wZW4sCmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IGNiOGQ3YTkuLjZmNjhhNWYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlpZiAoYXNwYWNlKSB7CiAJCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGFzcGFjZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAJCWFzcGFjZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZhc3BhY2VfYW9wczsKLQkJYXNwYWNlLT5pX3NpemUgPSB+MFVMTDsKKwkJYXNwYWNlLT5pX3NpemUgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCQlpcCA9IEdGUzJfSShhc3BhY2UpOwogCQljbGVhcl9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncyk7CiAJCWluc2VydF9pbm9kZV9oYXNoKGFzcGFjZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19pbm9kZS5jIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwppbmRleCAyNDc0MzZjLi43OGY3M2NhIDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19pbm9kZS5jCisrKyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKQEAgLTc0OCw3ICs3NDgsNyBAQAogCXN0cnVjdCBnZnMyX3JncnBkICpucmdkOwogCXVuc2lnbmVkIGludCBudW1fZ2g7CiAJaW50IGRpcl9yZW5hbWUgPSAwOwotCWludCBhbGxvY19yZXF1aXJlZDsKKwlpbnQgYWxsb2NfcmVxdWlyZWQgPSAwOwogCXVuc2lnbmVkIGludCB4OwogCWludCBlcnJvcjsKIApAQCAtODY3LDcgKzg2Nyw5IEBACiAJCQlnb3RvIG91dF9ndW5sb2NrOwogCX0KIAotCWFsbG9jX3JlcXVpcmVkID0gZXJyb3IgPSBnZnMyX2RpcmFkZF9hbGxvY19yZXF1aXJlZChuZGlyLCAmbmRlbnRyeS0+ZF9uYW1lKTsKKwlpZiAobmlwID09IE5VTEwpCisJCWFsbG9jX3JlcXVpcmVkID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQobmRpciwgJm5kZW50cnktPmRfbmFtZSk7CisJZXJyb3IgPSBhbGxvY19yZXF1aXJlZDsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dF9ndW5sb2NrOwogCWVycm9yID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIveGF0dHIuYyBiL2ZzL2dmczIveGF0dHIuYwppbmRleCA4YTA0MTA4Li5jMmViZGYyIDEwMDY0NAotLS0gYS9mcy9nZnMyL3hhdHRyLmMKKysrIGIvZnMvZ2ZzMi94YXR0ci5jCkBAIC0xMjk2LDYgKzEyOTYsNyBAQAogCiBpbnQgZ2ZzMl94YXR0cl9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGNoYXIgKmRhdGEpCiB7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gZWw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwogCWludCBlcnJvcjsKQEAgLTEzMDUsMTYgKzEzMDYsMTcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlbC5lbF9lYSkpIHsKLQkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwuZWxfYmgsIDEpOwotCQltZW1jcHkoR0ZTMl9FQTJEQVRBKGVsLmVsX2VhKSwgZGF0YSwKLQkJICAgICAgIEdGUzJfRUFfREFUQV9MRU4oZWwuZWxfZWEpKTsKLQl9IGVsc2UKKwkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwuZWxfYmgsIDEpOworCQkJbWVtY3B5KEdGUzJfRUEyREFUQShlbC5lbF9lYSksIGRhdGEsCisJCQkgICAgICAgR0ZTMl9FQV9EQVRBX0xFTihlbC5lbF9lYSkpOworCQl9CisJfSBlbHNlIHsKIAkJZXJyb3IgPSBlYV9hY2xfY2htb2RfdW5zdHVmZmVkKGlwLCBlbC5lbF9lYSwgZGF0YSk7CisJfQogCisJYnJlbHNlKGVsLmVsX2JoKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMTMyNyw4ICsxMzI5LDcgQEAKIAkJYnJlbHNlKGRpYmgpOwogCX0KIAotCWdmczJfdHJhbnNfZW5kKEdGUzJfU0IoJmlwLT5pX2lub2RlKSk7Ci0KKwlnZnMyX3RyYW5zX2VuZChzZHApOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggZjY3Y2QxNC4uZTk2YTE2NiAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAorKysgYi9mcy9pbnRlcm5hbC5oCkBAIC04NSwzICs4NSwxMCBAQAogICogc3VwZXIuYwogICovCiBleHRlcm4gaW50IGRvX3JlbW91bnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgdm9pZCAqLCBpbnQpOworCisvKgorICogb3Blbi5jCisgKi8KK3N0cnVjdCBuYW1laWRhdGE7CitleHRlcm4gc3RydWN0IGZpbGUgKm5hbWVpZGF0YV90b19maWxwKHN0cnVjdCBuYW1laWRhdGEgKik7CitleHRlcm4gdm9pZCByZWxlYXNlX29wZW5faW50ZW50KHN0cnVjdCBuYW1laWRhdGEgKik7CmRpZmYgLS1naXQgYS9mcy9qYmQvS2NvbmZpZyBiL2ZzL2piZC9LY29uZmlnCmluZGV4IGE4NDA4OTguLjRlMjhiZWUgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9LY29uZmlnCisrKyBiL2ZzL2piZC9LY29uZmlnCkBAIC0xLDYgKzEsNSBAQAogY29uZmlnIEpCRAogCXRyaXN0YXRlCi0Jc2VsZWN0IEZTX0pPVVJOQUxfSU5GTwogCWhlbHAKIAkgIFRoaXMgaXMgYSBnZW5lcmljIGpvdXJuYWxsaW5nIGxheWVyIGZvciBibG9jayBkZXZpY2VzLiAgSXQgaXMKIAkgIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBleHQzIGZpbGUgc3lzdGVtLCBidXQgaXQgY291bGQgYWxzbyBiZQpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggNDE2MGFmYS4uYmQyMjRlZSAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC0xOTEzLDcgKzE5MTMsNyBAQAogewogCWpiZF9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiamJkIiwgTlVMTCk7CiAJaWYgKGpiZF9kZWJ1Z2ZzX2RpcikKLQkJamJkX2RlYnVnID0gZGVidWdmc19jcmVhdGVfdTgoImpiZC1kZWJ1ZyIsIFNfSVJVR08sCisJCWpiZF9kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX3U4KCJqYmQtZGVidWciLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJICAgICAgIGpiZF9kZWJ1Z2ZzX2RpciwKIAkJCQkJICAgICAgICZqb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL0tjb25maWcgYi9mcy9qYmQyL0tjb25maWcKaW5kZXggMGY3ZDFjZS4uZjMyZjM0NiAxMDA2NDQKLS0tIGEvZnMvamJkMi9LY29uZmlnCisrKyBiL2ZzL2piZDIvS2NvbmZpZwpAQCAtMSw3ICsxLDYgQEAKIGNvbmZpZyBKQkQyCiAJdHJpc3RhdGUKIAlzZWxlY3QgQ1JDMzIKLQlzZWxlY3QgRlNfSk9VUk5BTF9JTkZPCiAJaGVscAogCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcyB0aGF0IHN1cHBvcnQKIAkgIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYmxvY2sgbnVtYmVycy4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IGNhMGY1ZWIuLjg4Njg0OTMgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvamJkMi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9qYmQyLmg+CiAKIC8qCkBAIC01MTUsNiArNTE2LDIwIEBACiAJam91cm5hbC0+al90YWlsX3NlcXVlbmNlID0gZmlyc3RfdGlkOwogCWpvdXJuYWwtPmpfdGFpbCA9IGJsb2NrbnI7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGFuIGV4dGVybmFsIGpvdXJuYWwsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKKwkgKiBhbnkgZGF0YSBibG9ja3MgdGhhdCB3ZXJlIHJlY2VudGx5IHdyaXR0ZW4gb3V0IC0tLSBwZXJoYXBzCisJICogYnkgamJkMl9sb2dfZG9fY2hlY2twb2ludCgpIC0tLSBhcmUgZmx1c2hlZCBvdXQgYmVmb3JlIHdlCisJICogZHJvcCB0aGUgdHJhbnNhY3Rpb25zIGZyb20gdGhlIGV4dGVybmFsIGpvdXJuYWwuICBJdCdzCisJICogdW5saWtlbHkgdGhpcyB3aWxsIGJlIG5lY2Vzc2FyeSwgZXNwZWNpYWxseSB3aXRoIGEKKwkgKiBhcHByb3ByaWF0ZWx5IHNpemVkIGpvdXJuYWwsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gZ3VhcmFudGVlCisJICogY29ycmVjdG5lc3MuICBGb3J0dW5hdGVseSBqYmQyX2NsZWFudXBfam91cm5hbF90YWlsKCkKKwkgKiBkb2Vzbid0IGdldCBjYWxsZWQgYWxsIHRoYXQgb2Z0ZW4uCisJICovCisJaWYgKChqb3VybmFsLT5qX2ZzX2RldiAhPSBqb3VybmFsLT5qX2RldikgJiYKKwkgICAgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0JBUlJJRVIpKQorCQlibGtkZXZfaXNzdWVfZmx1c2goam91cm5hbC0+al9mc19kZXYsIE5VTEwpOwogCWlmICghKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0FCT1JUKSkKIAkJamJkMl9qb3VybmFsX3VwZGF0ZV9zdXBlcmJsb2NrKGpvdXJuYWwsIDEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggNmExMDIzOC4uMWJjNzRiNiAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC0yNTksNiArMjU5LDcgQEAKIAkJCXJldCA9IGVycjsKIAkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCUpfQVNTRVJUKGppbm9kZS0+aV90cmFuc2FjdGlvbiA9PSBjb21taXRfdHJhbnNhY3Rpb24pOworCQljb21taXRfdHJhbnNhY3Rpb24tPnRfZmx1c2hlZF9kYXRhX2Jsb2NrcyA9IDE7CiAJCWppbm9kZS0+aV9mbGFncyAmPSB+SklfQ09NTUlUX1JVTk5JTkc7CiAJCXdha2VfdXBfYml0KCZqaW5vZGUtPmlfZmxhZ3MsIF9fSklfQ09NTUlUX1JVTk5JTkcpOwogCX0KQEAgLTcwOCw4ICs3MDksMTcgQEAKIAkJfQogCX0KIAotCS8qIERvbmUgaXQgYWxsOiBub3cgd3JpdGUgdGhlIGNvbW1pdCByZWNvcmQgYXN5bmNocm9ub3VzbHkuICovCisJLyogCisJICogSWYgdGhlIGpvdXJuYWwgaXMgbm90IGxvY2F0ZWQgb24gdGhlIGZpbGUgc3lzdGVtIGRldmljZSwKKwkgKiB0aGVuIHdlIG11c3QgZmx1c2ggdGhlIGZpbGUgc3lzdGVtIGRldmljZSBiZWZvcmUgd2UgaXNzdWUKKwkgKiB0aGUgY29tbWl0IHJlY29yZAorCSAqLworCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfZmx1c2hlZF9kYXRhX2Jsb2NrcyAmJgorCSAgICAoam91cm5hbC0+al9mc19kZXYgIT0gam91cm5hbC0+al9kZXYpICYmCisJICAgIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9CQVJSSUVSKSkKKwkJYmxrZGV2X2lzc3VlX2ZsdXNoKGpvdXJuYWwtPmpfZnNfZGV2LCBOVUxMKTsKIAorCS8qIERvbmUgaXQgYWxsOiBub3cgd3JpdGUgdGhlIGNvbW1pdCByZWNvcmQgYXN5bmNocm9ub3VzbHkuICovCiAJaWYgKEpCRDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwKIAkJCQkgICAgICBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKSkgewogCQllcnIgPSBqb3VybmFsX3N1Ym1pdF9jb21taXRfcmVjb3JkKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiwKQEAgLTcyMCwxMyArNzMwLDYgQEAKIAkJCWJsa2Rldl9pc3N1ZV9mbHVzaChqb3VybmFsLT5qX2RldiwgTlVMTCk7CiAJfQogCi0JLyoKLQkgKiBUaGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byB3YWl0IGZvciBkYXRhIGJ1ZmZlcnMgYm90aCBmb3IgQVNZTkMKLQkgKiBhbmQgIUFTWU5DIGNvbW1pdC4gSWYgY29tbWl0IGlzIEFTWU5DLCB3ZSBuZWVkIHRvIHdhaXQgb25seSBhZnRlcgotCSAqIHRoZSBjb21taXQgYmxvY2sgd2VudCB0byBkaXNrICh3aGljaCBoYXBwZW5zIGFib3ZlKS4gSWYgY29tbWl0IGlzCi0JICogU1lOQywgd2UgbmVlZCB0byB3YWl0IGZvciBkYXRhIGJ1ZmZlcnMgYmVmb3JlIHdlIHN0YXJ0IHdyaXRpbmcKLQkgKiBjb21taXQgYmxvY2ssIHdoaWNoIGhhcHBlbnMgYmVsb3cgaW4gc3VjaCBzZXR0aW5nLgotCSAqLwogCWVyciA9IGpvdXJuYWxfZmluaXNoX2lub2RlX2RhdGFfYnVmZmVycyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBiN2NhM2E5Li5hYzBkMDI3IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtODE0LDcgKzgxNCw3IEBACiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCBlcnI7CiAKLQlqb3VybmFsID0ga3phbGxvYyhzaXplb2YoKmpvdXJuYWwpLCBHRlBfS0VSTkVMfF9fR0ZQX05PRkFJTCk7CisJam91cm5hbCA9IGt6YWxsb2Moc2l6ZW9mKCpqb3VybmFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb3VybmFsKQogCQlnb3RvIGZhaWw7CiAKQEAgLTIxMTUsNyArMjExNSw4IEBACiB7CiAJamJkMl9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiamJkMiIsIE5VTEwpOwogCWlmIChqYmQyX2RlYnVnZnNfZGlyKQotCQlqYmQyX2RlYnVnID0gZGVidWdmc19jcmVhdGVfdTgoSkJEMl9ERUJVR19OQU1FLCBTX0lSVUdPLAorCQlqYmQyX2RlYnVnID0gZGVidWdmc19jcmVhdGVfdTgoSkJEMl9ERUJVR19OQU1FLAorCQkJCQkgICAgICAgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSAgICAgICBqYmQyX2RlYnVnZnNfZGlyLAogCQkJCQkgICAgICAgJmpiZDJfam91cm5hbF9lbmFibGVfZGVidWcpOwogfQpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCAyMjM0YzczLi5kOTI5YTgyIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtNTI0LDcgKzUyNCw3IEBACiAJICogUGFnZSBjYWNoZSBpcyBpbmRleGVkIGJ5IGxvbmcuCiAJICogSSB3b3VsZCB1c2UgTUFYX0xGU19GSUxFU0laRSwgYnV0IGl0J3Mgb25seSBoYWxmIGFzIGJpZwogCSAqLwotCXNiLT5zX21heGJ5dGVzID0gbWluKCgodTY0KSBQQUdFX0NBQ0hFX1NJWkUgPDwgMzIpIC0gMSwgc2ItPnNfbWF4Ynl0ZXMpOworCXNiLT5zX21heGJ5dGVzID0gbWluKCgodTY0KSBQQUdFX0NBQ0hFX1NJWkUgPDwgMzIpIC0gMSwgKHU2NClzYi0+c19tYXhieXRlcyk7CiAjZW5kaWYKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZGFkNGI4MC4uYjU1NDQwYiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0zNyw4ICszNyw2IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi0jZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCi0KIC8qIFtGZWItMTk5NyBULiBTY2hvZWJlbC1UaGV1ZXJdCiAgKiBGdW5kYW1lbnRhbCBjaGFuZ2VzIGluIHRoZSBwYXRobmFtZSBsb29rdXAgbWVjaGFuaXNtcyAobmFtZWkpCiAgKiB3ZXJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIG9taXJyLiAgVGhlIHJlYXNvbiBpcyB0aGF0IG9taXJyIG5lZWRzCkBAIC0yMzQsNiArMjMyLDcgQEAKIAkvKgogCSAqIFNlYXJjaGluZyBpbmNsdWRlcyBleGVjdXRhYmxlIG9uIGRpcmVjdG9yaWVzLCBlbHNlIGp1c3QgcmVhZC4KIAkgKi8KKwltYXNrICY9IE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUM7CiAJaWYgKG1hc2sgPT0gTUFZX1JFQUQgfHwgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgIShtYXNrICYgTUFZX1dSSVRFKSkpCiAJCWlmIChjYXBhYmxlKENBUF9EQUNfUkVBRF9TRUFSQ0gpKQogCQkJcmV0dXJuIDA7CkBAIC0xNjQwLDYgKzE2MzksNyBAQAogCQlpZiAoZmlscCA9PSBOVUxMKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVORklMRSk7CiAJCW5kLmludGVudC5vcGVuLmZpbGUgPSBmaWxwOworCQlmaWxwLT5mX2ZsYWdzID0gb3Blbl9mbGFnOwogCQluZC5pbnRlbnQub3Blbi5mbGFncyA9IGZsYWc7CiAJCW5kLmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gMDsKIAkJZXJyb3IgPSBkb19wYXRoX2xvb2t1cChkZmQsIHBhdGhuYW1lLApAQCAtMTY4NSw2ICsxNjg1LDcgQEAKIAlpZiAoZmlscCA9PSBOVUxMKQogCQlnb3RvIGV4aXRfcGFyZW50OwogCW5kLmludGVudC5vcGVuLmZpbGUgPSBmaWxwOworCWZpbHAtPmZfZmxhZ3MgPSBvcGVuX2ZsYWc7CiAJbmQuaW50ZW50Lm9wZW4uZmxhZ3MgPSBmbGFnOwogCW5kLmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gbW9kZTsKIAlkaXIgPSBuZC5wYXRoLmRlbnRyeTsKQEAgLTE3MjUsNyArMTcyNiw3IEBACiAJCQltbnRfZHJvcF93cml0ZShuZC5wYXRoLm1udCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KLQkJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgb3Blbl9mbGFnKTsKKwkJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCk7CiAJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJaWYgKG5kLnJvb3QubW50KQogCQkJcGF0aF9wdXQoJm5kLnJvb3QpOwpAQCAtMTc4OSw3ICsxNzkwLDcgQEAKIAkJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKIAkJZ290byBleGl0OwogCX0KLQlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kLCBvcGVuX2ZsYWcpOworCWZpbHAgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQpOwogCWlmICghSVNfRVJSKGZpbHApKSB7CiAJCWVycm9yID0gaW1hX3BhdGhfY2hlY2soJmZpbHAtPmZfcGF0aCwgZmlscC0+Zl9tb2RlICYKIAkJCSAgICAgICAoTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQykpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCBmYWFiMTI3Li43ZDcwZDYzIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMjA2OCw3ICsyMDY4LDcgQEAKICAqIGNyZWF0ZV9tbnRfbnMgLSBjcmVhdGVzIGEgcHJpdmF0ZSBuYW1lc3BhY2UgYW5kIGFkZHMgYSByb290IGZpbGVzeXN0ZW0KICAqIEBtbnQ6IHBvaW50ZXIgdG8gdGhlIG5ldyByb290IGZpbGVzeXN0ZW0gbW91bnRwb2ludAogICovCi1zdGF0aWMgc3RydWN0IG1udF9uYW1lc3BhY2UgKmNyZWF0ZV9tbnRfbnMoc3RydWN0IHZmc21vdW50ICptbnQpCitzdHJ1Y3QgbW50X25hbWVzcGFjZSAqY3JlYXRlX21udF9ucyhzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbmV3X25zOwogCkBAIC0yMDgwLDYgKzIwODAsNyBAQAogCX0KIAlyZXR1cm4gbmV3X25zOwogfQorRVhQT1JUX1NZTUJPTChjcmVhdGVfbW50X25zKTsKIAogU1lTQ0FMTF9ERUZJTkU1KG1vdW50LCBjaGFyIF9fdXNlciAqLCBkZXZfbmFtZSwgY2hhciBfX3VzZXIgKiwgZGlyX25hbWUsCiAJCWNoYXIgX191c2VyICosIHR5cGUsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLCB2b2lkIF9fdXNlciAqLCBkYXRhKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDJjNWFjZTQuLjNjN2YwM2IgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE2MTUsNiArMTYxNSw3IEBACiAJCQkJZ290byBvdXQ7CiAKIAkJCW5ld19kZW50cnkgPSBkZW50cnk7CisJCQlyZWhhc2ggPSBOVUxMOwogCQkJbmV3X2lub2RlID0gTlVMTDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggZDViMTEyYi4uY2U5MDdlZiAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTI2NDgsMTMgKzI2NDgsMjEgQEAKIHN0YXRpYyBpbnQgbmZzX2ZvbGxvd19yZW1vdGVfcGF0aChzdHJ1Y3QgdmZzbW91bnQgKnJvb3RfbW50LAogCQljb25zdCBjaGFyICpleHBvcnRfcGF0aCwgc3RydWN0IHZmc21vdW50ICptbnRfdGFyZ2V0KQogeworCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpuc19wcml2YXRlOwogCXN0cnVjdCBuYW1laWRhdGEgbmQ7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzOwogCWludCByZXQ7CiAKKwluc19wcml2YXRlID0gY3JlYXRlX21udF9ucyhyb290X21udCk7CisJcmV0ID0gUFRSX0VSUihuc19wcml2YXRlKTsKKwlpZiAoSVNfRVJSKG5zX3ByaXZhdGUpKQorCQlnb3RvIG91dF9tbnRwdXQ7CisKIAlyZXQgPSB2ZnNfcGF0aF9sb29rdXAocm9vdF9tbnQtPm1udF9yb290LCByb290X21udCwKIAkJCWV4cG9ydF9wYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOwogCisJcHV0X21udF9ucyhuc19wcml2YXRlKTsKKwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZXJyOwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2ZoLmMgYi9mcy9uZnNkL25mc2ZoLmMKaW5kZXggMWMxMjE3Ny4uNTVjOGU2MyAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNmaC5jCisrKyBiL2ZzL25mc2QvbmZzZmguYwpAQCAtODksNyArODksNyBAQAogCWludCBmbGFncyA9IG5mc2V4cF9mbGFncyhycXN0cCwgZXhwKTsKIAogCS8qIENoZWNrIGlmIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQgZnJvbSBhIHNlY3VyZSBwb3J0LiAqLwotCWlmICghcnFzdHAtPnJxX3NlY3VyZSAmJiAoZmxhZ3MgJiBORlNFWFBfSU5TRUNVUkVfUE9SVCkpIHsKKwlpZiAoIXJxc3RwLT5ycV9zZWN1cmUgJiYgIShmbGFncyAmIE5GU0VYUF9JTlNFQ1VSRV9QT1JUKSkgewogCQlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKIAkJZHByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJuZnNkOiByZXF1ZXN0IGZyb20gaW5zZWN1cmUgcG9ydCAlcyFcbiIsCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA3YzJlMzM3Li5jMTk0NzkzIDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTc4MCwxMiArNzgwLDkgQEAKIAlpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIAlpbnQgZXJyOwogCi0JZXJyID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCWVyciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CiAJaWYgKGVyciA9PSAwICYmIGZvcCAmJiAoZnN5bmMgPSBmb3AtPmZzeW5jKSkKIAkJZXJyID0gZnN5bmMoZmlscCwgZHAsIDApOwotCWlmIChlcnIgPT0gMCkKLQkJZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7Ci0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvS2NvbmZpZyBiL2ZzL25pbGZzMi9LY29uZmlnCmluZGV4IDEyMjVhZjcuLjI1MWRhMDcgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9LY29uZmlnCisrKyBiL2ZzL25pbGZzMi9LY29uZmlnCkBAIC0yLDcgKzIsNiBAQAogCXRyaXN0YXRlICJOSUxGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBDUkMzMgotCXNlbGVjdCBGU19KT1VSTkFMX0lORk8KIAloZWxwCiAJICBOSUxGUzIgaXMgYSBsb2ctc3RydWN0dXJlZCBmaWxlIHN5c3RlbSAoTEZTKSBzdXBwb3J0aW5nIGNvbnRpbnVvdXMKIAkgIHNuYXBzaG90dGluZy4gIEluIGFkZGl0aW9uIHRvIHZlcnNpb25pbmcgY2FwYWJpbGl0eSBvZiB0aGUgZW50aXJlCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYm1hcC5jIGIvZnMvbmlsZnMyL2JtYXAuYwppbmRleCBmNGExNGVhLi5lZmZkYmRiIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYm1hcC5jCisrKyBiL2ZzL25pbGZzMi9ibWFwLmMKQEAgLTQxNyw4ICs0MTcsOCBAQAogCiAJa2V5ID0gcGFnZV9pbmRleChiaC0+Yl9wYWdlKSA8PCAoUEFHRV9DQUNIRV9TSElGVCAtCiAJCQkJCSBibWFwLT5iX2lub2RlLT5pX2Jsa2JpdHMpOwotCWZvciAocGJoID0gcGFnZV9idWZmZXJzKGJoLT5iX3BhZ2UpOyBwYmggIT0gYmg7Ci0JICAgICBwYmggPSBwYmgtPmJfdGhpc19wYWdlLCBrZXkrKyk7CisJZm9yIChwYmggPSBwYWdlX2J1ZmZlcnMoYmgtPmJfcGFnZSk7IHBiaCAhPSBiaDsgcGJoID0gcGJoLT5iX3RoaXNfcGFnZSkKKwkJa2V5Kys7CiAKIAlyZXR1cm4ga2V5OwogfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2NwZmlsZS5jIGIvZnMvbmlsZnMyL2NwZmlsZS5jCmluZGV4IGQ1YWQ1NGUuLjE4NzM3ODEgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9jcGZpbGUuYworKysgYi9mcy9uaWxmczIvY3BmaWxlLmMKQEAgLTMyOCwxOSArMzI4LDI0IEBACiAJCQl0bmljcHMgKz0gbmljcHM7CiAJCQluaWxmc19tZHRfbWFya19idWZmZXJfZGlydHkoY3BfYmgpOwogCQkJbmlsZnNfbWR0X21hcmtfZGlydHkoY3BmaWxlKTsKLQkJCWlmICghbmlsZnNfY3BmaWxlX2lzX2luX2ZpcnN0KGNwZmlsZSwgY25vKSAmJgotCQkJICAgIChjb3VudCA9IG5pbGZzX2NwZmlsZV9ibG9ja19zdWJfdmFsaWRfY2hlY2twb2ludHMoCi0JCQkJICAgIGNwZmlsZSwgY3BfYmgsIGthZGRyLCBuaWNwcykpID09IDApIHsKLQkJCQkvKiBtYWtlIGhvbGUgKi8KLQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JCQkJYnJlbHNlKGNwX2JoKTsKLQkJCQlyZXQgPSBuaWxmc19jcGZpbGVfZGVsZXRlX2NoZWNrcG9pbnRfYmxvY2soCi0JCQkJCWNwZmlsZSwgY25vKTsKLQkJCQlpZiAocmV0ID09IDApCi0JCQkJCWNvbnRpbnVlOwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBkZWxldGUgYmxvY2tcbiIsCi0JCQkJICAgICAgIF9fZnVuY19fKTsKLQkJCQlicmVhazsKKwkJCWlmICghbmlsZnNfY3BmaWxlX2lzX2luX2ZpcnN0KGNwZmlsZSwgY25vKSkgeworCQkJCWNvdW50ID0KKwkJCQkgIG5pbGZzX2NwZmlsZV9ibG9ja19zdWJfdmFsaWRfY2hlY2twb2ludHMoCisJCQkJCQljcGZpbGUsIGNwX2JoLCBrYWRkciwgbmljcHMpOworCQkJCWlmIChjb3VudCA9PSAwKSB7CisJCQkJCS8qIG1ha2UgaG9sZSAqLworCQkJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCQkJCWJyZWxzZShjcF9iaCk7CisJCQkJCXJldCA9CisJCQkJCSAgbmlsZnNfY3BmaWxlX2RlbGV0ZV9jaGVja3BvaW50X2Jsb2NrKAorCQkJCQkJCQkgICBjcGZpbGUsIGNubyk7CisJCQkJCWlmIChyZXQgPT0gMCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICIlczogY2Fubm90IGRlbGV0ZSBibG9ja1xuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kaXJlY3QuYyBiL2ZzL25pbGZzMi9kaXJlY3QuYwppbmRleCBkMzY5YWM3Li4yMzY3NTNkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGlyZWN0LmMKKysrIGIvZnMvbmlsZnMyL2RpcmVjdC5jCkBAIC01MSwxMSArNTEsMTEgQEAKIAlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3Q7CiAJX191NjQgcHRyOwogCi0JZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwotCWlmICgoa2V5ID4gTklMRlNfRElSRUNUX0tFWV9NQVgpIHx8Ci0JICAgIChsZXZlbCAhPSAxKSB8fAkvKiBYWFg6IHVzZSBtYWNybyBmb3IgbGV2ZWwgMSAqLwotCSAgICAoKHB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KSkgPT0KLQkgICAgIE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpKQorCWRpcmVjdCA9IChzdHJ1Y3QgbmlsZnNfZGlyZWN0ICopYm1hcDsgIC8qIFhYWDogdXNlIG1hY3JvIGZvciBsZXZlbCAxICovCisJaWYgKGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYIHx8IGxldmVsICE9IDEpCisJCXJldHVybiAtRU5PRU5UOworCXB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KTsKKwlpZiAocHRyID09IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKHB0cnAgIT0gTlVMTCkKQEAgLTczLDkgKzczLDEwIEBACiAJc2VjdG9yX3QgYmxvY2tucjsKIAlpbnQgcmV0LCBjbnQ7CiAKLQlpZiAoa2V5ID4gTklMRlNfRElSRUNUX0tFWV9NQVggfHwKLQkgICAgKHB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KSkgPT0KLQkgICAgTklMRlNfQk1BUF9JTlZBTElEX1BUUikKKwlpZiAoa2V5ID4gTklMRlNfRElSRUNUX0tFWV9NQVgpCisJCXJldHVybiAtRU5PRU5UOworCXB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KTsKKwlpZiAocHRyID09IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkgewpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lvY3RsLmMgYi9mcy9uaWxmczIvaW9jdGwuYwppbmRleCBmNmFmNzYwLi5kNmIyYjgzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW9jdGwuYworKysgYi9mcy9uaWxmczIvaW9jdGwuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7CiAJc3RydWN0IG5pbGZzX2FyZ3YgYXJndls1XTsKLQljb25zdCBzdGF0aWMgc2l6ZV90IGFyZ3N6WzVdID0geworCXN0YXRpYyBjb25zdCBzaXplX3QgYXJnc3pbNV0gPSB7CiAJCXNpemVvZihzdHJ1Y3QgbmlsZnNfdmRlc2MpLAogCQlzaXplb2Yoc3RydWN0IG5pbGZzX3BlcmlvZCksCiAJCXNpemVvZihfX3U2NCksCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9LY29uZmlnIGIvZnMvb2NmczIvS2NvbmZpZwppbmRleCA3MDFiN2EzLi4wZDg0MDY2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9LY29uZmlnCisrKyBiL2ZzL29jZnMyL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IFFVT1RBCiAJc2VsZWN0IFFVT1RBX1RSRUUKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJaGVscAogCSAgT0NGUzIgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZXh0ZW50IGJhc2VkIHNoYXJlZCBkaXNrIGNsdXN0ZXIgZmlsZQogCSAgc3lzdGVtIHdpdGggbWFueSBzaW1pbGFyaXRpZXMgdG8gZXh0My4gSXQgc3VwcG9ydHMgNjQgYml0IGlub2RlCkBAIC03NCwxMiArNzUsMyBAQAogCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZXhwZW5zaXZlIGNvbnNpc3RlbmN5IGNoZWNrcy4gRW5hYmxlCiAJICB0aGlzIG9wdGlvbiBmb3IgZGVidWdnaW5nIG9ubHkgYXMgaXQgaXMgbGlrZWx5IHRvIGRlY3JlYXNlCiAJICBwZXJmb3JtYW5jZSBvZiB0aGUgZmlsZXN5c3RlbS4KLQotY29uZmlnIE9DRlMyX0ZTX1BPU0lYX0FDTAotCWJvb2wgIk9DRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgotCWRlcGVuZHMgb24gT0NGUzJfRlMKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCAzMWYyNWNlLi42MDBkMmQyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMzksMTEgKzM5LDggQEAKIAl2ZXIubwkJCVwKIAlxdW90YV9sb2NhbC5vCQlcCiAJcXVvdGFfZ2xvYmFsLm8JCVwKLQl4YXR0ci5vCi0KLWlmZXEgKCQoQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCkseSkKLW9jZnMyLW9ianMgKz0gYWNsLm8KLWVuZGlmCisJeGF0dHIubwkJCVwKKwlhY2wubwogCiBvY2ZzMl9zdGFja2dsdWUtb2JqcyA6PSBzdGFja2dsdWUubwogb2NmczJfc3RhY2tfbzJjYi1vYmpzIDo9IHN0YWNrX28yY2IubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCBlM2U0NzQxLi4wNTAxOTc0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hY2wuYworKysgYi9mcy9vY2ZzMi9hY2wuYwpAQCAtOTgsMTUgKzk4LDExIEBACiAJCQkJCSAgICAgIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCWludCBuYW1lX2luZGV4OwogCWNoYXIgKnZhbHVlID0gTlVMTDsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IHJldHZhbDsKIAotCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKQotCQlyZXR1cm4gTlVMTDsKLQogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgogCQluYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmgKaW5kZXggOGY2Mzg5ZS4uNWM1ZDMxZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKKysrIGIvZnMvb2NmczIvYWNsLmgKQEAgLTI2LDggKzI2LDYgQEAKIAlfX2xlMzIgZV9pZDsKIH07CiAKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCi0KIGV4dGVybiBpbnQgb2NmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosCkBAIC0zNSwyNCArMzMsNCBAQAogCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLAogCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTsKIAotI2Vsc2UgLyogQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCovCi0KLSNkZWZpbmUgb2NmczJfY2hlY2tfYWNsIE5VTEwKLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCi0JCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMKi8KLQogI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCBmYjRlNjcyLi5kMTdiZGM3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTE3NjUsOSArMTc2NSw5IEBACiAgKgogICogVGhlIGFycmF5IGluZGV4IG9mIHRoZSBzdWJ0cmVlIHJvb3QgaXMgcGFzc2VkIGJhY2suCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpCitpbnQgb2NmczJfZmluZF9zdWJ0cmVlX3Jvb3Qoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqbGVmdCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHQpCiB7CiAJaW50IGkgPSAwOwogCkBAIC0yODcyLDggKzI4NzIsOCBAQAogICogVGhpcyBsb29rcyBzaW1pbGFyLCBidXQgaXMgc3VidGx5IGRpZmZlcmVudCB0bwogICogb2NmczJfZmluZF9jcG9zX2Zvcl9sZWZ0X2xlYWYoKS4KICAqLwotc3RhdGljIGludCBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgdTMyICpjcG9zKQoraW50IG9jZnMyX2ZpbmRfY3Bvc19mb3JfcmlnaHRfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLCB1MzIgKmNwb3MpCiB7CiAJaW50IGksIGosIHJldCA9IDA7CiAJdTY0IGJsa25vOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuaCBiL2ZzL29jZnMyL2FsbG9jLmgKaW5kZXggOWMxMjJkNS4uMWRiNDM1OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9hbGxvYy5oCkBAIC0zMTcsNCArMzE3LDkgQEAKIGludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAogCQkJICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoKTsKK2ludCBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgdTMyICpjcG9zKTsKK2ludCBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0LAorCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodCk7CiAjZW5kaWYgLyogT0NGUzJfQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggYzQ1MmQxMS4uZWRhNWI4YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAogc3RhdGljIHZvaWQgbzJoYl9hcm1fd3JpdGVfdGltZW91dChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKLQltbG9nKDAsICJRdWV1ZSB3cml0ZSB0aW1lb3V0IGZvciAldSBtc1xuIiwgTzJIQl9NQVhfV1JJVEVfVElNRU9VVF9NUyk7CisJbWxvZyhNTF9IRUFSVEJFQVQsICJRdWV1ZSB3cml0ZSB0aW1lb3V0IGZvciAldSBtc1xuIiwKKwkgICAgIE8ySEJfTUFYX1dSSVRFX1RJTUVPVVRfTVMpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcmVnLT5ocl93cml0ZV90aW1lb3V0X3dvcmspOwogCXJlZy0+aHJfbGFzdF90aW1lb3V0X3N0YXJ0ID0gamlmZmllczsKQEAgLTg3NCw3ICs4NzUsOCBAQAogCQlkb19nZXR0aW1lb2ZkYXkoJmFmdGVyX2hiKTsKIAkJZWxhcHNlZF9tc2VjID0gbzJoYl9lbGFwc2VkX21zZWNzKCZiZWZvcmVfaGIsICZhZnRlcl9oYik7CiAKLQkJbWxvZygwLCAic3RhcnQgPSAlbHUuJWx1LCBlbmQgPSAlbHUuJWx1LCBtc2VjID0gJXVcbiIsCisJCW1sb2coTUxfSEVBUlRCRUFULAorCQkgICAgICJzdGFydCA9ICVsdS4lbHUsIGVuZCA9ICVsdS4lbHUsIG1zZWMgPSAldVxuIiwKIAkJICAgICBiZWZvcmVfaGIudHZfc2VjLCAodW5zaWduZWQgbG9uZykgYmVmb3JlX2hiLnR2X3VzZWMsCiAJCSAgICAgYWZ0ZXJfaGIudHZfc2VjLCAodW5zaWduZWQgbG9uZykgYWZ0ZXJfaGIudHZfdXNlYywKIAkJICAgICBlbGFwc2VkX21zZWMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCmluZGV4IDdlZTYxODguLmM4MTE0MmUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKQEAgLTM1LDYgKzM1LDEwIEBACiAgKiBjbHVzdGVyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB3aGVyZSBub2RlcyBhcmUgbG9va2VkIHVwICovCiBzdHJ1Y3QgbzJubV9jbHVzdGVyICpvMm5tX3NpbmdsZV9jbHVzdGVyID0gTlVMTDsKIAorY2hhciAqbzJubV9mZW5jZV9tZXRob2RfZGVzY1tPMk5NX0ZFTkNFX01FVEhPRFNdID0geworCQkicmVzZXQiLAkvKiBPMk5NX0ZFTkNFX1JFU0VUICovCisJCSJwYW5pYyIsCS8qIE8yTk1fRkVOQ0VfUEFOSUMgKi8KK307CiAKIHN0cnVjdCBvMm5tX25vZGUgKm8ybm1fZ2V0X25vZGVfYnlfbnVtKHU4IG5vZGVfbnVtKQogewpAQCAtNTc5LDYgKzU4Myw0MyBAQAogCXJldHVybiBvMm5tX2NsdXN0ZXJfYXR0cl93cml0ZShwYWdlLCBjb3VudCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsdXN0ZXItPmNsX3JlY29ubmVjdF9kZWxheV9tcyk7CiB9CisKK3N0YXRpYyBzc2l6ZV90IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF9yZWFkKAorCXN0cnVjdCBvMm5tX2NsdXN0ZXIgKmNsdXN0ZXIsIGNoYXIgKnBhZ2UpCit7CisJc3NpemVfdCByZXQgPSAwOworCisJaWYgKGNsdXN0ZXIpCisJCXJldCA9IHNwcmludGYocGFnZSwgIiVzXG4iLAorCQkJICAgICAgbzJubV9mZW5jZV9tZXRob2RfZGVzY1tjbHVzdGVyLT5jbF9mZW5jZV9tZXRob2RdKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBvMm5tX2NsdXN0ZXJfYXR0cl9mZW5jZV9tZXRob2Rfd3JpdGUoCisJc3RydWN0IG8ybm1fY2x1c3RlciAqY2x1c3RlciwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHBhZ2VbY291bnQgLSAxXSAhPSAnXG4nKQorCQlnb3RvIGJhaWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTzJOTV9GRU5DRV9NRVRIT0RTOyArK2kpIHsKKwkJaWYgKGNvdW50ICE9IHN0cmxlbihvMm5tX2ZlbmNlX21ldGhvZF9kZXNjW2ldKSArIDEpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cm5jYXNlY21wKHBhZ2UsIG8ybm1fZmVuY2VfbWV0aG9kX2Rlc2NbaV0sIGNvdW50IC0gMSkpCisJCQljb250aW51ZTsKKwkJaWYgKGNsdXN0ZXItPmNsX2ZlbmNlX21ldGhvZCAhPSBpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogQ2hhbmdpbmcgZmVuY2UgbWV0aG9kIHRvICVzXG4iLAorCQkJICAgICAgIG8ybm1fZmVuY2VfbWV0aG9kX2Rlc2NbaV0pOworCQkJY2x1c3Rlci0+Y2xfZmVuY2VfbWV0aG9kID0gaTsKKwkJfQorCQlyZXR1cm4gY291bnQ7CisJfQorCitiYWlsOgorCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgc3RydWN0IG8ybm1fY2x1c3Rlcl9hdHRyaWJ1dGUgbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zID0gewogCS5hdHRyCT0geyAuY2Ffb3duZXIgPSBUSElTX01PRFVMRSwKIAkJICAgIC5jYV9uYW1lID0gImlkbGVfdGltZW91dF9tcyIsCkBAIC02MDMsMTAgKzY0NCwxOSBAQAogCS5zdG9yZQk9IG8ybm1fY2x1c3Rlcl9hdHRyX3JlY29ubmVjdF9kZWxheV9tc193cml0ZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbzJubV9jbHVzdGVyX2F0dHJpYnV0ZSBvMm5tX2NsdXN0ZXJfYXR0cl9mZW5jZV9tZXRob2QgPSB7CisJLmF0dHIJPSB7IC5jYV9vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICAgLmNhX25hbWUgPSAiZmVuY2VfbWV0aG9kIiwKKwkJICAgIC5jYV9tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKKwkuc2hvdwk9IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF9yZWFkLAorCS5zdG9yZQk9IG8ybm1fY2x1c3Rlcl9hdHRyX2ZlbmNlX21ldGhvZF93cml0ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpvMm5tX2NsdXN0ZXJfYXR0cnNbXSA9IHsKIAkmbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zLmF0dHIsCiAJJm8ybm1fY2x1c3Rlcl9hdHRyX2tlZXBhbGl2ZV9kZWxheV9tcy5hdHRyLAogCSZvMm5tX2NsdXN0ZXJfYXR0cl9yZWNvbm5lY3RfZGVsYXlfbXMuYXR0ciwKKwkmbzJubV9jbHVzdGVyX2F0dHJfZmVuY2VfbWV0aG9kLmF0dHIsCiAJTlVMTCwKIH07CiBzdGF0aWMgc3NpemVfdCBvMm5tX2NsdXN0ZXJfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCkBAIC03NzgsNiArODI4LDcgQEAKIAljbHVzdGVyLT5jbF9yZWNvbm5lY3RfZGVsYXlfbXMgPSBPMk5FVF9SRUNPTk5FQ1RfREVMQVlfTVNfREVGQVVMVDsKIAljbHVzdGVyLT5jbF9pZGxlX3RpbWVvdXRfbXMgICAgPSBPMk5FVF9JRExFX1RJTUVPVVRfTVNfREVGQVVMVDsKIAljbHVzdGVyLT5jbF9rZWVwYWxpdmVfZGVsYXlfbXMgPSBPMk5FVF9LRUVQQUxJVkVfREVMQVlfTVNfREVGQVVMVDsKKwljbHVzdGVyLT5jbF9mZW5jZV9tZXRob2QgICAgICAgPSBPMk5NX0ZFTkNFX1JFU0VUOwogCiAJcmV0ID0gJmNsdXN0ZXItPmNsX2dyb3VwOwogCW8ybm1fc2luZ2xlX2NsdXN0ZXIgPSBjbHVzdGVyOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5oIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5oCmluZGV4IGM5OTJlYTAuLjA5ZWEyZDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmgKQEAgLTMzLDYgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAorZW51bSBvMm5tX2ZlbmNlX21ldGhvZCB7CisJTzJOTV9GRU5DRV9SRVNFVAk9IDAsCisJTzJOTV9GRU5DRV9QQU5JQywKKwlPMk5NX0ZFTkNFX01FVEhPRFMsCS8qIE51bWJlciBvZiBmZW5jZSBtZXRob2RzICovCit9OworCiBzdHJ1Y3QgbzJubV9ub2RlIHsKIAlzcGlubG9ja190CQluZF9sb2NrOwogCXN0cnVjdCBjb25maWdfaXRlbQluZF9pdGVtOwpAQCAtNTgsNiArNjQsNyBAQAogCXVuc2lnbmVkIGludAkJY2xfaWRsZV90aW1lb3V0X21zOwogCXVuc2lnbmVkIGludAkJY2xfa2VlcGFsaXZlX2RlbGF5X21zOwogCXVuc2lnbmVkIGludAkJY2xfcmVjb25uZWN0X2RlbGF5X21zOworCWVudW0gbzJubV9mZW5jZV9tZXRob2QJY2xfZmVuY2VfbWV0aG9kOwogCiAJLyogdGhpcyBiaXRtYXAgaXMgcGFydCBvZiBhIGhhY2sgZm9yIGRpc2sgYml0bWFwLi4gd2lsbCBnbyBldmVudHVhbGx5LiAtIHphYiAqLwogCXVuc2lnbmVkIGxvbmcJY2xfbm9kZXNfYml0bWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jCmluZGV4IGJiYWNmN2QuLjYzOTAyNDAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYwpAQCAtNzQsOCArNzQsMjAgQEAKIAkgKiB0aHJlYWRzIGNhbiBzdGlsbCBzY2hlZHVsZSwgZXRjLCBldGMgKi8KIAlvMmhiX3N0b3BfYWxsX3JlZ2lvbnMoKTsKIAotCXByaW50aygib2NmczIgaXMgdmVyeSBzb3JyeSB0byBiZSBmZW5jaW5nIHRoaXMgc3lzdGVtIGJ5IHJlc3RhcnRpbmdcbiIpOwotCWVtZXJnZW5jeV9yZXN0YXJ0KCk7CisJc3dpdGNoIChvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9mZW5jZV9tZXRob2QpIHsKKwljYXNlIE8yTk1fRkVOQ0VfUEFOSUM6CisJCXBhbmljKCIqKiogb2NmczIgaXMgdmVyeSBzb3JyeSB0byBiZSBmZW5jaW5nIHRoaXMgc3lzdGVtIGJ5ICIKKwkJICAgICAgInBhbmljaW5nICoqKlxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04obzJubV9zaW5nbGVfY2x1c3Rlci0+Y2xfZmVuY2VfbWV0aG9kID49CisJCQlPMk5NX0ZFTkNFX01FVEhPRFMpOworCWNhc2UgTzJOTV9GRU5DRV9SRVNFVDoKKwkJcHJpbnRrKEtFUk5fRVJSICIqKiogb2NmczIgaXMgdmVyeSBzb3JyeSB0byBiZSBmZW5jaW5nIHRoaXMgIgorCQkgICAgICAgInN5c3RlbSBieSByZXN0YXJ0aW5nICoqKlxuIik7CisJCWVtZXJnZW5jeV9yZXN0YXJ0KCk7CisJCWJyZWFrOworCX07CiB9CiAKIC8qIEluZGljYXRlIHRoYXQgYSB0aW1lb3V0IG9jY3VyZWQgb24gYSBoZWFyYmVhdCByZWdpb24gd3JpdGUuIFRoZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCBkOWZhM2QyLi4yZjllNGUxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMjU4OSw2ICsyNTg5LDE0IEBACiAJCQkgICAgICJiZWdpbiByZWNvIG1zZyAoJWQpXG4iLCBkbG0tPm5hbWUsIG5vZGVudW0sIHJldCk7CiAJCQlyZXQgPSAwOwogCQl9CisJCWlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJbWxvZygwLCAiJXM6IHRyeWluZyB0byBzdGFydCByZWNvdmVyeSBvZiBub2RlICIKKwkJCSAgICAgIiV1LCBidXQgbm9kZSAldSBpcyB3YWl0aW5nIGZvciBsYXN0IHJlY292ZXJ5ICIKKwkJCSAgICAgInRvIGNvbXBsZXRlLCBiYWNrb2ZmIGZvciBhIGJpdFxuIiwgZGxtLT5uYW1lLAorCQkJICAgICBkZWFkX25vZGUsIG5vZGVudW0pOworCQkJbXNsZWVwKDEwMCk7CisJCQlnb3RvIHJldHJ5OworCQl9CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKIAkJCS8qIHRoaXMgaXMgbm93IGEgc2VyaW91cyBwcm9ibGVtLCBwb3NzaWJseSBFTk9NRU0gCkBAIC0yNjA4LDE0ICsyNjE2LDYgQEAKIAkJCSAqIGFub3RoZXIgRU5PTUVNICovCiAJCQltc2xlZXAoMTAwKTsKIAkJCWdvdG8gcmV0cnk7Ci0JCX0gZWxzZSBpZiAocmV0ID09IEVBR0FJTikgewotCQkJbWxvZygwLCAiJXM6IHRyeWluZyB0byBzdGFydCByZWNvdmVyeSBvZiBub2RlICIKLQkJCSAgICAgIiV1LCBidXQgbm9kZSAldSBpcyB3YWl0aW5nIGZvciBsYXN0IHJlY292ZXJ5ICIKLQkJCSAgICAgInRvIGNvbXBsZXRlLCBiYWNrb2ZmIGZvciBhIGJpdFxuIiwgZGxtLT5uYW1lLAotCQkJICAgICBkZWFkX25vZGUsIG5vZGVudW0pOwotCQkJLyogVE9ETyBMb29rIGludG8gcmVwbGFjaW5nIG1zbGVlcCB3aXRoIGNvbmRfcmVzY2hlZCgpICovCi0JCQltc2xlZXAoMTAwKTsKLQkJCWdvdG8gcmV0cnk7CiAJCX0KIAl9CiAKQEAgLTI2MzksNyArMjYzOSw3IEBACiAJCSAgICAgZGxtLT5uYW1lLCBici0+bm9kZV9pZHgsIGJyLT5kZWFkX25vZGUsCiAJCSAgICAgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5yZWNvLm5ld19tYXN0ZXIpOwogCQlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7Ci0JCXJldHVybiBFQUdBSU47CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwppbmRleCA4NDNkYjY0Li5kMzVhMjdmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiZXh0ZW50X21hcC5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKKyNpbmNsdWRlICJzeW1saW5rLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC03MDMsNiArNzA0LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIFRoZSBvY2ZzMl9maWVtYXBfaW5saW5lKCkgbWF5IGJlIGEgbGl0dGxlIGJpdCBtaXNsZWFkaW5nLCBzaW5jZQorICogaXQgbm90IG9ubHkgaGFuZGxlcyB0aGUgZmllbWFwIGZvciBpbmxpbmVkIGZpbGVzLCBidXQgYWxzbyBkZWFscworICogd2l0aCB0aGUgZmFzdCBzeW1saW5rLCBjYXVzZSB0aGV5IGhhdmUgbm8gZGlmZmVyZW5jZSBmb3IgZXh0ZW50CisgKiBtYXBwaW5nIHBlciBzZS4KKyAqLwogc3RhdGljIGludCBvY2ZzMl9maWVtYXBfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiAJCQkgICAgICAgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJCSAgICAgICB1NjQgbWFwX3N0YXJ0KQpAQCAtNzE1LDExICs3MjIsMTggQEAKIAlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKIAogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwotCWlkX2NvdW50ID0gbGUxNl90b19jcHUoZGktPmlkMi5pX2RhdGEuaWRfY291bnQpOworCWlmIChvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKQorCQlpZF9jb3VudCA9IG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhpbm9kZS0+aV9zYik7CisJZWxzZQorCQlpZF9jb3VudCA9IGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9kYXRhLmlkX2NvdW50KTsKIAogCWlmIChtYXBfc3RhcnQgPCBpZF9jb3VudCkgewogCQlwaHlzID0gb2ktPmlwX2Jsa25vIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCQlwaHlzICs9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CisJCWlmIChvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKQorCQkJcGh5cyArPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9zeW1saW5rKTsKKwkJZWxzZQorCQkJcGh5cyArPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLAorCQkJCQkgaWQyLmlfZGF0YS5pZF9kYXRhKTsKIAogCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudChmaWVpbmZvLCAwLCBwaHlzLCBpZF9jb3VudCwKIAkJCQkJICAgICAgZmxhZ3MpOwpAQCAtNzU2LDkgKzc3MCwxMCBAQAogCWRvd25fcmVhZCgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7CiAKIAkvKgotCSAqIEhhbmRsZSBpbmxpbmUtZGF0YSBzZXBhcmF0ZWx5LgorCSAqIEhhbmRsZSBpbmxpbmUtZGF0YSBhbmQgZmFzdCBzeW1saW5rIHNlcGFyYXRlbHkuCiAJICovCi0JaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgeworCWlmICgoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB8fAorCSAgICBvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSB7CiAJCXJldCA9IG9jZnMyX2ZpZW1hcF9pbmxpbmUoaW5vZGUsIGRpX2JoLCBmaWVpbmZvLCBtYXBfc3RhcnQpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtNzg2LDYgKzgwMSw4IEBACiAJCWZlX2ZsYWdzID0gMDsKIAkJaWYgKHJlYy5lX2ZsYWdzICYgT0NGUzJfRVhUX1VOV1JJVFRFTikKIAkJCWZlX2ZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOOworCQlpZiAocmVjLmVfZmxhZ3MgJiBPQ0ZTMl9FWFRfUkVGQ09VTlRFRCkKKwkJCWZlX2ZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfU0hBUkVEOwogCQlpZiAoaXNfbGFzdCkKIAkJCWZlX2ZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfTEFTVDsKIAkJbGVuX2J5dGVzID0gKHU2NClsZTE2X3RvX2NwdShyZWMuZV9sZWFmX2NsdXN0ZXJzKSA8PCBvc2ItPnNfY2x1c3RlcnNpemVfYml0czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAzZDMwYTFjLi4wNmNjZjZhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xNzcyLDcgKzE3NzIsOCBAQAogCQkJCQkgbG9mZl90ICpwcG9zLAogCQkJCQkgc2l6ZV90IGNvdW50LAogCQkJCQkgaW50IGFwcGVuZGluZywKLQkJCQkJIGludCAqZGlyZWN0X2lvKQorCQkJCQkgaW50ICpkaXJlY3RfaW8sCisJCQkJCSBpbnQgKmhhc19yZWZjb3VudCkKIHsKIAlpbnQgcmV0ID0gMCwgbWV0YV9sZXZlbCA9IDA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKQEAgLTE4MzMsNiArMTgzNCw4IEBACiAJCQkJCQkJICAgICAgIHNhdmVkX3BvcywKIAkJCQkJCQkgICAgICAgY291bnQsCiAJCQkJCQkJICAgICAgICZtZXRhX2xldmVsKTsKKwkJCWlmIChoYXNfcmVmY291bnQpCisJCQkJKmhhc19yZWZjb3VudCA9IDE7CiAJCX0KIAogCQlpZiAocmV0IDwgMCkgewpAQCAtMTg1Niw2ICsxODU5LDEwIEBACiAJCQlicmVhazsKIAkJfQogCisJCWlmIChoYXNfcmVmY291bnQgJiYgKmhhc19yZWZjb3VudCA9PSAxKSB7CisJCQkqZGlyZWN0X2lvID0gMDsKKwkJCWJyZWFrOworCQl9CiAJCS8qCiAJCSAqIEFsbG93aW5nIGNvbmN1cnJlbnQgZGlyZWN0IHdyaXRlcyBtZWFucwogCQkgKiBpX3NpemUgY2hhbmdlcyB3b3VsZG4ndCBiZSBzeW5jaHJvbml6ZWQsIHNvCkBAIC0xODk5LDcgKzE5MDYsNyBAQAogCQkJCSAgICBsb2ZmX3QgcG9zKQogewogCWludCByZXQsIGRpcmVjdF9pbywgYXBwZW5kaW5nLCByd19sZXZlbCwgaGF2ZV9hbGxvY19zZW0gID0gMDsKLQlpbnQgY2FuX2RvX2RpcmVjdDsKKwlpbnQgY2FuX2RvX2RpcmVjdCwgaGFzX3JlZmNvdW50ID0gMDsKIAlzc2l6ZV90IHdyaXR0ZW4gPSAwOwogCXNpemVfdCBvY291bnQ7CQkvKiBvcmlnaW5hbCBjb3VudCAqLwogCXNpemVfdCBjb3VudDsJCS8qIGFmdGVyIGZpbGUgbGltaXQgY2hlY2tzICovCkBAIC0xOTQyLDcgKzE5NDksNyBAQAogCWNhbl9kb19kaXJlY3QgPSBkaXJlY3RfaW87CiAJcmV0ID0gb2NmczJfcHJlcGFyZV9pbm9kZV9mb3Jfd3JpdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgcHBvcywKIAkJCQkJICAgIGlvY2ItPmtpX2xlZnQsIGFwcGVuZGluZywKLQkJCQkJICAgICZjYW5fZG9fZGlyZWN0KTsKKwkJCQkJICAgICZjYW5fZG9fZGlyZWN0LCAmaGFzX3JlZmNvdW50KTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjAwNiwxNCArMjAxMywxNiBAQAogCS8qIGJ1ZmZlcmVkIGFpbyB3b3VsZG4ndCBoYXZlIHByb3BlciBsb2NrIGNvdmVyYWdlIHRvZGF5ICovCiAJQlVHX09OKHJldCA9PSAtRUlPQ0JRVUVVRUQgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKTsKIAotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMgJiYgIWRpcmVjdF9pbykgfHwgSVNfU1lOQyhpbm9kZSkpIHsKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DICYmICFkaXJlY3RfaW8pIHx8IElTX1NZTkMoaW5vZGUpIHx8CisJICAgIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QgJiYgaGFzX3JlZmNvdW50KSkgewogCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCBwb3MsCiAJCQkJCSAgICAgICBwb3MgKyBjb3VudCAtIDEpOwogCQlpZiAocmV0IDwgMCkKIAkJCXdyaXR0ZW4gPSByZXQ7CiAKIAkJaWYgKCFyZXQgJiYgKG9sZF9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSB8fAotCQkgICAgb2xkX2NsdXN0ZXJzICE9IE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycykpIHsKKwkJICAgIG9sZF9jbHVzdGVycyAhPSBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgfHwKKwkJICAgIGhhc19yZWZjb3VudCkpIHsKIAkJCXJldCA9IGpiZDJfam91cm5hbF9mb3JjZV9jb21taXQob3NiLT5qb3VybmFsLT5qX2pvdXJuYWwpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJd3JpdHRlbiA9IHJldDsKQEAgLTIwNjIsNyArMjA3MSw3IEBACiAJaW50IHJldDsKIAogCXJldCA9IG9jZnMyX3ByZXBhcmVfaW5vZGVfZm9yX3dyaXRlKG91dC0+Zl9wYXRoLmRlbnRyeSwJJnNkLT5wb3MsCi0JCQkJCSAgICBzZC0+dG90YWxfbGVuLCAwLCBOVUxMKTsKKwkJCQkJICAgIHNkLT50b3RhbF9sZW4sIDAsIE5VTEwsIE5VTEwpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGYwMTBiMjIuLjUwZmIyNmEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjEwOCw2ICsyMTA4LDcgQEAKIAl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAorCWlub2RlLT5pX25saW5rID0gMDsKIAkvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLAogCQkJCSAgICAwLCAmbmV3X2RpX2JoLCBwYXJlbnRfZGlfYmgsIGhhbmRsZSwKQEAgLTIxMzYsNiArMjEzNyw3IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAorCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIGxlYXZlOgogCWlmIChzdGF0dXMgPCAwICYmIGRpZF9xdW90YV9pbm9kZSkKIAkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwpAQCAtMjI2Nyw2ICsyMjY5LDggQEAKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAlsZTMyX2FkZF9jcHUoJmRpLT5pX2ZsYWdzLCAtT0NGUzJfT1JQSEFORURfRkwpOwogCWRpLT5pX29ycGhhbmVkX3Nsb3QgPSAwOworCWlub2RlLT5pX25saW5rID0gMTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZGksIGlub2RlLT5pX25saW5rKTsKIAlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOwogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKQEAgLTIyODQsNyArMjI4OCw2IEBACiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJZGVudHJ5LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlzdGF0dXMgPSAwOwpAQCAtMjMyNiw0ICsyMzI5LDUgQEAKIAkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAogCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKKwkuZmllbWFwICAgICAgICAgPSBvY2ZzMl9maWVtYXAsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggZDk2M2Q4Ni4uOTM2MmVlYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0yNDUsOSArMjQ1LDExIEBACiAJT0NGUzJfTU9VTlRfTE9DQUxGTE9DS1MgPSAxIDw8IDUsIC8qIE5vIGNsdXN0ZXIgYXdhcmUgdXNlciBmaWxlIGxvY2tzICovCiAJT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFIgPSAxIDw8IDYsIC8qIE5vIHVzZXIgeGF0dHIgKi8KIAlPQ0ZTMl9NT1VOVF9JTk9ERTY0ID0gMSA8PCA3LAkvKiBBbGxvdyBpbm9kZSBudW1iZXJzID4gMl4zMiAqLwotCU9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgPDwgOCwJLyogUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi8KLQlPQ0ZTMl9NT1VOVF9VU1JRVU9UQSA9IDEgPDwgOSwgLyogV2Ugc3VwcG9ydCB1c2VyIHF1b3RhcyAqLwotCU9DRlMyX01PVU5UX0dSUFFVT1RBID0gMSA8PCAxMCwgLyogV2Ugc3VwcG9ydCBncm91cCBxdW90YXMgKi8KKwlPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgPSAxIDw8IDgsCS8qIEZvcmNlIFBPU0lYIGFjY2VzcyBjb250cm9sIGxpc3RzICovCisJT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSA8PCA5LAkvKiBEaXNhYmxlIFBPU0lYIGFjY2VzcworCQkJCQkJICAgY29udHJvbCBsaXN0cyAqLworCU9DRlMyX01PVU5UX1VTUlFVT1RBID0gMSA8PCAxMCwgLyogV2Ugc3VwcG9ydCB1c2VyIHF1b3RhcyAqLworCU9DRlMyX01PVU5UX0dSUFFVT1RBID0gMSA8PCAxMSwgLyogV2Ugc3VwcG9ydCBncm91cCBxdW90YXMgKi8KIH07CiAKICNkZWZpbmUgT0NGUzJfT1NCX1NPRlRfUk8JCQkweDAwMDEKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2ZzLmggYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCmluZGV4IGU5NDMxZTQuLjFhMWE2NzkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyX2ZzLmgKKysrIGIvZnMvb2NmczIvb2NmczJfZnMuaApAQCAtMTIwMiw3ICsxMjAyLDcgQEAKIC8qIEhlYWRlciBvZiBvbmUgY2h1bmsgb2YgYSBxdW90YSBmaWxlICovCiBzdHJ1Y3Qgb2NmczJfbG9jYWxfZGlza19jaHVuayB7CiAJX19sZTMyIGRxY19mcmVlOwkvKiBOdW1iZXIgb2YgZnJlZSBlbnRyaWVzIGluIHRoZSBiaXRtYXAgKi8KLQl1OCBkcWNfYml0bWFwWzBdOwkvKiBCaXRtYXAgb2YgZW50cmllcyBpbiB0aGUgY29ycmVzcG9uZGluZworCV9fdTggZHFjX2JpdG1hcFswXTsJLyogQml0bWFwIG9mIGVudHJpZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcKIAkJCQkgKiBjaHVuayBvZiBxdW90YSBmaWxlICovCiB9OwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCmluZGV4IDMwOTY3ZTMuLjc0ZGIyYmUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCisrKyBiL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiB9CiAKLXZvaWQgb2NmczJfa3JlZl9yZW1vdmVfcmVmY291bnRfdHJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIG9jZnMyX2tyZWZfcmVtb3ZlX3JlZmNvdW50X3RyZWUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUgPQogCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUsIHJmX2dldGNudCk7CkBAIC01MjQsMjMgKzUyNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX2xvY2tfcmVmY291bnRfdHJlZV9ieV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcncsCi0JCQkJICAgICAgc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKipyZXRfdHJlZSwKLQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZWZfYmgpCi17Ci0JaW50IHJldDsKLQl1NjQgcmVmX2Jsa25vOwotCi0JcmV0ID0gb2NmczJfZ2V0X3JlZmNvdW50X2Jsb2NrKGlub2RlLCAmcmVmX2Jsa25vKTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gb2NmczJfbG9ja19yZWZjb3VudF90cmVlKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgcmVmX2Jsa25vLAotCQkJCQlydywgcmV0X3RyZWUsIHJlZl9iaCk7Ci19Ci0KIHZvaWQgb2NmczJfdW5sb2NrX3JlZmNvdW50X3RyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3RyZWUgKnRyZWUsIGludCBydykKIHsKQEAgLTk2OSw2ICs5NTIsMTAzIEBACiB9CiAKIC8qCisgKiBGaW5kIHRoZSBlbmQgcmFuZ2UgZm9yIGEgbGVhZiByZWZjb3VudCBibG9jayBpbmRpY2F0ZWQgYnkKKyAqIGVsLT5sX3JlY3NbaW5kZXhdLmVfYmxrbm8uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmNvdW50X2Nwb3NfZW5kKHN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlZl9yb290X2JoLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYiwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCQkgICAgICAgaW50IGluZGV4LCAgdTMyICpjcG9zX2VuZCkKK3sKKwlpbnQgcmV0LCBpLCBzdWJ0cmVlX3Jvb3Q7CisJdTMyIGNwb3M7CisJdTY0IGJsa25vOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOworCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMLCAqcmlnaHRfcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqdG1wX2VsOworCisJaWYgKGluZGV4IDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgYSBleHRlbnQgcmVjIGFmdGVyIGluZGV4LCBzbyBqdXN0IHVzZSB0aGUgZV9jcG9zCisJCSAqIG9mIHRoZSBuZXh0IGV4dGVudCByZWMuCisJCSAqLworCQkqY3Bvc19lbmQgPSBsZTMyX3RvX2NwdShlbC0+bF9yZWNzW2luZGV4KzFdLmVfY3Bvcyk7CisJCXJldHVybiAwOworCX0KKworCWlmICghZWIgfHwgKGViICYmICFlYi0+aF9uZXh0X2xlYWZfYmxrKSkgeworCQkvKgorCQkgKiBXZSBhcmUgdGhlIGxhc3QgZXh0ZW50IHJlYywgc28gYW55IGhpZ2ggY3BvcyBzaG91bGQKKwkJICogYmUgc3RvcmVkIGluIHRoaXMgbGVhZiByZWZjb3VudCBibG9jay4KKwkJICovCisJCSpjcG9zX2VuZCA9IFVJTlRfTUFYOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBleHRlbnQgYmxvY2sgaXNuJ3QgdGhlIGxhc3Qgb25lLCB3ZSBoYXZlIHRvIGZpbmQKKwkgKiB0aGUgc3VidHJlZSByb290IGJldHdlZW4gdGhpcyBleHRlbnQgYmxvY2sgYW5kIHRoZSBuZXh0CisJICogbGVhZiBleHRlbnQgYmxvY2sgYW5kIGdldCB0aGUgY29ycmVzcG9uZGluZyBlX2Nwb3MgZnJvbQorCSAqIHRoZSBzdWJyb290LiBPdGhlcndpc2Ugd2UgbWF5IGNvcnJ1cHQgdGhlIGItdHJlZS4KKwkgKi8KKwlvY2ZzMl9pbml0X3JlZmNvdW50X2V4dGVudF90cmVlKCZldCwgY2ksIHJlZl9yb290X2JoKTsKKworCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoX2Zyb21fZXQoJmV0KTsKKwlpZiAoIWxlZnRfcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWNwb3MgPSBsZTMyX3RvX2NwdShlYi0+aF9saXN0LmxfcmVjc1tpbmRleF0uZV9jcG9zKTsKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIGxlZnRfcGF0aCwgY3Bvcyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aF9mcm9tX3BhdGgobGVmdF9wYXRoKTsKKwlpZiAoIXJpZ2h0X3BhdGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX2Nwb3NfZm9yX3JpZ2h0X2xlYWYoc2IsIGxlZnRfcGF0aCwgJmNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9maW5kX3BhdGgoY2ksIHJpZ2h0X3BhdGgsIGNwb3MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzdWJ0cmVlX3Jvb3QgPSBvY2ZzMl9maW5kX3N1YnRyZWVfcm9vdCgmZXQsIGxlZnRfcGF0aCwKKwkJCQkJICAgICAgIHJpZ2h0X3BhdGgpOworCisJdG1wX2VsID0gbGVmdF9wYXRoLT5wX25vZGVbc3VidHJlZV9yb290XS5lbDsKKwlibGtubyA9IGxlZnRfcGF0aC0+cF9ub2RlW3N1YnRyZWVfcm9vdCsxXS5iaC0+Yl9ibG9ja25yOworCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdSh0bXBfZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykgeworCQlpZiAobGU2NF90b19jcHUodG1wX2VsLT5sX3JlY3NbaV0uZV9ibGtubykgPT0gYmxrbm8pIHsKKwkJCSpjcG9zX2VuZCA9IGxlMzJfdG9fY3B1KHRtcF9lbC0+bF9yZWNzW2krMV0uZV9jcG9zKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJQlVHX09OKGkgPT0gbGUzMl90b19jcHUodG1wX2VsLT5sX25leHRfZnJlZV9yZWMpKTsKKworb3V0OgorCW9jZnMyX2ZyZWVfcGF0aChsZWZ0X3BhdGgpOworCW9jZnMyX2ZyZWVfcGF0aChyaWdodF9wYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogR2l2ZW4gYSBjcG9zIGFuZCBsZW4sIHRyeSB0byBmaW5kIHRoZSByZWZjb3VudCByZWNvcmQgd2hpY2ggY29udGFpbnMgY3Bvcy4KICAqIDEuIElmIGNwb3MgY2FuIGJlIGZvdW5kIGluIG9uZSByZWZjb3VudCByZWNvcmQsIHJldHVybiB0aGUgcmVjb3JkLgogICogMi4gSWYgY3BvcyBjYW4ndCBiZSBmb3VuZCwgcmV0dXJuIGEgZmFrZSByZWNvcmQgd2hpY2ggc3RhcnQgZnJvbSBjcG9zCkBAIC05ODMsMTAgKzEwNjMsMTAgQEAKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCkKIHsKIAlpbnQgcmV0ID0gMCwgaSwgZm91bmQ7Ci0JdTMyIGxvd19jcG9zOworCXUzMiBsb3dfY3BvcywgdW5pbml0aWFsaXplZF92YXIoY3Bvc19lbmQpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnRtcCwgKnJlYyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CisJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWIgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMLCAqcmVmX2xlYWZfYmggPSBOVUxMOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvY2ZzMl9tZXRhZGF0YV9jYWNoZV9nZXRfc3VwZXIoY2kpOwogCXN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqcmIgPQpAQCAtMTAzNCwxMiArMTExNCwxNiBAQAogCQl9CiAJfQogCi0JLyogYWRqdXN0IGxlbiB3aGVuIHdlIGhhdmUgb2NmczJfZXh0ZW50X3JlYyBhZnRlciBpdC4gKi8KLQlpZiAoZm91bmQgJiYgaSA8IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMSkgewotCQl0bXAgPSAmZWwtPmxfcmVjc1tpKzFdOworCWlmIChmb3VuZCkgeworCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfY3Bvc19lbmQoY2ksIHJlZl9yb290X2JoLAorCQkJCQkJICBlYiwgZWwsIGksICZjcG9zX2VuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQkJaWYgKGxlMzJfdG9fY3B1KHRtcC0+ZV9jcG9zKSA8IGNwb3MgKyBsZW4pCi0JCQlsZW4gPSBsZTMyX3RvX2NwdSh0bXAtPmVfY3BvcykgLSBjcG9zOworCQlpZiAoY3Bvc19lbmQgPCBsb3dfY3BvcyArIGxlbikKKwkJCWxlbiA9IGNwb3NfZW5kIC0gbG93X2Nwb3M7CiAJfQogCiAJcmV0ID0gb2NmczJfcmVhZF9yZWZjb3VudF9ibG9jayhjaSwgbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKSwKQEAgLTE0MTgsNyArMTUwMiw3IEBACiAKIAkvKiBjaGFuZ2Ugb2xkIGFuZCBuZXcgcmxfdXNlZCBhY2NvcmRpbmdseS4gKi8KIAlsZTE2X2FkZF9jcHUoJnJsLT5ybF91c2VkLCAtbnVtX21vdmVkKTsKLQluZXdfcmwtPnJsX3VzZWQgPSBjcHVfdG9fbGUzMihudW1fbW92ZWQpOworCW5ld19ybC0+cmxfdXNlZCA9IGNwdV90b19sZTE2KG51bV9tb3ZlZCk7CiAKIAlzb3J0KCZybC0+cmxfcmVjcywgbGUxNl90b19jcHUocmwtPnJsX3VzZWQpLAogCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9yZWMpLApAQCAtMTc5Nyw3ICsxODgxLDggQEAKIAkJcmVjc19uZWVkKys7CiAKIAkvKiBJZiB0aGUgbGVhZiBibG9jayBkb24ndCBoYXZlIGVub3VnaCByZWNvcmQsIGV4cGFuZCBpdC4gKi8KLQlpZiAobGUxNl90b19jcHUocmZfbGlzdC0+cmxfdXNlZCkgKyByZWNzX25lZWQgPiByZl9saXN0LT5ybF9jb3VudCkgeworCWlmIChsZTE2X3RvX2NwdShyZl9saXN0LT5ybF91c2VkKSArIHJlY3NfbmVlZCA+CisJCQkJCSBsZTE2X3RvX2NwdShyZl9saXN0LT5ybF9jb3VudCkpIHsKIAkJc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYyB0bXBfcmVjOwogCQl1NjQgY3BvcyA9IGxlNjRfdG9fY3B1KG9yaWdfcmVjLT5yX2Nwb3MpOwogCQlsZW4gPSBsZTMyX3RvX2NwdShvcmlnX3JlYy0+cl9jbHVzdGVycyk7CkBAIC0xODU5LDcgKzE5NDQsNyBAQAogCQltZW1jcHkodGFpbF9yZWMsIG9yaWdfcmVjLCBzaXplb2Yoc3RydWN0IG9jZnMyX3JlZmNvdW50X3JlYykpOwogCQlsZTY0X2FkZF9jcHUoJnRhaWxfcmVjLT5yX2Nwb3MsCiAJCQkgICAgIGxlMzJfdG9fY3B1KHRhaWxfcmVjLT5yX2NsdXN0ZXJzKSAtIGxlbik7Ci0JCXRhaWxfcmVjLT5yX2NsdXN0ZXJzID0gbGUzMl90b19jcHUobGVuKTsKKwkJdGFpbF9yZWMtPnJfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMihsZW4pOwogCX0KIAogCS8qCkBAIC0zODQwLDggKzM5MjUsNyBAQAogCX0KIAogCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQoaGFuZGxlLCBldCwgY3BvcywKLQkJCWNwdV90b19sZTY0KG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKLQkJCQkJCQkgICAgIHBfY2x1c3RlcikpLAorCQkJb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwX2NsdXN0ZXIpLAogCQkJbnVtX2NsdXN0ZXJzLCBleHRfZmxhZ3MsIG1ldGFfYWMpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDI1Myw4ICs0MzM3LDggQEAKICAqIEBuZXdfZGVudHJ5OiAgICAgICAgdGFyZ2V0IGRlbnRyeQogICogQHByZXNlcnZlOiAgaWYgdHJ1ZSwgcHJlc2VydmUgYWxsIGZpbGUgYXR0cmlidXRlcwogICovCi1pbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGJvb2wgcHJlc2VydmUpCitzdGF0aWMgaW50IG9jZnMyX3Zmc19yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBib29sIHByZXNlcnZlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrX3VzZXIuYyBiL2ZzL29jZnMyL3N0YWNrX3VzZXIuYwppbmRleCBmZjRjNzk4Li5kYTc4YTJhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdGFja191c2VyLmMKKysrIGIvZnMvb2NmczIvc3RhY2tfdXNlci5jCkBAIC04MTQsNyArODE0LDcgQEAKIHN0YXRpYyBpbnQgdXNlcl9jbHVzdGVyX2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubikKIHsKIAlkbG1fbG9ja3NwYWNlX3QgKmZzZGxtOwotCXN0cnVjdCBvY2ZzMl9saXZlX2Nvbm5lY3Rpb24gKmNvbnRyb2w7CisJc3RydWN0IG9jZnMyX2xpdmVfY29ubmVjdGlvbiAqdW5pbml0aWFsaXplZF92YXIoY29udHJvbCk7CiAJaW50IHJjID0gMDsKIAogCUJVR19PTihjb25uID09IE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggMTRmNDdkMi4uMjYwNjk5MSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0xMDAsNiArMTAwLDggQEAKIHN0YXRpYyBpbnQgb2NmczJfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICpvcHRpb25zLAogCQkJICAgICAgIHN0cnVjdCBtb3VudF9vcHRpb25zICptb3B0LAogCQkJICAgICAgIGludCBpc19yZW1vdW50KTsKK3N0YXRpYyBpbnQgb2NmczJfY2hlY2tfc2V0X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3QgbW91bnRfb3B0aW9ucyAqb3B0aW9ucyk7CiBzdGF0aWMgaW50IG9jZnMyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIHN0YXRpYyB2b2lkIG9jZnMyX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0YXRpYyBpbnQgb2NmczJfbW91bnRfdm9sdW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpAQCAtNjAwLDcgKzYwMiw4IEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCi0JaWYgKCFvY2ZzMl9wYXJzZV9vcHRpb25zKHNiLCBkYXRhLCAmcGFyc2VkX29wdGlvbnMsIDEpKSB7CisJaWYgKCFvY2ZzMl9wYXJzZV9vcHRpb25zKHNiLCBkYXRhLCAmcGFyc2VkX29wdGlvbnMsIDEpIHx8CisJICAgICFvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzYiwgJnBhcnNlZF9vcHRpb25zKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC02OTEsOCArNjk0LDYgQEAKIAlpZiAoIXJldCkgewogCQkvKiBPbmx5IHNhdmUgb2ZmIHRoZSBuZXcgbW91bnQgb3B0aW9ucyBpbiBjYXNlIG9mIGEgc3VjY2Vzc2Z1bAogCQkgKiByZW1vdW50LiAqLwotCQlpZiAoIShvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKQotCQkJcGFyc2VkX29wdGlvbnMubW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CiAJCW9zYi0+c19tb3VudF9vcHQgPSBwYXJzZWRfb3B0aW9ucy5tb3VudF9vcHQ7CiAJCW9zYi0+c19hdGltZV9xdWFudHVtID0gcGFyc2VkX29wdGlvbnMuYXRpbWVfcXVhbnR1bTsKIAkJb3NiLT5wcmVmZXJyZWRfc2xvdCA9IHBhcnNlZF9vcHRpb25zLnNsb3Q7CkBAIC03MDEsNiArNzAyLDEwIEBACiAKIAkJaWYgKCFvY2ZzMl9pc19oYXJkX3JlYWRvbmx5KG9zYikpCiAJCQlvY2ZzMl9zZXRfam91cm5hbF9wYXJhbXMob3NiKTsKKworCQlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCkgfAorCQkJKChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/CisJCQkJCQkJTVNfUE9TSVhBQ0wgOiAwKTsKIAl9CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMTAxMSwzMSArMTAxNiwxNiBAQAogCWJyZWxzZShiaCk7CiAJYmggPSBOVUxMOwogCi0JaWYgKCEob3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkKLQkJcGFyc2VkX29wdGlvbnMubW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7Ci0KKwlpZiAoIW9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHNiLCAmcGFyc2VkX29wdGlvbnMpKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKKwl9CiAJb3NiLT5zX21vdW50X29wdCA9IHBhcnNlZF9vcHRpb25zLm1vdW50X29wdDsKIAlvc2ItPnNfYXRpbWVfcXVhbnR1bSA9IHBhcnNlZF9vcHRpb25zLmF0aW1lX3F1YW50dW07CiAJb3NiLT5wcmVmZXJyZWRfc2xvdCA9IHBhcnNlZF9vcHRpb25zLnNsb3Q7CiAJb3NiLT5vc2JfY29tbWl0X2ludGVydmFsID0gcGFyc2VkX29wdGlvbnMuY29tbWl0X2ludGVydmFsOwogCW9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzID0gb2NmczJfbWVnYWJ5dGVzX3RvX2NsdXN0ZXJzKHNiLCBwYXJzZWRfb3B0aW9ucy5sb2NhbGFsbG9jX29wdCk7CiAJb3NiLT5sb2NhbF9hbGxvY19iaXRzID0gb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHM7Ci0JaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9VU1JRVU9UQSAmJgotCSAgICAhT0NGUzJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAotCQkJCQkgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEpKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCW1sb2coTUxfRVJST1IsICJVc2VyIHF1b3RhcyB3ZXJlIHJlcXVlc3RlZCwgYnV0IHRoaXMgIgotCQkgICAgICJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiIpOwotCQlnb3RvIHJlYWRfc3VwZXJfZXJyb3I7Ci0JfQotCWlmIChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfR1JQUVVPVEEgJiYKLQkgICAgIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKLQkJCQkJIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX0dSUFFVT1RBKSkgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQltbG9nKE1MX0VSUk9SLCAiR3JvdXAgcXVvdGFzIHdlcmUgcmVxdWVzdGVkLCBidXQgdGhpcyAiCi0JCSAgICAgImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgZmVhdHVyZSBlbmFibGVkLlxuIik7Ci0JCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKLQl9CiAKIAlzdGF0dXMgPSBvY2ZzMl92ZXJpZnlfdXNlcnNwYWNlX3N0YWNrKG9zYiwgJnBhcnNlZF9vcHRpb25zKTsKIAlpZiAoc3RhdHVzKQpAQCAtMTI0NSw2ICsxMjM1LDQwIEBACiAJLm5leHQgICAgICAgICAgID0gTlVMTAogfTsKIAorc3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgIHN0cnVjdCBtb3VudF9vcHRpb25zICpvcHRpb25zKQoreworCWlmIChvcHRpb25zLT5tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9VU1JRVU9UQSAmJgorCSAgICAhT0NGUzJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLAorCQkJCQkgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEpKSB7CisJCW1sb2coTUxfRVJST1IsICJVc2VyIHF1b3RhcyB3ZXJlIHJlcXVlc3RlZCwgYnV0IHRoaXMgIgorCQkgICAgICJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wdGlvbnMtPm1vdW50X29wdCAmIE9DRlMyX01PVU5UX0dSUFFVT1RBICYmCisJICAgICFPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCisJCQkJCSBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9HUlBRVU9UQSkpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIkdyb3VwIHF1b3RhcyB3ZXJlIHJlcXVlc3RlZCwgYnV0IHRoaXMgIgorCQkgICAgICJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlIGZlYXR1cmUgZW5hYmxlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wdGlvbnMtPm1vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCAmJgorCSAgICAhT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKSB7CisJCW1sb2coTUxfRVJST1IsICJBQ0wgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgIgorCQkgICAgICJmZWF0dXJlIGlzIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi8KKwlpZiAoIShvcHRpb25zLT5tb3VudF9vcHQgJiAoT0NGUzJfTU9VTlRfUE9TSVhfQUNMIHwKKwkJCQkgICAgT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMKSkpIHsKKwkJaWYgKE9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkKKwkJCW9wdGlvbnMtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CisJCWVsc2UKKwkJCW9wdGlvbnMtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7CisJfQorCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IG9jZnMyX3BhcnNlX29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgICBjaGFyICpvcHRpb25zLAogCQkJICAgICAgIHN0cnVjdCBtb3VudF9vcHRpb25zICptb3B0LApAQCAtMTM5Miw0MCArMTQxNiwxOSBAQAogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX0lOT0RFNjQ7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdXNycXVvdGE6Ci0JCQkvKiBXZSBjaGVjayBvbmx5IG9uIHJlbW91bnQsIG90aGVyd2lzZSBmZWF0dXJlcwotCQkJICogYXJlbid0IHlldCBpbml0aWFsaXplZC4gKi8KLQkJCWlmIChpc19yZW1vdW50ICYmICFPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCi0JCQkgICAgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVVNSUVVPVEEpKSB7Ci0JCQkJbWxvZyhNTF9FUlJPUiwgIlVzZXIgcXVvdGEgcmVxdWVzdGVkIGJ1dCAiCi0JCQkJICAgICAiZmlsZXN5c3RlbSBmZWF0dXJlIGlzIG5vdCBzZXRcbiIpOwotCQkJCXN0YXR1cyA9IDA7Ci0JCQkJZ290byBiYWlsOwotCQkJfQogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1VTUlFVT1RBOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2dycHF1b3RhOgotCQkJaWYgKGlzX3JlbW91bnQgJiYgIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKLQkJCSAgICBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9HUlBRVU9UQSkpIHsKLQkJCQltbG9nKE1MX0VSUk9SLCAiR3JvdXAgcXVvdGEgcmVxdWVzdGVkIGJ1dCAiCi0JCQkJICAgICAiZmlsZXN5c3RlbSBmZWF0dXJlIGlzIG5vdCBzZXRcbiIpOwotCQkJCXN0YXR1cyA9IDA7Ci0JCQkJZ290byBiYWlsOwotCQkJfQogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX0dSUFFVT1RBOwogCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTAogCQljYXNlIE9wdF9hY2w6CiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMOworCQkJbW9wdC0+bW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9hY2w6CisJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMOwogCQkJbW9wdC0+bW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7CiAJCQlicmVhazsKLSNlbHNlCi0JCWNhc2UgT3B0X2FjbDoKLQkJY2FzZSBPcHRfbm9hY2w6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMiAobm8pYWNsIG9wdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlicmVhazsKLSNlbmRpZgogCQlkZWZhdWx0OgogCQkJbWxvZyhNTF9FUlJPUiwKIAkJCSAgICAgIlVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKQEAgLTE1MDIsMTIgKzE1MDUsMTAgQEAKIAlpZiAob3B0cyAmIE9DRlMyX01PVU5UX0lOT0RFNjQpCiAJCXNlcV9wcmludGYocywgIixpbm9kZTY0Iik7CiAKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCiAJaWYgKG9wdHMgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpCiAJCXNlcV9wcmludGYocywgIixhY2wiKTsKIAllbHNlCiAJCXNlcV9wcmludGYocywgIixub2FjbCIpOwotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N5bWxpbmsuYyBiL2ZzL29jZnMyL3N5bWxpbmsuYwppbmRleCBlMzQyMTAzLi40OWIxMzNjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zeW1saW5rLmMKKysrIGIvZnMvb2NmczIvc3ltbGluay5jCkBAIC0xNjMsNiArMTYzLDcgQEAKIAkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAogCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKKwkuZmllbWFwCQk9IG9jZnMyX2ZpZW1hcCwKIH07CiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZGxpbmsJPSBvY2ZzMl9yZWFkbGluaywKQEAgLTE3NCw0ICsxNzUsNSBAQAogCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAorCS5maWVtYXAJCT0gb2NmczJfZmllbWFwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IDQzYzExNDguLjhmYzZmYjAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtOTgsMTAgKzk4LDggQEAKIAogc3RydWN0IHhhdHRyX2hhbmRsZXIgKm9jZnMyX3hhdHRyX2hhbmRsZXJzW10gPSB7CiAJJm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlciwKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMCiAJJm9jZnMyX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciwKIAkmb2NmczJfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlciwKLSNlbmRpZgogCSZvY2ZzMl94YXR0cl90cnVzdGVkX2hhbmRsZXIsCiAJJm9jZnMyX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCiAJTlVMTApAQCAtMTA5LDEyICsxMDcsMTAgQEAKIAogc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtPQ0ZTMl9YQVRUUl9NQVhdID0gewogCVtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXQk9ICZvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXIsCi0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTAogCVtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXQogCQkJCQk9ICZvY2ZzMl94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIsCiAJW09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUXQogCQkJCQk9ICZvY2ZzMl94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyLAotI2VuZGlmCiAJW09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdCT0gJm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlciwKIAlbT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFldCT0gJm9jZnMyX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCiB9OwpAQCAtNjA2NCw3ICs2MDYwLDcgQEAKIAkJICogdG8gdGhlIGV4dGVudCBibG9jaywgc28ganVzdCBjYWxjdWxhdGUgYSBtYXhpbXVtIHJlY29yZCBudW0uCiAJCSAqLwogCQlpZiAoIXh2LT54cl9saXN0LmxfdHJlZV9kZXB0aCkKLQkJCSpudW1fcmVjcyArPSB4di0+eHJfbGlzdC5sX25leHRfZnJlZV9yZWM7CisJCQkqbnVtX3JlY3MgKz0gbGUxNl90b19jcHUoeHYtPnhyX2xpc3QubF9uZXh0X2ZyZWVfcmVjKTsKIAkJZWxzZQogCQkJKm51bV9yZWNzICs9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhzYiwKIAkJCQkJCQkgICAgICBYQVRUUl9TSVpFX01BWCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCAwOGUzNjM4Li5hYmQ3MmE0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCisrKyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTQwLDEwICs0MCw4IEBACiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcjsKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0wKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXI7CiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlcjsKLSNlbmRpZgogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpvY2ZzMl94YXR0cl9oYW5kbGVyc1tdOwogCiBzc2l6ZV90IG9jZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBjYTY5MjQxLi4wNDBjZWY3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC04MjEsMTUgKzgyMSwxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGUgKl9fZGVudHJ5X29wZW4oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqZiwKKwkJCQkJc3RydWN0IGZpbGUgKmYsCiAJCQkJCWludCAoKm9wZW4pKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKSwKIAkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyb3I7CiAKLQlmLT5mX2ZsYWdzID0gZmxhZ3M7Ci0JZi0+Zl9tb2RlID0gKF9fZm9yY2UgZm1vZGVfdCkoKGZsYWdzKzEpICYgT19BQ0NNT0RFKSB8IEZNT0RFX0xTRUVLIHwKKwlmLT5mX21vZGUgPSBPUEVOX0ZNT0RFKGYtPmZfZmxhZ3MpIHwgRk1PREVfTFNFRUsgfAogCQkJCUZNT0RFX1BSRUFEIHwgRk1PREVfUFdSSVRFOwogCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChmLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewpAQCAtOTMwLDcgKzkyOSw2IEBACiAJaWYgKElTX0VSUihkZW50cnkpKQogCQlnb3RvIG91dF9lcnI7CiAJbmQtPmludGVudC5vcGVuLmZpbGUgPSBfX2RlbnRyeV9vcGVuKGRnZXQoZGVudHJ5KSwgbW50Z2V0KG5kLT5wYXRoLm1udCksCi0JCQkJCSAgICAgbmQtPmludGVudC5vcGVuLmZsYWdzIC0gMSwKIAkJCQkJICAgICBuZC0+aW50ZW50Lm9wZW4uZmlsZSwKIAkJCQkJICAgICBvcGVuLCBjcmVkKTsKIG91dDoKQEAgLTk0OSw3ICs5NDcsNyBAQAogICoKICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIHRoZSBvcmlnaW5hbCBuYW1laWRhdGEKICAqLwotc3RydWN0IGZpbGUgKm5hbWVpZGF0YV90b19maWxwKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgZmxhZ3MpCitzdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKQEAgLTk1OCw3ICs5NTYsNyBAQAogCWZpbHAgPSBuZC0+aW50ZW50Lm9wZW4uZmlsZTsKIAkvKiBIYXMgdGhlIGZpbGVzeXN0ZW0gaW5pdGlhbGlzZWQgdGhlIGZpbGUgZm9yIHVzPyAqLwogCWlmIChmaWxwLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCi0JCWZpbHAgPSBfX2RlbnRyeV9vcGVuKG5kLT5wYXRoLmRlbnRyeSwgbmQtPnBhdGgubW50LCBmbGFncywgZmlscCwKKwkJZmlscCA9IF9fZGVudHJ5X29wZW4obmQtPnBhdGguZGVudHJ5LCBuZC0+cGF0aC5tbnQsIGZpbHAsCiAJCQkJICAgICBOVUxMLCBjcmVkKTsKIAllbHNlCiAJCXBhdGhfcHV0KCZuZC0+cGF0aCk7CkBAIC05OTcsNyArOTk1LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCX0KIAotCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmbGFncywgZiwgTlVMTCwgY3JlZCk7CisJZi0+Zl9mbGFncyA9IGZsYWdzOworCXJldHVybiBfX2RlbnRyeV9vcGVuKGRlbnRyeSwgbW50LCBmLCBOVUxMLCBjcmVkKTsKIH0KIEVYUE9SVF9TWU1CT0woZGVudHJ5X29wZW4pOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNGJhZGRlMS4uMTNiNWQwNyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMTM0LDEzICsxMzQsMTYgQEAKICAqIHNpbXBsZSBiaXQgdGVzdHMuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0YXNrX3N0YXRlX2FycmF5W10gPSB7Ci0JIlIgKHJ1bm5pbmcpIiwJCS8qICAwICovCi0JIlMgKHNsZWVwaW5nKSIsCQkvKiAgMSAqLwotCSJEIChkaXNrIHNsZWVwKSIsCS8qICAyICovCi0JIlQgKHN0b3BwZWQpIiwJCS8qICA0ICovCi0JIlQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgOCAqLwotCSJaICh6b21iaWUpIiwJCS8qIDE2ICovCi0JIlggKGRlYWQpIgkJLyogMzIgKi8KKwkiUiAocnVubmluZykiLAkJLyogICAwICovCisJIlMgKHNsZWVwaW5nKSIsCQkvKiAgIDEgKi8KKwkiRCAoZGlzayBzbGVlcCkiLAkvKiAgIDIgKi8KKwkiVCAoc3RvcHBlZCkiLAkJLyogICA0ICovCisJInQgKHRyYWNpbmcgc3RvcCkiLAkvKiAgIDggKi8KKwkiWiAoem9tYmllKSIsCQkvKiAgMTYgKi8KKwkiWCAoZGVhZCkiLAkJLyogIDMyICovCisJInggKGRlYWQpIiwJCS8qICA2NCAqLworCSJLICh3YWtla2lsbCkiLAkJLyogMTI4ICovCisJIlcgKHdha2luZykiLAkJLyogMjU2ICovCiB9OwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF90YXNrX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtMTQ4LDYgKzE1MSw4IEBACiAJdW5zaWduZWQgaW50IHN0YXRlID0gKHRzay0+c3RhdGUgJiBUQVNLX1JFUE9SVCkgfCB0c2stPmV4aXRfc3RhdGU7CiAJY29uc3QgY2hhciAqKnAgPSAmdGFza19zdGF0ZV9hcnJheVswXTsKIAorCUJVSUxEX0JVR19PTigxICsgaWxvZzIoVEFTS19TVEFURV9NQVgpICE9IEFSUkFZX1NJWkUodGFza19zdGF0ZV9hcnJheSkpOworCiAJd2hpbGUgKHN0YXRlKSB7CiAJCXArKzsKIAkJc3RhdGUgPj49IDE7CkBAIC0zMjIsOTQgKzMyNyw2IEBACiAJCQlwLT5uaXZjc3cpOwogfQogCi0jaWZkZWYgQ09ORklHX01NVQotCi1zdHJ1Y3Qgc3RhY2tfc3RhdHMgewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXVuc2lnbmVkIGxvbmcJc3RhcnRwYWdlOwotCXVuc2lnbmVkIGxvbmcJdXNhZ2U7Ci19OwotCi1zdGF0aWMgaW50IHN0YWNrX3VzYWdlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQotewotCXN0cnVjdCBzdGFja19zdGF0cyAqc3MgPSB3YWxrLT5wcml2YXRlOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gc3MtPnZtYTsKLQlwdGVfdCAqcHRlLCBwdGVudDsKLQlzcGlubG9ja190ICpwdGw7Ci0JaW50IHJldCA9IDA7Ci0KLQlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS0+dm1fbW0sIHBtZCwgYWRkciwgJnB0bCk7Ci0JZm9yICg7IGFkZHIgIT0gZW5kOyBwdGUrKywgYWRkciArPSBQQUdFX1NJWkUpIHsKLQkJcHRlbnQgPSAqcHRlOwotCi0jaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKLQkJaWYgKHB0ZV9wcmVzZW50KHB0ZW50KSB8fCBpc19zd2FwX3B0ZShwdGVudCkpCi0JCQlzcy0+dXNhZ2UgPSBhZGRyIC0gc3MtPnN0YXJ0cGFnZSArIFBBR0VfU0laRTsKLSNlbHNlCi0JCWlmIChwdGVfcHJlc2VudChwdGVudCkgfHwgaXNfc3dhcF9wdGUocHRlbnQpKSB7Ci0JCQlzcy0+dXNhZ2UgPSBzcy0+c3RhcnRwYWdlIC0gYWRkciArIFBBR0VfU0laRTsKLQkJCXB0ZSsrOwotCQkJcmV0ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOwotCWNvbmRfcmVzY2hlZCgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfc3RhY2tfdXNhZ2VfaW5fYnl0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCXN0cnVjdCBzdGFja19zdGF0cyBzczsKLQlzdHJ1Y3QgbW1fd2FsayBzdGFja193YWxrID0gewotCQkucG1kX2VudHJ5ID0gc3RhY2tfdXNhZ2VfcHRlX3JhbmdlLAotCQkubW0gPSB2bWEtPnZtX21tLAotCQkucHJpdmF0ZSA9ICZzcywKLQl9OwotCi0JaWYgKCF2bWEtPnZtX21tIHx8IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQlyZXR1cm4gMDsKLQotCXNzLnZtYSA9IHZtYTsKLQlzcy5zdGFydHBhZ2UgPSB0YXNrLT5zdGFja19zdGFydCAmIFBBR0VfTUFTSzsKLQlzcy51c2FnZSA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUAotCXdhbGtfcGFnZV9yYW5nZShLU1RLX0VTUCh0YXNrKSAmIFBBR0VfTUFTSywgdm1hLT52bV9lbmQsCi0JCSZzdGFja193YWxrKTsKLSNlbHNlCi0Jd2Fsa19wYWdlX3JhbmdlKHZtYS0+dm1fc3RhcnQsIChLU1RLX0VTUCh0YXNrKSAmIFBBR0VfTUFTSykgKyBQQUdFX1NJWkUsCi0JCSZzdGFja193YWxrKTsKLSNlbmRpZgotCXJldHVybiBzcy51c2FnZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRhc2tfc2hvd19zdGFja191c2FnZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCi0JCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0CSp2bWE7Ci0Jc3RydWN0IG1tX3N0cnVjdAkqbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKLQotCWlmIChtbSkgewotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXZtYSA9IGZpbmRfdm1hKG1tLCB0YXNrLT5zdGFja19zdGFydCk7Ci0JCWlmICh2bWEpCi0JCQlzZXFfcHJpbnRmKG0sICJTdGFjayB1c2FnZTpcdCVsdSBrQlxuIiwKLQkJCQlnZXRfc3RhY2tfdXNhZ2VfaW5fYnl0ZXModm1hLCB0YXNrKSA+PiAxMCk7Ci0KLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJbW1wdXQobW0pOwotCX0KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCB0YXNrX3Nob3dfc3RhY2tfdXNhZ2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci19Ci0jZW5kaWYJCS8qIENPTkZJR19NTVUgKi8KLQogc3RhdGljIHZvaWQgdGFza19jcHVzX2FsbG93ZWQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkOlx0Iik7CkBAIC00NDAsNyArMzU3LDYgQEAKIAl0YXNrX3Nob3dfcmVncyhtLCB0YXNrKTsKICNlbmRpZgogCXRhc2tfY29udGV4dF9zd2l0Y2hfY291bnRzKG0sIHRhc2spOwotCXRhc2tfc2hvd19zdGFja191c2FnZShtLCB0YXNrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDQ3YzAzZjQuLmYyNzdjNGEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTM2MSwxMiArMzYxLDExIEBACiAJCWlmICghcHRlX3ByZXNlbnQocHRlbnQpKQogCQkJY29udGludWU7CiAKLQkJbXNzLT5yZXNpZGVudCArPSBQQUdFX1NJWkU7Ci0KIAkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlbnQpOwogCQlpZiAoIXBhZ2UpCiAJCQljb250aW51ZTsKIAorCQltc3MtPnJlc2lkZW50ICs9IFBBR0VfU0laRTsKIAkJLyogQWNjdW11bGF0ZSB0aGUgc2l6ZSBpbiBwYWdlcyB0aGF0IGhhdmUgYmVlbiBhY2Nlc3NlZC4gKi8KIAkJaWYgKHB0ZV95b3VuZyhwdGVudCkgfHwgUGFnZVJlZmVyZW5jZWQocGFnZSkpCiAJCQltc3MtPnJlZmVyZW5jZWQgKz0gUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggY2Q2YmI5YS4uM2ZjNjJiMCAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC0zMjMsNiArMzIzLDMwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X21hcmtfZHF1b3RfZGlydHkpOwogCisvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLworc3RhdGljIGlubGluZSBpbnQgbWFya19hbGxfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICogY29uc3QgKmRxdW90KQoreworCWludCByZXQsIGVyciwgY250OworCisJcmV0ID0gZXJyID0gMDsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKGRxdW90W2NudF0pCisJCQkvKiBFdmVuIGluIGNhc2Ugb2YgZXJyb3Igd2UgaGF2ZSB0byBjb250aW51ZSAqLworCQkJcmV0ID0gbWFya19kcXVvdF9kaXJ0eShkcXVvdFtjbnRdKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSByZXQ7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXB1dF9hbGwoc3RydWN0IGRxdW90ICoqZHF1b3QpCit7CisJdW5zaWduZWQgaW50IGNudDsKKworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJZHFwdXQoZHF1b3RbY250XSk7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgZHFfbGlzdF9sb2NrICovCiBzdGF0aWMgaW5saW5lIGludCBjbGVhcl9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewpAQCAtMTI2OCw4ICsxMjkyLDcgQEAKIG91dF9lcnI6CiAJdXBfd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKIAkvKiBEcm9wIHVudXNlZCByZWZlcmVuY2VzICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChnb3RbY250XSk7CisJZHFwdXRfYWxsKGdvdCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfaW5pdGlhbGl6ZSk7CkBAIC0xMjg4LDkgKzEzMTEsNyBAQAogCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gTlVMTDsKIAl9CiAJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJZHFwdXQocHV0W2NudF0pOworCWRxcHV0X2FsbChwdXQpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9kcm9wKTsKQEAgLTEzMTksNiArMTM0MCw3MCBAQAogRVhQT1JUX1NZTUJPTCh2ZnNfZHFfZHJvcCk7CiAKIC8qCisgKiBpbm9kZV9yZXNlcnZlZF9zcGFjZSBpcyBtYW5hZ2VkIGludGVybmFsbHkgYnkgcXVvdGEsIGFuZCBwcm90ZWN0ZWQgYnkKKyAqIGlfbG9jayBzaW1pbGFyIHRvIGlfYmxvY2tzK2lfYnl0ZXMuCisgKi8KK3N0YXRpYyBxc2l6ZV90ICppbm9kZV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKK3sKKwkvKiBGaWxlc3lzdGVtIG11c3QgZXhwbGljaXRseSBkZWZpbmUgaXQncyBvd24gbWV0aG9kIGluIG9yZGVyIHRvIHVzZQorCSAqIHF1b3RhIHJlc2VydmF0aW9uIGludGVyZmFjZSAqLworCUJVR19PTighaW5vZGUtPmlfc2ItPmRxX29wLT5nZXRfcmVzZXJ2ZWRfc3BhY2UpOworCXJldHVybiBpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZShpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2FkZF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpICs9IG51bWJlcjsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKKworc3RhdGljIHZvaWQgaW5vZGVfY2xhaW1fcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJKmlub2RlX3Jlc2VydmVkX3NwYWNlKGlub2RlKSAtPSBudW1iZXI7CisJX19pbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBpbm9kZV9zdWJfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJKmlub2RlX3Jlc2VydmVkX3NwYWNlKGlub2RlKSAtPSBudW1iZXI7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCitzdGF0aWMgcXNpemVfdCBpbm9kZV9nZXRfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcXNpemVfdCByZXQ7CisKKwlpZiAoIWlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKQorCQlyZXR1cm4gMDsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXJldCA9ICppbm9kZV9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2luY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCQkJaW50IHJlc2VydmUpCit7CisJaWYgKHJlc2VydmUpCisJCWlub2RlX2FkZF9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CisJZWxzZQorCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2RlY3Jfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQoreworCWlmIChyZXNlcnZlKQorCQlpbm9kZV9zdWJfcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOworCWVsc2UKKwkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworfQorCisvKgogICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKICAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKICAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCkBAIC0xMzM2LDYgKzE0MjEsMjEgQEAKIAlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKKwkvKgorCSAqIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorCSAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleAorCSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9pbmNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKIAkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKIApAQCAtMTM0Niw3ICsxNDQ2LDggQEAKIAkJaWYgKGNoZWNrX2JkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm4sIHdhcm50eXBlK2NudCkKIAkJICAgID09IE5PX1FVT1RBKSB7CiAJCQlyZXQgPSBOT19RVU9UQTsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCQkJZ290byBvdXRfZmx1c2hfd2FybjsKIAkJfQogCX0KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTEzNTcsNjQgKzE0NTgsMjkgQEAKIAkJZWxzZQogCQkJZHF1b3RfaW5jcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwogCX0KLQlpZiAoIXJlc2VydmUpCi0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKLW91dF91bmxvY2s6CisJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF9mbHVzaF93YXJuOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKK291dF9mbHVzaF93YXJuOgogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCB3YXJuKQogewotCWludCBjbnQsIHJldCA9IFFVT1RBX09LOwotCi0JLyoKLQkgKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLQkgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXgKLQkgKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKLQlpZiAocmV0ID09IE5PX1FVT1RBKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotb3V0X3VubG9jazoKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwogCiBpbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCiB7Ci0JaW50IHJldCA9IFFVT1RBX09LOwotCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlnb3RvIG91dDsKLQotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JcmV0ID0gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAxKTsKLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X3Jlc2VydmVfc3BhY2UpOwogCkBAIC0xNDU1LDEwICsxNTIxLDcgQEAKIHdhcm5fcHV0X2FsbDoKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpZiAocmV0ID09IFFVT1RBX09LKQotCQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOworCQltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJcmV0dXJuIHJldDsKQEAgLTE0NzEsMTQgKzE1MzQsMTQgQEAKIAlpbnQgcmV0ID0gUVVPVEFfT0s7CiAKIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworCQlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkJewogCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJaW5vZGVfY2xhaW1fcnN2X3NwYWNlKGlub2RlLCBudW1iZXIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE0OTAsMTIgKzE1NTMsOSBAQAogCQkJCQkJCW51bWJlcik7CiAJfQogCS8qIFVwZGF0ZSBpbm9kZSBieXRlcyAqLwotCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xNTAzLDM4ICsxNTYzLDkgQEAKIEVYUE9SVF9TWU1CT0woZHF1b3RfY2xhaW1fc3BhY2UpOwogCiAvKgotICogUmVsZWFzZSByZXNlcnZlZCBxdW90YSBzcGFjZQotICovCi12b2lkIGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCi17Ci0JaW50IGNudDsKLQotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXQ7Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBSZWxlYXNlIHJlc2VydmVkIGRxdW90cyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0KLW91dF91bmxvY2s6Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotb3V0OgotCXJldHVybjsKLX0KLUVYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSk7Ci0KLS8qCiAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAogICovCi1pbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK2ludCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQogewogCXVuc2lnbmVkIGludCBjbnQ7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwpAQCAtMTU0Myw3ICsxNTc0LDcgQEAKICAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCiAJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CiBvdXRfc3ViOgotCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJCXJldHVybiBRVU9UQV9PSzsKIAl9CiAKQEAgLTE1NTgsMjEgKzE1ODksNDAgQEAKIAkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJY29udGludWU7CiAJCXdhcm50eXBlW2NudF0gPSBpbmZvX2JkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7Ci0JCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJaWYgKHJlc2VydmUpCisJCQlkcXVvdF9mcmVlX3Jlc2VydmVkX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWVsc2UKKwkJCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKIAl9Ci0JaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKworCWlmIChyZXNlcnZlKQorCQlnb3RvIG91dF91bmxvY2s7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOworb3V0X3VubG9jazoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAlyZXR1cm4gUVVPVEFfT0s7CiB9CisKK2ludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXJldHVybiAgX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBudW1iZXIsIDApOworfQogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKIAogLyoKKyAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKKyAqLwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCV9fZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnVtYmVyLCAxKTsKKworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKTsKKworLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KIGludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQpAQCAtMTU5OSwxMCArMTY0OSw3IEBACiAJCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CiAJfQogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJbWFya19hbGxfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3QpOwogCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7CiAJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCXJldHVybiBRVU9UQV9PSzsKQEAgLTE2MTAsMTkgKzE2NTcsNiBAQAogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKIAogLyoKLSAqIGNhbGwgYmFjayBmdW5jdGlvbiwgZ2V0IHJlc2VydmVkIHF1b3RhIHNwYWNlIGZyb20gdW5kZXJseWluZyBmcwotICovCi1xc2l6ZV90IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXFzaXplX3QgcmVzZXJ2ZWRfc3BhY2UgPSAwOwotCi0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmCi0JICAgIGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKQotCQlyZXNlcnZlZF9zcGFjZSA9IGlub2RlLT5pX3NiLT5kcV9vcC0+Z2V0X3Jlc2VydmVkX3NwYWNlKGlub2RlKTsKLQlyZXR1cm4gcmVzZXJ2ZWRfc3BhY2U7Ci19Ci0KLS8qCiAgKiBUcmFuc2ZlciB0aGUgbnVtYmVyIG9mIGlub2RlIGFuZCBibG9ja3MgZnJvbSBvbmUgZGlza3F1b3RhIHRvIGFuIG90aGVyLgogICoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCkBAIC0xNjY1LDcgKzE2OTksNyBAQAogCX0KIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CiAJY3VyX3NwYWNlID0gaW5vZGVfZ2V0X2J5dGVzKGlub2RlKTsKLQlyc3Zfc3BhY2UgPSBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXJzdl9zcGFjZSA9IGlub2RlX2dldF9yc3Zfc3BhY2UoaW5vZGUpOwogCXNwYWNlID0gY3VyX3NwYWNlICsgcnN2X3NwYWNlOwogCS8qIEJ1aWxkIHRoZSB0cmFuc2Zlcl9mcm9tIGxpc3QgYW5kIGNoZWNrIHRoZSBsaW1pdHMgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKQEAgLTE3MDksMjUgKzE3NDMsMTggQEAKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwogCi0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJaWYgKHRyYW5zZmVyX3RvW2NudF0pIHsKLQkJCW1hcmtfZHF1b3RfZGlydHkodHJhbnNmZXJfdG9bY250XSk7Ci0JCQkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KLQkJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwotCQl9Ci0JfQorCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX2Zyb20pOworCW1hcmtfYWxsX2RxdW90X2RpcnR5KHRyYW5zZmVyX3RvKTsKKwkvKiBUaGUgcmVmZXJlbmNlIHdlIGdvdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaW5vZGUgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwogd2Fybl9wdXRfYWxsOgogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX3RvLCB3YXJudHlwZV90byk7CiAJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9pbm9kZXMpOwogCWZsdXNoX3dhcm5pbmdzKHRyYW5zZmVyX2Zyb20sIHdhcm50eXBlX2Zyb21fc3BhY2UpOwogcHV0X2FsbDoKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJZHFwdXQodHJhbnNmZXJfZnJvbVtjbnRdKTsKLQkJZHFwdXQodHJhbnNmZXJfdG9bY250XSk7Ci0JfQorCWRxcHV0X2FsbCh0cmFuc2Zlcl9mcm9tKTsKKwlkcXB1dF9hbGwodHJhbnNmZXJfdG8pOwogCXJldHVybiByZXQ7CiBvdmVyX3F1b3RhOgogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKaW5kZXggM2RmYzIzZS4uZTNkYTAyZiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuYworKysgYi9mcy9xdW90YS9xdW90YV92Mi5jCkBAIC05Nyw4ICs5NywxMSBAQAogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCiAJaWYgKCF2Ml9yZWFkX2hlYWRlcihzYiwgdHlwZSwgJmRxaGVhZCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLTE7CiAJdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfdmVyc2lvbik7CisJaWYgKChpbmZvLT5kcWlfZm10X2lkID09IFFGTVRfVkZTX1YwICYmIHZlcnNpb24gIT0gMCkgfHwKKwkgICAgKGluZm8tPmRxaV9mbXRfaWQgPT0gUUZNVF9WRlNfVjEgJiYgdmVyc2lvbiAhPSAxKSkKKwkJcmV0dXJuIC0xOwogCiAJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7CkBAIC0xMjAsOCArMTIzLDggQEAKIAkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmY7CiAJfSBlbHNlIHsKIAkJLyogdXNlZCBzcGFjZSBpcyBzdG9yZWQgYXMgdW5zaWduZWQgNjQtYml0IHZhbHVlICovCi0JCWluZm8tPmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmY7CS8qIDJeNjQtMSAqLwotCQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmOworCQlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwkvKiAyXjY0LTEgKi8KKwkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTDsKIAl9CiAJaW5mby0+ZHFpX2JncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9iZ3JhY2UpOwogCWluZm8tPmRxaV9pZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfaWdyYWNlKTsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCAzMmZhZTQwLi4yZWZjNTcxIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC02MCw3ICs2MCw3IEBACiAgKi8KIGludCByYW1mc19ub21tdV9leHBhbmRfZm9yX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IG5ld3NpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBucGFnZXMsIHhwYWdlcywgbG9vcCwgbGltaXQ7CisJdW5zaWduZWQgbG9uZyBucGFnZXMsIHhwYWdlcywgbG9vcDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXM7CiAJdW5zaWduZWQgb3JkZXI7CiAJdm9pZCAqZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL0tjb25maWcgYi9mcy9yZWlzZXJmcy9LY29uZmlnCmluZGV4IGFjN2NkNzUuLjUxM2Y0MzEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL0tjb25maWcKKysrIGIvZnMvcmVpc2VyZnMvS2NvbmZpZwpAQCAtMSw3ICsxLDYgQEAKIGNvbmZpZyBSRUlTRVJGU19GUwogCXRyaXN0YXRlICJSZWlzZXJmcyBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgotCXNlbGVjdCBGU19KT1VSTkFMX0lORk8KIAloZWxwCiAJICBTdG9yZXMgbm90IGp1c3QgZmlsZW5hbWVzIGJ1dCB0aGUgZmlsZXMgdGhlbXNlbHZlcyBpbiBhIGJhbGFuY2VkCiAJICB0cmVlLiAgVXNlcyBqb3VybmFsbGluZy4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKaW5kZXggNjg1NDk1Ny4uNjVjODcyNyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvYml0bWFwLmMKKysrIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKQEAgLTEyNzcsNyArMTI3NywxMCBAQAogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyAqYml0bWFwOwogCXVuc2lnbmVkIGludCBibWFwX25yID0gcmVpc2VyZnNfYm1hcF9jb3VudChzYik7CiAKKwkvKiBBdm9pZCBsb2NrIHJlY3Vyc2lvbiBpbiBmYXVsdCBjYXNlICovCisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHNiKTsKIAliaXRtYXAgPSB2bWFsbG9jKHNpemVvZigqYml0bWFwKSAqIGJtYXBfbnIpOworCXJlaXNlcmZzX3dyaXRlX2xvY2soc2IpOwogCWlmIChiaXRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDNhMjhlNzcuLjkwODdiMTAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMzEsMTEgKzMxLDEyIEBACiAJICAgIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArCiAJICAgIDIgKiBSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYik7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlpbnQgZGVwdGg7CiAJaW50IGVycjsKIAogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAotCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCWRlcHRoID0gcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKGlub2RlLT5pX3NiKTsKIAogCS8qIFRoZSA9IDAgaGFwcGVucyB3aGVuIHdlIGFib3J0IGNyZWF0aW5nIGEgbmV3IGlub2RlIGZvciBzb21lIHJlYXNvbiBsaWtlIGxhY2sgb2Ygc3BhY2UuLiAqLwogCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpICYmIElOT0RFX1BLRVkoaW5vZGUpLT5rX29iamVjdGlkICE9IDApIHsJLyogYWxzbyBoYW5kbGVzIGJhZF9pbm9kZSBjYXNlICovCkBAIC03NCw3ICs3NSw3IEBACiAgICAgICBvdXQ6CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwkvKiBub3RlIHRoaXMgbXVzdCBnbyBhZnRlciB0aGUgam91cm5hbF9lbmQgdG8gcHJldmVudCBkZWFkbG9jayAqLwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgZGVwdGgpOwogfQogCiBzdGF0aWMgdm9pZCBfbWFrZV9jcHVfa2V5KHN0cnVjdCBjcHVfa2V5ICprZXksIGludCB2ZXJzaW9uLCBfX3UzMiBkaXJpZCwKQEAgLTI1MzgsNiArMjUzOSwxMiBAQAogCXJldHVybiByZWlzZXJmc193cml0ZV9mdWxsX3BhZ2UocGFnZSwgd2JjKTsKIH0KIAorc3RhdGljIHZvaWQgcmVpc2VyZnNfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShpbm9kZSwgMCk7Cit9CisKIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKQEAgLTI2MDQsNiArMjYxMSw4IEBACiAJaWYgKHJldCkgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkvKiBUcnVuY2F0ZSBhbGxvY2F0ZWQgYmxvY2tzICovCisJCXJlaXNlcmZzX3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yNzAxLDkgKzI3MTAsNyBAQAogCSAqKiB0cmFuc2FjdGlvbiB0cmFja2luZyBzdHVmZiB3aGVuIHRoZSBzaXplIGNoYW5nZXMuICBTbywgd2UgaGF2ZQogCSAqKiB0byBkbyB0aGUgaV9zaXplIHVwZGF0ZXMgaGVyZS4KIAkgKi8KLQlwb3MgKz0gY29waWVkOwotCi0JaWYgKHBvcyA+IGlub2RlLT5pX3NpemUpIHsKKwlpZiAocG9zICsgY29waWVkID4gaW5vZGUtPmlfc2l6ZSkgewogCQlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIG15dGg7CiAJCWxvY2tfZGVwdGggPSByZWlzZXJmc193cml0ZV9sb2NrX29uY2UoaW5vZGUtPmlfc2IpOwogCQlsb2NrZWQgPSB0cnVlOwpAQCAtMjcyMSw3ICsyNzI4LDcgQEAKIAkJCWdvdG8gam91cm5hbF9lcnJvcjsKIAogCQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwotCQlpbm9kZS0+aV9zaXplID0gcG9zOworCQlpbm9kZS0+aV9zaXplID0gcG9zICsgY29waWVkOwogCQkvKgogCQkgKiB0aGlzIHdpbGwganVzdCBuZXN0IGludG8gb3VyIHRyYW5zYWN0aW9uLiAgSXQncyBpbXBvcnRhbnQKIAkJICogdG8gdXNlIG1hcmtfaW5vZGVfZGlydHkgc28gdGhlIGlub2RlIGdldHMgcHVzaGVkIGFyb3VuZCBvbiB0aGUKQEAgLTI3NTEsNiArMjc1OCwxMCBAQAogCQlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgbG9ja19kZXB0aCk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXJlaXNlcmZzX3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7CisKIAlyZXR1cm4gcmV0ID09IDAgPyBjb3BpZWQgOiByZXQ7CiAKICAgICAgIGpvdXJuYWxfZXJyb3I6CkBAIC0zMDUxLDEzICszMDYyLDE0IEBACiBpbnQgcmVpc2VyZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWludCBlcnJvcjsKIAl1bnNpZ25lZCBpbnQgaWFfdmFsaWQ7CisJaW50IGRlcHRoOworCWludCBlcnJvcjsKIAogCS8qIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgcmVjdXJzaXZlIG5vdGlmeV9jaGFuZ2UgY2FsbHMgKi8KIAlpYV92YWxpZCA9IGF0dHItPmlhX3ZhbGlkICY9IH4oQVRUUl9LSUxMX1NVSUR8QVRUUl9LSUxMX1NHSUQpOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJZGVwdGggPSByZWlzZXJmc193cml0ZV9sb2NrX29uY2UoaW5vZGUtPmlfc2IpOwogCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewogCQkvKiB2ZXJzaW9uIDIgaXRlbXMgd2lsbCBiZSBjYXVnaHQgYnkgdGhlIHNfbWF4Ynl0ZXMgY2hlY2sKIAkJICoqIGRvbmUgZm9yIHVzIGluIHZtdHJ1bmNhdGUKQEAgLTMxMzgsOCArMzE1MCwxNyBAQAogCQkJCSAgICBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCQkJfQogCQl9Ci0JCWlmICghZXJyb3IpCisJCWlmICghZXJyb3IpIHsKKwkJCS8qCisJCQkgKiBSZWxheCB0aGUgbG9jayBoZXJlLCBhcyBpdCBtaWdodCB0cnVuY2F0ZSB0aGUKKwkJCSAqIGlub2RlIHBhZ2VzIGFuZCB3YWl0IGZvciBpbm9kZSBwYWdlcyBsb2Nrcy4KKwkJCSAqIFRvIHJlbGVhc2Ugc3VjaCBwYWdlIGxvY2ssIHRoZSBvd25lciBuZWVkcyB0aGUKKwkJCSAqIHJlaXNlcmZzIGxvY2sKKwkJCSAqLworCQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX29uY2UoaW5vZGUtPmlfc2IsIGRlcHRoKTsKIAkJCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CisJCQlkZXB0aCA9IHJlaXNlcmZzX3dyaXRlX2xvY2tfb25jZShpbm9kZS0+aV9zYik7CisJCX0KIAl9CiAKIAlpZiAoIWVycm9yICYmIHJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkgewpAQCAtMzE0OCw3ICszMTY5LDggQEAKIAl9CiAKICAgICAgIG91dDoKLQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX3VubG9ja19vbmNlKGlub2RlLT5pX3NiLCBkZXB0aCk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMgYi9mcy9yZWlzZXJmcy9pb2N0bC5jCmluZGV4IGFjZTc3NDUuLmY1MzUwNWQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMKKysrIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwpAQCAtMTA0LDkgKzEwNCwxMCBAQAogCQllcnIgPSBwdXRfdXNlcihpbm9kZS0+aV9nZW5lcmF0aW9uLCAoaW50IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOwogCWNhc2UgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT046Ci0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKSB7CiAJCQllcnIgPSAtRVBFUk07CiAJCQlicmVhazsKKwkJfQogCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IDJmOGE3ZTcuLjgzYWM0ZDMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTIwMDksMTAgKzIwMDksMTEgQEAKIAkJZGVzdHJveV93b3JrcXVldWUoY29tbWl0X3dxKTsKIAkJY29tbWl0X3dxID0gTlVMTDsKIAl9Ci0JcmVpc2VyZnNfd3JpdGVfbG9jayhzYik7CiAKIAlmcmVlX2pvdXJuYWxfcmFtKHNiKTsKIAorCXJlaXNlcmZzX3dyaXRlX2xvY2soc2IpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NTgsMTEgKzI3NTksMTggQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbDsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CisJaW50IHJldDsKIAorCS8qCisJICogVW5sb2NrIGhlcmUgdG8gYXZvaWQgdmFyaW91cyBSRUNMQUlNLUZTLU9OIDwtPiBJTi1SRUNMQUlNLUZTCisJICogZGVwZW5kZW5jeSBpbnZlcnNpb24gd2FybmluZ3MuCisJICovCisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHNiKTsKIAlqb3VybmFsID0gU0JfSk9VUk5BTChzYikgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCkpOwogCWlmICgham91cm5hbCkgewogCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjU2IiwKIAkJCQkgInVuYWJsZSB0byBnZXQgbWVtb3J5IGZvciBqb3VybmFsIHN0cnVjdHVyZSIpOworCQlyZWlzZXJmc193cml0ZV9sb2NrKHNiKTsKIAkJcmV0dXJuIDE7CiAJfQogCW1lbXNldChqb3VybmFsLCAwLCBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwpKTsKQEAgLTI3NzEsMTAgKzI3NzksMTIgQEAKIAlJTklUX0xJU1RfSEVBRCgmam91cm5hbC0+al93b3JraW5nX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZqb3VybmFsLT5qX2pvdXJuYWxfbGlzdCk7CiAJam91cm5hbC0+al9wZXJzaXN0ZW50X3RyYW5zID0gMDsKLQlpZiAocmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHNiLAotCQkJCQkgICBqb3VybmFsLT5qX2xpc3RfYml0bWFwLAotCQkJCQkgICByZWlzZXJmc19ibWFwX2NvdW50KHNiKSkpCisJcmV0ID0gcmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHNiLCBqb3VybmFsLT5qX2xpc3RfYml0bWFwLAorCQkJCQkgICByZWlzZXJmc19ibWFwX2NvdW50KHNiKSk7CisJcmVpc2VyZnNfd3JpdGVfbG9jayhzYik7CisJaWYgKHJldCkKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CisKIAlhbGxvY2F0ZV9iaXRtYXBfbm9kZXMoc2IpOwogCiAJLyogcmVzZXJ2ZWQgZm9yIGpvdXJuYWwgYXJlYSBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9sb2NrLmMgYi9mcy9yZWlzZXJmcy9sb2NrLmMKaW5kZXggZWUyY2ZjMC4uYjg3YWEyYyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbG9jay5jCisrKyBiL2ZzL3JlaXNlcmZzL2xvY2suYwpAQCAtODYsMyArODYsMTIgQEAKIAkJcmVpc2VyZnNfcGFuaWMoc2IsICIlcyBjYWxsZWQgd2l0aG91dCBrZXJuZWwgbG9jayBoZWxkICVkIiwKIAkJCSAgICAgICBjYWxsZXIpOwogfQorCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCit2b2lkIHJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IHJlaXNlcmZzX3NiX2luZm8gKnNiX2kgPSBSRUlTRVJGU19TQihzYik7CisKKwlXQVJOX09OQ0UoKHNiX2ktPmxvY2tfZGVwdGggPiAwKSwgIlVud2FudGVkIHJlY3Vyc2l2ZSByZWlzZXJmcyBsb2NrIVxuIik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL25hbWVpLmMgYi9mcy9yZWlzZXJmcy9uYW1laS5jCmluZGV4IGUyOTZmZjcuLjlkNGRjZjAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL25hbWVpLmMKKysrIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwpAQCAtOTIxLDYgKzkyMSw3IEBACiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKIAlpbnQgamJlZ2luX2NvdW50OwogCXVuc2lnbmVkIGxvbmcgc2F2ZWxpbms7CisJaW50IGRlcHRoOwogCiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKQEAgLTkzMiw3ICs5MzMsNyBAQAogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDIgKyAyICsKIAkgICAgNCAqIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOworCWRlcHRoID0gcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKGRpci0+aV9zYik7CiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF91bmxpbms7CkBAIC05OTMsNyArOTk0LDcgQEAKIAogCXJldHZhbCA9IGpvdXJuYWxfZW5kKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGgpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX3VubG9ja19vbmNlKGRpci0+aV9zYiwgZGVwdGgpOwogCXJldHVybiByZXR2YWw7CiAKICAgICAgIGVuZF91bmxpbms6CkBAIC0xMDAzLDcgKzEwMDQsNyBAQAogCWlmIChlcnIpCiAJCXJldHZhbCA9IGVycjsKICAgICAgIG91dF91bmxpbms6Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGRpci0+aV9zYik7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX29uY2UoZGlyLT5pX3NiLCBkZXB0aCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKaW5kZXggOGM3MDMzYS4uODFmMDlmYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0ci5jCkBAIC04Myw3ICs4Myw4IEBACiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOwogCXZmc19kcV9pbml0KGRpcik7CiAKLQltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwlyZWlzZXJmc19tdXRleF9sb2NrX25lc3RlZF9zYWZlKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCUlfTVVURVhfQ0hJTEQsIGRpci0+aV9zYik7CiAJZXJyb3IgPSBkaXItPmlfb3AtPnVubGluayhkaXIsIGRlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCkBAIC05OCw3ICs5OSw4IEBACiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOwogCXZmc19kcV9pbml0KGRpcik7CiAKLQltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwlyZWlzZXJmc19tdXRleF9sb2NrX25lc3RlZF9zYWZlKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCUlfTVVURVhfQ0hJTEQsIGRpci0+aV9zYik7CiAJZGVudHJ5X3VuaGFzaChkZW50cnkpOwogCWVycm9yID0gZGlyLT5pX29wLT5ybWRpcihkaXIsIGRlbnRyeSk7CiAJaWYgKCFlcnJvcikKQEAgLTIzNSwxNiArMjM3LDIyIEBACiAJaWYgKElTX1BSSVZBVEUoaW5vZGUpIHx8IGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCiAJCXJldHVybiAwOwogCisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgWEFUVFJfUkVQTEFDRSk7CiAJaWYgKElTX0VSUihkaXIpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGlyKTsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAoIWRpci0+ZF9pbm9kZSkgewogCQllcnIgPSAwOworCQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAkJZ290byBvdXRfZGlyOwogCX0KIAogCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOworCisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisKIAlidWYueGFkaXIgPSBkaXI7CiAJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLCBmaWxsX3dpdGhfZGVudHJpZXMsICZwb3MpOwogCXdoaWxlICgoZXJyID09IDAgfHwgZXJyID09IC1FTk9TUEMpICYmIGJ1Zi5jb3VudCkgewpAQCAtMjgzLDggKzI5MSw5IEBACiAJCWVyciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgYmxvY2tzKTsKIAkJaWYgKCFlcnIpIHsKIAkJCWludCBqZXJyb3I7Ci0JCQltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5kX3BhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCwKLQkJCQkJICBJX01VVEVYX1hBVFRSKTsKKwkJCXJlaXNlcmZzX211dGV4X2xvY2tfbmVzdGVkX3NhZmUoCisJCQkJCSAgJmRpci0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCSAgSV9NVVRFWF9YQVRUUiwgaW5vZGUtPmlfc2IpOwogCQkJZXJyID0gYWN0aW9uKGRpciwgZGF0YSk7CiAJCQlqZXJyb3IgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOwogCQkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKQEAgLTQ0Myw3ICs0NTIsOSBAQAogCX0KIAogCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJCWVyciA9IHhhdHRyX3VubGluayh4YWRpci0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAkJdXBkYXRlX2N0aW1lKGlub2RlKTsKIAl9CiAKQEAgLTQ3NywxNSArNDg4LDI0IEBACiAJaWYgKGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICghYnVmZmVyKQotCQlyZXR1cm4gbG9va3VwX2FuZF9kZWxldGVfeGF0dHIoaW5vZGUsIG5hbWUpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CisKKwlpZiAoIWJ1ZmZlcikgeworCQllcnIgPSBsb29rdXBfYW5kX2RlbGV0ZV94YXR0cihpbm9kZSwgbmFtZSk7CisJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCQlyZXR1cm4gZXJyOworCX0KIAogCWRlbnRyeSA9IHhhdHRyX2xvb2t1cChpbm9kZSwgbmFtZSwgZmxhZ3MpOwotCWlmIChJU19FUlIoZGVudHJ5KSkKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CisJfQogCiAJZG93bl93cml0ZSgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKIAorCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCiAJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAl3aGlsZSAoYnVmZmVyX3BvcyA8IGJ1ZmZlcl9zaXplIHx8IGJ1ZmZlcl9wb3MgPT0gMCkgewogCQlzaXplX3QgY2h1bms7CkBAIC01NDAsOCArNTYwLDEyIEBACiAJCQkuaWFfc2l6ZSA9IGJ1ZmZlcl9zaXplLAogCQkJLmlhX3ZhbGlkID0gQVRUUl9TSVpFIHwgQVRUUl9DVElNRSwKIAkJfTsKKworCQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCQltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKIAkJZG93bl93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCiAJCWVyciA9IHJlaXNlcmZzX3NldGF0dHIoZGVudHJ5LCAmbmV3YXR0cnMpOwogCQl1cF93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CiAJCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKaW5kZXggY2MzMmU2YS4uZGQyMGE3OCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKQEAgLTQ1NSw3ICs0NTUsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJaWYgKCFhY2wpCiAJCXJldHVybiAwOwogCWlmIChJU19FUlIoYWNsKSkKZGlmZiAtLWdpdCBhL2ZzL3NpZ25hbGZkLmMgYi9mcy9zaWduYWxmZC5jCmluZGV4IGIwNzU2NWMuLjFkYWJlNGUgMTAwNjQ0Ci0tLSBhL2ZzL3NpZ25hbGZkLmMKKysrIGIvZnMvc2lnbmFsZmQuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCSAqIGFub25faW5vZGVfZ2V0ZmQoKSB3aWxsIGluc3RhbGwgdGhlIGZkLgogCQkgKi8KIAkJdWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW3NpZ25hbGZkXSIsICZzaWduYWxmZF9mb3BzLCBjdHgsCi0JCQkJICAgICAgIGZsYWdzICYgKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spKTsKKwkJCQkgICAgICAgT19SRFdSIHwgKGZsYWdzICYgKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spKSk7CiAJCWlmICh1ZmQgPCAwKQogCQkJa2ZyZWUoY3R4KTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IDA3NTY5NGUuLmM0ZWNkNTIgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTQwMSw5ICs0MDEsOSBAQAogfQogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NUQVQ2NCAqLwogCi12b2lkIGlub2RlX2FkZF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpCisvKiBDYWxsZXIgaXMgaGVyZSByZXNwb25zaWJsZSBmb3Igc3VmZmljaWVudCBsb2NraW5nIChpZS4gaW5vZGUtPmlfbG9jaykgKi8KK3ZvaWQgX19pbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQogewotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaW5vZGUtPmlfYmxvY2tzICs9IGJ5dGVzID4+IDk7CiAJYnl0ZXMgJj0gNTExOwogCWlub2RlLT5pX2J5dGVzICs9IGJ5dGVzOwpAQCAtNDExLDYgKzQxMSwxMiBAQAogCQlpbm9kZS0+aV9ibG9ja3MrKzsKIAkJaW5vZGUtPmlfYnl0ZXMgLT0gNTEyOwogCX0KK30KKwordm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJX19pbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGJ5dGVzKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDE5ZWI3MGIuLmFmZjA0NmIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtOTAxLDggKzkwMSw5IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CisJfSBlbHNlIHsKKwkJZG9fcmVtb3VudF9zYihzLCBmbGFncywgZGF0YSwgMCk7CiAJfQotCWRvX3JlbW91bnRfc2IocywgZmxhZ3MsIGRhdGEsIDApOwogCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IDYwYzcwMmIuLmEwYTUwMGEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC00ODMsNyArNDgzLDggQEAKICAqCUBhdHRyOglhdHRyaWJ1dGUgZGVzY3JpcHRvci4KICAqLwogCi1pbnQgc3lzZnNfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyKQoraW50IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJQlVHX09OKCFrb2JqIHx8ICFrb2JqLT5zZCB8fCAhYXR0cik7CiAKQEAgLTQ5Nyw3ICs0OTgsOCBAQAogICoJQGF0dHI6CWF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCiAKLXZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyKQordm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKIHsKIAlzeXNmc19oYXNoX2FuZF9yZW1vdmUoa29iai0+c2QsIGF0dHItPmF0dHIubmFtZSk7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IGYwNWYyMzAuLjY5OWYzNzEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0xMDYsOCArMTA2LDEwIEBACiAJCQlyZXR1cm4gTlVMTDsKIAogCQl0ID0gYXRvbWljX2NtcHhjaGcoJnNkLT5zX2FjdGl2ZSwgdiwgdiArIDEpOwotCQlpZiAobGlrZWx5KHQgPT0gdikpCisJCWlmIChsaWtlbHkodCA9PSB2KSkgeworCQkJcndzZW1fYWNxdWlyZV9yZWFkKCZzZC0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCQkJcmV0dXJuIHNkOworCQl9CiAJCWlmICh0IDwgMCkKIAkJCXJldHVybiBOVUxMOwogCkBAIC0xMzAsNiArMTMyLDcgQEAKIAlpZiAodW5saWtlbHkoIXNkKSkKIAkJcmV0dXJuOwogCisJcndzZW1fcmVsZWFzZSgmc2QtPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAl2ID0gYXRvbWljX2RlY19yZXR1cm4oJnNkLT5zX2FjdGl2ZSk7CiAJaWYgKGxpa2VseSh2ICE9IFNEX0RFQUNUSVZBVEVEX0JJQVMpKQogCQlyZXR1cm47CkBAIC0xOTQsMTUgKzE5NywyMSBAQAogCUJVR19PTihzZC0+c19zaWJsaW5nIHx8ICEoc2QtPnNfZmxhZ3MgJiBTWVNGU19GTEFHX1JFTU9WRUQpKTsKIAlzZC0+c19zaWJsaW5nID0gKHZvaWQgKikmd2FpdDsKIAorCXJ3c2VtX2FjcXVpcmUoJnNkLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CiAJLyogYXRvbWljX2FkZF9yZXR1cm4oKSBpcyBhIG1iKCksIHB1dF9hY3RpdmUoKSB3aWxsIGFsd2F5cyBzZWUKIAkgKiB0aGUgdXBkYXRlZCBzZC0+c19zaWJsaW5nLgogCSAqLwogCXYgPSBhdG9taWNfYWRkX3JldHVybihTRF9ERUFDVElWQVRFRF9CSUFTLCAmc2QtPnNfYWN0aXZlKTsKIAotCWlmICh2ICE9IFNEX0RFQUNUSVZBVEVEX0JJQVMpCisJaWYgKHYgIT0gU0RfREVBQ1RJVkFURURfQklBUykgeworCQlsb2NrX2NvbnRlbmRlZCgmc2QtPmRlcF9tYXAsIF9SRVRfSVBfKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmd2FpdCk7CisJfQogCiAJc2QtPnNfc2libGluZyA9IE5VTEw7CisKKwlsb2NrX2FjcXVpcmVkKCZzZC0+ZGVwX21hcCwgX1JFVF9JUF8pOworCXJ3c2VtX3JlbGVhc2UoJnNkLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiB9CiAKIHN0YXRpYyBpbnQgc3lzZnNfYWxsb2NfaW5vKGlub190ICpwaW5vKQpAQCAtMzQ1LDYgKzM1NCw3IEBACiAKIAlhdG9taWNfc2V0KCZzZC0+c19jb3VudCwgMSk7CiAJYXRvbWljX3NldCgmc2QtPnNfYWN0aXZlLCAwKTsKKwlzeXNmc19kaXJlbnRfaW5pdF9sb2NrZGVwKHNkKTsKIAogCXNkLT5zX25hbWUgPSBuYW1lOwogCXNkLT5zX21vZGUgPSBtb2RlOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3lzZnMuaCBiL2ZzL3N5c2ZzL3N5c2ZzLmgKaW5kZXggY2E1MmU3Yi4uY2RkOTM3NyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC04LDYgKzgsNyBAQAogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKIHN0cnVjdCBzeXNmc19vcGVuX2RpcmVudDsKQEAgLTUwLDYgKzUxLDkgQEAKIHN0cnVjdCBzeXNmc19kaXJlbnQgewogCWF0b21pY190CQlzX2NvdW50OwogCWF0b21pY190CQlzX2FjdGl2ZTsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcAlkZXBfbWFwOworI2VuZGlmCiAJc3RydWN0IHN5c2ZzX2RpcmVudAkqc19wYXJlbnQ7CiAJc3RydWN0IHN5c2ZzX2RpcmVudAkqc19zaWJsaW5nOwogCWNvbnN0IGNoYXIJCSpzX25hbWU7CkBAIC04NCw2ICs4OCwxNyBAQAogCXJldHVybiBzZC0+c19mbGFncyAmIFNZU0ZTX1RZUEVfTUFTSzsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisjZGVmaW5lIHN5c2ZzX2RpcmVudF9pbml0X2xvY2tkZXAoc2QpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJXAorCWxvY2tkZXBfaW5pdF9tYXAoJnNkLT5kZXBfbWFwLCAic19hY3RpdmUiLCAmX19rZXksIDApOwlcCit9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBzeXNmc19kaXJlbnRfaW5pdF9sb2NrZGVwKHNkKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKIC8qCiAgKiBDb250ZXh0IHN0cnVjdHVyZSB0byBiZSB1c2VkIHdoaWxlIGFkZGluZy9yZW1vdmluZyBub2Rlcy4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvdGltZXJmZC5jIGIvZnMvdGltZXJmZC5jCmluZGV4IGIwNDJiZDcuLjFiZmM5NWEgMTAwNjQ0Ci0tLSBhL2ZzL3RpbWVyZmQuYworKysgYi9mcy90aW1lcmZkLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCWhydGltZXJfaW5pdCgmY3R4LT50bXIsIGNsb2NraWQsIEhSVElNRVJfTU9ERV9BQlMpOwogCiAJdWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW3RpbWVyZmRdIiwgJnRpbWVyZmRfZm9wcywgY3R4LAotCQkJICAgICAgIGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUyk7CisJCQkgICAgICAgT19SRFdSIHwgKGZsYWdzICYgVEZEX1NIQVJFRF9GQ05UTF9GTEFHUykpOwogCWlmICh1ZmQgPCAwKQogCQlrZnJlZShjdHgpOwogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9nYy5jIGIvZnMvdWJpZnMvZ2MuYwppbmRleCA2MThjMjcwLi5lNWEzZDhlIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9nYy5jCisrKyBiL2ZzL3ViaWZzL2djLmMKQEAgLTU0LDYgKzU0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Rfc29ydC5oPgogI2luY2x1ZGUgInViaWZzLmgiCiAKIC8qCkBAIC0xMDgsMTAxICsxMDksNiBAQAogfQogCiAvKioKLSAqIGxpc3Rfc29ydCAtIHNvcnQgYSBsaXN0LgotICogQHByaXY6IHByaXZhdGUgZGF0YSwgcGFzc2VkIHRvIEBjbXAKLSAqIEBoZWFkOiB0aGUgbGlzdCB0byBzb3J0Ci0gKiBAY21wOiB0aGUgZWxlbWVudHMgY29tcGFyaXNvbiBmdW5jdGlvbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnkgTWFyayBKIFJvYmVydHMgPG1qckB6bmV4Lm9yZz4uIEl0Ci0gKiBpbXBsZW1lbnRzICJtZXJnZSBzb3J0IiB3aGljaCBoYXMgTyhubG9nKG4pKSBjb21wbGV4aXR5LiBUaGUgbGlzdCBpcyBzb3J0ZWQKLSAqIGluIGFzY2VuZGluZyBvcmRlci4KLSAqCi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBAY21wIGlzIHN1cHBvc2VkIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGlmIEBhIGlzCi0gKiB0aGFuIEBiLCBhbmQgYSBwb3NpdGl2ZSB2YWx1ZSBpZiBAYSBpcyBncmVhdGVyIHRoYW4gQGIuIElmIEBhIGFuZCBAYiBhcmUKLSAqIGVxdWl2YWxlbnQsIHRoZW4gaXQgZG9lcyBub3QgbWF0dGVyIHdoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICovCi1zdGF0aWMgdm9pZCBsaXN0X3NvcnQodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKLQkJICAgICAgaW50ICgqY21wKSh2b2lkICpwcml2LCBzdHJ1Y3QgbGlzdF9oZWFkICphLAotCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpiKSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSwgKmUsICpsaXN0LCAqdGFpbCwgKm9sZGhlYWQ7Ci0JaW50IGluc2l6ZSwgbm1lcmdlcywgcHNpemUsIHFzaXplLCBpOwotCi0JaWYgKGxpc3RfZW1wdHkoaGVhZCkpCi0JCXJldHVybjsKLQotCWxpc3QgPSBoZWFkLT5uZXh0OwotCWxpc3RfZGVsKGhlYWQpOwotCWluc2l6ZSA9IDE7Ci0JZm9yICg7OykgewotCQlwID0gb2xkaGVhZCA9IGxpc3Q7Ci0JCWxpc3QgPSB0YWlsID0gTlVMTDsKLQkJbm1lcmdlcyA9IDA7Ci0KLQkJd2hpbGUgKHApIHsKLQkJCW5tZXJnZXMrKzsKLQkJCXEgPSBwOwotCQkJcHNpemUgPSAwOwotCQkJZm9yIChpID0gMDsgaSA8IGluc2l6ZTsgaSsrKSB7Ci0JCQkJcHNpemUrKzsKLQkJCQlxID0gcS0+bmV4dCA9PSBvbGRoZWFkID8gTlVMTCA6IHEtPm5leHQ7Ci0JCQkJaWYgKCFxKQotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJcXNpemUgPSBpbnNpemU7Ci0JCQl3aGlsZSAocHNpemUgPiAwIHx8IChxc2l6ZSA+IDAgJiYgcSkpIHsKLQkJCQlpZiAoIXBzaXplKSB7Ci0JCQkJCWUgPSBxOwotCQkJCQlxID0gcS0+bmV4dDsKLQkJCQkJcXNpemUtLTsKLQkJCQkJaWYgKHEgPT0gb2xkaGVhZCkKLQkJCQkJCXEgPSBOVUxMOwotCQkJCX0gZWxzZSBpZiAoIXFzaXplIHx8ICFxKSB7Ci0JCQkJCWUgPSBwOwotCQkJCQlwID0gcC0+bmV4dDsKLQkJCQkJcHNpemUtLTsKLQkJCQkJaWYgKHAgPT0gb2xkaGVhZCkKLQkJCQkJCXAgPSBOVUxMOwotCQkJCX0gZWxzZSBpZiAoY21wKHByaXYsIHAsIHEpIDw9IDApIHsKLQkJCQkJZSA9IHA7Ci0JCQkJCXAgPSBwLT5uZXh0OwotCQkJCQlwc2l6ZS0tOwotCQkJCQlpZiAocCA9PSBvbGRoZWFkKQotCQkJCQkJcCA9IE5VTEw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZSA9IHE7Ci0JCQkJCXEgPSBxLT5uZXh0OwotCQkJCQlxc2l6ZS0tOwotCQkJCQlpZiAocSA9PSBvbGRoZWFkKQotCQkJCQkJcSA9IE5VTEw7Ci0JCQkJfQotCQkJCWlmICh0YWlsKQotCQkJCQl0YWlsLT5uZXh0ID0gZTsKLQkJCQllbHNlCi0JCQkJCWxpc3QgPSBlOwotCQkJCWUtPnByZXYgPSB0YWlsOwotCQkJCXRhaWwgPSBlOwotCQkJfQotCQkJcCA9IHE7Ci0JCX0KLQotCQl0YWlsLT5uZXh0ID0gbGlzdDsKLQkJbGlzdC0+cHJldiA9IHRhaWw7Ci0KLQkJaWYgKG5tZXJnZXMgPD0gMSkKLQkJCWJyZWFrOwotCi0JCWluc2l6ZSAqPSAyOwotCX0KLQotCWhlYWQtPm5leHQgPSBsaXN0OwotCWhlYWQtPnByZXYgPSBsaXN0LT5wcmV2OwotCWxpc3QtPnByZXYtPm5leHQgPSBoZWFkOwotCWxpc3QtPnByZXYgPSBoZWFkOwotfQotCi0vKioKICAqIGRhdGFfbm9kZXNfY21wIC0gY29tcGFyZSAyIGRhdGEgbm9kZXMuCiAgKiBAcHJpdjogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAYTogZmlyc3QgZGF0YSBub2RlCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jCmluZGV4IDI1MTIxMjUuLjg4M2NhNWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jCkBAIC0yNTEsOCArMjUxLDkgQEAKIAlpZiAobW9kZSAhPSBpbm9kZS0+aV9tb2RlKSB7CiAJCXN0cnVjdCBpYXR0ciBpYXR0cjsKIAotCQlpYXR0ci5pYV92YWxpZCA9IEFUVFJfTU9ERTsKKwkJaWF0dHIuaWFfdmFsaWQgPSBBVFRSX01PREUgfCBBVFRSX0NUSU1FOwogCQlpYXR0ci5pYV9tb2RlID0gbW9kZTsKKwkJaWF0dHIuaWFfY3RpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCiAJCWVycm9yID0gLXhmc19zZXRhdHRyKFhGU19JKGlub2RlKSwgJmlhdHRyLCBYRlNfQVRUUl9OT0FDTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKaW5kZXggYzQwODM0Yi4uYzIyYTYwOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCkBAIC0zMyw1MSArMzMsNTUgQEAKIHN0cnVjdCB4bG9nX3RpY2tldDsKIHN0cnVjdCBsb2c7CiAKLSNkZWZpbmUgREVGSU5FX0FUVFJfTElTVF9FVkVOVChuYW1lKSBcCi1UUkFDRV9FVkVOVChuYW1lLCBcCi0JVFBfUFJPVE8oc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY3R4KSwgXAotCVRQX0FSR1MoY3R4KSwgXAotCVRQX1NUUlVDVF9fZW50cnkoIFwKLQkJX19maWVsZChkZXZfdCwgZGV2KSBcCi0JCV9fZmllbGQoeGZzX2lub190LCBpbm8pIFwKLQkJX19maWVsZCh1MzIsIGhhc2h2YWwpIFwKLQkJX19maWVsZCh1MzIsIGJsa25vKSBcCi0JCV9fZmllbGQodTMyLCBvZmZzZXQpIFwKLQkJX19maWVsZCh2b2lkICosIGFsaXN0KSBcCi0JCV9fZmllbGQoaW50LCBidWZzaXplKSBcCi0JCV9fZmllbGQoaW50LCBjb3VudCkgXAotCQlfX2ZpZWxkKGludCwgZmlyc3R1KSBcCi0JCV9fZmllbGQoaW50LCBkdXBjbnQpIFwKLQkJX19maWVsZChpbnQsIGZsYWdzKSBcCi0JKSwgXAotCVRQX2Zhc3RfYXNzaWduKCBcCi0JCV9fZW50cnktPmRldiA9IFZGU19JKGN0eC0+ZHApLT5pX3NiLT5zX2RldjsgXAotCQlfX2VudHJ5LT5pbm8gPSBjdHgtPmRwLT5pX2lubzsgXAotCQlfX2VudHJ5LT5oYXNodmFsID0gY3R4LT5jdXJzb3ItPmhhc2h2YWw7IFwKLQkJX19lbnRyeS0+Ymxrbm8gPSBjdHgtPmN1cnNvci0+Ymxrbm87IFwKLQkJX19lbnRyeS0+b2Zmc2V0ID0gY3R4LT5jdXJzb3ItPm9mZnNldDsgXAotCQlfX2VudHJ5LT5hbGlzdCA9IGN0eC0+YWxpc3Q7IFwKLQkJX19lbnRyeS0+YnVmc2l6ZSA9IGN0eC0+YnVmc2l6ZTsgXAotCQlfX2VudHJ5LT5jb3VudCA9IGN0eC0+Y291bnQ7IFwKLQkJX19lbnRyeS0+Zmlyc3R1ID0gY3R4LT5maXJzdHU7IFwKLQkJX19lbnRyeS0+ZmxhZ3MgPSBjdHgtPmZsYWdzOyBcCi0JKSwgXAotCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggY3Vyc29yIGgvYi9vIDB4JXgvMHgleC8ldSBkdXBjbnQgJXUgIiBcCi0JCSAgImFsaXN0IDB4JXAgc2l6ZSAldSBjb3VudCAldSBmaXJzdHUgJXUgZmxhZ3MgJWQgJXMiLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgICBfX2VudHJ5LT5pbm8sIFwKLQkJICAgX19lbnRyeS0+aGFzaHZhbCwgXAotCQkgICBfX2VudHJ5LT5ibGtubywgXAotCQkgICBfX2VudHJ5LT5vZmZzZXQsIFwKLQkJICAgX19lbnRyeS0+ZHVwY250LCBcCi0JCSAgIF9fZW50cnktPmFsaXN0LCBcCi0JCSAgIF9fZW50cnktPmJ1ZnNpemUsIFwKLQkJICAgX19lbnRyeS0+Y291bnQsIFwKLQkJICAgX19lbnRyeS0+Zmlyc3R1LCBcCi0JCSAgIF9fZW50cnktPmZsYWdzLCBcCi0JCSAgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0FUVFJfRkxBR1MpIFwKLQkpIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2F0dHJfbGlzdF9jbGFzcywKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjdHgpLAorCVRQX0FSR1MoY3R4KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQodTMyLCBoYXNodmFsKQorCQlfX2ZpZWxkKHUzMiwgYmxrbm8pCisJCV9fZmllbGQodTMyLCBvZmZzZXQpCisJCV9fZmllbGQodm9pZCAqLCBhbGlzdCkKKwkJX19maWVsZChpbnQsIGJ1ZnNpemUpCisJCV9fZmllbGQoaW50LCBjb3VudCkKKwkJX19maWVsZChpbnQsIGZpcnN0dSkKKwkJX19maWVsZChpbnQsIGR1cGNudCkKKwkJX19maWVsZChpbnQsIGZsYWdzKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IFZGU19JKGN0eC0+ZHApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gY3R4LT5kcC0+aV9pbm87CisJCV9fZW50cnktPmhhc2h2YWwgPSBjdHgtPmN1cnNvci0+aGFzaHZhbDsKKwkJX19lbnRyeS0+Ymxrbm8gPSBjdHgtPmN1cnNvci0+Ymxrbm87CisJCV9fZW50cnktPm9mZnNldCA9IGN0eC0+Y3Vyc29yLT5vZmZzZXQ7CisJCV9fZW50cnktPmFsaXN0ID0gY3R4LT5hbGlzdDsKKwkJX19lbnRyeS0+YnVmc2l6ZSA9IGN0eC0+YnVmc2l6ZTsKKwkJX19lbnRyeS0+Y291bnQgPSBjdHgtPmNvdW50OworCQlfX2VudHJ5LT5maXJzdHUgPSBjdHgtPmZpcnN0dTsKKwkJX19lbnRyeS0+ZmxhZ3MgPSBjdHgtPmZsYWdzOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBjdXJzb3IgaC9iL28gMHgleC8weCV4LyV1IGR1cGNudCAldSAiCisJCSAgImFsaXN0IDB4JXAgc2l6ZSAldSBjb3VudCAldSBmaXJzdHUgJXUgZmxhZ3MgJWQgJXMiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgIF9fZW50cnktPmlubywKKwkJICAgX19lbnRyeS0+aGFzaHZhbCwKKwkJICAgX19lbnRyeS0+Ymxrbm8sCisJCSAgIF9fZW50cnktPm9mZnNldCwKKwkJICAgX19lbnRyeS0+ZHVwY250LAorCQkgICBfX2VudHJ5LT5hbGlzdCwKKwkJICAgX19lbnRyeS0+YnVmc2l6ZSwKKwkJICAgX19lbnRyeS0+Y291bnQsCisJCSAgIF9fZW50cnktPmZpcnN0dSwKKwkJICAgX19lbnRyeS0+ZmxhZ3MsCisJCSAgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0FUVFJfRkxBR1MpCisJKQogKQorCisjZGVmaW5lIERFRklORV9BVFRSX0xJU1RfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19hdHRyX2xpc3RfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjdHgpLCBcCisJVFBfQVJHUyhjdHgpKQogREVGSU5FX0FUVFJfTElTVF9FVkVOVCh4ZnNfYXR0cl9saXN0X3NmKTsKIERFRklORV9BVFRSX0xJU1RfRVZFTlQoeGZzX2F0dHJfbGlzdF9zZl9hbGwpOwogREVGSU5FX0FUVFJfTElTVF9FVkVOVCh4ZnNfYXR0cl9saXN0X2xlYWYpOwpAQCAtMTc4LDkxICsxODIsOTkgQEAKIAkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkKICk7CiAKLSNkZWZpbmUgREVGSU5FX0JNQVBfRVZFTlQobmFtZSkgXAotVFJBQ0VfRVZFTlQobmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfZXh0bnVtX3QgaWR4LCBpbnQgc3RhdGUsIFwKLQkJIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwgXAotCVRQX0FSR1MoaXAsIGlkeCwgc3RhdGUsIGNhbGxlcl9pcCksIFwKLQlUUF9TVFJVQ1RfX2VudHJ5KCBcCi0JCV9fZmllbGQoZGV2X3QsIGRldikgXAotCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCi0JCV9fZmllbGQoeGZzX2V4dG51bV90LCBpZHgpIFwKLQkJX19maWVsZCh4ZnNfZmlsZW9mZl90LCBzdGFydG9mZikgXAotCQlfX2ZpZWxkKHhmc19mc2Jsb2NrX3QsIHN0YXJ0YmxvY2spIFwKLQkJX19maWVsZCh4ZnNfZmlsYmxrc190LCBibG9ja2NvdW50KSBcCi0JCV9fZmllbGQoeGZzX2V4bnRzdF90LCBzdGF0ZSkgXAotCQlfX2ZpZWxkKGludCwgYm1hcF9zdGF0ZSkgXAotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAotCSksIFwKLQlUUF9mYXN0X2Fzc2lnbiggXAotCQlzdHJ1Y3QgeGZzX2lmb3JrCSppZnAgPSAoc3RhdGUgJiBCTUFQX0FUVFJGT1JLKSA/IFwKLQkJCQkJCWlwLT5pX2FmcCA6ICZpcC0+aV9kZjsgXAotCQlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwlyOyBcCi0JXAotCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpLCAmcik7IFwKLQkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsgXAotCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87IFwKLQkJX19lbnRyeS0+aWR4ID0gaWR4OyBcCi0JCV9fZW50cnktPnN0YXJ0b2ZmID0gci5icl9zdGFydG9mZjsgXAotCQlfX2VudHJ5LT5zdGFydGJsb2NrID0gci5icl9zdGFydGJsb2NrOyBcCi0JCV9fZW50cnktPmJsb2NrY291bnQgPSByLmJyX2Jsb2NrY291bnQ7IFwKLQkJX19lbnRyeS0+c3RhdGUgPSByLmJyX3N0YXRlOyBcCi0JCV9fZW50cnktPmJtYXBfc3RhdGUgPSBzdGF0ZTsgXAotCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzdGF0ZSAlcyBpZHggJWxkICIgXAotCQkgICJvZmZzZXQgJWxsZCBibG9jayAlcyBjb3VudCAlbGxkIGZsYWcgJWQgY2FsbGVyICVwZiIsIFwKLQkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCi0JCSAgX19lbnRyeS0+aW5vLCBcCi0JCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5ibWFwX3N0YXRlLCAifCIsIFhGU19CTUFQX0VYVF9GTEFHUyksIFwKLQkJICAobG9uZylfX2VudHJ5LT5pZHgsIFwKLQkJICBfX2VudHJ5LT5zdGFydG9mZiwgXAotCQkgIHhmc19mbXRmc2Jsb2NrKF9fZW50cnktPnN0YXJ0YmxvY2spLCBcCi0JCSAgX19lbnRyeS0+YmxvY2tjb3VudCwgXAotCQkgIF9fZW50cnktPnN0YXRlLCBcCi0JCSAgKGNoYXIgKilfX2VudHJ5LT5jYWxsZXJfaXApIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2JtYXBfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19leHRudW1fdCBpZHgsIGludCBzdGF0ZSwKKwkJIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwKKwlUUF9BUkdTKGlwLCBpZHgsIHN0YXRlLCBjYWxsZXJfaXApLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykKKwkJX19maWVsZCh4ZnNfZXh0bnVtX3QsIGlkeCkKKwkJX19maWVsZCh4ZnNfZmlsZW9mZl90LCBzdGFydG9mZikKKwkJX19maWVsZCh4ZnNfZnNibG9ja190LCBzdGFydGJsb2NrKQorCQlfX2ZpZWxkKHhmc19maWxibGtzX3QsIGJsb2NrY291bnQpCisJCV9fZmllbGQoeGZzX2V4bnRzdF90LCBzdGF0ZSkKKwkJX19maWVsZChpbnQsIGJtYXBfc3RhdGUpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgY2FsbGVyX2lwKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCXN0cnVjdCB4ZnNfaWZvcmsJKmlmcCA9IChzdGF0ZSAmIEJNQVBfQVRUUkZPUkspID8KKwkJCQkJCWlwLT5pX2FmcCA6ICZpcC0+aV9kZjsKKwkJc3RydWN0IHhmc19ibWJ0X2lyZWMJcjsKKworCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpLCAmcik7CisJCV9fZW50cnktPmRldiA9IFZGU19JKGlwKS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsKKwkJX19lbnRyeS0+aWR4ID0gaWR4OworCQlfX2VudHJ5LT5zdGFydG9mZiA9IHIuYnJfc3RhcnRvZmY7CisJCV9fZW50cnktPnN0YXJ0YmxvY2sgPSByLmJyX3N0YXJ0YmxvY2s7CisJCV9fZW50cnktPmJsb2NrY291bnQgPSByLmJyX2Jsb2NrY291bnQ7CisJCV9fZW50cnktPnN0YXRlID0gci5icl9zdGF0ZTsKKwkJX19lbnRyeS0+Ym1hcF9zdGF0ZSA9IHN0YXRlOworCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHN0YXRlICVzIGlkeCAlbGQgIgorCQkgICJvZmZzZXQgJWxsZCBibG9jayAlcyBjb3VudCAlbGxkIGZsYWcgJWQgY2FsbGVyICVwZiIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5ibWFwX3N0YXRlLCAifCIsIFhGU19CTUFQX0VYVF9GTEFHUyksCisJCSAgKGxvbmcpX19lbnRyeS0+aWR4LAorCQkgIF9fZW50cnktPnN0YXJ0b2ZmLAorCQkgIHhmc19mbXRmc2Jsb2NrKF9fZW50cnktPnN0YXJ0YmxvY2spLAorCQkgIF9fZW50cnktPmJsb2NrY291bnQsCisJCSAgX19lbnRyeS0+c3RhdGUsCisJCSAgKGNoYXIgKilfX2VudHJ5LT5jYWxsZXJfaXApCiApCiAKKyNkZWZpbmUgREVGSU5FX0JNQVBfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19ibWFwX2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19leHRudW1fdCBpZHgsIGludCBzdGF0ZSwgXAorCQkgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCisJVFBfQVJHUyhpcCwgaWR4LCBzdGF0ZSwgY2FsbGVyX2lwKSkKIERFRklORV9CTUFQX0VWRU5UKHhmc19pZXh0X3JlbW92ZSk7CiBERUZJTkVfQk1BUF9FVkVOVCh4ZnNfYm1hcF9wcmVfdXBkYXRlKTsKIERFRklORV9CTUFQX0VWRU5UKHhmc19ibWFwX3Bvc3RfdXBkYXRlKTsKIERFRklORV9CTUFQX0VWRU5UKHhmc19leHRsaXN0KTsKIAotI2RlZmluZSBERUZJTkVfQlVGX0VWRU5UKHRuYW1lKSBcCi1UUkFDRV9FVkVOVCh0bmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCB4ZnNfYnVmICpicCwgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCi0JVFBfQVJHUyhicCwgY2FsbGVyX2lwKSwgXAotCVRQX1NUUlVDVF9fZW50cnkoIFwKLQkJX19maWVsZChkZXZfdCwgZGV2KSBcCi0JCV9fZmllbGQoeGZzX2RhZGRyX3QsIGJubykgXAotCQlfX2ZpZWxkKHNpemVfdCwgYnVmZmVyX2xlbmd0aCkgXAotCQlfX2ZpZWxkKGludCwgaG9sZCkgXAotCQlfX2ZpZWxkKGludCwgcGluY291bnQpIFwKLQkJX19maWVsZCh1bnNpZ25lZCwgbG9ja3ZhbCkgXAotCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykgXAotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAotCSksIFwKLQlUUF9mYXN0X2Fzc2lnbiggXAotCQlfX2VudHJ5LT5kZXYgPSBicC0+Yl90YXJnZXQtPmJ0X2RldjsgXAotCQlfX2VudHJ5LT5ibm8gPSBicC0+Yl9ibjsgXAotCQlfX2VudHJ5LT5idWZmZXJfbGVuZ3RoID0gYnAtPmJfYnVmZmVyX2xlbmd0aDsgXAotCQlfX2VudHJ5LT5ob2xkID0gYXRvbWljX3JlYWQoJmJwLT5iX2hvbGQpOyBcCi0JCV9fZW50cnktPnBpbmNvdW50ID0gYXRvbWljX3JlYWQoJmJwLT5iX3Bpbl9jb3VudCk7IFwKLQkJX19lbnRyeS0+bG9ja3ZhbCA9IHhmc19idWZfbG9ja192YWx1ZShicCk7IFwKLQkJX19lbnRyeS0+ZmxhZ3MgPSBicC0+Yl9mbGFnczsgXAotCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYm5vIDB4JWxseCBsZW4gMHglenggaG9sZCAlZCBwaW5jb3VudCAlZCAiIFwKLQkJICAibG9jayAlZCBmbGFncyAlcyBjYWxsZXIgJXBmIiwgXAotCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmJubywgXAotCQkgIF9fZW50cnktPmJ1ZmZlcl9sZW5ndGgsIFwKLQkJICBfX2VudHJ5LT5ob2xkLCBcCi0JCSAgX19lbnRyeS0+cGluY291bnQsIFwKLQkJICBfX2VudHJ5LT5sb2NrdmFsLCBcCi0JCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBYRlNfQlVGX0ZMQUdTKSwgXAotCQkgICh2b2lkICopX19lbnRyeS0+Y2FsbGVyX2lwKSBcCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19idWZfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19idWYgKmJwLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksCisJVFBfQVJHUyhicCwgY2FsbGVyX2lwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2RhZGRyX3QsIGJubykKKwkJX19maWVsZChzaXplX3QsIGJ1ZmZlcl9sZW5ndGgpCisJCV9fZmllbGQoaW50LCBob2xkKQorCQlfX2ZpZWxkKGludCwgcGluY291bnQpCisJCV9fZmllbGQodW5zaWduZWQsIGxvY2t2YWwpCisJCV9fZmllbGQodW5zaWduZWQsIGZsYWdzKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBicC0+Yl90YXJnZXQtPmJ0X2RldjsKKwkJX19lbnRyeS0+Ym5vID0gYnAtPmJfYm47CisJCV9fZW50cnktPmJ1ZmZlcl9sZW5ndGggPSBicC0+Yl9idWZmZXJfbGVuZ3RoOworCQlfX2VudHJ5LT5ob2xkID0gYXRvbWljX3JlYWQoJmJwLT5iX2hvbGQpOworCQlfX2VudHJ5LT5waW5jb3VudCA9IGF0b21pY19yZWFkKCZicC0+Yl9waW5fY291bnQpOworCQlfX2VudHJ5LT5sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJwKTsKKwkJX19lbnRyeS0+ZmxhZ3MgPSBicC0+Yl9mbGFnczsKKwkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYm5vIDB4JWxseCBsZW4gMHglenggaG9sZCAlZCBwaW5jb3VudCAlZCAiCisJCSAgImxvY2sgJWQgZmxhZ3MgJXMgY2FsbGVyICVwZiIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmJubywKKwkJICBfX2VudHJ5LT5idWZmZXJfbGVuZ3RoLAorCQkgIF9fZW50cnktPmhvbGQsCisJCSAgX19lbnRyeS0+cGluY291bnQsCisJCSAgX19lbnRyeS0+bG9ja3ZhbCwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCAifCIsIFhGU19CVUZfRkxBR1MpLAorCQkgICh2b2lkICopX19lbnRyeS0+Y2FsbGVyX2lwKQogKQorCisjZGVmaW5lIERFRklORV9CVUZfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19idWZfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2J1ZiAqYnAsIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwgXAorCVRQX0FSR1MoYnAsIGNhbGxlcl9pcCkpCiBERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfaW5pdCk7CiBERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfZnJlZSk7CiBERUZJTkVfQlVGX0VWRU5UKHhmc19idWZfaG9sZCk7CkBAIC0yOTksNDEgKzMxMSw0NSBAQAogREVGSU5FX0JVRl9FVkVOVCh4ZnNfaW5vZGVfaXRlbV9wdXNoKTsKIAogLyogcGFzcyBmbGFncyBleHBsaWNpdGx5ICovCi0jZGVmaW5lIERFRklORV9CVUZfRkxBR1NfRVZFTlQodG5hbWUpIFwKLVRSQUNFX0VWRU5UKHRuYW1lLCBcCi0JVFBfUFJPVE8oc3RydWN0IHhmc19idWYgKmJwLCB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCi0JVFBfQVJHUyhicCwgZmxhZ3MsIGNhbGxlcl9pcCksIFwKLQlUUF9TVFJVQ1RfX2VudHJ5KCBcCi0JCV9fZmllbGQoZGV2X3QsIGRldikgXAotCQlfX2ZpZWxkKHhmc19kYWRkcl90LCBibm8pIFwKLQkJX19maWVsZChzaXplX3QsIGJ1ZmZlcl9sZW5ndGgpIFwKLQkJX19maWVsZChpbnQsIGhvbGQpIFwKLQkJX19maWVsZChpbnQsIHBpbmNvdW50KSBcCi0JCV9fZmllbGQodW5zaWduZWQsIGxvY2t2YWwpIFwKLQkJX19maWVsZCh1bnNpZ25lZCwgZmxhZ3MpIFwKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjYWxsZXJfaXApIFwKLQkpLCBcCi0JVFBfZmFzdF9hc3NpZ24oIFwKLQkJX19lbnRyeS0+ZGV2ID0gYnAtPmJfdGFyZ2V0LT5idF9kZXY7IFwKLQkJX19lbnRyeS0+Ym5vID0gYnAtPmJfYm47IFwKLQkJX19lbnRyeS0+YnVmZmVyX2xlbmd0aCA9IGJwLT5iX2J1ZmZlcl9sZW5ndGg7IFwKLQkJX19lbnRyeS0+ZmxhZ3MgPSBmbGFnczsgXAotCQlfX2VudHJ5LT5ob2xkID0gYXRvbWljX3JlYWQoJmJwLT5iX2hvbGQpOyBcCi0JCV9fZW50cnktPnBpbmNvdW50ID0gYXRvbWljX3JlYWQoJmJwLT5iX3Bpbl9jb3VudCk7IFwKLQkJX19lbnRyeS0+bG9ja3ZhbCA9IHhmc19idWZfbG9ja192YWx1ZShicCk7IFwKLQkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOyBcCi0JKSwgXAotCVRQX3ByaW50aygiZGV2ICVkOiVkIGJubyAweCVsbHggbGVuIDB4JXp4IGhvbGQgJWQgcGluY291bnQgJWQgIiBcCi0JCSAgImxvY2sgJWQgZmxhZ3MgJXMgY2FsbGVyICVwZiIsIFwKLQkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5ibm8sIFwKLQkJICBfX2VudHJ5LT5idWZmZXJfbGVuZ3RoLCBcCi0JCSAgX19lbnRyeS0+aG9sZCwgXAotCQkgIF9fZW50cnktPnBpbmNvdW50LCBcCi0JCSAgX19lbnRyeS0+bG9ja3ZhbCwgXAotCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0JVRl9GTEFHUyksIFwKLQkJICAodm9pZCAqKV9fZW50cnktPmNhbGxlcl9pcCkgXAorREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfYnVmX2ZsYWdzX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfYnVmICpicCwgdW5zaWduZWQgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwKKwlUUF9BUkdTKGJwLCBmbGFncywgY2FsbGVyX2lwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2RhZGRyX3QsIGJubykKKwkJX19maWVsZChzaXplX3QsIGJ1ZmZlcl9sZW5ndGgpCisJCV9fZmllbGQoaW50LCBob2xkKQorCQlfX2ZpZWxkKGludCwgcGluY291bnQpCisJCV9fZmllbGQodW5zaWduZWQsIGxvY2t2YWwpCisJCV9fZmllbGQodW5zaWduZWQsIGZsYWdzKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBicC0+Yl90YXJnZXQtPmJ0X2RldjsKKwkJX19lbnRyeS0+Ym5vID0gYnAtPmJfYm47CisJCV9fZW50cnktPmJ1ZmZlcl9sZW5ndGggPSBicC0+Yl9idWZmZXJfbGVuZ3RoOworCQlfX2VudHJ5LT5mbGFncyA9IGZsYWdzOworCQlfX2VudHJ5LT5ob2xkID0gYXRvbWljX3JlYWQoJmJwLT5iX2hvbGQpOworCQlfX2VudHJ5LT5waW5jb3VudCA9IGF0b21pY19yZWFkKCZicC0+Yl9waW5fY291bnQpOworCQlfX2VudHJ5LT5sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJwKTsKKwkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYm5vIDB4JWxseCBsZW4gMHglenggaG9sZCAlZCBwaW5jb3VudCAlZCAiCisJCSAgImxvY2sgJWQgZmxhZ3MgJXMgY2FsbGVyICVwZiIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmJubywKKwkJICBfX2VudHJ5LT5idWZmZXJfbGVuZ3RoLAorCQkgIF9fZW50cnktPmhvbGQsCisJCSAgX19lbnRyeS0+cGluY291bnQsCisJCSAgX19lbnRyeS0+bG9ja3ZhbCwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCAifCIsIFhGU19CVUZfRkxBR1MpLAorCQkgICh2b2lkICopX19lbnRyeS0+Y2FsbGVyX2lwKQogKQorCisjZGVmaW5lIERFRklORV9CVUZfRkxBR1NfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19idWZfZmxhZ3NfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2J1ZiAqYnAsIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKGJwLCBmbGFncywgY2FsbGVyX2lwKSkKIERFRklORV9CVUZfRkxBR1NfRVZFTlQoeGZzX2J1Zl9maW5kKTsKIERFRklORV9CVUZfRkxBR1NfRVZFTlQoeGZzX2J1Zl9nZXQpOwogREVGSU5FX0JVRl9GTEFHU19FVkVOVCh4ZnNfYnVmX3JlYWQpOwpAQCAtMzc2LDU1ICszOTIsNTggQEAKIAkJICAodm9pZCAqKV9fZW50cnktPmNhbGxlcl9pcCkKICk7CiAKLSNkZWZpbmUgREVGSU5FX0JVRl9JVEVNX0VWRU5UKHRuYW1lKSBcCi1UUkFDRV9FVkVOVCh0bmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtICpiaXApLCBcCi0JVFBfQVJHUyhiaXApLCBcCi0JVFBfU1RSVUNUX19lbnRyeSggXAotCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKLQkJX19maWVsZCh4ZnNfZGFkZHJfdCwgYnVmX2JubykgXAotCQlfX2ZpZWxkKHNpemVfdCwgYnVmX2xlbikgXAotCQlfX2ZpZWxkKGludCwgYnVmX2hvbGQpIFwKLQkJX19maWVsZChpbnQsIGJ1Zl9waW5jb3VudCkgXAotCQlfX2ZpZWxkKGludCwgYnVmX2xvY2t2YWwpIFwKLQkJX19maWVsZCh1bnNpZ25lZCwgYnVmX2ZsYWdzKSBcCi0JCV9fZmllbGQodW5zaWduZWQsIGJsaV9yZWN1cikgXAotCQlfX2ZpZWxkKGludCwgYmxpX3JlZmNvdW50KSBcCi0JCV9fZmllbGQodW5zaWduZWQsIGJsaV9mbGFncykgXAotCQlfX2ZpZWxkKHZvaWQgKiwgbGlfZGVzYykgXAotCQlfX2ZpZWxkKHVuc2lnbmVkLCBsaV9mbGFncykgXAotCSksIFwKLQlUUF9mYXN0X2Fzc2lnbiggXAotCQlfX2VudHJ5LT5kZXYgPSBiaXAtPmJsaV9idWYtPmJfdGFyZ2V0LT5idF9kZXY7IFwKLQkJX19lbnRyeS0+YmxpX2ZsYWdzID0gYmlwLT5ibGlfZmxhZ3M7IFwKLQkJX19lbnRyeS0+YmxpX3JlY3VyID0gYmlwLT5ibGlfcmVjdXI7IFwKLQkJX19lbnRyeS0+YmxpX3JlZmNvdW50ID0gYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KTsgXAotCQlfX2VudHJ5LT5idWZfYm5vID0gYmlwLT5ibGlfYnVmLT5iX2JuOyBcCi0JCV9fZW50cnktPmJ1Zl9sZW4gPSBiaXAtPmJsaV9idWYtPmJfYnVmZmVyX2xlbmd0aDsgXAotCQlfX2VudHJ5LT5idWZfZmxhZ3MgPSBiaXAtPmJsaV9idWYtPmJfZmxhZ3M7IFwKLQkJX19lbnRyeS0+YnVmX2hvbGQgPSBhdG9taWNfcmVhZCgmYmlwLT5ibGlfYnVmLT5iX2hvbGQpOyBcCi0JCV9fZW50cnktPmJ1Zl9waW5jb3VudCA9IFwKLQkJCWF0b21pY19yZWFkKCZiaXAtPmJsaV9idWYtPmJfcGluX2NvdW50KTsgXAotCQlfX2VudHJ5LT5idWZfbG9ja3ZhbCA9IHhmc19idWZfbG9ja192YWx1ZShiaXAtPmJsaV9idWYpOyBcCi0JCV9fZW50cnktPmxpX2Rlc2MgPSBiaXAtPmJsaV9pdGVtLmxpX2Rlc2M7IFwKLQkJX19lbnRyeS0+bGlfZmxhZ3MgPSBiaXAtPmJsaV9pdGVtLmxpX2ZsYWdzOyBcCi0JKSwgXAotCVRQX3ByaW50aygiZGV2ICVkOiVkIGJubyAweCVsbHggbGVuIDB4JXp4IGhvbGQgJWQgcGluY291bnQgJWQgIiBcCi0JCSAgImxvY2sgJWQgZmxhZ3MgJXMgcmVjdXIgJWQgcmVmY291bnQgJWQgYmxpZmxhZ3MgJXMgIiBcCi0JCSAgImxpZGVzYyAweCVwIGxpZmxhZ3MgJXMiLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+YnVmX2JubywgXAotCQkgIF9fZW50cnktPmJ1Zl9sZW4sIFwKLQkJICBfX2VudHJ5LT5idWZfaG9sZCwgXAotCQkgIF9fZW50cnktPmJ1Zl9waW5jb3VudCwgXAotCQkgIF9fZW50cnktPmJ1Zl9sb2NrdmFsLCBcCi0JCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5idWZfZmxhZ3MsICJ8IiwgWEZTX0JVRl9GTEFHUyksIFwKLQkJICBfX2VudHJ5LT5ibGlfcmVjdXIsIFwKLQkJICBfX2VudHJ5LT5ibGlfcmVmY291bnQsIFwKLQkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmJsaV9mbGFncywgInwiLCBYRlNfQkxJX0ZMQUdTKSwgXAotCQkgIF9fZW50cnktPmxpX2Rlc2MsIFwKLQkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmxpX2ZsYWdzLCAifCIsIFhGU19MSV9GTEFHUykpIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2J1Zl9pdGVtX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtICpiaXApLAorCVRQX0FSR1MoYmlwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2RhZGRyX3QsIGJ1Zl9ibm8pCisJCV9fZmllbGQoc2l6ZV90LCBidWZfbGVuKQorCQlfX2ZpZWxkKGludCwgYnVmX2hvbGQpCisJCV9fZmllbGQoaW50LCBidWZfcGluY291bnQpCisJCV9fZmllbGQoaW50LCBidWZfbG9ja3ZhbCkKKwkJX19maWVsZCh1bnNpZ25lZCwgYnVmX2ZsYWdzKQorCQlfX2ZpZWxkKHVuc2lnbmVkLCBibGlfcmVjdXIpCisJCV9fZmllbGQoaW50LCBibGlfcmVmY291bnQpCisJCV9fZmllbGQodW5zaWduZWQsIGJsaV9mbGFncykKKwkJX19maWVsZCh2b2lkICosIGxpX2Rlc2MpCisJCV9fZmllbGQodW5zaWduZWQsIGxpX2ZsYWdzKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IGJpcC0+YmxpX2J1Zi0+Yl90YXJnZXQtPmJ0X2RldjsKKwkJX19lbnRyeS0+YmxpX2ZsYWdzID0gYmlwLT5ibGlfZmxhZ3M7CisJCV9fZW50cnktPmJsaV9yZWN1ciA9IGJpcC0+YmxpX3JlY3VyOworCQlfX2VudHJ5LT5ibGlfcmVmY291bnQgPSBhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpOworCQlfX2VudHJ5LT5idWZfYm5vID0gYmlwLT5ibGlfYnVmLT5iX2JuOworCQlfX2VudHJ5LT5idWZfbGVuID0gYmlwLT5ibGlfYnVmLT5iX2J1ZmZlcl9sZW5ndGg7CisJCV9fZW50cnktPmJ1Zl9mbGFncyA9IGJpcC0+YmxpX2J1Zi0+Yl9mbGFnczsKKwkJX19lbnRyeS0+YnVmX2hvbGQgPSBhdG9taWNfcmVhZCgmYmlwLT5ibGlfYnVmLT5iX2hvbGQpOworCQlfX2VudHJ5LT5idWZfcGluY291bnQgPSBhdG9taWNfcmVhZCgmYmlwLT5ibGlfYnVmLT5iX3Bpbl9jb3VudCk7CisJCV9fZW50cnktPmJ1Zl9sb2NrdmFsID0geGZzX2J1Zl9sb2NrX3ZhbHVlKGJpcC0+YmxpX2J1Zik7CisJCV9fZW50cnktPmxpX2Rlc2MgPSBiaXAtPmJsaV9pdGVtLmxpX2Rlc2M7CisJCV9fZW50cnktPmxpX2ZsYWdzID0gYmlwLT5ibGlfaXRlbS5saV9mbGFnczsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGJubyAweCVsbHggbGVuIDB4JXp4IGhvbGQgJWQgcGluY291bnQgJWQgIgorCQkgICJsb2NrICVkIGZsYWdzICVzIHJlY3VyICVkIHJlZmNvdW50ICVkIGJsaWZsYWdzICVzICIKKwkJICAibGlkZXNjIDB4JXAgbGlmbGFncyAlcyIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPmJ1Zl9ibm8sCisJCSAgX19lbnRyeS0+YnVmX2xlbiwKKwkJICBfX2VudHJ5LT5idWZfaG9sZCwKKwkJICBfX2VudHJ5LT5idWZfcGluY291bnQsCisJCSAgX19lbnRyeS0+YnVmX2xvY2t2YWwsCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5idWZfZmxhZ3MsICJ8IiwgWEZTX0JVRl9GTEFHUyksCisJCSAgX19lbnRyeS0+YmxpX3JlY3VyLAorCQkgIF9fZW50cnktPmJsaV9yZWZjb3VudCwKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmJsaV9mbGFncywgInwiLCBYRlNfQkxJX0ZMQUdTKSwKKwkJICBfX2VudHJ5LT5saV9kZXNjLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+bGlfZmxhZ3MsICJ8IiwgWEZTX0xJX0ZMQUdTKSkKICkKKworI2RlZmluZSBERUZJTkVfQlVGX0lURU1fRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19idWZfaXRlbV9jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtICpiaXApLCBcCisJVFBfQVJHUyhiaXApKQogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc19idWZfaXRlbV9zaXplKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fc2l6ZV9zdGFsZSk7CiBERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX2Zvcm1hdCk7CkBAIC00NTAsNzggKzQ2OSw5MCBAQAogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19iaG9sZF9yZWxlYXNlKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfYmludmFsKTsKIAotI2RlZmluZSBERUZJTkVfTE9DS19FVkVOVChuYW1lKSBcCi1UUkFDRV9FVkVOVChuYW1lLCBcCi0JVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHVuc2lnbmVkIGxvY2tfZmxhZ3MsIFwKLQkJIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwgXAotCVRQX0FSR1MoaXAsICBsb2NrX2ZsYWdzLCBjYWxsZXJfaXApLCBcCi0JVFBfU1RSVUNUX19lbnRyeSggXAotCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKLQkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykgXAotCQlfX2ZpZWxkKGludCwgbG9ja19mbGFncykgXAotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAotCSksIFwKLQlUUF9mYXN0X2Fzc2lnbiggXAotCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OyBcCi0JCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsgXAotCQlfX2VudHJ5LT5sb2NrX2ZsYWdzID0gbG9ja19mbGFnczsgXAotCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBmbGFncyAlcyBjYWxsZXIgJXBmIiwgXAotCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKLQkJICBfX2VudHJ5LT5pbm8sIFwKLQkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmxvY2tfZmxhZ3MsICJ8IiwgWEZTX0xPQ0tfRkxBR1MpLCBcCi0JCSAgKHZvaWQgKilfX2VudHJ5LT5jYWxsZXJfaXApIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2xvY2tfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHVuc2lnbmVkIGxvY2tfZmxhZ3MsCisJCSB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksCisJVFBfQVJHUyhpcCwgIGxvY2tfZmxhZ3MsIGNhbGxlcl9pcCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQorCQlfX2ZpZWxkKGludCwgbG9ja19mbGFncykKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjYWxsZXJfaXApCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOworCQlfX2VudHJ5LT5sb2NrX2ZsYWdzID0gbG9ja19mbGFnczsKKwkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBmbGFncyAlcyBjYWxsZXIgJXBmIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmxvY2tfZmxhZ3MsICJ8IiwgWEZTX0xPQ0tfRkxBR1MpLAorCQkgICh2b2lkICopX19lbnRyeS0+Y2FsbGVyX2lwKQogKQogCisjZGVmaW5lIERFRklORV9MT0NLX0VWRU5UKG5hbWUpIFwKK0RFRklORV9FVkVOVCh4ZnNfbG9ja19jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1bnNpZ25lZCBsb2NrX2ZsYWdzLCBcCisJCSB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksIFwKKwlUUF9BUkdTKGlwLCAgbG9ja19mbGFncywgY2FsbGVyX2lwKSkKIERFRklORV9MT0NLX0VWRU5UKHhmc19pbG9jayk7CiBERUZJTkVfTE9DS19FVkVOVCh4ZnNfaWxvY2tfbm93YWl0KTsKIERFRklORV9MT0NLX0VWRU5UKHhmc19pbG9ja19kZW1vdGUpOwogREVGSU5FX0xPQ0tfRVZFTlQoeGZzX2l1bmxvY2spOwogCi0jZGVmaW5lIERFRklORV9JR0VUX0VWRU5UKG5hbWUpIFwKLVRSQUNFX0VWRU5UKG5hbWUsIFwKLQlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2lub2RlICppcCksIFwKLQlUUF9BUkdTKGlwKSwgXAotCVRQX1NUUlVDVF9fZW50cnkoIFwKLQkJX19maWVsZChkZXZfdCwgZGV2KSBcCi0JCV9fZmllbGQoeGZzX2lub190LCBpbm8pIFwKLQkpLCBcCi0JVFBfZmFzdF9hc3NpZ24oIFwKLQkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsgXAotCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCIsIFwKLQkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBcCi0JCSAgX19lbnRyeS0+aW5vKSBcCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19pZ2V0X2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKSwKKwlUUF9BUkdTKGlwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8pCiApCisKKyNkZWZpbmUgREVGSU5FX0lHRVRfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19pZ2V0X2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXApLCBcCisJVFBfQVJHUyhpcCkpCiBERUZJTkVfSUdFVF9FVkVOVCh4ZnNfaWdldF9za2lwKTsKIERFRklORV9JR0VUX0VWRU5UKHhmc19pZ2V0X3JlY2xhaW0pOwogREVGSU5FX0lHRVRfRVZFTlQoeGZzX2lnZXRfZm91bmQpOwogREVGSU5FX0lHRVRfRVZFTlQoeGZzX2lnZXRfYWxsb2MpOwogCi0jZGVmaW5lIERFRklORV9JTk9ERV9FVkVOVChuYW1lKSBcCi1UUkFDRV9FVkVOVChuYW1lLCBcCi0JVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwgXAotCVRQX0FSR1MoaXAsIGNhbGxlcl9pcCksIFwKLQlUUF9TVFJVQ1RfX2VudHJ5KCBcCi0JCV9fZmllbGQoZGV2X3QsIGRldikgXAotCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCi0JCV9fZmllbGQoaW50LCBjb3VudCkgXAotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAotCSksIFwKLQlUUF9mYXN0X2Fzc2lnbiggXAotCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OyBcCi0JCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsgXAotCQlfX2VudHJ5LT5jb3VudCA9IGF0b21pY19yZWFkKCZWRlNfSShpcCktPmlfY291bnQpOyBcCi0JCV9fZW50cnktPmNhbGxlcl9pcCA9IGNhbGxlcl9pcDsgXAotCSksIFwKLQlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IGNvdW50ICVkIGNhbGxlciAlcGYiLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgIF9fZW50cnktPmlubywgXAotCQkgIF9fZW50cnktPmNvdW50LCBcCi0JCSAgKGNoYXIgKilfX2VudHJ5LT5jYWxsZXJfaXApIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2lub2RlX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1bnNpZ25lZCBsb25nIGNhbGxlcl9pcCksCisJVFBfQVJHUyhpcCwgY2FsbGVyX2lwKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQoeGZzX2lub190LCBpbm8pCisJCV9fZmllbGQoaW50LCBjb3VudCkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBjYWxsZXJfaXApCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOworCQlfX2VudHJ5LT5jb3VudCA9IGF0b21pY19yZWFkKCZWRlNfSShpcCktPmlfY291bnQpOworCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IGNvdW50ICVkIGNhbGxlciAlcGYiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPmNvdW50LAorCQkgIChjaGFyICopX19lbnRyeS0+Y2FsbGVyX2lwKQogKQorCisjZGVmaW5lIERFRklORV9JTk9ERV9FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQoeGZzX2lub2RlX2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHVuc2lnbmVkIGxvbmcgY2FsbGVyX2lwKSwgXAorCVRQX0FSR1MoaXAsIGNhbGxlcl9pcCkpCiBERUZJTkVfSU5PREVfRVZFTlQoeGZzX2lob2xkKTsKIERFRklORV9JTk9ERV9FVkVOVCh4ZnNfaXJlbGUpOwogLyogdGhlIG9sZCB4ZnNfaXRyYWNlX2VudHJ5IHRyYWNlciAtIHRvIGJlIHJlcGxhY2VkIGJ5IHMudGguIGluIHRoZSBWRlMgKi8KQEAgLTUyOSw1NSArNTYwLDU5IEBACiAjZGVmaW5lIHhmc19pdHJhY2VfZW50cnkoaXApICAgIFwKIAl0cmFjZV94ZnNfaW5vZGUoaXAsIF9USElTX0lQXykKIAotI2RlZmluZSBERUZJTkVfRFFVT1RfRVZFTlQodG5hbWUpIFwKLVRSQUNFX0VWRU5UKHRuYW1lLCBcCi0JVFBfUFJPVE8oc3RydWN0IHhmc19kcXVvdCAqZHFwKSwgXAotCVRQX0FSR1MoZHFwKSwgXAotCVRQX1NUUlVDVF9fZW50cnkoIFwKLQkJX19maWVsZChkZXZfdCwgZGV2KSBcCi0JCV9fZmllbGQoX19iZTMyLCBpZCkgXAotCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykgXAotCQlfX2ZpZWxkKHVuc2lnbmVkLCBucmVmcykgXAotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgcmVzX2Jjb3VudCkgXAotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgYmNvdW50KSBcCi0JCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCBpY291bnQpIFwKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIGJsa19oYXJkbGltaXQpIFwKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIGJsa19zb2Z0bGltaXQpIFwKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIGlub19oYXJkbGltaXQpIFwKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIGlub19zb2Z0bGltaXQpIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2RxdW90X2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfZHF1b3QgKmRxcCksCisJVFBfQVJHUyhkcXApLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZChfX2JlMzIsIGlkKQorCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykKKwkJX19maWVsZCh1bnNpZ25lZCwgbnJlZnMpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCByZXNfYmNvdW50KQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgYmNvdW50KQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgaWNvdW50KQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgYmxrX2hhcmRsaW1pdCkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nIGxvbmcsIGJsa19zb2Z0bGltaXQpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCBpbm9faGFyZGxpbWl0KQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcgbG9uZywgaW5vX3NvZnRsaW1pdCkKIAkpLCBcCi0JVFBfZmFzdF9hc3NpZ24oIFwKLQkJX19lbnRyeS0+ZGV2ID0gZHFwLT5xX21vdW50LT5tX3N1cGVyLT5zX2RldjsgXAotCQlfX2VudHJ5LT5pZCA9IGRxcC0+cV9jb3JlLmRfaWQ7IFwKLQkJX19lbnRyeS0+ZmxhZ3MgPSBkcXAtPmRxX2ZsYWdzOyBcCi0JCV9fZW50cnktPm5yZWZzID0gZHFwLT5xX25yZWZzOyBcCi0JCV9fZW50cnktPnJlc19iY291bnQgPSBkcXAtPnFfcmVzX2Jjb3VudDsgXAotCQlfX2VudHJ5LT5iY291bnQgPSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jjb3VudCk7IFwKLQkJX19lbnRyeS0+aWNvdW50ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pY291bnQpOyBcCi0JCV9fZW50cnktPmJsa19oYXJkbGltaXQgPSBcCi0JCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19oYXJkbGltaXQpOyBcCi0JCV9fZW50cnktPmJsa19zb2Z0bGltaXQgPSBcCi0JCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19zb2Z0bGltaXQpOyBcCi0JCV9fZW50cnktPmlub19oYXJkbGltaXQgPSBcCi0JCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19oYXJkbGltaXQpOyBcCi0JCV9fZW50cnktPmlub19zb2Z0bGltaXQgPSBcCi0JCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19zb2Z0bGltaXQpOyBcCi0JKSwgXAotCVRQX3ByaW50aygiZGV2ICVkOiVkIGlkIDB4JXggZmxhZ3MgJXMgbnJlZnMgJXUgcmVzX2JjIDB4JWxseCAiIFwKLQkJICAiYmNudCAweCVsbHggW2hhcmQgMHglbGx4IHwgc29mdCAweCVsbHhdICIgXAotCQkgICJpY250IDB4JWxseCBbaGFyZCAweCVsbHggfCBzb2Z0IDB4JWxseF0iLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgIGJlMzJfdG9fY3B1KF9fZW50cnktPmlkKSwgXAotCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0RRX0ZMQUdTKSwgXAotCQkgIF9fZW50cnktPm5yZWZzLCBcCi0JCSAgX19lbnRyeS0+cmVzX2Jjb3VudCwgXAotCQkgIF9fZW50cnktPmJjb3VudCwgXAotCQkgIF9fZW50cnktPmJsa19oYXJkbGltaXQsIFwKLQkJICBfX2VudHJ5LT5ibGtfc29mdGxpbWl0LCBcCi0JCSAgX19lbnRyeS0+aWNvdW50LCBcCi0JCSAgX19lbnRyeS0+aW5vX2hhcmRsaW1pdCwgXAotCQkgIF9fZW50cnktPmlub19zb2Z0bGltaXQpIFwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gZHFwLT5xX21vdW50LT5tX3N1cGVyLT5zX2RldjsKKwkJX19lbnRyeS0+aWQgPSBkcXAtPnFfY29yZS5kX2lkOworCQlfX2VudHJ5LT5mbGFncyA9IGRxcC0+ZHFfZmxhZ3M7CisJCV9fZW50cnktPm5yZWZzID0gZHFwLT5xX25yZWZzOworCQlfX2VudHJ5LT5yZXNfYmNvdW50ID0gZHFwLT5xX3Jlc19iY291bnQ7CisJCV9fZW50cnktPmJjb3VudCA9IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmNvdW50KTsKKwkJX19lbnRyeS0+aWNvdW50ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pY291bnQpOworCQlfX2VudHJ5LT5ibGtfaGFyZGxpbWl0ID0KKwkJCWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX2hhcmRsaW1pdCk7CisJCV9fZW50cnktPmJsa19zb2Z0bGltaXQgPQorCQkJYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfc29mdGxpbWl0KTsKKwkJX19lbnRyeS0+aW5vX2hhcmRsaW1pdCA9CisJCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19oYXJkbGltaXQpOworCQlfX2VudHJ5LT5pbm9fc29mdGxpbWl0ID0KKwkJCWJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaW5vX3NvZnRsaW1pdCk7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpZCAweCV4IGZsYWdzICVzIG5yZWZzICV1IHJlc19iYyAweCVsbHggIgorCQkgICJiY250IDB4JWxseCBbaGFyZCAweCVsbHggfCBzb2Z0IDB4JWxseF0gIgorCQkgICJpY250IDB4JWxseCBbaGFyZCAweCVsbHggfCBzb2Z0IDB4JWxseF0iLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgYmUzMl90b19jcHUoX19lbnRyeS0+aWQpLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0RRX0ZMQUdTKSwKKwkJICBfX2VudHJ5LT5ucmVmcywKKwkJICBfX2VudHJ5LT5yZXNfYmNvdW50LAorCQkgIF9fZW50cnktPmJjb3VudCwKKwkJICBfX2VudHJ5LT5ibGtfaGFyZGxpbWl0LAorCQkgIF9fZW50cnktPmJsa19zb2Z0bGltaXQsCisJCSAgX19lbnRyeS0+aWNvdW50LAorCQkgIF9fZW50cnktPmlub19oYXJkbGltaXQsCisJCSAgX19lbnRyeS0+aW5vX3NvZnRsaW1pdCkKICkKKworI2RlZmluZSBERUZJTkVfRFFVT1RfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19kcXVvdF9jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfZHF1b3QgKmRxcCksIFwKKwlUUF9BUkdTKGRxcCkpCiBERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2RxYWRqdXN0KTsKIERFRklORV9EUVVPVF9FVkVOVCh4ZnNfZHFzaGFrZV9kaXJ0eSk7CiBERUZJTkVfRFFVT1RfRVZFTlQoeGZzX2Rxc2hha2VfdW5saW5rKTsKQEAgLTYxMCw3MiArNjQ1LDc1IEBACiBERUZJTkVfSUdFVF9FVkVOVCh4ZnNfZHF1b3RfZHFhbGxvYyk7CiBERUZJTkVfSUdFVF9FVkVOVCh4ZnNfZHF1b3RfZHFkZXRhY2gpOwogCi0KLSNkZWZpbmUgREVGSU5FX0xPR0dSQU5UX0VWRU5UKHRuYW1lKSBcCi1UUkFDRV9FVkVOVCh0bmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCBsb2cgKmxvZywgc3RydWN0IHhsb2dfdGlja2V0ICp0aWMpLCBcCi0JVFBfQVJHUyhsb2csIHRpYyksIFwKLQlUUF9TVFJVQ1RfX2VudHJ5KCBcCi0JCV9fZmllbGQoZGV2X3QsIGRldikgXAotCQlfX2ZpZWxkKHVuc2lnbmVkLCB0cmFuc190eXBlKSBcCi0JCV9fZmllbGQoY2hhciwgb2NudCkgXAotCQlfX2ZpZWxkKGNoYXIsIGNudCkgXAotCQlfX2ZpZWxkKGludCwgY3Vycl9yZXMpIFwKLQkJX19maWVsZChpbnQsIHVuaXRfcmVzKSBcCi0JCV9fZmllbGQodW5zaWduZWQgaW50LCBmbGFncykgXAotCQlfX2ZpZWxkKHZvaWQgKiwgcmVzZXJ2ZV9oZWFkcSkgXAotCQlfX2ZpZWxkKHZvaWQgKiwgd3JpdGVfaGVhZHEpIFwKLQkJX19maWVsZChpbnQsIGdyYW50X3Jlc2VydmVfY3ljbGUpIFwKLQkJX19maWVsZChpbnQsIGdyYW50X3Jlc2VydmVfYnl0ZXMpIFwKLQkJX19maWVsZChpbnQsIGdyYW50X3dyaXRlX2N5Y2xlKSBcCi0JCV9fZmllbGQoaW50LCBncmFudF93cml0ZV9ieXRlcykgXAotCQlfX2ZpZWxkKGludCwgY3Vycl9jeWNsZSkgXAotCQlfX2ZpZWxkKGludCwgY3Vycl9ibG9jaykgXAotCQlfX2ZpZWxkKHhmc19sc25fdCwgdGFpbF9sc24pIFwKLQkpLCBcCi0JVFBfZmFzdF9hc3NpZ24oIFwKLQkJX19lbnRyeS0+ZGV2ID0gbG9nLT5sX21wLT5tX3N1cGVyLT5zX2RldjsgXAotCQlfX2VudHJ5LT50cmFuc190eXBlID0gdGljLT50X3RyYW5zX3R5cGU7IFwKLQkJX19lbnRyeS0+b2NudCA9IHRpYy0+dF9vY250OyBcCi0JCV9fZW50cnktPmNudCA9IHRpYy0+dF9jbnQ7IFwKLQkJX19lbnRyeS0+Y3Vycl9yZXMgPSB0aWMtPnRfY3Vycl9yZXM7IFwKLQkJX19lbnRyeS0+dW5pdF9yZXMgPSB0aWMtPnRfdW5pdF9yZXM7IFwKLQkJX19lbnRyeS0+ZmxhZ3MgPSB0aWMtPnRfZmxhZ3M7IFwKLQkJX19lbnRyeS0+cmVzZXJ2ZV9oZWFkcSA9IGxvZy0+bF9yZXNlcnZlX2hlYWRxOyBcCi0JCV9fZW50cnktPndyaXRlX2hlYWRxID0gbG9nLT5sX3dyaXRlX2hlYWRxOyBcCi0JCV9fZW50cnktPmdyYW50X3Jlc2VydmVfY3ljbGUgPSBsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9jeWNsZTsgXAotCQlfX2VudHJ5LT5ncmFudF9yZXNlcnZlX2J5dGVzID0gbG9nLT5sX2dyYW50X3Jlc2VydmVfYnl0ZXM7IFwKLQkJX19lbnRyeS0+Z3JhbnRfd3JpdGVfY3ljbGUgPSBsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGU7IFwKLQkJX19lbnRyeS0+Z3JhbnRfd3JpdGVfYnl0ZXMgPSBsb2ctPmxfZ3JhbnRfd3JpdGVfYnl0ZXM7IFwKLQkJX19lbnRyeS0+Y3Vycl9jeWNsZSA9IGxvZy0+bF9jdXJyX2N5Y2xlOyBcCi0JCV9fZW50cnktPmN1cnJfYmxvY2sgPSBsb2ctPmxfY3Vycl9ibG9jazsgXAotCQlfX2VudHJ5LT50YWlsX2xzbiA9IGxvZy0+bF90YWlsX2xzbjsgXAotCSksIFwKLQlUUF9wcmludGsoImRldiAlZDolZCB0eXBlICVzIHRfb2NudCAldSB0X2NudCAldSB0X2N1cnJfcmVzICV1ICIgXAotCQkgICJ0X3VuaXRfcmVzICV1IHRfZmxhZ3MgJXMgcmVzZXJ2ZV9oZWFkcSAweCVwICIgXAotCQkgICJ3cml0ZV9oZWFkcSAweCVwIGdyYW50X3Jlc2VydmVfY3ljbGUgJWQgIiBcCi0JCSAgImdyYW50X3Jlc2VydmVfYnl0ZXMgJWQgZ3JhbnRfd3JpdGVfY3ljbGUgJWQgIiBcCi0JCSAgImdyYW50X3dyaXRlX2J5dGVzICVkIGN1cnJfY3ljbGUgJWQgY3Vycl9ibG9jayAlZCAiIFwKLQkJICAidGFpbF9jeWNsZSAlZCB0YWlsX2Jsb2NrICVkIiwgXAotCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKLQkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnRyYW5zX3R5cGUsIFhGU19UUkFOU19UWVBFUyksIFwKLQkJICBfX2VudHJ5LT5vY250LCBcCi0JCSAgX19lbnRyeS0+Y250LCBcCi0JCSAgX19lbnRyeS0+Y3Vycl9yZXMsIFwKLQkJICBfX2VudHJ5LT51bml0X3JlcywgXAotCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWExPR19USUNfRkxBR1MpLCBcCi0JCSAgX19lbnRyeS0+cmVzZXJ2ZV9oZWFkcSwgXAotCQkgIF9fZW50cnktPndyaXRlX2hlYWRxLCBcCi0JCSAgX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9jeWNsZSwgXAotCQkgIF9fZW50cnktPmdyYW50X3Jlc2VydmVfYnl0ZXMsIFwKLQkJICBfX2VudHJ5LT5ncmFudF93cml0ZV9jeWNsZSwgXAotCQkgIF9fZW50cnktPmdyYW50X3dyaXRlX2J5dGVzLCBcCi0JCSAgX19lbnRyeS0+Y3Vycl9jeWNsZSwgXAotCQkgIF9fZW50cnktPmN1cnJfYmxvY2ssIFwKLQkJICBDWUNMRV9MU04oX19lbnRyeS0+dGFpbF9sc24pLCBcCi0JCSAgQkxPQ0tfTFNOKF9fZW50cnktPnRhaWxfbHNuKSBcCi0JKSBcCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19sb2dncmFudF9jbGFzcywKKwlUUF9QUk9UTyhzdHJ1Y3QgbG9nICpsb2csIHN0cnVjdCB4bG9nX3RpY2tldCAqdGljKSwKKwlUUF9BUkdTKGxvZywgdGljKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGRldl90LCBkZXYpCisJCV9fZmllbGQodW5zaWduZWQsIHRyYW5zX3R5cGUpCisJCV9fZmllbGQoY2hhciwgb2NudCkKKwkJX19maWVsZChjaGFyLCBjbnQpCisJCV9fZmllbGQoaW50LCBjdXJyX3JlcykKKwkJX19maWVsZChpbnQsIHVuaXRfcmVzKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgZmxhZ3MpCisJCV9fZmllbGQodm9pZCAqLCByZXNlcnZlX2hlYWRxKQorCQlfX2ZpZWxkKHZvaWQgKiwgd3JpdGVfaGVhZHEpCisJCV9fZmllbGQoaW50LCBncmFudF9yZXNlcnZlX2N5Y2xlKQorCQlfX2ZpZWxkKGludCwgZ3JhbnRfcmVzZXJ2ZV9ieXRlcykKKwkJX19maWVsZChpbnQsIGdyYW50X3dyaXRlX2N5Y2xlKQorCQlfX2ZpZWxkKGludCwgZ3JhbnRfd3JpdGVfYnl0ZXMpCisJCV9fZmllbGQoaW50LCBjdXJyX2N5Y2xlKQorCQlfX2ZpZWxkKGludCwgY3Vycl9ibG9jaykKKwkJX19maWVsZCh4ZnNfbHNuX3QsIHRhaWxfbHNuKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IGxvZy0+bF9tcC0+bV9zdXBlci0+c19kZXY7CisJCV9fZW50cnktPnRyYW5zX3R5cGUgPSB0aWMtPnRfdHJhbnNfdHlwZTsKKwkJX19lbnRyeS0+b2NudCA9IHRpYy0+dF9vY250OworCQlfX2VudHJ5LT5jbnQgPSB0aWMtPnRfY250OworCQlfX2VudHJ5LT5jdXJyX3JlcyA9IHRpYy0+dF9jdXJyX3JlczsKKwkJX19lbnRyeS0+dW5pdF9yZXMgPSB0aWMtPnRfdW5pdF9yZXM7CisJCV9fZW50cnktPmZsYWdzID0gdGljLT50X2ZsYWdzOworCQlfX2VudHJ5LT5yZXNlcnZlX2hlYWRxID0gbG9nLT5sX3Jlc2VydmVfaGVhZHE7CisJCV9fZW50cnktPndyaXRlX2hlYWRxID0gbG9nLT5sX3dyaXRlX2hlYWRxOworCQlfX2VudHJ5LT5ncmFudF9yZXNlcnZlX2N5Y2xlID0gbG9nLT5sX2dyYW50X3Jlc2VydmVfY3ljbGU7CisJCV9fZW50cnktPmdyYW50X3Jlc2VydmVfYnl0ZXMgPSBsb2ctPmxfZ3JhbnRfcmVzZXJ2ZV9ieXRlczsKKwkJX19lbnRyeS0+Z3JhbnRfd3JpdGVfY3ljbGUgPSBsb2ctPmxfZ3JhbnRfd3JpdGVfY3ljbGU7CisJCV9fZW50cnktPmdyYW50X3dyaXRlX2J5dGVzID0gbG9nLT5sX2dyYW50X3dyaXRlX2J5dGVzOworCQlfX2VudHJ5LT5jdXJyX2N5Y2xlID0gbG9nLT5sX2N1cnJfY3ljbGU7CisJCV9fZW50cnktPmN1cnJfYmxvY2sgPSBsb2ctPmxfY3Vycl9ibG9jazsKKwkJX19lbnRyeS0+dGFpbF9sc24gPSBsb2ctPmxfdGFpbF9sc247CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCB0eXBlICVzIHRfb2NudCAldSB0X2NudCAldSB0X2N1cnJfcmVzICV1ICIKKwkJICAidF91bml0X3JlcyAldSB0X2ZsYWdzICVzIHJlc2VydmVfaGVhZHEgMHglcCAiCisJCSAgIndyaXRlX2hlYWRxIDB4JXAgZ3JhbnRfcmVzZXJ2ZV9jeWNsZSAlZCAiCisJCSAgImdyYW50X3Jlc2VydmVfYnl0ZXMgJWQgZ3JhbnRfd3JpdGVfY3ljbGUgJWQgIgorCQkgICJncmFudF93cml0ZV9ieXRlcyAlZCBjdXJyX2N5Y2xlICVkIGN1cnJfYmxvY2sgJWQgIgorCQkgICJ0YWlsX2N5Y2xlICVkIHRhaWxfYmxvY2sgJWQiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT50cmFuc190eXBlLCBYRlNfVFJBTlNfVFlQRVMpLAorCQkgIF9fZW50cnktPm9jbnQsCisJCSAgX19lbnRyeS0+Y250LAorCQkgIF9fZW50cnktPmN1cnJfcmVzLAorCQkgIF9fZW50cnktPnVuaXRfcmVzLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWExPR19USUNfRkxBR1MpLAorCQkgIF9fZW50cnktPnJlc2VydmVfaGVhZHEsCisJCSAgX19lbnRyeS0+d3JpdGVfaGVhZHEsCisJCSAgX19lbnRyeS0+Z3JhbnRfcmVzZXJ2ZV9jeWNsZSwKKwkJICBfX2VudHJ5LT5ncmFudF9yZXNlcnZlX2J5dGVzLAorCQkgIF9fZW50cnktPmdyYW50X3dyaXRlX2N5Y2xlLAorCQkgIF9fZW50cnktPmdyYW50X3dyaXRlX2J5dGVzLAorCQkgIF9fZW50cnktPmN1cnJfY3ljbGUsCisJCSAgX19lbnRyeS0+Y3Vycl9ibG9jaywKKwkJICBDWUNMRV9MU04oX19lbnRyeS0+dGFpbF9sc24pLAorCQkgIEJMT0NLX0xTTihfX2VudHJ5LT50YWlsX2xzbikKKwkpCiApCisKKyNkZWZpbmUgREVGSU5FX0xPR0dSQU5UX0VWRU5UKG5hbWUpIFwKK0RFRklORV9FVkVOVCh4ZnNfbG9nZ3JhbnRfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgbG9nICpsb2csIHN0cnVjdCB4bG9nX3RpY2tldCAqdGljKSwgXAorCVRQX0FSR1MobG9nLCB0aWMpKQogREVGSU5FX0xPR0dSQU5UX0VWRU5UKHhmc19sb2dfZG9uZV9ub25wZXJtKTsKIERFRklORV9MT0dHUkFOVF9FVkVOVCh4ZnNfbG9nX2RvbmVfcGVybSk7CiBERUZJTkVfTE9HR1JBTlRfRVZFTlQoeGZzX2xvZ19yZXNlcnZlKTsKQEAgLTgxNSw3ICs4NTMsNyBAQAogCSksIFwKIAlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHNpemUgMHglbGx4IG5ld19zaXplIDB4JWxseCAiIFwKIAkJICAib2Zmc2V0IDB4JWxseCBjb3VudCAlemQgZmxhZ3MgJXMgIiBcCi0JCSAgInN0YXJ0b2ZmIDB4JWxseCBzdGFydGJsb2NrIDB4JWxseCBibG9ja2NvdW50IDB4JWxseCIsIFwKKwkJICAic3RhcnRvZmYgMHglbGx4IHN0YXJ0YmxvY2sgJXMgYmxvY2tjb3VudCAweCVsbHgiLCBcCiAJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAogCQkgIF9fZW50cnktPmlubywgXAogCQkgIF9fZW50cnktPnNpemUsIFwKQEAgLTgyNCw3ICs4NjIsNyBAQAogCQkgIF9fZW50cnktPmNvdW50LCBcCiAJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBCTUFQSV9GTEFHUyksIFwKIAkJICBfX2VudHJ5LT5zdGFydG9mZiwgXAotCQkgIF9fZW50cnktPnN0YXJ0YmxvY2ssIFwKKwkJICB4ZnNfZm10ZnNibG9jayhfX2VudHJ5LT5zdGFydGJsb2NrKSwgXAogCQkgIF9fZW50cnktPmJsb2NrY291bnQpIFwKICkKIERFRklORV9JT01BUF9FVkVOVCh4ZnNfaW9tYXBfZW50ZXIpOwpAQCAtODk3LDI4ICs5MzUsMzIgQEAKIAkJICBfX2VudHJ5LT50b3NzX2ZpbmlzaCkKICk7CiAKLSNkZWZpbmUgREVGSU5FX0lUUlVOQ19FVkVOVChuYW1lKSBcCi1UUkFDRV9FVkVOVChuYW1lLCBcCi0JVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19mc2l6ZV90IG5ld19zaXplKSwgXAotCVRQX0FSR1MoaXAsIG5ld19zaXplKSwgXAotCVRQX1NUUlVDVF9fZW50cnkoIFwKLQkJX19maWVsZChkZXZfdCwgZGV2KSBcCi0JCV9fZmllbGQoeGZzX2lub190LCBpbm8pIFwKLQkJX19maWVsZCh4ZnNfZnNpemVfdCwgc2l6ZSkgXAotCQlfX2ZpZWxkKHhmc19mc2l6ZV90LCBuZXdfc2l6ZSkgXAotCSksIFwKLQlUUF9mYXN0X2Fzc2lnbiggXAotCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OyBcCi0JCV9fZW50cnktPmlubyA9IGlwLT5pX2lubzsgXAotCQlfX2VudHJ5LT5zaXplID0gaXAtPmlfZC5kaV9zaXplOyBcCi0JCV9fZW50cnktPm5ld19zaXplID0gbmV3X3NpemU7IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzaXplIDB4JWxseCBuZXdfc2l6ZSAweCVsbHgiLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgIF9fZW50cnktPmlubywgXAotCQkgIF9fZW50cnktPnNpemUsIFwKLQkJICBfX2VudHJ5LT5uZXdfc2l6ZSkgXAorREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfaXRydW5jX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfZnNpemVfdCBuZXdfc2l6ZSksCisJVFBfQVJHUyhpcCwgbmV3X3NpemUpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykKKwkJX19maWVsZCh4ZnNfZnNpemVfdCwgc2l6ZSkKKwkJX19maWVsZCh4ZnNfZnNpemVfdCwgbmV3X3NpemUpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gVkZTX0koaXApLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vID0gaXAtPmlfaW5vOworCQlfX2VudHJ5LT5zaXplID0gaXAtPmlfZC5kaV9zaXplOworCQlfX2VudHJ5LT5uZXdfc2l6ZSA9IG5ld19zaXplOworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzaXplIDB4JWxseCBuZXdfc2l6ZSAweCVsbHgiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCisJCSAgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPnNpemUsCisJCSAgX19lbnRyeS0+bmV3X3NpemUpCiApCisKKyNkZWZpbmUgREVGSU5FX0lUUlVOQ19FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQoeGZzX2l0cnVuY19jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfZnNpemVfdCBuZXdfc2l6ZSksIFwKKwlUUF9BUkdTKGlwLCBuZXdfc2l6ZSkpCiBERUZJTkVfSVRSVU5DX0VWRU5UKHhmc19pdHJ1bmNhdGVfZmluaXNoX3N0YXJ0KTsKIERFRklORV9JVFJVTkNfRVZFTlQoeGZzX2l0cnVuY2F0ZV9maW5pc2hfZW5kKTsKIApAQCAtMTAzNywyOCArMTA3OSwyOCBAQAogCiBUUkFDRV9FVkVOVCh4ZnNfYWxsb2NfYnVzeXNlYXJjaCwKIAlUUF9QUk9UTyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubywgeGZzX2FnYmxvY2tfdCBhZ2JubywKLQkJIHhmc19leHRsZW5fdCBsZW4sIGludCBmb3VuZCksCi0JVFBfQVJHUyhtcCwgYWdubywgYWdibm8sIGxlbiwgZm91bmQpLAorCQkgeGZzX2V4dGxlbl90IGxlbiwgeGZzX2xzbl90IGxzbiksCisJVFBfQVJHUyhtcCwgYWdubywgYWdibm8sIGxlbiwgbHNuKSwKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKGRldl90LCBkZXYpCiAJCV9fZmllbGQoeGZzX2FnbnVtYmVyX3QsIGFnbm8pCiAJCV9fZmllbGQoeGZzX2FnYmxvY2tfdCwgYWdibm8pCiAJCV9fZmllbGQoeGZzX2V4dGxlbl90LCBsZW4pCi0JCV9fZmllbGQoaW50LCBmb3VuZCkKKwkJX19maWVsZCh4ZnNfbHNuX3QsIGxzbikKIAkpLAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5kZXYgPSBtcC0+bV9zdXBlci0+c19kZXY7CiAJCV9fZW50cnktPmFnbm8gPSBhZ25vOwogCQlfX2VudHJ5LT5hZ2JubyA9IGFnYm5vOwogCQlfX2VudHJ5LT5sZW4gPSBsZW47Ci0JCV9fZW50cnktPmZvdW5kID0gZm91bmQ7CisJCV9fZW50cnktPmxzbiA9IGxzbjsKIAkpLAotCVRQX3ByaW50aygiZGV2ICVkOiVkIGFnbm8gJXUgYWdibm8gJXUgbGVuICV1ICVzIiwKKwlUUF9wcmludGsoImRldiAlZDolZCBhZ25vICV1IGFnYm5vICV1IGxlbiAldSBmb3JjZSBsc24gMHglbGx4IiwKIAkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAogCQkgIF9fZW50cnktPmFnbm8sCiAJCSAgX19lbnRyeS0+YWdibm8sCiAJCSAgX19lbnRyeS0+bGVuLAotCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+Zm91bmQsIFhGU19CVVNZX1NUQVRFUykpCisJCSAgX19lbnRyeS0+bHNuKQogKTsKIAogVFJBQ0VfRVZFTlQoeGZzX2FnZiwKQEAgLTExNTIsNzcgKzExOTQsODAgQEAKIAogKTsKIAotI2RlZmluZSBERUZJTkVfQUxMT0NfRVZFTlQobmFtZSkgXAotVFJBQ0VfRVZFTlQobmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCB4ZnNfYWxsb2NfYXJnICphcmdzKSwgXAotCVRQX0FSR1MoYXJncyksIFwKLQlUUF9TVFJVQ1RfX2VudHJ5KCBcCi0JCV9fZmllbGQoZGV2X3QsIGRldikgXAotCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKSBcCi0JCV9fZmllbGQoeGZzX2FnYmxvY2tfdCwgYWdibm8pIFwKLQkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIG1pbmxlbikgXAotCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbWF4bGVuKSBcCi0JCV9fZmllbGQoeGZzX2V4dGxlbl90LCBtb2QpIFwKLQkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIHByb2QpIFwKLQkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIG1pbmxlZnQpIFwKLQkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIHRvdGFsKSBcCi0JCV9fZmllbGQoeGZzX2V4dGxlbl90LCBhbGlnbm1lbnQpIFwKLQkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIG1pbmFsaWduc2xvcCkgXAotCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbGVuKSBcCi0JCV9fZmllbGQoc2hvcnQsIHR5cGUpIFwKLQkJX19maWVsZChzaG9ydCwgb3R5cGUpIFwKLQkJX19maWVsZChjaGFyLCB3YXNkZWwpIFwKLQkJX19maWVsZChjaGFyLCB3YXNmcm9tZmwpIFwKLQkJX19maWVsZChjaGFyLCBpc2ZsKSBcCi0JCV9fZmllbGQoY2hhciwgdXNlcmRhdGEpIFwKLQkJX19maWVsZCh4ZnNfZnNibG9ja190LCBmaXJzdGJsb2NrKSBcCi0JKSwgXAotCVRQX2Zhc3RfYXNzaWduKCBcCi0JCV9fZW50cnktPmRldiA9IGFyZ3MtPm1wLT5tX3N1cGVyLT5zX2RldjsgXAotCQlfX2VudHJ5LT5hZ25vID0gYXJncy0+YWdubzsgXAotCQlfX2VudHJ5LT5hZ2JubyA9IGFyZ3MtPmFnYm5vOyBcCi0JCV9fZW50cnktPm1pbmxlbiA9IGFyZ3MtPm1pbmxlbjsgXAotCQlfX2VudHJ5LT5tYXhsZW4gPSBhcmdzLT5tYXhsZW47IFwKLQkJX19lbnRyeS0+bW9kID0gYXJncy0+bW9kOyBcCi0JCV9fZW50cnktPnByb2QgPSBhcmdzLT5wcm9kOyBcCi0JCV9fZW50cnktPm1pbmxlZnQgPSBhcmdzLT5taW5sZWZ0OyBcCi0JCV9fZW50cnktPnRvdGFsID0gYXJncy0+dG90YWw7IFwKLQkJX19lbnRyeS0+YWxpZ25tZW50ID0gYXJncy0+YWxpZ25tZW50OyBcCi0JCV9fZW50cnktPm1pbmFsaWduc2xvcCA9IGFyZ3MtPm1pbmFsaWduc2xvcDsgXAotCQlfX2VudHJ5LT5sZW4gPSBhcmdzLT5sZW47IFwKLQkJX19lbnRyeS0+dHlwZSA9IGFyZ3MtPnR5cGU7IFwKLQkJX19lbnRyeS0+b3R5cGUgPSBhcmdzLT5vdHlwZTsgXAotCQlfX2VudHJ5LT53YXNkZWwgPSBhcmdzLT53YXNkZWw7IFwKLQkJX19lbnRyeS0+d2FzZnJvbWZsID0gYXJncy0+d2FzZnJvbWZsOyBcCi0JCV9fZW50cnktPmlzZmwgPSBhcmdzLT5pc2ZsOyBcCi0JCV9fZW50cnktPnVzZXJkYXRhID0gYXJncy0+dXNlcmRhdGE7IFwKLQkJX19lbnRyeS0+Zmlyc3RibG9jayA9IGFyZ3MtPmZpcnN0YmxvY2s7IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSBhZ2JubyAldSBtaW5sZW4gJXUgbWF4bGVuICV1IG1vZCAldSAiIFwKLQkJICAicHJvZCAldSBtaW5sZWZ0ICV1IHRvdGFsICV1IGFsaWdubWVudCAldSBtaW5hbGlnbnNsb3AgJXUgIiBcCi0JCSAgImxlbiAldSB0eXBlICVzIG90eXBlICVzIHdhc2RlbCAlZCB3YXNmcm9tZmwgJWQgaXNmbCAlZCAiIFwKLQkJICAidXNlcmRhdGEgJWQgZmlyc3RibG9jayAweCVsbHgiLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgIF9fZW50cnktPmFnbm8sIFwKLQkJICBfX2VudHJ5LT5hZ2JubywgXAotCQkgIF9fZW50cnktPm1pbmxlbiwgXAotCQkgIF9fZW50cnktPm1heGxlbiwgXAotCQkgIF9fZW50cnktPm1vZCwgXAotCQkgIF9fZW50cnktPnByb2QsIFwKLQkJICBfX2VudHJ5LT5taW5sZWZ0LCBcCi0JCSAgX19lbnRyeS0+dG90YWwsIFwKLQkJICBfX2VudHJ5LT5hbGlnbm1lbnQsIFwKLQkJICBfX2VudHJ5LT5taW5hbGlnbnNsb3AsIFwKLQkJICBfX2VudHJ5LT5sZW4sIFwKLQkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnR5cGUsIFhGU19BTExPQ19UWVBFUyksIFwKLQkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPm90eXBlLCBYRlNfQUxMT0NfVFlQRVMpLCBcCi0JCSAgX19lbnRyeS0+d2FzZGVsLCBcCi0JCSAgX19lbnRyeS0+d2FzZnJvbWZsLCBcCi0JCSAgX19lbnRyeS0+aXNmbCwgXAotCQkgIF9fZW50cnktPnVzZXJkYXRhLCBcCi0JCSAgX19lbnRyeS0+Zmlyc3RibG9jaykgXAorREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfYWxsb2NfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19hbGxvY19hcmcgKmFyZ3MpLAorCVRQX0FSR1MoYXJncyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChkZXZfdCwgZGV2KQorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKQorCQlfX2ZpZWxkKHhmc19hZ2Jsb2NrX3QsIGFnYm5vKQorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbWlubGVuKQorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbWF4bGVuKQorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgbW9kKQorCQlfX2ZpZWxkKHhmc19leHRsZW5fdCwgcHJvZCkKKwkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIG1pbmxlZnQpCisJCV9fZmllbGQoeGZzX2V4dGxlbl90LCB0b3RhbCkKKwkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIGFsaWdubWVudCkKKwkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIG1pbmFsaWduc2xvcCkKKwkJX19maWVsZCh4ZnNfZXh0bGVuX3QsIGxlbikKKwkJX19maWVsZChzaG9ydCwgdHlwZSkKKwkJX19maWVsZChzaG9ydCwgb3R5cGUpCisJCV9fZmllbGQoY2hhciwgd2FzZGVsKQorCQlfX2ZpZWxkKGNoYXIsIHdhc2Zyb21mbCkKKwkJX19maWVsZChjaGFyLCBpc2ZsKQorCQlfX2ZpZWxkKGNoYXIsIHVzZXJkYXRhKQorCQlfX2ZpZWxkKHhmc19mc2Jsb2NrX3QsIGZpcnN0YmxvY2spCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2ID0gYXJncy0+bXAtPm1fc3VwZXItPnNfZGV2OworCQlfX2VudHJ5LT5hZ25vID0gYXJncy0+YWdubzsKKwkJX19lbnRyeS0+YWdibm8gPSBhcmdzLT5hZ2JubzsKKwkJX19lbnRyeS0+bWlubGVuID0gYXJncy0+bWlubGVuOworCQlfX2VudHJ5LT5tYXhsZW4gPSBhcmdzLT5tYXhsZW47CisJCV9fZW50cnktPm1vZCA9IGFyZ3MtPm1vZDsKKwkJX19lbnRyeS0+cHJvZCA9IGFyZ3MtPnByb2Q7CisJCV9fZW50cnktPm1pbmxlZnQgPSBhcmdzLT5taW5sZWZ0OworCQlfX2VudHJ5LT50b3RhbCA9IGFyZ3MtPnRvdGFsOworCQlfX2VudHJ5LT5hbGlnbm1lbnQgPSBhcmdzLT5hbGlnbm1lbnQ7CisJCV9fZW50cnktPm1pbmFsaWduc2xvcCA9IGFyZ3MtPm1pbmFsaWduc2xvcDsKKwkJX19lbnRyeS0+bGVuID0gYXJncy0+bGVuOworCQlfX2VudHJ5LT50eXBlID0gYXJncy0+dHlwZTsKKwkJX19lbnRyeS0+b3R5cGUgPSBhcmdzLT5vdHlwZTsKKwkJX19lbnRyeS0+d2FzZGVsID0gYXJncy0+d2FzZGVsOworCQlfX2VudHJ5LT53YXNmcm9tZmwgPSBhcmdzLT53YXNmcm9tZmw7CisJCV9fZW50cnktPmlzZmwgPSBhcmdzLT5pc2ZsOworCQlfX2VudHJ5LT51c2VyZGF0YSA9IGFyZ3MtPnVzZXJkYXRhOworCQlfX2VudHJ5LT5maXJzdGJsb2NrID0gYXJncy0+Zmlyc3RibG9jazsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGFnbm8gJXUgYWdibm8gJXUgbWlubGVuICV1IG1heGxlbiAldSBtb2QgJXUgIgorCQkgICJwcm9kICV1IG1pbmxlZnQgJXUgdG90YWwgJXUgYWxpZ25tZW50ICV1IG1pbmFsaWduc2xvcCAldSAiCisJCSAgImxlbiAldSB0eXBlICVzIG90eXBlICVzIHdhc2RlbCAlZCB3YXNmcm9tZmwgJWQgaXNmbCAlZCAiCisJCSAgInVzZXJkYXRhICVkIGZpcnN0YmxvY2sgMHglbGx4IiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmFnbm8sCisJCSAgX19lbnRyeS0+YWdibm8sCisJCSAgX19lbnRyeS0+bWlubGVuLAorCQkgIF9fZW50cnktPm1heGxlbiwKKwkJICBfX2VudHJ5LT5tb2QsCisJCSAgX19lbnRyeS0+cHJvZCwKKwkJICBfX2VudHJ5LT5taW5sZWZ0LAorCQkgIF9fZW50cnktPnRvdGFsLAorCQkgIF9fZW50cnktPmFsaWdubWVudCwKKwkJICBfX2VudHJ5LT5taW5hbGlnbnNsb3AsCisJCSAgX19lbnRyeS0+bGVuLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+dHlwZSwgWEZTX0FMTE9DX1RZUEVTKSwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPm90eXBlLCBYRlNfQUxMT0NfVFlQRVMpLAorCQkgIF9fZW50cnktPndhc2RlbCwKKwkJICBfX2VudHJ5LT53YXNmcm9tZmwsCisJCSAgX19lbnRyeS0+aXNmbCwKKwkJICBfX2VudHJ5LT51c2VyZGF0YSwKKwkJICBfX2VudHJ5LT5maXJzdGJsb2NrKQogKQogCisjZGVmaW5lIERFRklORV9BTExPQ19FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQoeGZzX2FsbG9jX2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19hbGxvY19hcmcgKmFyZ3MpLCBcCisJVFBfQVJHUyhhcmdzKSkKIERFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfZXhhY3RfZG9uZSk7CiBERUZJTkVfQUxMT0NfRVZFTlQoeGZzX2FsbG9jX2V4YWN0X2Vycm9yKTsKIERFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfbmVhcl9ub21pbmxlZnQpOwpAQCAtMTI0NSw5MiArMTI5MCwxMDAgQEAKIERFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfdmV4dGVudF9sb29wZmFpbGVkKTsKIERFRklORV9BTExPQ19FVkVOVCh4ZnNfYWxsb2NfdmV4dGVudF9hbGxmYWlsZWQpOwogCi0jZGVmaW5lIERFRklORV9ESVIyX1RSQUNFKHRuYW1lKSBcCi1UUkFDRV9FVkVOVCh0bmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncyksIFwKLQlUUF9BUkdTKGFyZ3MpLCBcCi0JVFBfU1RSVUNUX19lbnRyeSggXAotCQlfX2ZpZWxkKGRldl90LCBkZXYpIFwKLQkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykgXAotCQlfX2R5bmFtaWNfYXJyYXkoY2hhciwgbmFtZSwgYXJncy0+bmFtZWxlbikgXAotCQlfX2ZpZWxkKGludCwgbmFtZWxlbikgXAotCQlfX2ZpZWxkKHhmc19kYWhhc2hfdCwgaGFzaHZhbCkgXAotCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW51bWJlcikgXAotCQlfX2ZpZWxkKGludCwgb3BfZmxhZ3MpIFwKLQkpLCBcCi0JVFBfZmFzdF9hc3NpZ24oIFwKLQkJX19lbnRyeS0+ZGV2ID0gVkZTX0koYXJncy0+ZHApLT5pX3NiLT5zX2RldjsgXAotCQlfX2VudHJ5LT5pbm8gPSBhcmdzLT5kcC0+aV9pbm87IFwKLQkJaWYgKGFyZ3MtPm5hbWVsZW4pIFwKLQkJCW1lbWNweShfX2dldF9zdHIobmFtZSksIGFyZ3MtPm5hbWUsIGFyZ3MtPm5hbWVsZW4pOyBcCi0JCV9fZW50cnktPm5hbWVsZW4gPSBhcmdzLT5uYW1lbGVuOyBcCi0JCV9fZW50cnktPmhhc2h2YWwgPSBhcmdzLT5oYXNodmFsOyBcCi0JCV9fZW50cnktPmludW1iZXIgPSBhcmdzLT5pbnVtYmVyOyBcCi0JCV9fZW50cnktPm9wX2ZsYWdzID0gYXJncy0+b3BfZmxhZ3M7IFwKLQkpLCBcCi0JVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBuYW1lICUuKnMgbmFtZWxlbiAlZCBoYXNodmFsIDB4JXggIiBcCi0JCSAgImludW1iZXIgMHglbGx4IG9wX2ZsYWdzICVzIiwgXAotCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKLQkJICBfX2VudHJ5LT5pbm8sIFwKLQkJICBfX2VudHJ5LT5uYW1lbGVuLCBcCi0JCSAgX19lbnRyeS0+bmFtZWxlbiA/IF9fZ2V0X3N0cihuYW1lKSA6IE5VTEwsIFwKLQkJICBfX2VudHJ5LT5uYW1lbGVuLCBcCi0JCSAgX19lbnRyeS0+aGFzaHZhbCwgXAotCQkgIF9fZW50cnktPmludW1iZXIsIFwKLQkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPm9wX2ZsYWdzLCAifCIsIFhGU19EQV9PUF9GTEFHUykpIFwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoeGZzX2RpcjJfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19kYV9hcmdzICphcmdzKSwKKwlUUF9BUkdTKGFyZ3MpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykKKwkJX19keW5hbWljX2FycmF5KGNoYXIsIG5hbWUsIGFyZ3MtPm5hbWVsZW4pCisJCV9fZmllbGQoaW50LCBuYW1lbGVuKQorCQlfX2ZpZWxkKHhmc19kYWhhc2hfdCwgaGFzaHZhbCkKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGludW1iZXIpCisJCV9fZmllbGQoaW50LCBvcF9mbGFncykKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShhcmdzLT5kcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8gPSBhcmdzLT5kcC0+aV9pbm87CisJCWlmIChhcmdzLT5uYW1lbGVuKQorCQkJbWVtY3B5KF9fZ2V0X3N0cihuYW1lKSwgYXJncy0+bmFtZSwgYXJncy0+bmFtZWxlbik7CisJCV9fZW50cnktPm5hbWVsZW4gPSBhcmdzLT5uYW1lbGVuOworCQlfX2VudHJ5LT5oYXNodmFsID0gYXJncy0+aGFzaHZhbDsKKwkJX19lbnRyeS0+aW51bWJlciA9IGFyZ3MtPmludW1iZXI7CisJCV9fZW50cnktPm9wX2ZsYWdzID0gYXJncy0+b3BfZmxhZ3M7CisJKSwKKwlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IG5hbWUgJS4qcyBuYW1lbGVuICVkIGhhc2h2YWwgMHgleCAiCisJCSAgImludW1iZXIgMHglbGx4IG9wX2ZsYWdzICVzIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5uYW1lbGVuLAorCQkgIF9fZW50cnktPm5hbWVsZW4gPyBfX2dldF9zdHIobmFtZSkgOiBOVUxMLAorCQkgIF9fZW50cnktPm5hbWVsZW4sCisJCSAgX19lbnRyeS0+aGFzaHZhbCwKKwkJICBfX2VudHJ5LT5pbnVtYmVyLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+b3BfZmxhZ3MsICJ8IiwgWEZTX0RBX09QX0ZMQUdTKSkKICkKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX3NmX2FkZG5hbWUpOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfc2ZfY3JlYXRlKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX3NmX2xvb2t1cCk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9zZl9yZXBsYWNlKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX3NmX3JlbW92ZW5hbWUpOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfc2ZfdG9pbm80KTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX3NmX3RvaW5vOCk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9zZl90b19ibG9jayk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ibG9ja19hZGRuYW1lKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2Jsb2NrX2xvb2t1cCk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ibG9ja19yZXBsYWNlKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2Jsb2NrX3JlbW92ZW5hbWUpOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfYmxvY2tfdG9fc2YpOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfYmxvY2tfdG9fbGVhZik7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9sZWFmX2FkZG5hbWUpOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbGVhZl9sb29rdXApOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbGVhZl9yZXBsYWNlKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2xlYWZfcmVtb3ZlbmFtZSk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9sZWFmX3RvX2Jsb2NrKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX2xlYWZfdG9fbm9kZSk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ub2RlX2FkZG5hbWUpOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbm9kZV9sb29rdXApOwotREVGSU5FX0RJUjJfVFJBQ0UoeGZzX2RpcjJfbm9kZV9yZXBsYWNlKTsKLURFRklORV9ESVIyX1RSQUNFKHhmc19kaXIyX25vZGVfcmVtb3ZlbmFtZSk7Ci1ERUZJTkVfRElSMl9UUkFDRSh4ZnNfZGlyMl9ub2RlX3RvX2xlYWYpOwogCi0jZGVmaW5lIERFRklORV9ESVIyX1NQQUNFX1RSQUNFKHRuYW1lKSBcCi1UUkFDRV9FVkVOVCh0bmFtZSwgXAotCVRQX1BST1RPKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgaW50IGlkeCksIFwKLQlUUF9BUkdTKGFyZ3MsIGlkeCksIFwKLQlUUF9TVFJVQ1RfX2VudHJ5KCBcCi0JCV9fZmllbGQoZGV2X3QsIGRldikgXAotCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKSBcCi0JCV9fZmllbGQoaW50LCBvcF9mbGFncykgXAotCQlfX2ZpZWxkKGludCwgaWR4KSBcCi0JKSwgXAotCVRQX2Zhc3RfYXNzaWduKCBcCi0JCV9fZW50cnktPmRldiA9IFZGU19JKGFyZ3MtPmRwKS0+aV9zYi0+c19kZXY7IFwKLQkJX19lbnRyeS0+aW5vID0gYXJncy0+ZHAtPmlfaW5vOyBcCi0JCV9fZW50cnktPm9wX2ZsYWdzID0gYXJncy0+b3BfZmxhZ3M7IFwKLQkJX19lbnRyeS0+aWR4ID0gaWR4OyBcCi0JKSwgXAotCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggb3BfZmxhZ3MgJXMgaW5kZXggJWQiLCBcCi0JCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAotCQkgIF9fZW50cnktPmlubywgXAotCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+b3BfZmxhZ3MsICJ8IiwgWEZTX0RBX09QX0ZMQUdTKSwgXAotCQkgIF9fZW50cnktPmlkeCkgXAorI2RlZmluZSBERUZJTkVfRElSMl9FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQoeGZzX2RpcjJfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MpLCBcCisJVFBfQVJHUyhhcmdzKSkKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX3NmX2FkZG5hbWUpOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfc2ZfY3JlYXRlKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX3NmX2xvb2t1cCk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9zZl9yZXBsYWNlKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX3NmX3JlbW92ZW5hbWUpOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfc2ZfdG9pbm80KTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX3NmX3RvaW5vOCk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9zZl90b19ibG9jayk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9ibG9ja19hZGRuYW1lKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX2Jsb2NrX2xvb2t1cCk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9ibG9ja19yZXBsYWNlKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX2Jsb2NrX3JlbW92ZW5hbWUpOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfYmxvY2tfdG9fc2YpOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfYmxvY2tfdG9fbGVhZik7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9sZWFmX2FkZG5hbWUpOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfbGVhZl9sb29rdXApOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfbGVhZl9yZXBsYWNlKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX2xlYWZfcmVtb3ZlbmFtZSk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9sZWFmX3RvX2Jsb2NrKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX2xlYWZfdG9fbm9kZSk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9ub2RlX2FkZG5hbWUpOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfbm9kZV9sb29rdXApOworREVGSU5FX0RJUjJfRVZFTlQoeGZzX2RpcjJfbm9kZV9yZXBsYWNlKTsKK0RFRklORV9ESVIyX0VWRU5UKHhmc19kaXIyX25vZGVfcmVtb3ZlbmFtZSk7CitERUZJTkVfRElSMl9FVkVOVCh4ZnNfZGlyMl9ub2RlX3RvX2xlYWYpOworCitERUNMQVJFX0VWRU5UX0NMQVNTKHhmc19kaXIyX3NwYWNlX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgaW50IGlkeCksCisJVFBfQVJHUyhhcmdzLCBpZHgpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZCh4ZnNfaW5vX3QsIGlubykKKwkJX19maWVsZChpbnQsIG9wX2ZsYWdzKQorCQlfX2ZpZWxkKGludCwgaWR4KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldiA9IFZGU19JKGFyZ3MtPmRwKS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubyA9IGFyZ3MtPmRwLT5pX2lubzsKKwkJX19lbnRyeS0+b3BfZmxhZ3MgPSBhcmdzLT5vcF9mbGFnczsKKwkJX19lbnRyeS0+aWR4ID0gaWR4OworCSksCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBvcF9mbGFncyAlcyBpbmRleCAlZCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5vcF9mbGFncywgInwiLCBYRlNfREFfT1BfRkxBR1MpLAorCQkgIF9fZW50cnktPmlkeCkKICkKLURFRklORV9ESVIyX1NQQUNFX1RSQUNFKHhmc19kaXIyX2xlYWZuX2FkZCk7Ci1ERUZJTkVfRElSMl9TUEFDRV9UUkFDRSh4ZnNfZGlyMl9sZWFmbl9yZW1vdmUpOwotREVGSU5FX0RJUjJfU1BBQ0VfVFJBQ0UoeGZzX2RpcjJfZ3Jvd19pbm9kZSk7Ci1ERUZJTkVfRElSMl9TUEFDRV9UUkFDRSh4ZnNfZGlyMl9zaHJpbmtfaW5vZGUpOworCisjZGVmaW5lIERFRklORV9ESVIyX1NQQUNFX0VWRU5UKG5hbWUpIFwKK0RFRklORV9FVkVOVCh4ZnNfZGlyMl9zcGFjZV9jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgaW50IGlkeCksIFwKKwlUUF9BUkdTKGFyZ3MsIGlkeCkpCitERUZJTkVfRElSMl9TUEFDRV9FVkVOVCh4ZnNfZGlyMl9sZWFmbl9hZGQpOworREVGSU5FX0RJUjJfU1BBQ0VfRVZFTlQoeGZzX2RpcjJfbGVhZm5fcmVtb3ZlKTsKK0RFRklORV9ESVIyX1NQQUNFX0VWRU5UKHhmc19kaXIyX2dyb3dfaW5vZGUpOworREVGSU5FX0RJUjJfU1BBQ0VfRVZFTlQoeGZzX2RpcjJfc2hyaW5rX2lub2RlKTsKIAogVFJBQ0VfRVZFTlQoeGZzX2RpcjJfbGVhZm5fbW92ZWVudHMsCiAJVFBfUFJPVE8oc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCBpbnQgc3JjX2lkeCwgaW50IGRzdF9pZHgsIGludCBjb3VudCksCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggYTFjNjVmYy4uMjc1YjFmNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMjU2Myw0MyArMjU2Myw0MSBAQAogCXhmc19tb3VudF90CQkqbXA7CiAJeGZzX3BlcmFnX2J1c3lfdAkqYnN5OwogCXhmc19hZ2Jsb2NrX3QJCXVlbmQsIGJlbmQ7Ci0JeGZzX2xzbl90CQlsc247CisJeGZzX2xzbl90CQlsc24gPSAwOwogCWludAkJCWNudDsKIAogCW1wID0gdHAtPnRfbW91bnRwOwogCiAJc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOwotCWNudCA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQ7CiAKIAl1ZW5kID0gYm5vICsgbGVuIC0gMTsKIAotCS8qIHNlYXJjaCBwYWdiX2xpc3QgZm9yIHRoaXMgc2xvdCwgc2tpcHBpbmcgb3BlbiBzbG90cyAqLwotCWZvciAoYnN5ID0gbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0OyBjbnQ7IGJzeSsrKSB7CisJLyoKKwkgKiBzZWFyY2ggcGFnYl9saXN0IGZvciB0aGlzIHNsb3QsIHNraXBwaW5nIG9wZW4gc2xvdHMuIFdlIGhhdmUgdG8KKwkgKiBzZWFyY2ggdGhlIGVudGlyZSBhcnJheSBhcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgb3ZlcmxhcHMgYW5kCisJICogd2UgaGF2ZSB0byBnZXQgdGhlIG1vc3QgcmVjZW50IExTTiBmb3IgdGhlIGxvZyBmb3JjZSB0byBwdXNoIG91dAorCSAqIGFsbCB0aGUgdHJhbnNhY3Rpb25zIHRoYXQgc3BhbiB0aGUgcmFuZ2UuCisJICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2NvdW50OyBjbnQrKykgeworCQlic3kgPSAmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0W2NudF07CisJCWlmICghYnN5LT5idXN5X3RwKQorCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogKHN0YXJ0MSxsZW5ndGgxKSB3aXRoaW4gKHN0YXJ0MiwgbGVuZ3RoMikKLQkJICovCi0JCWlmIChic3ktPmJ1c3lfdHAgIT0gTlVMTCkgewotCQkJYmVuZCA9IGJzeS0+YnVzeV9zdGFydCArIGJzeS0+YnVzeV9sZW5ndGggLSAxOwotCQkJaWYgKChibm8gPiBiZW5kKSB8fCAodWVuZCA8IGJzeS0+YnVzeV9zdGFydCkpIHsKLQkJCQljbnQtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwkJYmVuZCA9IGJzeS0+YnVzeV9zdGFydCArIGJzeS0+YnVzeV9sZW5ndGggLSAxOworCQlpZiAoYm5vID4gYmVuZCB8fCB1ZW5kIDwgYnN5LT5idXN5X3N0YXJ0KQorCQkJY29udGludWU7CisKKwkJLyogKHN0YXJ0MSxsZW5ndGgxKSB3aXRoaW4gKHN0YXJ0MiwgbGVuZ3RoMikgKi8KKwkJaWYgKFhGU19MU05fQ01QKGJzeS0+YnVzeV90cC0+dF9jb21taXRfbHNuLCBsc24pID4gMCkKKwkJCWxzbiA9IGJzeS0+YnVzeV90cC0+dF9jb21taXRfbHNuOwogCX0KLQotCXRyYWNlX3hmc19hbGxvY19idXN5c2VhcmNoKG1wLCBhZ25vLCBibm8sIGxlbiwgISFjbnQpOworCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCXRyYWNlX3hmc19hbGxvY19idXN5c2VhcmNoKHRwLT50X21vdW50cCwgYWdubywgYm5vLCBsZW4sIGxzbik7CiAKIAkvKgogCSAqIElmIGEgYmxvY2sgd2FzIGZvdW5kLCBmb3JjZSB0aGUgbG9nIHRocm91Z2ggdGhlIExTTiBvZiB0aGUKIAkgKiB0cmFuc2FjdGlvbiB0aGF0IGZyZWVkIHRoZSBibG9jawogCSAqLwotCWlmIChjbnQpIHsKLQkJbHNuID0gYnN5LT5idXN5X3RwLT50X2NvbW1pdF9sc247Ci0JCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCWlmIChsc24pCiAJCXhmc19sb2dfZm9yY2UobXAsIGxzbiwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMpOwotCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOwotCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBjZTI3OGIzLi4zOTFkMzZiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0yODQxLDEwICsyODQxLDE0IEBACiAJbXAgPSBpcC0+aV9tb3VudDsKIAogCS8qCi0JICogSWYgdGhlIGlub2RlIGlzbid0IGRpcnR5LCB0aGVuIGp1c3QgcmVsZWFzZSB0aGUgaW5vZGUKLQkgKiBmbHVzaCBsb2NrIGFuZCBkbyBub3RoaW5nLgorCSAqIElmIHRoZSBpbm9kZSBpc24ndCBkaXJ0eSwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGlub2RlIGZsdXNoIGxvY2sgYW5kCisJICogZG8gbm90aGluZy4gVHJlYXQgc3RhbGUgaW5vZGVzIHRoZSBzYW1lOyB3ZSBjYW5ub3QgcmVseSBvbiB0aGUKKwkgKiBiYWNraW5nIGJ1ZmZlciByZW1haW5pbmcgc3RhbGUgaW4gY2FjaGUgZm9yIHRoZSByZW1haW5pbmcgbGlmZSBvZgorCSAqIHRoZSBzdGFsZSBpbm9kZSBhbmQgc28geGZzX2l0b2JwKCkgYmVsb3cgbWF5IGdpdmUgdXMgYSBidWZmZXIgdGhhdAorCSAqIG5vIGxvbmdlciBjb250YWlucyBpbm9kZXMgYmVsb3cuIERvaW5nIHRoaXMgc3RhbGUgY2hlY2sgaGVyZSBhbHNvCisJICogYXZvaWRzIGZvcmNpbmcgdGhlIGxvZyBvbiBwaW5uZWQsIHN0YWxlIGlub2Rlcy4KIAkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkgeworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApIHx8IHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lTVEFMRSkpIHsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IDY1NThmZmQuLjZmMjY4NzUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTcwLDcgKzcwLDYgQEAKIAl1aW50CQkJY29tbWl0X2ZsYWdzPTA7CiAJdWlkX3QJCQl1aWQ9MCwgaXVpZD0wOwogCWdpZF90CQkJZ2lkPTAsIGlnaWQ9MDsKLQlpbnQJCQl0aW1lZmxhZ3MgPSAwOwogCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAsICpnZHFwLCAqb2xkZHF1b3QxLCAqb2xkZHF1b3QyOwogCWludAkJCW5lZWRfaW9sb2NrID0gMTsKIApAQCAtMTM1LDE2ICsxMzQsMTMgQEAKIAlpZiAoZmxhZ3MgJiBYRlNfQVRUUl9OT0xPQ0spCiAJCW5lZWRfaW9sb2NrID0gMDsKIAlpZiAoIShtYXNrICYgQVRUUl9TSVpFKSkgewotCQlpZiAoKG1hc2sgIT0gKEFUVFJfQ1RJTUV8QVRUUl9BVElNRXxBVFRSX01USU1FKSkgfHwKLQkJICAgIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9XU1lOQykpIHsKLQkJCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfU0VUQVRUUl9OT1RfU0laRSk7Ci0JCQljb21taXRfZmxhZ3MgPSAwOwotCQkJaWYgKChjb2RlID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCi0JCQkJCQkgICAgIFhGU19JQ0hBTkdFX0xPR19SRVMobXApLCAwLAotCQkJCQkJICAgICAwLCAwKSkpIHsKLQkJCQlsb2NrX2ZsYWdzID0gMDsKLQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCX0KKwkJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19TRVRBVFRSX05PVF9TSVpFKTsKKwkJY29tbWl0X2ZsYWdzID0gMDsKKwkJY29kZSA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBYRlNfSUNIQU5HRV9MT0dfUkVTKG1wKSwKKwkJCQkJIDAsIDAsIDApOworCQlpZiAoY29kZSkgeworCQkJbG9ja19mbGFncyA9IDA7CisJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9UUlVOQ0FURSkgJiYKQEAgLTI5NSwxNSArMjkxLDIzIEBACiAJCSAqIG9yIHdlIGFyZSBleHBsaWNpdGx5IGFza2VkIHRvIGNoYW5nZSBpdC4gVGhpcyBoYW5kbGVzCiAJCSAqIHRoZSBzZW1hbnRpYyBkaWZmZXJlbmNlIGJldHdlZW4gdHJ1bmNhdGUoKSBhbmQgZnRydW5jYXRlKCkKIAkJICogYXMgaW1wbGVtZW50ZWQgaW4gdGhlIFZGUy4KKwkJICoKKwkJICogVGhlIHJlZ3VsYXIgdHJ1bmNhdGUoKSBjYXNlIHdpdGhvdXQgQVRUUl9DVElNRSBhbmQgQVRUUl9NVElNRQorCQkgKiBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgdGltZXMgZGVzcGl0ZQorCQkgKiBub3QgaGF2aW5nIHRoZXNlIGZsYWdzIHNldC4gIEZvciBhbGwgb3RoZXIgb3BlcmF0aW9ucyB0aGUKKwkJICogVkZTIHNldCB0aGVzZSBmbGFncyBleHBsaWNpdGx5IGlmIGl0IHdhbnRzIGEgdGltZXN0YW1wCisJCSAqIHVwZGF0ZS4KIAkJICovCi0JCWlmIChpYXR0ci0+aWFfc2l6ZSAhPSBpcC0+aV9zaXplIHx8IChtYXNrICYgQVRUUl9DVElNRSkpCi0JCQl0aW1lZmxhZ3MgfD0gWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEc7CisJCWlmIChpYXR0ci0+aWFfc2l6ZSAhPSBpcC0+aV9zaXplICYmCisJCSAgICAoIShtYXNrICYgKEFUVFJfQ1RJTUUgfCBBVFRSX01USU1FKSkpKSB7CisJCQlpYXR0ci0+aWFfY3RpbWUgPSBpYXR0ci0+aWFfbXRpbWUgPQorCQkJCWN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CisJCQltYXNrIHw9IEFUVFJfQ1RJTUUgfCBBVFRSX01USU1FOworCQl9CiAKIAkJaWYgKGlhdHRyLT5pYV9zaXplID4gaXAtPmlfc2l6ZSkgewogCQkJaXAtPmlfZC5kaV9zaXplID0gaWF0dHItPmlhX3NpemU7CiAJCQlpcC0+aV9zaXplID0gaWF0dHItPmlhX3NpemU7Ci0JCQlpZiAoIShmbGFncyAmIFhGU19BVFRSX0RNSSkpCi0JCQkJeGZzX2ljaGd0aW1lKGlwLCBYRlNfSUNIR1RJTUVfQ0hHKTsKIAkJCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKIAkJfSBlbHNlIGlmIChpYXR0ci0+aWFfc2l6ZSA8PSBpcC0+aV9zaXplIHx8CiAJCQkgICAoaWF0dHItPmlhX3NpemUgPT0gMCAmJiBpcC0+aV9kLmRpX25leHRlbnRzKSkgewpAQCAtMzc0LDkgKzM3OCw2IEBACiAJCQlpcC0+aV9kLmRpX2dpZCA9IGdpZDsKIAkJCWlub2RlLT5pX2dpZCA9IGdpZDsKIAkJfQotCi0JCXhmc190cmFuc19sb2dfaW5vZGUgKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JCXRpbWVmbGFncyB8PSBYRlNfSUNIR1RJTUVfQ0hHOwogCX0KIAogCS8qCkBAIC0zOTMsNTEgKzM5NCwzNyBAQAogCiAJCWlub2RlLT5pX21vZGUgJj0gU19JRk1UOwogCQlpbm9kZS0+aV9tb2RlIHw9IG1vZGUgJiB+U19JRk1UOwotCi0JCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQkJdGltZWZsYWdzIHw9IFhGU19JQ0hHVElNRV9DSEc7CiAJfQogCiAJLyoKIAkgKiBDaGFuZ2UgZmlsZSBhY2Nlc3Mgb3IgbW9kaWZpZWQgdGltZXMuCiAJICovCi0JaWYgKG1hc2sgJiAoQVRUUl9BVElNRXxBVFRSX01USU1FKSkgewotCQlpZiAobWFzayAmIEFUVFJfQVRJTUUpIHsKLQkJCWlub2RlLT5pX2F0aW1lID0gaWF0dHItPmlhX2F0aW1lOwotCQkJaXAtPmlfZC5kaV9hdGltZS50X3NlYyA9IGlhdHRyLT5pYV9hdGltZS50dl9zZWM7Ci0JCQlpcC0+aV9kLmRpX2F0aW1lLnRfbnNlYyA9IGlhdHRyLT5pYV9hdGltZS50dl9uc2VjOwotCQkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOwotCQl9Ci0JCWlmIChtYXNrICYgQVRUUl9NVElNRSkgewotCQkJaW5vZGUtPmlfbXRpbWUgPSBpYXR0ci0+aWFfbXRpbWU7Ci0JCQlpcC0+aV9kLmRpX210aW1lLnRfc2VjID0gaWF0dHItPmlhX210aW1lLnR2X3NlYzsKLQkJCWlwLT5pX2QuZGlfbXRpbWUudF9uc2VjID0gaWF0dHItPmlhX210aW1lLnR2X25zZWM7Ci0JCQl0aW1lZmxhZ3MgJj0gflhGU19JQ0hHVElNRV9NT0Q7Ci0JCQl0aW1lZmxhZ3MgfD0gWEZTX0lDSEdUSU1FX0NIRzsKLQkJfQotCQlpZiAodHAgJiYgKG1hc2sgJiAoQVRUUl9NVElNRV9TRVR8QVRUUl9BVElNRV9TRVQpKSkKLQkJCXhmc190cmFuc19sb2dfaW5vZGUgKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CisJaWYgKG1hc2sgJiBBVFRSX0FUSU1FKSB7CisJCWlub2RlLT5pX2F0aW1lID0gaWF0dHItPmlhX2F0aW1lOworCQlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gaWF0dHItPmlhX2F0aW1lLnR2X3NlYzsKKwkJaXAtPmlfZC5kaV9hdGltZS50X25zZWMgPSBpYXR0ci0+aWFfYXRpbWUudHZfbnNlYzsKKwkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOwogCX0KLQotCS8qCi0JICogQ2hhbmdlIGZpbGUgaW5vZGUgY2hhbmdlIHRpbWUgb25seSBpZiBBVFRSX0NUSU1FIHNldAotCSAqIEFORCB3ZSBoYXZlIGJlZW4gY2FsbGVkIGJ5IGEgRE1JIGZ1bmN0aW9uLgotCSAqLwotCi0JaWYgKChmbGFncyAmIFhGU19BVFRSX0RNSSkgJiYgKG1hc2sgJiBBVFRSX0NUSU1FKSkgeworCWlmIChtYXNrICYgQVRUUl9DVElNRSkgewogCQlpbm9kZS0+aV9jdGltZSA9IGlhdHRyLT5pYV9jdGltZTsKIAkJaXAtPmlfZC5kaV9jdGltZS50X3NlYyA9IGlhdHRyLT5pYV9jdGltZS50dl9zZWM7CiAJCWlwLT5pX2QuZGlfY3RpbWUudF9uc2VjID0gaWF0dHItPmlhX2N0aW1lLnR2X25zZWM7CiAJCWlwLT5pX3VwZGF0ZV9jb3JlID0gMTsKLQkJdGltZWZsYWdzICY9IH5YRlNfSUNIR1RJTUVfQ0hHOworCX0KKwlpZiAobWFzayAmIEFUVFJfTVRJTUUpIHsKKwkJaW5vZGUtPmlfbXRpbWUgPSBpYXR0ci0+aWFfbXRpbWU7CisJCWlwLT5pX2QuZGlfbXRpbWUudF9zZWMgPSBpYXR0ci0+aWFfbXRpbWUudHZfc2VjOworCQlpcC0+aV9kLmRpX210aW1lLnRfbnNlYyA9IGlhdHRyLT5pYV9tdGltZS50dl9uc2VjOworCQlpcC0+aV91cGRhdGVfY29yZSA9IDE7CiAJfQogCiAJLyoKLQkgKiBTZW5kIG91dCB0aW1lc3RhbXAgY2hhbmdlcyB0aGF0IG5lZWQgdG8gYmUgc2V0IHRvIHRoZQotCSAqIGN1cnJlbnQgdGltZS4gIE5vdCBkb25lIHdoZW4gY2FsbGVkIGJ5IGEgRE1JIGZ1bmN0aW9uLgorCSAqIEFuZCBmaW5hbGx5LCBsb2cgdGhlIGlub2RlIGNvcmUgaWYgYW55IGF0dHJpYnV0ZSBpbiBpdAorCSAqIGhhcyBiZWVuIGNoYW5nZWQuCiAJICovCi0JaWYgKHRpbWVmbGFncyAmJiAhKGZsYWdzICYgWEZTX0FUVFJfRE1JKSkKLQkJeGZzX2ljaGd0aW1lKGlwLCB0aW1lZmxhZ3MpOworCWlmIChtYXNrICYgKEFUVFJfVUlEfEFUVFJfR0lEfEFUVFJfTU9ERXwKKwkJICAgIEFUVFJfQVRJTUV8QVRUUl9DVElNRXxBVFRSX01USU1FKSkKKwkJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwogCiAJWEZTX1NUQVRTX0lOQyh4c19pZ19hdHRyY2hnKTsKIApAQCAtNDUyLDEyICs0MzksMTAgQEAKIAkgKiBtaXggc28gdGhpcyBwcm9iYWJseSBpc24ndCB3b3J0aCB0aGUgdHJvdWJsZSB0byBvcHRpbWl6ZS4KIAkgKi8KIAljb2RlID0gMDsKLQlpZiAodHApIHsKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKQotCQkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfV1NZTkMpCisJCXhmc190cmFuc19zZXRfc3luYyh0cCk7CiAKLQkJY29kZSA9IHhmc190cmFuc19jb21taXQodHAsIGNvbW1pdF9mbGFncyk7Ci0JfQorCWNvZGUgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBjb21taXRfZmxhZ3MpOwogCiAJeGZzX2l1bmxvY2soaXAsIGxvY2tfZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggMjkyNDVjNi4uMGVhNWVmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtMjI0LDggKzIyNCw2IEBACiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmcgdGhyb3R0bGluZzsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfbGltaXQgbGltaXQ7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXY7Ci0JLyogdGhlIF9QREMgb2JqZWN0cyBmb3IgdGhpcyBwcm9jZXNzb3IsIGlmIGFueSAqLwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0ICpwZGM7CiB9OwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfZXJyYXRhIHsKQEAgLTI1Nyw5ICsyNTUsNiBAQAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqLCBwcm9jZXNzb3JzKTsKIGV4dGVybiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfZXJyYXRhIGVycmF0YTsKIAotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwotdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2NsZWFudXBfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwotCiAjaWZkZWYgQVJDSF9IQVNfUE9XRVJfSU5JVAogdm9pZCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0X2JtX2NoZWNrKHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9mbGFncyAqZmxhZ3MsCiAJCQkJCXVuc2lnbmVkIGludCBjcHUpOwpAQCAtMzI1LDYgKzMyMCw5IEBACiAKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1BVX0ZSRVEgKi8KIAorLyogaW4gcHJvY2Vzc29yX3BkYy5jICovCit2b2lkIGFjcGlfcHJvY2Vzc29yX3NldF9wZGMoYWNwaV9oYW5kbGUgaGFuZGxlKTsKKwogLyogaW4gcHJvY2Vzc29yX3Rocm90dGxpbmcuYyAqLwogaW50IGFjcGlfcHJvY2Vzc29yX3RzdGF0ZV9oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfdGhyb3R0bGluZ19pbmZvKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDE5ZWY4ZWIuLmZmYWMxNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTI5Niw2ICsyOTYsNyBAQAogI2RlZmluZQlEUk1fTUFTVEVSCTB4MgogI2RlZmluZSBEUk1fUk9PVF9PTkxZCTB4NAogI2RlZmluZSBEUk1fQ09OVFJPTF9BTExPVyAweDgKKyNkZWZpbmUgRFJNX1VOTE9DS0VECTB4MTAKIAogc3RydWN0IGRybV9pb2N0bF9kZXNjIHsKIAl1bnNpZ25lZCBpbnQgY21kOwpAQCAtMTEyOCw4ICsxMTI5LDggQEAKIAkJCQkvKiBEcml2ZXIgc3VwcG9ydCAoZHJtX2Rydi5oKSAqLwogZXh0ZXJuIGludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKTsKIGV4dGVybiB2b2lkIGRybV9leGl0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpOwotZXh0ZXJuIGludCBkcm1faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworZXh0ZXJuIGxvbmcgZHJtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gbG9uZyBkcm1fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gaW50IGRybV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC0xNDA3LDcgKzE0MDgsNyBAQAogCQkJCSAgIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqIGdhcnRfaW5mbyk7CiAKIGV4dGVybiBkcm1fZG1hX2hhbmRsZV90ICpkcm1fcGNpX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICBzaXplX3QgYWxpZ24sIGRtYV9hZGRyX3QgbWF4YWRkcik7CisJCQkJICAgICAgIHNpemVfdCBhbGlnbik7CiBleHRlcm4gdm9pZCBfX2RybV9wY2lfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fZG1hX2hhbmRsZV90ICogZG1haCk7CiBleHRlcm4gdm9pZCBkcm1fcGNpX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX2RtYV9oYW5kbGVfdCAqIGRtYWgpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAppbmRleCA0MzAwOWJjLi5iYzRmZGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKQEAgLTE2MCw2ICsxNjAsNyBAQAogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEJMTEKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCCTEyCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9UVgkJMTMKKyNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX2VEUAkJMTQKIAogc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgewogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAppbmRleCBlYzNmNWU4MC4uYjY0YThkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCkBAIC0xODgsNiArMTg4LDcgQEAKICNkZWZpbmUgRFJNX0k5MTVfR0VNX01BRFZJU0UJMHgyNgogI2RlZmluZSBEUk1fSTkxNV9PVkVSTEFZX1BVVF9JTUFHRQkweDI3CiAjZGVmaW5lIERSTV9JOTE1X09WRVJMQVlfQVRUUlMJMHgyOAorI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUjIJMHgyOQogCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0lOSVQJCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JTklULCBkcm1faTkxNV9pbml0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0ZMVVNICQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfRkxVU0gpCkBAIC0yMDcsNiArMjA4LDcgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfVkJMQU5LX1NXQVAJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1ZCTEFOS19TV0FQLCBkcm1faTkxNV92Ymxhbmtfc3dhcF90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fSU5JVAkJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0lOSVQsIHN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0VYRUNCVUZGRVIsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMikKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1BJTgkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9QSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fcGluKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVU5QSU4JRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1VOUElOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fQlVTWQkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9CVVNZLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kpCkBAIC0yNzIsNiArMjc0LDcgQEAKICNkZWZpbmUgSTkxNV9QQVJBTV9OVU1fRkVOQ0VTX0FWQUlMICAgICAgNgogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19PVkVSTEFZICAgICAgICAgICA3CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1BBR0VGTElQUElORwkgOAorI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDQlVGMiAgICAgICAgICA5CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtIHsKIAlpbnQgcGFyYW07CkBAIC01NjcsNiArNTcwLDU3IEBACiAJX191NjQgY2xpcHJlY3RzX3B0cjsKIH07CiAKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIHsKKwkvKioKKwkgKiBVc2VyJ3MgaGFuZGxlIGZvciBhIGJ1ZmZlciB0byBiZSBib3VuZCBpbnRvIHRoZSBHVFQgZm9yIHRoaXMKKwkgKiBvcGVyYXRpb24uCisJICovCisJX191MzIgaGFuZGxlOworCisJLyoqIE51bWJlciBvZiByZWxvY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBidWZmZXIgKi8KKwlfX3UzMiByZWxvY2F0aW9uX2NvdW50OworCS8qKgorCSAqIFBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGNvbnRhaW5pbmcKKwkgKiB0aGUgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIGluIHRoaXMgYnVmZmVyLgorCSAqLworCV9fdTY0IHJlbG9jc19wdHI7CisKKwkvKiogUmVxdWlyZWQgYWxpZ25tZW50IGluIGdyYXBoaWNzIGFwZXJ0dXJlICovCisJX191NjQgYWxpZ25tZW50OworCisJLyoqCisJICogUmV0dXJuZWQgdmFsdWUgb2YgdGhlIHVwZGF0ZWQgb2Zmc2V0IG9mIHRoZSBvYmplY3QsIGZvciBmdXR1cmUKKwkgKiBwcmVzdW1lZF9vZmZzZXQgd3JpdGVzLgorCSAqLworCV9fdTY0IG9mZnNldDsKKworI2RlZmluZSBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAoMTw8MCkKKwlfX3U2NCBmbGFnczsKKwlfX3U2NCByc3ZkMTsKKwlfX3U2NCByc3ZkMjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgeworCS8qKgorCSAqIExpc3Qgb2YgZ2VtX2V4ZWNfb2JqZWN0MiBzdHJ1Y3RzCisJICovCisJX191NjQgYnVmZmVyc19wdHI7CisJX191MzIgYnVmZmVyX2NvdW50OworCisJLyoqIE9mZnNldCBpbiB0aGUgYmF0Y2hidWZmZXIgdG8gc3RhcnQgZXhlY3V0aW9uIGZyb20uICovCisJX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OworCS8qKiBCeXRlcyB1c2VkIGluIGJhdGNoYnVmZmVyIGZyb20gYmF0Y2hfc3RhcnRfb2Zmc2V0ICovCisJX191MzIgYmF0Y2hfbGVuOworCV9fdTMyIERSMTsKKwlfX3UzMiBEUjQ7CisJX191MzIgbnVtX2NsaXByZWN0czsKKwkvKiogVGhpcyBpcyBhIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgKi8KKwlfX3U2NCBjbGlwcmVjdHNfcHRyOworCV9fdTY0IGZsYWdzOyAvKiBjdXJyZW50bHkgdW51c2VkICovCisJX191NjQgcnN2ZDE7CisJX191NjQgcnN2ZDI7Cit9OworCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KIAlfX3UzMiBoYW5kbGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IGNlOTQ1ZDQuLjM2OTI0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0yNTEsNiArMjUxLDcgQEAKIHZvaWQgX19pbml0IGFjcGlfbm9fczRfaHdfc2lnbmF0dXJlKHZvaWQpOwogdm9pZCBfX2luaXQgYWNwaV9vbGRfc3VzcGVuZF9vcmRlcmluZyh2b2lkKTsKIHZvaWQgX19pbml0IGFjcGlfczRfbm9fbnZzKHZvaWQpOwordm9pZCBfX2luaXQgYWNwaV9zZXRfc2NpX2VuX29uX3Jlc3VtZSh2b2lkKTsKICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogc3RydWN0IGFjcGlfb3NjX2NvbnRleHQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaCBiL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKaW5kZXggMGY1ZjU3OC4uOGM0Zjg4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCkBAIC0zNiwxOCArMzYsMTggQEAKIHN0cnVjdCBmYl9pbmZvOwogCiBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB7Ci0JdW5zaWduZWQgaW50IG9wdGlvbnM7CisJY29uc3QgdW5zaWduZWQgaW50IG9wdGlvbnM7CiAKICNkZWZpbmUgQkxfQ09SRV9TVVNQRU5EUkVTVU1FCSgxIDw8IDApCiAKIAkvKiBOb3RpZnkgdGhlIGJhY2tsaWdodCBkcml2ZXIgc29tZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCAqLwotCWludCAoKnVwZGF0ZV9zdGF0dXMpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICopOworCWludCAoKiBjb25zdCB1cGRhdGVfc3RhdHVzKShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqKTsKIAkvKiBSZXR1cm4gdGhlIGN1cnJlbnQgYmFja2xpZ2h0IGJyaWdodG5lc3MgKGFjY291bnRpbmcgZm9yIHBvd2VyLAogCSAgIGZiX2JsYW5rIGV0Yy4pICovCi0JaW50ICgqZ2V0X2JyaWdodG5lc3MpKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICopOworCWludCAoKiBjb25zdCBnZXRfYnJpZ2h0bmVzcykoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKik7CiAJLyogQ2hlY2sgaWYgZ2l2ZW4gZnJhbWVidWZmZXIgZGV2aWNlIGlzIHRoZSBvbmUgYm91bmQgdG8gdGhpcyBiYWNrbGlnaHQ7CiAJICAgcmV0dXJuIDAgaWYgbm90LCAhPTAgaWYgaXQgaXMuIElmIE5VTEwsIGJhY2tsaWdodCBhbHdheXMgbWF0Y2hlcyB0aGUgZmIuICovCi0JaW50ICgqY2hlY2tfZmIpKHN0cnVjdCBmYl9pbmZvICopOworCWludCAoKiBjb25zdCBjaGVja19mYikoc3RydWN0IGZiX2luZm8gKik7CiB9OwogCiAvKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGFsbCB0aGUgcHJvcGVydGllcyBvZiBhIGJhY2tsaWdodCAqLwpAQCAtODYsNyArODYsNyBAQAogCSAgIHJlZ2lzdGVyZWQgdGhpcyBkZXZpY2UgaGFzIGJlZW4gdW5sb2FkZWQsIGFuZCBpZiBjbGFzc19nZXRfZGV2ZGF0YSgpCiAJICAgcG9pbnRzIHRvIHNvbWV0aGluZyBpbiB0aGUgYm9keSBvZiB0aGF0IGRyaXZlciwgaXQgaXMgYWxzbyBpbnZhbGlkLiAqLwogCXN0cnVjdCBtdXRleCBvcHNfbG9jazsKLQlzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzOworCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHM7CiAKIAkvKiBUaGUgZnJhbWVidWZmZXIgbm90aWZpZXIgYmxvY2sgKi8KIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmJfbm90aWY7CkBAIC0xMDMsNyArMTAzLDcgQEAKIH0KIAogZXh0ZXJuIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCi0Jc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRldmRhdGEsIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CiBleHRlcm4gdm9pZCBiYWNrbGlnaHRfZm9yY2VfdXBkYXRlKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCwKIAkJCQkgICBlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHJlYXNvbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCmluZGV4IGFlY2U0ODYuLmNkNDM0OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC02OCw2ICs2OCwxNCBAQAogCiAjZGVmaW5lIEJJTlBSTV9NQVhfUkVDVVJTSU9OIDQKIAorLyogRnVuY3Rpb24gcGFyYW1ldGVyIGZvciBiaW5mbXQtPmNvcmVkdW1wICovCitzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zIHsKKwlsb25nIHNpZ25yOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXN0cnVjdCBmaWxlICpmaWxlOworCXVuc2lnbmVkIGxvbmcgbGltaXQ7Cit9OworCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgdG8gbG9hZCB0aGUgYmluYXJ5IGZvcm1hdHMgdGhhdAogICogbGludXggYWNjZXB0cy4KQEAgLTc3LDcgKzg1LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAJaW50ICgqbG9hZF9iaW5hcnkpKHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0ICBwdF9yZWdzICogcmVncyk7CiAJaW50ICgqbG9hZF9zaGxpYikoc3RydWN0IGZpbGUgKik7Ci0JaW50ICgqY29yZV9kdW1wKShsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgbGltaXQpOworCWludCAoKmNvcmVfZHVtcCkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAJdW5zaWduZWQgbG9uZyBtaW5fY29yZWR1bXA7CS8qIG1pbmltYWwgZHVtcCBzaXplICovCiAJaW50IGhhc3Zkc287CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNzg0YTkxOS4uOWI5ODE3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04NDUsNyArODQ1LDYgQEAKICAqIGJsa19ycV9lcnJfYnl0ZXMoKQkJOiBieXRlcyBsZWZ0IHRpbGwgdGhlIG5leHQgZXJyb3IgYm91bmRhcnkKICAqIGJsa19ycV9zZWN0b3JzKCkJCTogc2VjdG9ycyBsZWZ0IGluIHRoZSBlbnRpcmUgcmVxdWVzdAogICogYmxrX3JxX2N1cl9zZWN0b3JzKCkJCTogc2VjdG9ycyBsZWZ0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQKLSAqIGJsa19ycV9lcnJfc2VjdG9ycygpCQk6IHNlY3RvcnMgbGVmdCB0aWxsIHRoZSBuZXh0IGVycm9yIGJvdW5kYXJ5CiAgKi8KIHN0YXRpYyBpbmxpbmUgc2VjdG9yX3QgYmxrX3JxX3Bvcyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC04NzQsMTEgKzg3Myw2IEBACiAJcmV0dXJuIGJsa19ycV9jdXJfYnl0ZXMocnEpID4+IDk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19ycV9lcnJfc2VjdG9ycyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JcmV0dXJuIGJsa19ycV9lcnJfYnl0ZXMocnEpID4+IDk7Ci19Ci0KIC8qCiAgKiBSZXF1ZXN0IGlzc3VlIHJlbGF0ZWQgZnVuY3Rpb25zLgogICovCkBAIC0xMTE2LDExICsxMTEwLDE4IEBACiAJcmV0dXJuIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgc2VjdG9yX3Qgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBncmFudWxhcml0eSA9IG1heChsaW0tPnBoeXNpY2FsX2Jsb2NrX3NpemUsIGxpbS0+aW9fbWluKTsKKworCW9mZnNldCAmPSBncmFudWxhcml0eSAtIDE7CisJcmV0dXJuIChncmFudWxhcml0eSArIGxpbS0+YWxpZ25tZW50X29mZnNldCAtIG9mZnNldCkgJiAoZ3JhbnVsYXJpdHkgLSAxKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcXVldWVfc2VjdG9yX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkJCQlzZWN0b3JfdCBzZWN0b3IpCiB7Ci0JcmV0dXJuICgoc2VjdG9yIDw8IDkpIC0gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQpCi0JCSYgKHEtPmxpbWl0cy5pb19taW4gLSAxKTsKKwlyZXR1cm4gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldCgmcS0+bGltaXRzLCBzZWN0b3IgPDwgOSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJkZXZfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaAppbmRleCAxMmZmOGMzLi41MDMyYjlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaApAQCAtMjUsNyArMjUsNyBAQAogCXZvaWQgKnA7CiAKIAlpZiAoc2l6ZSA8IDApCi0JCWVycm9yKCJNYWxsb2MgZXJyb3IiKTsKKwkJcmV0dXJuIE5VTEw7CiAJaWYgKCFtYWxsb2NfcHRyKQogCQltYWxsb2NfcHRyID0gZnJlZV9tZW1fcHRyOwogCkBAIC0zNSw3ICszNSw3IEBACiAJbWFsbG9jX3B0ciArPSBzaXplOwogCiAJaWYgKGZyZWVfbWVtX2VuZF9wdHIgJiYgbWFsbG9jX3B0ciA+PSBmcmVlX21lbV9lbmRfcHRyKQotCQllcnJvcigiT3V0IG9mIG1lbW9yeSIpOworCQlyZXR1cm4gTlVMTDsKIAogCW1hbGxvY19jb3VudCsrOwogCXJldHVybiBwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL3VubHpvLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvdW5sem8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODcyMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL3VubHpvLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBERUNPTVBSRVNTX1VOTFpPX0gKKyNkZWZpbmUgREVDT01QUkVTU19VTkxaT19ICisKK2ludCB1bmx6byh1bnNpZ25lZCBjaGFyICppbmJ1ZiwgaW50IGxlbiwKKwlpbnQoKmZpbGwpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCWludCgqZmx1c2gpKHZvaWQqLCB1bnNpZ25lZCBpbnQpLAorCXVuc2lnbmVkIGNoYXIgKm91dHB1dCwKKwlpbnQgKnBvcywKKwl2b2lkKCplcnJvcikoY2hhciAqeCkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCAyYTczZDliLi5hNjI3OTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTE2Niw5ICsxNjYsOSBAQAogCV9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRyaXZlcl9jcmVhdGVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAotCQkJCQkgICBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkJCWNvbnN0IHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiB2b2lkIGRyaXZlcl9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAotCQkJICAgICAgIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICphdHRyKTsKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqYXR0cik7CiAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRyaXZlcl9hZGRfa29iaihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAogCQkJCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTMxOSwxMyArMzE5LDEzIEBACiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKIAogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmVudHJ5KTsKKwkJCQkJY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmVudHJ5KTsKIGV4dGVybiB2b2lkIGRldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIpOworCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKTsKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOworCQkJCQljb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwogZXh0ZXJuIGludCBkZXZpY2Vfc2NoZWR1bGVfY2FsbGJhY2tfb3duZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQl2b2lkICgqZnVuYykoc3RydWN0IGRldmljZSAqZGV2KSwgc3RydWN0IG1vZHVsZSAqb3duZXIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzdC5oIGIvaW5jbHVkZS9saW51eC9kc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI2ZmVkOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTg3ICswLDAgQEAKLS8qCi0gKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9fRFNUX0gKLSNkZWZpbmUgX19EU1RfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KLQotI2RlZmluZSBEU1RfTkFNRUxFTgkJMzIKLSNkZWZpbmUgRFNUX05BTUUJCSJkc3QiCi0KLWVudW0gewotCS8qIFJlbW92ZSBub2RlIHdpdGggZ2l2ZW4gaWQgZnJvbSBzdG9yYWdlICovCi0JRFNUX0RFTF9OT0RFCT0gMCwKLQkvKiBBZGQgcmVtb3RlIG5vZGUgd2l0aCBnaXZlbiBpZCB0byB0aGUgc3RvcmFnZSAqLwotCURTVF9BRERfUkVNT1RFLAotCS8qIEFkZCBsb2NhbCBub2RlIHdpdGggZ2l2ZW4gaWQgdG8gdGhlIHN0b3JhZ2UgdG8gYmUgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgcmVtb3RlIHBlZXJzICovCi0JRFNUX0FERF9FWFBPUlQsCi0JLyogQ3J5cHRvIGluaXRpYWxpemF0aW9uIGNvbW1hbmQgKGhhc2gvY2lwaGVyIHVzZWQgdG8gcHJvdGVjdCB0aGUgY29ubmVjdGlvbikgKi8KLQlEU1RfQ1JZUFRPLAotCS8qIFNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGdpdmVuIGNvbm5lY3Rpb24gKHBlcm1pc3Npb25zIGZvciBleGFtcGxlKSAqLwotCURTVF9TRUNVUklUWSwKLQkvKiBSZWdpc3RlciBnaXZlbiBub2RlIGluIHRoZSBibG9jayBsYXllciBzdWJzeXN0ZW0gKi8KLQlEU1RfU1RBUlQsCi0JRFNUX0NNRF9NQVgKLX07Ci0KLXN0cnVjdCBkc3RfY3RsCi17Ci0JLyogU3RvcmFnZSBuYW1lICovCi0JY2hhcgkJCW5hbWVbRFNUX05BTUVMRU5dOwotCS8qIENvbW1hbmQgZmxhZ3MgKi8KLQlfX3UzMgkJCWZsYWdzOwotCS8qIENvbW1hbmQgaXRzZWxmIChzZWUgYWJvdmUpICovCi0JX191MzIJCQljbWQ7Ci0JLyogTWF4aW11bSBudW1iZXIgb2YgcGFnZXMgcGVyIHNpbmdsZSByZXF1ZXN0IGluIHRoaXMgZGV2aWNlICovCi0JX191MzIJCQltYXhfcGFnZXM7Ci0JLyogU3RhbGUvZXJyb3IgdHJhbnNhY3Rpb24gc2Nhbm5pbmcgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KLQlfX3UzMgkJCXRyYW5zX3NjYW5fdGltZW91dDsKLQkvKiBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBzZW5kcyBiZWZvcmUgY29tcGxldGluZyB0cmFuc2FjdGlvbiBhcyBicm9rZW4gKi8KLQlfX3UzMgkJCXRyYW5zX21heF9yZXRyaWVzOwotCS8qIFN0b3JhZ2Ugc2l6ZSAqLwotCV9fdTY0CQkJc2l6ZTsKLX07Ci0KLS8qIFJlcGx5IGNvbW1hbmQgY2FycmllcyBjb21wbGV0aW9uIHN0YXR1cyAqLwotc3RydWN0IGRzdF9jdGxfYWNrCi17Ci0Jc3RydWN0IGNuX21zZwkJbXNnOwotCWludAkJCWVycm9yOwotCWludAkJCXVudXNlZFszXTsKLX07Ci0KLS8qCi0gKiBVbmZvcnR1bmFsdGVseSBzb2NrZXQgYWRkcmVzcyBzdHJ1Y3R1cmUgaXMgbm90IGV4cG9ydGVkIHRvIHVzZXJzcGFjZQotICogYW5kIGlzIHJlZGVmaW5lZCB0aGVyZS4KLSAqLwotI2RlZmluZSBTQUREUl9NQVhfREFUQQkxMjgKLQotc3RydWN0IHNhZGRyIHsKLQkvKiBhZGRyZXNzIGZhbWlseSwgQUZfeHh4CSovCi0JdW5zaWduZWQgc2hvcnQJCXNhX2ZhbWlseTsKLQkvKiAxNCBieXRlcyBvZiBwcm90b2NvbCBhZGRyZXNzCSovCi0JY2hhcgkJCXNhX2RhdGFbU0FERFJfTUFYX0RBVEFdOwotCS8qIE51bWJlciBvZiBieXRlcyB1c2VkIGluIHNhX2RhdGEgKi8KLQl1bnNpZ25lZCBzaG9ydAkJc2FfZGF0YV9sZW47Ci19OwotCi0vKiBBZGRyZXNzIHN0cnVjdHVyZSAqLwotc3RydWN0IGRzdF9uZXR3b3JrX2N0bAotewotCS8qIFNvY2tldCB0eXBlOiBkYXRhZ3JhbSwgc3RyZWFtLi4uKi8KLQl1bnNpZ25lZCBpbnQJCXR5cGU7Ci0JLyogTGV0IG1lIGd1ZXNzLCBpcyBpdCBhIEp1cGl0ZXIgZGlhbWV0ZXI/ICovCi0JdW5zaWduZWQgaW50CQlwcm90bzsKLQkvKiBQZWVyJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzYWRkcgkJYWRkcjsKLX07Ci0KLXN0cnVjdCBkc3RfY3J5cHRvX2N0bAotewotCS8qIENpcGhlciBhbmQgaGFzaCBuYW1lcyAqLwotCWNoYXIJCQljaXBoZXJfYWxnb1tEU1RfTkFNRUxFTl07Ci0JY2hhcgkJCWhhc2hfYWxnb1tEU1RfTkFNRUxFTl07Ci0KLQkvKiBLZXkgc2l6ZXMuIENhbiBiZSB6ZXJvIGZvciBkaWdlc3QgZm9yIGV4YW1wbGUgKi8KLQl1bnNpZ25lZCBpbnQJCWNpcGhlcl9rZXlzaXplLCBoYXNoX2tleXNpemU7Ci0JLyogQWxpZ25tZW50LiBDYWxjdWxhdGVkIGJ5IHRoZSBEU1QgaXRzZWxmLiAqLwotCXVuc2lnbmVkIGludAkJY3J5cHRvX2F0dGFjaGVkX3NpemU7Ci0JLyogTnVtYmVyIG9mIHRocmVhZHMgdG8gcGVyZm9ybSBjcnlwdG8gb3BlcmF0aW9ucyAqLwotCWludAkJCXRocmVhZF9udW07Ci19OwotCi0vKiBFeHBvcnQgc2VjdXJpdHkgYXR0cmlidXRlcyBoYXZlIHRoaXMgYml0cyBjaGVja2VkIGluIHdoZW4gY2xpZW50IGNvbm5lY3RzICovCi0jZGVmaW5lIERTVF9QRVJNX1JFQUQJCSgxPDwwKQotI2RlZmluZSBEU1RfUEVSTV9XUklURQkJKDE8PDEpCi0KLS8qCi0gKiBSaWdodCBub3cgaXQgaXMgc2ltcGxlIG1vZGVsLCB3aGVyZSBlYWNoIHJlbW90ZSBhZGRyZXNzCi0gKiBpcyBhc3NpZ25lZCB0byBzZXQgb2YgcGVybWlzc2lvbnMgaXQgaXMgYWxsb3dlZCB0byBwZXJmb3JtLgotICogSW4gcmVhbCB3b3JsZCBibG9jayBkZXZpY2UgZG9lcyBub3Qga25vdyBhbnl0aGluZyBidXQKLSAqIHJlYWRpbmcgYW5kIHdyaXRpbmcsIHNvIGl0IHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLgotICovCi1zdHJ1Y3QgZHN0X3NlY3VyZV91c2VyCi17Ci0JdW5zaWduZWQgaW50CQlwZXJtaXNzaW9uczsKLQlzdHJ1Y3Qgc2FkZHIJCWFkZHI7Ci19OwotCi0vKgotICogRXhwb3J0IGNvbnRyb2wgY29tbWFuZDogZGV2aWNlIHRvIGV4cG9ydCBhbmQgbmV0d29yayBhZGRyZXNzIHRvIGFjY2VwdAotICogY2xpZW50cyB0byB3b3JrIHdpdGggZ2l2ZW4gZGV2aWNlCi0gKi8KLXN0cnVjdCBkc3RfZXhwb3J0X2N0bAotewotCWNoYXIJCQlkZXZpY2VbRFNUX05BTUVMRU5dOwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJY3RsOwotfTsKLQotZW51bSB7Ci0JRFNUX0NGRwk9IDEsIAkJLyogUmVxdWVzdCByZW1vdGUgY29uZmlndXJhdGlvbiAqLwotCURTVF9JTywJCQkvKiBJTyBjb21tYW5kICovCi0JRFNUX0lPX1JFU1BPTlNFLAkvKiBJTyByZXNwb25zZSAqLwotCURTVF9QSU5HLAkJLyogS2VlcGFsaXZlIG1lc3NhZ2UgKi8KLQlEU1RfTkNNRF9NQVgsCi19OwotCi1zdHJ1Y3QgZHN0X2NtZAotewotCS8qIE5ldHdvcmsgY29tbWFuZCBpdHNlbGYsIHNlZSBhYm92ZSAqLwotCV9fdTMyCQkJY21kOwotCS8qCi0JICogU2l6ZSBvZiB0aGUgYXR0YWNoZWQgZGF0YQotCSAqIChpbiBtb3N0IGNhc2VzLCBmb3IgUkVBRCBjb21tYW5kIGl0IG1lYW5zIGhvdyBtYW55IGJ5dGVzIHdlcmUgcmVxdWVzdGVkKQotCSAqLwotCV9fdTMyCQkJc2l6ZTsKLQkvKiBDcnlwdG8gc2l6ZTogbnVtYmVyIG9mIGF0dGFjaGVkIGJ5dGVzIHdpdGggZGlnZXN0L2htYWMgKi8KLQlfX3UzMgkJCWNzaXplOwotCS8qIEhlcmUgd2UgY2FuIGNhcnJ5IHNlY3JldCBkYXRhICovCi0JX191MzIJCQlyZXNlcnZlZDsKLQkvKiBSZWFkL3dyaXRlIGJpdHMsIHNlZSBob3cgdGhleSBhcmUgZW5jb2RlZCBpbiBiaW8gc3RydWN0dXJlICovCi0JX191NjQJCQlydzsKLQkvKiBCSU8gZmxhZ3MgKi8KLQlfX3U2NAkJCWZsYWdzOwotCS8qIFVuaXF1ZSBjb21tYW5kIGlkIChsaWtlIHRyYW5zYWN0aW9uIElEKSAqLwotCV9fdTY0CQkJaWQ7Ci0JLyogU2VjdG9yIHRvIHN0YXJ0IElPIGZyb20gKi8KLQlfX3U2NAkJCXNlY3RvcjsKLQkvKiBIYXNoIGRhdGEgaXMgcGxhY2VkIGFmdGVyIHRoaXMgaGVhZGVyICovCi0JX191OAkJCWhhc2hbMF07Ci19OwotCi0vKgotICogQ29udmVydCBjb21tYW5kIHRvL2Zyb20gbmV0d29yayBieXRlIG9yZGVyLgotICogV2UgZG8gbm90IHVzZSBodG9uKigpIGZ1bmN0aW9ucywgc2luY2UgdGhlcmUgaXMKLSAqIG5vIDY0LWJpdCBpbXBsZW1lbnRhdGlvbi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRzdF9jb252ZXJ0X2NtZChzdHJ1Y3QgZHN0X2NtZCAqYykKLXsKLQljLT5jbWQgPSBfX2NwdV90b19iZTMyKGMtPmNtZCk7Ci0JYy0+Y3NpemUgPSBfX2NwdV90b19iZTMyKGMtPmNzaXplKTsKLQljLT5zaXplID0gX19jcHVfdG9fYmUzMihjLT5zaXplKTsKLQljLT5zZWN0b3IgPSBfX2NwdV90b19iZTY0KGMtPnNlY3Rvcik7Ci0JYy0+aWQgPSBfX2NwdV90b19iZTY0KGMtPmlkKTsKLQljLT5mbGFncyA9IF9fY3B1X3RvX2JlNjQoYy0+ZmxhZ3MpOwotCWMtPnJ3ID0gX19jcHVfdG9fYmU2NChjLT5ydyk7Ci19Ci0KLS8qIFRyYW5zYWN0aW9uIGlkICovCi10eXBlZGVmIF9fdTY0IGRzdF9nZW5fdDsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0KLSNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCi0jZGVmaW5lIGRwcmludGsoZiwgYS4uLikgcHJpbnRrKEtFUk5fTk9USUNFIGYsICMjYSkKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCi0JZHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikge30KLSNlbmRpZgotCi1zdHJ1Y3QgZHN0X25vZGU7Ci0KLXN0cnVjdCBkc3RfdHJhbnMKLXsKLQkvKiBEU1Qgbm9kZSB3ZSBhcmUgd29ya2luZyB3aXRoICovCi0Jc3RydWN0IGRzdF9ub2RlCQkqbjsKLQotCS8qIEVudHJ5IGluc2lkZSB0cmFuc2FjdGlvbiB0cmVlICovCi0Jc3RydWN0IHJiX25vZGUJCXRyYW5zX2VudHJ5OwotCi0JLyogTWVybGluIGtpbGxzIHRoaXMgdHJhbnNhY3Rpb24gd2hlbiB0aGlzIG1lbW9yeSBjZWxsIGVxdWFscyB6ZXJvICovCi0JYXRvbWljX3QJCXJlZmNudDsKLQotCS8qIEhvdyB0aGlzIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBwcm9jZXNzZWQgYnkgY3J5cHRvIGVuZ2luZSAqLwotCXNob3J0CQkJZW5jOwotCS8qIEhvdyBtYW55IHRpbWVzIHRoaXMgdHJhbnNhY3Rpb24gd2FzIHJlc2VudCAqLwotCXNob3J0CQkJcmV0cmllczsKLQkvKiBDb21wbGV0aW9uIHN0YXR1cyAqLwotCWludAkJCWVycm9yOwotCi0JLyogV2hlbiBkaWQgd2Ugc2VuZCBpdCB0byB0aGUgcmVtb3RlIHBlZXIgKi8KLQlsb25nCQkJc2VuZF90aW1lOwotCi0JLyogTXkgbmFtZSBpcy4uLgotCSAqIFdlbGwsIGNvbXB1dGVycyBkb2VzIG5vdCBzcGVhaywgdGhleSBoYXZlIHVuaXF1ZSBpZCBpbnN0ZWFkICovCi0JZHN0X2dlbl90CQlnZW47Ci0KLQkvKiBCbG9jayBJTyB3ZSBhcmUgd29ya2luZyB3aXRoICovCi0Jc3RydWN0IGJpbwkJKmJpbzsKLQotCS8qIE5ldHdvcmsgY29tbWFuZCBmb3IgYWJvdmUgYmxvY2sgSU8gcmVxdWVzdCAqLwotCXN0cnVjdCBkc3RfY21kCQljbWQ7Ci19OwotCi1zdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUKLXsKLQkvKiBXaGF0IHNob3VsZCB3ZSBkbyB3aXRoIGFsbCBibG9jayByZXF1ZXN0cyAqLwotCXN0cnVjdCBjcnlwdG9faGFzaAkqaGFzaDsKLQlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIJKmNpcGhlcjsKLQotCS8qIFBvb2wgb2YgcGFnZXMgdXNlZCB0byBlbmNyeXB0IGRhdGEgaW50byBiZWZvcmUgc2VuZGluZyAqLwotCWludAkJCXBhZ2VfbnVtOwotCXN0cnVjdCBwYWdlCQkqKnBhZ2VzOwotCi0JLyogV2hhdCB0byBkbyB3aXRoIGN1cnJlbnQgcmVxdWVzdCAqLwotCWludAkJCWVuYzsKLQkvKiBXaG8gd2UgYXJlIGFuZCB3aGVyZSBkbyB3ZSBnbyAqLwotCXN0cnVjdCBzY2F0dGVybGlzdAkqc3JjLCAqZHN0OwotCi0JLyogTWF4aW11bSB0aW1lb3V0IHdhaXRpbmcgZm9yIGVuY3J5cHRpb24gdG8gYmUgY29tcGxldGVkICovCi0JbG9uZwkJCXRpbWVvdXQ7Ci0JLyogSVYgaXMgYSA2NC1iaXQgc2VxdWVudGlhbCBjb3VudGVyICovCi0JdTY0CQkJaXY7Ci0KLQkvKiBTZWNyZXQgZGF0YSAqLwotCXZvaWQJCQkqcHJpdmF0ZTsKLQotCS8qIENhY2hlZCB0ZW1wb3JhcnkgZGF0YSBsaXZlcyBoZXJlICovCi0JaW50CQkJc2l6ZTsKLQl2b2lkCQkJKmRhdGE7Ci19OwotCi1zdHJ1Y3QgZHN0X3N0YXRlCi17Ci0JLyogVGhlIG1haW4gc3RhdGUgcHJvdGVjdGlvbiAqLwotCXN0cnVjdCBtdXRleAkJc3RhdGVfbG9jazsKLQotCS8qIFBvbGxpbmcgbWFjaGluZXJ5IGZvciBzb2NrZXRzICovCi0Jd2FpdF9xdWV1ZV90IAkJd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAJKndoZWFkOwotCS8qIE1vc3Qgb2YgZXZlbnRzIGFyZSBiZWluZyB3YWl0ZWQgaGVyZSAqLwotCXdhaXRfcXVldWVfaGVhZF90IAl0aHJlYWRfd2FpdDsKLQotCS8qIFdobyBvd25zIHRoaXM/ICovCi0Jc3RydWN0IGRzdF9ub2RlCQkqbm9kZTsKLQotCS8qIE5ldHdvcmsgYWRkcmVzcyBmb3IgdGhpcyBzdGF0ZSAqLwotCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJY3RsOwotCi0JLyogUGVybWlzc2lvbnMgdG8gd29yayB3aXRoOiByZWFkLW9ubHkgb3IgcncgY29ubmVjdGlvbiAqLwotCXUzMgkJCXBlcm1pc3Npb25zOwotCi0JLyogQ2FsbGVkIHdoZW4gd2UgbmVlZCB0byBjbGVhbiBwcml2YXRlIGRhdGEgKi8KLQl2b2lkCQkJKCogY2xlYW51cCkoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi0JLyogVXNlZCBieSB0aGUgc2VydmVyOiBCSU8gY29tcGxldGlvbiBxdWV1ZXMgQklPcyBoZXJlICovCi0Jc3RydWN0IGxpc3RfaGVhZAlyZXF1ZXN0X2xpc3Q7Ci0Jc3BpbmxvY2tfdAkJcmVxdWVzdF9sb2NrOwotCi0JLyogR3Vlc3Mgd2hhdD8gTm8sIGl0IGlzIG5vdCBudW1iZXIgb2YgcGxhbmV0cyAqLwotCWF0b21pY190CQlyZWZjbnQ7Ci0KLQkvKiBUaGlzIGZsYWdzIGlzIHNldCB3aGVuIGNvbm5lY3Rpb24gc2hvdWxkIGJlIGRyb3BwZWQgKi8KLQlpbnQJCQluZWVkX2V4aXQ7Ci0KLQkvKgotCSAqIFNvY2tldCB0byB3b3JrIHdpdGguIFNlY29uZCBwb2ludGVyIGlzIHVzZWQgZm9yCi0JICogbG9ja2xlc3MgY2hlY2sgaWYgc29ja2V0IHdhcyBjaGFuZ2VkIGJlZm9yZSBwZXJmb3JtaW5nCi0JICogbmV4dCBhY3Rpb24gKGxpa2Ugd29ya2luZyB3aXRoIGNhY2hlZCBwb2xsaW5nIHJlc3VsdCkKLQkgKi8KLQlzdHJ1Y3Qgc29ja2V0CQkqc29ja2V0LCAqcmVhZF9zb2NrZXQ7Ci0KLQkvKiBDYWNoZWQgcHJlYWxsb2NhdGVkIGRhdGEgKi8KLQl2b2lkCQkJKmRhdGE7Ci0JdW5zaWduZWQgaW50CQlzaXplOwotCi0JLyogQ3VycmVudGx5IHByb2Nlc3NlZCBjb21tYW5kICovCi0Jc3RydWN0IGRzdF9jbWQJCWNtZDsKLX07Ci0KLXN0cnVjdCBkc3RfaW5mbwotewotCS8qIERldmljZSBzaXplICovCi0JdTY0CQkJc2l6ZTsKLQotCS8qIExvY2FsIGRldmljZSBuYW1lIGZvciBleHBvcnQgZGV2aWNlcyAqLwotCWNoYXIJCQlsb2NhbFtEU1RfTkFNRUxFTl07Ci0KLQkvKiBOZXR3b3JrIHNldHVwICovCi0Jc3RydWN0IGRzdF9uZXR3b3JrX2N0bAluZXQ7Ci0KLQkvKiBTeXNmcyBiaXRzIHVzZSB0aGlzICovCi0Jc3RydWN0IGRldmljZQkJZGV2aWNlOwotfTsKLQotc3RydWN0IGRzdF9ub2RlCi17Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlX2VudHJ5OwotCi0JLyogSGksIG15IG5hbWUgaXMgc3RvcmVkIGhlcmUgKi8KLQljaGFyCQkJbmFtZVtEU1RfTkFNRUxFTl07Ci0JLyogTXkgY2FjaGUgbmFtZSBpcyBzdG9yZWQgaGVyZSAqLwotCWNoYXIJCQljYWNoZV9uYW1lW0RTVF9OQU1FTEVOXTsKLQotCS8qIEJsb2NrIGRldmljZSBhdHRhY2hlZCB0byBnaXZlbiBub2RlLgotCSAqIE9ubHkgdmFsaWQgZm9yIGV4cG9ydGluZyBub2RlcyAqLwotCXN0cnVjdCBibG9ja19kZXZpY2UgCSpiZGV2OwotCS8qIE5ldHdvcmsgc3RhdGUgbWFjaGluZSBmb3IgZ2l2ZW4gcGVlciAqLwotCXN0cnVjdCBkc3Rfc3RhdGUJKnN0YXRlOwotCi0JLyogQmxvY2sgSU8gbWFjaGluZXJ5ICovCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJKnF1ZXVlOwotCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKLQotCS8qIE51bWJlciBvZiB0aHJlYWRzIGluIHByb2Nlc3NpbmcgcG9vbCAqLwotCWludAkJCXRocmVhZF9udW07Ci0JLyogTWF4aW11bSBudW1iZXIgb2YgcGFnZXMgaW4gc2luZ2xlIElPICovCi0JaW50CQkJbWF4X3BhZ2VzOwotCi0JLyogSSdtIHRoYXQgYmlnIGluIGJ5dGVzICovCi0JbG9mZl90CQkJc2l6ZTsKLQotCS8qIEV4cG9ydGVkIHRvIHVzZXJzcGFjZSBub2RlIGluZm9ybWF0aW9uICovCi0Jc3RydWN0IGRzdF9pbmZvCQkqaW5mbzsKLQotCS8qCi0JICogU2VjdXJpdHkgYXR0cmlidXRlIGxpc3QuCi0JICogVXNlZCBvbmx5IGJ5IGV4cG9ydGluZyBub2RlIGN1cnJlbnRseS4KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCXNlY3VyaXR5X2xpc3Q7Ci0Jc3RydWN0IG11dGV4CQlzZWN1cml0eV9sb2NrOwotCi0JLyoKLQkgKiBXaGVuIHRoaXMgdW5lcmZsb3dzIGJlbG93IHplcm8sIHVuaXZlcnNpdHkgY29sbGFwc2VzLgotCSAqIEJ1dCB0aGlzIHdpbGwgbm90IGhhcHBlbiwgc2luY2Ugbm9kZSB3aWxsIGJlIGZyZWVkLAotCSAqIHdoZW4gcmVmZXJlbmNlIGNvdW50ZXIgcmVhY2hlcyB6ZXJvLgotCSAqLwotCWF0b21pY190CQlyZWZjbnQ7Ci0KLQkvKiBIb3cgcHJlY2lzZWx5IHNob3VsZCBJIGJlIHN0YXJ0ZWQ/ICovCi0JaW50IAkJCSgqc3RhcnQpKHN0cnVjdCBkc3Rfbm9kZSAqKTsKLQotCS8qIENyeXB0byBjYXBhYmlsaXRpZXMgKi8KLQlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwJY3J5cHRvOwotCXU4CQkJKmhhc2hfa2V5OwotCXU4CQkJKmNpcGhlcl9rZXk7Ci0KLQkvKiBQb29sIG9mIHByb2Nlc3NpbmcgdGhyZWFkICovCi0Jc3RydWN0IHRocmVhZF9wb29sCSpwb29sOwotCi0JLyogVHJhbnNhY3Rpb24gSURzIGxpdmUgaGVyZSAqLwotCWF0b21pY19sb25nX3QJCWdlbjsKLQotCS8qCi0JICogSG93IGZyZXF1ZW50bHkgYW5kIGhvdyBtYW55IHRpbWVzIHRyYW5zYWN0aW9uCi0JICogdHJlZSBzaG91bGQgYmUgc2Nhbm5lZCB0byBkcm9wIHN0YWxlIG9iamVjdHMuCi0JICovCi0JbG9uZwkJCXRyYW5zX3NjYW5fdGltZW91dDsKLQlpbnQJCQl0cmFuc19tYXhfcmV0cmllczsKLQotCS8qIFNtYWxsIGdub21lcyBsaXZlIGhlcmUgKi8KLQlzdHJ1Y3QgcmJfcm9vdAkJdHJhbnNfcm9vdDsKLQlzdHJ1Y3QgbXV0ZXgJCXRyYW5zX2xvY2s7Ci0KLQkvKgotCSAqIFRyYW5zYWN0aW9uIGNhY2hlL21lbW9yeSBwb29sLgotCSAqIEl0IGlzIGJpZyBlbm91Z2ggdG8gY29udGFpbiBub3Qgb25seSB0cmFuc2FjdGlvbgotCSAqIGl0c2VsZiwgYnV0IGFkZGl0aW9uYWwgY3J5cHRvIGRhdGEgKGRpZ2VzdC9obWFjKS4KLQkgKi8KLQlzdHJ1Y3Qga21lbV9jYWNoZQkqdHJhbnNfY2FjaGU7Ci0JbWVtcG9vbF90CQkqdHJhbnNfcG9vbDsKLQotCS8qIFRoaXMgZW50aXR5IHNjYW5zIHRyYW5zYWN0aW9uIHRyZWUgKi8KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIAl0cmFuc193b3JrOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKLX07Ci0KLS8qIEtlcm5lbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlICovCi1zdHJ1Y3QgZHN0X3NlY3VyZQotewotCXN0cnVjdCBsaXN0X2hlYWQJc2VjX2VudHJ5OwotCXN0cnVjdCBkc3Rfc2VjdXJlX3VzZXIJc2VjOwotfTsKLQotaW50IGRzdF9wcm9jZXNzX2JpbyhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbyk7Ci0KLWludCBkc3Rfbm9kZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfbmV0d29ya19jdGwgKnIpOwotaW50IGRzdF9ub2RlX2luaXRfbGlzdGVuZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X3N0YXRlICpkc3Rfc3RhdGVfZ2V0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCUJVR19PTihhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPT0gMCk7Ci0JYXRvbWljX2luYygmc3QtPnJlZmNudCk7Ci0JcmV0dXJuIHN0OwotfQotCi12b2lkIGRzdF9zdGF0ZV9wdXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwotCi1zdHJ1Y3QgZHN0X3N0YXRlICpkc3Rfc3RhdGVfYWxsb2Moc3RydWN0IGRzdF9ub2RlICpuKTsKLWludCBkc3Rfc3RhdGVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci12b2lkIGRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXZvaWQgZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLQotaW50IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXZvaWQgZHN0X2R1bXBfYWRkcihzdHJ1Y3Qgc29ja2V0ICpzaywgc3RydWN0IHNvY2thZGRyICpzYSwgY2hhciAqc3RyKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV9sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCW11dGV4X2xvY2soJnN0LT5zdGF0ZV9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF9zdGF0ZV91bmxvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCi17Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+c3RhdGVfbG9jayk7Ci19Ci0KLXZvaWQgZHN0X3BvbGxfZXhpdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci1pbnQgZHN0X3BvbGxfaW5pdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzdF9zdGF0ZV9wb2xsKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQotewotCXVuc2lnbmVkIGludCByZXZlbnRzID0gUE9MTEhVUCB8IFBPTExFUlI7Ci0KLQlkc3Rfc3RhdGVfbG9jayhzdCk7Ci0JaWYgKHN0LT5zb2NrZXQpCi0JCXJldmVudHMgPSBzdC0+c29ja2V0LT5vcHMtPnBvbGwoTlVMTCwgc3QtPnNvY2tldCwgTlVMTCk7Ci0JZHN0X3N0YXRlX3VubG9jayhzdCk7Ci0KLQlyZXR1cm4gcmV2ZW50czsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHN0X3RocmVhZF9zZXR1cCh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi12b2lkIGRzdF9ub2RlX3B1dChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkc3Rfbm9kZSAqZHN0X25vZGVfZ2V0KHN0cnVjdCBkc3Rfbm9kZSAqbikKLXsKLQlhdG9taWNfaW5jKCZuLT5yZWZjbnQpOwotCXJldHVybiBuOwotfQotCi1pbnQgZHN0X2RhdGFfcmVjdihzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOwotaW50IGRzdF9yZWN2X2NkYXRhKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpjZGF0YSk7Ci1pbnQgZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKLQkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBtb3JlKTsKLQotaW50IGRzdF9zZW5kX2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGRzdF9jbWQgKmNtZCwgc3RydWN0IGJpbyAqYmlvKTsKLQotaW50IGRzdF9wcm9jZXNzX2lvKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKLWludCBkc3RfZXhwb3J0X2NyeXB0byhzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBiaW8gKmJpbyk7Ci1pbnQgZHN0X2V4cG9ydF9zZW5kX2JpbyhzdHJ1Y3QgYmlvICpiaW8pOwotaW50IGRzdF9zdGFydF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuKTsKLQotaW50IF9faW5pdCBkc3RfZXhwb3J0X2luaXQodm9pZCk7Ci12b2lkIGRzdF9leHBvcnRfZXhpdCh2b2lkKTsKLQotLyogUHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIGV4cG9ydCBibG9jayBJTyByZXF1ZXN0cyAqLwotc3RydWN0IGRzdF9leHBvcnRfcHJpdgotewotCXN0cnVjdCBsaXN0X2hlYWQJCXJlcXVlc3RfZW50cnk7Ci0Jc3RydWN0IGRzdF9zdGF0ZQkJKnN0YXRlOwotCXN0cnVjdCBiaW8JCQkqYmlvOwotCXN0cnVjdCBkc3RfY21kCQkJY21kOwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRzdF90cmFuc19nZXQoc3RydWN0IGRzdF90cmFucyAqdCkKLXsKLQlhdG9taWNfaW5jKCZ0LT5yZWZjbnQpOwotfQotCi1zdHJ1Y3QgZHN0X3RyYW5zICpkc3RfdHJhbnNfc2VhcmNoKHN0cnVjdCBkc3Rfbm9kZSAqbm9kZSwgZHN0X2dlbl90IGdlbik7Ci1pbnQgZHN0X3RyYW5zX3JlbW92ZShzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLWludCBkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayhzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLXZvaWQgZHN0X3RyYW5zX3B1dChzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLQotLyoKLSAqIENvbnZlcnQgYmlvIGludG8gbmV0d29yayBjb21tYW5kLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZHN0X2Jpb190b19jbWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NtZCAqY21kLAotCQl1MzIgY29tbWFuZCwgdTY0IGlkKQotewotCWNtZC0+Y21kID0gY29tbWFuZDsKLQljbWQtPmZsYWdzID0gKGJpby0+YmlfZmxhZ3MgPDwgQklPX1BPT0xfQklUUykgPj4gQklPX1BPT0xfQklUUzsKLQljbWQtPnJ3ID0gYmlvLT5iaV9ydzsKLQljbWQtPnNpemUgPSBiaW8tPmJpX3NpemU7Ci0JY21kLT5jc2l6ZSA9IDA7Ci0JY21kLT5pZCA9IGlkOwotCWNtZC0+c2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7Ci19OwotCi1pbnQgZHN0X3RyYW5zX3NlbmQoc3RydWN0IGRzdF90cmFucyAqdCk7Ci1pbnQgZHN0X3RyYW5zX2NyeXB0byhzdHJ1Y3QgZHN0X3RyYW5zICp0KTsKLQotaW50IGRzdF9ub2RlX2NyeXB0b19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjdGwpOwotdm9pZCBkc3Rfbm9kZV9jcnlwdG9fZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pOwotCi1zdGF0aWMgaW5saW5lIGludCBkc3RfbmVlZF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuKQotewotCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqYyA9ICZuLT5jcnlwdG87Ci0JLyoKLQkgKiBMb2dpY2FsIE9SIGlzIGFwcHJvcHJpYXRlIGhlcmUsIGJ1dCBib29sZWFuIG9uZSBwcm9kdWNlcwotCSAqIG1vcmUgb3B0aW1hbCBjb2RlLCBzbyBpdCBpcyB1c2VkIGluc3RlYWQuCi0JICovCi0JcmV0dXJuIChjLT5oYXNoX2FsZ29bMF0gfCBjLT5jaXBoZXJfYWxnb1swXSk7Ci19Ci0KLWludCBkc3Rfbm9kZV90cmFuc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgdW5zaWduZWQgaW50IHNpemUpOwotdm9pZCBkc3Rfbm9kZV90cmFuc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbik7Ci0KLS8qCi0gKiBQb29sIG9mIHRocmVhZHMuCi0gKiBSZWFkeSBsaXN0IGNvbnRhaW5zIHRocmVhZHMgY3VycmVudGx5IGZyZWUgdG8gYmUgdXNlZCwKLSAqIGFjdGl2ZSBvbmUgY29udGFpbnMgdGhyZWFkcyB3aXRoIHNvbWUgd29yayBzY2hlZHVsZWQgZm9yIHRoZW0uCi0gKiBDYWxsZXIgY2FuIHdhaXQgaW4gZ2l2ZW4gcXVldWUgd2hlbiB0aHJlYWQgaXMgcmVhZHkuCi0gKi8KLXN0cnVjdCB0aHJlYWRfcG9vbAotewotCWludAkJCXRocmVhZF9udW07Ci0Jc3RydWN0IG11dGV4CQl0aHJlYWRfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXJlYWR5X2xpc3QsIGFjdGl2ZV9saXN0OwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKLX07Ci0KLXZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApOwotdm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwgdW5zaWduZWQgaW50IGlkKTsKLWludCB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKLQkJY2hhciAqbmFtZSwKLQkJdW5zaWduZWQgaW50IGlkLAotCQl2b2lkICooKiBpbml0KSh2b2lkICpkYXRhKSwKLQkJdm9pZCAoKiBjbGVhbnVwKSh2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSk7Ci0KLXZvaWQgdGhyZWFkX3Bvb2xfZGVzdHJveShzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApOwotc3RydWN0IHRocmVhZF9wb29sICp0aHJlYWRfcG9vbF9jcmVhdGUoaW50IG51bSwgY2hhciAqbmFtZSwKLQkJdm9pZCAqKCogaW5pdCkodm9pZCAqZGF0YSksCi0JCXZvaWQgKCogY2xlYW51cCkodm9pZCAqZGF0YSksCi0JCXZvaWQgKmRhdGEpOwotCi1pbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCogc2V0dXApKHZvaWQgKnN0b3JlZF9wcml2YXRlLCB2b2lkICpzZXR1cF9kYXRhKSwKLQkJaW50ICgqIGFjdGlvbikodm9pZCAqc3RvcmVkX3ByaXZhdGUsIHZvaWQgKnNldHVwX2RhdGEpLAotCQl2b2lkICpzZXR1cF9kYXRhLCBsb25nIHRpbWVvdXQpOwotaW50IHRocmVhZF9wb29sX3NjaGVkdWxlX3ByaXZhdGUoc3RydWN0IHRocmVhZF9wb29sICpwLAotCQlpbnQgKCogc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAotCQlpbnQgKCogYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKLQkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0LCB2b2lkICppZCk7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX19EU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggOTBhNGVkMC4uMGNjNGQ1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zNjEsNyArMzYxLDcgQEAKICNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KLSNkZWZpbmUgTlRfUFJYU1RBVFVTCTB4MzAwCQkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLworI2RlZmluZSBOVF9TMzkwX0hJR0hfR1BSUwkweDMwMAkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLwogCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oIGIvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaAppbmRleCA5MGQxYzIxLi45YTMzYzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKQEAgLTQyLDYgKzQyLDggQEAKIAlFTkNMT1NVUkVfU1RBVFVTX05PVF9JTlNUQUxMRUQsCiAJRU5DTE9TVVJFX1NUQVRVU19VTktOT1dOLAogCUVOQ0xPU1VSRV9TVEFUVVNfVU5BVkFJTEFCTEUsCisJLyogbGFzdCBlbGVtZW50IGZvciBjb3VudGluZyBwdXJwb3NlcyAqLworCUVOQ0xPU1VSRV9TVEFUVVNfTUFYCiB9OwogCiAvKiBTRkYtODQ4NSBhY3Rpdml0eSBsaWdodCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaAppbmRleCBmMDdmMzRkLi4yNTgwODhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaApAQCAtNzIsNiArNzIsOCBAQAogCXN0cnVjdCBpbm9kZSAqIHNfam91cm5hbF9pbm9kZTsKIAlzdHJ1Y3Qgam91cm5hbF9zICogc19qb3VybmFsOwogCXN0cnVjdCBsaXN0X2hlYWQgc19vcnBoYW47CisJc3RydWN0IG11dGV4IHNfb3JwaGFuX2xvY2s7CisJc3RydWN0IG11dGV4IHNfcmVzaXplX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBzX2NvbW1pdF9pbnRlcnZhbDsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpqb3VybmFsX2JkZXY7CiAjaWZkZWYgQ09ORklHX0pCRF9ERUJVRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2piZC5oIGIvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCmluZGV4IGNmODJkNTEuLmQ3YjVkZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKQEAgLTQ0LDEzICs0NCwxMyBAQAogCiAjZGVmaW5lIEVYVDNfREFUQV9UUkFOU19CTE9DS1Moc2IpCShFWFQzX1NJTkdMRURBVEFfVFJBTlNfQkxPQ0tTICsgXAogCQkJCQkgRVhUM19YQVRUUl9UUkFOU19CTE9DS1MgLSAyICsgXAotCQkJCQkgMipFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyhzYikpCisJCQkJCSBFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1Moc2IpKQogCiAvKiBEZWxldGUgb3BlcmF0aW9ucyBwb3RlbnRpYWxseSBoaXQgb25lIGRpcmVjdG9yeSdzIG5hbWVzcGFjZSBwbHVzIGFuCiAgKiBlbnRpcmUgaW5vZGUsIHBsdXMgYXJiaXRyYXJ5IGFtb3VudHMgb2YgYml0bWFwL2luZGlyZWN0aW9uIGRhdGEuICBCZQogICogZ2VuZXJvdXMuICBXZSBjYW4gZ3JvdyB0aGUgZGVsZXRlIHRyYW5zYWN0aW9uIGxhdGVyIGlmIG5lY2Vzc2FyeS4gKi8KIAotI2RlZmluZSBFWFQzX0RFTEVURV9UUkFOU19CTE9DS1Moc2IpCSgyICogRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhzYikgKyA2NCkKKyNkZWZpbmUgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKHNiKSAgIChFWFQzX01BWFFVT1RBU19UUkFOU19CTE9DS1Moc2IpICsgNjQpCiAKIC8qIERlZmluZSBhbiBhcmJpdHJhcnkgbGltaXQgZm9yIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3aWxsIGFudGljaXBhdGUKICAqIHdyaXRpbmcgdG8gYW55IGdpdmVuIHRyYW5zYWN0aW9uLiAgRm9yIHVuYm91bmRlZCB0cmFuc2FjdGlvbnMgc3VjaCBhcwpAQCAtODYsNiArODYsOSBAQAogI2RlZmluZSBFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKHNiKSAwCiAjZGVmaW5lIEVYVDNfUVVPVEFfREVMX0JMT0NLUyhzYikgMAogI2VuZGlmCisjZGVmaW5lIEVYVDNfTUFYUVVPVEFTX1RSQU5TX0JMT0NLUyhzYikgKE1BWFFVT1RBUypFWFQzX1FVT1RBX1RSQU5TX0JMT0NLUyhzYikpCisjZGVmaW5lIEVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKHNiKSAoTUFYUVVPVEFTKkVYVDNfUVVPVEFfSU5JVF9CTE9DS1Moc2IpKQorI2RlZmluZSBFWFQzX01BWFFVT1RBU19ERUxfQkxPQ0tTKHNiKSAoTUFYUVVPVEFTKkVYVDNfUVVPVEFfREVMX0JMT0NLUyhzYikpCiAKIGludAogZXh0M19tYXJrX2lsb2NfZGlydHkoaGFuZGxlX3QgKmhhbmRsZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmllbWFwLmggYi9pbmNsdWRlL2xpbnV4L2ZpZW1hcC5oCmluZGV4IDkzNGUyMmQuLmQ4MzA3NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmllbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWVtYXAuaApAQCAtNjIsNSArNjIsNyBAQAogI2RlZmluZSBGSUVNQVBfRVhURU5UX01FUkdFRAkJMHgwMDAwMTAwMCAvKiBGaWxlIGRvZXMgbm90IG5hdGl2ZWx5CiAJCQkJCQkgICAgKiBzdXBwb3J0IGV4dGVudHMuIFJlc3VsdAogCQkJCQkJICAgICogbWVyZ2VkIGZvciBlZmZpY2llbmN5LiAqLworI2RlZmluZSBGSUVNQVBfRVhURU5UX1NIQVJFRAkJMHgwMDAwMjAwMCAvKiBTcGFjZSBzaGFyZWQgd2l0aCBvdGhlcgorCQkJCQkJICAgICogZmlsZXMuICovCiAKICNlbmRpZiAvKiBfTElOVVhfRklFTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKaW5kZXggYzZiM2NhMy4uMWY3MTZkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKQEAgLTM0MCw2ICszNDAsOSBAQAogICogVGhlIEBjbG9zdXJlIGZpZWxkIGlzIHBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiB0aGUgcmVzcG9uc2UgZXZlbnQuCiAgKiBUaGUgQGhhbmRsZSBmaWVsZCBpcyBhbiBvdXQgcGFyYW1ldGVyLCByZXR1cm5pbmcgYSBoYW5kbGUgdG8gdGhlIGFsbG9jYXRlZAogICogcmFuZ2UgdG8gYmUgdXNlZCBmb3IgbGF0ZXIgZGVhbGxvY2F0aW9uIG9mIHRoZSByYW5nZS4KKyAqCisgKiBUaGUgYWRkcmVzcyByYW5nZSBpcyBhbGxvY2F0ZWQgb24gYWxsIGxvY2FsIG5vZGVzLiAgVGhlIGFkZHJlc3MgYWxsb2NhdGlvbgorICogaXMgZXhjbHVzaXZlIGV4Y2VwdCBmb3IgdGhlIEZDUCBjb21tYW5kIGFuZCByZXNwb25zZSByZWdpc3RlcnMuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlIHsKIAlfX3U2NCBvZmZzZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKaW5kZXggOTQxNmE0Ni4uYTBlNjcxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaApAQCAtMjQ4LDggKzI0OCw4IEBACiAJCQkJCSAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKIAkJCQkJICB2b2lkICpjYWxsYmFja19kYXRhKTsKIC8qCi0gKiBJbXBvcnRhbnQgbm90ZTogIFRoZSBjYWxsYmFjayBtdXN0IGd1YXJhbnRlZSB0aGF0IGVpdGhlciBmd19zZW5kX3Jlc3BvbnNlKCkKLSAqIG9yIGtmcmVlKCkgaXMgY2FsbGVkIG9uIHRoZSBAcmVxdWVzdC4KKyAqIEltcG9ydGFudCBub3RlOiAgRXhjZXB0IGZvciB0aGUgRkNQIHJlZ2lzdGVycywgdGhlIGNhbGxiYWNrIG11c3QgZ3VhcmFudGVlCisgKiB0aGF0IGVpdGhlciBmd19zZW5kX3Jlc3BvbnNlKCkgb3Iga2ZyZWUoKSBpcyBjYWxsZWQgb24gdGhlIEByZXF1ZXN0LgogICovCiB0eXBlZGVmIHZvaWQgKCpmd19hZGRyZXNzX2NhbGxiYWNrX3QpKHN0cnVjdCBmd19jYXJkICpjYXJkLAogCQkJCSAgICAgIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGNjYTE5MTkuLjkxNDdjYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTE2MjQsOCArMTYyNCw2IEBACiAgKgkJCW9uIHRoZSBiaXQgYWRkcmVzcyBvbmNlIGl0IGlzIGRvbmUuCiAgKgogICogUTogV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIElfV0lMTF9GUkVFIGFuZCBJX0ZSRUVJTkc/Ci0gKiBROiBpZ3JhYigpIG9ubHkgY2hlY2tzIG9uIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUUpLiAgU2hvdWxkIGl0IGFsc28gY2hlY2sgb24KLSAqICAgIElfQ0xFQVI/ICBJZiBub3QsIHdoeT8KICAqLwogI2RlZmluZSBJX0RJUlRZX1NZTkMJCTEKICNkZWZpbmUgSV9ESVJUWV9EQVRBU1lOQwkyCkBAIC0yMjk5LDYgKzIyOTcsNyBAQAogZXh0ZXJuIGludCBnZW5lcmljX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKiwgaW50KTsKIGV4dGVybiB2b2lkIGdlbmVyaWNfZmlsbGF0dHIoc3RydWN0IGlub2RlICosIHN0cnVjdCBrc3RhdCAqKTsKIGV4dGVybiBpbnQgdmZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOwordm9pZCBfX2lub2RlX2FkZF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpOwogdm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKTsKIHZvaWQgaW5vZGVfc3ViX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBieXRlcyk7CiBsb2ZmX3QgaW5vZGVfZ2V0X2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMjQ2NCw1ICsyNDYzLDggQEAKIAogaW50IF9faW5pdCBnZXRfZmlsZXN5c3RlbV9saXN0KGNoYXIgKmJ1Zik7CiAKKyNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKKyNkZWZpbmUgT1BFTl9GTU9ERShmbGFnKSAoKF9fZm9yY2UgZm1vZGVfdCkoKGZsYWcgKyAxKSAmIE9fQUNDTU9ERSkpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKaW5kZXggMjExZmY0NC4uYWIyY2MyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnJfZnJlZV9oaWdocGFnZXModm9pZCkgeyByZXR1cm4gMDsgfQogCi0jZGVmaW5lIHRvdGFsaGlnaF9wYWdlcyAwCisjZGVmaW5lIHRvdGFsaGlnaF9wYWdlcyAwVUwKIAogI2lmbmRlZiBBUkNIX0hBU19LTUFQCiBzdGF0aWMgaW5saW5lIHZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy9hZHA1NTg4LmggYi9pbmNsdWRlL2xpbnV4L2kyYy9hZHA1NTg4LmgKaW5kZXggZmM1ZGI4Mi4uMDJjOWFmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvYWRwNTU4OC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL2FkcDU1ODguaApAQCAtODksNCArODksMTYgQEAKIAl1bnNpZ25lZCBzaG9ydCB1bmxvY2tfa2V5MjsJLyogVW5sb2NrIEtleSAyICovCiB9OwogCitzdHJ1Y3QgYWRwNTU4OF9ncGlvX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGdwaW9fc3RhcnQ7CQkvKiBHUElPIENoaXAgYmFzZSAjICovCisJdW5zaWduZWQgcHVsbHVwX2Rpc19tYXNrOwkvKiBQdWxsLVVwIERpc2FibGUgTWFzayAqLworCWludAkoKnNldHVwKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCWludCBncGlvLCB1bnNpZ25lZCBuZ3BpbywKKwkJCQl2b2lkICpjb250ZXh0KTsKKwlpbnQJKCp0ZWFyZG93bikoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQlpbnQgZ3BpbywgdW5zaWduZWQgbmdwaW8sCisJCQkJdm9pZCAqY29udGV4dCk7CisJdm9pZAkqY29udGV4dDsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggZDk3MjRhMi4uMTYzYzg0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC04MzIsNyArODMyLDcgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9ERUxBWV9CQQkJMHgwNDAwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVCQkweDA4MDAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDAJCTB4MTAwMAotI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1BTTVBfU1VQUE9SVAkJMHgyMDAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfUkVTRVJWRUQJCTB4MjAwMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQJMHg0MDAwCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfTFNJR19UWE9QX1BST1QJCTB4ODAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCmluZGV4IDY5OWU4NWMuLmIyMzA0OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCkBAIC04MSw2ICs4MSw3IEBACiAjZGVmaW5lIElOX0RFVl9GT1JXQVJEKGluX2RldikJCUlOX0RFVl9DT05GX0dFVCgoaW5fZGV2KSwgRk9SV0FSRElORykKICNkZWZpbmUgSU5fREVWX01GT1JXQVJEKGluX2RldikJCUlOX0RFVl9BTkRDT05GKChpbl9kZXYpLCBNQ19GT1JXQVJESU5HKQogI2RlZmluZSBJTl9ERVZfUlBGSUxURVIoaW5fZGV2KQkJSU5fREVWX01BWENPTkYoKGluX2RldiksIFJQX0ZJTFRFUikKKyNkZWZpbmUgSU5fREVWX1NSQ19WTUFSSyhpbl9kZXYpICAgIAlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBTUkNfVk1BUkspCiAjZGVmaW5lIElOX0RFVl9TT1VSQ0VfUk9VVEUoaW5fZGV2KQlJTl9ERVZfQU5EQ09ORigoaW5fZGV2KSwgXAogCQkJCQkJICAgICAgIEFDQ0VQVF9TT1VSQ0VfUk9VVEUpCiAjZGVmaW5lIElOX0RFVl9BQ0NFUFRfTE9DQUwoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBBQ0NFUFRfTE9DQUwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCA1ZWQ4YjljLi5hYmVjNjliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTExMSwxMiArMTExLDYgQEAKICMgZGVmaW5lIElOSVRfUEVSRl9FVkVOVFModHNrKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRlNfSk9VUk5BTF9JTkZPCi0jZGVmaW5lIElOSVRfSk9VUk5BTF9JTkZPCS5qb3VybmFsX2luZm8gPSBOVUxMLAotI2Vsc2UKLSNkZWZpbmUgSU5JVF9KT1VSTkFMX0lORk8KLSNlbmRpZgotCiAvKgogICogIElOSVRfVEFTSyBpcyB1c2VkIHRvIHNldCB1cCB0aGUgZmlyc3QgdGFzayB0YWJsZSwgdG91Y2ggYXQKICAqIHlvdXIgb3duIHJpc2shLiBCYXNlPTAsIGxpbWl0PTB4MWZmZmZmICg9Mk1CKQpAQCAtMTY4LDYgKzE2Miw3IEBACiAJCS5zaWduYWwgPSB7ezB9fX0sCQkJCQlcCiAJLmJsb2NrZWQJPSB7ezB9fSwJCQkJCVwKIAkuYWxsb2NfbG9jawk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHRzay5hbGxvY19sb2NrKSwJCVwKKwkuam91cm5hbF9pbmZvCT0gTlVMTCwJCQkJCQlcCiAJLmNwdV90aW1lcnMJPSBJTklUX0NQVV9USU1FUlModHNrLmNwdV90aW1lcnMpLAkJXAogCS5mc19leGNsCT0gQVRPTUlDX0lOSVQoMCksCQkJCVwKIAkucGlfbG9jawk9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCh0c2sucGlfbG9jayksCVwKQEAgLTE3OCw3ICsxNzMsNiBAQAogCQlbUElEVFlQRV9TSURdICA9IElOSVRfUElEX0xJTksoUElEVFlQRV9TSUQpLAkJXAogCX0sCQkJCQkJCQlcCiAJLmRpcnRpZXMgPSBJTklUX1BST1BfTE9DQUxfU0lOR0xFKGRpcnRpZXMpLAkJCVwKLQlJTklUX0pPVVJOQUxfSU5GTwkJCQkJCVwKIAlJTklUX0lEUwkJCQkJCQlcCiAJSU5JVF9QRVJGX0VWRU5UUyh0c2spCQkJCQkJXAogCUlOSVRfVFJBQ0VfSVJRRkxBR1MJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IGYxMDExZjcuLjYzOGNlNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC02NTMsNiArNjUzLDcgQEAKIAkgKiB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2guCiAJICovCiAJdW5zaWduZWQgaW50IHRfc3luY2hyb25vdXNfY29tbWl0OjE7CisJdW5zaWduZWQgaW50IHRfZmx1c2hlZF9kYXRhX2Jsb2NrczoxOwogCiAJLyoKIAkgKiBGb3IgdXNlIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHN0b3JlIGZzLXNwZWNpZmljIGRhdGEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2ZpZm8uaCBiL2luY2x1ZGUvbGludXgva2ZpZm8uaAppbmRleCBhZDZiZGY1Li43YzZiMzJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZmlmby5oCisrKyBiL2luY2x1ZGUvbGludXgva2ZpZm8uaApAQCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBBIHNpbXBsZSBrZXJuZWwgRklGTyBpbXBsZW1lbnRhdGlvbi4KKyAqIEEgZ2VuZXJpYyBrZXJuZWwgRklGTyBpbXBsZW1lbnRhdGlvbi4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PgogICogQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE4LDYgKzE5LDI1IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCiAgKi8KKworLyoKKyAqIEhvd3RvIHBvcnRpbmcgZHJpdmVycyB0byB0aGUgbmV3IGdlbmVyaWMgZmlmbyBBUEk6CisgKgorICogLSBNb2RpZnkgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSAic3RydWN0IGtmaWZvICoiIG9iamVjdCBpbnRvIGEKKyAqICAgaW4tcGxhY2UgInN0cnVjdCBrZmlmbyIgb2JqZWN0CisgKiAtIEluaXQgdGhlIGluLXBsYWNlIG9iamVjdCB3aXRoIGtmaWZvX2FsbG9jKCkgb3Iga2ZpZm9faW5pdCgpCisgKiAgIE5vdGU6IFRoZSBhZGRyZXNzIG9mIHRoZSBpbi1wbGFjZSAic3RydWN0IGtmaWZvIiBvYmplY3QgbXVzdCBiZQorICogICBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb25zCisgKiAtIFJlcGxhY2UgdGhlIHVzZSBvZiBfX2tmaWZvX3B1dCBpbnRvIGtmaWZvX2luIGFuZCBfX2tmaWZvX2dldAorICogICBpbnRvIGtmaWZvX291dAorICogLSBSZXBsYWNlIHRoZSB1c2Ugb2Yga2ZpZm9fcHV0IGludG8ga2ZpZm9faW5fbG9ja2VkIGFuZCBrZmlmb19nZXQKKyAqICAgaW50byBrZmlmb19vdXRfbG9ja2VkCisgKiAgIE5vdGU6IHRoZSBzcGlubG9jayBwb2ludGVyIGZvcm1lcmx5IHBhc3NlZCB0byBrZmlmb19pbml0L2tmaWZvX2FsbG9jCisgKiAgIG11c3QgYmUgcGFzc2VkIG5vdyB0byB0aGUga2ZpZm9faW5fbG9ja2VkIGFuZCBrZmlmb19vdXRfbG9ja2VkCisgKiAgIGFzIHRoZSBsYXN0IHBhcmFtZXRlci4KKyAqIC0gQWxsIGZvcm1lcmx5IG5hbWUgX19rZmlmb18qIGZ1bmN0aW9ucyBoYXMgYmVlbiByZW5hbWVkIGludG8ga2ZpZm9fKgorICovCisKICNpZm5kZWYgX0xJTlVYX0tGSUZPX0gKICNkZWZpbmUgX0xJTlVYX0tGSUZPX0gKIApAQCAtMjksMTI0ICs0OSw1NjIgQEAKIAl1bnNpZ25lZCBpbnQgc2l6ZTsJLyogdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgaW47CS8qIGRhdGEgaXMgYWRkZWQgYXQgb2Zmc2V0IChpbiAlIHNpemUpICovCiAJdW5zaWduZWQgaW50IG91dDsJLyogZGF0YSBpcyBleHRyYWN0ZWQgZnJvbSBvZmYuIChvdXQgJSBzaXplKSAqLwotCXNwaW5sb2NrX3QgKmxvY2s7CS8qIHByb3RlY3RzIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyAqLwogfTsKIAotZXh0ZXJuIHN0cnVjdCBrZmlmbyAqa2ZpZm9faW5pdCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplLAotCQkJCWdmcF90IGdmcF9tYXNrLCBzcGlubG9ja190ICpsb2NrKTsKLWV4dGVybiBzdHJ1Y3Qga2ZpZm8gKmtmaWZvX2FsbG9jKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgc3BpbmxvY2tfdCAqbG9jayk7Ci1leHRlcm4gdm9pZCBrZmlmb19mcmVlKHN0cnVjdCBrZmlmbyAqZmlmbyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fcHV0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2dldChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKTsKKy8qCisgKiBNYWNyb3MgZm9yIGRlY2xhcmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGUga2ZpZm8gZGF0YXR5cGUKKyAqLworCisvKiBoZWxwZXIgbWFjcm8gKi8KKyNkZWZpbmUgX19rZmlmb19pbml0aWFsaXplcihzLCBiKSBcCisJKHN0cnVjdCBrZmlmbykgeyBcCisJCS5zaXplCT0gcywgXAorCQkuaW4JPSAwLCBcCisJCS5vdXQJPSAwLCBcCisJCS5idWZmZXIgPSBiIFwKKwl9CiAKIC8qKgotICogX19rZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBGSUZPIGNvbnRlbnRzLCBubyBsb2NraW5nIHZlcnNpb24KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICogREVDTEFSRV9LRklGTyAtIG1hY3JvIHRvIGRlY2xhcmUgYSBrZmlmbyBhbmQgdGhlIGFzc29jaWF0ZWQgYnVmZmVyCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgaW5zaWRlIHN0cnVjdCBvciB1bmlvbiBkZWNsYXJhdGlvbgorICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgorICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KKyAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX3Jlc2V0KHN0cnVjdCBrZmlmbyAqZmlmbykKLXsKLQlmaWZvLT5pbiA9IGZpZm8tPm91dCA9IDA7CisjZGVmaW5lIERFQ0xBUkVfS0ZJRk8obmFtZSwgc2l6ZSkgXAordW5pb24geyBcCisJc3RydWN0IGtmaWZvIG5hbWU7IFwKKwl1bnNpZ25lZCBjaGFyIG5hbWUjI2tmaWZvX2J1ZmZlcltzaXplICsgc2l6ZW9mKHN0cnVjdCBrZmlmbyldOyBcCiB9CiAKIC8qKgorICogSU5JVF9LRklGTyAtIEluaXRpYWxpemUgYSBrZmlmbyBkZWNsYXJlZCBieSBERUNMQVJFX0tGSUZPCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqLworI2RlZmluZSBJTklUX0tGSUZPKG5hbWUpIFwKKwluYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplb2YobmFtZSMja2ZpZm9fYnVmZmVyKSAtIFwKKwkJCQlzaXplb2Yoc3RydWN0IGtmaWZvKSwgbmFtZSMja2ZpZm9fYnVmZmVyKQorCisvKioKKyAqIERFRklORV9LRklGTyAtIG1hY3JvIHRvIGRlZmluZSBhbmQgaW5pdGlhbGl6ZSBhIGtmaWZvCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgZGVjbGFyZWQga2ZpZm8gZGF0YXR5cGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBmaWZvIGJ1ZmZlcgorICoKKyAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgZm9yIGdsb2JhbCBhbmQgbG9jYWwga2ZpZm8gZGF0YSB0eXBlIHZhcmlhYmxlcworICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgorICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KKyAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCisgKi8KKyNkZWZpbmUgREVGSU5FX0tGSUZPKG5hbWUsIHNpemUpIFwKKwl1bnNpZ25lZCBjaGFyIG5hbWUjI2tmaWZvX2J1ZmZlcltzaXplXTsgXAorCXN0cnVjdCBrZmlmbyBuYW1lID0gX19rZmlmb19pbml0aWFsaXplcihzaXplLCBuYW1lIyNrZmlmb19idWZmZXIpCisKKyN1bmRlZiBfX2tmaWZvX2luaXRpYWxpemVyCisKK2V4dGVybiB2b2lkIGtmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gX19tdXN0X2NoZWNrIGludCBrZmlmb19hbGxvYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBzaXplLAorCQkJZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pOworZXh0ZXJuIHVuc2lnbmVkIGludCBrZmlmb19pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbik7CitleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19vdXQoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoqCiAgKiBrZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBGSUZPIGNvbnRlbnRzCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgZW1wdGllZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3Jlc2V0KHN0cnVjdCBrZmlmbyAqZmlmbykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoZmlmby0+bG9jaywgZmxhZ3MpOwotCi0JX19rZmlmb19yZXNldChmaWZvKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCWZpZm8tPmluID0gZmlmby0+b3V0ID0gMDsKIH0KIAogLyoqCi0gKiBrZmlmb19wdXQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPCisgKiBrZmlmb19yZXNldF9vdXQgLSBza2lwIEZJRk8gY29udGVudHMKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fcmVzZXRfb3V0KHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlzbXBfbWIoKTsKKwlmaWZvLT5vdXQgPSBmaWZvLT5pbjsKK30KKworLyoqCisgKiBrZmlmb19zaXplIC0gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlmbyBpbiBieXRlcwogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAYnVmZmVyOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19zaXplKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4gZmlmby0+c2l6ZTsKK30KKworLyoqCisgKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBpbiB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX2xlbihzdHJ1Y3Qga2ZpZm8gKmZpZm8pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50CW91dDsKKworCW91dCA9IGZpZm8tPm91dDsKKwlzbXBfcm1iKCk7CisJcmV0dXJuIGZpZm8tPmluIC0gb3V0OworfQorCisvKioKKyAqIGtmaWZvX2lzX2VtcHR5IC0gcmV0dXJucyB0cnVlIGlmIHRoZSBmaWZvIGlzIGVtcHR5CisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgaW50IGtmaWZvX2lzX2VtcHR5KHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4gZmlmby0+aW4gPT0gZmlmby0+b3V0OworfQorCisvKioKKyAqIGtmaWZvX2lzX2Z1bGwgLSByZXR1cm5zIHRydWUgaWYgdGhlIGZpZm8gaXMgZnVsbAorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIGludCBrZmlmb19pc19mdWxsKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4ga2ZpZm9fbGVuKGZpZm8pID09IGtmaWZvX3NpemUoZmlmbyk7Cit9CisKKy8qKgorICoga2ZpZm9fYXZhaWwgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2F2YWlsKHN0cnVjdCBrZmlmbyAqZmlmbykKK3sKKwlyZXR1cm4ga2ZpZm9fc2l6ZShmaWZvKSAtIGtmaWZvX2xlbihmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19pbl9sb2NrZWQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPIHVzaW5nIGEgc3BpbmxvY2sgZm9yIGxvY2tpbmcKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICogQG46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbG9jazogcG9pbnRlciB0byB0aGUgc3BpbmxvY2sgdG8gdXNlIGZvciBsb2NraW5nLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAYnVmZmVyIGludG8KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBidWZmZXIgaW50bwogICogdGhlIEZJRk8gZGVwZW5kaW5nIG9uIHRoZSBmcmVlIHNwYWNlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCiAgKiBieXRlcyBjb3BpZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9faW5fbG9ja2VkKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKIAotCXJldCA9IF9fa2ZpZm9fcHV0KGZpZm8sIGJ1ZmZlciwgbGVuKTsKKwlyZXQgPSBrZmlmb19pbihmaWZvLCBmcm9tLCBuKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmlmby0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBrZmlmb19nZXQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPCisgKiBrZmlmb19vdXRfbG9ja2VkIC0gZ2V0cyBzb21lIGRhdGEgZnJvbSB0aGUgRklGTyB1c2luZyBhIHNwaW5sb2NrIGZvciBsb2NraW5nCiAgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEBidWZmZXI6IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgotICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEBsb2NrOiBwb2ludGVyIHRvIHRoZSBzcGlubG9jayB0byB1c2UgZm9yIGxvY2tpbmcuCiAgKgogICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKLSAqIEBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19nZXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9sb2NrZWQoc3RydWN0IGtmaWZvICpmaWZvLAorCXVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgc3BpbmxvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gX19rZmlmb19nZXQoZmlmbywgYnVmZmVyLCBsZW4pOworCXJldCA9IGtmaWZvX291dChmaWZvLCB0bywgbik7CiAKIAkvKgogCSAqIG9wdGltaXphdGlvbjogaWYgdGhlIEZJRk8gaXMgZW1wdHksIHNldCB0aGUgaW5kaWNlcyB0byAwCiAJICogc28gd2UgZG9uJ3Qgd3JhcCB0aGUgbmV4dCB0aW1lCiAJICovCi0JaWYgKGZpZm8tPmluID09IGZpZm8tPm91dCkKLQkJZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOworCWlmIChrZmlmb19pc19lbXB0eShmaWZvKSkKKwkJa2ZpZm9fcmVzZXQoZmlmbyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogX19rZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPLCBubyBsb2NraW5nIHZlcnNpb24KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorZXh0ZXJuIHZvaWQga2ZpZm9fc2tpcChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBsZW4pOworCitleHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbik7CisKK2V4dGVybiBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4pOworCisvKgorICogX19rZmlmb19hZGRfb3V0IGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIG91dCBvZmZzZXQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19sZW4oc3RydWN0IGtmaWZvICpmaWZvKQorc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fYWRkX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IG9mZikKIHsKLQlyZXR1cm4gZmlmby0+aW4gLSBmaWZvLT5vdXQ7CisJc21wX21iKCk7CisJZmlmby0+b3V0ICs9IG9mZjsKIH0KIAotLyoqCi0gKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBGSUZPCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKy8qCisgKiBfX2tmaWZvX2FkZF9pbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBpbiBvZmZzZXQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fbGVuKHN0cnVjdCBrZmlmbyAqZmlmbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2FkZF9pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCQkJdW5zaWduZWQgaW50IG9mZikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNtcF93bWIoKTsKKwlmaWZvLT5pbiArPSBvZmY7Cit9CisKKy8qCisgKiBfX2tmaWZvX29mZiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIHRoZSBpbmRleCBvZiBhCisgKiBnaXZlbiBvZmZlc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fb2ZmKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gb2ZmICYgKGZpZm8tPnNpemUgLSAxKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fcGVla19uIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgZGV0ZXJtaW5hdGUgdGhlIGxlbmd0aCBvZgorICogdGhlIG5leHQgcmVjb3JkIGluIHRoZSBmaWZvCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCQl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKyNkZWZpbmUgX19LRklGT19HRVQoZmlmbywgb2ZmLCBzaGlmdCkgXAorCSgoZmlmbyktPmJ1ZmZlcltfX2tmaWZvX29mZigoZmlmbyksIChmaWZvKS0+b3V0KyhvZmYpKV0gPDwgKHNoaWZ0KSkKKworCXVuc2lnbmVkIGludCBsOworCisJbCA9IF9fS0ZJRk9fR0VUKGZpZm8sIDAsIDApOworCisJaWYgKC0tcmVjc2l6ZSkKKwkJbCB8PSBfX0tGSUZPX0dFVChmaWZvLCAxLCA4KTsKKworCXJldHVybiBsOworI3VuZGVmCV9fS0ZJRk9fR0VUCit9CisKKy8qCisgKiBfX2tmaWZvX3Bva2VfbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHN0b3JpbmcgdGhlIGxlbmd0aCBvZgorICogdGhlIG5leHQgcmVjb3JkIGludG8gdGhlIGZpZm8KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9fcG9rZV9uKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJCXVuc2lnbmVkIGludCByZWNzaXplLCB1bnNpZ25lZCBpbnQgbikKK3sKKyNkZWZpbmUgX19LRklGT19QVVQoZmlmbywgb2ZmLCB2YWwsIHNoaWZ0KSBcCisJCSggXAorCQkoZmlmbyktPmJ1ZmZlcltfX2tmaWZvX29mZigoZmlmbyksIChmaWZvKS0+aW4rKG9mZikpXSA9IFwKKwkJKHVuc2lnbmVkIGNoYXIpKCh2YWwpID4+IChzaGlmdCkpIFwKKwkJKQorCisJX19LRklGT19QVVQoZmlmbywgMCwgbiwgMCk7CisKKwlpZiAoLS1yZWNzaXplKQorCQlfX0tGSUZPX1BVVChmaWZvLCAxLCBuLCA4KTsKKyN1bmRlZglfX0tGSUZPX1BVVAorfQorCisvKgorICogX19rZmlmb19pbl8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBwdXQgZGF0ZSBpbnRvIHRoZSBmaWZvCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2luX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX24oc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQorewogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShmaWZvLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gX19rZmlmb19pbl9uKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOwogCi0JcmV0ID0gX19rZmlmb19sZW4oZmlmbyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZpZm8tPmxvY2ssIGZsYWdzKTsKLQorCWlmIChsaWtlbHkocmV0ID09IDApKSB7CisJCWlmIChyZWNzaXplKQorCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7CisJCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBrZmlmb19pbl9yZWMgLSBwdXRzIHNvbWUgcmVjb3JkIGRhdGEgaW50byB0aGUgRklGTworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZnJvbTogdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIEBuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlIEZJRk8gYW5kIHJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqIEEgcmV0dXJuZWQgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBAbiB2YWx1ZSBtZWFucyB0aGF0IHRoZSByZWNvcmQgZG9lc24ndAorICogZml0IGludG8gdGhlIGJ1ZmZlci4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9faW5fcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9faW5fZ2VuZXJpYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKKwlyZXR1cm4gX19rZmlmb19pbl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX291dF8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBnZXQgZGF0ZSBmcm9tIHRoZSBmaWZvCisgKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX291dF9yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCByZWNsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkICp0bywgdW5zaWduZWQgaW50IG4sCisJdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCAqdG90YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWlmICghcmVjc2l6ZSkgeworCQlsID0gbjsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwl9IGVsc2UgeworCQlsID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7CisJCWlmICh0b3RhbCkKKwkJCSp0b3RhbCA9IGw7CisJCWlmIChuIDwgbCkKKwkJCXJldHVybiBsOworCX0KKworCXJldHVybiBfX2tmaWZvX291dF9uKGZpZm8sIHRvLCBsLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb19vdXRfcmVjIC0gZ2V0cyBzb21lIHJlY29yZCBkYXRhIGZyb20gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBAdG90YWw6IHBvaW50ZXIgd2hlcmUgdGhlIHRvdGFsIG51bWJlciBvZiB0byBjb3BpZWQgYnl0ZXMgc2hvdWxkIHN0b3JlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgRklGTyB0byBAdG8gYW5kIHJldHVybnMgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqIEEgcmV0dXJuZWQgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBAbiB2YWx1ZSBtZWFucyB0aGF0IHRoZSByZWNvcmQgZG9lc24ndAorICogZml0IGludG8gdGhlIEB0byBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJdW5zaWduZWQgaW50ICp0b3RhbCkKKworeworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCXJldHVybiBfX2tmaWZvX291dF9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CisJcmV0dXJuIF9fa2ZpZm9fb3V0X3JlYyhmaWZvLCB0bywgbiwgcmVjc2l6ZSwgdG90YWwpOworfQorCisvKgorICogX19rZmlmb19mcm9tX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZnJvbSB1c2VyIHNwYWNlIGludG8KKyAqIHRoZSBmaWZvLiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2Zyb21fdXNlcl9yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gX19rZmlmb19mcm9tX3VzZXJfbihmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKKworCWlmIChsaWtlbHkocmV0ID09IDApKSB7CisJCWlmIChyZWNzaXplKQorCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7CisJCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBrZmlmb19mcm9tX3VzZXJfcmVjIC0gcHV0cyBzb21lIGRhdGEgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIEBuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlCisgKiBGSUZPIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90IGJlIGNvcGllZC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXF1YWwgb3IgbGVzcyB0aGUgQG4gdmFsdWUsIHRoZSBjb3B5X2Zyb21fdXNlcigpCisgKiBmdW5jdGlvbnMgaGFzIGZhaWxlZC4gT3RoZXJ3aXNlIHRoZSByZWNvcmQgZG9lc24ndCBmaXQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19mcm9tX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCisJCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOworCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX3RvX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZmlmbyBkYXRhIGludG8gdXNlciBzcGFjZQorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb190b191c2VyX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY2xlbiwKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplLAorCXVuc2lnbmVkIGludCAqdG90YWwpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLAorCXVuc2lnbmVkIGludCByZWNzaXplLCB1bnNpZ25lZCBpbnQgKnRvdGFsKQoreworCXVuc2lnbmVkIGludCBsOworCisJaWYgKCFyZWNzaXplKSB7CisJCWwgPSBuOworCQlpZiAodG90YWwpCisJCQkqdG90YWwgPSBsOworCX0gZWxzZSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKwkJaWYgKHRvdGFsKQorCQkJKnRvdGFsID0gbDsKKwkJaWYgKG4gPCBsKQorCQkJcmV0dXJuIGw7CisJfQorCisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9uKGZpZm8sIHRvLCBuLCBsLCByZWNzaXplKTsKK30KKworLyoqCisgKiBrZmlmb190b191c2VyX3JlYyAtIGdldHMgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCB3cml0ZSBpdCB0byB1c2VyIHNwYWNlCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCisgKiBAbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICogQHRvdGFsOiBwb2ludGVyIHdoZXJlIHRoZSB0b3RhbCBudW1iZXIgb2YgdG8gY29waWVkIGJ5dGVzIHNob3VsZCBzdG9yZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBuIGJ5dGVzIGZyb20gdGhlIEZJRk8gdG8gdGhlIEB0by4KKyAqIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2Fubm90CisgKiBiZSBjb3BpZWQuCisgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgZXF1YWwgb3IgbGVzcyB0aGUgQG4gdmFsdWUsIHRoZSBjb3B5X3RvX3VzZXIoKQorICogZnVuY3Rpb25zIGhhcyBmYWlsZWQuIE90aGVyd2lzZSB0aGUgcmVjb3JkIGRvZXNuJ3QgZml0IGludG8gdGhlIEB0byBidWZmZXIuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXJfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCisJCXVuc2lnbmVkIGludCAqdG90YWwpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7CisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9yZWMoZmlmbywgdG8sIG4sIHJlY3NpemUsIHRvdGFsKTsKK30KKworLyoKKyAqIF9fa2ZpZm9fcGVla18uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBwZWVrIGludG8gdGhlIG5leHQgZmlmbyByZWNvcmQKKyAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fcGVla19yZWMoKSBpbnN0ZWFkCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCQkJCXVuc2lnbmVkIGludCByZWNzaXplKTsKKworLyoqCisgKiBrZmlmb19wZWVrX3JlYyAtIGdldHMgdGhlIHNpemUgb2YgdGhlIG5leHQgRklGTyByZWNvcmQgZGF0YQorICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAcmVjc2l6ZTogc2l6ZSBvZiByZWNvcmQgZmllbGQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIG5leHQgRklGTyByZWNvcmQgaW4gbnVtYmVyIG9mIGJ5dGVzCisgKi8KK3N0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19wZWVrX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKKwkJcmV0dXJuIF9fa2ZpZm9fcGVla19nZW5lcmljKGZpZm8sIHJlY3NpemUpOworCWlmICghcmVjc2l6ZSkKKwkJcmV0dXJuIGtmaWZvX2xlbihmaWZvKTsKKwlyZXR1cm4gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Cit9CisKKy8qCisgKiBfX2tmaWZvX3NraXBfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3Igc2tpcCB0aGUgbmV4dCBmaWZvIHJlY29yZAorICogZG8gbm90IGNhbGwgaXQgZGlyZWN0bHksIHVzZSBrZmlmb19za2lwX3JlYygpIGluc3RlYWQKKyAqLworZXh0ZXJuIHZvaWQgX19rZmlmb19za2lwX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX3NraXBfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWlmIChyZWNzaXplKSB7CisJCWwgPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKworCQlpZiAobCArIHJlY3NpemUgPD0ga2ZpZm9fbGVuKGZpZm8pKSB7CisJCQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbCArIHJlY3NpemUpOworCQkJcmV0dXJuOworCQl9CisJfQorCWtmaWZvX3Jlc2V0X291dChmaWZvKTsKK30KKworLyoqCisgKiBrZmlmb19za2lwX3JlYyAtIHNraXAgdGhlIG5leHQgZmlmbyBvdXQgcmVjb3JkCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2tpcHMgdGhlIG5leHQgRklGTyByZWNvcmQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3NraXBfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQorCQlfX2tmaWZvX3NraXBfZ2VuZXJpYyhmaWZvLCByZWNzaXplKTsKKwllbHNlCisJCV9fa2ZpZm9fc2tpcF9yZWMoZmlmbywgcmVjc2l6ZSk7Cit9CisKKy8qKgorICoga2ZpZm9fYXZhaWxfcmVjIC0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiBhIHJlY29yZCBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICovCitzdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fYXZhaWxfcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IGtmaWZvX3NpemUoZmlmbykgLSBrZmlmb19sZW4oZmlmbyk7CisKKwlyZXR1cm4gKGwgPiByZWNzaXplKSA/IGwgLSByZWNzaXplIDogMDsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tnZGIuaCBiL2luY2x1ZGUvbGludXgva2dkYi5oCmluZGV4IDZhZGNjMjkuLjE5ZWM0MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2dkYi5oCisrKyBiL2luY2x1ZGUvbGludXgva2dkYi5oCkBAIC0yOSw4ICsyOSw3IEBACiAgKgogICoJT24gc29tZSBhcmNoaXRlY3R1cmVzIGl0IGlzIHJlcXVpcmVkIHRvIHNraXAgYSBicmVha3BvaW50CiAgKglleGNlcHRpb24gd2hlbiBpdCBvY2N1cnMgYWZ0ZXIgYSBicmVha3BvaW50IGhhcyBiZWVuIHJlbW92ZWQuCi0gKglUaGlzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHBvcnRpb24gb2YKLSAqCWZvciBrZ2RiLgorICoJVGhpcyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwb3J0aW9uIG9mIGtnZGIuCiAgKi8KIGV4dGVybiBpbnQga2dkYl9za2lwZXhjZXB0aW9uKGludCBleGNlcHRpb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIApAQCAtNjUsNyArNjQsNyBAQAogLyoqCiAgKglrZ2RiX2JyZWFrcG9pbnQgLSBjb21waWxlZCBpbiBicmVha3BvaW50CiAgKgotICoJVGhpcyB3aWxsIGJlIGltcGVsbWVudGVkIGEgc3RhdGljIGlubGluZSBwZXIgYXJjaGl0ZWN0dXJlLiAgVGhpcworICoJVGhpcyB3aWxsIGJlIGltcGxlbWVudGVkIGFzIGEgc3RhdGljIGlubGluZSBwZXIgYXJjaGl0ZWN0dXJlLiAgVGhpcwogICoJZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBrZ2RiIGNvcmUgdG8gZXhlY3V0ZSBhbiBhcmNoaXRlY3R1cmUKICAqCXNwZWNpZmljIHRyYXAgdG8gY2F1c2Uga2dkYiB0byBlbnRlciB0aGUgZXhjZXB0aW9uIHByb2Nlc3NpbmcuCiAgKgpAQCAtMTkwLDcgKzE4OSw3IEBACiAgKglAZmxhZ3M6IEN1cnJlbnQgSVJRIHN0YXRlCiAgKgogICoJT24gU01QIHN5c3RlbXMsIHdlIG5lZWQgdG8gZ2V0IHRoZSBhdHRlbnRpb24gb2YgdGhlIG90aGVyIENQVXMKLSAqCWFuZCBnZXQgdGhlbSBiZSBpbiBhIGtub3duIHN0YXRlLiAgVGhpcyBzaG91bGQgZG8gd2hhdCBpcyBuZWVkZWQKKyAqCWFuZCBnZXQgdGhlbSBpbnRvIGEga25vd24gc3RhdGUuICBUaGlzIHNob3VsZCBkbyB3aGF0IGlzIG5lZWRlZAogICoJdG8gZ2V0IHRoZSBvdGhlciBDUFVzIHRvIGNhbGwga2dkYl93YWl0KCkuIE5vdGUgdGhhdCBvbiBzb21lIGFyY2hlcywKICAqCXRoZSBOTUkgYXBwcm9hY2ggaXMgbm90IHVzZWQgZm9yIHJvdW5kaW5nIHVwIGFsbCB0aGUgQ1BVcy4gRm9yIGV4YW1wbGUsCiAgKglpbiBjYXNlIG9mIE1JUFMsIHNtcF9jYWxsX2Z1bmN0aW9uKCkgaXMgdXNlZCB0byByb3VuZHVwIENQVXMuIEluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAppbmRleCBlODgwZDRjLi4wOGQ3ZGM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCisrKyBiL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKQEAgLTM2LDYgKzM2LDU2IEBACiAKIGJvb2wga21lbWNoZWNrX2lzX29ial9pbml0aWFsaXplZCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKTsKIAorLyoKKyAqIEJpdGZpZWxkIGFubm90YXRpb25zCisgKgorICogSG93IHRvIHVzZTogSWYgeW91IGhhdmUgYSBzdHJ1Y3QgdXNpbmcgYml0ZmllbGRzLCBmb3IgZXhhbXBsZQorICoKKyAqICAgICBzdHJ1Y3QgYSB7CisgKiAgICAgICAgICAgICBpbnQgeDo4LCB5Ojg7CisgKiAgICAgfTsKKyAqCisgKiB0aGVuIHRoaXMgc2hvdWxkIGJlIHJld3JpdHRlbiBhcworICoKKyAqICAgICBzdHJ1Y3QgYSB7CisgKiAgICAgICAgICAgICBrbWVtY2hlY2tfYml0ZmllbGRfYmVnaW4oZmxhZ3MpOworICogICAgICAgICAgICAgaW50IHg6OCwgeTo4OworICogICAgICAgICAgICAga21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFncyk7CisgKiAgICAgfTsKKyAqCisgKiBOb3cgdGhlICJmbGFnc19iZWdpbiIgYW5kICJmbGFnc19lbmQiIG1lbWJlcnMgbWF5IGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlCisgKiBiZWdpbm5pbmcgYW5kIGVuZCwgcmVzcGVjdGl2ZWx5LCBvZiB0aGUgYml0ZmllbGQgKGFuZCB0aGluZ3MgbGlrZQorICogJnguZmxhZ3NfYmVnaW4gaXMgYWxsb3dlZCkuIEFzIHNvb24gYXMgdGhlIHN0cnVjdCBpcyBhbGxvY2F0ZWQsIHRoZSBiaXQtCisgKiBmaWVsZHMgc2hvdWxkIGJlIGFubm90YXRlZDoKKyAqCisgKiAgICAgc3RydWN0IGEgKmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYSksIEdGUF9LRVJORUwpOworICogICAgIGttZW1jaGVja19hbm5vdGF0ZV9iaXRmaWVsZChhLCBmbGFncyk7CisgKi8KKyNkZWZpbmUga21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKG5hbWUpCVwKKwlpbnQgbmFtZSMjX2JlZ2luWzBdOworCisjZGVmaW5lIGttZW1jaGVja19iaXRmaWVsZF9lbmQobmFtZSkJXAorCWludCBuYW1lIyNfZW5kWzBdOworCisjZGVmaW5lIGttZW1jaGVja19hbm5vdGF0ZV9iaXRmaWVsZChwdHIsIG5hbWUpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBfbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCQlpZiAoIXB0cikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCQkJCQkJCQlcCisJCV9uID0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19lbmQpCQkJXAorCQkJLSAobG9uZykgJigocHRyKS0+bmFtZSMjX2JlZ2luKTsJCVwKKwkJTUFZQkVfQlVJTERfQlVHX09OKF9uIDwgMCk7CQkJCVwKKwkJCQkJCQkJCVwKKwkJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQoJigocHRyKS0+bmFtZSMjX2JlZ2luKSwgX24pOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBrbWVtY2hlY2tfYW5ub3RhdGVfdmFyaWFibGUodmFyKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZCgmKHZhciksIHNpemVvZih2YXIpKTsJXAorCX0gd2hpbGUgKDApCQkJCQkJCVwKKwogI2Vsc2UKICNkZWZpbmUga21lbWNoZWNrX2VuYWJsZWQgMAogCkBAIC0xMDYsNjAgKzE1NiwxNiBAQAogCXJldHVybiB0cnVlOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0tNRU1DSEVDSyAqLwotCi0vKgotICogQml0ZmllbGQgYW5ub3RhdGlvbnMKLSAqCi0gKiBIb3cgdG8gdXNlOiBJZiB5b3UgaGF2ZSBhIHN0cnVjdCB1c2luZyBiaXRmaWVsZHMsIGZvciBleGFtcGxlCi0gKgotICogICAgIHN0cnVjdCBhIHsKLSAqICAgICAgICAgICAgIGludCB4OjgsIHk6ODsKLSAqICAgICB9OwotICoKLSAqIHRoZW4gdGhpcyBzaG91bGQgYmUgcmV3cml0dGVuIGFzCi0gKgotICogICAgIHN0cnVjdCBhIHsKLSAqICAgICAgICAgICAgIGttZW1jaGVja19iaXRmaWVsZF9iZWdpbihmbGFncyk7Ci0gKiAgICAgICAgICAgICBpbnQgeDo4LCB5Ojg7Ci0gKiAgICAgICAgICAgICBrbWVtY2hlY2tfYml0ZmllbGRfZW5kKGZsYWdzKTsKLSAqICAgICB9OwotICoKLSAqIE5vdyB0aGUgImZsYWdzX2JlZ2luIiBhbmQgImZsYWdzX2VuZCIgbWVtYmVycyBtYXkgYmUgdXNlZCB0byByZWZlciB0byB0aGUKLSAqIGJlZ2lubmluZyBhbmQgZW5kLCByZXNwZWN0aXZlbHksIG9mIHRoZSBiaXRmaWVsZCAoYW5kIHRoaW5ncyBsaWtlCi0gKiAmeC5mbGFnc19iZWdpbiBpcyBhbGxvd2VkKS4gQXMgc29vbiBhcyB0aGUgc3RydWN0IGlzIGFsbG9jYXRlZCwgdGhlIGJpdC0KLSAqIGZpZWxkcyBzaG91bGQgYmUgYW5ub3RhdGVkOgotICoKLSAqICAgICBzdHJ1Y3QgYSAqYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhKSwgR0ZQX0tFUk5FTCk7Ci0gKiAgICAga21lbWNoZWNrX2Fubm90YXRlX2JpdGZpZWxkKGEsIGZsYWdzKTsKLSAqCi0gKiBOb3RlOiBXZSBwcm92aWRlIHRoZSBzYW1lIGRlZmluaXRpb25zIGZvciBib3RoIGttZW1jaGVjayBhbmQgbm9uLQotICoga21lbWNoZWNrIGtlcm5lbHMuIFRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIGludHJvZHVjZSBhY2NpZGVudGFsIGVycm9ycy4gSXQKLSAqIGlzIGFsc28gYWxsb3dlZCB0byBwYXNzIE5VTEwgcG9pbnRlcnMgdG8ga21lbWNoZWNrX2Fubm90YXRlX2JpdGZpZWxkKCkuCi0gKi8KLSNkZWZpbmUga21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKG5hbWUpCVwKLQlpbnQgbmFtZSMjX2JlZ2luWzBdOwotCi0jZGVmaW5lIGttZW1jaGVja19iaXRmaWVsZF9lbmQobmFtZSkJXAotCWludCBuYW1lIyNfZW5kWzBdOwotCi0jZGVmaW5lIGttZW1jaGVja19hbm5vdGF0ZV9iaXRmaWVsZChwdHIsIG5hbWUpCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWludCBfbjsJCQkJCQkJXAotCQkJCQkJCQkJXAotCQlpZiAoIXB0cikJCQkJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JCV9uID0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19lbmQpCQkJXAotCQkJLSAobG9uZykgJigocHRyKS0+bmFtZSMjX2JlZ2luKTsJCVwKLQkJTUFZQkVfQlVJTERfQlVHX09OKF9uIDwgMCk7CQkJCVwKLQkJCQkJCQkJCVwKLQkJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQoJigocHRyKS0+bmFtZSMjX2JlZ2luKSwgX24pOwlcCisjZGVmaW5lIGttZW1jaGVja19iaXRmaWVsZF9iZWdpbihuYW1lKQorI2RlZmluZSBrbWVtY2hlY2tfYml0ZmllbGRfZW5kKG5hbWUpCisjZGVmaW5lIGttZW1jaGVja19hbm5vdGF0ZV9iaXRmaWVsZChwdHIsIG5hbWUpCVwKKwlkbyB7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSBrbWVtY2hlY2tfYW5ub3RhdGVfdmFyaWFibGUodmFyKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZCgmKHZhciksIHNpemVvZih2YXIpKTsJXAotCX0gd2hpbGUgKDApCQkJCQkJCVwKKyNkZWZpbmUga21lbWNoZWNrX2Fubm90YXRlX3ZhcmlhYmxlKHZhcikJXAorCWRvIHsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX0tNRU1DSEVDSyAqLwogCiAjZW5kaWYgLyogTElOVVhfS01FTUNIRUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAppbmRleCAzYzc0OTdkLi45OWQ5YTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCkBAIC0zMiw4ICszMiw3IEBACiAJCQkgICAgIHNpemVfdCBzaXplKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX25vdF9sZWFrKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19pZ25vcmUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKLWV4dGVybiB2b2lkIGttZW1sZWFrX3NjYW5fYXJlYShjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJICAgICAgIHNpemVfdCBsZW5ndGgsIGdmcF90IGdmcCkgX19yZWY7CitleHRlcm4gdm9pZCBrbWVtbGVha19zY2FuX2FyZWEoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX25vX3NjYW4oY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKIAogc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2FsbG9jX3JlY3Vyc2l2ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLApAQCAtODQsOCArODMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX2lnbm9yZShjb25zdCB2b2lkICpwdHIpCiB7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfc2Nhbl9hcmVhKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJICAgICAgc2l6ZV90IGxlbmd0aCwgZ2ZwX3QgZ2ZwKQorc3RhdGljIGlubGluZSB2b2lkIGttZW1sZWFrX3NjYW5fYXJlYShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApCiB7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfZXJhc2Uodm9pZCAqKnB0cikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy1scDM5NDQuaCBiL2luY2x1ZGUvbGludXgvbGVkcy1scDM5NDQuaAppbmRleCBhZmM5ZjlmLi4yNjE4YWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMtbHAzOTQ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLWxwMzk0NC5oCkBAIC0xMiw5ICsxMiw2IEBACiAjaWZuZGVmIF9fTElOVVhfTEVEU19MUDM5NDRfSAogI2RlZmluZSBfX0xJTlVYX0xFRFNfTFAzOTQ0X0gKIAotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQogI2RlZmluZSBMUDM5NDRfTEVEMCAwCiAjZGVmaW5lIExQMzk0NF9MRUQxIDEKICNkZWZpbmUgTFAzOTQ0X0xFRDIgMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLXBjYTk1MzIuaCBiL2luY2x1ZGUvbGludXgvbGVkcy1wY2E5NTMyLmgKaW5kZXggOTZlZWE5MC4uZjE1OGViMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLXBjYTk1MzIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xlZHMtcGNhOTUzMi5oCkBAIC0zMiw3ICszMiw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAljaGFyICpuYW1lOwogCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGRldjsKLSAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAllbnVtIHBjYTk1MzJfdHlwZSB0eXBlOwogCWVudW0gcGNhOTUzMl9zdGF0ZSBzdGF0ZTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMtcmVndWxhdG9yLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMtcmVndWxhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4ZWIzOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy1yZWd1bGF0b3IuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogbGVkcy1yZWd1bGF0b3IuaCAtIHBsYXRmb3JtIGRhdGEgc3RydWN0dXJlIGZvciByZWd1bGF0b3IgZHJpdmVuIExFRHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0xFRFNfUkVHVUxBVE9SX0gKKyNkZWZpbmUgX19MSU5VWF9MRURTX1JFR1VMQVRPUl9ICisKKy8qCisgKiBVc2UgInZsZWQiIGFzIHN1cHBseSBpZCB3aGVuIGRlY2xhcmluZyB0aGUgcmVndWxhdG9yIGNvbnN1bWVyOgorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwY2FwX3JlZ3VsYXRvcl9WVklCX2NvbnN1bWVycyBbXSA9IHsKKyAqIAl7IC5kZXZfbmFtZSA9ICJsZWRzLXJlZ3VsYXRvci4wIiwgc3VwcGx5ID0gInZsZWQiIH0sCisgKiB9OworICoKKyAqIElmIHlvdSBoYXZlIHNldmVyYWwgcmVndWxhdG9yIGRyaXZlbiBMRURzLCB5b3UgY2FuIGFwcGVuZCBhIG51bWVyaWNhbCBpZCB0bworICogLmRldl9uYW1lIGFzIGRvbmUgYWJvdmUsIGFuZCB1c2UgdGhlIHNhbWUgaWQgd2hlbiBkZWNsYXJpbmcgdGhlIHBsYXRmb3JtCisgKiBkZXZpY2U6CisgKgorICogc3RhdGljIHN0cnVjdCBsZWRfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgYTc4MF92aWJyYXRvcl9kYXRhID0geworICogCS5uYW1lICAgPSAiYTc4MDo6dmlicmF0b3IiLAorICogfTsKKyAqCisgKiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhNzgwX3ZpYnJhdG9yID0geworICogCS5uYW1lID0gImxlZHMtcmVndWxhdG9yIiwKKyAqIAkuaWQgICA9IDAsCisgKiAJLmRldiAgPSB7CisgKiAJCS5wbGF0Zm9ybV9kYXRhID0gJmE3ODBfdmlicmF0b3JfZGF0YSwKKyAqIAl9LAorICogfTsKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCitzdHJ1Y3QgbGVkX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhIHsKKwljaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgICAgIC8qIExFRCBuYW1lIGFzIGV4cGVjdGVkIGJ5IExFRCBjbGFzcyAqLworCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzczsgLyogaW5pdGlhbCBicmlnaHRuZXNzIHZhbHVlICovCit9OworCisjZW5kaWYgLyogX19MSU5VWF9MRURTX1JFR1VMQVRPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA2YTljNGRkLi43MzExMjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTM1NCw2ICszNTQsOSBAQAogCS8qIG1heCB0cmllcyBpZiBlcnJvciBjb25kaXRpb24gaXMgc3RpbGwgc2V0IGFmdGVyIC0+ZXJyb3JfaGFuZGxlciAqLwogCUFUQV9FSF9NQVhfVFJJRVMJPSA1LAogCisJLyogc29tZXRpbWVzIHJlc3VtaW5nIGEgbGluayByZXF1aXJlcyBzZXZlcmFsIHJldHJpZXMgKi8KKwlBVEFfTElOS19SRVNVTUVfVFJJRVMJPSA1LAorCiAJLyogaG93IGhhcmQgYXJlIHdlIGdvbm5hIHRyeSB0byBwcm9iZS9yZWNvdmVyIGRldmljZXMgKi8KIAlBVEFfUFJPQkVfTUFYX1RSSUVTCT0gMywKIAlBVEFfRUhfREVWX1RSSUVTCT0gMywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdF9zb3J0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3Rfc29ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmRmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3Rfc29ydC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX0xJTlVYX0xJU1RfU09SVF9ICisjZGVmaW5lIF9MSU5VWF9MSVNUX1NPUlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGxpc3RfaGVhZDsKKwordm9pZCBsaXN0X3NvcnQodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkgICAgICAgaW50ICgqY21wKSh2b2lkICpwcml2LCBzdHJ1Y3QgbGlzdF9oZWFkICphLAorCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpiKSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmggYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCmluZGV4IDM3ZmExOWIuLjFhZGZlNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaApAQCAtNTAsNiArNTAsMTkgQEAKIAlpbnQgc3RhdHVzX2NoYW5nZV9uaWQ7CiB9OwogCisvKgorICogRHVyaW5nIHBhZ2VibG9jayBpc29sYXRpb24sIGNvdW50IHRoZSBudW1iZXIgb2YgcGFnZXMgd2l0aGluIHRoZQorICogcmFuZ2UgW3N0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpIHdoaWNoIGFyZSBvd25lZCBieSBjb2RlCisgKiBpbiB0aGUgbm90aWZpZXIgY2hhaW4uCisgKi8KKyNkZWZpbmUgTUVNX0lTT0xBVEVfQ09VTlQJKDE8PDApCisKK3N0cnVjdCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwkvKiBTdGFydCBvZiByYW5nZSB0byBjaGVjayAqLworCXVuc2lnbmVkIGludCBucl9wYWdlczsJCS8qICMgcGFnZXMgaW4gcmFuZ2UgdG8gY2hlY2sgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfZm91bmQ7CS8qICMgcGFnZXMgb3duZWQgZm91bmQgYnkgY2FsbGJhY2tzICovCit9OworCiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiBzdHJ1Y3QgbWVtX3NlY3Rpb247CiAKQEAgLTc2LDE0ICs4OSwyOCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkodW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIDA7Cit9CiAjZWxzZQogZXh0ZXJuIGludCByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfbWVtb3J5X2lzb2xhdGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX21lbW9yeV9pc29sYXRlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9uZXdfbWVtb3J5KGludCwgc3RydWN0IG1lbV9zZWN0aW9uICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21lbW9yeV9zZWN0aW9uKHN0cnVjdCBtZW1fc2VjdGlvbiAqKTsKIGV4dGVybiBpbnQgbWVtb3J5X2Rldl9pbml0KHZvaWQpOwogZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5X2Jsb2NrKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBtZW1fc2VjdGlvbiAqLCBpbnQpOwogZXh0ZXJuIGludCBtZW1vcnlfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKK2V4dGVybiBpbnQgbWVtb3J5X2lzb2xhdGVfbm90aWZ5KHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKIGV4dGVybiBzdHJ1Y3QgbWVtb3J5X2Jsb2NrICpmaW5kX21lbW9yeV9ibG9jayhzdHJ1Y3QgbWVtX3NlY3Rpb24gKik7CiAjZGVmaW5lIENPTkZJR19NRU1fQkxPQ0tfU0laRQkoUEFHRVNfUEVSX1NFQ1RJT048PFBBR0VfU0hJRlQpCiBlbnVtIG1lbV9hZGRfY29udGV4dCB7IEJPT1QsIEhPVFBMVUcgfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4NDliNGE2Li4yMjY1ZjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDM3LDYgKzEwMzcsOSBAQAogZXh0ZXJuIHZvaWQgcmVtb3ZlX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIGV4dGVybiB2b2lkIHJlbW92ZV9hbGxfYWN0aXZlX3Jhbmdlcyh2b2lkKTsKK3ZvaWQgc29ydF9ub2RlX21hcCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4pOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYWJzZW50X3BhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIGV4dGVybiB2b2lkIGdldF9wZm5fcmFuZ2VfZm9yX25pZCh1bnNpZ25lZCBpbnQgbmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IDg0YTUyNGEuLjg0ZDAyMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTEyMyw2ICsxMjMsOCBAQAogCXN0cnVjdCBmaWxlCSp2bV9maWxlOwkvKiB0aGUgYmFja2luZyBmaWxlIG9yIE5VTEwgKi8KIAogCWF0b21pY190CXZtX3VzYWdlOwkvKiByZWdpb24gdXNhZ2UgY291bnQgKi8KKwlib29sCQl2bV9pY2FjaGVfZmx1c2hlZCA6IDE7IC8qIHRydWUgaWYgdGhlIGljYWNoZSBoYXMgYmVlbiBmbHVzaGVkIGZvcgorCQkJCQkJKiB0aGlzIHJlZ2lvbiAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmgKaW5kZXggZDllYmYxMC4uZDc0Nzg1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogc3RydWN0IGZzX3N0cnVjdDsKIAorZXh0ZXJuIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpjcmVhdGVfbW50X25zKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnModW5zaWduZWQgbG9uZywgc3RydWN0IG1udF9uYW1lc3BhY2UgKiwKIAkJc3RydWN0IGZzX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHB1dF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaAppbmRleCAwMjg5NDY3Li4wNWI0NDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC03Miw4ICs3Miw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgZmlsZSAqbG9va3VwX2luc3RhbnRpYXRlX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJaW50ICgqb3Blbikoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopKTsKLWV4dGVybiBzdHJ1Y3QgZmlsZSAqbmFtZWlkYXRhX3RvX2ZpbHAoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBmbGFncyk7Ci1leHRlcm4gdm9pZCByZWxlYXNlX29wZW5faW50ZW50KHN0cnVjdCBuYW1laWRhdGEgKik7CiAKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb25lX2xlbihjb25zdCBjaGFyICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggYmYxZTY3MC4uMTc0ZTUzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0yNDMsNiArMjQzLDcgQEAKIAl1bnNpZ25lZCBpbnQJZDJfc3VwcG9ydDoxOwkvKiBMb3cgcG93ZXIgc3RhdGUgRDIgaXMgc3VwcG9ydGVkICovCiAJdW5zaWduZWQgaW50CW5vX2QxZDI6MTsJLyogT25seSBhbGxvdyBEMCBhbmQgRDMgKi8KIAl1bnNpZ25lZCBpbnQJd2FrZXVwX3ByZXBhcmVkOjE7CisJdW5zaWduZWQgaW50CWQzX2RlbGF5OwkvKiBEMy0+RDAgdHJhbnNpdGlvbiB0aW1lIGluIG1zICovCiAKICNpZmRlZiBDT05GSUdfUENJRUFTUE0KIAlzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlCSpsaW5rX3N0YXRlOwkvKiBBU1BNIGxpbmsgc3RhdGUuICovCkBAIC01NjYsNiArNTY3LDkgQEAKIAkJCQlyZXNvdXJjZV9zaXplX3QpOwogdm9pZCBwY2liaW9zX3VwZGF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKiwgaW50IGlycSk7CiAKKy8qIFdlYWsgYnV0IGNhbiBiZSBvdmVycmlkZW4gYnkgYXJjaCAqLwordm9pZCBwY2lfZml4dXBfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqKTsKKwogLyogR2VuZXJpYyBQQ0kgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseSAqLwogCiBleHRlcm4gc3RydWN0IHBjaV9idXMgKnBjaV9maW5kX2J1cyhpbnQgZG9tYWluLCBpbnQgYnVzbnIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZmIyNTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0NCArMCwwIEBACi0vKgotICogIE5PVEU6IHRoaXMgZmlsZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUga2VybmVsIHJlbGVhc2UsIGl0IGlzCi0gKiAgcHJvdmlkZWQgYXMgYSBjb3VydGVzeSBjb3B5IG9mIHVzZXItc3BhY2UgY29kZSB0aGF0IHJlbGllcyBvbiB0aGUKLSAqICBvbGQgKHByZS1yZW5hbWUpIHN5bWJvbHMgYW5kIGNvbnN0YW50cy4KLSAqCi0gKiAgUGVyZm9ybWFuY2UgZXZlbnRzOgotICoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCi0gKgotICogIERhdGEgdHlwZSBkZWZpbml0aW9ucywgZGVjbGFyYXRpb25zLCBwcm90b3R5cGVzLgotICoKLSAqICAgIFN0YXJ0ZWQgYnk6IFRob21hcyBHbGVpeG5lciBhbmQgSW5nbyBNb2xuYXIKLSAqCi0gKiAgRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCi0gKi8KLSNpZm5kZWYgX0xJTlVYX1BFUkZfQ09VTlRFUl9ICi0jZGVmaW5lIF9MSU5VWF9QRVJGX0NPVU5URVJfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotLyoKLSAqIFVzZXItc3BhY2UgQUJJIGJpdHM6Ci0gKi8KLQotLyoKLSAqIGF0dHIudHlwZQotICovCi1lbnVtIHBlcmZfdHlwZV9pZCB7Ci0JUEVSRl9UWVBFX0hBUkRXQVJFCQkJPSAwLAotCVBFUkZfVFlQRV9TT0ZUV0FSRQkJCT0gMSwKLQlQRVJGX1RZUEVfVFJBQ0VQT0lOVAkJCT0gMiwKLQlQRVJGX1RZUEVfSFdfQ0FDSEUJCQk9IDMsCi0JUEVSRl9UWVBFX1JBVwkJCQk9IDQsCi0KLQlQRVJGX1RZUEVfTUFYLAkJCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogR2VuZXJhbGl6ZWQgcGVyZm9ybWFuY2UgY291bnRlciBldmVudCB0eXBlcywgdXNlZCBieSB0aGUKLSAqIGF0dHIuZXZlbnRfaWQgcGFyYW1ldGVyIG9mIHRoZSBzeXNfcGVyZl9jb3VudGVyX29wZW4oKQotICogc3lzY2FsbDoKLSAqLwotZW51bSBwZXJmX2h3X2lkIHsKLQkvKgotCSAqIENvbW1vbiBoYXJkd2FyZSBldmVudHMsIGdlbmVyYWxpemVkIGJ5IHRoZSBrZXJuZWw6Ci0JICovCi0JUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTCQk9IDAsCi0JUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMJCT0gMSwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVMJCT0gMiwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFUwkJPSAzLAotCVBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUwk9IDQsCi0JUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTCQk9IDUsCi0JUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTCQk9IDYsCi0KLQlQRVJGX0NPVU5UX0hXX01BWCwJCQkvKiBub24tQUJJICovCi19OwotCi0vKgotICogR2VuZXJhbGl6ZWQgaGFyZHdhcmUgY2FjaGUgY291bnRlcnM6Ci0gKgotICogICAgICAgeyBMMS1ELCBMMS1JLCBMTEMsIElUTEIsIERUTEIsIEJQVSB9IHgKLSAqICAgICAgIHsgcmVhZCwgd3JpdGUsIHByZWZldGNoIH0geAotICogICAgICAgeyBhY2Nlc3NlcywgbWlzc2VzIH0KLSAqLwotZW51bSBwZXJmX2h3X2NhY2hlX2lkIHsKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX0wxRAkJCT0gMCwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX0wxSQkJCT0gMSwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX0xMCQkJPSAyLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfRFRMQgkJPSAzLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfSVRMQgkJPSA0LAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfQlBVCQkJPSA1LAotCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9NQVgsCQkvKiBub24tQUJJICovCi19OwotCi1lbnVtIHBlcmZfaHdfY2FjaGVfb3BfaWQgewotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPSAwLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfV1JJVEUJCT0gMSwKLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1BSRUZFVENICQk9IDIsCi0KLQlQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCwJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLWVudW0gcGVyZl9od19jYWNoZV9vcF9yZXN1bHRfaWQgewotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUwk9IDAsCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUwkJPSAxLAotCi0JUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYLAkJLyogbm9uLUFCSSAqLwotfTsKLQotLyoKLSAqIFNwZWNpYWwgInNvZnR3YXJlIiBjb3VudGVycyBwcm92aWRlZCBieSB0aGUga2VybmVsLCBldmVuIGlmIHRoZSBoYXJkd2FyZQotICogZG9lcyBub3Qgc3VwcG9ydCBwZXJmb3JtYW5jZSBjb3VudGVycy4gVGhlc2UgY291bnRlcnMgbWVhc3VyZSB2YXJpb3VzCi0gKiBwaHlzaWNhbCBhbmQgc3cgZXZlbnRzIG9mIHRoZSBrZXJuZWwgKGFuZCBhbGxvdyB0aGUgcHJvZmlsaW5nIG9mIHRoZW0gYXMKLSAqIHdlbGwpOgotICovCi1lbnVtIHBlcmZfc3dfaWRzIHsKLQlQRVJGX0NPVU5UX1NXX0NQVV9DTE9DSwkJCT0gMCwKLQlQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sJCT0gMSwKLQlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTCQk9IDIsCi0JUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTCQk9IDMsCi0JUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUwkJPSA0LAotCVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOCQk9IDUsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUoJCT0gNiwKLQlQRVJGX0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFMJCT0gNywKLQlQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFMJCT0gOCwKLQotCVBFUkZfQ09VTlRfU1dfTUFYLAkJCS8qIG5vbi1BQkkgKi8KLX07Ci0KLS8qCi0gKiBCaXRzIHRoYXQgY2FuIGJlIHNldCBpbiBhdHRyLnNhbXBsZV90eXBlIHRvIHJlcXVlc3QgaW5mb3JtYXRpb24KLSAqIGluIHRoZSBvdmVyZmxvdyBwYWNrZXRzLgotICovCi1lbnVtIHBlcmZfY291bnRlcl9zYW1wbGVfZm9ybWF0IHsKLQlQRVJGX1NBTVBMRV9JUAkJCQk9IDFVIDw8IDAsCi0JUEVSRl9TQU1QTEVfVElECQkJCT0gMVUgPDwgMSwKLQlQRVJGX1NBTVBMRV9USU1FCQkJPSAxVSA8PCAyLAotCVBFUkZfU0FNUExFX0FERFIJCQk9IDFVIDw8IDMsCi0JUEVSRl9TQU1QTEVfUkVBRAkJCT0gMVUgPDwgNCwKLQlQRVJGX1NBTVBMRV9DQUxMQ0hBSU4JCQk9IDFVIDw8IDUsCi0JUEVSRl9TQU1QTEVfSUQJCQkJPSAxVSA8PCA2LAotCVBFUkZfU0FNUExFX0NQVQkJCQk9IDFVIDw8IDcsCi0JUEVSRl9TQU1QTEVfUEVSSU9ECQkJPSAxVSA8PCA4LAotCVBFUkZfU0FNUExFX1NUUkVBTV9JRAkJCT0gMVUgPDwgOSwKLQlQRVJGX1NBTVBMRV9SQVcJCQkJPSAxVSA8PCAxMCwKLQotCVBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDExLAkJLyogbm9uLUFCSSAqLwotfTsKLQotLyoKLSAqIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgcmVhZCgpIG9uIGEgcGVyZiBjb3VudGVyIGZkLAotICogYXMgc3BlY2lmaWVkIGJ5IGF0dHIucmVhZF9mb3JtYXQ6Ci0gKgotICogc3RydWN0IHJlYWRfZm9ybWF0IHsKLSAqCXsgdTY0CQl2YWx1ZTsKLSAqCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9FTkFCTEVECi0gKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfUlVOTklORwotICoJICB7IHU2NAkJaWQ7ICAgICAgICAgICB9ICYmIFBFUkZfRk9STUFUX0lECi0gKgl9ICYmICFQRVJGX0ZPUk1BVF9HUk9VUAotICoKLSAqCXsgdTY0CQlucjsKLSAqCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9FTkFCTEVECi0gKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfUlVOTklORwotICoJICB7IHU2NAkJdmFsdWU7Ci0gKgkgICAgeyB1NjQJaWQ7ICAgICAgICAgICB9ICYmIFBFUkZfRk9STUFUX0lECi0gKgkgIH0JCWNudHJbbnJdOwotICoJfSAmJiBQRVJGX0ZPUk1BVF9HUk9VUAotICogfTsKLSAqLwotZW51bSBwZXJmX2NvdW50ZXJfcmVhZF9mb3JtYXQgewotCVBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRAkJPSAxVSA8PCAwLAotCVBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORwkJPSAxVSA8PCAxLAotCVBFUkZfRk9STUFUX0lECQkJCT0gMVUgPDwgMiwKLQlQRVJGX0ZPUk1BVF9HUk9VUAkJCT0gMVUgPDwgMywKLQotCVBFUkZfRk9STUFUX01BWCA9IDFVIDw8IDQsIAkJLyogbm9uLUFCSSAqLwotfTsKLQotI2RlZmluZSBQRVJGX0FUVFJfU0laRV9WRVIwCTY0CS8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovCi0KLS8qCi0gKiBIYXJkd2FyZSBldmVudCB0byBtb25pdG9yIHZpYSBhIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgY291bnRlcjoKLSAqLwotc3RydWN0IHBlcmZfY291bnRlcl9hdHRyIHsKLQotCS8qCi0JICogTWFqb3IgdHlwZTogaGFyZHdhcmUvc29mdHdhcmUvdHJhY2Vwb2ludC9ldGMuCi0JICovCi0JX191MzIJCQl0eXBlOwotCi0JLyoKLQkgKiBTaXplIG9mIHRoZSBhdHRyIHN0cnVjdHVyZSwgZm9yIGZ3ZC9id2QgY29tcGF0LgotCSAqLwotCV9fdTMyCQkJc2l6ZTsKLQotCS8qCi0JICogVHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgotCSAqLwotCV9fdTY0CQkJY29uZmlnOwotCi0JdW5pb24gewotCQlfX3U2NAkJc2FtcGxlX3BlcmlvZDsKLQkJX191NjQJCXNhbXBsZV9mcmVxOwotCX07Ci0KLQlfX3U2NAkJCXNhbXBsZV90eXBlOwotCV9fdTY0CQkJcmVhZF9mb3JtYXQ7Ci0KLQlfX3U2NAkJCWRpc2FibGVkICAgICAgIDogIDEsIC8qIG9mZiBieSBkZWZhdWx0ICAgICAgICAqLwotCQkJCWluaGVyaXQJICAgICAgIDogIDEsIC8qIGNoaWxkcmVuIGluaGVyaXQgaXQgICAqLwotCQkJCXBpbm5lZAkgICAgICAgOiAgMSwgLyogbXVzdCBhbHdheXMgYmUgb24gUE1VICovCi0JCQkJZXhjbHVzaXZlICAgICAgOiAgMSwgLyogb25seSBncm91cCBvbiBQTVUgICAgICovCi0JCQkJZXhjbHVkZV91c2VyICAgOiAgMSwgLyogZG9uJ3QgY291bnQgdXNlciAgICAgICovCi0JCQkJZXhjbHVkZV9rZXJuZWwgOiAgMSwgLyogZGl0dG8ga2VybmVsICAgICAgICAgICovCi0JCQkJZXhjbHVkZV9odiAgICAgOiAgMSwgLyogZGl0dG8gaHlwZXJ2aXNvciAgICAgICovCi0JCQkJZXhjbHVkZV9pZGxlICAgOiAgMSwgLyogZG9uJ3QgY291bnQgd2hlbiBpZGxlICovCi0JCQkJbW1hcCAgICAgICAgICAgOiAgMSwgLyogaW5jbHVkZSBtbWFwIGRhdGEgICAgICovCi0JCQkJY29tbQkgICAgICAgOiAgMSwgLyogaW5jbHVkZSBjb21tIGRhdGEgICAgICovCi0JCQkJZnJlcSAgICAgICAgICAgOiAgMSwgLyogdXNlIGZyZXEsIG5vdCBwZXJpb2QgICovCi0JCQkJaW5oZXJpdF9zdGF0ICAgOiAgMSwgLyogcGVyIHRhc2sgY291bnRzICAgICAgICovCi0JCQkJZW5hYmxlX29uX2V4ZWMgOiAgMSwgLyogbmV4dCBleGVjIGVuYWJsZXMgICAgICovCi0JCQkJdGFzayAgICAgICAgICAgOiAgMSwgLyogdHJhY2UgZm9yay9leGl0ICAgICAgICovCi0JCQkJd2F0ZXJtYXJrICAgICAgOiAgMSwgLyogd2FrZXVwX3dhdGVybWFyayAgICAgICovCi0KLQkJCQlfX3Jlc2VydmVkXzEgICA6IDQ5OwotCi0JdW5pb24gewotCQlfX3UzMgkJd2FrZXVwX2V2ZW50czsJICAvKiB3YWtldXAgZXZlcnkgbiBldmVudHMgKi8KLQkJX191MzIJCXdha2V1cF93YXRlcm1hcms7IC8qIGJ5dGVzIGJlZm9yZSB3YWtldXAgICAqLwotCX07Ci0JX191MzIJCQlfX3Jlc2VydmVkXzI7Ci0KLQlfX3U2NAkJCV9fcmVzZXJ2ZWRfMzsKLX07Ci0KLS8qCi0gKiBJb2N0bHMgdGhhdCBjYW4gYmUgZG9uZSBvbiBhIHBlcmYgY291bnRlciBmZDoKLSAqLwotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX0VOQUJMRQkJX0lPICgnJCcsIDApCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfRElTQUJMRQlfSU8gKCckJywgMSkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19SRUZSRVNICV9JTyAoJyQnLCAyKQotI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1JFU0VUCQlfSU8gKCckJywgMykKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19QRVJJT0QJCV9JT1coJyQnLCA0LCB1NjQpCi0jZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfU0VUX09VVFBVVAlfSU8gKCckJywgNSkKLSNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19TRVRfRklMVEVSCV9JT1coJyQnLCA2LCBjaGFyICopCi0KLWVudW0gcGVyZl9jb3VudGVyX2lvY19mbGFncyB7Ci0JUEVSRl9JT0NfRkxBR19HUk9VUAkJPSAxVSA8PCAwLAotfTsKLQotLyoKLSAqIFN0cnVjdHVyZSBvZiB0aGUgcGFnZSB0aGF0IGNhbiBiZSBtYXBwZWQgdmlhIG1tYXAKLSAqLwotc3RydWN0IHBlcmZfY291bnRlcl9tbWFwX3BhZ2UgewotCV9fdTMyCXZlcnNpb247CQkvKiB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIHN0cnVjdHVyZSAqLwotCV9fdTMyCWNvbXBhdF92ZXJzaW9uOwkJLyogbG93ZXN0IHZlcnNpb24gdGhpcyBpcyBjb21wYXQgd2l0aCAqLwotCi0JLyoKLQkgKiBCaXRzIG5lZWRlZCB0byByZWFkIHRoZSBodyBjb3VudGVycyBpbiB1c2VyLXNwYWNlLgotCSAqCi0JICogICB1MzIgc2VxOwotCSAqICAgczY0IGNvdW50OwotCSAqCi0JICogICBkbyB7Ci0JICogICAgIHNlcSA9IHBjLT5sb2NrOwotCSAqCi0JICogICAgIGJhcnJpZXIoKQotCSAqICAgICBpZiAocGMtPmluZGV4KSB7Ci0JICogICAgICAgY291bnQgPSBwbWNfcmVhZChwYy0+aW5kZXggLSAxKTsKLQkgKiAgICAgICBjb3VudCArPSBwYy0+b2Zmc2V0OwotCSAqICAgICB9IGVsc2UKLQkgKiAgICAgICBnb3RvIHJlZ3VsYXJfcmVhZDsKLQkgKgotCSAqICAgICBiYXJyaWVyKCk7Ci0JICogICB9IHdoaWxlIChwYy0+bG9jayAhPSBzZXEpOwotCSAqCi0JICogTk9URTogZm9yIG9idmlvdXMgcmVhc29uIHRoaXMgb25seSB3b3JrcyBvbiBzZWxmLW1vbml0b3JpbmcKLQkgKiAgICAgICBwcm9jZXNzZXMuCi0JICovCi0JX191MzIJbG9jazsJCQkvKiBzZXFsb2NrIGZvciBzeW5jaHJvbml6YXRpb24gKi8KLQlfX3UzMglpbmRleDsJCQkvKiBoYXJkd2FyZSBjb3VudGVyIGlkZW50aWZpZXIgKi8KLQlfX3M2NAlvZmZzZXQ7CQkJLyogYWRkIHRvIGhhcmR3YXJlIGNvdW50ZXIgdmFsdWUgKi8KLQlfX3U2NAl0aW1lX2VuYWJsZWQ7CQkvKiB0aW1lIGNvdW50ZXIgYWN0aXZlICovCi0JX191NjQJdGltZV9ydW5uaW5nOwkJLyogdGltZSBjb3VudGVyIG9uIGNwdSAqLwotCi0JCS8qCi0JCSAqIEhvbGUgZm9yIGV4dGVuc2lvbiBvZiB0aGUgc2VsZiBtb25pdG9yIGNhcGFiaWxpdGllcwotCQkgKi8KLQotCV9fdTY0CV9fcmVzZXJ2ZWRbMTIzXTsJLyogYWxpZ24gdG8gMWsgKi8KLQotCS8qCi0JICogQ29udHJvbCBkYXRhIGZvciB0aGUgbW1hcCgpIGRhdGEgYnVmZmVyLgotCSAqCi0JICogVXNlci1zcGFjZSByZWFkaW5nIHRoZSBAZGF0YV9oZWFkIHZhbHVlIHNob3VsZCBpc3N1ZSBhbiBybWIoKSwgb24KLQkgKiBTTVAgY2FwYWJsZSBwbGF0Zm9ybXMsIGFmdGVyIHJlYWRpbmcgdGhpcyB2YWx1ZSAtLSBzZWUKLQkgKiBwZXJmX2NvdW50ZXJfd2FrZXVwKCkuCi0JICoKLQkgKiBXaGVuIHRoZSBtYXBwaW5nIGlzIFBST1RfV1JJVEUgdGhlIEBkYXRhX3RhaWwgdmFsdWUgc2hvdWxkIGJlCi0JICogd3JpdHRlbiBieSB1c2Vyc3BhY2UgdG8gcmVmbGVjdCB0aGUgbGFzdCByZWFkIGRhdGEuIEluIHRoaXMgY2FzZQotCSAqIHRoZSBrZXJuZWwgd2lsbCBub3Qgb3Zlci13cml0ZSB1bnJlYWQgZGF0YS4KLQkgKi8KLQlfX3U2NCAgIGRhdGFfaGVhZDsJCS8qIGhlYWQgaW4gdGhlIGRhdGEgc2VjdGlvbiAqLwotCV9fdTY0CWRhdGFfdGFpbDsJCS8qIHVzZXItc3BhY2Ugd3JpdHRlbiB0YWlsICovCi19OwotCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19DUFVNT0RFX01BU0sJCSgzIDw8IDApCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19DUFVNT0RFX1VOS05PV04JCSgwIDw8IDApCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19LRVJORUwJCQkoMSA8PCAwKQotI2RlZmluZSBQRVJGX0VWRU5UX01JU0NfVVNFUgkJCSgyIDw8IDApCi0jZGVmaW5lIFBFUkZfRVZFTlRfTUlTQ19IWVBFUlZJU09SCQkoMyA8PCAwKQotCi1zdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgewotCV9fdTMyCXR5cGU7Ci0JX191MTYJbWlzYzsKLQlfX3UxNglzaXplOwotfTsKLQotZW51bSBwZXJmX2V2ZW50X3R5cGUgewotCi0JLyoKLQkgKiBUaGUgTU1BUCBldmVudHMgcmVjb3JkIHRoZSBQUk9UX0VYRUMgbWFwcGluZ3Mgc28gdGhhdCB3ZSBjYW4KLQkgKiBjb3JyZWxhdGUgdXNlcnNwYWNlIElQcyB0byBjb2RlLiBUaGV5IGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6Ci0JICoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoKLQkgKgl1MzIJCQkJcGlkLCB0aWQ7Ci0JICoJdTY0CQkJCWFkZHI7Ci0JICoJdTY0CQkJCWxlbjsKLQkgKgl1NjQJCQkJcGdvZmY7Ci0JICoJY2hhcgkJCQlmaWxlbmFtZVtdOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9NTUFQCQkJPSAxLAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoJdTY0CQkJCWlkOwotCSAqCXU2NAkJCQlsb3N0OwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9MT1NUCQkJPSAyLAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoKLQkgKgl1MzIJCQkJcGlkLCB0aWQ7Ci0JICoJY2hhcgkJCQljb21tW107Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX0NPTU0JCQk9IDMsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgl1MzIJCQkJcGlkLCBwcGlkOwotCSAqCXUzMgkJCQl0aWQsIHB0aWQ7Ci0JICoJdTY0CQkJCXRpbWU7Ci0JICogfTsKLQkgKi8KLQlQRVJGX0VWRU5UX0VYSVQJCQk9IDQsCi0KLQkvKgotCSAqIHN0cnVjdCB7Ci0JICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKgl1NjQJCQkJdGltZTsKLQkgKgl1NjQJCQkJaWQ7Ci0JICoJdTY0CQkJCXN0cmVhbV9pZDsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfVEhST1RUTEUJCT0gNSwKLQlQRVJGX0VWRU5UX1VOVEhST1RUTEUJCT0gNiwKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXUzMgkJCQlwaWQsIHBwaWQ7Ci0JICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl1NjQJCQkJdGltZTsKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfRk9SSwkJCT0gNywKLQotCS8qCi0JICogc3RydWN0IHsKLQkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCSAqCXUzMgkJCQlwaWQsIHRpZDsKLQkgKgotCSAqCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOwotCSAqIH07Ci0JICovCi0JUEVSRl9FVkVOVF9SRUFECQkJPSA4LAotCi0JLyoKLQkgKiBzdHJ1Y3QgewotCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JICoKLQkgKgl7IHU2NAkJCWlwOwkgIH0gJiYgUEVSRl9TQU1QTEVfSVAKLQkgKgl7IHUzMgkJCXBpZCwgdGlkOyB9ICYmIFBFUkZfU0FNUExFX1RJRAotCSAqCXsgdTY0CQkJdGltZTsgICAgIH0gJiYgUEVSRl9TQU1QTEVfVElNRQotCSAqCXsgdTY0CQkJYWRkcjsgICAgIH0gJiYgUEVSRl9TQU1QTEVfQUREUgotCSAqCXsgdTY0CQkJaWQ7CSAgfSAmJiBQRVJGX1NBTVBMRV9JRAotCSAqCXsgdTY0CQkJc3RyZWFtX2lkO30gJiYgUEVSRl9TQU1QTEVfU1RSRUFNX0lECi0JICoJeyB1MzIJCQljcHUsIHJlczsgfSAmJiBQRVJGX1NBTVBMRV9DUFUKLQkgKgl7IHU2NAkJCXBlcmlvZDsgICB9ICYmIFBFUkZfU0FNUExFX1BFUklPRAotCSAqCi0JICoJeyBzdHJ1Y3QgcmVhZF9mb3JtYXQJdmFsdWVzOwkgIH0gJiYgUEVSRl9TQU1QTEVfUkVBRAotCSAqCi0JICoJeyB1NjQJCQluciwKLQkgKgkgIHU2NAkJCWlwc1tucl07ICB9ICYmIFBFUkZfU0FNUExFX0NBTExDSEFJTgotCSAqCi0JICoJIwotCSAqCSMgVGhlIFJBVyByZWNvcmQgYmVsb3cgaXMgb3BhcXVlIGRhdGEgd3J0IHRoZSBBQkkKLQkgKgkjCi0JICoJIyBUaGF0IGlzLCB0aGUgQUJJIGRvZXNuJ3QgbWFrZSBhbnkgcHJvbWlzZXMgd3J0IHRvCi0JICoJIyB0aGUgc3RhYmlsaXR5IG9mIGl0cyBjb250ZW50LCBpdCBtYXkgdmFyeSBkZXBlbmRpbmcKLQkgKgkjIG9uIGV2ZW50LCBoYXJkd2FyZSwga2VybmVsIHZlcnNpb24gYW5kIHBoYXNlIG9mCi0JICoJIyB0aGUgbW9vbi4KLQkgKgkjCi0JICoJIyBJbiBvdGhlciB3b3JkcywgUEVSRl9TQU1QTEVfUkFXIGNvbnRlbnRzIGFyZSBub3QgYW4gQUJJLgotCSAqCSMKLQkgKgotCSAqCXsgdTMyCQkJc2l6ZTsKLQkgKgkgIGNoYXIgICAgICAgICAgICAgICAgICBkYXRhW3NpemVdO30mJiBQRVJGX1NBTVBMRV9SQVcKLQkgKiB9OwotCSAqLwotCVBFUkZfRVZFTlRfU0FNUExFCQk9IDksCi0KLQlQRVJGX0VWRU5UX01BWCwJCQkvKiBub24tQUJJICovCi19OwotCi1lbnVtIHBlcmZfY2FsbGNoYWluX2NvbnRleHQgewotCVBFUkZfQ09OVEVYVF9IVgkJCT0gKF9fdTY0KS0zMiwKLQlQRVJGX0NPTlRFWFRfS0VSTkVMCQk9IChfX3U2NCktMTI4LAotCVBFUkZfQ09OVEVYVF9VU0VSCQk9IChfX3U2NCktNTEyLAotCi0JUEVSRl9DT05URVhUX0dVRVNUCQk9IChfX3U2NCktMjA0OCwKLQlQRVJGX0NPTlRFWFRfR1VFU1RfS0VSTkVMCT0gKF9fdTY0KS0yMTc2LAotCVBFUkZfQ09OVEVYVF9HVUVTVF9VU0VSCQk9IChfX3U2NCktMjU2MCwKLQotCVBFUkZfQ09OVEVYVF9NQVgJCT0gKF9fdTY0KS00MDk1LAotfTsKLQotI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAJCSgxVSA8PCAwKQotI2RlZmluZSBQRVJGX0ZMQUdfRkRfT1VUUFVUCQkoMVUgPDwgMSkKLQotLyoKLSAqIEluIGNhc2Ugc29tZSBhcHAgc3RpbGwgcmVmZXJlbmNlcyB0aGUgb2xkIHN5bWJvbHM6Ci0gKi8KLQotI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCQlfX05SX3BlcmZfZXZlbnRfb3BlbgotCi0jZGVmaW5lIFBSX1RBU0tfUEVSRl9DT1VOVEVSU19ESVNBQkxFCVBSX1RBU0tfUEVSRl9FVkVOVFNfRElTQUJMRQotI2RlZmluZSBQUl9UQVNLX1BFUkZfQ09VTlRFUlNfRU5BQkxFCVBSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFCi0KLSNlbmRpZiAvKiBfTElOVVhfUEVSRl9DT1VOVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IGIxMzY4YjguLjc5NjhkZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtNDQ3LDYgKzQ0Nyw3IEBACiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKIGludCBwaHlfY2xlYXJfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IHBoeV9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBpbnRlcnJ1cHRzKTsKK2ludCBwaHlfaW5pdF9odyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQl1MzIgZmxhZ3MsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOwogc3RydWN0IHBoeV9kZXZpY2UgKiBwaHlfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaAppbmRleCA3ZmMxOTRhLi4yMTEwYTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9pc29uLmgKQEAgLTIsMTMgKzIsMjUgQEAKICNkZWZpbmUgX0xJTlVYX1BPSVNPTl9ICiAKIC8qKioqKioqKioqIGluY2x1ZGUvbGludXgvbGlzdC5oICoqKioqKioqKiovCisKKy8qCisgKiBBcmNoaXRlY3R1cmVzIG1pZ2h0IHdhbnQgdG8gbW92ZSB0aGUgcG9pc29uIHBvaW50ZXIgb2Zmc2V0CisgKiBpbnRvIHNvbWUgd2VsbC1yZWNvZ25pemVkIGFyZWEgc3VjaCBhcyAweGRlYWQwMDAwMDAwMDAwMDAsCisgKiB0aGF0IGlzIGFsc28gbm90IG1hcHBhYmxlIGJ5IHVzZXItc3BhY2UgZXhwbG9pdHM6CisgKi8KKyNpZmRlZiBDT05GSUdfSUxMRUdBTF9QT0lOVEVSX1ZBTFVFCisjIGRlZmluZSBQT0lTT05fUE9JTlRFUl9ERUxUQSBfQUMoQ09ORklHX0lMTEVHQUxfUE9JTlRFUl9WQUxVRSwgVUwpCisjZWxzZQorIyBkZWZpbmUgUE9JU09OX1BPSU5URVJfREVMVEEgMAorI2VuZGlmCisKIC8qCiAgKiBUaGVzZSBhcmUgbm9uLU5VTEwgcG9pbnRlcnMgdGhhdCB3aWxsIHJlc3VsdCBpbiBwYWdlIGZhdWx0cwogICogdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHVzZWQgdG8gdmVyaWZ5IHRoYXQgbm9ib2R5IHVzZXMKICAqIG5vbi1pbml0aWFsaXplZCBsaXN0IGVudHJpZXMuCiAgKi8KLSNkZWZpbmUgTElTVF9QT0lTT04xICAoKHZvaWQgKikgMHgwMDEwMDEwMCkKLSNkZWZpbmUgTElTVF9QT0lTT04yICAoKHZvaWQgKikgMHgwMDIwMDIwMCkKKyNkZWZpbmUgTElTVF9QT0lTT04xICAoKHZvaWQgKikgMHgwMDEwMDEwMCArIFBPSVNPTl9QT0lOVEVSX0RFTFRBKQorI2RlZmluZSBMSVNUX1BPSVNPTjIgICgodm9pZCAqKSAweDAwMjAwMjAwICsgUE9JU09OX1BPSU5URVJfREVMVEEpCiAKIC8qKioqKioqKioqIGluY2x1ZGUvbGludXgvdGltZXIuaCAqKioqKioqKioqLwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oIGIvaW5jbHVkZS9saW51eC9wd21fYmFja2xpZ2h0LmgKaW5kZXggN2E5NzU0Yy4uMDFiM2Q3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wd21fYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wd21fYmFja2xpZ2h0LmgKQEAgLTEwLDcgKzEwLDcgQEAKIAl1bnNpZ25lZCBpbnQgZGZ0X2JyaWdodG5lc3M7CiAJdW5zaWduZWQgaW50IHB3bV9wZXJpb2RfbnM7CiAJaW50ICgqaW5pdCkoc3RydWN0IGRldmljZSAqZGV2KTsKLQlpbnQgKCpub3RpZnkpKGludCBicmlnaHRuZXNzKTsKKwlpbnQgKCpub3RpZnkpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpOwogCXZvaWQgKCpleGl0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IGU3MGU2MjEuLmE2ODYxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTMxNSw4ICszMTUsOSBAQAogCWludCAoKmNsYWltX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwogCS8qIHJlbGVhc2UgcnN2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KIAl2b2lkICgqcmVsZWFzZV9yc3YpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7Ci0JLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCi0JcXNpemVfdCAoKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwkvKiBnZXQgcmVzZXJ2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MsIHZhbHVlIHJldHVybmVkIGlzIG1hbmFnZWQgYnkKKwkgKiBxdW90YSBjb2RlIG9ubHkgKi8KKwlxc2l6ZV90ICooKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKaW5kZXggYzRiYTlhNy4uOTZjYzMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0aW55LmgKQEAgLTEwMSw0ICsxMDEsOSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGludCByY3VfcHJlZW1wdF9kZXB0aCh2b2lkKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUSU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggYzkzZWVlNS4uODA0NGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiBleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZCk7CiBleHRlcm4gdm9pZCBleGl0X3JjdSh2b2lkKTsKIAorLyoKKyAqIERlZmluZWQgYXMgbWFjcm8gYXMgaXQgaXMgYSB2ZXJ5IGxvdyBsZXZlbCBoZWFkZXIKKyAqIGluY2x1ZGVkIGZyb20gYXJlYXMgdGhhdCBkb24ndCBldmVuIGtub3cgYWJvdXQgY3VycmVudAorICovCisjZGVmaW5lIHJjdV9wcmVlbXB0X2RlcHRoKCkgKGN1cnJlbnQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykKKwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCkKQEAgLTYzLDYgKzY5LDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9wcmVlbXB0X2RlcHRoKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfbG9ja19iaCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGM5NmMxODUuLjFiYTNjZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTYyLDYgKzYyLDEyIEBACiBpbnQgcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CiB2b2lkIHJlaXNlcmZzX3dyaXRlX3VubG9ja19vbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGxvY2tfZGVwdGgpOwogCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCit2b2lkIHJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqcykgeyB9CisjZW5kaWYKKwogLyoKICAqIFNldmVyYWwgbXV0ZXhlcyBkZXBlbmQgb24gdGhlIHdyaXRlIGxvY2suCiAgKiBIb3dldmVyIHNvbWV0aW1lcyB3ZSB3YW50IHRvIHJlbGF4IHRoZSB3cml0ZSBsb2NrIHdoaWxlIHdlIGhvbGQKQEAgLTkyLDExICs5OCwzMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX211dGV4X2xvY2tfc2FmZShzdHJ1Y3QgbXV0ZXggKm0sCiAJCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogeworCXJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHMpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhzKTsKIAltdXRleF9sb2NrKG0pOwogCXJlaXNlcmZzX3dyaXRlX2xvY2socyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVpc2VyZnNfbXV0ZXhfbG9ja19uZXN0ZWRfc2FmZShzdHJ1Y3QgbXV0ZXggKm0sIHVuc2lnbmVkIGludCBzdWJjbGFzcywKKwkJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJcmVpc2VyZnNfbG9ja19jaGVja19yZWN1cnNpdmUocyk7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHMpOworCW11dGV4X2xvY2tfbmVzdGVkKG0sIHN1YmNsYXNzKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlaXNlcmZzX2Rvd25fcmVhZF9zYWZlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXJlaXNlcmZzX2xvY2tfY2hlY2tfcmVjdXJzaXZlKHMpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhzKTsKKwlkb3duX3JlYWQoc2VtKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKHMpOworfQorCiAvKgogICogV2hlbiB3ZSBzY2hlZHVsZSwgd2UgdXN1YWxseSB3YW50IHRvIGFsc28gcmVsZWFzZSB0aGUgd3JpdGUgbG9jaywKICAqIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXMgYmtsIGJhc2VkIGxvY2tpbmcgc2NoZW1lIG9mIHJlaXNlcmZzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oCmluZGV4IDQwZmM3ZTYuLmYxZTkxNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgKQEAgLTMsOCArMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQogLyoKICAqIFJlc291cmNlIGNvbnRyb2wvYWNjb3VudGluZyBoZWFkZXIgZmlsZSBmb3IgbGludXgKICAqLwpAQCAtNzAsNiArNjgsMTIgQEAKICAqLwogI2luY2x1ZGUgPGFzbS9yZXNvdXJjZS5oPgogCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKIGludCBnZXRydXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqcnUpOwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAyNDRjMjg3Li44ZDQ5OTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xOTIsNiArMTkyLDEyIEBACiAjZGVmaW5lIFRBU0tfREVBRAkJNjQKICNkZWZpbmUgVEFTS19XQUtFS0lMTAkJMTI4CiAjZGVmaW5lIFRBU0tfV0FLSU5HCQkyNTYKKyNkZWZpbmUgVEFTS19TVEFURV9NQVgJCTUxMgorCisjZGVmaW5lIFRBU0tfU1RBVEVfVE9fQ0hBUl9TVFIgIlJTRFR0Wlh4S1ciCisKK2V4dGVybiBjaGFyIF9fX2Fzc2VydF90YXNrX3N0YXRlWzEgLSAyKiEhKAorCQlzaXplb2YoVEFTS19TVEFURV9UT19DSEFSX1NUUiktMSAhPSBpbG9nMihUQVNLX1NUQVRFX01BWCkrMSldOwogCiAvKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIHRoZSBzYWtlIG9mIHNldF90YXNrX3N0YXRlICovCiAjZGVmaW5lIFRBU0tfS0lMTEFCTEUJCShUQVNLX1dBS0VLSUxMIHwgVEFTS19VTklOVEVSUlVQVElCTEUpCkBAIC0xMDkxLDcgKzEwOTcsOCBAQAogCQkJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpOwogCXZvaWQgKCpwcmVfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJdm9pZCAoKnBvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwotCXZvaWQgKCp0YXNrX3dha2VfdXApIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisJdm9pZCAoKnRhc2tfd2FraW5nKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCXZvaWQgKCp0YXNrX3dva2VuKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCiAJdm9pZCAoKnNldF9jcHVzX2FsbG93ZWQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld21hc2spOwpAQCAtMTExNSw3ICsxMTIyLDcgQEAKIAkJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotCXZvaWQgKCptb3ZlZF9ncm91cCkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisJdm9pZCAoKm1vdmVkX2dyb3VwKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgb25fcnEpOwogI2VuZGlmCiB9OwogCkBAIC0xNDQ2LDEwICsxNDUzLDggQEAKIAlnZnBfdCBsb2NrZGVwX3JlY2xhaW1fZ2ZwOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRlNfSk9VUk5BTF9JTkZPCiAvKiBqb3VybmFsbGluZyBmaWxlc3lzdGVtIGluZm8gKi8KIAl2b2lkICpqb3VybmFsX2luZm87Ci0jZW5kaWYKIAogLyogc3RhY2tlZCBibG9jayBkZXZpY2UgaW5mbyAqLwogCXN0cnVjdCBiaW8gKmJpb19saXN0LCAqKmJpb190YWlsOwpAQCAtMTU1NSw3ICsxNTYwLDcgQEAKIH07CiAKIC8qIEZ1dHVyZS1zYWZlIGFjY2Vzc29yIGZvciBzdHJ1Y3QgdGFza19zdHJ1Y3QncyBjcHVzX2FsbG93ZWQuICovCi0jZGVmaW5lIHRza19jcHVtYXNrKHRzaykgKCYodHNrKS0+Y3B1c19hbGxvd2VkKQorI2RlZmluZSB0c2tfY3B1c19hbGxvd2VkKHRzaykgKCYodHNrKS0+Y3B1c19hbGxvd2VkKQogCiAvKgogICogUHJpb3JpdHkgb2YgYSBwcm9jZXNzIGdvZXMgZnJvbSAwLi5NQVhfUFJJTy0xLCB2YWxpZCBSVApAQCAtMjU5Niw3ICsyNjAxLDI3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCiAKLSNkZWZpbmUgVEFTS19TVEFURV9UT19DSEFSX1NUUiAiUlNEVHRaWCIKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0YXNrX3JsaW1pdChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJdW5zaWduZWQgaW50IGxpbWl0KQoreworCXJldHVybiBBQ0NFU1NfT05DRSh0c2stPnNpZ25hbC0+cmxpbVtsaW1pdF0ucmxpbV9jdXIpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFza19ybGltaXRfbWF4KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQl1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJcmV0dXJuIEFDQ0VTU19PTkNFKHRzay0+c2lnbmFsLT5ybGltW2xpbWl0XS5ybGltX21heCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBybGltaXQodW5zaWduZWQgaW50IGxpbWl0KQoreworCXJldHVybiB0YXNrX3JsaW1pdChjdXJyZW50LCBsaW1pdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBybGltaXRfbWF4KHVuc2lnbmVkIGludCBsaW1pdCkKK3sKKwlyZXR1cm4gdGFza19ybGltaXRfbWF4KGN1cnJlbnQsIGxpbWl0KTsKK30KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDQ2NmNiYWQuLjJjNjI3ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTk1LDggKzk1LDEzIEBACiBleHRlcm4gaW50IGNhcF9uZXRsaW5rX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgY2FwX25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY2FwKTsKIAorI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1tYXBfbWluX2FkZHI7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBkYWNfbW1hcF9taW5fYWRkcjsKKyNlbHNlCisjZGVmaW5lIGRhY19tbWFwX21pbl9hZGRyCTBVTAorI2VuZGlmCisKIC8qCiAgKiBWYWx1ZXMgdXNlZCBpbiB0aGUgdGFza19zZWN1cml0eV9vcHMgY2FsbHMKICAqLwpAQCAtMTIxLDYgKzEyNiw3IEBACiAjZGVmaW5lIExTTV9VTlNBRkVfUFRSQUNFCTIKICNkZWZpbmUgTFNNX1VOU0FGRV9QVFJBQ0VfQ0FQCTQKIAorI2lmZGVmIENPTkZJR19NTVUKIC8qCiAgKiBJZiBhIGhpbnQgYWRkciBpcyBsZXNzIHRoYW4gbW1hcF9taW5fYWRkciBjaGFuZ2UgaGludCB0byBiZSBhcwogICogbG93IGFzIHBvc3NpYmxlIGJ1dCBzdGlsbCBncmVhdGVyIHRoYW4gbW1hcF9taW5fYWRkcgpAQCAtMTM1LDYgKzE0MSw3IEBACiB9CiBleHRlcm4gaW50IG1tYXBfbWluX2FkZHJfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQkJCSB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oIGIvaW5jbHVkZS9saW51eC9zb255cGkuaAppbmRleCAzNGM0NDc1Li40Zjk1YzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ueXBpLmgKQEAgLTExMSw2ICsxMTEsNyBAQAogI2RlZmluZSBTT05ZUElfRVZFTlRfVk9MVU1FX0lOQ19QUkVTU0VECQk2OQogI2RlZmluZSBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VECQk3MAogI2RlZmluZSBTT05ZUElfRVZFTlRfQlJJR0hUTkVTU19QUkVTU0VECQk3MQorI2RlZmluZSBTT05ZUElfRVZFTlRfTUVESUFfUFJFU1NFRAkJNzIKIAogLyogZ2V0L3NldCBicmlnaHRuZXNzICovCiAjZGVmaW5lIFNPTllQSV9JT0NHQlJUCQlfSU9SKCd2JywgMCwgX191OCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiM2U3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCkBAIC0wLDAgKzEsMjEyIEBACisjaWZuZGVmIERXX1NQSV9IRUFERVJfSAorI2RlZmluZSBEV19TUElfSEVBREVSX0gKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKiBCaXQgZmllbGRzIGluIENUUkxSMCAqLworI2RlZmluZSBTUElfREZTX09GRlNFVAkJCTAKKworI2RlZmluZSBTUElfRlJGX09GRlNFVAkJCTQKKyNkZWZpbmUgU1BJX0ZSRl9TUEkJCQkweDAKKyNkZWZpbmUgU1BJX0ZSRl9TU1AJCQkweDEKKyNkZWZpbmUgU1BJX0ZSRl9NSUNST1dJUkUJCTB4MgorI2RlZmluZSBTUElfRlJGX1JFU1YJCQkweDMKKworI2RlZmluZSBTUElfTU9ERV9PRkZTRVQJCQk2CisjZGVmaW5lIFNQSV9TQ1BIX09GRlNFVAkJCTYKKyNkZWZpbmUgU1BJX1NDT0xfT0ZGU0VUCQkJNworI2RlZmluZSBTUElfVE1PRF9PRkZTRVQJCQk4CisjZGVmaW5lCVNQSV9UTU9EX1RSCQkJMHgwCQkvKiB4bWl0ICYgcmVjdiAqLworI2RlZmluZSBTUElfVE1PRF9UTwkJCTB4MQkJLyogeG1pdCBvbmx5ICovCisjZGVmaW5lIFNQSV9UTU9EX1JPCQkJMHgyCQkvKiByZWN2IG9ubHkgKi8KKyNkZWZpbmUgU1BJX1RNT0RfRVBST01SRUFECQkweDMJCS8qIGVlcHJvbSByZWFkIG1vZGUgKi8KKworI2RlZmluZSBTUElfU0xWT0VfT0ZGU0VUCQkxMAorI2RlZmluZSBTUElfU1JMX09GRlNFVAkJCTExCisjZGVmaW5lIFNQSV9DRlNfT0ZGU0VUCQkJMTIKKworLyogQml0IGZpZWxkcyBpbiBTUiwgNyBiaXRzICovCisjZGVmaW5lIFNSX01BU0sJCQkJMHg3ZgkJLyogY292ZXIgNyBiaXRzICovCisjZGVmaW5lIFNSX0JVU1kJCQkJKDEgPDwgMCkKKyNkZWZpbmUgU1JfVEZfTk9UX0ZVTEwJCQkoMSA8PCAxKQorI2RlZmluZSBTUl9URl9FTVBUCQkJKDEgPDwgMikKKyNkZWZpbmUgU1JfUkZfTk9UX0VNUFQJCQkoMSA8PCAzKQorI2RlZmluZSBTUl9SRl9GVUxMCQkJKDEgPDwgNCkKKyNkZWZpbmUgU1JfVFhfRVJSCQkJKDEgPDwgNSkKKyNkZWZpbmUgU1JfRENPTAkJCQkoMSA8PCA2KQorCisvKiBCaXQgZmllbGRzIGluIElTUiwgSU1SLCBSSVNSLCA3IGJpdHMgKi8KKyNkZWZpbmUgU1BJX0lOVF9UWEVJCQkJKDEgPDwgMCkKKyNkZWZpbmUgU1BJX0lOVF9UWE9JCQkJKDEgPDwgMSkKKyNkZWZpbmUgU1BJX0lOVF9SWFVJCQkJKDEgPDwgMikKKyNkZWZpbmUgU1BJX0lOVF9SWE9JCQkJKDEgPDwgMykKKyNkZWZpbmUgU1BJX0lOVF9SWEZJCQkJKDEgPDwgNCkKKyNkZWZpbmUgU1BJX0lOVF9NU1RJCQkJKDEgPDwgNSkKKworLyogVFggUlggaW50ZXJydXB0IGxldmVsIHRocmVzaGhvbGQsIG1heCBjYW4gYmUgMjU2ICovCisjZGVmaW5lIFNQSV9JTlRfVEhSRVNIT0xECQkzMgorCitlbnVtIGR3X3NzaV90eXBlIHsKKwlTU0lfTU9UT19TUEkgPSAwLAorCVNTSV9USV9TU1AsCisJU1NJX05TX01JQ1JPV0lSRSwKK307CisKK3N0cnVjdCBkd19zcGlfcmVnIHsKKwl1MzIJY3RybDA7CisJdTMyCWN0cmwxOworCXUzMglzc2llbnI7CisJdTMyCW13Y3I7CisJdTMyCXNlcjsKKwl1MzIJYmF1ZHI7CisJdTMyCXR4Zmx0cjsKKwl1MzIJcnhmbHRyOworCXUzMgl0eGZscjsKKwl1MzIJcnhmbHI7CisJdTMyCXNyOworCXUzMglpbXI7CisJdTMyCWlzcjsKKwl1MzIJcmlzcjsKKwl1MzIJdHhvaWNyOworCXUzMglyeG9pY3I7CisJdTMyCXJ4dWljcjsKKwl1MzIJbXN0aWNyOworCXUzMglpY3I7CisJdTMyCWRtYWNyOworCXUzMglkbWF0ZGxyOworCXUzMglkbWFyZGxyOworCXUzMglpZHI7CisJdTMyCXZlcnNpb247CisJdTMyCWRyOwkJLyogQ3VycmVudGx5IG9wZXIgYXMgMzIgYml0cywKKwkJCQl0aG91Z2ggb25seSBsb3cgMTYgYml0cyBtYXR0ZXJzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgZHdfc3BpIHsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOworCXN0cnVjdCBzcGlfZGV2aWNlCSpjdXJfZGV2OworCXN0cnVjdCBkZXZpY2UJCSpwYXJlbnRfZGV2OworCWVudW0gZHdfc3NpX3R5cGUJdHlwZTsKKworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJdW5zaWduZWQgbG9uZwkJcGFkZHI7CisJdTMyCQkJaW9sZW47CisJaW50CQkJaXJxOworCXUzMgkJCW1heF9mcmVxOwkvKiBtYXggYnVzIGZyZXEgc3VwcG9ydGVkICovCisKKwl1MTYJCQlidXNfbnVtOworCXUxNgkJCW51bV9jczsJCS8qIHN1cHBvcnRlZCBzbGF2ZSBudW1iZXJzICovCisKKwkvKiBEcml2ZXIgbWVzc2FnZSBxdWV1ZSAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0CXB1bXBfbWVzc2FnZXM7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOworCWludAkJCWJ1c3k7CisJaW50CQkJcnVuOworCisJLyogTWVzc2FnZSBUcmFuc2ZlciBwdW1wICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXB1bXBfdHJhbnNmZXJzOworCisJLyogQ3VycmVudCBtZXNzYWdlIHRyYW5zZmVyIHN0YXRlIGluZm8gKi8KKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJKmN1cl9tc2c7CisJc3RydWN0IHNwaV90cmFuc2ZlcgkqY3VyX3RyYW5zZmVyOworCXN0cnVjdCBjaGlwX2RhdGEJKmN1cl9jaGlwOworCXN0cnVjdCBjaGlwX2RhdGEJKnByZXZfY2hpcDsKKwlzaXplX3QJCQlsZW47CisJdm9pZAkJCSp0eDsKKwl2b2lkCQkJKnR4X2VuZDsKKwl2b2lkCQkJKnJ4OworCXZvaWQJCQkqcnhfZW5kOworCWludAkJCWRtYV9tYXBwZWQ7CisJZG1hX2FkZHJfdAkJcnhfZG1hOworCWRtYV9hZGRyX3QJCXR4X2RtYTsKKwlzaXplX3QJCQlyeF9tYXBfbGVuOworCXNpemVfdAkJCXR4X21hcF9sZW47CisJdTgJCQluX2J5dGVzOwkvKiBjdXJyZW50IGlzIGEgMS8yIGJ5dGVzIG9wICovCisJdTgJCQltYXhfYml0c19wZXJfd29yZDsJLyogbWF4aW0gaXMgMTZiICovCisJdTMyCQkJZG1hX3dpZHRoOworCWludAkJCWNzX2NoYW5nZTsKKwlpbnQJCQkoKndyaXRlKShzdHJ1Y3QgZHdfc3BpICpkd3MpOworCWludAkJCSgqcmVhZCkoc3RydWN0IGR3X3NwaSAqZHdzKTsKKwlpcnFyZXR1cm5fdAkJKCp0cmFuc2Zlcl9oYW5kbGVyKShzdHJ1Y3QgZHdfc3BpICpkd3MpOworCXZvaWQJCQkoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKKworCS8qIERtYSBpbmZvICovCisJaW50CQkJZG1hX2luaXRlZDsKKwlzdHJ1Y3QgZG1hX2NoYW4JCSp0eGNoYW47CisJc3RydWN0IGRtYV9jaGFuCQkqcnhjaGFuOworCWludAkJCXR4ZG1hX2RvbmU7CisJaW50CQkJcnhkbWFfZG9uZTsKKwl1NjQJCQl0eF9wYXJhbTsKKwl1NjQJCQlyeF9wYXJhbTsKKwlzdHJ1Y3QgZGV2aWNlCQkqZG1hX2RldjsKKwlkbWFfYWRkcl90CQlkbWFfYWRkcjsKKworCS8qIEJ1cyBpbnRlcmZhY2UgaW5mbyAqLworCXZvaWQJCQkqcHJpdjsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCit9OworCisjZGVmaW5lIGR3X3JlYWRsKGR3LCBuYW1lKSBcCisJX19yYXdfcmVhZGwoJigoKHN0cnVjdCBkd19zcGlfcmVnICopZHctPnJlZ3MpLT5uYW1lKSkKKyNkZWZpbmUgZHdfd3JpdGVsKGR3LCBuYW1lLCB2YWwpIFwKKwlfX3Jhd193cml0ZWwoKHZhbCksICYoKChzdHJ1Y3QgZHdfc3BpX3JlZyAqKWR3LT5yZWdzKS0+bmFtZSkpCisjZGVmaW5lIGR3X3JlYWR3KGR3LCBuYW1lKSBcCisJX19yYXdfcmVhZHcoJigoKHN0cnVjdCBkd19zcGlfcmVnICopZHctPnJlZ3MpLT5uYW1lKSkKKyNkZWZpbmUgZHdfd3JpdGV3KGR3LCBuYW1lLCB2YWwpIFwKKwlfX3Jhd193cml0ZXcoKHZhbCksICYoKChzdHJ1Y3QgZHdfc3BpX3JlZyAqKWR3LT5yZWdzKS0+bmFtZSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGlfZW5hYmxlX2NoaXAoc3RydWN0IGR3X3NwaSAqZHdzLCBpbnQgZW5hYmxlKQoreworCWR3X3dyaXRlbChkd3MsIHNzaWVuciwgKGVuYWJsZSA/IDEgOiAwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGlfc2V0X2NsayhzdHJ1Y3QgZHdfc3BpICpkd3MsIHUxNiBkaXYpCit7CisJZHdfd3JpdGVsKGR3cywgYmF1ZHIsIGRpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGlfY2hpcF9zZWwoc3RydWN0IGR3X3NwaSAqZHdzLCB1MTYgY3MpCit7CisJaWYgKGNzID4gZHdzLT5udW1fY3MpCisJCXJldHVybjsKKwlkd193cml0ZWwoZHdzLCBzZXIsIDEgPDwgY3MpOworfQorCisvKiBEaXNhYmxlIElSUSBiaXRzICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpX21hc2tfaW50cihzdHJ1Y3QgZHdfc3BpICpkd3MsIHUzMiBtYXNrKQoreworCXUzMiBuZXdfbWFzazsKKworCW5ld19tYXNrID0gZHdfcmVhZGwoZHdzLCBpbXIpICYgfm1hc2s7CisJZHdfd3JpdGVsKGR3cywgaW1yLCBuZXdfbWFzayk7Cit9CisKKy8qIEVuYWJsZSBJUlEgYml0cyAqLworc3RhdGljIGlubGluZSB2b2lkIHNwaV91bWFza19pbnRyKHN0cnVjdCBkd19zcGkgKmR3cywgdTMyIG1hc2spCit7CisJdTMyIG5ld19tYXNrOworCisJbmV3X21hc2sgPSBkd19yZWFkbChkd3MsIGltcikgfCBtYXNrOworCWR3X3dyaXRlbChkd3MsIGltciwgbmV3X21hc2spOworfQorCisvKgorICogRWFjaCBTUEkgc2xhdmUgZGV2aWNlIHRvIHdvcmsgd2l0aCBkd19hcGkgY29udHJvbGxlciBzaG91bGQKKyAqIGhhcyBzdWNoIGEgc3RydWN0dXJlIGNsYWltaW5nIGl0cyB3b3JraW5nIG1vZGUgKFBJTy9ETUEgZXRjKSwKKyAqIHdoaWNoIGNhbiBiZSBzYXZlIGluIHRoZSAiY29udHJvbGxlcl9kYXRhIiBtZW1iZXIgb2YgdGhlCisgKiBzdHJ1Y3Qgc3BpX2RldmljZQorICovCitzdHJ1Y3QgZHdfc3BpX2NoaXAgeworCXU4IHBvbGxfbW9kZTsJLyogMCBmb3IgY29udG9sbGVyIHBvbGxpbmcgbW9kZSAqLworCXU4IHR5cGU7CS8qIFNQSS9TU1AvTWljcndpcmUgKi8KKwl1OCBlbmFibGVfZG1hOworCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Cit9OworCitleHRlcm4gaW50IGR3X3NwaV9hZGRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpOworZXh0ZXJuIHZvaWQgZHdfc3BpX3JlbW92ZV9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cyk7CitleHRlcm4gaW50IGR3X3NwaV9zdXNwZW5kX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKTsKK2V4dGVybiBpbnQgZHdfc3BpX3Jlc3VtZV9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cyk7CisjZW5kaWYgLyogRFdfU1BJX0hFQURFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggNjU3OTNlOS4uMjA3NDY2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtMTk1LDcgKzE5NSw3IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJXAogCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKIAkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKLQkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKKwkgIF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lID0gewkJCQlcCiAJCS5uYW1lIAkJPSAic3lzXyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSAwLAkJCQlcCiAJCS5lbnRlcl9ldmVudAk9ICZldmVudF9lbnRlcl9fIyNzbmFtZSwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggODc3YmEwMy4uYmQyN2ZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC00ODIsNiArNDgyLDcgQEAKIAlORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQ9MjEsCiAJTkVUX0lQVjRfQ09ORl9BUlBfTk9USUZZPTIyLAogCU5FVF9JUFY0X0NPTkZfQUNDRVBUX0xPQ0FMPTIzLAorCU5FVF9JUFY0X0NPTkZfU1JDX1ZNQVJLPTI0LAogCV9fTkVUX0lQVjRfQ09ORl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvc3lzZnMuaAppbmRleCA5ZDY4ZmVkLi5jZmE4MzA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCkBAIC05OSw4ICs5OSw5IEBACiB2b2lkIHN5c2ZzX3JlbW92ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKTsKIAogaW50IF9fbXVzdF9jaGVjayBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKLXZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cik7CisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKK3ZvaWQgc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpOwogCiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9saW5rKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29iamVjdCAqdGFyZ2V0LAogCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOwpAQCAtMTc1LDEzICsxNzYsMTMgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2Jpbl9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKKwkJCQkJY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIpCiB7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19yZW1vdmVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJCSBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cikKKwkJCQkJIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oCmluZGV4IDZiNTgzNjcuLmQ1MTJkOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oCkBAIC05NCw2ICs5NCw3IEBACiAgKiBoYXBwZW5zLCBoYW5kbGUgdGhhdCBhbmQgcmV0dXJuIC1FRkFVTFQuCiAgKi8KIGV4dGVybiBsb25nIHByb2JlX2tlcm5lbF9yZWFkKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gbG9uZyBfX3Byb2JlX2tlcm5lbF9yZWFkKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSk7CiAKIC8qCiAgKiBwcm9iZV9rZXJuZWxfd3JpdGUoKTogc2FmZWx5IGF0dGVtcHQgdG8gd3JpdGUgdG8gYSBsb2NhdGlvbgpAQCAtMTA0LDYgKzEwNSw3IEBACiAgKiBTYWZlbHkgd3JpdGUgdG8gYWRkcmVzcyBAZHN0IGZyb20gdGhlIGJ1ZmZlciBhdCBAc3JjLiAgSWYgYSBrZXJuZWwgZmF1bHQKICAqIGhhcHBlbnMsIGhhbmRsZSB0aGF0IGFuZCByZXR1cm4gLUVGQVVMVC4KICAqLwotZXh0ZXJuIGxvbmcgcHJvYmVfa2VybmVsX3dyaXRlKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gbG9uZyBub3RyYWNlIHByb2JlX2tlcm5lbF93cml0ZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpOworZXh0ZXJuIGxvbmcgbm90cmFjZSBfX3Byb2JlX2tlcm5lbF93cml0ZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpOwogCiAjZW5kaWYJCS8qIF9fTElOVVhfVUFDQ0VTU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggYWNmNmU0NS4uMTgxOTM5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKICNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkxODgJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCiAjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCTI1NAkvKiBsb2FkcyBvZiBkZXZpY2VzIDopICovCkBAIC05NCw3ICs5NSw3IEBACiAJdW5zaWduZWQgY2hhcgkJKmJ1bGtfb3V0X2J1ZmZlcjsKIAlpbnQJCQlidWxrX291dF9zaXplOwogCXN0cnVjdCB1cmIJCSp3cml0ZV91cmI7Ci0Jc3RydWN0IGtmaWZvCQkqd3JpdGVfZmlmbzsKKwlzdHJ1Y3Qga2ZpZm8JCXdyaXRlX2ZpZm87CiAJaW50CQkJd3JpdGVfdXJiX2J1c3k7CiAJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dC5oIGIvaW5jbHVkZS9saW51eC92dC5oCmluZGV4IDNmYjk5NDQuLmQ1ZGQwYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTg0LDYgKzg0LDggQEAKIAogI2RlZmluZSBWVF9TRVRBQ1RJVkFURQkweDU2MEYJLyogQWN0aXZhdGUgYW5kIHNldCB0aGUgbW9kZSBvZiBhIGNvbnNvbGUgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2lmZGVmIENPTkZJR19WVF9DT05TT0xFCiAKIGV4dGVybiBpbnQgdnRfa21zZ19yZWRpcmVjdChpbnQgbmV3KTsKQEAgLTk3LDYgKzk5LDggQEAKIAogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNkZWZpbmUgdnRfZ2V0X2ttc2dfcmVkaXJlY3QoKSB2dF9rbXNnX3JlZGlyZWN0KC0xKQogCiAjZW5kaWYgLyogX0xJTlVYX1ZUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmggYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCmluZGV4IGMxOGMwMDguLjc2ZTg5MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApAQCAtNzAsNiArNzAsNyBAQAogc3RydWN0IGJkaV93cml0ZWJhY2s7CiBpbnQgaW5vZGVfd2FpdCh2b2lkICopOwogdm9pZCB3cml0ZWJhY2tfaW5vZGVzX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2ludCB3cml0ZWJhY2tfaW5vZGVzX3NiX2lmX2lkbGUoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogdm9pZCBzeW5jX2lub2Rlc19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiB2b2lkIHdyaXRlYmFja19pbm9kZXNfd2JjKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGxvbmcgd2JfZG9fd3JpdGViYWNrKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgaW50IGZvcmNlX3dhaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggODUxMDhjZi4uZDlhMGU3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0zMjYsNiArMzI2LDIyIEBACiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludCBza19tY19sb29wKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoIXNrKQorCQlyZXR1cm4gMTsKKwlzd2l0Y2ggKHNrLT5za19mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiBpbmV0X3NrKHNrKS0+bWNfbG9vcDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gaW5ldDZfc2soc2spLT5tY19sb29wOworI2VuZGlmCisJfQorCV9fV0FSTigpOworCXJldHVybiAxOworfQorCiBleHRlcm4gaW50CWlwX2NhbGxfcmFfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCAyYWZmNDkwLi4wYmYzNjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTU0Nyw3ICs1NDcsNiBAQAogICoJdW5zcGVjaWZpZWQgZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgZmxhZ3MKICAqCUBJRUVFODAyMTFfSFdfU0lHTkFMXyoKICAqIEBub2lzZTogbm9pc2Ugd2hlbiByZWNlaXZpbmcgdGhpcyBmcmFtZSwgaW4gZEJtLgotICogQHF1YWw6IG92ZXJhbGwgc2lnbmFsIHF1YWxpdHkgaW5kaWNhdGlvbiwgaW4gcGVyY2VudCAoMC0xMDApLgogICogQGFudGVubmE6IGFudGVubmEgdXNlZAogICogQHJhdGVfaWR4OiBpbmRleCBvZiBkYXRhIHJhdGUgaW50byBiYW5kJ3Mgc3VwcG9ydGVkIHJhdGVzIG9yIE1DUyBpbmRleCBpZgogICoJSFQgcmF0ZXMgYXJlIHVzZSAoUlhfRkxBR19IVCkKQEAgLTU1OSw3ICs1NTgsNiBAQAogCWludCBmcmVxOwogCWludCBzaWduYWw7CiAJaW50IG5vaXNlOwotCWludCBfX2RlcHJlY2F0ZWQgcXVhbDsKIAlpbnQgYW50ZW5uYTsKIAlpbnQgcmF0ZV9pZHg7CiAJaW50IGZsYWc7CkBAIC0xNzM3LDYgKzE3MzUsMTIgQEAKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAorLyoKKyAqIFRoZSBUWCBoZWFkcm9vbSByZXNlcnZlZCBieSBtYWM4MDIxMSBmb3IgaXRzIG93biB0eF9zdGF0dXMgZnVuY3Rpb25zLgorICogVGhpcyBpcyBlbm91Z2ggZm9yIHRoZSByYWRpb3RhcCBoZWFkZXIuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1RYX1NUQVRVU19IRUFEUk9PTQkxMworCiAvKioKICAqIGllZWU4MDIxMV90eF9zdGF0dXMgLSB0cmFuc21pdCBzdGF0dXMgY2FsbGJhY2sKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDczOTRlM2IuLmZmOTJiNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8c2NzaS9pc2NzaV9wcm90by5oPgogI2luY2x1ZGUgPHNjc2kvaXNjc2lfaWYuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CkBAIC0yMzEsNyArMjMyLDcgQEAKIH07CiAKIHN0cnVjdCBpc2NzaV9wb29sIHsKLQlzdHJ1Y3Qga2ZpZm8JCSpxdWV1ZTsJCS8qIEZJRk8gUXVldWUgKi8KKwlzdHJ1Y3Qga2ZpZm8JCXF1ZXVlOwkJLyogRklGTyBRdWV1ZSAqLwogCXZvaWQJCQkqKnBvb2w7CQkvKiBQb29sIG9mIGVsZW1lbnRzICovCiAJaW50CQkJbWF4OwkJLyogTWF4IG51bWJlciBvZiBlbGVtZW50cyAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaAppbmRleCA5ZTMxODJlLi43NDFhZTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCkBAIC04MCw3ICs4MCw3IEBACiAJaW50CQkJZGF0YV9vZmZzZXQ7CiAJc3RydWN0IGlzY3NpX3IydF9pbmZvCSpyMnQ7CQkvKiBpbiBwcm9ncmVzcyBzb2xpY3QgUjJUICovCiAJc3RydWN0IGlzY3NpX3Bvb2wJcjJ0cG9vbDsKLQlzdHJ1Y3Qga2ZpZm8JCSpyMnRxdWV1ZTsKKwlzdHJ1Y3Qga2ZpZm8JCXIydHF1ZXVlOwogCXZvaWQJCQkqZGRfZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJzcnAuaCBiL2luY2x1ZGUvc2NzaS9saWJzcnAuaAppbmRleCBiYTYxNWU0Li5mNDEwNWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGlic3JwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYnNycC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0xJQlNSUF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3NycC5oPgpAQCAtMjEsNyArMjIsNyBAQAogc3RydWN0IHNycF9xdWV1ZSB7CiAJdm9pZCAqcG9vbDsKIAl2b2lkICppdGVtczsKLQlzdHJ1Y3Qga2ZpZm8gKnF1ZXVlOworCXN0cnVjdCBrZmlmbyBxdWV1ZTsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oIGIvaW5jbHVkZS9zY3NpL29zZF9pbml0aWF0b3IuaAppbmRleCAzOWQ2ZDEwLi5hOGYzNzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oCisrKyBiL2luY2x1ZGUvc2NzaS9vc2RfaW5pdGlhdG9yLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogCXN0cnVjdCBfb3NkX2lvX2luZm8gewogCQlzdHJ1Y3QgYmlvICpiaW87CiAJCXU2NCB0b3RhbF9ieXRlczsKKwkJdTY0IHJlc2lkdWFsOwogCQlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCQlzdHJ1Y3QgX29zZF9yZXFfZGF0YV9zZWdtZW50ICpsYXN0X3NlZzsKIAkJdTggKnBhZF9idWZmOwpAQCAtMTUwLDEyICsxNTEsMTQgQEAKIAlnZnBfdCBhbGxvY19mbGFnczsKIAl1bnNpZ25lZCB0aW1lb3V0OwogCXVuc2lnbmVkIHJldHJpZXM7CisJdW5zaWduZWQgc2Vuc2VfbGVuOwogCXU4IHNlbnNlW09TRF9NQVhfU0VOU0VfTEVOXTsKIAllbnVtIG9zZF9hdHRyaWJ1dGVzX21vZGUgYXR0cmlidXRlc19tb2RlOwogCiAJb3NkX3JlcV9kb25lX2ZuICphc3luY19kb25lOwogCXZvaWQgKmFzeW5jX3ByaXZhdGU7CiAJaW50IGFzeW5jX2Vycm9yOworCWludCByZXFfZXJyb3JzOwogfTsKIAogc3RhdGljIGlubGluZSBib29sIG9zZF9yZXFfaXNfdmVyMShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQpAQCAtMjk3LDggKzMwMCw2IEBACiB9OwogCiBzdHJ1Y3Qgb3NkX3NlbnNlX2luZm8gewotCXU2NCBvdXRfcmVzaWQ7CQkvKiBaZXJvIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIG91dCByZXNpZHVhbCAqLwotCXU2NCBpbl9yZXNpZDsJCS8qIFplcm8gb24gc3VjY2VzcyBvdGhlcndpc2UgaW4gcmVzaWR1YWwgKi8KIAllbnVtIG9zZF9lcnJfcHJpb3JpdHkgb3NkX2Vycl9wcmk7CiAKIAlpbnQga2V5OwkJLyogb25lIG9mIGVudW0gc2NzaV9zZW5zZV9rZXlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCA3MzUyMzE1MS4uYzZmZTAzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC00MTQsNyArNDE0LDggQEAKIAlCVUlMRF9CVUdfT04obGVuID4gTUFYX0ZJTFRFUl9TVFJfVkFMKTsJCQkJXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSAiWyIgI2xlbiAiXSIsICNpdGVtLAlcCiAJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJCSBzaXplb2YoZmllbGQuaXRlbSksIDAsIEZJTFRFUl9PVEhFUik7CVwKKwkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLAkJCVwKKwkJCQkgaXNfc2lnbmVkX3R5cGUodHlwZSksIEZJTFRFUl9PVEhFUik7CVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiByZXQ7CiAKQEAgLTQyMiw4ICs0MjMsOCBAQAogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkgICAgICAgXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAiX19kYXRhX2xvYyAiICN0eXBlICJbXSIsICNpdGVtLCAgXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBfX2RhdGFfbG9jXyMjaXRlbSksICAgXAotCQkJCSBzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLCAwLAkgICAgICAgXAotCQkJCSBGSUxURVJfT1RIRVIpOworCQkJCSBzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLAkgICAgICAgXAorCQkJCSBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTsKIAogI3VuZGVmIF9fc3RyaW5nCiAjZGVmaW5lIF9fc3RyaW5nKGl0ZW0sIHNyYykgX19keW5hbWljX2FycmF5KGNoYXIsIGl0ZW0sIC0xKQpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGEyM2RhOWYuLmQ5NWNhN2MgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTExNSwxMCArMTE1LDEzIEBACiBjb25maWcgSEFWRV9LRVJORUxfTFpNQQogCWJvb2wKIAorY29uZmlnIEhBVkVfS0VSTkVMX0xaTworCWJvb2wKKwogY2hvaWNlCiAJcHJvbXB0ICJLZXJuZWwgY29tcHJlc3Npb24gbW9kZSIKIAlkZWZhdWx0IEtFUk5FTF9HWklQCi0JZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9HWklQIHx8IEhBVkVfS0VSTkVMX0JaSVAyIHx8IEhBVkVfS0VSTkVMX0xaTUEKKwlkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0daSVAgfHwgSEFWRV9LRVJORUxfQlpJUDIgfHwgSEFWRV9LRVJORUxfTFpNQSB8fCBIQVZFX0tFUk5FTF9MWk8KIAloZWxwCiAJICBUaGUgbGludXgga2VybmVsIGlzIGEga2luZCBvZiBzZWxmLWV4dHJhY3RpbmcgZXhlY3V0YWJsZS4KIAkgIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLCB3aGljaCBkaWZmZXIKQEAgLTE0MSw5ICsxNDQsOCBAQAogCWJvb2wgIkd6aXAiCiAJZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9HWklQCiAJaGVscAotCSAgVGhlIG9sZCBhbmQgdHJpZWQgZ3ppcCBjb21wcmVzc2lvbi4gSXRzIGNvbXByZXNzaW9uIHJhdGlvIGlzCi0JICB0aGUgcG9vcmVzdCBhbW9uZyB0aGUgMyBjaG9pY2VzOyBob3dldmVyIGl0cyBzcGVlZCAoYm90aAotCSAgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24pIGlzIHRoZSBmYXN0ZXN0LgorCSAgVGhlIG9sZCBhbmQgdHJpZWQgZ3ppcCBjb21wcmVzc2lvbi4gSXQgcHJvdmlkZXMgYSBnb29kIGJhbGFuY2UKKwkgIGJldHdlZW4gY29tcHJlc3Npb24gcmF0aW8gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQuCiAKIGNvbmZpZyBLRVJORUxfQlpJUDIKIAlib29sICJCemlwMiIKQEAgLTE2NCw2ICsxNjYsMTQgQEAKIAkgIHR3by4gQ29tcHJlc3Npb24gaXMgc2xvd2VzdC4JVGhlIGtlcm5lbCBzaXplIGlzIGFib3V0IDMzJQogCSAgc21hbGxlciB3aXRoIExaTUEgaW4gY29tcGFyaXNvbiB0byBnemlwLgogCitjb25maWcgS0VSTkVMX0xaTworCWJvb2wgIkxaTyIKKwlkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaTworCWhlbHAKKwkgIEl0cyBjb21wcmVzc2lvbiByYXRpbyBpcyB0aGUgcG9vcmVzdCBhbW9uZyB0aGUgNC4gVGhlIGtlcm5lbAorCSAgc2l6ZSBpcyBhYm91dCBhYm91dCAxMCUgYmlnZ2VyIHRoYW4gZ3ppcDsgaG93ZXZlciBpdHMgc3BlZWQKKwkgIChib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uKSBpcyB0aGUgZmFzdGVzdC4KKwogZW5kY2hvaWNlCiAKIGNvbmZpZyBTV0FQCmRpZmYgLS1naXQgYS9pbml0L2luaXRyYW1mcy5jIGIvaW5pdC9pbml0cmFtZnMuYwppbmRleCA0YzAwZWRjLi5iMzdkMzRiIDEwMDY0NAotLS0gYS9pbml0L2luaXRyYW1mcy5jCisrKyBiL2luaXQvaW5pdHJhbWZzLmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiBzdGF0aWMgY2hhciAqIF9faW5pdCB1bnBhY2tfdG9fcm9vdGZzKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQogewotCWludCB3cml0dGVuOworCWludCB3cml0dGVuLCByZXM7CiAJZGVjb21wcmVzc19mbiBkZWNvbXByZXNzOwogCWNvbnN0IGNoYXIgKmNvbXByZXNzX25hbWU7CiAJc3RhdGljIF9faW5pdGRhdGEgY2hhciBtc2dfYnVmWzY0XTsKQEAgLTQ0NSwxMCArNDQ1LDEyIEBACiAJCX0KIAkJdGhpc19oZWFkZXIgPSAwOwogCQlkZWNvbXByZXNzID0gZGVjb21wcmVzc19tZXRob2QoYnVmLCBsZW4sICZjb21wcmVzc19uYW1lKTsKLQkJaWYgKGRlY29tcHJlc3MpCi0JCQlkZWNvbXByZXNzKGJ1ZiwgbGVuLCBOVUxMLCBmbHVzaF9idWZmZXIsIE5VTEwsCisJCWlmIChkZWNvbXByZXNzKSB7CisJCQlyZXMgPSBkZWNvbXByZXNzKGJ1ZiwgbGVuLCBOVUxMLCBmbHVzaF9idWZmZXIsIE5VTEwsCiAJCQkJICAgJm15X2lucHRyLCBlcnJvcik7Ci0JCWVsc2UgaWYgKGNvbXByZXNzX25hbWUpIHsKKwkJCWlmIChyZXMpCisJCQkJZXJyb3IoImRlY29tcHJlc3NvciBmYWlsZWQiKTsKKwkJfSBlbHNlIGlmIChjb21wcmVzc19uYW1lKSB7CiAJCQlpZiAoIW1lc3NhZ2UpIHsKIAkJCQlzbnByaW50Zihtc2dfYnVmLCBzaXplb2YgbXNnX2J1ZiwKIAkJCQkJICJjb21wcmVzc2lvbiBtZXRob2QgJXMgbm90IGNvbmZpZ3VyZWQiLApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBjM2RiNGE5Li5kYWM0NGE5IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMzY5LDEyICszNjksNiBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAKLQkvKgotCSAqIFNldCB1cCB0aGUgY3VycmVudCBDUFUgYXMgcG9zc2libGUgdG8gbWlncmF0ZSB0by4KLQkgKiBUaGUgb3RoZXIgb25lcyB3aWxsIGJlIGRvbmUgYnkgY3B1X3VwL2NwdV9kb3duKCkKLQkgKi8KLQlzZXRfY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCksIHRydWUpOwotCiAJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdXNlcnNwYWNlIC0tUlIgKi8KIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKIAkJaWYgKG51bV9vbmxpbmVfY3B1cygpID49IHNldHVwX21heF9jcHVzKQpAQCAtNDg2LDYgKzQ4MCw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkvKiBNYXJrIHRoZSBib290IGNwdSAicHJlc2VudCIsICJvbmxpbmUiIGV0YyBmb3IgU01QIGFuZCBVUCBjYXNlICovCiAJc2V0X2NwdV9vbmxpbmUoY3B1LCB0cnVlKTsKKwlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwogCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IDI0NTFkYzYuLjRiMDViZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCW93bmVyLT5yb290ID0gTlVMTDsKIAl9CiAKLQlmb3IgKGkgPSBqID0gMDsgaSA8IHNpemU7IGkrKywgaisrKSB7CisJZm9yIChpID0gaiA9IDA7IGogPD0gc2l6ZTsgaSsrLCBqKyspIHsKIAkJc3RydWN0IGF1ZGl0X3RyZWUgKnM7CiAJCWlmICgmY2h1bmstPm93bmVyc1tqXSA9PSBwKSB7CiAJCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlpZiAoIXMpIC8qIHJlc3VsdCBvZiBlYXJsaWVyIGZhbGxiYWNrICovCiAJCQljb250aW51ZTsKIAkJZ2V0X3RyZWUocyk7Ci0JCWxpc3RfcmVwbGFjZV9pbml0KCZjaHVuay0+b3duZXJzW2ldLmxpc3QsICZuZXctPm93bmVyc1tqXS5saXN0KTsKKwkJbGlzdF9yZXBsYWNlX2luaXQoJmNodW5rLT5vd25lcnNbal0ubGlzdCwgJm5ldy0+b3duZXJzW2ldLmxpc3QpOwogCX0KIAogCWxpc3RfcmVwbGFjZV9yY3UoJmNodW5rLT5oYXNoLCAmbmV3LT5oYXNoKTsKQEAgLTM3MywxNSArMzczLDE3IEBACiAJZm9yIChuID0gMDsgbiA8IG9sZC0+Y291bnQ7IG4rKykgewogCQlpZiAob2xkLT5vd25lcnNbbl0ub3duZXIgPT0gdHJlZSkgewogCQkJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCQlwdXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CisJCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAogCWNodW5rID0gYWxsb2NfY2h1bmsob2xkLT5jb3VudCArIDEpOwotCWlmICghY2h1bmspCisJaWYgKCFjaHVuaykgeworCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAlpZiAoaW5vdGlmeV9jbG9uZV93YXRjaCgmb2xkLT53YXRjaCwgJmNodW5rLT53YXRjaCkgPCAwKSB7CkBAIC00MjUsNyArNDI3LDggQEAKIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAlpbm90aWZ5X2V2aWN0X3dhdGNoKCZvbGQtPndhdGNoKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJcHV0X2lub3RpZnlfd2F0Y2goJm9sZC0+d2F0Y2gpOyAvKiBwYWlyIHRvIGlub3RpZnlfZmluZF93YXRjaCAqLworCXB1dF9pbm90aWZ5X3dhdGNoKCZvbGQtPndhdGNoKTsgLyogYW5kIGtpbGwgaXQgKi8KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggMjY3ZTQ4NC4uZmMwZjkyOCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0yNTAsNyArMjUwLDYgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDRcMDAyXDAwNlwwMDYiWyh4KSZPX0FDQ01PREVdKQogc3RhdGljIGlubGluZSBpbnQgb3Blbl9hcmcoaW50IGZsYWdzLCBpbnQgbWFzaykKIHsKIAlpbnQgbiA9IEFDQ19NT0RFKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCAwMjQ5ZjRiLi4xZmJjYzc0IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yNDY4LDcgKzI0NjgsNiBAQAogCQkJLyogbWFrZSBzdXJlIGwgZG9lc24ndCB2YW5pc2ggb3V0IGZyb20gdW5kZXIgdXMgKi8KIAkJCWRvd25fd3JpdGUoJmwtPm11dGV4KTsKIAkJCW11dGV4X3VubG9jaygmY2dycC0+cGlkbGlzdF9tdXRleCk7Ci0JCQlsLT51c2VfY291bnQrKzsKIAkJCXJldHVybiBsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDI5MWFjNTguLjFjOGRkZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTIwOSw2ICsyMDksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNwdV9ob3RwbHVnX2JlZ2luKCk7CisJc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7CiAJZXJyID0gX19yYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfRE9XTl9QUkVQQVJFIHwgbW9kLAogCQkJCQloY3B1LCAtMSwgJm5yX2NhbGxzKTsKIAlpZiAoZXJyID09IE5PVElGWV9CQUQpIHsKQEAgLTI4MCwxOCArMjgxLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgYWxsIGNwdXMgZGlkIHRoZSByZXNjaGVkdWxlIGFuZCBhcmUgbm90Ci0JICogdXNpbmcgc3RhbGUgdmVyc2lvbiBvZiB0aGUgY3B1X2FjdGl2ZV9tYXNrLgotCSAqIFRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBiZWN1YXNlIHN0b3BfbWFjaGluZSgpCi0JICogdGhhdCB3ZSBydW4gZG93biB0aGUgbGluZSBhbHJlYWR5IHByb3ZpZGVzIHRoZSByZXF1aXJlZAotCSAqIHN5bmNocm9uaXphdGlvbi4gQnV0IGl0J3MgcmVhbGx5IGEgc2lkZSBlZmZlY3QgYW5kIHdlIGRvIG5vdAotCSAqIHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBpbm5hcmRzIG9mIHRoZSBzdG9wX21hY2hpbmUgaGVyZS4KLQkgKi8KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCiAJZXJyID0gX2NwdV9kb3duKGNwdSwgMCk7CiAKIG91dDoKQEAgLTM4MiwxOSArMzcxLDEyIEBACiAJCXJldHVybiBlcnJvcjsKIAljcHVfbWFwc191cGRhdGVfYmVnaW4oKTsKIAlmaXJzdF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7Ci0JLyogV2UgdGFrZSBkb3duIGFsbCBvZiB0aGUgbm9uLWJvb3QgQ1BVcyBpbiBvbmUgc2hvdCB0byBhdm9pZCByYWNlcworCS8qCisJICogV2UgdGFrZSBkb3duIGFsbCBvZiB0aGUgbm9uLWJvb3QgQ1BVcyBpbiBvbmUgc2hvdCB0byBhdm9pZCByYWNlcwogCSAqIHdpdGggdGhlIHVzZXJzcGFjZSB0cnlpbmcgdG8gdXNlIHRoZSBDUFUgaG90cGx1ZyBhdCB0aGUgc2FtZSB0aW1lCiAJICovCiAJY3B1bWFza19jbGVhcihmcm96ZW5fY3B1cyk7CiAKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpZiAoY3B1ID09IGZpcnN0X2NwdSkKLQkJCWNvbnRpbnVlOwotCQlzZXRfY3B1X2FjdGl2ZShjcHUsIGZhbHNlKTsKLQl9Ci0KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCiAJcHJpbnRrKCJEaXNhYmxpbmcgbm9uLWJvb3QgQ1BVcyAuLi5cbiIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWlmIChjcHUgPT0gZmlyc3RfY3B1KQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNTk2MmQ3Yy4uNTQ2Nzc0YSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC02OCwxMCArNjgsMTAgQEAKIAkJZGV0YWNoX3BpZChwLCBQSURUWVBFX1NJRCk7CiAKIAkJbGlzdF9kZWxfcmN1KCZwLT50YXNrcyk7CisJCWxpc3RfZGVsX2luaXQoJnAtPnNpYmxpbmcpOwogCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKS0tOwogCX0KIAlsaXN0X2RlbF9yY3UoJnAtPnRocmVhZF9ncm91cCk7Ci0JbGlzdF9kZWxfaW5pdCgmcC0+c2libGluZyk7CiB9CiAKIC8qCkBAIC03MzYsMTIgKzczNiw5IEBACiAvKgogKiBBbnkgdGhhdCBuZWVkIHRvIGJlIHJlbGVhc2VfdGFzaydkIGFyZSBwdXQgb24gdGhlIEBkZWFkIGxpc3QuCiAgKi8KLXN0YXRpYyB2b2lkIHJlcGFyZW50X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlciwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAorc3RhdGljIHZvaWQgcmVwYXJlbnRfbGVhZGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqZGVhZCkKIHsKLQlpZiAocC0+cGRlYXRoX3NpZ25hbCkKLQkJZ3JvdXBfc2VuZF9zaWdfaW5mbyhwLT5wZGVhdGhfc2lnbmFsLCBTRU5EX1NJR19OT0lORk8sIHApOwotCiAJbGlzdF9tb3ZlX3RhaWwoJnAtPnNpYmxpbmcsICZwLT5yZWFsX3BhcmVudC0+Y2hpbGRyZW4pOwogCiAJaWYgKHRhc2tfZGV0YWNoZWQocCkpCkBAIC03ODAsMTIgKzc3NywxOCBAQAogCXJlYXBlciA9IGZpbmRfbmV3X3JlYXBlcihmYXRoZXIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZmYXRoZXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7Ci0JCXAtPnJlYWxfcGFyZW50ID0gcmVhcGVyOwotCQlpZiAocC0+cGFyZW50ID09IGZhdGhlcikgewotCQkJQlVHX09OKHRhc2tfcHRyYWNlKHApKTsKLQkJCXAtPnBhcmVudCA9IHAtPnJlYWxfcGFyZW50OwotCQl9Ci0JCXJlcGFyZW50X3RocmVhZChmYXRoZXIsIHAsICZkZWFkX2NoaWxkcmVuKTsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gcDsKKwkJZG8geworCQkJdC0+cmVhbF9wYXJlbnQgPSByZWFwZXI7CisJCQlpZiAodC0+cGFyZW50ID09IGZhdGhlcikgeworCQkJCUJVR19PTih0YXNrX3B0cmFjZSh0KSk7CisJCQkJdC0+cGFyZW50ID0gdC0+cmVhbF9wYXJlbnQ7CisJCQl9CisJCQlpZiAodC0+cGRlYXRoX3NpZ25hbCkKKwkJCQlncm91cF9zZW5kX3NpZ19pbmZvKHQtPnBkZWF0aF9zaWduYWwsCisJCQkJCQkgICAgU0VORF9TSUdfTk9JTkZPLCB0KTsKKwkJfSB3aGlsZV9lYWNoX3RocmVhZChwLCB0KTsKKwkJcmVwYXJlbnRfbGVhZGVyKGZhdGhlciwgcCwgJmRlYWRfY2hpbGRyZW4pOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIApAQCAtMTU1MSwxNCArMTU1NCw5IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdHNrLT5jaGlsZHJlbiwgc2libGluZykgewotCQkvKgotCQkgKiBEbyBub3QgY29uc2lkZXIgZGV0YWNoZWQgdGhyZWFkcy4KLQkJICovCi0JCWlmICghdGFza19kZXRhY2hlZChwKSkgewotCQkJaW50IHJldCA9IHdhaXRfY29uc2lkZXJfdGFzayh3bywgMCwgcCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaW50IHJldCA9IHdhaXRfY29uc2lkZXJfdGFzayh3bywgMCwgcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMjAyYTBiYS4uNWIyOTU5YiAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xMjkxLDcgKzEyOTEsNiBAQAogCX0KIAogCWlmIChsaWtlbHkocC0+cGlkKSkgewotCQlsaXN0X2FkZF90YWlsKCZwLT5zaWJsaW5nLCAmcC0+cmVhbF9wYXJlbnQtPmNoaWxkcmVuKTsKIAkJdHJhY2Vob29rX2ZpbmlzaF9jbG9uZShwLCBjbG9uZV9mbGFncywgdHJhY2UpOwogCiAJCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKSB7CkBAIC0xMzAzLDYgKzEzMDIsNyBAQAogCQkJcC0+c2lnbmFsLT50dHkgPSB0dHlfa3JlZl9nZXQoY3VycmVudC0+c2lnbmFsLT50dHkpOwogCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIHRhc2tfcGdycChjdXJyZW50KSk7CiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfU0lELCB0YXNrX3Nlc3Npb24oY3VycmVudCkpOworCQkJbGlzdF9hZGRfdGFpbCgmcC0+c2libGluZywgJnAtPnJlYWxfcGFyZW50LT5jaGlsZHJlbik7CiAJCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwogCQkJX19nZXRfY3B1X3Zhcihwcm9jZXNzX2NvdW50cykrKzsKIAkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggZGJjYmY2YS4uNTBkYmQ1OSAxMDA2NDQKLS0tIGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CkBAIC0zODgsNyArMzg5LDggQEAKIAlpZiAoIWNwdV9ldmVudHMpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCWdldF9vbmxpbmVfY3B1cygpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXBldmVudCA9IHBlcl9jcHVfcHRyKGNwdV9ldmVudHMsIGNwdSk7CiAJCWJwID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoYXR0ciwgY3B1LCAtMSwgdHJpZ2dlcmVkKTsKIApAQCAtMzk5LDE4ICs0MDEsMjAgQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KKwlwdXRfb25saW5lX2NwdXMoKTsKIAogCXJldHVybiBjcHVfZXZlbnRzOwogCiBmYWlsOgotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlwZXZlbnQgPSBwZXJfY3B1X3B0cihjcHVfZXZlbnRzLCBjcHUpOwogCQlpZiAoSVNfRVJSKCpwZXZlbnQpKQogCQkJYnJlYWs7CiAJCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCgqcGV2ZW50KTsKIAl9CisJcHV0X29ubGluZV9jcHVzKCk7CisKIAlmcmVlX3BlcmNwdShjcHVfZXZlbnRzKTsKLQkvKiByZXR1cm4gdGhlIGVycm9yIGlmIGFueSAqLwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2tmaWZvLmMgYi9rZXJuZWwva2ZpZm8uYwppbmRleCAzNzY1ZmYzLi5lOTJkNTE5IDEwMDY0NAotLS0gYS9rZXJuZWwva2ZpZm8uYworKysgYi9rZXJuZWwva2ZpZm8uYwpAQCAtMSw2ICsxLDcgQEAKIC8qCi0gKiBBIHNpbXBsZSBrZXJuZWwgRklGTyBpbXBsZW1lbnRhdGlvbi4KKyAqIEEgZ2VuZXJpYyBrZXJuZWwgRklGTyBpbXBsZW1lbnRhdGlvbi4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PgogICogQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDUwICsyNiw0OCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworc3RhdGljIHZvaWQgX2tmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCXVuc2lnbmVkIGludCBzaXplKQoreworCWZpZm8tPmJ1ZmZlciA9IGJ1ZmZlcjsKKwlmaWZvLT5zaXplID0gc2l6ZTsKKworCWtmaWZvX3Jlc2V0KGZpZm8pOworfQogCiAvKioKLSAqIGtmaWZvX2luaXQgLSBhbGxvY2F0ZXMgYSBuZXcgRklGTyB1c2luZyBhIHByZWFsbG9jYXRlZCBidWZmZXIKKyAqIGtmaWZvX2luaXQgLSBpbml0aWFsaXplIGEgRklGTyB1c2luZyBhIHByZWFsbG9jYXRlZCBidWZmZXIKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBhc3NpZ24gdGhlIGJ1ZmZlcgogICogQGJ1ZmZlcjogdGhlIHByZWFsbG9jYXRlZCBidWZmZXIgdG8gYmUgdXNlZC4KICAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLCB0aGlzIGhhdmUgdG8gYmUgYSBwb3dlciBvZiAyLgotICogQGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8ga21hbGxvYygpCi0gKiBAbG9jazogdGhlIGxvY2sgdG8gYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBmaWZvIGJ1ZmZlcgogICoKLSAqIERvIE5PVCBwYXNzIHRoZSBrZmlmbyB0byBrZmlmb19mcmVlKCkgYWZ0ZXIgdXNlISBTaW1wbHkgZnJlZSB0aGUKLSAqICZzdHJ1Y3Qga2ZpZm8gd2l0aCBrZnJlZSgpLgogICovCi1zdHJ1Y3Qga2ZpZm8gKmtmaWZvX2luaXQodW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCSBnZnBfdCBnZnBfbWFzaywgc3BpbmxvY2tfdCAqbG9jaykKK3ZvaWQga2ZpZm9faW5pdChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCiB7Ci0Jc3RydWN0IGtmaWZvICpmaWZvOwotCiAJLyogc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwogCUJVR19PTighaXNfcG93ZXJfb2ZfMihzaXplKSk7CiAKLQlmaWZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtmaWZvKSwgZ2ZwX21hc2spOwotCWlmICghZmlmbykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlmaWZvLT5idWZmZXIgPSBidWZmZXI7Ci0JZmlmby0+c2l6ZSA9IHNpemU7Ci0JZmlmby0+aW4gPSBmaWZvLT5vdXQgPSAwOwotCWZpZm8tPmxvY2sgPSBsb2NrOwotCi0JcmV0dXJuIGZpZm87CisJX2tmaWZvX2luaXQoZmlmbywgYnVmZmVyLCBzaXplKTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZpZm9faW5pdCk7CiAKIC8qKgotICoga2ZpZm9fYWxsb2MgLSBhbGxvY2F0ZXMgYSBuZXcgRklGTyBhbmQgaXRzIGludGVybmFsIGJ1ZmZlcgotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgdG8gYmUgYWxsb2NhdGVkLgorICoga2ZpZm9fYWxsb2MgLSBhbGxvY2F0ZXMgYSBuZXcgRklGTyBpbnRlcm5hbCBidWZmZXIKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBhc3NpZ24gdGhlbiBuZXcgYnVmZmVyCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBiZSBhbGxvY2F0ZWQsIHRoaXMgaGF2ZSB0byBiZSBhIHBvd2VyIG9mIDIuCiAgKiBAZ2ZwX21hc2s6IGdldF9mcmVlX3BhZ2VzIG1hc2ssIHBhc3NlZCB0byBrbWFsbG9jKCkKLSAqIEBsb2NrOiB0aGUgbG9jayB0byBiZSB1c2VkIHRvIHByb3RlY3QgdGhlIGZpZm8gYnVmZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYSBuZXcgZmlmbyBpbnRlcm5hbCBidWZmZXIKICAqCiAgKiBUaGUgc2l6ZSB3aWxsIGJlIHJvdW5kZWQtdXAgdG8gYSBwb3dlciBvZiAyLgorICogVGhlIGJ1ZmZlciB3aWxsIGJlIHJlbGVhc2Ugd2l0aCBrZmlmb19mcmVlKCkuCisgKiBSZXR1cm4gMCBpZiBubyBlcnJvciwgb3RoZXJ3aXNlIHRoZSBhbiBlcnJvciBjb2RlCiAgKi8KLXN0cnVjdCBrZmlmbyAqa2ZpZm9fYWxsb2ModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLCBzcGlubG9ja190ICpsb2NrKQoraW50IGtmaWZvX2FsbG9jKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQlzdHJ1Y3Qga2ZpZm8gKnJldDsKIAogCS8qCiAJICogcm91bmQgdXAgdG8gdGhlIG5leHQgcG93ZXIgb2YgMiwgc2luY2Ugb3VyICdsZXQgdGhlIGluZGljZXMKQEAgLTgwLDQ5ICs3OSw0NyBAQAogCX0KIAogCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZSwgZ2ZwX21hc2spOwotCWlmICghYnVmZmVyKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlfa2ZpZm9faW5pdChmaWZvLCAwLCAwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0JcmV0ID0ga2ZpZm9faW5pdChidWZmZXIsIHNpemUsIGdmcF9tYXNrLCBsb2NrKTsKKwlfa2ZpZm9faW5pdChmaWZvLCBidWZmZXIsIHNpemUpOwogCi0JaWYgKElTX0VSUihyZXQpKQotCQlrZnJlZShidWZmZXIpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woa2ZpZm9fYWxsb2MpOwogCiAvKioKLSAqIGtmaWZvX2ZyZWUgLSBmcmVlcyB0aGUgRklGTworICoga2ZpZm9fZnJlZSAtIGZyZWVzIHRoZSBGSUZPIGludGVybmFsIGJ1ZmZlcgogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIGZyZWVkLgogICovCiB2b2lkIGtmaWZvX2ZyZWUoc3RydWN0IGtmaWZvICpmaWZvKQogewogCWtmcmVlKGZpZm8tPmJ1ZmZlcik7Ci0Ja2ZyZWUoZmlmbyk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmaWZvX2ZyZWUpOwogCiAvKioKLSAqIF9fa2ZpZm9fcHV0IC0gcHV0cyBzb21lIGRhdGEgaW50byB0aGUgRklGTywgbm8gbG9ja2luZyB2ZXJzaW9uCisgKiBrZmlmb19za2lwIC0gc2tpcCBvdXRwdXQgZGF0YQogICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAYnVmZmVyOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEBidWZmZXIgaW50bwotICogdGhlIEZJRk8gZGVwZW5kaW5nIG9uIHRoZSBmcmVlIHNwYWNlLCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gKiBieXRlcyBjb3BpZWQuCi0gKgotICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byBza2lwCiAgKi8KLXVuc2lnbmVkIGludCBfX2tmaWZvX3B1dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCit2b2lkIGtmaWZvX3NraXAoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChsZW4gPCBrZmlmb19sZW4oZmlmbykpIHsKKwkJX19rZmlmb19hZGRfb3V0KGZpZm8sIGxlbik7CisJCXJldHVybjsKKwl9CisJa2ZpZm9fcmVzZXRfb3V0KGZpZm8pOworfQorRVhQT1JUX1NZTUJPTChrZmlmb19za2lwKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fa2ZpZm9faW5fZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7CiAJdW5zaWduZWQgaW50IGw7CiAKLQlsZW4gPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gZmlmby0+aW4gKyBmaWZvLT5vdXQpOwotCiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPm91dCBpbmRleCAtYmVmb3JlLSB3ZQogCSAqIHN0YXJ0IHB1dHRpbmcgYnl0ZXMgaW50byB0aGUga2ZpZm8uCkBAIC0xMzAsNDUgKzEyNywyMSBAQAogCiAJc21wX21iKCk7CiAKKwlvZmYgPSBfX2tmaWZvX29mZihmaWZvLCBmaWZvLT5pbiArIG9mZik7CisKIAkvKiBmaXJzdCBwdXQgdGhlIGRhdGEgc3RhcnRpbmcgZnJvbSBmaWZvLT5pbiB0byBidWZmZXIgZW5kICovCi0JbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSAoZmlmby0+aW4gJiAoZmlmby0+c2l6ZSAtIDEpKSk7Ci0JbWVtY3B5KGZpZm8tPmJ1ZmZlciArIChmaWZvLT5pbiAmIChmaWZvLT5zaXplIC0gMSkpLCBidWZmZXIsIGwpOworCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKKwltZW1jcHkoZmlmby0+YnVmZmVyICsgb2ZmLCBmcm9tLCBsKTsKIAogCS8qIHRoZW4gcHV0IHRoZSByZXN0IChpZiBhbnkpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLwotCW1lbWNweShmaWZvLT5idWZmZXIsIGJ1ZmZlciArIGwsIGxlbiAtIGwpOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhhdCB3ZSBhZGQgdGhlIGJ5dGVzIHRvIHRoZSBrZmlmbyAtYmVmb3JlLQotCSAqIHdlIHVwZGF0ZSB0aGUgZmlmby0+aW4gaW5kZXguCi0JICovCi0KLQlzbXBfd21iKCk7Ci0KLQlmaWZvLT5pbiArPSBsZW47Ci0KLQlyZXR1cm4gbGVuOworCW1lbWNweShmaWZvLT5idWZmZXIsIGZyb20gKyBsLCBsZW4gLSBsKTsKIH0KLUVYUE9SVF9TWU1CT0woX19rZmlmb19wdXQpOwogCi0vKioKLSAqIF9fa2ZpZm9fZ2V0IC0gZ2V0cyBzb21lIGRhdGEgZnJvbSB0aGUgRklGTywgbm8gbG9ja2luZyB2ZXJzaW9uCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEBidWZmZXI6IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgotICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQotICogQGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KLSAqCi0gKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKLSAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgotICovCi11bnNpZ25lZCBpbnQgX19rZmlmb19nZXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX291dF9kYXRhKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7CiAJdW5zaWduZWQgaW50IGw7CiAKLQlsZW4gPSBtaW4obGVuLCBmaWZvLT5pbiAtIGZpZm8tPm91dCk7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+aW4gaW5kZXggLWJlZm9yZS0gd2UKIAkgKiBzdGFydCByZW1vdmluZyBieXRlcyBmcm9tIHRoZSBrZmlmby4KQEAgLTE3NiwyMiArMTQ5LDI1MiBAQAogCiAJc21wX3JtYigpOwogCisJb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+b3V0ICsgb2ZmKTsKKwogCS8qIGZpcnN0IGdldCB0aGUgZGF0YSBmcm9tIGZpZm8tPm91dCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KLQlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIChmaWZvLT5vdXQgJiAoZmlmby0+c2l6ZSAtIDEpKSk7Ci0JbWVtY3B5KGJ1ZmZlciwgZmlmby0+YnVmZmVyICsgKGZpZm8tPm91dCAmIChmaWZvLT5zaXplIC0gMSkpLCBsKTsKKwlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIG9mZik7CisJbWVtY3B5KHRvLCBmaWZvLT5idWZmZXIgKyBvZmYsIGwpOwogCiAJLyogdGhlbiBnZXQgdGhlIHJlc3QgKGlmIGFueSkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQltZW1jcHkoYnVmZmVyICsgbCwgZmlmby0+YnVmZmVyLCBsZW4gLSBsKTsKKwltZW1jcHkodG8gKyBsLCBmaWZvLT5idWZmZXIsIGxlbiAtIGwpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9kYXRhKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCit7CisJdW5zaWduZWQgaW50IGw7CisJaW50IHJldDsKIAogCS8qCi0JICogRW5zdXJlIHRoYXQgd2UgcmVtb3ZlIHRoZSBieXRlcyBmcm9tIHRoZSBrZmlmbyAtYmVmb3JlLQotCSAqIHdlIHVwZGF0ZSB0aGUgZmlmby0+b3V0IGluZGV4LgorCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+b3V0IGluZGV4IC1iZWZvcmUtIHdlCisJICogc3RhcnQgcHV0dGluZyBieXRlcyBpbnRvIHRoZSBrZmlmby4KIAkgKi8KIAogCXNtcF9tYigpOwogCi0JZmlmby0+b3V0ICs9IGxlbjsKKwlvZmYgPSBfX2tmaWZvX29mZihmaWZvLCBmaWZvLT5pbiArIG9mZik7CisKKwkvKiBmaXJzdCBwdXQgdGhlIGRhdGEgc3RhcnRpbmcgZnJvbSBmaWZvLT5pbiB0byBidWZmZXIgZW5kICovCisJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOworCXJldCA9IGNvcHlfZnJvbV91c2VyKGZpZm8tPmJ1ZmZlciArIG9mZiwgZnJvbSwgbCk7CisKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0dXJuIHJldCArIGxlbiAtIGw7CisKKwkvKiB0aGVuIHB1dCB0aGUgcmVzdCAoaWYgYW55KSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KKwlyZXR1cm4gY29weV9mcm9tX3VzZXIoZmlmby0+YnVmZmVyLCBmcm9tICsgbCwgbGVuIC0gbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9kYXRhKHN0cnVjdCBrZmlmbyAqZmlmbywKKwkJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXVuc2lnbmVkIGludCBsOworCWludCByZXQ7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+aW4gaW5kZXggLWJlZm9yZS0gd2UKKwkgKiBzdGFydCByZW1vdmluZyBieXRlcyBmcm9tIHRoZSBrZmlmby4KKwkgKi8KKworCXNtcF9ybWIoKTsKKworCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPm91dCArIG9mZik7CisKKwkvKiBmaXJzdCBnZXQgdGhlIGRhdGEgZnJvbSBmaWZvLT5vdXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCisJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOworCXJldCA9IGNvcHlfdG9fdXNlcih0bywgZmlmby0+YnVmZmVyICsgb2ZmLCBsKTsKKworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0ICsgbGVuIC0gbDsKKworCS8qIHRoZW4gZ2V0IHRoZSByZXN0IChpZiBhbnkpIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCisJcmV0dXJuIGNvcHlfdG9fdXNlcih0byArIGwsIGZpZm8tPmJ1ZmZlciwgbGVuIC0gbCk7Cit9CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX2luX24oc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmIChrZmlmb19hdmFpbChmaWZvKSA8IGxlbiArIHJlY3NpemUpCisJCXJldHVybiBsZW4gKyAxOworCisJX19rZmlmb19pbl9kYXRhKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9faW5fbik7CisKKy8qKgorICoga2ZpZm9faW4gLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPCisgKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIEBmcm9tOiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KKyAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGJ1ZmZlciBpbnRvCisgKiB0aGUgRklGTyBkZXBlbmRpbmcgb24gdGhlIGZyZWUgc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVzIGNvcGllZC4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICovCit1bnNpZ25lZCBpbnQga2ZpZm9faW4oc3RydWN0IGtmaWZvICpmaWZvLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLAorCQkJCXVuc2lnbmVkIGludCBsZW4pCit7CisJbGVuID0gbWluKGtmaWZvX2F2YWlsKGZpZm8pLCBsZW4pOworCisJX19rZmlmb19pbl9kYXRhKGZpZm8sIGZyb20sIGxlbiwgMCk7CisJX19rZmlmb19hZGRfaW4oZmlmbywgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorRVhQT1JUX1NZTUJPTChrZmlmb19pbik7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX2luX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCXJldHVybiBfX2tmaWZvX2luX3JlYyhmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2luX2dlbmVyaWMpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmIChrZmlmb19sZW4oZmlmbykgPCBsZW4gKyByZWNzaXplKQorCQlyZXR1cm4gbGVuOworCisJX19rZmlmb19vdXRfZGF0YShmaWZvLCB0bywgbGVuLCByZWNzaXplKTsKKwlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbGVuICsgcmVjc2l6ZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fb3V0X24pOworCisvKioKKyAqIGtmaWZvX291dCAtIGdldHMgc29tZSBkYXRhIGZyb20gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKKyAqIEB0byBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLwordW5zaWduZWQgaW50IGtmaWZvX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGNoYXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWxlbiA9IG1pbihrZmlmb19sZW4oZmlmbyksIGxlbik7CisKKwlfX2tmaWZvX291dF9kYXRhKGZpZm8sIHRvLCBsZW4sIDApOworCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4pOwogCiAJcmV0dXJuIGxlbjsKIH0KLUVYUE9SVF9TWU1CT0woX19rZmlmb19nZXQpOworRVhQT1JUX1NZTUJPTChrZmlmb19vdXQpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplLAorCXVuc2lnbmVkIGludCAqdG90YWwpCit7CisJcmV0dXJuIF9fa2ZpZm9fb3V0X3JlYyhmaWZvLCB0bywgbGVuLCByZWNzaXplLCB0b3RhbCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fb3V0X2dlbmVyaWMpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmIChrZmlmb19hdmFpbChmaWZvKSA8IGxlbiArIHJlY3NpemUpCisJCXJldHVybiBsZW4gKyAxOworCisJcmV0dXJuIF9fa2ZpZm9fZnJvbV91c2VyX2RhdGEoZmlmbywgZnJvbSwgbGVuLCByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19mcm9tX3VzZXJfbik7CisKKy8qKgorICoga2ZpZm9fZnJvbV91c2VyIC0gcHV0cyBzb21lIGRhdGEgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIEZJRk8KKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZyb206IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgYWRkZWQuCisgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBpbnRvIHRoZQorICogRklGTyBkZXBlbmRpbmcgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLwordW5zaWduZWQgaW50IGtmaWZvX2Zyb21fdXNlcihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBsZW4pCit7CisJbGVuID0gbWluKGtmaWZvX2F2YWlsKGZpZm8pLCBsZW4pOworCWxlbiAtPSBfX2tmaWZvX2Zyb21fdXNlcl9kYXRhKGZpZm8sIGZyb20sIGxlbiwgMCk7CisJX19rZmlmb19hZGRfaW4oZmlmbywgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorRVhQT1JUX1NZTUJPTChrZmlmb19mcm9tX3VzZXIpOworCit1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCXJldHVybiBfX2tmaWZvX2Zyb21fdXNlcl9yZWMoZmlmbywgZnJvbSwgbGVuLCByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX3RvX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjbGVuLAorCXVuc2lnbmVkIGludCByZWNzaXplKQoreworCXVuc2lnbmVkIGludCByZXQ7CisKKwlpZiAoa2ZpZm9fbGVuKGZpZm8pIDwgcmVjbGVuICsgcmVjc2l6ZSkKKwkJcmV0dXJuIGxlbjsKKworCXJldCA9IF9fa2ZpZm9fdG9fdXNlcl9kYXRhKGZpZm8sIHRvLCByZWNsZW4sIHJlY3NpemUpOworCisJaWYgKGxpa2VseShyZXQgPT0gMCkpCisJCV9fa2ZpZm9fYWRkX291dChmaWZvLCByZWNsZW4gKyByZWNzaXplKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fdG9fdXNlcl9uKTsKKworLyoqCisgKiBrZmlmb190b191c2VyIC0gZ2V0cyBkYXRhIGZyb20gdGhlIEZJRk8gYW5kIHdyaXRlIGl0IHRvIHVzZXIgc3BhY2UKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KKyAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKKyAqIEB0byBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLwordW5zaWduZWQgaW50IGtmaWZvX3RvX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAorCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlsZW4gPSBtaW4oa2ZpZm9fbGVuKGZpZm8pLCBsZW4pOworCWxlbiAtPSBfX2tmaWZvX3RvX3VzZXJfZGF0YShmaWZvLCB0bywgbGVuLCAwKTsKKwlfX2tmaWZvX2FkZF9vdXQoZmlmbywgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorRVhQT1JUX1NZTUJPTChrZmlmb190b191c2VyKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKKwl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNzaXplLAorCXVuc2lnbmVkIGludCAqdG90YWwpCit7CisJcmV0dXJuIF9fa2ZpZm9fdG9fdXNlcl9yZWMoZmlmbywgdG8sIGxlbiwgcmVjc2l6ZSwgdG90YWwpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX3RvX3VzZXJfZ2VuZXJpYyk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX3BlZWtfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCByZWNzaXplKQoreworCWlmIChyZWNzaXplID09IDApCisJCXJldHVybiBrZmlmb19hdmFpbChmaWZvKTsKKworCXJldHVybiBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19wZWVrX2dlbmVyaWMpOworCit2b2lkIF9fa2ZpZm9fc2tpcF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHJlY3NpemUpCit7CisJX19rZmlmb19za2lwX3JlYyhmaWZvLCByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19za2lwX2dlbmVyaWMpOworCmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCAyNWIxMDMxLi5iZjBlMjMxIDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTUyMCwxMyArNTIwLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0ID0gY2FsbF91c2VybW9kZWhlbHBlcl9zdGRpbnBpcGUoc3ViX2luZm8sIGZpbHApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwlpZiAocmV0IDwgMCkgeworCQljYWxsX3VzZXJtb2RlaGVscGVyX2ZyZWVpbmZvKHN1Yl9pbmZvKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKLQlyZXR1cm4gY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKHN1Yl9pbmZvLCBVTUhfV0FJVF9FWEVDKTsKKwlyZXQgPSBjYWxsX3VzZXJtb2RlaGVscGVyX2V4ZWMoc3ViX2luZm8sIFVNSF9XQUlUX0VYRUMpOworCWlmIChyZXQgPCAwKQkvKiBGYWlsZWQgdG8gZXhlY3V0ZSBoZWxwZXIsIGNsb3NlIHBpcGUgKi8KKwkJZmlscF9jbG9zZSgqZmlscCwgTlVMTCk7CiAKLSAgb3V0OgotCWNhbGxfdXNlcm1vZGVoZWxwZXJfZnJlZWluZm8oc3ViX2luZm8pOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNhbGxfdXNlcm1vZGVoZWxwZXJfcGlwZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBlNTM0MmEzLi5iN2RmMzAyIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJLyogUHJlLWFsbG9jYXRlIG1lbW9yeSBmb3IgbWF4IGtyZXRwcm9iZSBpbnN0YW5jZXMgKi8KIAlpZiAocnAtPm1heGFjdGl2ZSA8PSAwKSB7CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKLQkJcnAtPm1heGFjdGl2ZSA9IG1heCgxMCwgMiAqIG51bV9wb3NzaWJsZV9jcHVzKCkpOworCQlycC0+bWF4YWN0aXZlID0gbWF4X3QodW5zaWduZWQgaW50LCAxMCwgMipudW1fcG9zc2libGVfY3B1cygpKTsKICNlbHNlCiAJCXJwLT5tYXhhY3RpdmUgPSBudW1fcG9zc2libGVfY3B1cygpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCBhYjdhZTU3Li5mYmI2MjIyIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE1MCw2ICsxNTAsMjkgQEAKIEVYUE9SVF9TWU1CT0woa3RocmVhZF9jcmVhdGUpOwogCiAvKioKKyAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KKyAqIEBwOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgorICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgorICoKKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAorICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCisgKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCisgKi8KK3ZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUocCwgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CisJcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOworfQorRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOworCisvKioKICAqIGt0aHJlYWRfc3RvcCAtIHN0b3AgYSB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICogQGs6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCiAgKgpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IGE2NWRjNzguLmY4MjM4NmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTEwMTAsNiArMTAxMCwxMiBAQAogICogSi4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0tBTExTWU1TKSAmJiBkZWZpbmVkKENPTkZJR19TWVNGUykKKworc3RhdGljIGlubGluZSBib29sIHNlY3RfZW1wdHkoY29uc3QgRWxmX1NoZHIgKnNlY3QpCit7CisJcmV0dXJuICEoc2VjdC0+c2hfZmxhZ3MgJiBTSEZfQUxMT0MpIHx8IHNlY3QtPnNoX3NpemUgPT0gMDsKK30KKwogc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIKIHsKIAlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtYXR0cjsKQEAgLTEwNTEsOCArMTA1Nyw3IEBACiAKIAkvKiBDb3VudCBsb2FkZWQgc2VjdGlvbnMgYW5kIGFsbG9jYXRlIHN0cnVjdHVyZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnNlY3Q7IGkrKykKLQkJaWYgKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MKLQkJICAgICYmIHNlY2hkcnNbaV0uc2hfc2l6ZSkKKwkJaWYgKCFzZWN0X2VtcHR5KCZzZWNoZHJzW2ldKSkKIAkJCW5sb2FkZWQrKzsKIAlzaXplWzBdID0gQUxJR04oc2l6ZW9mKCpzZWN0X2F0dHJzKQogCQkJKyBubG9hZGVkICogc2l6ZW9mKHNlY3RfYXR0cnMtPmF0dHJzWzBdKSwKQEAgLTEwNzAsOSArMTA3NSw3IEBACiAJc2F0dHIgPSAmc2VjdF9hdHRycy0+YXR0cnNbMF07CiAJZ2F0dHIgPSAmc2VjdF9hdHRycy0+Z3JwLmF0dHJzWzBdOwogCWZvciAoaSA9IDA7IGkgPCBuc2VjdDsgaSsrKSB7Ci0JCWlmICghIChzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXNlY2hkcnNbaV0uc2hfc2l6ZSkKKwkJaWYgKHNlY3RfZW1wdHkoJnNlY2hkcnNbaV0pKQogCQkJY29udGludWU7CiAJCXNhdHRyLT5hZGRyZXNzID0gc2VjaGRyc1tpXS5zaF9hZGRyOwogCQlzYXR0ci0+bmFtZSA9IGtzdHJkdXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwKQEAgLTExNTYsNyArMTE1OSw3IEBACiAJLyogQ291bnQgbm90ZXMgc2VjdGlvbnMgYW5kIGFsbG9jYXRlIHN0cnVjdHVyZXMuICAqLwogCW5vdGVzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbnNlY3Q7IGkrKykKLQkJaWYgKChzZWNoZHJzW2ldLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSAmJgorCQlpZiAoIXNlY3RfZW1wdHkoJnNlY2hkcnNbaV0pICYmCiAJCSAgICAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9OT1RFKSkKIAkJCSsrbm90ZXM7CiAKQEAgLTExNzIsNyArMTE3NSw3IEBACiAJbm90ZXNfYXR0cnMtPm5vdGVzID0gbm90ZXM7CiAJbmF0dHIgPSAmbm90ZXNfYXR0cnMtPmF0dHJzWzBdOwogCWZvciAobG9hZGVkID0gaSA9IDA7IGkgPCBuc2VjdDsgKytpKSB7Ci0JCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQorCQlpZiAoc2VjdF9lbXB0eSgmc2VjaGRyc1tpXSkpCiAJCQljb250aW51ZTsKIAkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfTk9URSkgewogCQkJbmF0dHItPmF0dHIubmFtZSA9IG1vZC0+c2VjdF9hdHRycy0+YXR0cnNbbG9hZGVkXS5uYW1lOwpAQCAtMTkxMCw5ICsxOTEzLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIG9ubHkgc2NhbiB0aGUgc2VjdGlvbnMgY29udGFpbmluZyBkYXRhICovCi0Ja21lbWxlYWtfc2Nhbl9hcmVhKG1vZC0+bW9kdWxlX2NvcmUsICh1bnNpZ25lZCBsb25nKW1vZCAtCi0JCQkgICAodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9jb3JlLAotCQkJICAgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpLCBHRlBfS0VSTkVMKTsKKwlrbWVtbGVha19zY2FuX2FyZWEobW9kLCBzaXplb2Yoc3RydWN0IG1vZHVsZSksIEdGUF9LRVJORUwpOwogCiAJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CiAJCWlmICghKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQpAQCAtMTkyMSw4ICsxOTIyLDcgQEAKIAkJICAgICYmIHN0cm5jbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgIi5ic3MiLCA0KSAhPSAwKQogCQkJY29udGludWU7CiAKLQkJa21lbWxlYWtfc2Nhbl9hcmVhKG1vZC0+bW9kdWxlX2NvcmUsIHNlY2hkcnNbaV0uc2hfYWRkciAtCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfY29yZSwKKwkJa21lbWxlYWtfc2Nhbl9hcmVhKCh2b2lkICopc2VjaGRyc1tpXS5zaF9hZGRyLAogCQkJCSAgIHNlY2hkcnNbaV0uc2hfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJfQogfQpAQCAtMjI1MCw2ICsyMjUwLDEyIEBACiAJCQkJCSAiX2Z0cmFjZV9ldmVudHMiLAogCQkJCQkgc2l6ZW9mKCptb2QtPnRyYWNlX2V2ZW50cyksCiAJCQkJCSAmbW9kLT5udW1fdHJhY2VfZXZlbnRzKTsKKwkvKgorCSAqIFRoaXMgc2VjdGlvbiBjb250YWlucyBwb2ludGVycyB0byBhbGxvY2F0ZWQgb2JqZWN0cyBpbiB0aGUgdHJhY2UKKwkgKiBjb2RlIGFuZCBub3Qgc2Nhbm5pbmcgaXQgbGVhZHMgdG8gZmFsc2UgcG9zaXRpdmVzLgorCSAqLworCWttZW1sZWFrX3NjYW5fYXJlYShtb2QtPnRyYWNlX2V2ZW50cywgc2l6ZW9mKCptb2QtPnRyYWNlX2V2ZW50cykgKgorCQkJICAgbW9kLT5udW1fdHJhY2VfZXZlbnRzLCBHRlBfS0VSTkVMKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggOGFiODY5OC4uNjAzYzBkOGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTM4MSw2ICsxMzgxLDkgQEAKIAkJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKIAkJaHdjID0gJmV2ZW50LT5odzsKIAogCQlpbnRlcnJ1cHRzID0gaHdjLT5pbnRlcnJ1cHRzOwpAQCAtMTYxNCw3ICsxNjE3LDcgQEAKIAkJICogb2ZmbGluZSBDUFUgYW5kIGFjdGl2YXRlIGl0IHdoZW4gdGhlIENQVSBjb21lcyB1cCwgYnV0CiAJCSAqIHRoYXQncyBmb3IgbGF0ZXIuCiAJCSAqLwotCQlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKSkKKwkJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAogCQljcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOwpAQCAtMzI2NSw2ICszMjY4LDkgQEAKIAogc3RhdGljIGludCBwZXJmX2V2ZW50X3Rhc2tfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogeworCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlyZXR1cm4gMDsKKwogCWlmIChldmVudC0+YXR0ci5jb21tIHx8IGV2ZW50LT5hdHRyLm1tYXAgfHwgZXZlbnQtPmF0dHIudGFzaykKIAkJcmV0dXJuIDE7CiAKQEAgLTMyOTAsMTIgKzMyOTYsMTEgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfdGFza19jdHgoJmNwdWN0eC0+Y3R4LCB0YXNrX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQogCWlmICghY3R4KQogCQljdHggPSByY3VfZGVyZWZlcmVuY2UodGFza19ldmVudC0+dGFzay0+cGVyZl9ldmVudF9jdHhwKTsKIAlpZiAoY3R4KQogCQlwZXJmX2V2ZW50X3Rhc2tfY3R4KGN0eCwgdGFza19ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTMzNzIsNiArMzM3Nyw5IEBACiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9jb21tX21hdGNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZXZlbnQtPmF0dHIuY29tbSkKIAkJcmV0dXJuIDE7CiAKQEAgLTM0MDgsMTUgKzM0MTYsMTAgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfY29tbV9jdHgoJmNwdWN0eC0+Y3R4LCBjb21tX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCS8qCi0JICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKLQkgKiBldmVudHMgZW5kcyB1cCBpbi4KLQkgKi8KIAljdHggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cGVyZl9ldmVudF9jdHhwKTsKIAlpZiAoY3R4KQogCQlwZXJmX2V2ZW50X2NvbW1fY3R4KGN0eCwgY29tbV9ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTM0OTEsNiArMzQ5NCw5IEBACiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfbW1hcF9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCkKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZXZlbnQtPmF0dHIubW1hcCkKIAkJcmV0dXJuIDE7CiAKQEAgLTM1NjQsMTUgKzM1NzAsMTAgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY3B1Y3R4ID0gJmdldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXBlcmZfZXZlbnRfbW1hcF9jdHgoJmNwdWN0eC0+Y3R4LCBtbWFwX2V2ZW50KTsKLQlwdXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKLQotCS8qCi0JICogZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoaWNoIG9mIHRoZSBjaGlsZCBjb250ZXh0cyB0aGUKLQkgKiBldmVudHMgZW5kcyB1cCBpbi4KLQkgKi8KIAljdHggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cGVyZl9ldmVudF9jdHhwKTsKIAlpZiAoY3R4KQogCQlwZXJmX2V2ZW50X21tYXBfY3R4KGN0eCwgbW1hcF9ldmVudCk7CisJcHV0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlrZnJlZShidWYpOwpAQCAtMzg2Myw2ICszODY0LDkgQEAKIAkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKIAkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIXBlcmZfc3dldmVudF9pc19jb3VudGluZyhldmVudCkpCiAJCXJldHVybiAwOwogCkBAIC00NzIwLDcgKzQ3MjQsNyBAQAogCWlmIChJU19FUlIoZXZlbnQpKQogCQlnb3RvIGVycl9wdXRfY29udGV4dDsKIAotCWVyciA9IGFub25faW5vZGVfZ2V0ZmQoIltwZXJmX2V2ZW50XSIsICZwZXJmX2ZvcHMsIGV2ZW50LCAwKTsKKwllcnIgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9ldmVudF0iLCAmcGVyZl9mb3BzLCBldmVudCwgT19SRFdSKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfZnJlZV9wdXRfY29udGV4dDsKIApAQCAtNTE0NCw3ICs1MTQ4LDcgQEAKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFjaGlsZF9jdHgpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXhpdDsKKwkJCQlicmVhazsKIAkJCX0KIAogCQkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZF9jdHgsIGNoaWxkKTsKQEAgLTUxNjAsNyArNTE2NCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoaW5oZXJpdGVkX2FsbCkgeworCWlmIChjaGlsZF9jdHggJiYgaW5oZXJpdGVkX2FsbCkgewogCQkvKgogCQkgKiBNYXJrIHRoZSBjaGlsZCBjb250ZXh0IGFzIGEgY2xvbmUgb2YgdGhlIHBhcmVudAogCQkgKiBjb250ZXh0LCBvciBvZiB3aGF0ZXZlciB0aGUgcGFyZW50IGlzIGEgY2xvbmUgb2YuCkBAIC01MTgwLDcgKzUxODQsNiBAQAogCQlnZXRfY3R4KGNoaWxkX2N0eC0+cGFyZW50X2N0eCk7CiAJfQogCi1leGl0OgogCW11dGV4X3VubG9jaygmcGFyZW50X2N0eC0+bXV0ZXgpOwogCiAJcGVyZl91bnBpbl9jb250ZXh0KHBhcmVudF9jdHgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDFkZWQ4ZTcuLjE3NDYzY2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTE0MTIsNyArMTQxMiw3IEBACiAKIC8qKgogICoga21zZ19kdW1wX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBrZXJuZWwgbG9nIGR1bXBlci4KLSAqIEBkdW1wOiBwb2ludGVyIHRvIHRoZSBrbXNnX2R1bXBlciBzdHJ1Y3R1cmUKKyAqIEBkdW1wZXI6IHBvaW50ZXIgdG8gdGhlIGttc2dfZHVtcGVyIHN0cnVjdHVyZQogICoKICAqIEFkZHMgYSBrZXJuZWwgbG9nIGR1bXBlciB0byB0aGUgc3lzdGVtLiBUaGUgZHVtcCBjYWxsYmFjayBpbiB0aGUKICAqIHN0cnVjdHVyZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBrZXJuZWwgb29wc2VzIG9yIHBhbmljcyBhbmQgbXVzdCBiZQpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAKIAogLyoqCiAgKiBrbXNnX2R1bXBfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBrbXNnIGR1bXBlci4KLSAqIEBkdW1wOiBwb2ludGVyIHRvIHRoZSBrbXNnX2R1bXBlciBzdHJ1Y3R1cmUKKyAqIEBkdW1wZXI6IHBvaW50ZXIgdG8gdGhlIGttc2dfZHVtcGVyIHN0cnVjdHVyZQogICoKICAqIFJlbW92ZXMgYSBkdW1wIGRldmljZSBmcm9tIHRoZSBzeXN0ZW0uIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZAogICogJS1FSU5WQUwgb3RoZXJ3aXNlLgpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCBkYzE1Njg2Li5hZjk2YzFlIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzb3VyY2UuYworKysgYi9rZXJuZWwvcmVzb3VyY2UuYwpAQCAtMzA4LDM3ICszMDgsMzcgQEAKIAkJCSB2b2lkICphbGlnbmZfZGF0YSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnRoaXMgPSByb290LT5jaGlsZDsKLQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgdG1wID0gKm5ldzsKIAotCXN0YXJ0ID0gcm9vdC0+c3RhcnQ7CisJdG1wLnN0YXJ0ID0gcm9vdC0+c3RhcnQ7CiAJLyoKIAkgKiBTa2lwIHBhc3QgYW4gYWxsb2NhdGVkIHJlc291cmNlIHRoYXQgc3RhcnRzIGF0IDAsIHNpbmNlIHRoZSBhc3NpZ25tZW50Ci0JICogb2YgdGhpcy0+c3RhcnQgLSAxIHRvIG5ldy0+ZW5kIGJlbG93IHdvdWxkIGNhdXNlIGFuIHVuZGVyZmxvdy4KKwkgKiBvZiB0aGlzLT5zdGFydCAtIDEgdG8gdG1wLT5lbmQgYmVsb3cgd291bGQgY2F1c2UgYW4gdW5kZXJmbG93LgogCSAqLwogCWlmICh0aGlzICYmIHRoaXMtPnN0YXJ0ID09IDApIHsKLQkJc3RhcnQgPSB0aGlzLT5lbmQgKyAxOworCQl0bXAuc3RhcnQgPSB0aGlzLT5lbmQgKyAxOwogCQl0aGlzID0gdGhpcy0+c2libGluZzsKIAl9CiAJZm9yKDs7KSB7CiAJCWlmICh0aGlzKQotCQkJZW5kID0gdGhpcy0+c3RhcnQgLSAxOworCQkJdG1wLmVuZCA9IHRoaXMtPnN0YXJ0IC0gMTsKIAkJZWxzZQotCQkJZW5kID0gcm9vdC0+ZW5kOwotCQlpZiAoc3RhcnQgPCBtaW4pCi0JCQlzdGFydCA9IG1pbjsKLQkJaWYgKGVuZCA+IG1heCkKLQkJCWVuZCA9IG1heDsKLQkJc3RhcnQgPSBBTElHTihzdGFydCwgYWxpZ24pOworCQkJdG1wLmVuZCA9IHJvb3QtPmVuZDsKKwkJaWYgKHRtcC5zdGFydCA8IG1pbikKKwkJCXRtcC5zdGFydCA9IG1pbjsKKwkJaWYgKHRtcC5lbmQgPiBtYXgpCisJCQl0bXAuZW5kID0gbWF4OworCQl0bXAuc3RhcnQgPSBBTElHTih0bXAuc3RhcnQsIGFsaWduKTsKIAkJaWYgKGFsaWduZikKLQkJCWFsaWduZihhbGlnbmZfZGF0YSwgbmV3LCBzaXplLCBhbGlnbik7Ci0JCWlmIChzdGFydCA8IGVuZCAmJiBlbmQgLSBzdGFydCA+PSBzaXplIC0gMSkgewotCQkJbmV3LT5zdGFydCA9IHN0YXJ0OwotCQkJbmV3LT5lbmQgPSBzdGFydCArIHNpemUgLSAxOworCQkJYWxpZ25mKGFsaWduZl9kYXRhLCAmdG1wLCBzaXplLCBhbGlnbik7CisJCWlmICh0bXAuc3RhcnQgPCB0bXAuZW5kICYmIHRtcC5lbmQgLSB0bXAuc3RhcnQgPj0gc2l6ZSAtIDEpIHsKKwkJCW5ldy0+c3RhcnQgPSB0bXAuc3RhcnQ7CisJCQluZXctPmVuZCA9IHRtcC5zdGFydCArIHNpemUgLSAxOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKCF0aGlzKQogCQkJYnJlYWs7Ci0JCXN0YXJ0ID0gdGhpcy0+ZW5kICsgMTsKKwkJdG1wLnN0YXJ0ID0gdGhpcy0+ZW5kICsgMTsKIAkJdGhpcyA9IHRoaXMtPnNpYmxpbmc7CiAJfQogCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDE4Y2NlZWUuLmM1MzVjYzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMDAyLDM5ICsyMDAyLDYgQEAKIAkJcC0+c2NoZWRfY2xhc3MtPnByaW9fY2hhbmdlZChycSwgcCwgb2xkcHJpbywgcnVubmluZyk7CiB9CiAKLS8qKgotICoga3RocmVhZF9iaW5kIC0gYmluZCBhIGp1c3QtY3JlYXRlZCBrdGhyZWFkIHRvIGEgY3B1LgotICogQHA6IHRocmVhZCBjcmVhdGVkIGJ5IGt0aHJlYWRfY3JlYXRlKCkuCi0gKiBAY3B1OiBjcHUgKG1pZ2h0IG5vdCBiZSBvbmxpbmUsIG11c3QgYmUgcG9zc2libGUpIGZvciBAayB0byBydW4gb24uCi0gKgotICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBzZXRfY3B1c19hbGxvd2VkKCksCi0gKiBleGNlcHQgdGhhdCBAY3B1IGRvZXNuJ3QgbmVlZCB0byBiZSBvbmxpbmUsIGFuZCB0aGUgdGhyZWFkIG11c3QgYmUKLSAqIHN0b3BwZWQgKGkuZS4sIGp1c3QgcmV0dXJuZWQgZnJvbSBrdGhyZWFkX2NyZWF0ZSgpKS4KLSAqCi0gKiBGdW5jdGlvbiBsaXZlcyBoZXJlIGluc3RlYWQgb2Yga3RocmVhZC5jIGJlY2F1c2UgaXQgbWVzc2VzIHdpdGgKLSAqIHNjaGVkdWxlciBpbnRlcm5hbHMgd2hpY2ggcmVxdWlyZSBsb2NraW5nLgotICovCi12b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpCi17Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCi0JaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUocCwgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0JdXBkYXRlX3JxX2Nsb2NrKHJxKTsKLQlzZXRfdGFza19jcHUocCwgY3B1KTsKLQlwLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwotCXAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7Ci0JcC0+ZmxhZ3MgfD0gUEZfVEhSRUFEX0JPVU5EOwotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChrdGhyZWFkX2JpbmQpOwotCiAjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIElzIHRoaXMgdGFzayBsaWtlbHkgY2FjaGUtaG90OgpAQCAtMjA0NCw2ICsyMDExLDkgQEAKIHsKIAlzNjQgZGVsdGE7CiAKKwlpZiAocC0+c2NoZWRfY2xhc3MgIT0gJmZhaXJfc2NoZWRfY2xhc3MpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBCdWRkeSBjYW5kaWRhdGVzIGFyZSBjYWNoZSBob3Q6CiAJICovCkBAIC0yMDUyLDkgKzIwMjIsNiBAQAogCQkJICZwLT5zZSA9PSBjZnNfcnFfb2YoJnAtPnNlKS0+bGFzdCkpCiAJCXJldHVybiAxOwogCi0JaWYgKHAtPnNjaGVkX2NsYXNzICE9ICZmYWlyX3NjaGVkX2NsYXNzKQotCQlyZXR1cm4gMDsKLQogCWlmIChzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgPT0gLTEpCiAJCXJldHVybiAxOwogCWlmIChzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgPT0gMCkKQEAgLTIwNjUsMjIgKzIwMzIsMjMgQEAKIAlyZXR1cm4gZGVsdGEgPCAoczY0KXN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKIH0KIAotCiB2b2lkIHNldF90YXNrX2NwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBuZXdfY3B1KQogewotCWludCBvbGRfY3B1ID0gdGFza19jcHUocCk7Ci0Jc3RydWN0IGNmc19ycSAqb2xkX2Nmc3JxID0gdGFza19jZnNfcnEocCksCi0JCSAgICAgICpuZXdfY2ZzcnEgPSBjcHVfY2ZzX3JxKG9sZF9jZnNycSwgbmV3X2NwdSk7CisjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCisJLyoKKwkgKiBXZSBzaG91bGQgbmV2ZXIgY2FsbCBzZXRfdGFza19jcHUoKSBvbiBhIGJsb2NrZWQgdGFzaywKKwkgKiB0dHd1KCkgd2lsbCBzb3J0IG91dCB0aGUgcGxhY2VtZW50LgorCSAqLworCVdBUk5fT05fT05DRShwLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcgJiYgcC0+c3RhdGUgIT0gVEFTS19XQUtJTkcgJiYKKwkJCSEodGFza190aHJlYWRfaW5mbyhwKS0+cHJlZW1wdF9jb3VudCAmIFBSRUVNUFRfQUNUSVZFKSk7CisjZW5kaWYKIAogCXRyYWNlX3NjaGVkX21pZ3JhdGVfdGFzayhwLCBuZXdfY3B1KTsKIAotCWlmIChvbGRfY3B1ICE9IG5ld19jcHUpIHsKKwlpZiAodGFza19jcHUocCkgIT0gbmV3X2NwdSkgewogCQlwLT5zZS5ucl9taWdyYXRpb25zKys7Ci0JCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DUFVfTUlHUkFUSU9OUywKLQkJCQkgICAgIDEsIDEsIE5VTEwsIDApOworCQlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMsIDEsIDEsIE5VTEwsIDApOwogCX0KLQlwLT5zZS52cnVudGltZSAtPSBvbGRfY2ZzcnEtPm1pbl92cnVudGltZSAtCi0JCQkJCSBuZXdfY2ZzcnEtPm1pbl92cnVudGltZTsKIAogCV9fc2V0X3Rhc2tfY3B1KHAsIG5ld19jcHUpOwogfQpAQCAtMjEwNSwxMyArMjA3MywxMCBAQAogCiAJLyoKIAkgKiBJZiB0aGUgdGFzayBpcyBub3Qgb24gYSBydW5xdWV1ZSAoYW5kIG5vdCBydW5uaW5nKSwgdGhlbgotCSAqIGl0IGlzIHN1ZmZpY2llbnQgdG8gc2ltcGx5IHVwZGF0ZSB0aGUgdGFzaydzIGNwdSBmaWVsZC4KKwkgKiB0aGUgbmV4dCB3YWtlLXVwIHdpbGwgcHJvcGVybHkgcGxhY2UgdGhlIHRhc2suCiAJICovCi0JaWYgKCFwLT5zZS5vbl9ycSAmJiAhdGFza19ydW5uaW5nKHJxLCBwKSkgewotCQl1cGRhdGVfcnFfY2xvY2socnEpOwotCQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOworCWlmICghcC0+c2Uub25fcnEgJiYgIXRhc2tfcnVubmluZyhycSwgcCkpCiAJCXJldHVybiAwOwotCX0KIAogCWluaXRfY29tcGxldGlvbigmcmVxLT5kb25lKTsKIAlyZXEtPnRhc2sgPSBwOwpAQCAtMjMxNywxMCArMjI4Miw3MyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCBzZWxlY3RfZmFsbGJhY2tfcnEoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCWludCBkZXN0X2NwdTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbm9kZW1hc2sgPSBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoY3B1KSk7CisKKwkvKiBMb29rIGZvciBhbGxvd2VkLCBvbmxpbmUgQ1BVIGluIHNhbWUgbm9kZS4gKi8KKwlmb3JfZWFjaF9jcHVfYW5kKGRlc3RfY3B1LCBub2RlbWFzaywgY3B1X2FjdGl2ZV9tYXNrKQorCQlpZiAoY3B1bWFza190ZXN0X2NwdShkZXN0X2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkpCisJCQlyZXR1cm4gZGVzdF9jcHU7CisKKwkvKiBBbnkgYWxsb3dlZCwgb25saW5lIENQVT8gKi8KKwlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZCgmcC0+Y3B1c19hbGxvd2VkLCBjcHVfYWN0aXZlX21hc2spOworCWlmIChkZXN0X2NwdSA8IG5yX2NwdV9pZHMpCisJCXJldHVybiBkZXN0X2NwdTsKKworCS8qIE5vIG1vcmUgTXIuIE5pY2UgR3V5LiAqLworCWlmIChkZXN0X2NwdSA+PSBucl9jcHVfaWRzKSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQocCwgJnAtPmNwdXNfYWxsb3dlZCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZChjcHVfYWN0aXZlX21hc2ssICZwLT5jcHVzX2FsbG93ZWQpOworCisJCS8qCisJCSAqIERvbid0IHRlbGwgdGhlbSBhYm91dCBtb3ZpbmcgZXhpdGluZyB0YXNrcyBvcgorCQkgKiBrZXJuZWwgdGhyZWFkcyAoYm90aCBtbSBOVUxMKSwgc2luY2UgdGhleSBuZXZlcgorCQkgKiBsZWF2ZSBrZXJuZWwuCisJCSAqLworCQlpZiAocC0+bW0gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJwcm9jZXNzICVkICglcykgbm8gIgorCQkJICAgICAgICJsb25nZXIgYWZmaW5lIHRvIGNwdSVkXG4iLAorCQkJICAgICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tLCBjcHUpOworCQl9CisJfQorCisJcmV0dXJuIGRlc3RfY3B1OworfQorCisvKgorICogQ2FsbGVkIGZyb206CisgKgorICogIC0gZm9yaywgQHAgaXMgc3RhYmxlIGJlY2F1c2UgaXQgaXNuJ3Qgb24gdGhlIHRhc2tsaXN0IHlldAorICoKKyAqICAtIGV4ZWMsIEBwIGlzIHVuc3RhYmxlLCByZXRyeSBsb29wCisgKgorICogIC0gd2FrZS11cCwgd2Ugc2VyaWFsaXplIC0+Y3B1c19hbGxvd2VkIGFnYWluc3QgVEFTS19XQUtJTkcgc28KKyAqICAgICAgICAgICAgIHdlIHNob3VsZCBiZSBnb29kLgorICovCiBzdGF0aWMgaW5saW5lCiBpbnQgc2VsZWN0X3Rhc2tfcnEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2RfZmxhZ3MsIGludCB3YWtlX2ZsYWdzKQogewotCXJldHVybiBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgc2RfZmxhZ3MsIHdha2VfZmxhZ3MpOworCWludCBjcHUgPSBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgc2RfZmxhZ3MsIHdha2VfZmxhZ3MpOworCisJLyoKKwkgKiBJbiBvcmRlciBub3QgdG8gY2FsbCBzZXRfdGFza19jcHUoKSBvbiBhIGJsb2NraW5nIHRhc2sgd2UgbmVlZAorCSAqIHRvIHJlbHkgb24gdHR3dSgpIHRvIHBsYWNlIHRoZSB0YXNrIG9uIGEgdmFsaWQgLT5jcHVzX2FsbG93ZWQKKwkgKiBjcHUuCisJICoKKwkgKiBTaW5jZSB0aGlzIGlzIGNvbW1vbiB0byBhbGwgcGxhY2VtZW50IHN0cmF0ZWdpZXMsIHRoaXMgbGl2ZXMgaGVyZS4KKwkgKgorCSAqIFsgdGhpcyBhbGxvd3MgLT5zZWxlY3RfdGFzaygpIHRvIHNpbXBseSByZXR1cm4gdGFza19jcHUocCkgYW5kCisJICogICBub3Qgd29ycnkgYWJvdXQgdGhpcyBnZW5lcmljIGNvbnN0cmFpbnQgXQorCSAqLworCWlmICh1bmxpa2VseSghY3B1bWFza190ZXN0X2NwdShjcHUsICZwLT5jcHVzX2FsbG93ZWQpIHx8CisJCSAgICAgIWNwdV9vbmxpbmUoY3B1KSkpCisJCWNwdSA9IHNlbGVjdF9mYWxsYmFja19ycSh0YXNrX2NwdShwKSwgcCk7CisKKwlyZXR1cm4gY3B1OwogfQogI2VuZGlmCiAKQEAgLTIzNzUsNiArMjQwMywxMCBAQAogCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpCiAJCXJxLT5ucl91bmludGVycnVwdGlibGUtLTsKIAlwLT5zdGF0ZSA9IFRBU0tfV0FLSU5HOworCisJaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZykKKwkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FraW5nKHJxLCBwKTsKKwogCV9fdGFza19ycV91bmxvY2socnEpOwogCiAJY3B1ID0gc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9XQUtFLCB3YWtlX2ZsYWdzKTsKQEAgLTI0MzgsOCArMjQ3MCw4IEBACiAKIAlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXApCi0JCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2VfdXAocnEsIHApOworCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbikKKwkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4ocnEsIHApOwogCiAJaWYgKHVubGlrZWx5KHJxLT5pZGxlX3N0YW1wKSkgewogCQl1NjQgZGVsdGEgPSBycS0+Y2xvY2sgLSBycS0+aWRsZV9zdGFtcDsKQEAgLTI1MzgsMTQgKzI1NzAsNiBAQAogI2lmZGVmIENPTkZJR19QUkVFTVBUX05PVElGSUVSUwogCUlOSVRfSExJU1RfSEVBRCgmcC0+cHJlZW1wdF9ub3RpZmllcnMpOwogI2VuZGlmCi0KLQkvKgotCSAqIFdlIG1hcmsgdGhlIHByb2Nlc3MgYXMgcnVubmluZyBoZXJlLCBidXQgaGF2ZSBub3QgYWN0dWFsbHkKLQkgKiBpbnNlcnRlZCBpdCBvbnRvIHRoZSBydW5xdWV1ZSB5ZXQuIFRoaXMgZ3VhcmFudGVlcyB0aGF0Ci0JICogbm9ib2R5IHdpbGwgYWN0dWFsbHkgcnVuIGl0LCBhbmQgYSBzaWduYWwgb3Igb3RoZXIgZXh0ZXJuYWwKLQkgKiBldmVudCBjYW5ub3Qgd2FrZSBpdCB1cCBhbmQgaW5zZXJ0IGl0IG9uIHRoZSBydW5xdWV1ZSBlaXRoZXIuCi0JICovCi0JcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiB9CiAKIC8qCkBAIC0yNTU2LDYgKzI1ODAsMTIgQEAKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOwogCiAJX19zY2hlZF9mb3JrKHApOworCS8qCisJICogV2UgbWFyayB0aGUgcHJvY2VzcyBhcyB3YWtpbmcgaGVyZS4gVGhpcyBndWFyYW50ZWVzIHRoYXQKKwkgKiBub2JvZHkgd2lsbCBhY3R1YWxseSBydW4gaXQsIGFuZCBhIHNpZ25hbCBvciBvdGhlciBleHRlcm5hbAorCSAqIGV2ZW50IGNhbm5vdCB3YWtlIGl0IHVwIGFuZCBpbnNlcnQgaXQgb24gdGhlIHJ1bnF1ZXVlIGVpdGhlci4KKwkgKi8KKwlwLT5zdGF0ZSA9IFRBU0tfV0FLSU5HOwogCiAJLyoKIAkgKiBSZXZlcnQgdG8gZGVmYXVsdCBwcmlvcml0eS9wb2xpY3kgb24gZm9yayBpZiByZXF1ZXN0ZWQuCkBAIC0yNjI0LDE0ICsyNjU0LDE1IEBACiAJc3RydWN0IHJxICpycTsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7Ci0JQlVHX09OKHAtPnN0YXRlICE9IFRBU0tfUlVOTklORyk7CisJQlVHX09OKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKKwlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCWFjdGl2YXRlX3Rhc2socnEsIHAsIDApOwogCXRyYWNlX3NjaGVkX3dha2V1cF9uZXcocnEsIHAsIDEpOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgV0ZfRk9SSyk7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKQotCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtlX3VwKHJxLCBwKTsKKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4pCisJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKHJxLCBwKTsKICNlbmRpZgogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQpAQCAtMzEwMSwyMSArMzEzMiwzNiBAQAogfQogCiAvKgotICogSWYgZGVzdF9jcHUgaXMgYWxsb3dlZCBmb3IgdGhpcyBwcm9jZXNzLCBtaWdyYXRlIHRoZSB0YXNrIHRvIGl0LgotICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgZm9yY2luZyB0aGUgY3B1X2FsbG93ZWQgbWFzayB0byBvbmx5Ci0gKiBhbGxvdyBkZXN0X2NwdSwgd2hpY2ggd2lsbCBmb3JjZSB0aGUgY3B1IG9udG8gZGVzdF9jcHUuIFRoZW4KLSAqIHRoZSBjcHVfYWxsb3dlZCBtYXNrIGlzIHJlc3RvcmVkLgorICogc2NoZWRfZXhlYyAtIGV4ZWN2ZSgpIGlzIGEgdmFsdWFibGUgYmFsYW5jaW5nIG9wcG9ydHVuaXR5LCBiZWNhdXNlIGF0CisgKiB0aGlzIHBvaW50IHRoZSB0YXNrIGhhcyB0aGUgc21hbGxlc3QgZWZmZWN0aXZlIG1lbW9yeSBhbmQgY2FjaGUgZm9vdHByaW50LgogICovCi1zdGF0aWMgdm9pZCBzY2hlZF9taWdyYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgZGVzdF9jcHUpCit2b2lkIHNjaGVkX2V4ZWModm9pZCkKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50OwogCXN0cnVjdCBtaWdyYXRpb25fcmVxIHJlcTsKKwlpbnQgZGVzdF9jcHUsIHRoaXNfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJxICpycTsKIAorYWdhaW46CisJdGhpc19jcHUgPSBnZXRfY3B1KCk7CisJZGVzdF9jcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX0VYRUMsIDApOworCWlmIChkZXN0X2NwdSA9PSB0aGlzX2NwdSkgeworCQlwdXRfY3B1KCk7CisJCXJldHVybjsKKwl9CisKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCXB1dF9jcHUoKTsKKworCS8qCisJICogc2VsZWN0X3Rhc2tfcnEoKSBjYW4gcmFjZSBhZ2FpbnN0IC0+Y3B1c19hbGxvd2VkCisJICovCiAJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGRlc3RfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKQotCSAgICB8fCB1bmxpa2VseSghY3B1X2FjdGl2ZShkZXN0X2NwdSkpKQotCQlnb3RvIG91dDsKKwkgICAgfHwgdW5saWtlbHkoIWNwdV9hY3RpdmUoZGVzdF9jcHUpKSkgeworCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwkJZ290byBhZ2FpbjsKKwl9CiAKIAkvKiBmb3JjZSB0aGUgcHJvY2VzcyBvbnRvIHRoZSBzcGVjaWZpZWQgQ1BVICovCiAJaWYgKG1pZ3JhdGVfdGFzayhwLCBkZXN0X2NwdSwgJnJlcSkpIHsKQEAgLTMxMzAsMjQgKzMxNzYsMTAgQEAKIAogCQlyZXR1cm47CiAJfQotb3V0OgogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQogCiAvKgotICogc2NoZWRfZXhlYyAtIGV4ZWN2ZSgpIGlzIGEgdmFsdWFibGUgYmFsYW5jaW5nIG9wcG9ydHVuaXR5LCBiZWNhdXNlIGF0Ci0gKiB0aGlzIHBvaW50IHRoZSB0YXNrIGhhcyB0aGUgc21hbGxlc3QgZWZmZWN0aXZlIG1lbW9yeSBhbmQgY2FjaGUgZm9vdHByaW50LgotICovCi12b2lkIHNjaGVkX2V4ZWModm9pZCkKLXsKLQlpbnQgbmV3X2NwdSwgdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0JbmV3X2NwdSA9IHNlbGVjdF90YXNrX3JxKGN1cnJlbnQsIFNEX0JBTEFOQ0VfRVhFQywgMCk7Ci0JcHV0X2NwdSgpOwotCWlmIChuZXdfY3B1ICE9IHRoaXNfY3B1KQotCQlzY2hlZF9taWdyYXRlX3Rhc2soY3VycmVudCwgbmV3X2NwdSk7Ci19Ci0KLS8qCiAgKiBwdWxsX3Rhc2sgLSBtb3ZlIGEgdGFzayBmcm9tIGEgcmVtb3RlIHJ1bnF1ZXVlIHRvIHRoZSBsb2NhbCBydW5xdWV1ZS4KICAqIEJvdGggcnVucXVldWVzIG11c3QgYmUgbG9ja2VkLgogICovCkBAIC01OTExLDE0ICs1OTQzLDE1IEBACiAgKi8KIGJvb2wgdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IGNvbXBsZXRpb24gKngpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMTsKIAotCXNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwogCWlmICgheC0+ZG9uZSkKIAkJcmV0ID0gMDsKIAllbHNlCiAJCXgtPmRvbmUtLTsKLQlzcGluX3VubG9ja19pcnEoJngtPndhaXQubG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24pOwpAQCAtNTkzMywxMiArNTk2NiwxMyBAQAogICovCiBib29sIGNvbXBsZXRpb25fZG9uZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAxOwogCi0Jc3Bpbl9sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7CiAJaWYgKCF4LT5kb25lKQogCQlyZXQgPSAwOwotCXNwaW5fdW5sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjb21wbGV0aW9uX2RvbmUpOwpAQCAtNjQ1Nyw3ICs2NDkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR2YWwgPSAtRVNSQ0g7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlpZiAocCkgewogCQlyZXR2YWwgPSBzZWN1cml0eV90YXNrX2dldHNjaGVkdWxlcihwKTsKQEAgLTY0NjUsNyArNjQ5OSw3IEBACiAJCQlyZXR2YWwgPSBwLT5wb2xpY3kKIAkJCQl8IChwLT5zY2hlZF9yZXNldF9vbl9mb3JrID8gU0NIRURfUkVTRVRfT05fRk9SSyA6IDApOwogCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjQ4Myw3ICs2NTE3LDcgQEAKIAlpZiAoIXBhcmFtIHx8IHBpZCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKIAlyZXR2YWwgPSAtRVNSQ0g7CiAJaWYgKCFwKQpAQCAtNjQ5NCw3ICs2NTI4LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJbHAuc2NoZWRfcHJpb3JpdHkgPSBwLT5ydF9wcmlvcml0eTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKgogCSAqIFRoaXMgb25lIG1pZ2h0IHNsZWVwLCB3ZSBjYW5ub3QgZG8gaXQgd2l0aCBhIHNwaW5sb2NrIGhlbGQgLi4uCkBAIC02NTA0LDcgKzY1MzgsNyBAQAogCXJldHVybiByZXR2YWw7CiAKIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY1MTUsMjIgKzY1NDksMTggQEAKIAlpbnQgcmV0dmFsOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAKIAlwID0gZmluZF9wcm9jZXNzX2J5X3BpZChwaWQpOwogCWlmICghcCkgewotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlwdXRfb25saW5lX2NwdXMoKTsKIAkJcmV0dXJuIC1FU1JDSDsKIAl9CiAKLQkvKgotCSAqIEl0IGlzIG5vdCBzYWZlIHRvIGNhbGwgc2V0X2NwdXNfYWxsb3dlZCB3aXRoIHRoZQotCSAqIHRhc2tsaXN0X2xvY2sgaGVsZC4gV2Ugd2lsbCBidW1wIHRoZSB0YXNrX3N0cnVjdCdzCi0JICogdXNhZ2UgY291bnQgYW5kIHRoZW4gZHJvcCB0YXNrbGlzdF9sb2NrLgotCSAqLworCS8qIFByZXZlbnQgcCBnb2luZyBhd2F5ICovCiAJZ2V0X3Rhc2tfc3RydWN0KHApOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmICghYWxsb2NfY3B1bWFza192YXIoJmNwdXNfYWxsb3dlZCwgR0ZQX0tFUk5FTCkpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKQEAgLTY2MTYsNyArNjY0Niw3IEBACiAJaW50IHJldHZhbDsKIAogCWdldF9vbmxpbmVfY3B1cygpOwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCiAJcmV0dmFsID0gLUVTUkNIOwogCXAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CkBAIC02NjMyLDcgKzY2NjIsNyBAQAogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogCiBvdXRfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlwdXRfb25saW5lX2NwdXMoKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC02ODc2LDcgKzY5MDYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHZhbCA9IC1FU1JDSDsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlwID0gZmluZF9wcm9jZXNzX2J5X3BpZChwaWQpOwogCWlmICghcCkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNjg4OSwxMyArNjkxOSwxMyBAQAogCXRpbWVfc2xpY2UgPSBwLT5zY2hlZF9jbGFzcy0+Z2V0X3JyX2ludGVydmFsKHJxLCBwKTsKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIAotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlqaWZmaWVzX3RvX3RpbWVzcGVjKHRpbWVfc2xpY2UsICZ0KTsKIAlyZXR2YWwgPSBjb3B5X3RvX3VzZXIoaW50ZXJ2YWwsICZ0LCBzaXplb2YodCkpID8gLUVGQVVMVCA6IDA7CiAJcmV0dXJuIHJldHZhbDsKIAogb3V0X3VubG9jazoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjk4Niw2ICs3MDE2LDcgQEAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAKIAlfX3NjaGVkX2ZvcmsoaWRsZSk7CisJaWRsZS0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJaWRsZS0+c2UuZXhlY19zdGFydCA9IHNjaGVkX2Nsb2NrKCk7CiAKIAljcHVtYXNrX2NvcHkoJmlkbGUtPmNwdXNfYWxsb3dlZCwgY3B1bWFza19vZihjcHUpKTsKQEAgLTcxMDAsNyArNzEzMSwyMyBAQAogCXN0cnVjdCBycSAqcnE7CiAJaW50IHJldCA9IDA7CiAKKwkvKgorCSAqIFNpbmNlIHdlIHJlbHkgb24gd2FrZS11cHMgdG8gbWlncmF0ZSBzbGVlcGluZyB0YXNrcywgZG9uJ3QgY2hhbmdlCisJICogdGhlIC0+Y3B1c19hbGxvd2VkIG1hc2sgZnJvbSB1bmRlciB3YWtpbmcgdGFza3MsIHdoaWNoIHdvdWxkIGJlCisJICogcG9zc2libGUgd2hlbiB3ZSBjaGFuZ2UgcnEtPmxvY2sgaW4gdHR3dSgpLCBzbyBzeW5jaHJvbml6ZSBhZ2FpbnN0CisJICogVEFTS19XQUtJTkcgdG8gYXZvaWQgdGhhdC4KKwkgKi8KK2FnYWluOgorCXdoaWxlIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykKKwkJY3B1X3JlbGF4KCk7CisKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCisJaWYgKHAtPnN0YXRlID09IFRBU0tfV0FLSU5HKSB7CisJCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCQlnb3RvIGFnYWluOworCX0KKwogCWlmICghY3B1bWFza19pbnRlcnNlY3RzKG5ld19tYXNrLCBjcHVfYWN0aXZlX21hc2spKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtNzE1Niw3ICs3MjAzLDcgQEAKIHN0YXRpYyBpbnQgX19taWdyYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3JjX2NwdSwgaW50IGRlc3RfY3B1KQogewogCXN0cnVjdCBycSAqcnFfZGVzdCwgKnJxX3NyYzsKLQlpbnQgcmV0ID0gMCwgb25fcnE7CisJaW50IHJldCA9IDA7CiAKIAlpZiAodW5saWtlbHkoIWNwdV9hY3RpdmUoZGVzdF9jcHUpKSkKIAkJcmV0dXJuIHJldDsKQEAgLTcxNzIsMTIgKzcyMTksMTMgQEAKIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZGVzdF9jcHUsICZwLT5jcHVzX2FsbG93ZWQpKQogCQlnb3RvIGZhaWw7CiAKLQlvbl9ycSA9IHAtPnNlLm9uX3JxOwotCWlmIChvbl9ycSkKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBvbiBhIHJxLCB0aGUgbmV4dCB3YWtlLXVwIHdpbGwgZW5zdXJlIHdlJ3JlCisJICogcGxhY2VkIHByb3Blcmx5LgorCSAqLworCWlmIChwLT5zZS5vbl9ycSkgewogCQlkZWFjdGl2YXRlX3Rhc2socnFfc3JjLCBwLCAwKTsKLQotCXNldF90YXNrX2NwdShwLCBkZXN0X2NwdSk7Ci0JaWYgKG9uX3JxKSB7CisJCXNldF90YXNrX2NwdShwLCBkZXN0X2NwdSk7CiAJCWFjdGl2YXRlX3Rhc2socnFfZGVzdCwgcCwgMCk7CiAJCWNoZWNrX3ByZWVtcHRfY3VycihycV9kZXN0LCBwLCAwKTsKIAl9CkBAIC03MjczLDM3ICs3MzIxLDEwIEBACiBzdGF0aWMgdm9pZCBtb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGludCBkZWFkX2NwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCWludCBkZXN0X2NwdTsKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbm9kZW1hc2sgPSBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoZGVhZF9jcHUpKTsKIAogYWdhaW46Ci0JLyogTG9vayBmb3IgYWxsb3dlZCwgb25saW5lIENQVSBpbiBzYW1lIG5vZGUuICovCi0JZm9yX2VhY2hfY3B1X2FuZChkZXN0X2NwdSwgbm9kZW1hc2ssIGNwdV9hY3RpdmVfbWFzaykKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZGVzdF9jcHUsICZwLT5jcHVzX2FsbG93ZWQpKQotCQkJZ290byBtb3ZlOworCWRlc3RfY3B1ID0gc2VsZWN0X2ZhbGxiYWNrX3JxKGRlYWRfY3B1LCBwKTsKIAotCS8qIEFueSBhbGxvd2VkLCBvbmxpbmUgQ1BVPyAqLwotCWRlc3RfY3B1ID0gY3B1bWFza19hbnlfYW5kKCZwLT5jcHVzX2FsbG93ZWQsIGNwdV9hY3RpdmVfbWFzayk7Ci0JaWYgKGRlc3RfY3B1IDwgbnJfY3B1X2lkcykKLQkJZ290byBtb3ZlOwotCi0JLyogTm8gbW9yZSBNci4gTmljZSBHdXkuICovCi0JaWYgKGRlc3RfY3B1ID49IG5yX2NwdV9pZHMpIHsKLQkJY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQocCwgJnAtPmNwdXNfYWxsb3dlZCk7Ci0JCWRlc3RfY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdV9hY3RpdmVfbWFzaywgJnAtPmNwdXNfYWxsb3dlZCk7Ci0KLQkJLyoKLQkJICogRG9uJ3QgdGVsbCB0aGVtIGFib3V0IG1vdmluZyBleGl0aW5nIHRhc2tzIG9yCi0JCSAqIGtlcm5lbCB0aHJlYWRzIChib3RoIG1tIE5VTEwpLCBzaW5jZSB0aGV5IG5ldmVyCi0JCSAqIGxlYXZlIGtlcm5lbC4KLQkJICovCi0JCWlmIChwLT5tbSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInByb2Nlc3MgJWQgKCVzKSBubyAiCi0JCQkgICAgICAgImxvbmdlciBhZmZpbmUgdG8gY3B1JWRcbiIsCi0JCQkgICAgICAgdGFza19waWRfbnIocCksIHAtPmNvbW0sIGRlYWRfY3B1KTsKLQkJfQotCX0KLQotbW92ZToKIAkvKiBJdCBjYW4gaGF2ZSBhZmZpbml0eSBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgY2hvb3NpbmcuICovCiAJaWYgKHVubGlrZWx5KCFfX21pZ3JhdGVfdGFza19pcnEocCwgZGVhZF9jcHUsIGRlc3RfY3B1KSkpCiAJCWdvdG8gYWdhaW47CkBAIC05NjY4LDcgKzk2ODksNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUAogc3RhdGljIGlubGluZSBpbnQgcHJlZW1wdF9jb3VudF9lcXVhbHMoaW50IHByZWVtcHRfb2Zmc2V0KQogewotCWludCBuZXN0ZWQgPSBwcmVlbXB0X2NvdW50KCkgJiB+UFJFRU1QVF9BQ1RJVkU7CisJaW50IG5lc3RlZCA9IChwcmVlbXB0X2NvdW50KCkgJiB+UFJFRU1QVF9BQ1RJVkUpICsgcmN1X3ByZWVtcHRfZGVwdGgoKTsKIAogCXJldHVybiAobmVzdGVkID09IFBSRUVNUFRfSU5BVE9NSUNfQkFTRSArIHByZWVtcHRfb2Zmc2V0KTsKIH0KQEAgLTEwMDgzLDcgKzEwMTA0LDcgQEAKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJaWYgKHRzay0+c2NoZWRfY2xhc3MtPm1vdmVkX2dyb3VwKQotCQl0c2stPnNjaGVkX2NsYXNzLT5tb3ZlZF9ncm91cCh0c2spOworCQl0c2stPnNjaGVkX2NsYXNzLT5tb3ZlZF9ncm91cCh0c2ssIG9uX3JxKTsKICNlbmRpZgogCiAJaWYgKHVubGlrZWx5KHJ1bm5pbmcpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2Nsb2NrLmMgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwppbmRleCA0NzljZTU2Li41YjQ5NjEzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY2xvY2suYworKysgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwpAQCAtMjM2LDYgKzIzNiwxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWRfY2xvY2tfaWRsZV93YWtldXBfZXZlbnQpOwogCit1bnNpZ25lZCBsb25nIGxvbmcgY3B1X2Nsb2NrKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGNsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY2xvY2sgPSBzY2hlZF9jbG9ja19jcHUoY3B1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gY2xvY2s7Cit9CisKICNlbHNlIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCiAKIHZvaWQgc2NoZWRfY2xvY2tfaW5pdCh2b2lkKQpAQCAtMjUxLDE3ICsyNjMsMTIgQEAKIAlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBjcHVfY2xvY2soaW50IGNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2s7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljbG9jayA9IHNjaGVkX2Nsb2NrX2NwdShjcHUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiBjbG9jazsKKwlyZXR1cm4gc2NoZWRfY2xvY2tfY3B1KGNwdSk7CiB9CisKKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLworCiBFWFBPUlRfU1lNQk9MX0dQTChjcHVfY2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNWJlZGY2ZS4uNDJhYzNjOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC01MTAsNiArNTEwLDcgQEAKIAljdXJyLT5zdW1fZXhlY19ydW50aW1lICs9IGRlbHRhX2V4ZWM7CiAJc2NoZWRzdGF0X2FkZChjZnNfcnEsIGV4ZWNfY2xvY2ssIGRlbHRhX2V4ZWMpOwogCWRlbHRhX2V4ZWNfd2VpZ2h0ZWQgPSBjYWxjX2RlbHRhX2ZhaXIoZGVsdGFfZXhlYywgY3Vycik7CisKIAljdXJyLT52cnVudGltZSArPSBkZWx0YV9leGVjX3dlaWdodGVkOwogCXVwZGF0ZV9taW5fdnJ1bnRpbWUoY2ZzX3JxKTsKIH0KQEAgLTc2NSwxNiArNzY2LDI2IEBACiAJc2UtPnZydW50aW1lID0gdnJ1bnRpbWU7CiB9CiAKKyNkZWZpbmUgRU5RVUVVRV9XQUtFVVAJMQorI2RlZmluZSBFTlFVRVVFX01JR1JBVEUgMgorCiBzdGF0aWMgdm9pZAotZW5xdWV1ZV9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgaW50IHdha2V1cCkKK2VucXVldWVfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBmbGFncykKIHsKIAkvKgorCSAqIFVwZGF0ZSB0aGUgbm9ybWFsaXplZCB2cnVudGltZSBiZWZvcmUgdXBkYXRpbmcgbWluX3ZydW50aW1lCisJICogdGhyb3VnaCBjYWxsaWcgdXBkYXRlX2N1cnIoKS4KKwkgKi8KKwlpZiAoIShmbGFncyAmIEVOUVVFVUVfV0FLRVVQKSB8fCAoZmxhZ3MgJiBFTlFVRVVFX01JR1JBVEUpKQorCQlzZS0+dnJ1bnRpbWUgKz0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7CisKKwkvKgogCSAqIFVwZGF0ZSBydW4tdGltZSBzdGF0aXN0aWNzIG9mIHRoZSAnY3VycmVudCcuCiAJICovCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKIAlhY2NvdW50X2VudGl0eV9lbnF1ZXVlKGNmc19ycSwgc2UpOwogCi0JaWYgKHdha2V1cCkgeworCWlmIChmbGFncyAmIEVOUVVFVUVfV0FLRVVQKSB7CiAJCXBsYWNlX2VudGl0eShjZnNfcnEsIHNlLCAwKTsKIAkJZW5xdWV1ZV9zbGVlcGVyKGNmc19ycSwgc2UpOwogCX0KQEAgLTgyOCw2ICs4MzksMTQgQEAKIAkJX19kZXF1ZXVlX2VudGl0eShjZnNfcnEsIHNlKTsKIAlhY2NvdW50X2VudGl0eV9kZXF1ZXVlKGNmc19ycSwgc2UpOwogCXVwZGF0ZV9taW5fdnJ1bnRpbWUoY2ZzX3JxKTsKKworCS8qCisJICogTm9ybWFsaXplIHRoZSBlbnRpdHkgYWZ0ZXIgdXBkYXRpbmcgdGhlIG1pbl92cnVudGltZSBiZWNhdXNlIHRoZQorCSAqIHVwZGF0ZSBjYW4gcmVmZXIgdG8gdGhlIC0+Y3VyciBpdGVtIGFuZCB3ZSBuZWVkIHRvIHJlZmxlY3QgdGhpcworCSAqIG1vdmVtZW50IGluIG91ciBub3JtYWxpemVkIHBvc2l0aW9uLgorCSAqLworCWlmICghc2xlZXApCisJCXNlLT52cnVudGltZSAtPSBjZnNfcnEtPm1pbl92cnVudGltZTsKIH0KIAogLyoKQEAgLTEwMzgsMTMgKzEwNTcsMTkgQEAKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2U7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3YWtldXApCisJCWZsYWdzIHw9IEVOUVVFVUVfV0FLRVVQOworCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykKKwkJZmxhZ3MgfD0gRU5RVUVVRV9NSUdSQVRFOwogCiAJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7CiAJCWlmIChzZS0+b25fcnEpCiAJCQlicmVhazsKIAkJY2ZzX3JxID0gY2ZzX3JxX29mKHNlKTsKLQkJZW5xdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSwgd2FrZXVwKTsKLQkJd2FrZXVwID0gMTsKKwkJZW5xdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSwgZmxhZ3MpOworCQlmbGFncyA9IEVOUVVFVUVfV0FLRVVQOwogCX0KIAogCWhydGlja191cGRhdGUocnEpOwpAQCAtMTEyMCw2ICsxMTQ1LDE0IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKK3N0YXRpYyB2b2lkIHRhc2tfd2FraW5nX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOworCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGNmc19ycV9vZihzZSk7CisKKwlzZS0+dnJ1bnRpbWUgLT0gY2ZzX3JxLT5taW5fdnJ1bnRpbWU7Cit9CisKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogLyoKICAqIGVmZmVjdGl2ZV9sb2FkKCkgY2FsY3VsYXRlcyB0aGUgbG9hZCBjaGFuZ2UgYXMgc2VlbiBmcm9tIHRoZSByb290X3Rhc2tfZ3JvdXAKQEAgLTE0MjksNiArMTQ2Miw5IEBACiAJfQogCiAJZm9yX2VhY2hfZG9tYWluKGNwdSwgdG1wKSB7CisJCWlmICghKHRtcC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQorCQkJY29udGludWU7CisKIAkJLyoKIAkJICogSWYgcG93ZXIgc2F2aW5ncyBsb2dpYyBpcyBlbmFibGVkIGZvciBhIGRvbWFpbiwgc2VlIGlmIHdlCiAJCSAqIGFyZSBub3Qgb3ZlcmxvYWRlZCwgaWYgc28sIGRvbid0IGJhbGFuY2Ugd2lkZXIuCkBAIC0xOTc1LDYgKzIwMTEsOCBAQAogCQlyZXNjaGVkX3Rhc2socnEtPmN1cnIpOwogCX0KIAorCXNlLT52cnVudGltZSAtPSBjZnNfcnEtPm1pbl92cnVudGltZTsKKwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yMDI4LDEyICsyMDY2LDEzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotc3RhdGljIHZvaWQgbW92ZWRfZ3JvdXBfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgdm9pZCBtb3ZlZF9ncm91cF9mYWlyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG9uX3JxKQogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKHApOwogCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKLQlwbGFjZV9lbnRpdHkoY2ZzX3JxLCAmcC0+c2UsIDEpOworCWlmICghb25fcnEpCisJCXBsYWNlX2VudGl0eShjZnNfcnEsICZwLT5zZSwgMSk7CiB9CiAjZW5kaWYKIApAQCAtMjA3Myw2ICsyMTEyLDggQEAKIAkubW92ZV9vbmVfdGFzawkJPSBtb3ZlX29uZV90YXNrX2ZhaXIsCiAJLnJxX29ubGluZQkJPSBycV9vbmxpbmVfZmFpciwKIAkucnFfb2ZmbGluZQkJPSBycV9vZmZsaW5lX2ZhaXIsCisKKwkudGFza193YWtpbmcJCT0gdGFza193YWtpbmdfZmFpciwKICNlbmRpZgogCiAJLnNldF9jdXJyX3Rhc2sgICAgICAgICAgPSBzZXRfY3Vycl90YXNrX2ZhaXIsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGQyZWEyODIuLmY0ODMyOGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogICogSWYgd2UgYXJlIG5vdCBydW5uaW5nIGFuZCB3ZSBhcmUgbm90IGdvaW5nIHRvIHJlc2NoZWR1bGUgc29vbiwgd2Ugc2hvdWxkCiAgKiB0cnkgdG8gcHVzaCB0YXNrcyBhd2F5IG5vdwogICovCi1zdGF0aWMgdm9pZCB0YXNrX3dha2VfdXBfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgdGFza193b2tlbl9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaWYgKCF0YXNrX3J1bm5pbmcocnEsIHApICYmCiAJICAgICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpICYmCkBAIC0xNzUzLDcgKzE3NTMsNyBAQAogCS5ycV9vZmZsaW5lICAgICAgICAgICAgID0gcnFfb2ZmbGluZV9ydCwKIAkucHJlX3NjaGVkdWxlCQk9IHByZV9zY2hlZHVsZV9ydCwKIAkucG9zdF9zY2hlZHVsZQkJPSBwb3N0X3NjaGVkdWxlX3J0LAotCS50YXNrX3dha2VfdXAJCT0gdGFza193YWtlX3VwX3J0LAorCS50YXNrX3dva2VuCQk9IHRhc2tfd29rZW5fcnQsCiAJLnN3aXRjaGVkX2Zyb20JCT0gc3dpdGNoZWRfZnJvbV9ydCwKICNlbmRpZgogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMTgxNGU2OC4uOTM0YWU1ZSAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMjE4LDEzICsyMTgsMTMgQEAKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CiAKIAkvKgotCSAqIFdlIHdvbid0IGdldCBwcm9ibGVtcyB3aXRoIHRoZSB0YXJnZXQncyBVSUQgY2hhbmdpbmcgdW5kZXIgdXMKLQkgKiBiZWNhdXNlIGNoYW5naW5nIGl0IHJlcXVpcmVzIFJDVSBiZSB1c2VkLCBhbmQgaWYgdCAhPSBjdXJyZW50LCB0aGUKLQkgKiBjYWxsZXIgbXVzdCBiZSBob2xkaW5nIHRoZSBSQ1UgcmVhZGxvY2sgKGJ5IHdheSBvZiBhIHNwaW5sb2NrKSBhbmQKLQkgKiB3ZSB1c2UgUkNVIHByb3RlY3Rpb24gaGVyZQorCSAqIFByb3RlY3QgYWNjZXNzIHRvIEB0IGNyZWRlbnRpYWxzLiBUaGlzIGNhbiBnbyBhd2F5IHdoZW4gYWxsCisJICogY2FsbGVycyBob2xkIHJjdSByZWFkIGxvY2suCiAJICovCisJcmN1X3JlYWRfbG9jaygpOwogCXVzZXIgPSBnZXRfdWlkKF9fdGFza19jcmVkKHQpLT51c2VyKTsKIAlhdG9taWNfaW5jKCZ1c2VyLT5zaWdwZW5kaW5nKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChvdmVycmlkZV9ybGltaXQgfHwKIAkgICAgYXRvbWljX3JlYWQoJnVzZXItPnNpZ3BlbmRpbmcpIDw9CkBAIC05NzksNyArOTc5LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJCXVuc2lnbmVkIGNoYXIgaW5zbjsKIAotCQkJX19nZXRfdXNlcihpbnNuLCAodW5zaWduZWQgY2hhciAqKShyZWdzLT5pcCArIGkpKTsKKwkJCWlmIChnZXRfdXNlcihpbnNuLCAodW5zaWduZWQgY2hhciAqKShyZWdzLT5pcCArIGkpKSkKKwkJCQlicmVhazsKIAkJCXByaW50aygiJTAyeCAiLCBpbnNuKTsKIAkJfQogCX0KQEAgLTExNzksMTEgKzExODAsMTIgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJY29uc3Qgc3RydWN0IGNyZWQgKnBjcmVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXZhbGlkX3NpZ25hbChzaWcpKQogCQlyZXR1cm4gcmV0OwogCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IHBpZF90YXNrKHBpZCwgUElEVFlQRV9QSUQpOwogCWlmICghcCkgewogCQlyZXQgPSAtRVNSQ0g7CkBAIC0xMTk5LDE0ICsxMjAxLDE2IEBACiAJcmV0ID0gc2VjdXJpdHlfdGFza19raWxsKHAsIGluZm8sIHNpZywgc2VjaWQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQlpZiAoc2lnICYmIHAtPnNpZ2hhbmQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJcmV0ID0gX19zZW5kX3NpZ25hbChzaWcsIGluZm8sIHAsIDEsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisKKwlpZiAoc2lnKSB7CisJCWlmIChsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpKSB7CisJCQlyZXQgPSBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgcCwgMSwgMCk7CisJCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CisJCX0gZWxzZQorCQkJcmV0ID0gLUVTUkNIOwogCX0KIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraWxsX3BpZF9pbmZvX2FzX3VpZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMjBjY2ZiNS4uMjZhNmI3MyAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJaWYgKG5pY2V2YWwgPiAxOSkKIAkJbmljZXZhbCA9IDE5OwogCisJcmN1X3JlYWRfbG9jaygpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJc3dpdGNoICh3aGljaCkgewogCQljYXNlIFBSSU9fUFJPQ0VTUzoKQEAgLTE5OSw2ICsyMDAsNyBAQAogCX0KIG91dF91bmxvY2s6CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCA0NWU0YmVmLi44YTY4YjI0IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCQkuZGF0YQkJPSAmc3lzY3RsX21heF9tYXBfY291bnQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9tYXhfbWFwX2NvdW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKIAkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogI2Vsc2UKQEAgLTEyMTQsNiArMTIxNCw3IEBACiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19NTVUKIAl7CiAJCS5wcm9jbmFtZQk9ICJtbWFwX21pbl9hZGRyIiwKIAkJLmRhdGEJCT0gJmRhY19tbWFwX21pbl9hZGRyLApAQCAtMTIyMSw2ICsxMjIyLDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IG1tYXBfbWluX2FkZHJfaGFuZGxlciwKIAl9LAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX05VTUEKIAl7CiAJCS5wcm9jbmFtZQk9ICJudW1hX3pvbmVsaXN0X29yZGVyIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMgYi9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCmluZGV4IDExMjUzM2QuLjhmNWQxNmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKKysrIGIva2VybmVsL3N5c2N0bF9iaW5hcnkuYwpAQCAtMTQxNyw2ICsxNDE3LDM1IEBACiAJcmV0dXJuOwogfQogCisjZGVmaW5lIFdBUk5fT05DRV9IQVNIX0JJVFMgOAorI2RlZmluZSBXQVJOX09OQ0VfSEFTSF9TSVpFICgxPDxXQVJOX09OQ0VfSEFTSF9CSVRTKQorCitzdGF0aWMgREVDTEFSRV9CSVRNQVAod2Fybl9vbmNlX2JpdG1hcCwgV0FSTl9PTkNFX0hBU0hfU0laRSk7CisKKyNkZWZpbmUgRk5WMzJfT0ZGU0VUIDIxNjYxMzYyNjFVCisjZGVmaW5lIEZOVjMyX1BSSU1FIDB4MDEwMDAxOTMKKworLyoKKyAqIFByaW50IGVhY2ggbGVnYWN5IHN5c2N0bCAoYXBwcm94aW1hdGVseSkgb25seSBvbmNlLgorICogVG8gYXZvaWQgbWFraW5nIHRoZSB0YWJsZXMgbm9uLWNvbnN0IHVzZSBhIGV4dGVybmFsCisgKiBoYXNoLXRhYmxlIGluc3RlYWQuCisgKiBXb3JzdCBjYXNlIGhhc2ggY29sbGlzaW9uOiA2LCBidXQgdmVyeSByYXJlbHkuCisgKiBOT1RFISBXZSBkb24ndCB1c2UgdGhlIFNNUC1zYWZlIGJpdCB0ZXN0cy4gV2Ugc2ltcGx5CisgKiBkb24ndCBjYXJlIGVub3VnaC4KKyAqLworc3RhdGljIHZvaWQgd2Fybl9vbl9iaW50YWJsZShjb25zdCBpbnQgKm5hbWUsIGludCBubGVuKQoreworCWludCBpOworCXUzMiBoYXNoID0gRk5WMzJfT0ZGU0VUOworCisJZm9yIChpID0gMDsgaSA8IG5sZW47IGkrKykKKwkJaGFzaCA9IChoYXNoIF4gbmFtZVtpXSkgKiBGTlYzMl9QUklNRTsKKwloYXNoICU9IFdBUk5fT05DRV9IQVNIX1NJWkU7CisJaWYgKF9fdGVzdF9hbmRfc2V0X2JpdChoYXNoLCB3YXJuX29uY2VfYml0bWFwKSkKKwkJcmV0dXJuOworCWRlcHJlY2F0ZWRfc3lzY3RsX3dhcm5pbmcobmFtZSwgbmxlbik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGRvX3N5c2N0bChpbnQgX191c2VyICphcmdzX25hbWUsIGludCBubGVuLAogCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBvbGRsZW4sIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0xNDMxLDcgKzE0NjAsNyBAQAogCQlpZiAoZ2V0X3VzZXIobmFtZVtpXSwgYXJnc19uYW1lICsgaSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRlcHJlY2F0ZWRfc3lzY3RsX3dhcm5pbmcobmFtZSwgbmxlbik7CisJd2Fybl9vbl9iaW50YWJsZShuYW1lLCBubGVuKTsKIAogCXJldHVybiBiaW5hcnlfc3lzY3RsKG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVuLCBuZXd2YWwsIG5ld2xlbik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS5jIGIva2VybmVsL3RpbWUuYwppbmRleCBjNjMyNGQ5Li44MDQ3OTgwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS5jCisrKyBiL2tlcm5lbC90aW1lLmMKQEAgLTEzNiw2ICsxMzYsNyBAQAogCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAl3YWxsX3RvX21vbm90b25pYy50dl9zZWMgLT0gc3lzX3R6LnR6X21pbnV0ZXN3ZXN0ICogNjA7CiAJeHRpbWUudHZfc2VjICs9IHN5c190ei50el9taW51dGVzd2VzdCAqIDYwOworCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAljbG9ja193YXNfc2V0KCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwppbmRleCAzZDVmYzBmLi42Zjc0MGQ5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTIzOCw4ICsyMzgsOSBAQAogICovCiB2b2lkIGNsb2NrZXZlbnRzX25vdGlmeSh1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICp0bXA7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNwdTsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOwogCWNsb2NrZXZlbnRzX2RvX25vdGlmeShyZWFzb24sIGFyZyk7CkBAIC0yNTAsOCArMjUxLDE5IEBACiAJCSAqIFVucmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGRldmljZXMgd2hpY2ggd2VyZQogCQkgKiByZWxlYXNlZCBmcm9tIHRoZSB1c2VycyBpbiB0aGUgbm90aWZ5IGNoYWluLgogCQkgKi8KLQkJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIHRtcCwgJmNsb2NrZXZlbnRzX3JlbGVhc2VkKQotCQkJbGlzdF9kZWwobm9kZSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgJmNsb2NrZXZlbnRzX3JlbGVhc2VkLCBsaXN0KQorCQkJbGlzdF9kZWwoJmRldi0+bGlzdCk7CisJCS8qCisJCSAqIE5vdyBjaGVjayB3aGV0aGVyIHRoZSBDUFUgaGFzIGxlZnQgdW51c2VkIHBlciBjcHUgZGV2aWNlcworCQkgKi8KKwkJY3B1ID0gKigoaW50ICopYXJnKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmY2xvY2tldmVudF9kZXZpY2VzLCBsaXN0KSB7CisJCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRldi0+Y3B1bWFzaykgJiYKKwkJCSAgICBjcHVtYXNrX3dlaWdodChkZXYtPmNwdW1hc2spID09IDEpIHsKKwkJCQlCVUdfT04oZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1VOVVNFRCk7CisJCQkJbGlzdF9kZWwoJmRldi0+bGlzdCk7CisJCQl9CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBhZjQxMzVmLi43ZmFhYTMyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTE2NSw2ICsxNjUsMTMgQEAKIC8qIGZsYWcgZm9yIGlmIHRpbWVrZWVwaW5nIGlzIHN1c3BlbmRlZCAqLwogaW50IF9fcmVhZF9tb3N0bHkgdGltZWtlZXBpbmdfc3VzcGVuZGVkOwogCitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHh0aW1lX2NhY2hlIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKK3ZvaWQgdXBkYXRlX3h0aW1lX2NhY2hlKHU2NCBuc2VjKQoreworCXh0aW1lX2NhY2hlID0geHRpbWU7CisJdGltZXNwZWNfYWRkX25zKCZ4dGltZV9jYWNoZSwgbnNlYyk7Cit9CisKIC8qIG11c3QgaG9sZCB4dGltZV9sb2NrICovCiB2b2lkIHRpbWVrZWVwaW5nX2xlYXBfaW5zZXJ0KGludCBsZWFwc2Vjb25kKQogewpAQCAtMzI1LDYgKzMzMiw4IEBACiAKIAl4dGltZSA9ICp0djsKIAorCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKKwogCXRpbWVrZWVwZXIubnRwX2Vycm9yID0gMDsKIAludHBfY2xlYXIoKTsKIApAQCAtNTUwLDYgKzU1OSw3IEBACiAJfQogCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKIAkJCQktYm9vdC50dl9zZWMsIC1ib290LnR2X25zZWMpOworCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAl0b3RhbF9zbGVlcF90aW1lLnR2X3NlYyA9IDA7CiAJdG90YWxfc2xlZXBfdGltZS50dl9uc2VjID0gMDsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwpAQCAtNTgzLDYgKzU5Myw3IEBACiAJCXdhbGxfdG9fbW9ub3RvbmljID0gdGltZXNwZWNfc3ViKHdhbGxfdG9fbW9ub3RvbmljLCB0cyk7CiAJCXRvdGFsX3NsZWVwX3RpbWUgPSB0aW1lc3BlY19hZGRfc2FmZSh0b3RhbF9zbGVlcF90aW1lLCB0cyk7CiAJfQorCXVwZGF0ZV94dGltZV9jYWNoZSgwKTsKIAkvKiByZS1iYXNlIHRoZSBsYXN0IGN5Y2xlIHZhbHVlICovCiAJdGltZWtlZXBlci5jbG9jay0+Y3ljbGVfbGFzdCA9IHRpbWVrZWVwZXIuY2xvY2stPnJlYWQodGltZWtlZXBlci5jbG9jayk7CiAJdGltZWtlZXBlci5udHBfZXJyb3IgPSAwOwpAQCAtNzIyLDYgKzczMyw3IEBACiAJCQkJdGltZWtlZXBlci5udHBfZXJyb3Jfc2hpZnQ7CiB9CiAKKwogLyoqCiAgKiBsb2dhcml0aG1pY19hY2N1bXVsYXRpb24gLSBzaGlmdGVkIGFjY3VtdWxhdGlvbiBvZiBjeWNsZXMKICAqCkBAIC03NjUsNiArNzc3LDcgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCisKIC8qKgogICogdXBkYXRlX3dhbGxfdGltZSAtIFVzZXMgdGhlIGN1cnJlbnQgY2xvY2tzb3VyY2UgdG8gaW5jcmVtZW50IHRoZSB3YWxsIHRpbWUKICAqCkBAIC03NzQsNiArNzg3LDcgQEAKIHsKIAlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNsb2NrOwogCWN5Y2xlX3Qgb2Zmc2V0OworCXU2NCBuc2VjczsKIAlpbnQgc2hpZnQgPSAwLCBtYXhzaGlmdDsKIAogCS8qIE1ha2Ugc3VyZSB3ZSdyZSBmdWxseSByZXN1bWVkOiAqLwpAQCAtODM5LDYgKzg1Myw5IEBACiAJdGltZWtlZXBlci5udHBfZXJyb3IgKz0JdGltZWtlZXBlci54dGltZV9uc2VjIDw8CiAJCQkJdGltZWtlZXBlci5udHBfZXJyb3Jfc2hpZnQ7CiAKKwluc2VjcyA9IGNsb2Nrc291cmNlX2N5YzJucyhvZmZzZXQsIHRpbWVrZWVwZXIubXVsdCwgdGltZWtlZXBlci5zaGlmdCk7CisJdXBkYXRlX3h0aW1lX2NhY2hlKG5zZWNzKTsKKwogCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG5ldyBjbG9ja3NvdXJjZSB0byB1c2UgKi8KIAl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCB0aW1la2VlcGVyLmNsb2NrLCB0aW1la2VlcGVyLm11bHQpOwogfQpAQCAtODc1LDEzICs4OTIsMTMgQEAKIAogdW5zaWduZWQgbG9uZyBnZXRfc2Vjb25kcyh2b2lkKQogewotCXJldHVybiB4dGltZS50dl9zZWM7CisJcmV0dXJuIHh0aW1lX2NhY2hlLnR2X3NlYzsKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3NlY29uZHMpOwogCiBzdHJ1Y3QgdGltZXNwZWMgX19jdXJyZW50X2tlcm5lbF90aW1lKHZvaWQpCiB7Ci0JcmV0dXJuIHh0aW1lOworCXJldHVybiB4dGltZV9jYWNoZTsKIH0KIAogc3RydWN0IHRpbWVzcGVjIGN1cnJlbnRfa2VybmVsX3RpbWUodm9pZCkKQEAgLTg5MSw3ICs5MDgsOCBAQAogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJbm93ID0geHRpbWU7CisKKwkJbm93ID0geHRpbWVfY2FjaGU7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKIAlyZXR1cm4gbm93OwpAQCAtOTA1LDcgKzkyMyw4IEBACiAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCQlub3cgPSB4dGltZTsKKworCQlub3cgPSB4dGltZV9jYWNoZTsKIAkJbW9ubyA9IHdhbGxfdG9fbW9ub3RvbmljOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggMjgyNjU2My4uYmRmYjhkZCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtMjM3LDEwICsyMzcsMTAgQEAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKIAlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2UoKSwgLTEpOwogCVNFUV9wcmludGYobSwgInRpY2tfYnJvYWRjYXN0X21hc2s6ICUwOGx4XG4iLAotCQkgICB0aWNrX2dldF9icm9hZGNhc3RfbWFzaygpLT5iaXRzWzBdKTsKKwkJICAgY3B1bWFza19iaXRzKHRpY2tfZ2V0X2Jyb2FkY2FzdF9tYXNrKCkpWzBdKTsKICNpZmRlZiBDT05GSUdfVElDS19PTkVTSE9UCiAJU0VRX3ByaW50ZihtLCAidGlja19icm9hZGNhc3Rfb25lc2hvdF9tYXNrOiAlMDhseFxuIiwKLQkJICAgdGlja19nZXRfYnJvYWRjYXN0X29uZXNob3RfbWFzaygpLT5iaXRzWzBdKTsKKwkJICAgY3B1bWFza19iaXRzKHRpY2tfZ2V0X2Jyb2FkY2FzdF9vbmVzaG90X21hc2soKSlbMF0pOwogI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA1ZGI1YThkLi4xNTUzM2I3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNjU2LDggKzY1Niw2IEBACiAKIAlkZWJ1Z19hY3RpdmF0ZSh0aW1lciwgZXhwaXJlcyk7CiAKLQluZXdfYmFzZSA9IF9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7Ci0KIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgZGVmaW5lZChDT05GSUdfU01QKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCBkMDA2NTU0Li42YzIyZDhhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtMTIsMTcgKzEyLDE3IEBACiBjb25maWcgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSCiAJYm9vbAogCWhlbHAKLQkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1pbXBsZW1lbnRhdGlvbi50eHQKKwkgIFNlZSBEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CiAKIGNvbmZpZyBIQVZFX0ZVTkNUSU9OX1RSQUNFUgogCWJvb2wKIAloZWxwCi0JICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtaW1wbGVtZW50YXRpb24udHh0CisJICBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAogCiBjb25maWcgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlib29sCiAJaGVscAotCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWltcGxlbWVudGF0aW9uLnR4dAorCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKIAogY29uZmlnIEhBVkVfRlVOQ1RJT05fR1JBUEhfRlBfVEVTVAogCWJvb2wKQEAgLTM0LDE3ICszNCwxNyBAQAogY29uZmlnIEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKIAlib29sCiAJaGVscAotCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWltcGxlbWVudGF0aW9uLnR4dAorCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKIAogY29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlib29sCiAJaGVscAotCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWltcGxlbWVudGF0aW9uLnR4dAorCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKIAogY29uZmlnIEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlib29sCiAJaGVscAotCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWltcGxlbWVudGF0aW9uLnR4dAorCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKIAogY29uZmlnIEhBVkVfSFdfQlJBTkNIX1RSQUNFUgogCWJvb2wKQEAgLTUyLDcgKzUyLDcgQEAKIGNvbmZpZyBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlib29sCiAJaGVscAotCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWltcGxlbWVudGF0aW9uLnR4dAorCSAgU2VlIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKIAogY29uZmlnIFRSQUNFUl9NQVhfVFJBQ0UKIAlib29sCkBAIC04Myw3ICs4Myw3IEBACiAjIFRoaXMgYWxsb3dzIHRob3NlIG9wdGlvbnMgdG8gYXBwZWFyIHdoZW4gbm8gb3RoZXIgdHJhY2VyIGlzIHNlbGVjdGVkLiBCdXQgdGhlCiAjIG9wdGlvbnMgZG8gbm90IGFwcGVhciB3aGVuIHNvbWV0aGluZyBlbHNlIHNlbGVjdHMgaXQuIFdlIG5lZWQgdGhlIHR3byBvcHRpb25zCiAjIEdFTkVSSUNfVFJBQ0VSIGFuZCBUUkFDSU5HIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0byBhY2NvbXBsaXNoIHRoZQotIyBoaWRkaW5nIG9mIHRoZSBhdXRvbWF0aWMgb3B0aW9ucy4KKyMgaGlkaW5nIG9mIHRoZSBhdXRvbWF0aWMgb3B0aW9ucy4KIAogY29uZmlnIFRSQUNJTkcKIAlib29sCkBAIC0xMTksNyArMTE5LDcgQEAKIAlib29sICJUcmFjZXJzIgogCWRlZmF1bHQgeSBpZiBERUJVR19LRVJORUwKIAloZWxwCi0JIEVuYWJsZSB0aGUga2VybmVsIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuCisJICBFbmFibGUgdGhlIGtlcm5lbCB0cmFjaW5nIGluZnJhc3RydWN0dXJlLgogCiBpZiBGVFJBQ0UKIApAQCAtMTMzLDcgKzEzMyw3IEBACiAJaGVscAogCSAgRW5hYmxlIHRoZSBrZXJuZWwgdG8gdHJhY2UgZXZlcnkga2VybmVsIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUKIAkgIGJ5IHVzaW5nIGEgY29tcGlsZXIgZmVhdHVyZSB0byBpbnNlcnQgYSBzbWFsbCwgNS1ieXRlIE5vLU9wZXJhdGlvbgotCSAgaW5zdHJ1Y3Rpb24gdG8gdGhlIGJlZ2lubmluZyBvZiBldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHdoaWNoIE5PUAorCSAgaW5zdHJ1Y3Rpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHdoaWNoIE5PUAogCSAgc2VxdWVuY2UgaXMgdGhlbiBkeW5hbWljYWxseSBwYXRjaGVkIGludG8gYSB0cmFjZXIgY2FsbCB3aGVuCiAJICB0cmFjaW5nIGlzIGVuYWJsZWQgYnkgdGhlIGFkbWluaXN0cmF0b3IuIElmIGl0J3MgcnVudGltZSBkaXNhYmxlZAogCSAgKHRoZSBib290dXAgZGVmYXVsdCksIHRoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBpbnN0cnVjdGlvbnMgaXMgdmVyeQpAQCAtMTUwLDcgKzE1MCw3IEBACiAJICBhbmQgaXRzIGVudHJ5LgogCSAgSXRzIGZpcnN0IHB1cnBvc2UgaXMgdG8gdHJhY2UgdGhlIGR1cmF0aW9uIG9mIGZ1bmN0aW9ucyBhbmQKIAkgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gbGlrZQotCSAgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnQgcmV0dXJuIAorCSAgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnQgcmV0dXJuCiAJICBhZGRyZXNzIG9uIHRoZSBjdXJyZW50IHRhc2sgc3RydWN0dXJlIGludG8gYSBzdGFjayBvZiBjYWxscy4KIAogCkBAIC0xNzMsNyArMTczLDcgQEAKIAogCSAgICAgIGVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19tYXhfbGF0ZW5jeQogCi0JICAoTm90ZSB0aGF0IGtlcm5lbCBzaXplIGFuZCBvdmVyaGVhZCBpbmNyZWFzZXMgd2l0aCB0aGlzIG9wdGlvbgorCSAgKE5vdGUgdGhhdCBrZXJuZWwgc2l6ZSBhbmQgb3ZlcmhlYWQgaW5jcmVhc2Ugd2l0aCB0aGlzIG9wdGlvbgogCSAgZW5hYmxlZC4gVGhpcyBvcHRpb24gYW5kIHRoZSBwcmVlbXB0LW9mZiB0aW1pbmcgb3B0aW9uIGNhbiBiZQogCSAgdXNlZCB0b2dldGhlciBvciBzZXBhcmF0ZWx5LikKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKIAlzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUAogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIG1lYXN1cmVzIHRoZSB0aW1lIHNwZW50IGluIHByZWVtcHRpb24gb2ZmIGNyaXRpY2FsCisJICBUaGlzIG9wdGlvbiBtZWFzdXJlcyB0aGUgdGltZSBzcGVudCBpbiBwcmVlbXB0aW9uLW9mZiBjcml0aWNhbAogCSAgc2VjdGlvbnMsIHdpdGggbWljcm9zZWNvbmQgYWNjdXJhY3kuCiAKIAkgIFRoZSBkZWZhdWx0IG1lYXN1cmVtZW50IG1ldGhvZCBpcyBhIG1heGltdW0gc2VhcmNoLCB3aGljaCBpcwpAQCAtMTk1LDcgKzE5NSw3IEBACiAKIAkgICAgICBlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfbWF4X2xhdGVuY3kKIAotCSAgKE5vdGUgdGhhdCBrZXJuZWwgc2l6ZSBhbmQgb3ZlcmhlYWQgaW5jcmVhc2VzIHdpdGggdGhpcyBvcHRpb24KKwkgIChOb3RlIHRoYXQga2VybmVsIHNpemUgYW5kIG92ZXJoZWFkIGluY3JlYXNlIHdpdGggdGhpcyBvcHRpb24KIAkgIGVuYWJsZWQuIFRoaXMgb3B0aW9uIGFuZCB0aGUgaXJxcy1vZmYgdGltaW5nIG9wdGlvbiBjYW4gYmUKIAkgIHVzZWQgdG9nZXRoZXIgb3Igc2VwYXJhdGVseS4pCiAKQEAgLTIyMiw3ICsyMjIsNyBAQAogCWRlcGVuZHMgb24gIUdFTkVSSUNfVFJBQ0VSCiAJc2VsZWN0IFRSQUNJTkcKIAloZWxwCi0JICBUaGlzIHRyYWNlciBob29rcyB0byB2YXJpb3VzIHRyYWNlIHBvaW50cyBpbiB0aGUga2VybmVsCisJICBUaGlzIHRyYWNlciBob29rcyB0byB2YXJpb3VzIHRyYWNlIHBvaW50cyBpbiB0aGUga2VybmVsLAogCSAgYWxsb3dpbmcgdGhlIHVzZXIgdG8gcGljayBhbmQgY2hvb3NlIHdoaWNoIHRyYWNlIHBvaW50IHRoZXkKIAkgIHdhbnQgdG8gdHJhY2UuIEl0IGFsc28gaW5jbHVkZXMgdGhlIHNjaGVkX3N3aXRjaCB0cmFjZXIgcGx1Z2luLgogCkBAIC0yNjUsMTkgKzI2NSwxOSBAQAogCSBUaGUgbGlrZWx5L3VubGlrZWx5IHByb2ZpbGVyIG9ubHkgbG9va3MgYXQgdGhlIGNvbmRpdGlvbnMgdGhhdAogCSBhcmUgYW5ub3RhdGVkIHdpdGggYSBsaWtlbHkgb3IgdW5saWtlbHkgbWFjcm8uCiAKLQkgVGhlICJhbGwgYnJhbmNoIiBwcm9maWxlciB3aWxsIHByb2ZpbGUgZXZlcnkgaWYgc3RhdGVtZW50IGluIHRoZQorCSBUaGUgImFsbCBicmFuY2giIHByb2ZpbGVyIHdpbGwgcHJvZmlsZSBldmVyeSBpZi1zdGF0ZW1lbnQgaW4gdGhlCiAJIGtlcm5lbC4gVGhpcyBwcm9maWxlciB3aWxsIGFsc28gZW5hYmxlIHRoZSBsaWtlbHkvdW5saWtlbHkKLQkgcHJvZmlsZXIgYXMgd2VsbC4KKwkgcHJvZmlsZXIuCiAKLQkgRWl0aGVyIG9mIHRoZSBhYm92ZSBwcm9maWxlcnMgYWRkIGEgYml0IG9mIG92ZXJoZWFkIHRvIHRoZSBzeXN0ZW0uCi0JIElmIHVuc3VyZSBjaG9vc2UgIk5vIGJyYW5jaCBwcm9maWxpbmciLgorCSBFaXRoZXIgb2YgdGhlIGFib3ZlIHByb2ZpbGVycyBhZGRzIGEgYml0IG9mIG92ZXJoZWFkIHRvIHRoZSBzeXN0ZW0uCisJIElmIHVuc3VyZSwgY2hvb3NlICJObyBicmFuY2ggcHJvZmlsaW5nIi4KIAogY29uZmlnIEJSQU5DSF9QUk9GSUxFX05PTkUKIAlib29sICJObyBicmFuY2ggcHJvZmlsaW5nIgogCWhlbHAKLQkgTm8gYnJhbmNoIHByb2ZpbGluZy4gQnJhbmNoIHByb2ZpbGluZyBhZGRzIGEgYml0IG9mIG92ZXJoZWFkLgotCSBPbmx5IGVuYWJsZSBpdCBpZiB5b3Ugd2FudCB0byBhbmFseXNlIHRoZSBicmFuY2hpbmcgYmVoYXZpb3IuCi0JIE90aGVyd2lzZSBrZWVwIGl0IGRpc2FibGVkLgorCSAgTm8gYnJhbmNoIHByb2ZpbGluZy4gQnJhbmNoIHByb2ZpbGluZyBhZGRzIGEgYml0IG9mIG92ZXJoZWFkLgorCSAgT25seSBlbmFibGUgaXQgaWYgeW91IHdhbnQgdG8gYW5hbHlzZSB0aGUgYnJhbmNoaW5nIGJlaGF2aW9yLgorCSAgT3RoZXJ3aXNlIGtlZXAgaXQgZGlzYWJsZWQuCiAKIGNvbmZpZyBQUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUwogCWJvb2wgIlRyYWNlIGxpa2VseS91bmxpa2VseSBwcm9maWxlciIKQEAgLTI4OCw3ICsyODgsNyBAQAogCiAJICAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3Byb2ZpbGVfYW5ub3RhdGVkX2JyYW5jaAogCi0JICBOb3RlOiB0aGlzIHdpbGwgYWRkIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQsIG9ubHkgdHVybiB0aGlzCisJICBOb3RlOiB0aGlzIHdpbGwgYWRkIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQ7IG9ubHkgdHVybiB0aGlzCiAJICBvbiBpZiB5b3UgbmVlZCB0byBwcm9maWxlIHRoZSBzeXN0ZW0ncyB1c2Ugb2YgdGhlc2UgbWFjcm9zLgogCiBjb25maWcgUFJPRklMRV9BTExfQlJBTkNIRVMKQEAgLTMwNSw3ICszMDUsNyBAQAogCiAJICBUaGlzIGNvbmZpZ3VyYXRpb24sIHdoZW4gZW5hYmxlZCwgd2lsbCBpbXBvc2UgYSBncmVhdCBvdmVyaGVhZAogCSAgb24gdGhlIHN5c3RlbS4gVGhpcyBzaG91bGQgb25seSBiZSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbQotCSAgaXMgdG8gYmUgYW5hbHl6ZWQKKwkgIGlzIHRvIGJlIGFuYWx5emVkIGluIG11Y2ggZGV0YWlsLgogZW5kY2hvaWNlCiAKIGNvbmZpZyBUUkFDSU5HX0JSQU5DSEVTCkBAIC0zMzUsNyArMzM1LDcgQEAKIAlkZXBlbmRzIG9uIFg4NgogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgogCWhlbHAKLQkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gYW5hbHl6ZSBhbmQgb3B0aW1pemUgdGhlIGtlcm5lbHMKKwkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gYW5hbHl6ZSBhbmQgb3B0aW1pemUgdGhlIGtlcm5lbCdzCiAJICBwb3dlciBtYW5hZ2VtZW50IGRlY2lzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBDLXN0YXRlIGFuZCBQLXN0YXRlCiAJICBiZWhhdmlvci4KIApAQCAtMzkxLDE0ICszOTEsMTQgQEAKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAloZWxwCiAJICBUaGlzIHRyYWNlciByZWNvcmRzIGFsbCBicmFuY2hlcyBvbiB0aGUgc3lzdGVtIGluIGEgY2lyY3VsYXIKLQkgIGJ1ZmZlciBnaXZpbmcgYWNjZXNzIHRvIHRoZSBsYXN0IE4gYnJhbmNoZXMgZm9yIGVhY2ggY3B1LgorCSAgYnVmZmVyLCBnaXZpbmcgYWNjZXNzIHRvIHRoZSBsYXN0IE4gYnJhbmNoZXMgZm9yIGVhY2ggY3B1LgogCiBjb25maWcgS01FTVRSQUNFCiAJYm9vbCAiVHJhY2UgU0xBQiBhbGxvY2F0aW9ucyIKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAloZWxwCiAJICBrbWVtdHJhY2UgcHJvdmlkZXMgdHJhY2luZyBmb3Igc2xhYiBhbGxvY2F0b3IgZnVuY3Rpb25zLCBzdWNoIGFzCi0JICBrbWFsbG9jLCBrZnJlZSwga21lbV9jYWNoZV9hbGxvYywga21lbV9jYWNoZV9mcmVlIGV0Yy4uIENvbGxlY3RlZAorCSAga21hbGxvYywga2ZyZWUsIGttZW1fY2FjaGVfYWxsb2MsIGttZW1fY2FjaGVfZnJlZSwgZXRjLiBDb2xsZWN0ZWQKIAkgIGRhdGEgaXMgdGhlbiBmZWQgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBpbiBvcmRlciB0byBhbmFseXNlCiAJICBhbGxvY2F0aW9uIGhvdHNwb3RzLCBpbnRlcm5hbCBmcmFnbWVudGF0aW9uIGFuZCBzbyBvbiwgbWFraW5nIGl0CiAJICBwb3NzaWJsZSB0byBzZWUgaG93IHdlbGwgYW4gYWxsb2NhdG9yIHBlcmZvcm1zLCBhcyB3ZWxsIGFzIGRlYnVnCkBAIC00MTcsMTUgKzQxNywxNSBAQAogCWJvb2wgIlRyYWNlIHdvcmtxdWV1ZXMiCiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCiAJaGVscAotCSAgVGhlIHdvcmtxdWV1ZSB0cmFjZXIgcHJvdmlkZXMgc29tZSBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbnMKKwkgIFRoZSB3b3JrcXVldWUgdHJhY2VyIHByb3ZpZGVzIHNvbWUgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24KICAgICAgICAgICBhYm91dCBlYWNoIGNwdSB3b3JrcXVldWUgdGhyZWFkIHN1Y2ggYXMgdGhlIG51bWJlciBvZiB0aGUKICAgICAgICAgICB3b3JrcyBpbnNlcnRlZCBhbmQgZXhlY3V0ZWQgc2luY2UgdGhlaXIgY3JlYXRpb24uIEl0IGNhbiBoZWxwCi0gICAgICAgICAgdG8gZXZhbHVhdGUgdGhlIGFtb3VudCBvZiB3b3JrIGVhY2ggb2YgdGhlbSBoYXZlIHRvIHBlcmZvcm0uCisgICAgICAgICAgdG8gZXZhbHVhdGUgdGhlIGFtb3VudCBvZiB3b3JrIGVhY2ggb2YgdGhlbSBoYXMgdG8gcGVyZm9ybS4KICAgICAgICAgICBGb3IgZXhhbXBsZSBpdCBjYW4gaGVscCBhIGRldmVsb3BlciB0byBkZWNpZGUgd2hldGhlciBoZSBzaG91bGQKLSAgICAgICAgICBjaG9vc2UgYSBwZXIgY3B1IHdvcmtxdWV1ZSBpbnN0ZWFkIG9mIGEgc2luZ2xldGhyZWFkZWQgb25lLgorICAgICAgICAgIGNob29zZSBhIHBlci1jcHUgd29ya3F1ZXVlIGluc3RlYWQgb2YgYSBzaW5nbGV0aHJlYWRlZCBvbmUuCiAKIGNvbmZpZyBCTEtfREVWX0lPX1RSQUNFCi0JYm9vbCAiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBpbyBhY3Rpb25zIgorCWJvb2wgIlN1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9ucyIKIAlkZXBlbmRzIG9uIFNZU0ZTCiAJZGVwZW5kcyBvbiBCTE9DSwogCXNlbGVjdCBSRUxBWQpAQCAtNDU2LDE1ICs0NTYsMTUgQEAKIAlzZWxlY3QgVFJBQ0lORwogCWRlZmF1bHQgeQogCWhlbHAKLQkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGFkZCB0cmFjaW5nIGV2ZW50cyAoc2ltaWxhciB0byB0cmFjZXBvaW50cykgb24gdGhlIGZseQotCSAgdmlhIHRoZSBmdHJhY2UgaW50ZXJmYWNlLiBTZWUgRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKLQkgIGZvciBtb3JlIGRldGFpbHMuCisJICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhZGQgdHJhY2luZyBldmVudHMgKHNpbWlsYXIgdG8gdHJhY2Vwb2ludHMpCisJICBvbiB0aGUgZmx5IHZpYSB0aGUgZnRyYWNlIGludGVyZmFjZS4gU2VlCisJICBEb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgogCiAJICBUaG9zZSBldmVudHMgY2FuIGJlIGluc2VydGVkIHdoZXJldmVyIGtwcm9iZXMgY2FuIHByb2JlLCBhbmQgcmVjb3JkCiAJICB2YXJpb3VzIHJlZ2lzdGVyIGFuZCBtZW1vcnkgdmFsdWVzLgogCi0JICBUaGlzIG9wdGlvbiBpcyBhbHNvIHJlcXVpcmVkIGJ5IHBlcmYtcHJvYmUgc3ViY29tbWFuZCBvZiBwZXJmIHRvb2xzLiBJZgotCSAgeW91IHdhbnQgdG8gdXNlIHBlcmYgdG9vbHMsIHRoaXMgb3B0aW9uIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLgorCSAgVGhpcyBvcHRpb24gaXMgYWxzbyByZXF1aXJlZCBieSBwZXJmLXByb2JlIHN1YmNvbW1hbmQgb2YgcGVyZiB0b29scy4KKwkgIElmIHlvdSB3YW50IHRvIHVzZSBwZXJmIHRvb2xzLCB0aGlzIG9wdGlvbiBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4KIAogY29uZmlnIERZTkFNSUNfRlRSQUNFCiAJYm9vbCAiZW5hYmxlL2Rpc2FibGUgZnRyYWNlIHRyYWNlcG9pbnRzIGR5bmFtaWNhbGx5IgpAQCAtNDcyLDMyICs0NzIsMzIgQEAKIAlkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlkZWZhdWx0IHkKIAloZWxwCi0gICAgICAgICBUaGlzIG9wdGlvbiB3aWxsIG1vZGlmeSBhbGwgdGhlIGNhbGxzIHRvIGZ0cmFjZSBkeW5hbWljYWxseQotCSAod2lsbCBwYXRjaCB0aGVtIG91dCBvZiB0aGUgYmluYXJ5IGltYWdlIGFuZCByZXBsYWNlcyB0aGVtCi0JIHdpdGggYSBOby1PcCBpbnN0cnVjdGlvbikgYXMgdGhleSBhcmUgY2FsbGVkLiBBIHRhYmxlIGlzCi0JIGNyZWF0ZWQgdG8gZHluYW1pY2FsbHkgZW5hYmxlIHRoZW0gYWdhaW4uCisgICAgICAgICAgVGhpcyBvcHRpb24gd2lsbCBtb2RpZnkgYWxsIHRoZSBjYWxscyB0byBmdHJhY2UgZHluYW1pY2FsbHkKKwkgICh3aWxsIHBhdGNoIHRoZW0gb3V0IG9mIHRoZSBiaW5hcnkgaW1hZ2UgYW5kIHJlcGxhY2UgdGhlbQorCSAgd2l0aCBhIE5vLU9wIGluc3RydWN0aW9uKSBhcyB0aGV5IGFyZSBjYWxsZWQuIEEgdGFibGUgaXMKKwkgIGNyZWF0ZWQgdG8gZHluYW1pY2FsbHkgZW5hYmxlIHRoZW0gYWdhaW4uCiAKLQkgVGhpcyB3YXkgYSBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGtlcm5lbCBpcyBzbGlnaHRseSBsYXJnZXIsIGJ1dCBvdGhlcndpc2UKLQkgaGFzIG5hdGl2ZSBwZXJmb3JtYW5jZSBhcyBsb25nIGFzIG5vIHRyYWNpbmcgaXMgYWN0aXZlLgorCSAgVGhpcyB3YXkgYSBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGtlcm5lbCBpcyBzbGlnaHRseSBsYXJnZXIsIGJ1dAorCSAgb3RoZXJ3aXNlIGhhcyBuYXRpdmUgcGVyZm9ybWFuY2UgYXMgbG9uZyBhcyBubyB0cmFjaW5nIGlzIGFjdGl2ZS4KIAotCSBUaGUgY2hhbmdlcyB0byB0aGUgY29kZSBhcmUgZG9uZSBieSBhIGtlcm5lbCB0aHJlYWQgdGhhdAotCSB3YWtlcyB1cCBvbmNlIGEgc2Vjb25kIGFuZCBjaGVja3MgdG8gc2VlIGlmIGFueSBmdHJhY2UgY2FsbHMKLQkgd2VyZSBtYWRlLiBJZiBzbywgaXQgcnVucyBzdG9wX21hY2hpbmUgKHN0b3BzIGFsbCBDUFVTKQotCSBhbmQgbW9kaWZpZXMgdGhlIGNvZGUgdG8ganVtcCBvdmVyIHRoZSBjYWxsIHRvIGZ0cmFjZS4KKwkgIFRoZSBjaGFuZ2VzIHRvIHRoZSBjb2RlIGFyZSBkb25lIGJ5IGEga2VybmVsIHRocmVhZCB0aGF0CisJICB3YWtlcyB1cCBvbmNlIGEgc2Vjb25kIGFuZCBjaGVja3MgdG8gc2VlIGlmIGFueSBmdHJhY2UgY2FsbHMKKwkgIHdlcmUgbWFkZS4gSWYgc28sIGl0IHJ1bnMgc3RvcF9tYWNoaW5lIChzdG9wcyBhbGwgQ1BVUykKKwkgIGFuZCBtb2RpZmllcyB0aGUgY29kZSB0byBqdW1wIG92ZXIgdGhlIGNhbGwgdG8gZnRyYWNlLgogCiBjb25maWcgRlVOQ1RJT05fUFJPRklMRVIKIAlib29sICJLZXJuZWwgZnVuY3Rpb24gcHJvZmlsZXIiCiAJZGVwZW5kcyBvbiBGVU5DVElPTl9UUkFDRVIKIAlkZWZhdWx0IG4KIAloZWxwCi0JIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGtlcm5lbCBmdW5jdGlvbiBwcm9maWxlci4gQSBmaWxlIGlzIGNyZWF0ZWQKLQkgaW4gZGVidWdmcyBjYWxsZWQgZnVuY3Rpb25fcHJvZmlsZV9lbmFibGVkIHdoaWNoIGRlZmF1bHRzIHRvIHplcm8uCi0JIFdoZW4gYSAxIGlzIGVjaG9lZCBpbnRvIHRoaXMgZmlsZSBwcm9maWxpbmcgYmVnaW5zLCBhbmQgd2hlbiBhCi0JIHplcm8gaXMgZW50ZXJlZCwgcHJvZmlsaW5nIHN0b3BzLiBBIGZpbGUgaW4gdGhlIHRyYWNlX3N0YXRzCi0JIGRpcmVjdG9yeSBjYWxsZWQgZnVuY3Rpb25zLCB0aGF0IHNob3cgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQKLQkgaGF2ZSBiZWVuIGhpdCBhbmQgdGhlaXIgY291bnRlcnMuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBrZXJuZWwgZnVuY3Rpb24gcHJvZmlsZXIuIEEgZmlsZSBpcyBjcmVhdGVkCisJICBpbiBkZWJ1Z2ZzIGNhbGxlZCBmdW5jdGlvbl9wcm9maWxlX2VuYWJsZWQgd2hpY2ggZGVmYXVsdHMgdG8gemVyby4KKwkgIFdoZW4gYSAxIGlzIGVjaG9lZCBpbnRvIHRoaXMgZmlsZSBwcm9maWxpbmcgYmVnaW5zLCBhbmQgd2hlbiBhCisJICB6ZXJvIGlzIGVudGVyZWQsIHByb2ZpbGluZyBzdG9wcy4gQSAiZnVuY3Rpb25zIiBmaWxlIGlzIGNyZWF0ZWQgaW4KKwkgIHRoZSB0cmFjZV9zdGF0cyBkaXJlY3Rvcnk7IHRoaXMgZmlsZSBzaG93cyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdAorCSAgaGF2ZSBiZWVuIGhpdCBhbmQgdGhlaXIgY291bnRlcnMuCiAKLQkgSWYgaW4gZG91YnQsIHNheSBOCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBGVFJBQ0VfTUNPVU5UX1JFQ09SRAogCWRlZl9ib29sIHkKQEAgLTU1Niw4ICs1NTYsOCBAQAogCXRyaXN0YXRlICJSaW5nIGJ1ZmZlciBiZW5jaG1hcmsgc3RyZXNzIHRlc3RlciIKIAlkZXBlbmRzIG9uIFJJTkdfQlVGRkVSCiAJaGVscAotCSAgVGhpcyBvcHRpb24gY3JlYXRlcyBhIHRlc3QgdG8gc3RyZXNzIHRoZSByaW5nIGJ1ZmZlciBhbmQgYmVuY2ggbWFyayBpdC4KLQkgIEl0IGNyZWF0ZXMgaXRzIG93biByaW5nIGJ1ZmZlciBzdWNoIHRoYXQgaXQgd2lsbCBub3QgaW50ZXJmZXIgd2l0aAorCSAgVGhpcyBvcHRpb24gY3JlYXRlcyBhIHRlc3QgdG8gc3RyZXNzIHRoZSByaW5nIGJ1ZmZlciBhbmQgYmVuY2htYXJrIGl0LgorCSAgSXQgY3JlYXRlcyBpdHMgb3duIHJpbmcgYnVmZmVyIHN1Y2ggdGhhdCBpdCB3aWxsIG5vdCBpbnRlcmZlcmUgd2l0aAogCSAgYW55IG90aGVyIHVzZXJzIG9mIHRoZSByaW5nIGJ1ZmZlciAoc3VjaCBhcyBmdHJhY2UpLiBJdCB0aGVuIGNyZWF0ZXMKIAkgIGEgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIHRoYXQgd2lsbCBydW4gZm9yIDEwIHNlY29uZHMgYW5kIHNsZWVwIGZvcgogCSAgMTAgc2Vjb25kcy4gRWFjaCBpbnRlcnZhbCBpdCB3aWxsIHByaW50IG91dCB0aGUgbnVtYmVyIG9mIGV2ZW50cwpAQCAtNTY2LDcgKzU2Niw3IEBACiAJICBJdCBkb2VzIG5vdCBkaXNhYmxlIGludGVycnVwdHMgb3IgcmFpc2UgaXRzIHByaW9yaXR5LCBzbyBpdCBtYXkgYmUKIAkgIGFmZmVjdGVkIGJ5IHByb2Nlc3NlcyB0aGF0IGFyZSBydW5uaW5nLgogCi0JICBJZiB1bnN1cmUsIHNheSBOCisJICBJZiB1bnN1cmUsIHNheSBOLgogCiBlbmRpZiAjIEZUUkFDRQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDhiOWYyMGEuLjBkZjFiMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0zOTQ5LDcgKzM5NDksNyBAQAogCWlmICghISh0b3B0LT5mbGFncy0+dmFsICYgdG9wdC0+b3B0LT5iaXQpICE9IHZhbCkgewogCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAkJcmV0ID0gX19zZXRfdHJhY2VyX29wdGlvbihjdXJyZW50X3RyYWNlLCB0b3B0LT5mbGFncywKLQkJCQkJICB0b3B0LT5vcHQsIHZhbCk7CisJCQkJCSAgdG9wdC0+b3B0LCAhdmFsKTsKIAkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggNDU4ZTViZi4uZDRmYTVkYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTU4LDcgKzE1OCw4IEBACiAJQlVJTERfQlVHX09OKGxlbiA+IE1BWF9GSUxURVJfU1RSX1ZBTCk7CQkJCVwKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUgIlsiICNsZW4gIl0iLCAjaXRlbSwJXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLCAwLCBGSUxURVJfT1RIRVIpOwlcCisJCQkJIHNpemVvZihmaWVsZC5pdGVtKSwJCQlcCisJCQkJIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjgsOCArMTY5LDggQEAKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUgIlsiICNsZW4gIl0iLCAjaXRlbSwJXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLAkJXAogCQkJCQkgIGNvbnRhaW5lci5pdGVtKSwJCVwKLQkJCQkgc2l6ZW9mKGZpZWxkLmNvbnRhaW5lci5pdGVtKSwgMCwJXAotCQkJCSBGSUxURVJfT1RIRVIpOwkJCQlcCisJCQkJIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksCQlcCisJCQkJIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggN2VjYWIwNi4uNmVhOTBjMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtMjgyLDYgKzI4MiwxOCBAQAogc3RhdGljIGludCBrcmV0cHJvYmVfZGlzcGF0Y2hlcihzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKIAkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKKy8qIENoZWNrIHRoZSBuYW1lIGlzIGdvb2QgZm9yIGV2ZW50L2dyb3VwICovCitzdGF0aWMgaW50IGNoZWNrX2V2ZW50X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICpuYW1lICE9ICdfJykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKCorK25hbWUgIT0gJ1wwJykgeworCQlpZiAoIWlzYWxwaGEoKm5hbWUpICYmICFpc2RpZ2l0KCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBuZXcgdHJhY2VfcHJvYmUgYW5kIGluaXRpYWxpemUgaXQgKGluY2x1ZGluZyBrcHJvYmVzKS4KICAqLwpAQCAtMjkzLDEwICszMDUsMTEgQEAKIAkJCQkJICAgICBpbnQgbmFyZ3MsIGludCBpc19yZXR1cm4pCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAogCXRwID0ga3phbGxvYyhTSVpFT0ZfVFJBQ0VfUFJPQkUobmFyZ3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogCWlmIChzeW1ib2wpIHsKIAkJdHAtPnN5bWJvbCA9IGtzdHJkdXAoc3ltYm9sLCBHRlBfS0VSTkVMKTsKQEAgLTMxMiwxNCArMzI1LDIwIEBACiAJZWxzZQogCQl0cC0+cnAua3AucHJlX2hhbmRsZXIgPSBrcHJvYmVfZGlzcGF0Y2hlcjsKIAotCWlmICghZXZlbnQpCisJaWYgKCFldmVudCB8fCAhY2hlY2tfZXZlbnRfbmFtZShldmVudCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcjsKKwl9CisKIAl0cC0+Y2FsbC5uYW1lID0ga3N0cmR1cChldmVudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cC0+Y2FsbC5uYW1lKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKCFncm91cCkKKwlpZiAoIWdyb3VwIHx8ICFjaGVja19ldmVudF9uYW1lKGdyb3VwKSkgeworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycm9yOworCX0KKwogCXRwLT5jYWxsLnN5c3RlbSA9IGtzdHJkdXAoZ3JvdXAsIEdGUF9LRVJORUwpOwogCWlmICghdHAtPmNhbGwuc3lzdGVtKQogCQlnb3RvIGVycm9yOwpAQCAtMzMwLDcgKzM0OSw3IEBACiAJa2ZyZWUodHAtPmNhbGwubmFtZSk7CiAJa2ZyZWUodHAtPnN5bWJvbCk7CiAJa2ZyZWUodHApOwotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfcHJvYmVfYXJnKHN0cnVjdCBwcm9iZV9hcmcgKmFyZykKQEAgLTY5NSwxMCArNzE0LDEwIEBACiAJaWYgKCFldmVudCkgewogCQkvKiBNYWtlIGEgbmV3IGV2ZW50IG5hbWUgKi8KIAkJaWYgKHN5bWJvbCkKLQkJCXNucHJpbnRmKGJ1ZiwgTUFYX0VWRU5UX05BTUVfTEVOLCAiJWNAJXMlK2xkIiwKKwkJCXNucHJpbnRmKGJ1ZiwgTUFYX0VWRU5UX05BTUVfTEVOLCAiJWNfJXNfJWxkIiwKIAkJCQkgaXNfcmV0dXJuID8gJ3InIDogJ3AnLCBzeW1ib2wsIG9mZnNldCk7CiAJCWVsc2UKLQkJCXNucHJpbnRmKGJ1ZiwgTUFYX0VWRU5UX05BTUVfTEVOLCAiJWNAMHglcCIsCisJCQlzbnByaW50ZihidWYsIE1BWF9FVkVOVF9OQU1FX0xFTiwgIiVjXzB4JXAiLAogCQkJCSBpc19yZXR1cm4gPyAncicgOiAncCcsIGFkZHIpOwogCQlldmVudCA9IGJ1ZjsKIAl9CkBAIC0xMTgyLDEwICsxMjAxLDExIEBACiAjdW5kZWYgU0hPV19GSUVMRAogI2RlZmluZSBTSE9XX0ZJRUxEKHR5cGUsIGl0ZW0sIG5hbWUpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiAiICN0eXBlICIgJXM7XHQiCVwKLQkJCQkib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsIG5hbWUsCQlcCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICVzO1x0IglcCisJCQkJIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLCBuYW1lLFwKIAkJCQkodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLFwKLQkJCQkodW5zaWduZWQgaW50KXNpemVvZih0eXBlKSk7CQlcCisJCQkJKHVuc2lnbmVkIGludClzaXplb2YodHlwZSksCQlcCisJCQkJaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKIAkJaWYgKCFyZXQpCQkJCQkJXAogCQkJcmV0dXJuIDA7CQkJCQlcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3N5bS5jCmluZGV4IGZhZjM3ZmEuLjk0MTAzY2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2tzeW0uYwpAQCAtMjYsMTIgKzI2LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgotI2luY2x1ZGUgInRyYWNlX3N0YXQuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgogCiAjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CiAKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKIC8qCiAgKiBGb3Igbm93LCBsZXQgdXMgcmVzdHJpY3QgdGhlIG5vLiBvZiBzeW1ib2xzIHRyYWNlZCBzaW11bHRhbmVvdXNseSB0byBudW1iZXIKICAqIG9mIGF2YWlsYWJsZSBoYXJkd2FyZSBicmVha3BvaW50IHJlZ2lzdGVycy4KQEAgLTQ0LDcgKzQ1LDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudAkqKmtzeW1faGJwOwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKICNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgotCXVuc2lnbmVkIGxvbmcJCWNvdW50ZXI7CisJYXRvbWljNjRfdAkJY291bnRlcjsKICNlbmRpZgogCXN0cnVjdCBobGlzdF9ub2RlCWtzeW1faGxpc3Q7CiB9OwpAQCAtNjksOSArNzAsOCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbm9kZSwgJmtzeW1fZmlsdGVyX2hlYWQsIGtzeW1faGxpc3QpIHsKLQkJaWYgKChlbnRyeS0+YXR0ci5icF9hZGRyID09IGhicF9oaXRfYWRkcikgJiYKLQkJICAgIChlbnRyeS0+Y291bnRlciA8PSBNQVhfVUxfSU5UKSkgewotCQkJZW50cnktPmNvdW50ZXIrKzsKKwkJaWYgKGVudHJ5LT5hdHRyLmJwX2FkZHIgPT0gaGJwX2hpdF9hZGRyKSB7CisJCQlhdG9taWM2NF9pbmMoJmVudHJ5LT5jb3VudGVyKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTk3LDcgKzE5Nyw2IEBACiAJZW50cnktPmF0dHIuYnBfYWRkciA9IGFkZHI7CiAJZW50cnktPmF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKIAotCXJldCA9IC1FQUdBSU47CiAJZW50cnktPmtzeW1faGJwID0gcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KCZlbnRyeS0+YXR0ciwKIAkJCQkJa3N5bV9oYnBfaGFuZGxlcik7CiAKQEAgLTMwMCw4ICsyOTksOCBAQAogCSAqIDI6IGVjaG8gMCA+IGtzeW1fdHJhY2VfZmlsdGVyCiAJICogMzogZWNobyAiKjotLS0iID4ga3N5bV90cmFjZV9maWx0ZXIKIAkgKi8KLQlpZiAoIWJ1ZlswXSB8fCAhc3RyY21wKGJ1ZiwgIjAiKSB8fAotCSAgICAhc3RyY21wKGJ1ZiwgIio6LS0tIikpIHsKKwlpZiAoIWlucHV0X3N0cmluZ1swXSB8fCAhc3RyY21wKGlucHV0X3N0cmluZywgIjAiKSB8fAorCSAgICAhc3RyY21wKGlucHV0X3N0cmluZywgIio6LS0tIikpIHsKIAkJX19rc3ltX3RyYWNlX3Jlc2V0KCk7CiAJCXJldCA9IDA7CiAJCWdvdG8gb3V0OwpAQCAtNDQ0LDEwMiArNDQzLDc3IEBACiAJLnByaW50X2xpbmUJPSBrc3ltX3RyYWNlX291dHB1dAogfTsKIAotX19pbml0IHN0YXRpYyBpbnQgaW5pdF9rc3ltX3RyYWNlKHZvaWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7Ci0Jc3RydWN0IGRlbnRyeSAqZW50cnk7Ci0KLQlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQlrc3ltX2ZpbHRlcl9lbnRyeV9jb3VudCA9IDA7Ci0KLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImtzeW1fdHJhY2VfZmlsdGVyIiwgMDY0NCwgZF90cmFjZXIsCi0JCQkJICAgIE5VTEwsICZrc3ltX3RyYWNpbmdfZm9wcyk7Ci0JaWYgKCFlbnRyeSkKLQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKLQkJCSAgICIna3N5bV90cmFjZV9maWx0ZXInIGZpbGVcbiIpOwotCi0JcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigma3N5bV90cmFjZXIpOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfa3N5bV90cmFjZSk7Ci0KLQogI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCi1zdGF0aWMgaW50IGtzeW1fdHJhY2VyX3N0YXRfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCitzdGF0aWMgaW50IGtzeW1fcHJvZmlsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzZXFfcHV0cyhtLCAiICBBY2Nlc3MgVHlwZSAiKTsKLQlzZXFfcHV0cyhtLCAiICBTeW1ib2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyXG4iKTsKLQlzZXFfcHV0cyhtLCAiICAtLS0tLS0tLS0tLSAiKTsKLQlzZXFfcHV0cyhtLCAiICAtLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBrc3ltX3RyYWNlcl9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCXN0cnVjdCBobGlzdF9ub2RlICpzdGF0ID0gdjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7CiAJaW50IGFjY2Vzc190eXBlID0gMDsKIAljaGFyIGZuX25hbWVbS1NZTV9OQU1FX0xFTl07CiAKLQllbnRyeSA9IGhsaXN0X2VudHJ5KHN0YXQsIHN0cnVjdCB0cmFjZV9rc3ltLCBrc3ltX2hsaXN0KTsKKwlzZXFfcHV0cyhtLCAiICBBY2Nlc3MgVHlwZSAiKTsKKwlzZXFfcHV0cyhtLCAiICBTeW1ib2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyXG4iKTsKKwlzZXFfcHV0cyhtLCAiICAtLS0tLS0tLS0tLSAiKTsKKwlzZXFfcHV0cyhtLCAiICAtLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tXG4iKTsKIAotCWFjY2Vzc190eXBlID0gZW50cnktPmF0dHIuYnBfdHlwZTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBub2RlLCAma3N5bV9maWx0ZXJfaGVhZCwga3N5bV9obGlzdCkgewogCi0Jc3dpdGNoIChhY2Nlc3NfdHlwZSkgewotCWNhc2UgSFdfQlJFQUtQT0lOVF9SOgotCQlzZXFfcHV0cyhtLCAiICBSICAgICAgICAgICAiKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1c6Ci0JCXNlcV9wdXRzKG0sICIgIFcgICAgICAgICAgICIpOwotCQlicmVhazsKLQljYXNlIEhXX0JSRUFLUE9JTlRfUiB8IEhXX0JSRUFLUE9JTlRfVzoKLQkJc2VxX3B1dHMobSwgIiAgUlcgICAgICAgICAgIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNlcV9wdXRzKG0sICIgIE5BICAgICAgICAgICIpOworCQlhY2Nlc3NfdHlwZSA9IGVudHJ5LT5hdHRyLmJwX3R5cGU7CisKKwkJc3dpdGNoIChhY2Nlc3NfdHlwZSkgeworCQljYXNlIEhXX0JSRUFLUE9JTlRfUjoKKwkJCXNlcV9wdXRzKG0sICIgIFIgICAgICAgICAgICIpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgorCQkJc2VxX3B1dHMobSwgIiAgVyAgICAgICAgICAgIik7CisJCQlicmVhazsKKwkJY2FzZSBIV19CUkVBS1BPSU5UX1IgfCBIV19CUkVBS1BPSU5UX1c6CisJCQlzZXFfcHV0cyhtLCAiICBSVyAgICAgICAgICAiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2VxX3B1dHMobSwgIiAgTkEgICAgICAgICAgIik7CisJCX0KKworCQlpZiAobG9va3VwX3N5bWJvbF9uYW1lKGVudHJ5LT5hdHRyLmJwX2FkZHIsIGZuX25hbWUpID49IDApCisJCQlzZXFfcHJpbnRmKG0sICIgICUtMzZzIiwgZm5fbmFtZSk7CisJCWVsc2UKKwkJCXNlcV9wcmludGYobSwgIiAgJS0zNnMiLCAiPE5BPiIpOworCQlzZXFfcHJpbnRmKG0sICIgJTE1bGx1XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdG9taWM2NF9yZWFkKCZlbnRyeS0+Y291bnRlcikpOwogCX0KLQotCWlmIChsb29rdXBfc3ltYm9sX25hbWUoZW50cnktPmF0dHIuYnBfYWRkciwgZm5fbmFtZSkgPj0gMCkKLQkJc2VxX3ByaW50ZihtLCAiICAlLTM2cyIsIGZuX25hbWUpOwotCWVsc2UKLQkJc2VxX3ByaW50ZihtLCAiICAlLTM2cyIsICI8TkE+Iik7Ci0Jc2VxX3ByaW50ZihtLCAiICUxNWx1XG4iLCBlbnRyeS0+Y291bnRlcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgKmtzeW1fdHJhY2VyX3N0YXRfc3RhcnQoc3RydWN0IHRyYWNlcl9zdGF0ICp0cmFjZSkKK3N0YXRpYyBpbnQga3N5bV9wcm9maWxlX29wZW4oc3RydWN0IGlub2RlICpub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4ga3N5bV9maWx0ZXJfaGVhZC5maXJzdDsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwga3N5bV9wcm9maWxlX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCAqCi1rc3ltX3RyYWNlcl9zdGF0X25leHQodm9pZCAqdiwgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqc3RhdCA9IHY7Ci0KLQlyZXR1cm4gc3RhdC0+bmV4dDsKLX0KLQotc3RhdGljIHN0cnVjdCB0cmFjZXJfc3RhdCBrc3ltX3RyYWNlcl9zdGF0cyA9IHsKLQkubmFtZSA9ICJrc3ltX3RyYWNlciIsCi0JLnN0YXRfc3RhcnQgPSBrc3ltX3RyYWNlcl9zdGF0X3N0YXJ0LAotCS5zdGF0X25leHQgPSBrc3ltX3RyYWNlcl9zdGF0X25leHQsCi0JLnN0YXRfaGVhZGVycyA9IGtzeW1fdHJhY2VyX3N0YXRfaGVhZGVycywKLQkuc3RhdF9zaG93ID0ga3N5bV90cmFjZXJfc3RhdF9zaG93CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrc3ltX3Byb2ZpbGVfZm9wcyA9IHsKKwkub3BlbgkJPSBrc3ltX3Byb2ZpbGVfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKLQotX19pbml0IHN0YXRpYyBpbnQga3N5bV90cmFjZXJfc3RhdF9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ2lzdGVyX3N0YXRfdHJhY2VyKCZrc3ltX3RyYWNlcl9zdGF0cyk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgIgotCQkJCSAgICAia3N5bSB0cmFjZXIgc3RhdHNcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLWZzX2luaXRjYWxsKGtzeW1fdHJhY2VyX3N0YXRfaW5pdCk7CiAjZW5kaWYgLyogQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIgKi8KKworX19pbml0IHN0YXRpYyBpbnQgaW5pdF9rc3ltX3RyYWNlKHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKworCXRyYWNlX2NyZWF0ZV9maWxlKCJrc3ltX3RyYWNlX2ZpbHRlciIsIDA2NDQsIGRfdHJhY2VyLAorCQkJICBOVUxMLCAma3N5bV90cmFjaW5nX2ZvcHMpOworCisjaWZkZWYgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIKKwl0cmFjZV9jcmVhdGVfZmlsZSgia3N5bV9wcm9maWxlIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkgIE5VTEwsICZrc3ltX3Byb2ZpbGVfZm9wcyk7CisjZW5kaWYKKworCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmtzeW1fdHJhY2VyKTsKK30KK2RldmljZV9pbml0Y2FsbChpbml0X2tzeW1fdHJhY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKaW5kZXggZjY2OTM5Ni4uYTc5NzRhNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCkBAIC05Myw2ICs5Myw3IEBACiAJLndhcm5pbmdfc3ltYm9sCQk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKIAkuc3RhY2sJCQk9IGJhY2t0cmFjZV9zdGFjaywKIAkuYWRkcmVzcwkJPSBiYWNrdHJhY2VfYWRkcmVzcywKKwkud2Fsa19zdGFjawkJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAxY2ZlNTE2Li45N2IxMzZmIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMTE3LDYgKzExNywxMCBAQAogY29uZmlnIERFQ09NUFJFU1NfTFpNQQogCXRyaXN0YXRlCiAKK2NvbmZpZyBERUNPTVBSRVNTX0xaTworCXNlbGVjdCBMWk9fREVDT01QUkVTUworCXRyaXN0YXRlCisKICMKICMgR2VuZXJpYyBhbGxvY2F0b3Igc3VwcG9ydCBpcyBzZWxlY3RlZCBpZiBuZWVkZWQKICMKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggOGNmOTkzOC4uMjVjM2VkNSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTM2MCw2ICszNjAsNyBAQAogCXNlbGVjdCBERUJVR19GUyBpZiBTWVNGUwogCXNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVAogCXNlbGVjdCBLQUxMU1lNUworCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBtZW1vcnkgbGVhawogCSAgZGV0ZWN0b3IuIFRoZSBtZW1vcnkgYWxsb2NhdGlvbi9mcmVlaW5nIGlzIHRyYWNlZCBpbiBhIHdheQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDM0N2FkOGQuLjNiMGI0YTYgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTIxLDcgKzIxLDcgQEAKIAogb2JqLXkgKz0gYmNkLm8gZGl2NjQubyBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubyBcCiAJIGJ1c3Rfc3BpbmxvY2tzLm8gaGV4ZHVtcC5vIGthc3ByaW50Zi5vIGJpdG1hcC5vIHNjYXR0ZXJsaXN0Lm8gXAotCSBzdHJpbmdfaGVscGVycy5vIGdjZC5vCisJIHN0cmluZ19oZWxwZXJzLm8gZ2NkLm8gbGlzdF9zb3J0Lm8KIAogaWZlcSAoJChDT05GSUdfREVCVUdfS09CSkVDVCkseSkKIENGTEFHU19rb2JqZWN0Lm8gKz0gLURERUJVRwpAQCAtNjksNiArNjksNyBAQAogbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfR1pJUCkgKz0gZGVjb21wcmVzc19pbmZsYXRlLm8KIGxpYi0kKENPTkZJR19ERUNPTVBSRVNTX0JaSVAyKSArPSBkZWNvbXByZXNzX2J1bnppcDIubwogbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfTFpNQSkgKz0gZGVjb21wcmVzc191bmx6bWEubworbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfTFpPKSArPSBkZWNvbXByZXNzX3VubHpvLm8KIAogb2JqLSQoQ09ORklHX1RFWFRTRUFSQ0gpICs9IHRleHRzZWFyY2gubwogb2JqLSQoQ09ORklHX1RFWFRTRUFSQ0hfS01QKSArPSB0c19rbXAubwpkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3MuYyBiL2xpYi9kZWNvbXByZXNzLmMKaW5kZXggZDI4NDJmNS4uYTc2MDY4MSAxMDA2NDQKLS0tIGEvbGliL2RlY29tcHJlc3MuYworKysgYi9saWIvZGVjb21wcmVzcy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvYnVuemlwMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvdW5sem1hLmg+CiAjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy9pbmZsYXRlLmg+CisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy91bmx6by5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTIyLDYgKzIzLDkgQEAKICNpZm5kZWYgQ09ORklHX0RFQ09NUFJFU1NfTFpNQQogIyBkZWZpbmUgdW5sem1hIE5VTEwKICNlbmRpZgorI2lmbmRlZiBDT05GSUdfREVDT01QUkVTU19MWk8KKyMgZGVmaW5lIHVubHpvIE5VTEwKKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXByZXNzX2Zvcm1hdCB7CiAJdW5zaWduZWQgY2hhciBtYWdpY1syXTsKQEAgLTMyLDYgKzM2LDcgQEAKIAl7IHswMzcsIDAyMzZ9LCAiZ3ppcCIsIGd1bnppcCB9LAogCXsgezB4NDIsIDB4NWF9LCAiYnppcDIiLCBidW56aXAyIH0sCiAJeyB7MHg1ZCwgMHgwMH0sICJsem1hIiwgdW5sem1hIH0sCisJeyB7MHg4OSwgMHg0Y30sICJsem8iLCB1bmx6byB9LAogCXsgezAsIDB9LCBOVUxMLCBOVUxMIH0KIH07CiAKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyBiL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYwppbmRleCA3NjA3NDIwLi5hNGU5NzFkIDEwMDY0NAotLS0gYS9saWIvZGVjb21wcmVzc19idW56aXAyLmMKKysrIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCkBAIC02MzcsNiArNjM3LDggQEAKIAogCS8qIEFsbG9jYXRlIGJ1bnppcF9kYXRhLiAgTW9zdCBmaWVsZHMgaW5pdGlhbGl6ZSB0byB6ZXJvLiAqLwogCWJkID0gKmJkcCA9IG1hbGxvYyhpKTsKKwlpZiAoIWJkKQorCQlyZXR1cm4gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJbWVtc2V0KGJkLCAwLCBzaXplb2Yoc3RydWN0IGJ1bnppcF9kYXRhKSk7CiAJLyogU2V0dXAgaW5wdXQgYnVmZmVyICovCiAJYmQtPmluYnVmID0gaW5idWY7CkBAIC02NjQsNiArNjY2LDggQEAKIAliZC0+ZGJ1ZlNpemUgPSAxMDAwMDAqKGktQlpoMCk7CiAKIAliZC0+ZGJ1ZiA9IGxhcmdlX21hbGxvYyhiZC0+ZGJ1ZlNpemUgKiBzaXplb2YoaW50KSk7CisJaWYgKCFiZC0+ZGJ1ZikKKwkJcmV0dXJuIFJFVFZBTF9PVVRfT0ZfTUVNT1JZOwogCXJldHVybiBSRVRWQUxfT0s7CiB9CiAKQEAgLTY4Niw3ICs2OTAsNyBAQAogCiAJaWYgKCFvdXRidWYpIHsKIAkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZXIiKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJfQogCWlmIChidWYpCiAJCWluYnVmID0gYnVmOwpAQCAtNjk0LDYgKzY5OCw3IEBACiAJCWluYnVmID0gbWFsbG9jKEJaSVAyX0lPQlVGX1NJWkUpOwogCWlmICghaW5idWYpIHsKIAkJZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnB1dCBidWZlciIpOworCQlpID0gUkVUVkFMX09VVF9PRl9NRU1PUlk7CiAJCWdvdG8gZXhpdF8wOwogCX0KIAlpID0gc3RhcnRfYnVuemlwKCZiZCwgaW5idWYsIGxlbiwgZmlsbCk7CkBAIC03MjAsMTEgKzcyNSwxNCBAQAogCX0gZWxzZSBpZiAoaSA9PSBSRVRWQUxfVU5FWFBFQ1RFRF9PVVRQVVRfRU9GKSB7CiAJCWVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kcyB1bmV4cGVjdGVkbHkiKTsKIAl9CisJaWYgKCFiZCkKKwkJZ290byBleGl0XzE7CiAJaWYgKGJkLT5kYnVmKQogCQlsYXJnZV9mcmVlKGJkLT5kYnVmKTsKIAlpZiAocG9zKQogCQkqcG9zID0gYmQtPmluYnVmUG9zOwogCWZyZWUoYmQpOworZXhpdF8xOgogCWlmICghYnVmKQogCQlmcmVlKGluYnVmKTsKIGV4aXRfMDoKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX3VubHpvLmMgYi9saWIvZGVjb21wcmVzc191bmx6by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTIxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVjb21wcmVzc191bmx6by5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogTFpPIGRlY29tcHJlc3NvciBmb3IgdGhlIExpbnV4IGtlcm5lbC4gQ29kZSBib3Jyb3dlZCBmcm9tIHRoZSBsem8KKyAqIGltcGxlbWVudGF0aW9uIGJ5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIuCisgKgorICogTGludXgga2VybmVsIGFkYXB0YXRpb246CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkKKyAqIEFsYmluIFRvbm5lcnJlLCBGcmVlIEVsZWN0cm9ucyA8YWxiaW4udG9ubmVycmVAZnJlZS1lbGVjdHJvbnMuY29tPgorICoKKyAqIE9yaWdpbmFsIGNvZGU6CisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIGx6b3AgYW5kIHRoZSBMWk8gbGlicmFyeSBhcmUgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgdGhlbQorICogYW5kL29yIG1vZGlmeSB0aGVtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgKiA8bWFya3VzQG9iZXJodW1lci5jb20+CisgKiBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem9wLworICovCisKKyNpZmRlZiBTVEFUSUMKKyNpbmNsdWRlICJsem8vbHpvMXhfZGVjb21wcmVzcy5jIgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVjb21wcmVzcy91bmx6by5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2x6by5oPgorI2luY2x1ZGUgPGxpbnV4L2RlY29tcHJlc3MvbW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsem9wX21hZ2ljW10gPSB7CisJMHg4OSwgMHg0YywgMHg1YSwgMHg0ZiwgMHgwMCwgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYSB9OworCisjZGVmaW5lIExaT19CTE9DS19TSVpFICAgICAgICAoMjU2KjEwMjRsKQorI2RlZmluZSBIRUFERVJfSEFTX0ZJTFRFUiAgICAgIDB4MDAwMDA4MDBMCisKK1NUQVRJQyBpbmxpbmUgaW50IElOSVQgcGFyc2VfaGVhZGVyKHU4ICppbnB1dCwgdTggKnNraXApCit7CisJaW50IGw7CisJdTggKnBhcnNlID0gaW5wdXQ7CisJdTggbGV2ZWwgPSAwOworCXUxNiB2ZXJzaW9uOworCisJLyogcmVhZCBtYWdpYzogOSBmaXJzdCBiaXRzICovCisJZm9yIChsID0gMDsgbCA8IDk7IGwrKykgeworCQlpZiAoKnBhcnNlKysgIT0gbHpvcF9tYWdpY1tsXSkKKwkJCXJldHVybiAwOworCX0KKwkvKiBnZXQgdmVyc2lvbiAoMmJ5dGVzKSwgc2tpcCBsaWJyYXJ5IHZlcnNpb24gKDIpLAorCSAqICduZWVkIHRvIGJlIGV4dHJhY3RlZCcgdmVyc2lvbiAoMikgYW5kCisJICogbWV0aG9kICgxKSAqLworCXZlcnNpb24gPSBnZXRfdW5hbGlnbmVkX2JlMTYocGFyc2UpOworCXBhcnNlICs9IDc7CisJaWYgKHZlcnNpb24gPj0gMHgwOTQwKQorCQlsZXZlbCA9ICpwYXJzZSsrOworCWlmIChnZXRfdW5hbGlnbmVkX2JlMzIocGFyc2UpICYgSEVBREVSX0hBU19GSUxURVIpCisJCXBhcnNlICs9IDg7IC8qIGZsYWdzICsgZmlsdGVyIGluZm8gKi8KKwllbHNlCisJCXBhcnNlICs9IDQ7IC8qIGZsYWdzICovCisKKwkvKiBza2lwIG1vZGUgYW5kIG10aW1lX2xvdyAqLworCXBhcnNlICs9IDg7CisJaWYgKHZlcnNpb24gPj0gMHgwOTQwKQorCQlwYXJzZSArPSA0OwkvKiBza2lwIG10aW1lX2hpZ2ggKi8KKworCWwgPSAqcGFyc2UrKzsKKwkvKiBkb24ndCBjYXJlIGFib3V0IHRoZSBmaWxlIG5hbWUsIGFuZCBza2lwIGNoZWNrc3VtICovCisJcGFyc2UgKz0gbCArIDQ7CisKKwkqc2tpcCA9IHBhcnNlIC0gaW5wdXQ7CisJcmV0dXJuIDE7Cit9CisKK1NUQVRJQyBpbmxpbmUgaW50IElOSVQgdW5sem8odTggKmlucHV0LCBpbnQgaW5fbGVuLAorCQkJCWludCAoKmZpbGwpICh2b2lkICosIHVuc2lnbmVkIGludCksCisJCQkJaW50ICgqZmx1c2gpICh2b2lkICosIHVuc2lnbmVkIGludCksCisJCQkJdTggKm91dHB1dCwgaW50ICpwb3NwLAorCQkJCXZvaWQgKCplcnJvcl9mbikgKGNoYXIgKngpKQoreworCXU4IHNraXAgPSAwLCByID0gMDsKKwl1MzIgc3JjX2xlbiwgZHN0X2xlbjsKKwlzaXplX3QgdG1wOworCXU4ICppbl9idWYsICppbl9idWZfc2F2ZSwgKm91dF9idWY7CisJaW50IG9ieXRlc19wcm9jZXNzZWQgPSAwOworCisJc2V0X2Vycm9yX2ZuKGVycm9yX2ZuKTsKKworCWlmIChvdXRwdXQpIHsKKwkJb3V0X2J1ZiA9IG91dHB1dDsKKwl9IGVsc2UgaWYgKCFmbHVzaCkgeworCQllcnJvcigiTlVMTCBvdXRwdXQgcG9pbnRlciBhbmQgbm8gZmx1c2ggZnVuY3Rpb24gcHJvdmlkZWQiKTsKKwkJZ290byBleGl0OworCX0gZWxzZSB7CisJCW91dF9idWYgPSBtYWxsb2MoTFpPX0JMT0NLX1NJWkUpOworCQlpZiAoIW91dF9idWYpIHsKKwkJCWVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciIpOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJaWYgKGlucHV0ICYmIGZpbGwpIHsKKwkJZXJyb3IoIkJvdGggaW5wdXQgcG9pbnRlciBhbmQgZmlsbCBmdW5jdGlvbiBwcm92aWRlZCwgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIik7CisJCWdvdG8gZXhpdF8xOworCX0gZWxzZSBpZiAoaW5wdXQpIHsKKwkJaW5fYnVmID0gaW5wdXQ7CisJfSBlbHNlIGlmICghZmlsbCB8fCAhcG9zcCkgeworCQllcnJvcigiTlVMTCBpbnB1dCBwb2ludGVyIGFuZCBtaXNzaW5nIHBvc2l0aW9uIHBvaW50ZXIgb3IgZmlsbCBmdW5jdGlvbiIpOworCQlnb3RvIGV4aXRfMTsKKwl9IGVsc2UgeworCQlpbl9idWYgPSBtYWxsb2MobHpvMXhfd29yc3RfY29tcHJlc3MoTFpPX0JMT0NLX1NJWkUpKTsKKwkJaWYgKCFpbl9idWYpIHsKKwkJCWVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgaW5wdXQgYnVmZmVyIik7CisJCQlnb3RvIGV4aXRfMTsKKwkJfQorCX0KKwlpbl9idWZfc2F2ZSA9IGluX2J1ZjsKKworCWlmIChwb3NwKQorCQkqcG9zcCA9IDA7CisKKwlpZiAoZmlsbCkKKwkJZmlsbChpbl9idWYsIGx6bzF4X3dvcnN0X2NvbXByZXNzKExaT19CTE9DS19TSVpFKSk7CisKKwlpZiAoIXBhcnNlX2hlYWRlcihpbnB1dCwgJnNraXApKSB7CisJCWVycm9yKCJpbnZhbGlkIGhlYWRlciIpOworCQlnb3RvIGV4aXRfMjsKKwl9CisJaW5fYnVmICs9IHNraXA7CisKKwlpZiAocG9zcCkKKwkJKnBvc3AgPSBza2lwOworCisJZm9yICg7OykgeworCQkvKiByZWFkIHVuY29tcHJlc3NlZCBibG9jayBzaXplICovCisJCWRzdF9sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoaW5fYnVmKTsKKwkJaW5fYnVmICs9IDQ7CisKKwkJLyogZXhpdCBpZiBsYXN0IGJsb2NrICovCisJCWlmIChkc3RfbGVuID09IDApIHsKKwkJCWlmIChwb3NwKQorCQkJCSpwb3NwICs9IDQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChkc3RfbGVuID4gTFpPX0JMT0NLX1NJWkUpIHsKKwkJCWVycm9yKCJkZXN0IGxlbiBsb25nZXIgdGhhbiBibG9jayBzaXplIik7CisJCQlnb3RvIGV4aXRfMjsKKwkJfQorCisJCS8qIHJlYWQgY29tcHJlc3NlZCBibG9jayBzaXplLCBhbmQgc2tpcCBibG9jayBjaGVja3N1bSBpbmZvICovCisJCXNyY19sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoaW5fYnVmKTsKKwkJaW5fYnVmICs9IDg7CisKKwkJaWYgKHNyY19sZW4gPD0gMCB8fCBzcmNfbGVuID4gZHN0X2xlbikgeworCQkJZXJyb3IoImZpbGUgY29ycnVwdGVkIik7CisJCQlnb3RvIGV4aXRfMjsKKwkJfQorCisJCS8qIGRlY29tcHJlc3MgKi8KKwkJdG1wID0gZHN0X2xlbjsKKwkJciA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZSgodTggKikgaW5fYnVmLCBzcmNfbGVuLAorCQkJCQkJb3V0X2J1ZiwgJnRtcCk7CisKKwkJaWYgKHIgIT0gTFpPX0VfT0sgfHwgZHN0X2xlbiAhPSB0bXApIHsKKwkJCWVycm9yKCJDb21wcmVzc2VkIGRhdGEgdmlvbGF0aW9uIik7CisJCQlnb3RvIGV4aXRfMjsKKwkJfQorCisJCW9ieXRlc19wcm9jZXNzZWQgKz0gZHN0X2xlbjsKKwkJaWYgKGZsdXNoKQorCQkJZmx1c2gob3V0X2J1ZiwgZHN0X2xlbik7CisJCWlmIChvdXRwdXQpCisJCQlvdXRfYnVmICs9IGRzdF9sZW47CisJCWlmIChwb3NwKQorCQkJKnBvc3AgKz0gc3JjX2xlbiArIDEyOworCQlpZiAoZmlsbCkgeworCQkJaW5fYnVmID0gaW5fYnVmX3NhdmU7CisJCQlmaWxsKGluX2J1ZiwgbHpvMXhfd29yc3RfY29tcHJlc3MoTFpPX0JMT0NLX1NJWkUpKTsKKwkJfSBlbHNlCisJCQlpbl9idWYgKz0gc3JjX2xlbjsKKwl9CisKK2V4aXRfMjoKKwlpZiAoIWlucHV0KQorCQlmcmVlKGluX2J1Zik7CitleGl0XzE6CisJaWYgKCFvdXRwdXQpCisJCWZyZWUob3V0X2J1Zik7CitleGl0OgorCXJldHVybiBvYnl0ZXNfcHJvY2Vzc2VkOworfQorCisjZGVmaW5lIGRlY29tcHJlc3MgdW5sem8KZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwppbmRleCBkOWIwOGUwLi43ZDJmMGIzIDEwMDY0NAotLS0gYS9saWIvZG1hLWRlYnVnLmMKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC02NzAsMTIgKzY3MCwxMyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBkbWFfZGVidWdfZGV2aWNlX2NoYW5nZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgZG1hX2RlYnVnX2RldmljZV9jaGFuZ2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKIAlpbnQgY291bnQ7CiAKKwlpZiAoZ2xvYmFsX2Rpc2FibGUpCisJCXJldHVybiAwOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVI6CkBAIC02OTcsNiArNjk4LDkgQEAKIHsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iOwogCisJaWYgKGdsb2JhbF9kaXNhYmxlKQorCQlyZXR1cm47CisKIAluYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub3RpZmllcl9ibG9jayksIEdGUF9LRVJORUwpOwogCWlmIChuYiA9PSBOVUxMKSB7CiAJCXByX2VycigiZG1hX2RlYnVnX2FkZF9idXM6IG91dCBvZiBtZW1vcnlcbiIpOwpAQCAtOTA5LDYgKzkxMyw5IEBACiAJCQkJcmVmLT5zaXplKTsKIAl9CiAKKwlpZiAoZW50cnktPmRpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkKKwkJZ290byBvdXQ7CisKIAlpZiAocmVmLT5kaXJlY3Rpb24gIT0gZW50cnktPmRpcmVjdGlvbikgewogCQllcnJfcHJpbnRrKGRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIHN5bmNzICIKIAkJCQkiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBkaXJlY3Rpb24gIgpAQCAtOTE5LDkgKzkyNiw2IEBACiAJCQkJZGlyMm5hbWVbcmVmLT5kaXJlY3Rpb25dKTsKIAl9CiAKLQlpZiAoZW50cnktPmRpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkKLQkJZ290byBvdXQ7Ci0KIAlpZiAodG9fY3B1ICYmICEoZW50cnktPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpICYmCiAJCSAgICAgICEocmVmLT5kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkpCiAJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgc3luY3MgIgpAQCAtOTQ0LDcgKzk0OCw2IEBACiAKIG91dDoKIAlwdXRfaGFzaF9idWNrZXQoYnVja2V0LCAmZmxhZ3MpOwotCiB9CiAKIHZvaWQgZGVidWdfZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsCmRpZmYgLS1naXQgYS9saWIvbGlzdF9zb3J0LmMgYi9saWIvbGlzdF9zb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkMTFlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saXN0X3NvcnQuYwpAQCAtMCwwICsxLDEwMiBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Rfc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKy8qKgorICogbGlzdF9zb3J0IC0gc29ydCBhIGxpc3QuCisgKiBAcHJpdjogcHJpdmF0ZSBkYXRhLCBwYXNzZWQgdG8gQGNtcAorICogQGhlYWQ6IHRoZSBsaXN0IHRvIHNvcnQKKyAqIEBjbXA6IHRoZSBlbGVtZW50cyBjb21wYXJpc29uIGZ1bmN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZCBieSBNYXJrIEogUm9iZXJ0cyA8bWpyQHpuZXgub3JnPi4gSXQKKyAqIGltcGxlbWVudHMgIm1lcmdlIHNvcnQiIHdoaWNoIGhhcyBPKG5sb2cobikpIGNvbXBsZXhpdHkuIFRoZSBsaXN0IGlzIHNvcnRlZAorICogaW4gYXNjZW5kaW5nIG9yZGVyLgorICoKKyAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIEBjbXAgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgaWYgQGEgaXMKKyAqIGxlc3MgdGhhbiBAYiwgYW5kIGEgcG9zaXRpdmUgdmFsdWUgaWYgQGEgaXMgZ3JlYXRlciB0aGFuIEBiLiBJZiBAYSBhbmQgQGIKKyAqIGFyZSBlcXVpdmFsZW50LCB0aGVuIGl0IGRvZXMgbm90IG1hdHRlciB3aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqLwordm9pZCBsaXN0X3NvcnQodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkgICAgICAgaW50ICgqY21wKSh2b2lkICpwcml2LCBzdHJ1Y3QgbGlzdF9oZWFkICphLAorCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpiKSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSwgKmUsICpsaXN0LCAqdGFpbCwgKm9sZGhlYWQ7CisJaW50IGluc2l6ZSwgbm1lcmdlcywgcHNpemUsIHFzaXplLCBpOworCisJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCXJldHVybjsKKworCWxpc3QgPSBoZWFkLT5uZXh0OworCWxpc3RfZGVsKGhlYWQpOworCWluc2l6ZSA9IDE7CisJZm9yICg7OykgeworCQlwID0gb2xkaGVhZCA9IGxpc3Q7CisJCWxpc3QgPSB0YWlsID0gTlVMTDsKKwkJbm1lcmdlcyA9IDA7CisKKwkJd2hpbGUgKHApIHsKKwkJCW5tZXJnZXMrKzsKKwkJCXEgPSBwOworCQkJcHNpemUgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IGluc2l6ZTsgaSsrKSB7CisJCQkJcHNpemUrKzsKKwkJCQlxID0gcS0+bmV4dCA9PSBvbGRoZWFkID8gTlVMTCA6IHEtPm5leHQ7CisJCQkJaWYgKCFxKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJcXNpemUgPSBpbnNpemU7CisJCQl3aGlsZSAocHNpemUgPiAwIHx8IChxc2l6ZSA+IDAgJiYgcSkpIHsKKwkJCQlpZiAoIXBzaXplKSB7CisJCQkJCWUgPSBxOworCQkJCQlxID0gcS0+bmV4dDsKKwkJCQkJcXNpemUtLTsKKwkJCQkJaWYgKHEgPT0gb2xkaGVhZCkKKwkJCQkJCXEgPSBOVUxMOworCQkJCX0gZWxzZSBpZiAoIXFzaXplIHx8ICFxKSB7CisJCQkJCWUgPSBwOworCQkJCQlwID0gcC0+bmV4dDsKKwkJCQkJcHNpemUtLTsKKwkJCQkJaWYgKHAgPT0gb2xkaGVhZCkKKwkJCQkJCXAgPSBOVUxMOworCQkJCX0gZWxzZSBpZiAoY21wKHByaXYsIHAsIHEpIDw9IDApIHsKKwkJCQkJZSA9IHA7CisJCQkJCXAgPSBwLT5uZXh0OworCQkJCQlwc2l6ZS0tOworCQkJCQlpZiAocCA9PSBvbGRoZWFkKQorCQkJCQkJcCA9IE5VTEw7CisJCQkJfSBlbHNlIHsKKwkJCQkJZSA9IHE7CisJCQkJCXEgPSBxLT5uZXh0OworCQkJCQlxc2l6ZS0tOworCQkJCQlpZiAocSA9PSBvbGRoZWFkKQorCQkJCQkJcSA9IE5VTEw7CisJCQkJfQorCQkJCWlmICh0YWlsKQorCQkJCQl0YWlsLT5uZXh0ID0gZTsKKwkJCQllbHNlCisJCQkJCWxpc3QgPSBlOworCQkJCWUtPnByZXYgPSB0YWlsOworCQkJCXRhaWwgPSBlOworCQkJfQorCQkJcCA9IHE7CisJCX0KKworCQl0YWlsLT5uZXh0ID0gbGlzdDsKKwkJbGlzdC0+cHJldiA9IHRhaWw7CisKKwkJaWYgKG5tZXJnZXMgPD0gMSkKKwkJCWJyZWFrOworCisJCWluc2l6ZSAqPSAyOworCX0KKworCWhlYWQtPm5leHQgPSBsaXN0OworCWhlYWQtPnByZXYgPSBsaXN0LT5wcmV2OworCWxpc3QtPnByZXYtPm5leHQgPSBoZWFkOworCWxpc3QtPnByZXYgPSBoZWFkOworfQorCitFWFBPUlRfU1lNQk9MKGxpc3Rfc29ydCk7CmRpZmYgLS1naXQgYS9saWIvbHpvL2x6bzF4X2RlY29tcHJlc3MuYyBiL2xpYi9sem8vbHpvMXhfZGVjb21wcmVzcy5jCmluZGV4IDVkYzZiMjkuLmYyZmQwOTggMTAwNjQ0Ci0tLSBhL2xpYi9sem8vbHpvMXhfZGVjb21wcmVzcy5jCisrKyBiL2xpYi9sem8vbHpvMXhfZGVjb21wcmVzcy5jCkBAIC0xMSwxMSArMTEsMTMgQEAKICAqICBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KICAqLwogCisjaWZuZGVmIFNUQVRJQwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2x6by5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L2x6by5oPgogI2luY2x1ZGUgImx6b2RlZnMuaCIKIAogI2RlZmluZSBIQVZFX0lQKHgsIGlwX2VuZCwgaXApICgoc2l6ZV90KShpcF9lbmQgLSBpcCkgPCAoeCkpCkBAIC0yNDQsOSArMjQ2LDEwIEBACiAJKm91dF9sZW4gPSBvcCAtIG91dDsKIAlyZXR1cm4gTFpPX0VfTE9PS0JFSElORF9PVkVSUlVOOwogfQotCisjaWZuZGVmIFNUQVRJQwogRVhQT1JUX1NZTUJPTF9HUEwobHpvMXhfZGVjb21wcmVzc19zYWZlKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJMWk8xWCBEZWNvbXByZXNzb3IiKTsKIAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvcmF0aW9uYWwuYyBiL2xpYi9yYXRpb25hbC5jCmluZGV4IGIzYzA5OWIuLjNlZDI0N2IgMTAwNjQ0Ci0tLSBhL2xpYi9yYXRpb25hbC5jCisrKyBiL2xpYi9yYXRpb25hbC5jCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9yYXRpb25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAvKgogICogY2FsY3VsYXRlIGJlc3QgcmF0aW9uYWwgYXBwcm94aW1hdGlvbiBmb3IgYSBnaXZlbiBmcmFjdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGFmY2U5NmEuLjlmNzViNGUgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpbmcuYworKysgYi9saWIvc3RyaW5nLmMKQEAgLTMzOCwxMCArMzM4LDEwIEBACiAjZW5kaWYKIAogLyoqCi0gKiBza2lwX3NwYWNlcyAtIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gQHMuCi0gKiBAczogVGhlIHN0cmluZyB0byBiZSBzdHJpcHBlZC4KKyAqIHNraXBfc3BhY2VzIC0gUmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2UgZnJvbSBAc3RyLgorICogQHN0cjogVGhlIHN0cmluZyB0byBiZSBzdHJpcHBlZC4KICAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIEBzLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiBAc3RyLgogICovCiBjaGFyICpza2lwX3NwYWNlcyhjb25zdCBjaGFyICpzdHIpCiB7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDczNTM0M2YuLjNiOGFlZWMgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC05MDMsNyArOTAzLDcgQEAKICAqICAgICAgIElQdjYgb21pdHMgdGhlIGNvbG9ucyAoMDEwMjAzMDQuLi4wZikKICAqICAgICAgIElQdjQgdXNlcyBkb3Qtc2VwYXJhdGVkIGRlY2ltYWwgd2l0aCBsZWFkaW5nIDAncyAoMDEwLjEyMy4wNDUuMDA2KQogICogLSAnSTZjJyBmb3IgSVB2NiBhZGRyZXNzZXMgcHJpbnRlZCBhcyBzcGVjaWZpZWQgYnkKLSAqICAgICAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQta2F3YW11cmEtaXB2Ni10ZXh0LXJlcHJlc2VudGF0aW9uLTAzLnR4dAorICogICAgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi02bWFuLXRleHQtYWRkci1yZXByZXNlbnRhdGlvbi0wMAogICogLSAnVScgRm9yIGEgMTYgYnl0ZSBVVUlEL0dVSUQsIGl0IHByaW50cyB0aGUgVVVJRC9HVUlEIGluIHRoZSBmb3JtCiAgKiAgICAgICAieHh4eHh4eHgteHh4eC14eHh4LXh4eHgteHh4eHh4eHh4eHh4IgogICogICAgICAgT3B0aW9ucyBmb3IgJXBVIGFyZToKQEAgLTExNzksNyArMTE3OSwxOCBAQAogICogJXBzIG91dHB1dCB0aGUgbmFtZSBvZiBhIHRleHQgc3ltYm9sIHdpdGhvdXQgb2Zmc2V0CiAgKiAlcEYgb3V0cHV0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoIGl0cyBvZmZzZXQKICAqICVwZiBvdXRwdXQgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhvdXQgaXRzIG9mZnNldAotICogJXBSIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZQorICogJXBSIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZSB3aXRoIGRlY29kZWQgZmxhZ3MKKyAqICVwciBvdXRwdXQgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gYSBzdHJ1Y3QgcmVzb3VyY2Ugd2l0aCByYXcgZmxhZ3MKKyAqICVwTSBvdXRwdXQgYSA2LWJ5dGUgTUFDIGFkZHJlc3Mgd2l0aCBjb2xvbnMKKyAqICVwbSBvdXRwdXQgYSA2LWJ5dGUgTUFDIGFkZHJlc3Mgd2l0aG91dCBjb2xvbnMKKyAqICVwSTQgcHJpbnQgYW4gSVB2NCBhZGRyZXNzIHdpdGhvdXQgbGVhZGluZyB6ZXJvcworICogJXBpNCBwcmludCBhbiBJUHY0IGFkZHJlc3Mgd2l0aCBsZWFkaW5nIHplcm9zCisgKiAlcEk2IHByaW50IGFuIElQdjYgYWRkcmVzcyB3aXRoIGNvbG9ucworICogJXBpNiBwcmludCBhbiBJUHY2IGFkZHJlc3Mgd2l0aG91dCBjb2xvbnMKKyAqICVwSTZjIHByaW50IGFuIElQdjYgYWRkcmVzcyBhcyBzcGVjaWZpZWQgYnkKKyAqICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi02bWFuLXRleHQtYWRkci1yZXByZXNlbnRhdGlvbi0wMAorICogJXBVW2JCbExdIHByaW50IGEgVVVJRC9HVUlEIGluIGJpZyBvciBsaXR0bGUgZW5kaWFuIHVzaW5nIGxvd2VyIG9yIHVwcGVyCisgKiAgIGNhc2UuCiAgKiAlbiBpcyBpZ25vcmVkCiAgKgogICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKZGlmZiAtLWdpdCBhL2xpYi96bGliX2luZmxhdGUvaW5mZmFzdC5jIGIvbGliL3psaWJfaW5mbGF0ZS9pbmZmYXN0LmMKaW5kZXggODU1MGIwYy4uMDVlMTU1OSAxMDA2NDQKLS0tIGEvbGliL3psaWJfaW5mbGF0ZS9pbmZmYXN0LmMKKysrIGIvbGliL3psaWJfaW5mbGF0ZS9pbmZmYXN0LmMKQEAgLTQsNiArNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3p1dGlsLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlICJpbmZ0cmVlcy5oIgogI2luY2x1ZGUgImluZmxhdGUuaCIKICNpbmNsdWRlICJpbmZmYXN0LmgiCkBAIC0yNCw5ICsyNiwxMSBAQAogI2lmZGVmIFBPU1RJTkMKICMgIGRlZmluZSBPRkYgMAogIyAgZGVmaW5lIFBVUChhKSAqKGEpKysKKyMgIGRlZmluZSBVUF9VTkFMSUdORUQoYSkgZ2V0X3VuYWxpZ25lZCgoYSkrKykKICNlbHNlCiAjICBkZWZpbmUgT0ZGIDEKICMgIGRlZmluZSBQVVAoYSkgKisrKGEpCisjICBkZWZpbmUgVVBfVU5BTElHTkVEKGEpIGdldF91bmFsaWduZWQoKysoYSkpCiAjZW5kaWYKIAogLyoKQEAgLTIzOSwxOCArMjQzLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CisJCSAgICB1bnNpZ25lZCBzaG9ydCAqc291dDsKKwkJICAgIHVuc2lnbmVkIGxvbmcgbG9vcHM7CisKICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiA+IDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqLworCQkgICAgLyogQWxpZ24gb3V0IGFkZHIgKi8KKwkJICAgIGlmICghKChsb25nKShvdXQgLSAxICsgT0ZGKSAmIDEpKSB7CisJCQlQVVAob3V0KSA9IFBVUChmcm9tKTsKKwkJCWxlbi0tOworCQkgICAgfQorCQkgICAgc291dCA9ICh1bnNpZ25lZCBzaG9ydCAqKShvdXQgLSBPRkYpOworCQkgICAgaWYgKGRpc3QgPiAyKSB7CisJCQl1bnNpZ25lZCBzaG9ydCAqc2Zyb207CisKKwkJCXNmcm9tID0gKHVuc2lnbmVkIHNob3J0ICopKGZyb20gLSBPRkYpOworCQkJbG9vcHMgPSBsZW4gPj4gMTsKKwkJCWRvCisJCQkgICAgUFVQKHNvdXQpID0gVVBfVU5BTElHTkVEKHNmcm9tKTsKKwkJCXdoaWxlICgtLWxvb3BzKTsKKwkJCW91dCA9ICh1bnNpZ25lZCBjaGFyICopc291dCArIE9GRjsKKwkJCWZyb20gPSAodW5zaWduZWQgY2hhciAqKXNmcm9tICsgT0ZGOworCQkgICAgfSBlbHNlIHsgLyogZGlzdCA9PSAxIG9yIGRpc3QgPT0gMiAqLworCQkJdW5zaWduZWQgc2hvcnQgcGF0MTY7CisKKwkJCXBhdDE2ID0gKihzb3V0LTIrMipPRkYpOworCQkJaWYgKGRpc3QgPT0gMSkKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwkJCSAgICBwYXQxNiA9IChwYXQxNiAmIDB4ZmYpIHwgKChwYXQxNiAmIDB4ZmYpIDw8IDgpOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJCQkgICAgcGF0MTYgPSAocGF0MTYgJiAweGZmMDApIHwgKChwYXQxNiAmIDB4ZmYwMCkgPj4gOCk7CisjZWxzZQorI2Vycm9yIF9fQklHX0VORElBTiBub3IgX19MSVRUTEVfRU5ESUFOIGlzIGRlZmluZWQKKyNlbmRpZgorCQkJbG9vcHMgPSBsZW4gPj4gMTsKKwkJCWRvCisJCQkgICAgUFVQKHNvdXQpID0gcGF0MTY7CisJCQl3aGlsZSAoLS1sb29wcyk7CisJCQlvdXQgPSAodW5zaWduZWQgY2hhciAqKXNvdXQgKyBPRkY7CisJCSAgICB9CisJCSAgICBpZiAobGVuICYgMSkKKwkJCVBVUChvdXQpID0gUFVQKGZyb20pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PSAwKSB7ICAgICAgICAgIC8qIDJuZCBsZXZlbCBkaXN0YW5jZSBjb2RlICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCA0M2VhOGMzLi4xN2I4OTQ3IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTIyMSw2ICsyMjEsNyBAQAogCiBjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSCiAgICAgICAgIGludCAiTG93IGFkZHJlc3Mgc3BhY2UgdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvbiIKKwlkZXBlbmRzIG9uIE1NVQogICAgICAgICBkZWZhdWx0IDQwOTYKICAgICAgICAgaGVscAogCSAgVGhpcyBpcyB0aGUgcG9ydGlvbiBvZiBsb3cgdmlydHVhbCBtZW1vcnkgd2hpY2ggc2hvdWxkIGJlIHByb3RlY3RlZApAQCAtMjUyLDcgKzI1Myw3IEBACiAKIGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1QKIAl0cmlzdGF0ZSAiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3IiCi0JZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSAmJiBERUJVR19LRVJORUwKKwlkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFICYmIERFQlVHX0tFUk5FTCAmJiBQUk9DX0ZTCiAJc2VsZWN0IFBST0NfUEFHRV9NT05JVE9SCiAKIGNvbmZpZyBOT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNjVmMzhjMi4uZTkxYjgxYiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAodW5saWtlbHkoc3ogPiBNQVhfT1JERVJfTlJfUEFHRVMpKSB7CisJaWYgKHVubGlrZWx5KHN6L1BBR0VfU0laRSA+IE1BWF9PUkRFUl9OUl9QQUdFUykpIHsKIAkJY2xlYXJfZ2lnYW50aWNfcGFnZShwYWdlLCBhZGRyLCBzeik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCAxM2YzM2IzLi41YjA2OWU0IDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTkzLDYgKzkzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTEwOCw3ICsxMDksNiBAQAogI2RlZmluZSBNU0VDU19NSU5fQUdFCQk1MDAwCS8qIG1pbmltdW0gb2JqZWN0IGFnZSBmb3IgcmVwb3J0aW5nICovCiAjZGVmaW5lIFNFQ1NfRklSU1RfU0NBTgkJNjAJLyogZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBzY2FuICovCiAjZGVmaW5lIFNFQ1NfU0NBTl9XQUlUCQk2MDAJLyogc3Vic2VxdWVudCBhdXRvIHNjYW5uaW5nIGRlbGF5ICovCi0jZGVmaW5lIEdSQVlfTElTVF9QQVNTRVMJMjUJLyogbWF4aW11bSBudW1iZXIgb2YgZ3JheSBsaXN0IHNjYW5zICovCiAjZGVmaW5lIE1BWF9TQ0FOX1NJWkUJCTQwOTYJLyogbWF4aW11bSBzaXplIG9mIGEgc2Nhbm5lZCBibG9jayAqLwogCiAjZGVmaW5lIEJZVEVTX1BFUl9QT0lOVEVSCXNpemVvZih2b2lkICopCkBAIC0xMTksOCArMTE5LDggQEAKIC8qIHNjYW5uaW5nIGFyZWEgaW5zaWRlIGEgbWVtb3J5IGJsb2NrICovCiBzdHJ1Y3Qga21lbWxlYWtfc2Nhbl9hcmVhIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCXNpemVfdCBsZW5ndGg7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwlzaXplX3Qgc2l6ZTsKIH07CiAKICNkZWZpbmUgS01FTUxFQUtfR1JFWQkwCkBAIC0xNDksNiArMTQ5LDggQEAKIAlpbnQgbWluX2NvdW50OwogCS8qIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRlcnMgZm91bmQgcG9pbnRpbmcgdG8gdGhpcyBvYmplY3QgKi8KIAlpbnQgY291bnQ7CisJLyogY2hlY2tzdW0gZm9yIGRldGVjdGluZyBtb2RpZmllZCBvYmplY3RzICovCisJdTMyIGNoZWNrc3VtOwogCS8qIG1lbW9yeSByYW5nZXMgdG8gYmUgc2Nhbm5lZCBpbnNpZGUgYW4gb2JqZWN0IChlbXB0eSBmb3IgYWxsKSAqLwogCXN0cnVjdCBobGlzdF9oZWFkIGFyZWFfbGlzdDsKIAl1bnNpZ25lZCBsb25nIHRyYWNlW01BWF9UUkFDRV07CkBAIC0xNjQsOCArMTY2LDYgQEAKICNkZWZpbmUgT0JKRUNUX1JFUE9SVEVECQkoMSA8PCAxKQogLyogZmxhZyBzZXQgdG8gbm90IHNjYW4gdGhlIG9iamVjdCAqLwogI2RlZmluZSBPQkpFQ1RfTk9fU0NBTgkJKDEgPDwgMikKLS8qIGZsYWcgc2V0IG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzICovCi0jZGVmaW5lIE9CSkVDVF9ORVcJCSgxIDw8IDMpCiAKIC8qIG51bWJlciBvZiBieXRlcyB0byBwcmludCBwZXIgbGluZTsgbXVzdCBiZSAxNiBvciAzMiAqLwogI2RlZmluZSBIRVhfUk9XX1NJWkUJCTE2CkBAIC0yNDEsOCArMjQxLDYgQEAKIAljb25zdCB2b2lkICpwdHI7CQkvKiBhbGxvY2F0ZWQvZnJlZWQgbWVtb3J5IGJsb2NrICovCiAJc2l6ZV90IHNpemU7CQkJLyogbWVtb3J5IGJsb2NrIHNpemUgKi8KIAlpbnQgbWluX2NvdW50OwkJCS8qIG1pbmltdW0gcmVmZXJlbmNlIGNvdW50ICovCi0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7CQkvKiBzY2FuIGFyZWEgb2Zmc2V0ICovCi0Jc2l6ZV90IGxlbmd0aDsJCQkvKiBzY2FuIGFyZWEgbGVuZ3RoICovCiAJdW5zaWduZWQgbG9uZyB0cmFjZVtNQVhfVFJBQ0VdOwkvKiBzdGFjayB0cmFjZSAqLwogCXVuc2lnbmVkIGludCB0cmFjZV9sZW47CQkvKiBzdGFjayB0cmFjZSBsZW5ndGggKi8KIH07CkBAIC0zMjMsMTEgKzMyMSw2IEBACiAJCW9iamVjdC0+Y291bnQgPj0gb2JqZWN0LT5taW5fY291bnQ7CiB9CiAKLXN0YXRpYyBib29sIGNvbG9yX2JsYWNrKGNvbnN0IHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKLXsKLQlyZXR1cm4gb2JqZWN0LT5taW5fY291bnQgPT0gS01FTUxFQUtfQkxBQ0s7Ci19Ci0KIC8qCiAgKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIHVucmVmZXJlbmNlZCBvbmx5IGlmIHRoZWlyIGNvbG9yIGlzIHdoaXRlLCB0aGV5IGhhdmUKICAqIG5vdCBiZSBkZWxldGVkIGFuZCBoYXZlIGEgbWluaW11bSBhZ2UgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIGNhdXNlZCBieQpAQCAtMzM1LDcgKzMyOCw3IEBACiAgKi8KIHN0YXRpYyBib29sIHVucmVmZXJlbmNlZF9vYmplY3Qoc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KQogewotCXJldHVybiAob2JqZWN0LT5mbGFncyAmIE9CSkVDVF9BTExPQ0FURUQpICYmIGNvbG9yX3doaXRlKG9iamVjdCkgJiYKKwlyZXR1cm4gKGNvbG9yX3doaXRlKG9iamVjdCkgJiYgb2JqZWN0LT5mbGFncyAmIE9CSkVDVF9BTExPQ0FURUQpICYmCiAJCXRpbWVfYmVmb3JlX2VxKG9iamVjdC0+amlmZmllcyArIGppZmZpZXNfbWluX2FnZSwKIAkJCSAgICAgICBqaWZmaWVzX2xhc3Rfc2Nhbik7CiB9CkBAIC0zNDgsMTEgKzM0MSwxMyBAQAogCQkJICAgICAgIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbXNlY3NfYWdlID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gb2JqZWN0LT5qaWZmaWVzKTsKIAogCXNlcV9wcmludGYoc2VxLCAidW5yZWZlcmVuY2VkIG9iamVjdCAweCUwOGx4IChzaXplICV6dSk6XG4iLAogCQkgICBvYmplY3QtPnBvaW50ZXIsIG9iamVjdC0+c2l6ZSk7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIGNvbW0gXCIlc1wiLCBwaWQgJWQsIGppZmZpZXMgJWx1XG4iLAotCQkgICBvYmplY3QtPmNvbW0sIG9iamVjdC0+cGlkLCBvYmplY3QtPmppZmZpZXMpOworCXNlcV9wcmludGYoc2VxLCAiICBjb21tIFwiJXNcIiwgcGlkICVkLCBqaWZmaWVzICVsdSAoYWdlICVkLiUwM2RzKVxuIiwKKwkJICAgb2JqZWN0LT5jb21tLCBvYmplY3QtPnBpZCwgb2JqZWN0LT5qaWZmaWVzLAorCQkgICBtc2Vjc19hZ2UgLyAxMDAwLCBtc2Vjc19hZ2UgJSAxMDAwKTsKIAloZXhfZHVtcF9vYmplY3Qoc2VxLCBvYmplY3QpOwogCXNlcV9wcmludGYoc2VxLCAiICBiYWNrdHJhY2U6XG4iKTsKIApAQCAtMzgxLDYgKzM3Niw3IEBACiAJcHJfbm90aWNlKCIgIG1pbl9jb3VudCA9ICVkXG4iLCBvYmplY3QtPm1pbl9jb3VudCk7CiAJcHJfbm90aWNlKCIgIGNvdW50ID0gJWRcbiIsIG9iamVjdC0+Y291bnQpOwogCXByX25vdGljZSgiICBmbGFncyA9IDB4JWx4XG4iLCBvYmplY3QtPmZsYWdzKTsKKwlwcl9ub3RpY2UoIiAgY2hlY2tzdW0gPSAlZFxuIiwgb2JqZWN0LT5jaGVja3N1bSk7CiAJcHJfbm90aWNlKCIgIGJhY2t0cmFjZTpcbiIpOwogCXByaW50X3N0YWNrX3RyYWNlKCZ0cmFjZSwgNCk7CiB9CkBAIC01MjIsMTIgKzUxOCwxMyBAQAogCUlOSVRfSExJU1RfSEVBRCgmb2JqZWN0LT5hcmVhX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZvYmplY3QtPmxvY2spOwogCWF0b21pY19zZXQoJm9iamVjdC0+dXNlX2NvdW50LCAxKTsKLQlvYmplY3QtPmZsYWdzID0gT0JKRUNUX0FMTE9DQVRFRCB8IE9CSkVDVF9ORVc7CisJb2JqZWN0LT5mbGFncyA9IE9CSkVDVF9BTExPQ0FURUQ7CiAJb2JqZWN0LT5wb2ludGVyID0gcHRyOwogCW9iamVjdC0+c2l6ZSA9IHNpemU7CiAJb2JqZWN0LT5taW5fY291bnQgPSBtaW5fY291bnQ7Ci0Jb2JqZWN0LT5jb3VudCA9IC0xOwkJCS8qIG5vIGNvbG9yIGluaXRpYWxseSAqLworCW9iamVjdC0+Y291bnQgPSAwOwkJCS8qIHdoaXRlIGNvbG9yIGluaXRpYWxseSAqLwogCW9iamVjdC0+amlmZmllcyA9IGppZmZpZXM7CisJb2JqZWN0LT5jaGVja3N1bSA9IDA7CiAKIAkvKiB0YXNrIGluZm9ybWF0aW9uICovCiAJaWYgKGluX2lycSgpKSB7CkBAIC03MjAsMTQgKzcxNywxMyBAQAogICogQWRkIGEgc2Nhbm5pbmcgYXJlYSB0byB0aGUgb2JqZWN0LiBJZiBhdCBsZWFzdCBvbmUgc3VjaCBhcmVhIGlzIGFkZGVkLAogICoga21lbWxlYWsgd2lsbCBvbmx5IHNjYW4gdGhlc2UgcmFuZ2VzIHJhdGhlciB0aGFuIHRoZSB3aG9sZSBtZW1vcnkgYmxvY2suCiAgKi8KLXN0YXRpYyB2b2lkIGFkZF9zY2FuX2FyZWEodW5zaWduZWQgbG9uZyBwdHIsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJICBzaXplX3QgbGVuZ3RoLCBnZnBfdCBnZnApCitzdGF0aWMgdm9pZCBhZGRfc2Nhbl9hcmVhKHVuc2lnbmVkIGxvbmcgcHRyLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwogCXN0cnVjdCBrbWVtbGVha19zY2FuX2FyZWEgKmFyZWE7CiAKLQlvYmplY3QgPSBmaW5kX2FuZF9nZXRfb2JqZWN0KHB0ciwgMCk7CisJb2JqZWN0ID0gZmluZF9hbmRfZ2V0X29iamVjdChwdHIsIDEpOwogCWlmICghb2JqZWN0KSB7CiAJCWttZW1sZWFrX3dhcm4oIkFkZGluZyBzY2FuIGFyZWEgdG8gdW5rbm93biBvYmplY3QgYXQgMHglMDhseFxuIiwKIAkJCSAgICAgIHB0cik7CkBAIC03NDEsNyArNzM3LDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7Ci0JaWYgKG9mZnNldCArIGxlbmd0aCA+IG9iamVjdC0+c2l6ZSkgeworCWlmIChwdHIgKyBzaXplID4gb2JqZWN0LT5wb2ludGVyICsgb2JqZWN0LT5zaXplKSB7CiAJCWttZW1sZWFrX3dhcm4oIlNjYW4gYXJlYSBsYXJnZXIgdGhhbiBvYmplY3QgMHglMDhseFxuIiwgcHRyKTsKIAkJZHVtcF9vYmplY3RfaW5mbyhvYmplY3QpOwogCQlrbWVtX2NhY2hlX2ZyZWUoc2Nhbl9hcmVhX2NhY2hlLCBhcmVhKTsKQEAgLTc0OSw4ICs3NDUsOCBAQAogCX0KIAogCUlOSVRfSExJU1RfTk9ERSgmYXJlYS0+bm9kZSk7Ci0JYXJlYS0+b2Zmc2V0ID0gb2Zmc2V0OwotCWFyZWEtPmxlbmd0aCA9IGxlbmd0aDsKKwlhcmVhLT5zdGFydCA9IHB0cjsKKwlhcmVhLT5zaXplID0gc2l6ZTsKIAogCWhsaXN0X2FkZF9oZWFkKCZhcmVhLT5ub2RlLCAmb2JqZWN0LT5hcmVhX2xpc3QpOwogb3V0X3VubG9jazoKQEAgLTc4Niw3ICs3ODIsNyBAQAogICogcHJvY2Vzc2VkIGxhdGVyIG9uY2Uga21lbWxlYWsgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBsb2dfZWFybHkoaW50IG9wX3R5cGUsIGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JCQkgICAgIGludCBtaW5fY291bnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorCQkJICAgICBpbnQgbWluX2NvdW50KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVhcmx5X2xvZyAqbG9nOwpAQCAtODA4LDggKzgwNCw2IEBACiAJbG9nLT5wdHIgPSBwdHI7CiAJbG9nLT5zaXplID0gc2l6ZTsKIAlsb2ctPm1pbl9jb3VudCA9IG1pbl9jb3VudDsKLQlsb2ctPm9mZnNldCA9IG9mZnNldDsKLQlsb2ctPmxlbmd0aCA9IGxlbmd0aDsKIAlpZiAob3BfdHlwZSA9PSBLTUVNTEVBS19BTExPQykKIAkJbG9nLT50cmFjZV9sZW4gPSBfX3NhdmVfc3RhY2tfdHJhY2UobG9nLT50cmFjZSk7CiAJY3J0X2Vhcmx5X2xvZysrOwpAQCAtODU4LDcgKzg1Miw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lbmFibGVkKSAmJiBwdHIgJiYgIUlTX0VSUihwdHIpKQogCQljcmVhdGVfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0ciwgc2l6ZSwgbWluX2NvdW50LCBnZnApOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfQUxMT0MsIHB0ciwgc2l6ZSwgbWluX2NvdW50LCAwLCAwKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX0FMTE9DLCBwdHIsIHNpemUsIG1pbl9jb3VudCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19hbGxvYyk7CiAKQEAgLTg3Myw3ICs4NjcsNyBAQAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZW5hYmxlZCkgJiYgcHRyICYmICFJU19FUlIocHRyKSkKIAkJZGVsZXRlX29iamVjdF9mdWxsKCh1bnNpZ25lZCBsb25nKXB0cik7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2Vhcmx5X2xvZykpCi0JCWxvZ19lYXJseShLTUVNTEVBS19GUkVFLCBwdHIsIDAsIDAsIDAsIDApOworCQlsb2dfZWFybHkoS01FTUxFQUtfRlJFRSwgcHRyLCAwLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWUpOwogCkBAIC04ODgsNyArODgyLDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2VuYWJsZWQpICYmIHB0ciAmJiAhSVNfRVJSKHB0cikpCiAJCWRlbGV0ZV9vYmplY3RfcGFydCgodW5zaWduZWQgbG9uZylwdHIsIHNpemUpOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfRlJFRV9QQVJULCBwdHIsIHNpemUsIDAsIDAsIDApOworCQlsb2dfZWFybHkoS01FTUxFQUtfRlJFRV9QQVJULCBwdHIsIHNpemUsIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa21lbWxlYWtfZnJlZV9wYXJ0KTsKIApAQCAtOTAzLDcgKzg5Nyw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lbmFibGVkKSAmJiBwdHIgJiYgIUlTX0VSUihwdHIpKQogCQltYWtlX2dyYXlfb2JqZWN0KCh1bnNpZ25lZCBsb25nKXB0cik7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2Vhcmx5X2xvZykpCi0JCWxvZ19lYXJseShLTUVNTEVBS19OT1RfTEVBSywgcHRyLCAwLCAwLCAwLCAwKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX05PVF9MRUFLLCBwdHIsIDAsIDApOwogfQogRVhQT1JUX1NZTUJPTChrbWVtbGVha19ub3RfbGVhayk7CiAKQEAgLTkxOSwyMiArOTEzLDIxIEBACiAJaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lbmFibGVkKSAmJiBwdHIgJiYgIUlTX0VSUihwdHIpKQogCQltYWtlX2JsYWNrX29iamVjdCgodW5zaWduZWQgbG9uZylwdHIpOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfSUdOT1JFLCBwdHIsIDAsIDAsIDAsIDApOworCQlsb2dfZWFybHkoS01FTUxFQUtfSUdOT1JFLCBwdHIsIDAsIDApOwogfQogRVhQT1JUX1NZTUJPTChrbWVtbGVha19pZ25vcmUpOwogCiAvKgogICogTGltaXQgdGhlIHJhbmdlIHRvIGJlIHNjYW5uZWQgaW4gYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jay4KICAqLwotdm9pZCBfX3JlZiBrbWVtbGVha19zY2FuX2FyZWEoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgICAgIHNpemVfdCBsZW5ndGgsIGdmcF90IGdmcCkKK3ZvaWQgX19yZWYga21lbWxlYWtfc2Nhbl9hcmVhKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKIHsKIAlwcl9kZWJ1ZygiJXMoMHglcClcbiIsIF9fZnVuY19fLCBwdHIpOwogCiAJaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lbmFibGVkKSAmJiBwdHIgJiYgIUlTX0VSUihwdHIpKQotCQlhZGRfc2Nhbl9hcmVhKCh1bnNpZ25lZCBsb25nKXB0ciwgb2Zmc2V0LCBsZW5ndGgsIGdmcCk7CisJCWFkZF9zY2FuX2FyZWEoKHVuc2lnbmVkIGxvbmcpcHRyLCBzaXplLCBnZnApOwogCWVsc2UgaWYgKGF0b21pY19yZWFkKCZrbWVtbGVha19lYXJseV9sb2cpKQotCQlsb2dfZWFybHkoS01FTUxFQUtfU0NBTl9BUkVBLCBwdHIsIDAsIDAsIG9mZnNldCwgbGVuZ3RoKTsKKwkJbG9nX2Vhcmx5KEtNRU1MRUFLX1NDQU5fQVJFQSwgcHRyLCBzaXplLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbWxlYWtfc2Nhbl9hcmVhKTsKIApAQCAtOTQ4LDExICs5NDEsMjUgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2VuYWJsZWQpICYmIHB0ciAmJiAhSVNfRVJSKHB0cikpCiAJCW9iamVjdF9ub19zY2FuKCh1bnNpZ25lZCBsb25nKXB0cik7CiAJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2Vhcmx5X2xvZykpCi0JCWxvZ19lYXJseShLTUVNTEVBS19OT19TQ0FOLCBwdHIsIDAsIDAsIDAsIDApOworCQlsb2dfZWFybHkoS01FTUxFQUtfTk9fU0NBTiwgcHRyLCAwLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbWxlYWtfbm9fc2Nhbik7CiAKIC8qCisgKiBVcGRhdGUgYW4gb2JqZWN0J3MgY2hlY2tzdW0gYW5kIHJldHVybiB0cnVlIGlmIGl0IHdhcyBtb2RpZmllZC4KKyAqLworc3RhdGljIGJvb2wgdXBkYXRlX2NoZWNrc3VtKHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKK3sKKwl1MzIgb2xkX2NzdW0gPSBvYmplY3QtPmNoZWNrc3VtOworCisJaWYgKCFrbWVtY2hlY2tfaXNfb2JqX2luaXRpYWxpemVkKG9iamVjdC0+cG9pbnRlciwgb2JqZWN0LT5zaXplKSkKKwkJcmV0dXJuIGZhbHNlOworCisJb2JqZWN0LT5jaGVja3N1bSA9IGNyYzMyKDAsICh2b2lkICopb2JqZWN0LT5wb2ludGVyLCBvYmplY3QtPnNpemUpOworCXJldHVybiBvYmplY3QtPmNoZWNrc3VtICE9IG9sZF9jc3VtOworfQorCisvKgogICogTWVtb3J5IHNjYW5uaW5nIGlzIGEgbG9uZyBwcm9jZXNzIGFuZCBpdCBuZWVkcyB0byBiZSBpbnRlcnJ1cHRhYmxlLiBUaGlzCiAgKiBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBzdWNoIGludGVycnVwdCBjb25kaXRpb24gb2NjdXJlZC4KICAqLwpAQCAtMTAzMSwxMSArMTAzOCwxNCBAQAogCQkgKiBhZGRlZCB0byB0aGUgZ3JheV9saXN0LgogCQkgKi8KIAkJb2JqZWN0LT5jb3VudCsrOwotCQlpZiAoY29sb3JfZ3JheShvYmplY3QpKQorCQlpZiAoY29sb3JfZ3JheShvYmplY3QpKSB7CiAJCQlsaXN0X2FkZF90YWlsKCZvYmplY3QtPmdyYXlfbGlzdCwgJmdyYXlfbGlzdCk7Ci0JCWVsc2UKLQkJCXB1dF9vYmplY3Qob2JqZWN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwkJcHV0X29iamVjdChvYmplY3QpOwogCX0KIH0KIApAQCAtMTA3NSwxNCArMTA4NSw0NyBAQAogCQl9CiAJfSBlbHNlCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGFyZWEsIGVsZW0sICZvYmplY3QtPmFyZWFfbGlzdCwgbm9kZSkKLQkJCXNjYW5fYmxvY2soKHZvaWQgKikob2JqZWN0LT5wb2ludGVyICsgYXJlYS0+b2Zmc2V0KSwKLQkJCQkgICAodm9pZCAqKShvYmplY3QtPnBvaW50ZXIgKyBhcmVhLT5vZmZzZXQKLQkJCQkJICAgICsgYXJlYS0+bGVuZ3RoKSwgb2JqZWN0LCAwKTsKKwkJCXNjYW5fYmxvY2soKHZvaWQgKilhcmVhLT5zdGFydCwKKwkJCQkgICAodm9pZCAqKShhcmVhLT5zdGFydCArIGFyZWEtPnNpemUpLAorCQkJCSAgIG9iamVjdCwgMCk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCisgKiBTY2FuIHRoZSBvYmplY3RzIGFscmVhZHkgcmVmZXJlbmNlZCAoZ3JheSBvYmplY3RzKS4gTW9yZSBvYmplY3RzIHdpbGwgYmUKKyAqIHJlZmVyZW5jZWQgYW5kLCBpZiB0aGVyZSBhcmUgbm8gbWVtb3J5IGxlYWtzLCBhbGwgdGhlIG9iamVjdHMgYXJlIHNjYW5uZWQuCisgKi8KK3N0YXRpYyB2b2lkIHNjYW5fZ3JheV9saXN0KHZvaWQpCit7CisJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0LCAqdG1wOworCisJLyoKKwkgKiBUaGUgbGlzdCB0cmF2ZXJzYWwgaXMgc2FmZSBmb3IgYm90aCB0YWlsIGFkZGl0aW9ucyBhbmQgcmVtb3ZhbHMKKwkgKiBmcm9tIGluc2lkZSB0aGUgbG9vcC4gVGhlIGttZW1sZWFrIG9iamVjdHMgY2Fubm90IGJlIGZyZWVkIGZyb20KKwkgKiBvdXRzaWRlIHRoZSBsb29wIGJlY2F1c2UgdGhlaXIgdXNlX2NvdW50IHdhcyBpbmNyZW1lbnRlZC4KKwkgKi8KKwlvYmplY3QgPSBsaXN0X2VudHJ5KGdyYXlfbGlzdC5uZXh0LCB0eXBlb2YoKm9iamVjdCksIGdyYXlfbGlzdCk7CisJd2hpbGUgKCZvYmplY3QtPmdyYXlfbGlzdCAhPSAmZ3JheV9saXN0KSB7CisJCWNvbmRfcmVzY2hlZCgpOworCisJCS8qIG1heSBhZGQgbmV3IG9iamVjdHMgdG8gdGhlIGxpc3QgKi8KKwkJaWYgKCFzY2FuX3Nob3VsZF9zdG9wKCkpCisJCQlzY2FuX29iamVjdChvYmplY3QpOworCisJCXRtcCA9IGxpc3RfZW50cnkob2JqZWN0LT5ncmF5X2xpc3QubmV4dCwgdHlwZW9mKCpvYmplY3QpLAorCQkJCSBncmF5X2xpc3QpOworCisJCS8qIHJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGxpc3QgYW5kIHJlbGVhc2UgaXQgKi8KKwkJbGlzdF9kZWwoJm9iamVjdC0+Z3JheV9saXN0KTsKKwkJcHV0X29iamVjdChvYmplY3QpOworCisJCW9iamVjdCA9IHRtcDsKKwl9CisJV0FSTl9PTighbGlzdF9lbXB0eSgmZ3JheV9saXN0KSk7Cit9CisKKy8qCiAgKiBTY2FuIGRhdGEgc2VjdGlvbnMgYW5kIGFsbCB0aGUgcmVmZXJlbmNlZCBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCB2aWEgdGhlCiAgKiBrZXJuZWwncyBzdGFuZGFyZCBhbGxvY2F0b3JzLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlCiAgKiBzY2FuX211dGV4IGhlbGQuCkBAIC0xMDkwLDEwICsxMTMzLDkgQEAKIHN0YXRpYyB2b2lkIGttZW1sZWFrX3NjYW4odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCwgKnRtcDsKKwlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiAJaW50IGk7CiAJaW50IG5ld19sZWFrcyA9IDA7Ci0JaW50IGdyYXlfbGlzdF9wYXNzID0gMDsKIAogCWppZmZpZXNfbGFzdF9zY2FuID0gamlmZmllczsKIApAQCAtMTExNCw3ICsxMTU2LDYgQEAKICNlbmRpZgogCQkvKiByZXNldCB0aGUgcmVmZXJlbmNlIGNvdW50ICh3aGl0ZW4gdGhlIG9iamVjdCkgKi8KIAkJb2JqZWN0LT5jb3VudCA9IDA7Ci0JCW9iamVjdC0+ZmxhZ3MgJj0gfk9CSkVDVF9ORVc7CiAJCWlmIChjb2xvcl9ncmF5KG9iamVjdCkgJiYgZ2V0X29iamVjdChvYmplY3QpKQogCQkJbGlzdF9hZGRfdGFpbCgmb2JqZWN0LT5ncmF5X2xpc3QsICZncmF5X2xpc3QpOwogCkBAIC0xMTcyLDYyICsxMjEzLDM2IEBACiAKIAkvKgogCSAqIFNjYW4gdGhlIG9iamVjdHMgYWxyZWFkeSByZWZlcmVuY2VkIGZyb20gdGhlIHNlY3Rpb25zIHNjYW5uZWQKLQkgKiBhYm92ZS4gTW9yZSBvYmplY3RzIHdpbGwgYmUgcmVmZXJlbmNlZCBhbmQsIGlmIHRoZXJlIGFyZSBubyBtZW1vcnkKLQkgKiBsZWFrcywgYWxsIHRoZSBvYmplY3RzIHdpbGwgYmUgc2Nhbm5lZC4gVGhlIGxpc3QgdHJhdmVyc2FsIGlzIHNhZmUKLQkgKiBmb3IgYm90aCB0YWlsIGFkZGl0aW9ucyBhbmQgcmVtb3ZhbHMgZnJvbSBpbnNpZGUgdGhlIGxvb3AuIFRoZQotCSAqIGttZW1sZWFrIG9iamVjdHMgY2Fubm90IGJlIGZyZWVkIGZyb20gb3V0c2lkZSB0aGUgbG9vcCBiZWNhdXNlIHRoZWlyCi0JICogdXNlX2NvdW50IHdhcyBpbmNyZWFzZWQuCisJICogYWJvdmUuCiAJICovCi1yZXBlYXQ6Ci0Jb2JqZWN0ID0gbGlzdF9lbnRyeShncmF5X2xpc3QubmV4dCwgdHlwZW9mKCpvYmplY3QpLCBncmF5X2xpc3QpOwotCXdoaWxlICgmb2JqZWN0LT5ncmF5X2xpc3QgIT0gJmdyYXlfbGlzdCkgewotCQljb25kX3Jlc2NoZWQoKTsKLQotCQkvKiBtYXkgYWRkIG5ldyBvYmplY3RzIHRvIHRoZSBsaXN0ICovCi0JCWlmICghc2Nhbl9zaG91bGRfc3RvcCgpKQotCQkJc2Nhbl9vYmplY3Qob2JqZWN0KTsKLQotCQl0bXAgPSBsaXN0X2VudHJ5KG9iamVjdC0+Z3JheV9saXN0Lm5leHQsIHR5cGVvZigqb2JqZWN0KSwKLQkJCQkgZ3JheV9saXN0KTsKLQotCQkvKiByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBsaXN0IGFuZCByZWxlYXNlIGl0ICovCi0JCWxpc3RfZGVsKCZvYmplY3QtPmdyYXlfbGlzdCk7Ci0JCXB1dF9vYmplY3Qob2JqZWN0KTsKLQotCQlvYmplY3QgPSB0bXA7Ci0JfQotCi0JaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSB8fCArK2dyYXlfbGlzdF9wYXNzID49IEdSQVlfTElTVF9QQVNTRVMpCi0JCWdvdG8gc2Nhbl9lbmQ7CisJc2Nhbl9ncmF5X2xpc3QoKTsKIAogCS8qCi0JICogQ2hlY2sgZm9yIG5ldyBvYmplY3RzIGFsbG9jYXRlZCBkdXJpbmcgdGhpcyBzY2FubmluZyBhbmQgYWRkIHRoZW0KLQkgKiB0byB0aGUgZ3JheSBsaXN0LgorCSAqIENoZWNrIGZvciBuZXcgb3IgdW5yZWZlcmVuY2VkIG9iamVjdHMgbW9kaWZpZWQgc2luY2UgdGhlIHByZXZpb3VzCisJICogc2NhbiBhbmQgY29sb3IgdGhlbSBncmF5IHVudGlsIHRoZSBuZXh0IHNjYW4uCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9iamVjdCwgJm9iamVjdF9saXN0LCBvYmplY3RfbGlzdCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7Ci0JCWlmICgob2JqZWN0LT5mbGFncyAmIE9CSkVDVF9ORVcpICYmICFjb2xvcl9ibGFjayhvYmplY3QpICYmCi0JCSAgICBnZXRfb2JqZWN0KG9iamVjdCkpIHsKLQkJCW9iamVjdC0+ZmxhZ3MgJj0gfk9CSkVDVF9ORVc7CisJCWlmIChjb2xvcl93aGl0ZShvYmplY3QpICYmIChvYmplY3QtPmZsYWdzICYgT0JKRUNUX0FMTE9DQVRFRCkKKwkJICAgICYmIHVwZGF0ZV9jaGVja3N1bShvYmplY3QpICYmIGdldF9vYmplY3Qob2JqZWN0KSkgeworCQkJLyogY29sb3IgaXQgZ3JheSB0ZW1wb3JhcmlseSAqLworCQkJb2JqZWN0LT5jb3VudCA9IG9iamVjdC0+bWluX2NvdW50OwogCQkJbGlzdF9hZGRfdGFpbCgmb2JqZWN0LT5ncmF5X2xpc3QsICZncmF5X2xpc3QpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlmICghbGlzdF9lbXB0eSgmZ3JheV9saXN0KSkKLQkJZ290byByZXBlYXQ7Ci0KLXNjYW5fZW5kOgotCVdBUk5fT04oIWxpc3RfZW1wdHkoJmdyYXlfbGlzdCkpOworCS8qCisJICogUmUtc2NhbiB0aGUgZ3JheSBsaXN0IGZvciBtb2RpZmllZCB1bnJlZmVyZW5jZWQgb2JqZWN0cy4KKwkgKi8KKwlzY2FuX2dyYXlfbGlzdCgpOwogCiAJLyoKLQkgKiBJZiBzY2FubmluZyB3YXMgc3RvcHBlZCBvciBuZXcgb2JqZWN0cyB3ZXJlIGJlaW5nIGFsbG9jYXRlZCBhdCBhCi0JICogaGlnaGVyIHJhdGUgdGhhbiBncmF5IGxpc3Qgc2Nhbm5pbmcsIGRvIG5vdCByZXBvcnQgYW55IG5ldwotCSAqIHVucmVmZXJlbmNlZCBvYmplY3RzLgorCSAqIElmIHNjYW5uaW5nIHdhcyBzdG9wcGVkIGRvIG5vdCByZXBvcnQgYW55IG5ldyB1bnJlZmVyZW5jZWQgb2JqZWN0cy4KIAkgKi8KLQlpZiAoc2Nhbl9zaG91bGRfc3RvcCgpIHx8IGdyYXlfbGlzdF9wYXNzID49IEdSQVlfTElTVF9QQVNTRVMpCisJaWYgKHNjYW5fc2hvdWxkX3N0b3AoKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTE2NDIsOCArMTY1Nyw3IEBACiAJCQlrbWVtbGVha19pZ25vcmUobG9nLT5wdHIpOwogCQkJYnJlYWs7CiAJCWNhc2UgS01FTUxFQUtfU0NBTl9BUkVBOgotCQkJa21lbWxlYWtfc2Nhbl9hcmVhKGxvZy0+cHRyLCBsb2ctPm9mZnNldCwgbG9nLT5sZW5ndGgsCi0JCQkJCSAgIEdGUF9LRVJORUwpOworCQkJa21lbWxlYWtfc2Nhbl9hcmVhKGxvZy0+cHRyLCBsb2ctPnNpemUsIEdGUF9LRVJORUwpOwogCQkJYnJlYWs7CiAJCWNhc2UgS01FTUxFQUtfTk9fU0NBTjoKIAkJCWttZW1sZWFrX25vX3NjYW4obG9nLT5wdHIpOwpkaWZmIC0tZ2l0IGEvbW0vbWFjY2Vzcy5jIGIvbW0vbWFjY2Vzcy5jCmluZGV4IDkwNzM2OTUuLjRlMzQ4ZGIgMTAwNjQ0Ci0tLSBhL21tL21hY2Nlc3MuYworKysgYi9tbS9tYWNjZXNzLmMKQEAgLTE0LDcgKzE0LDExIEBACiAgKiBTYWZlbHkgcmVhZCBmcm9tIGFkZHJlc3MgQHNyYyB0byB0aGUgYnVmZmVyIGF0IEBkc3QuICBJZiBhIGtlcm5lbCBmYXVsdAogICogaGFwcGVucywgaGFuZGxlIHRoYXQgYW5kIHJldHVybiAtRUZBVUxULgogICovCi1sb25nIHByb2JlX2tlcm5lbF9yZWFkKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKKworbG9uZyBfX3dlYWsgcHJvYmVfa2VybmVsX3JlYWQodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQorICAgIF9fYXR0cmlidXRlX18oKGFsaWFzKCJfX3Byb2JlX2tlcm5lbF9yZWFkIikpKTsKKworbG9uZyBfX3Byb2JlX2tlcm5lbF9yZWFkKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKIHsKIAlsb25nIHJldDsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CkBAIC0zOSw3ICs0MywxMCBAQAogICogU2FmZWx5IHdyaXRlIHRvIGFkZHJlc3MgQGRzdCBmcm9tIHRoZSBidWZmZXIgYXQgQHNyYy4gIElmIGEga2VybmVsIGZhdWx0CiAgKiBoYXBwZW5zLCBoYW5kbGUgdGhhdCBhbmQgcmV0dXJuIC1FRkFVTFQuCiAgKi8KLWxvbmcgbm90cmFjZSBfX3dlYWsgcHJvYmVfa2VybmVsX3dyaXRlKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKK2xvbmcgX193ZWFrIHByb2JlX2tlcm5lbF93cml0ZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCisgICAgX19hdHRyaWJ1dGVfXygoYWxpYXMoIl9fcHJvYmVfa2VybmVsX3dyaXRlIikpKTsKKworbG9uZyBfX3Byb2JlX2tlcm5lbF93cml0ZSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IHNpemUpCiB7CiAJbG9uZyByZXQ7CiAJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNmEwNDY2ZS4uMTcyOTlmZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01Miw2ICs1Miw4IEBACiAKIGF0b21pY19sb25nX3QgbWNlX2JhZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgfHwgZGVmaW5lZChDT05GSUdfSFdQT0lTT05fSU5KRUNUX01PRFVMRSkKKwogdTMyIGh3cG9pc29uX2ZpbHRlcl9lbmFibGUgPSAwOwogdTMyIGh3cG9pc29uX2ZpbHRlcl9kZXZfbWFqb3IgPSB+MFU7CiB1MzIgaHdwb2lzb25fZmlsdGVyX2Rldl9taW5vciA9IH4wVTsKQEAgLTE2NCw2ICsxNjYsMTMgQEAKIAogCXJldHVybiAwOwogfQorI2Vsc2UKK2ludCBod3BvaXNvbl9maWx0ZXIoc3RydWN0IHBhZ2UgKnApCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogRVhQT1JUX1NZTUJPTF9HUEwoaHdwb2lzb25fZmlsdGVyKTsKIAogLyoKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBkOWM3N2IyLi5lZTIyOTg5IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0xMDQzLDYgKzEwNDMsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG9fbW1hcF9wZ29mZik7CiAKK1NZU0NBTExfREVGSU5FNihtbWFwX3Bnb2ZmLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBsZW4sCisJCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLAorCQl1bnNpZ25lZCBsb25nLCBmZCwgdW5zaWduZWQgbG9uZywgcGdvZmYpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgcmV0dmFsID0gLUVCQURGOworCisJaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgeworCQlpZiAodW5saWtlbHkoZmxhZ3MgJiBNQVBfSFVHRVRMQikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZmlsZSA9IGZnZXQoZmQpOworCQlpZiAoIWZpbGUpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGZsYWdzICYgTUFQX0hVR0VUTEIpIHsKKwkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gTlVMTDsKKwkJLyoKKwkJICogVk1fTk9SRVNFUlZFIGlzIHVzZWQgYmVjYXVzZSB0aGUgcmVzZXJ2YXRpb25zIHdpbGwgYmUKKwkJICogdGFrZW4gd2hlbiB2bV9vcHMtPm1tYXAoKSBpcyBjYWxsZWQKKwkJICogQSBkdW1teSB1c2VyIHZhbHVlIGlzIHVzZWQgYmVjYXVzZSB3ZSBhcmUgbm90IGxvY2tpbmcKKwkJICogbWVtb3J5IHNvIG5vIGFjY291bnRpbmcgaXMgbmVjZXNzYXJ5CisJCSAqLworCQlsZW4gPSBBTElHTihsZW4sIGh1Z2VfcGFnZV9zaXplKCZkZWZhdWx0X2hzdGF0ZSkpOworCQlmaWxlID0gaHVnZXRsYl9maWxlX3NldHVwKEhVR0VUTEJfQU5PTl9GSUxFLCBsZW4sIFZNX05PUkVTRVJWRSwKKwkJCQkJCSZ1c2VyLCBIVUdFVExCX0FOT05IVUdFX0lOT0RFKTsKKwkJaWYgKElTX0VSUihmaWxlKSkKKwkJCXJldHVybiBQVFJfRVJSKGZpbGUpOworCX0KKworCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0dmFsID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKgogICogU29tZSBzaGFyZWQgbWFwcGlnbnMgd2lsbCB3YW50IHRoZSBwYWdlcyBtYXJrZWQgcmVhZC1vbmx5CiAgKiB0byB0cmFjayB3cml0ZSBldmVudHMuIElmIHNvLCB3ZSdsbCBkb3duZ3JhZGUgdm1fcGFnZV9wcm90CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA4Njg3OTczLi4xNzc3Mzg2IDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTQzMiw2ICs0MzIsNyBAQAogCS8qCiAJICogT2ssIGxvb2tzIGdvb2QgLSBsZXQgaXQgcmlwLgogCSAqLworCWZsdXNoX2ljYWNoZV9yYW5nZShtbS0+YnJrLCBicmspOwogCXJldHVybiBtbS0+YnJrID0gYnJrOwogfQogCkBAIC0xMzUzLDEwICsxMzU0LDE0IEBACiBzaGFyZToKIAlhZGRfdm1hX3RvX21tKGN1cnJlbnQtPm1tLCB2bWEpOwogCi0JdXBfd3JpdGUoJm5vbW11X3JlZ2lvbl9zZW0pOworCS8qIHdlIGZsdXNoIHRoZSByZWdpb24gZnJvbSB0aGUgaWNhY2hlIG9ubHkgd2hlbiB0aGUgZmlyc3QgZXhlY3V0YWJsZQorCSAqIG1hcHBpbmcgb2YgaXQgaXMgbWFkZSAgKi8KKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMgJiYgIXJlZ2lvbi0+dm1faWNhY2hlX2ZsdXNoZWQpIHsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKHJlZ2lvbi0+dm1fc3RhcnQsIHJlZ2lvbi0+dm1fZW5kKTsKKwkJcmVnaW9uLT52bV9pY2FjaGVfZmx1c2hlZCA9IHRydWU7CisJfQogCi0JaWYgKHByb3QgJiBQUk9UX0VYRUMpCi0JCWZsdXNoX2ljYWNoZV9yYW5nZShyZXN1bHQsIHJlc3VsdCArIGxlbik7CisJdXBfd3JpdGUoJm5vbW11X3JlZ2lvbl9zZW0pOwogCiAJa2xlYXZlKCIgPSAlbHgiLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CkBAIC0xMzk4LDYgKzE0MDMsMzEgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG9fbW1hcF9wZ29mZik7CiAKK1NZU0NBTExfREVGSU5FNihtbWFwX3Bnb2ZmLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBsZW4sCisJCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLAorCQl1bnNpZ25lZCBsb25nLCBmZCwgdW5zaWduZWQgbG9uZywgcGdvZmYpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgcmV0dmFsID0gLUVCQURGOworCisJaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgeworCQlmaWxlID0gZmdldChmZCk7CisJCWlmICghZmlsZSkKKwkJCWdvdG8gb3V0OworCX0KKworCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0dmFsID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKgogICogc3BsaXQgYSB2bWEgaW50byB0d28gcGllY2VzIGF0IGFkZHJlc3MgJ2FkZHInLCBhIG5ldyB2bWEgaXMgYWxsb2NhdGVkIGVpdGhlcgogICogZm9yIHRoZSBmaXJzdCBwYXJ0IG9yIHRoZSB0YWlsLgpAQCAtMTg5MSw5ICsxOTIxLDExIEBACiAKIAkJLyogb25seSByZWFkIG9yIHdyaXRlIG1hcHBpbmdzIHdoZXJlIGl0IGlzIHBlcm1pdHRlZCAqLwogCQlpZiAod3JpdGUgJiYgdm1hLT52bV9mbGFncyAmIFZNX01BWVdSSVRFKQotCQkJbGVuIC09IGNvcHlfdG9fdXNlcigodm9pZCAqKSBhZGRyLCBidWYsIGxlbik7CisJCQljb3B5X3RvX3VzZXJfcGFnZSh2bWEsIE5VTEwsIGFkZHIsCisJCQkJCSAodm9pZCAqKSBhZGRyLCBidWYsIGxlbik7CiAJCWVsc2UgaWYgKCF3cml0ZSAmJiB2bWEtPnZtX2ZsYWdzICYgVk1fTUFZUkVBRCkKLQkJCWxlbiAtPSBjb3B5X2Zyb21fdXNlcihidWYsICh2b2lkICopIGFkZHIsIGxlbik7CisJCQljb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgTlVMTCwgYWRkciwKKwkJCQkJICAgIGJ1ZiwgKHZvaWQgKikgYWRkciwgbGVuKTsKIAkJZWxzZQogCQkJbGVuID0gMDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDc0YWY0NDkuLjRlOWY1Y2MgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMjQwMSwxMyArMjQwMiwxNCBAQAogewogCWNoYXIgc2F2ZWRfc3RyaW5nW05VTUFfWk9ORUxJU1RfT1JERVJfTEVOXTsKIAlpbnQgcmV0OworCXN0YXRpYyBERUZJTkVfTVVURVgoemxfb3JkZXJfbXV0ZXgpOwogCisJbXV0ZXhfbG9jaygmemxfb3JkZXJfbXV0ZXgpOwogCWlmICh3cml0ZSkKLQkJc3RybmNweShzYXZlZF9zdHJpbmcsIChjaGFyKil0YWJsZS0+ZGF0YSwKLQkJCU5VTUFfWk9ORUxJU1RfT1JERVJfTEVOKTsKKwkJc3RyY3B5KHNhdmVkX3N0cmluZywgKGNoYXIqKXRhYmxlLT5kYXRhKTsKIAlyZXQgPSBwcm9jX2Rvc3RyaW5nKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCWlmICh3cml0ZSkgewogCQlpbnQgb2xkdmFsID0gdXNlcl96b25lbGlzdF9vcmRlcjsKIAkJaWYgKF9fcGFyc2VfbnVtYV96b25lbGlzdF9vcmRlcigoY2hhciopdGFibGUtPmRhdGEpKSB7CkBAIC0yNDIwLDcgKzI0MjIsOSBAQAogCQl9IGVsc2UgaWYgKG9sZHZhbCAhPSB1c2VyX3pvbmVsaXN0X29yZGVyKQogCQkJYnVpbGRfYWxsX3pvbmVsaXN0cygpOwogCX0KLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnpsX29yZGVyX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTM1NzksNyArMzU4Myw3IEBACiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBob2xlcyBpbiBhIHJhbmdlIG9uIGEgbm9kZS4gSWYgbmlkIGlzIE1BWF9OVU1OT0RFUywKICAqIHRoZW4gYWxsIGhvbGVzIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXQgX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoaW50IG5pZCwKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKGludCBuaWQsCiAJCQkJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydF9wZm4sCiAJCQkJdW5zaWduZWQgbG9uZyByYW5nZV9lbmRfcGZuKQogewpAQCAtNDEwOCw3ICs0MTEyLDcgQEAKIH0KIAogLyogc29ydCB0aGUgbm9kZV9tYXAgYnkgc3RhcnRfcGZuICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc29ydF9ub2RlX21hcCh2b2lkKQordm9pZCBfX2luaXQgc29ydF9ub2RlX21hcCh2b2lkKQogewogCXNvcnQoZWFybHlfbm9kZV9tYXAsIChzaXplX3QpbnJfbm9kZW1hcF9lbnRyaWVzLAogCQkJc2l6ZW9mKHN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24pLApAQCAtNTAwOCwyMyArNTAxMiw2NSBAQAogaW50IHNldF9taWdyYXRldHlwZV9pc29sYXRlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBhZ2UgKmN1cnJfcGFnZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBwZm4sIGl0ZXI7CisJdW5zaWduZWQgbG9uZyBpbW1vYmlsZSA9IDA7CisJc3RydWN0IG1lbW9yeV9pc29sYXRlX25vdGlmeSBhcmc7CisJaW50IG5vdGlmaWVyX3JldDsKIAlpbnQgcmV0ID0gLUVCVVNZOwogCWludCB6b25lX2lkeDsKIAogCXpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAJem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ6b25lLT5sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBJbiBmdXR1cmUsIG1vcmUgbWlncmF0ZSB0eXBlcyB3aWxsIGJlIGFibGUgdG8gYmUgaXNvbGF0aW9uIHRhcmdldC4KLQkgKi8KLQlpZiAoZ2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlKSAhPSBNSUdSQVRFX01PVkFCTEUgJiYKLQkgICAgem9uZV9pZHggIT0gWk9ORV9NT1ZBQkxFKQorCWlmIChnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpID09IE1JR1JBVEVfTU9WQUJMRSB8fAorCSAgICB6b25lX2lkeCA9PSBaT05FX01PVkFCTEUpIHsKKwkJcmV0ID0gMDsKIAkJZ290byBvdXQ7Ci0Jc2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBNSUdSQVRFX0lTT0xBVEUpOwotCW1vdmVfZnJlZXBhZ2VzX2Jsb2NrKHpvbmUsIHBhZ2UsIE1JR1JBVEVfSVNPTEFURSk7Ci0JcmV0ID0gMDsKKwl9CisKKwlwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlhcmcuc3RhcnRfcGZuID0gcGZuOworCWFyZy5ucl9wYWdlcyA9IHBhZ2VibG9ja19ucl9wYWdlczsKKwlhcmcucGFnZXNfZm91bmQgPSAwOworCisJLyoKKwkgKiBJdCBtYXkgYmUgcG9zc2libGUgdG8gaXNvbGF0ZSBhIHBhZ2VibG9jayBldmVuIGlmIHRoZQorCSAqIG1pZ3JhdGV0eXBlIGlzIG5vdCBNSUdSQVRFX01PVkFCTEUuIFRoZSBtZW1vcnkgaXNvbGF0aW9uCisJICogbm90aWZpZXIgY2hhaW4gaXMgdXNlZCBieSBiYWxsb29uIGRyaXZlcnMgdG8gcmV0dXJuIHRoZQorCSAqIG51bWJlciBvZiBwYWdlcyBpbiBhIHJhbmdlIHRoYXQgYXJlIGhlbGQgYnkgdGhlIGJhbGxvb24KKwkgKiBkcml2ZXIgdG8gc2hyaW5rIG1lbW9yeS4gSWYgYWxsIHRoZSBwYWdlcyBhcmUgYWNjb3VudGVkIGZvcgorCSAqIGJ5IGJhbGxvb25zLCBhcmUgZnJlZSwgb3Igb24gdGhlIExSVSwgaXNvbGF0aW9uIGNhbiBjb250aW51ZS4KKwkgKiBMYXRlciwgZm9yIGV4YW1wbGUsIHdoZW4gbWVtb3J5IGhvdHBsdWcgbm90aWZpZXIgcnVucywgdGhlc2UKKwkgKiBwYWdlcyByZXBvcnRlZCBhcyAiY2FuIGJlIGlzb2xhdGVkIiBzaG91bGQgYmUgaXNvbGF0ZWQoZnJlZWQpCisJICogYnkgdGhlIGJhbGxvb24gZHJpdmVyIHRocm91Z2ggdGhlIG1lbW9yeSBub3RpZmllciBjaGFpbi4KKwkgKi8KKwlub3RpZmllcl9yZXQgPSBtZW1vcnlfaXNvbGF0ZV9ub3RpZnkoTUVNX0lTT0xBVEVfQ09VTlQsICZhcmcpOworCW5vdGlmaWVyX3JldCA9IG5vdGlmaWVyX3RvX2Vycm5vKG5vdGlmaWVyX3JldCk7CisJaWYgKG5vdGlmaWVyX3JldCB8fCAhYXJnLnBhZ2VzX2ZvdW5kKQorCQlnb3RvIG91dDsKKworCWZvciAoaXRlciA9IHBmbjsgaXRlciA8IChwZm4gKyBwYWdlYmxvY2tfbnJfcGFnZXMpOyBpdGVyKyspIHsKKwkJaWYgKCFwZm5fdmFsaWRfd2l0aGluKHBmbikpCisJCQljb250aW51ZTsKKworCQljdXJyX3BhZ2UgPSBwZm5fdG9fcGFnZShpdGVyKTsKKwkJaWYgKCFwYWdlX2NvdW50KGN1cnJfcGFnZSkgfHwgUGFnZUxSVShjdXJyX3BhZ2UpKQorCQkJY29udGludWU7CisKKwkJaW1tb2JpbGUrKzsKKwl9CisKKwlpZiAoYXJnLnBhZ2VzX2ZvdW5kID09IGltbW9iaWxlKQorCQlyZXQgPSAwOworCiBvdXQ6CisJaWYgKCFyZXQpIHsKKwkJc2V0X3BhZ2VibG9ja19taWdyYXRldHlwZShwYWdlLCBNSUdSQVRFX0lTT0xBVEUpOworCQltb3ZlX2ZyZWVwYWdlc19ibG9jayh6b25lLCBwYWdlLCBNSUdSQVRFX0lTT0xBVEUpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIXJldCkKIAkJZHJhaW5fYWxsX3BhZ2VzKCk7CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDQ0MjAxMGMuLjA4M2U3YzkgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC0xMjcxLDcgKzEyNzEsNyBAQAogICovCiB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKnB0cikKIHsKLQl2b2lkICphZGRyID0gX19wY3B1X3B0cl90b19hZGRyKHB0cik7CisJdm9pZCAqYWRkcjsKIAlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb2ZmOwpAQCAtMTI3OSw2ICsxMjc5LDggQEAKIAlpZiAoIXB0cikKIAkJcmV0dXJuOwogCisJYWRkciA9IF9fcGNwdV9wdHJfdG9fYWRkcihwdHIpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJY2h1bmsgPSBwY3B1X2NodW5rX2FkZHJfc2VhcmNoKGFkZHIpOwpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCBhYTFhYTIzLi4wMzNiYzEzIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtNTQ3LDUgKzU0NywxNyBAQAogCiAJLyogZG8gcmVhZC1haGVhZCAqLwogCW9uZGVtYW5kX3JlYWRhaGVhZChtYXBwaW5nLCByYSwgZmlscCwgdHJ1ZSwgb2Zmc2V0LCByZXFfc2l6ZSk7CisKKyNpZmRlZiBDT05GSUdfQkxPQ0sKKwkvKgorCSAqIE5vcm1hbGx5IHRoZSBjdXJyZW50IHBhZ2UgaXMgIXVwdG9kYXRlIGFuZCBsb2NrX3BhZ2UoKSB3aWxsIGJlCisJICogaW1tZWRpYXRlbHkgY2FsbGVkIHRvIGltcGxpY2l0bHkgdW5wbHVnIHRoZSBkZXZpY2UuIEhvd2V2ZXIgdGhpcworCSAqIGlzIG5vdCBhbHdheXMgdHJ1ZSBmb3IgUkFJRCBjb25pZmd1cmF0aW9ucywgd2hlcmUgZGF0YSBhcnJpdmVzCisJICogbm90IHN0cmljdGx5IGluIHRoZWlyIHN1Ym1pc3Npb24gb3JkZXIuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvCisJICogZXhwbGljaXRseSBraWNrIG9mZiB0aGUgSU8uCisJICovCisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJYmxrX3J1bl9iYWNraW5nX2RldihtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLCBOVUxMKTsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9hc3luY19yZWFkYWhlYWQpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDNmNDgyMjkuLjc0NTFiZGEgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTY1NCw3ICs2NTQsNyBAQAogCiAJCWwzID0gcy0+Y3NfY2FjaGVwLT5ub2RlbGlzdHNbcV07CiAJCWlmICghbDMgfHwgT0ZGX1NMQUIocy0+Y3NfY2FjaGVwKSkKLQkJCXJldHVybjsKKwkJCWNvbnRpbnVlOwogCQlsb2NrZGVwX3NldF9jbGFzcygmbDMtPmxpc3RfbG9jaywgJm9uX3NsYWJfbDNfa2V5KTsKIAkJYWxjID0gbDMtPmFsaWVuOwogCQkvKgpAQCAtNjY1LDcgKzY2NSw3IEBACiAJCSAqIGZvciBhbGxvY19hbGllbl9jYWNoZSwKIAkJICovCiAJCWlmICghYWxjIHx8ICh1bnNpZ25lZCBsb25nKWFsYyA9PSBCQURfQUxJRU5fTUFHSUMpCi0JCQlyZXR1cm47CisJCQljb250aW51ZTsKIAkJZm9yX2VhY2hfbm9kZShyKSB7CiAJCQlpZiAoYWxjW3JdKQogCQkJCWxvY2tkZXBfc2V0X2NsYXNzKCZhbGNbcl0tPmxvY2ssCkBAIC0xMTMyLDcgKzExMzIsNyBAQAogCQlpZiAobmMpCiAJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgbmMtPmVudHJ5LCBuYy0+YXZhaWwsIG5vZGUpOwogCi0JCWlmICghY3B1c19lbXB0eSgqbWFzaykpIHsKKwkJaWYgKCFjcHVtYXNrX2VtcHR5KG1hc2spKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwogCQkJZ290byBmcmVlX2FycmF5X2NhY2hlOwogCQl9CkBAIC0yMjc1LDkgKzIyNzUsMTEgQEAKIAkvKgogCSAqIERldGVybWluZSBpZiB0aGUgc2xhYiBtYW5hZ2VtZW50IGlzICdvbicgb3IgJ29mZicgc2xhYi4KIAkgKiAoYm9vdHN0cmFwcGluZyBjYW5ub3QgY29wZSB3aXRoIG9mZnNsYWIgY2FjaGVzIHNvIGRvbid0IGRvCi0JICogaXQgdG9vIGVhcmx5IG9uLikKKwkgKiBpdCB0b28gZWFybHkgb24uIEFsd2F5cyB1c2Ugb24tc2xhYiBtYW5hZ2VtZW50IHdoZW4KKwkgKiBTTEFCX05PTEVBS1RSQUNFIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyBpbnRvIGttZW1sZWFrKQogCSAqLwotCWlmICgoc2l6ZSA+PSAoUEFHRV9TSVpFID4+IDMpKSAmJiAhc2xhYl9lYXJseV9pbml0KQorCWlmICgoc2l6ZSA+PSAoUEFHRV9TSVpFID4+IDMpKSAmJiAhc2xhYl9lYXJseV9pbml0ICYmCisJICAgICEoZmxhZ3MgJiBTTEFCX05PTEVBS1RSQUNFKSkKIAkJLyoKIAkJICogU2l6ZSBpcyBsYXJnZSwgYXNzdW1lIGJlc3QgdG8gcGxhY2UgdGhlIHNsYWIgbWFuYWdlbWVudCBvYmoKIAkJICogb2ZmLXNsYWIgKHNob3VsZCBhbGxvdyBiZXR0ZXIgcGFja2luZyBvZiBvYmpzKS4KQEAgLTI1OTYsOCArMjU5OCw4IEBACiAJCSAqIGttZW1sZWFrIGRvZXMgbm90IHRyZWF0IHRoZSAtPnNfbWVtIHBvaW50ZXIgYXMgYSByZWZlcmVuY2UKIAkJICogdG8gdGhlIG9iamVjdC4gT3RoZXJ3aXNlIHdlIHdpbGwgbm90IHJlcG9ydCB0aGUgbGVhay4KIAkJICovCi0JCWttZW1sZWFrX3NjYW5fYXJlYShzbGFicCwgb2Zmc2V0b2Yoc3RydWN0IHNsYWIsIGxpc3QpLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgbG9jYWxfZmxhZ3MpOworCQlrbWVtbGVha19zY2FuX2FyZWEoJnNsYWJwLT5saXN0LCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCisJCQkJICAgbG9jYWxfZmxhZ3MpOwogCQlpZiAoIXNsYWJwKQogCQkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBiMzc3Y2U0Li43YzM1YWQ5IDEwMDY0NAotLS0gYS9tbS91dGlsLmMKKysrIGIvbW0vdXRpbC5jCkBAIC00LDEwICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCkBAIC0yNzIsNDYgKzI2OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnZXRfdXNlcl9wYWdlc19mYXN0KTsKIAotU1lTQ0FMTF9ERUZJTkU2KG1tYXBfcGdvZmYsIHVuc2lnbmVkIGxvbmcsIGFkZHIsIHVuc2lnbmVkIGxvbmcsIGxlbiwKLQkJdW5zaWduZWQgbG9uZywgcHJvdCwgdW5zaWduZWQgbG9uZywgZmxhZ3MsCi0JCXVuc2lnbmVkIGxvbmcsIGZkLCB1bnNpZ25lZCBsb25nLCBwZ29mZikKLXsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgcmV0dmFsID0gLUVCQURGOwotCi0JaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgewotCQlpZiAodW5saWtlbHkoZmxhZ3MgJiBNQVBfSFVHRVRMQikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZmlsZSA9IGZnZXQoZmQpOwotCQlpZiAoIWZpbGUpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKGZsYWdzICYgTUFQX0hVR0VUTEIpIHsKLQkJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gTlVMTDsKLQkJLyoKLQkJICogVk1fTk9SRVNFUlZFIGlzIHVzZWQgYmVjYXVzZSB0aGUgcmVzZXJ2YXRpb25zIHdpbGwgYmUKLQkJICogdGFrZW4gd2hlbiB2bV9vcHMtPm1tYXAoKSBpcyBjYWxsZWQKLQkJICogQSBkdW1teSB1c2VyIHZhbHVlIGlzIHVzZWQgYmVjYXVzZSB3ZSBhcmUgbm90IGxvY2tpbmcKLQkJICogbWVtb3J5IHNvIG5vIGFjY291bnRpbmcgaXMgbmVjZXNzYXJ5Ci0JCSAqLwotCQlsZW4gPSBBTElHTihsZW4sIGh1Z2VfcGFnZV9zaXplKCZkZWZhdWx0X2hzdGF0ZSkpOwotCQlmaWxlID0gaHVnZXRsYl9maWxlX3NldHVwKEhVR0VUTEJfQU5PTl9GSUxFLCBsZW4sIFZNX05PUkVTRVJWRSwKLQkJCQkJCSZ1c2VyLCBIVUdFVExCX0FOT05IVUdFX0lOT0RFKTsKLQkJaWYgKElTX0VSUihmaWxlKSkKLQkJCXJldHVybiBQVFJfRVJSKGZpbGUpOwotCX0KLQotCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKLQotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JcmV0dmFsID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0KLQlpZiAoZmlsZSkKLQkJZnB1dChmaWxlKTsKLW91dDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCiAvKiBUcmFjZXBvaW50cyBkZWZpbml0aW9ucy4gKi8KIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWFsbG9jKTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IDU2OTc1MDAuLjE4ZTdmNWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtNzcwLDcgKzc3MCw3IEBACiAKIAloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKElTX0VSUihoaWQpKQotCQlyZXR1cm4gUFRSX0VSUihzZXNzaW9uLT5oaWQpOworCQlyZXR1cm4gUFRSX0VSUihoaWQpOwogCiAJc2Vzc2lvbi0+aGlkID0gaGlkOwogCXNlc3Npb24tPnJlcSA9IHJlcTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCA1MTI5Yjg4Li4xMTIwY2YxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC0xMjEyLDYgKzEyMTIsNyBAQAogCWJoX2xvY2tfc29jayhzayk7CiAJaWYgKGwyY2FwX3BpKHNrKS0+cmV0cnlfY291bnQgPj0gbDJjYXBfcGkoc2spLT5yZW1vdGVfbWF4X3R4KSB7CiAJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEobDJjYXBfcGkoc2spLT5jb25uLCBzayk7CisJCWJoX3VubG9ja19zb2NrKHNrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzQzNSw4ICszNDM2LDggQEAKIAkJCSAgICAocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCiAJCQkJX19tb2RfcmV0cmFuc190aW1lcigpOwogCi0JCQlsMmNhcF9lcnRtX3NlbmQoc2spOwogCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCQlsMmNhcF9lcnRtX3NlbmQoc2spOwogCQl9CiAJCWJyZWFrOwogCkBAIC0zNDcxLDkgKzM0NzIsOSBAQAogCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKIAogCQlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgewotCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKIAkJCXBpLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOwogCQkJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKIAkJCWwyY2FwX2VydG1fc2VuZChzayk7CiAJCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikgewogCQkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID0gdHhfc2VxOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggYmQxYzY1NC4uMGI3ZjI2MiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0xNDA2LDYgKzE0MDYsOSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBFQlRfU09fU0VUX0VOVFJJRVM6CiAJCXJldCA9IGRvX3JlcGxhY2Uoc29ja19uZXQoc2spLCB1c2VyLCBsZW4pOwpAQCAtMTQyNSw2ICsxNDI4LDkgQEAKIAlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCBlYnRfdGFibGUgKnQ7CiAKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBhMjNiNDVmLi5kZTBjMmM3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMjUwLDggKzI1MCw3IEBACiAJX191NjQgY291bnQ7CQkvKiBEZWZhdWx0IE5vIHBhY2tldHMgdG8gc2VuZCAqLwogCV9fdTY0IHNvZmFyOwkJLyogSG93IG1hbnkgcGt0cyB3ZSd2ZSBzZW50IHNvIGZhciAqLwogCV9fdTY0IHR4X2J5dGVzOwkJLyogSG93IG1hbnkgYnl0ZXMgd2UndmUgdHJhbnNtaXR0ZWQgKi8KLQlfX3U2NCBlcnJvcnM7CQkvKiBFcnJvcnMgd2hlbiB0cnlpbmcgdG8gdHJhbnNtaXQsCi0JCQkJICAgcGt0cyB3aWxsIGJlIHJlLXNlbnQgKi8KKwlfX3U2NCBlcnJvcnM7CQkvKiBFcnJvcnMgd2hlbiB0cnlpbmcgdG8gdHJhbnNtaXQsICovCiAKIAkvKiBydW50aW1lIGNvdW50ZXJzIHJlbGF0aW5nIHRvIGNsb25lX3NrYiAqLwogCkBAIC0zNDY1LDYgKzM0NjQsMTIgQEAKIAkJcGt0X2Rldi0+c2VxX251bSsrOwogCQlwa3RfZGV2LT50eF9ieXRlcyArPSBwa3RfZGV2LT5sYXN0X3BrdF9zaXplOwogCQlicmVhazsKKwljYXNlIE5FVF9YTUlUX0RST1A6CisJY2FzZSBORVRfWE1JVF9DTjoKKwljYXNlIE5FVF9YTUlUX1BPTElDRUQ6CisJCS8qIHNrYiBoYXMgYmVlbiBjb25zdW1lZCAqLworCQlwa3RfZGV2LT5lcnJvcnMrKzsKKwkJYnJlYWs7CiAJZGVmYXVsdDogLyogRHJpdmVycyBhcmUgbm90IHN1cHBvc2VkIHRvIHJldHVybiBvdGhlciB2YWx1ZXMhICovCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcl9pbmZvKCJwa3RnZW46ICVzIHhtaXQgZXJyb3I6ICVkXG4iLApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDc2ZmY1OGQuLmUxZjZmMjIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTEyMDUsNiArMTIwNSwxMCBAQAogCiAJCWlmIChuZXdzay0+c2tfcHJvdC0+c29ja2V0c19hbGxvY2F0ZWQpCiAJCQlwZXJjcHVfY291bnRlcl9pbmMobmV3c2stPnNrX3Byb3QtPnNvY2tldHNfYWxsb2NhdGVkKTsKKworCQlpZiAoc29ja19mbGFnKG5ld3NrLCBTT0NLX1RJTUVTVEFNUCkgfHwKKwkJICAgIHNvY2tfZmxhZyhuZXdzaywgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpKQorCQkJbmV0X2VuYWJsZV90aW1lc3RhbXAoKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIG5ld3NrOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvYmUuYyBiL25ldC9kY2NwL3Byb2JlLmMKaW5kZXggZGMzMjg0Mi4uYTEzNjJkYyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvYmUuYworKysgYi9uZXQvZGNjcC9wcm9iZS5jCkBAIC00Myw3ICs0Myw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBwcm9jbmFtZVtdID0gImRjY3Bwcm9iZSI7CiAKIHN0YXRpYyBzdHJ1Y3QgewotCXN0cnVjdCBrZmlmbwkgICpmaWZvOworCXN0cnVjdCBrZmlmbwkgIGZpZm87CiAJc3BpbmxvY2tfdAkgIGxvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3QgdGltZXNwZWMJICB0c3RhcnQ7CkBAIC02Nyw3ICs2Nyw3IEBACiAJbGVuICs9IHZzY25wcmludGYodGJ1ZitsZW4sIHNpemVvZih0YnVmKS1sZW4sIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0Ja2ZpZm9fcHV0KGRjY3B3LmZpZm8sIHRidWYsIGxlbik7CisJa2ZpZm9faW5fbG9ja2VkKCZkY2Nwdy5maWZvLCB0YnVmLCBsZW4sICZkY2Nwdy5sb2NrKTsKIAl3YWtlX3VwKCZkY2Nwdy53YWl0KTsKIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBACiAKIHN0YXRpYyBpbnQgZGNjcHByb2JlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Ja2ZpZm9fcmVzZXQoZGNjcHcuZmlmbyk7CisJa2ZpZm9fcmVzZXQoJmRjY3B3LmZpZm8pOwogCWdldG5zdGltZW9mZGF5KCZkY2Nwdy50c3RhcnQpOwogCXJldHVybiAwOwogfQpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkY2Nwdy53YWl0LAotCQkJCQkgX19rZmlmb19sZW4oZGNjcHcuZmlmbykgIT0gMCk7CisJCQkJCSBrZmlmb19sZW4oJmRjY3B3LmZpZm8pICE9IDApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZTsKIAotCWNudCA9IGtmaWZvX2dldChkY2Nwdy5maWZvLCB0YnVmLCBsZW4pOworCWNudCA9IGtmaWZvX291dF9sb2NrZWQoJmRjY3B3LmZpZm8sIHRidWYsIGxlbiwgJmRjY3B3LmxvY2spOwogCWVycm9yID0gY29weV90b191c2VyKGJ1ZiwgdGJ1ZiwgY250KSA/IC1FRkFVTFQgOiAwOwogCiBvdXRfZnJlZToKQEAgLTE1NiwxMCArMTU2LDggQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRjY3B3LndhaXQpOwogCXNwaW5fbG9ja19pbml0KCZkY2Nwdy5sb2NrKTsKLQlkY2Nwdy5maWZvID0ga2ZpZm9fYWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCwgJmRjY3B3LmxvY2spOwotCWlmIChJU19FUlIoZGNjcHcuZmlmbykpCi0JCXJldHVybiBQVFJfRVJSKGRjY3B3LmZpZm8pOwotCisJaWYgKGtmaWZvX2FsbG9jKCZkY2Nwdy5maWZvLCBidWZzaXplLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIHJldDsKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgcHJvY25hbWUsIFNfSVJVU1IsICZkY2NwcHJvYmVfZm9wcykpCiAJCWdvdG8gZXJyMDsKIApAQCAtMTcyLDE0ICsxNzAsMTQgQEAKIGVycjE6CiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgcHJvY25hbWUpOwogZXJyMDoKLQlrZmlmb19mcmVlKGRjY3B3LmZpZm8pOworCWtmaWZvX2ZyZWUoJmRjY3B3LmZpZm8pOwogCXJldHVybiByZXQ7CiB9CiBtb2R1bGVfaW5pdChkY2NwcHJvYmVfaW5pdCk7CiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBkY2NwcHJvYmVfZXhpdCh2b2lkKQogewotCWtmaWZvX2ZyZWUoZGNjcHcuZmlmbyk7CisJa2ZpZm9fZnJlZSgmZGNjcHcuZmlmbyk7CiAJcHJvY19uZXRfcmVtb3ZlKCZpbml0X25ldCwgcHJvY25hbWUpOwogCXVucmVnaXN0ZXJfanByb2JlKCZkY2NwX3NlbmRfcHJvYmUpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggNWNkYmMxMC4uMDQwYzRmMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTM5Nyw2ICsxMzk3LDcgQEAKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQUNDRVBUX1NPVVJDRV9ST1VURSwKIAkJCQkJImFjY2VwdF9zb3VyY2Vfcm91dGUiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQUNDRVBUX0xPQ0FMLCAiYWNjZXB0X2xvY2FsIiksCisJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKFNSQ19WTUFSSywgInNyY192YWxpZF9tYXJrIiksCiAJCURFVklORVRfU1lTQ1RMX1JXX0VOVFJZKFBST1hZX0FSUCwgInByb3h5X2FycCIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShNRURJVU1fSUQsICJtZWRpdW1faWQiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQk9PVFBfUkVMQVksICJib290cF9yZWxheSIpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCAzMzIzMTY4Li44MmRiZjcxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtMjUyLDYgKzI1Miw4IEBACiAJCW5vX2FkZHIgPSBpbl9kZXYtPmlmYV9saXN0ID09IE5VTEw7CiAJCXJwZiA9IElOX0RFVl9SUEZJTFRFUihpbl9kZXYpOwogCQlhY2NlcHRfbG9jYWwgPSBJTl9ERVZfQUNDRVBUX0xPQ0FMKGluX2Rldik7CisJCWlmIChtYXJrICYmICFJTl9ERVZfU1JDX1ZNQVJLKGluX2RldikpCisJCQlmbC5tYXJrID0gMDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggZTM0MDEzYS4uMzQ1MTc5OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCSAqLwogCiAJaWYgKHJ0LT5ydF9mbGFncyZSVENGX01VTFRJQ0FTVCkgewotCQlpZiAoKCFzayB8fCBpbmV0X3NrKHNrKS0+bWNfbG9vcCkKKwkJaWYgKHNrX21jX2xvb3Aoc2spCiAjaWZkZWYgQ09ORklHX0lQX01ST1VURQogCQkvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLAogCQkgICB3aGljaCByZXR1cm5lZCBhZnRlciBmb3J3YXJkaW5nOyB0aGV5IHdpbGwgYmUgIGRyb3BwZWQKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCBjZDQ4ODAxLi5lYjZkMDk3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC0xMjEsMTAgKzEyMSw5IEBACiAJc2tiLT5kZXYgPSBkZXY7CiAKIAlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpKSB7Ci0JCXN0cnVjdCBpcHY2X3BpbmZvKiBucCA9IHNrYi0+c2sgPyBpbmV0Nl9zayhza2ItPnNrKSA6IE5VTEw7CiAJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKTsKIAotCQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJiAoIW5wIHx8IG5wLT5tY19sb29wKSAmJgorCQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJiBza19tY19sb29wKHNrYi0+c2spICYmCiAJCSAgICAoKG1yb3V0ZTZfc29ja2V0KGRldl9uZXQoZGV2KSkgJiYKIAkJICAgICAhKElQNkNCKHNrYiktPmZsYWdzICYgSVA2U0tCX0ZPUldBUkRFRCkpIHx8CiAJCSAgICAgaXB2Nl9jaGtfbWNhc3RfYWRkcihkZXYsICZpcHY2X2hkcihza2IpLT5kYWRkciwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwppbmRleCAzYjNhOTU2Li4yY2RkZWEzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC03MDgsNyArNzA4LDggQEAKIAogCXRhYmxlID0gbmV0LT5pcHY2LnN5c2N0bC5mcmFnc19oZHItPmN0bF90YWJsZV9hcmc7CiAJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKG5ldC0+aXB2Ni5zeXNjdGwuZnJhZ3NfaGRyKTsKLQlrZnJlZSh0YWJsZSk7CisJaWYgKCFuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQorCQlrZnJlZSh0YWJsZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaXA2X2N0bF9oZWFkZXI7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBkYjNiMjczLi5jMmJkNzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTI2MzAsNiArMjYzMCw3IEBACiAJCXRhYmxlWzZdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfZWxhc3RpY2l0eTsKIAkJdGFibGVbN10uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tdHVfZXhwaXJlczsKIAkJdGFibGVbOF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9taW5fYWR2bXNzOworCQl0YWJsZVs5XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX21pbl9pbnRlcnZhbDsKIAl9CiAKIAlyZXR1cm4gdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jCmluZGV4IDM3ODc0NTUuLmQ3ZGNlZTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9odC5jCisrKyBiL25ldC9tYWM4MDIxMS9odC5jCkBAIC0zNCw5ICszNCwyOCBAQAogCiAJaHRfY2FwLT5odF9zdXBwb3J0ZWQgPSB0cnVlOwogCi0JaHRfY2FwLT5jYXAgPSBsZTE2X3RvX2NwdShodF9jYXBfaWUtPmNhcF9pbmZvKSAmIHNiYW5kLT5odF9jYXAuY2FwOwotCWh0X2NhcC0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NNX1BTOwotCWh0X2NhcC0+Y2FwIHw9IHNiYW5kLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TTV9QUzsKKwkvKgorCSAqIFRoZSBiaXRzIGxpc3RlZCBpbiB0aGlzIGV4cHJlc3Npb24gc2hvdWxkIGJlCisJICogdGhlIHNhbWUgZm9yIHRoZSBwZWVyIGFuZCB1cywgaWYgdGhlIHN0YXRpb24KKwkgKiBhZHZlcnRpc2VzIG1vcmUgdGhlbiB3ZSBjYW4ndCB1c2UgdGhvc2UgdGh1cworCSAqIHdlIG1hc2sgdGhlbSBvdXQuCisJICovCisJaHRfY2FwLT5jYXAgPSBsZTE2X3RvX2NwdShodF9jYXBfaWUtPmNhcF9pbmZvKSAmCisJCShzYmFuZC0+aHRfY2FwLmNhcCB8CisJCSB+KElFRUU4MDIxMV9IVF9DQVBfTERQQ19DT0RJTkcgfAorCQkgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CisJCSAgIElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8CisJCSAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwKKwkJICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAorCQkgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MCkpOworCS8qCisJICogVGhlIFNUQkMgYml0cyBhcmUgYXN5bW1ldHJpYyAtLSBpZiB3ZSBkb24ndCBoYXZlCisJICogVFggdGhlbiBtYXNrIG91dCB0aGUgcGVlcidzIFJYIGFuZCB2aWNlIHZlcnNhLgorCSAqLworCWlmICghKHNiYW5kLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDKSkKKwkJaHRfY2FwLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfUlhfU1RCQzsKKwlpZiAoIShzYmFuZC0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfUlhfU1RCQykpCisJCWh0X2NhcC0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkM7CiAKIAlhbXBkdV9pbmZvID0gaHRfY2FwX2llLT5hbXBkdV9wYXJhbXNfaW5mbzsKIAlodF9jYXAtPmFtcGR1X2ZhY3RvciA9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCAxMGQxMzg1Li4xZjJkYjY0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTM4Miw2ICszODIsNyBAQAogc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJaW50IGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOwpAQCAtMzk3LDYgKzM5OCw5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCWlmIChpZmlic3MtPnN0YXRlID09IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIKQorCQlyZXR1cm4gTlVMTDsKKwogCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQpKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggODExNmQxYS4uMGQyZDk0OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC01MTUsNiArNTE1LDggQEAKIAkgKiBhbmQgd2UgbmVlZCBzb21lIGhlYWRyb29tIGZvciBwYXNzaW5nIHRoZSBmcmFtZSB0byBtb25pdG9yCiAJICogaW50ZXJmYWNlcywgYnV0IG5ldmVyIGJvdGggYXQgdGhlIHNhbWUgdGltZS4KIAkgKi8KKwlCVUlMRF9CVUdfT04oSUVFRTgwMjExX1RYX1NUQVRVU19IRUFEUk9PTSAhPQorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfc3RhdHVzX3J0YXBfaGRyKSk7CiAJbG9jYWwtPnR4X2hlYWRyb29tID0gbWF4X3QodW5zaWduZWQgaW50ICwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkcikpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCBkOGQ1MGZiLi5jNzllNTlmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTkxNSw2ICs5MTUsMTQgQEAKIAlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CiAJCQkJSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCk7CiAKKwkvKgorCSAqIEFsd2F5cyBoYW5kbGUgV01NIG9uY2UgYWZ0ZXIgYXNzb2NpYXRpb24gcmVnYXJkbGVzcworCSAqIG9mIHRoZSBmaXJzdCB2YWx1ZSB0aGUgQVAgdXNlcy4gU2V0dGluZyAtMSBoZXJlIGhhcworCSAqIHRoYXQgZWZmZWN0IGJlY2F1c2UgdGhlIEFQIHZhbHVlcyBpcyBhbiB1bnNpZ25lZAorCSAqIDQtYml0IHZhbHVlLgorCSAqLworCXNkYXRhLT51Lm1nZC53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsKKwogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDEpOwogCiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IDE7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDg4MzRjYzkuLjI3Y2VhZWYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0xNDE5LDYgKzE0MTksMTAgQEAKIAlpZiAoIWxvY2FsLT5wc19zZGF0YSkKIAkJcmV0dXJuIGZhbHNlOwogCisJLyogTm8gcG9pbnQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCAqLworCWlmIChsb2NhbC0+cXVpZXNjaW5nKQorCQlyZXR1cm4gZmFsc2U7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggNzhhNmU5Mi4uZGM3NjI2NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0xMDM5LDcgKzEwMzksMTkgQEAKIAogCS8qIHJlc3RhcnQgaGFyZHdhcmUgKi8KIAlpZiAobG9jYWwtPm9wZW5fY291bnQpIHsKKwkJLyoKKwkJICogVXBvbiByZXN1bWUgaGFyZHdhcmUgY2FuIHNvbWV0aW1lcyBiZSBnb29meSBkdWUgdG8KKwkJICogdmFyaW91cyBwbGF0Zm9ybSAvIGRyaXZlciAvIGJ1cyBpc3N1ZXMsIHNvIHJlc3RhcnRpbmcKKwkJICogdGhlIGRldmljZSBtYXkgYXQgdGltZXMgbm90IHdvcmsgaW1tZWRpYXRlbHkuIFByb3BhZ2F0ZQorCQkgKiB0aGUgZXJyb3IuCisJCSAqLwogCQlyZXMgPSBkcnZfc3RhcnQobG9jYWwpOworCQlpZiAocmVzKSB7CisJCQlXQVJOKGxvY2FsLT5zdXNwZW5kZWQsICJIYXJ3YXJlIGJlY2FtZSB1bmF2YWlsYWJsZSAiCisJCQkgICAgICJ1cG9uIHJlc3VtZS4gVGhpcyBpcyBjb3VsZCBiZSBhIHNvZnR3YXJlIGlzc3VlIgorCQkJICAgICAicHJpb3IgdG8gc3VzcGVuZCBvciBhIGhhcndhcmUgaXNzdWVcbiIpOworCQkJcmV0dXJuIHJlczsKKwkJfQogCiAJCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIHRydWUpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcKaW5kZXggNzlhNjk4MC4uZjJkNzYyMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcKQEAgLTExMiw3ICsxMTIsOCBAQAogCSAgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLgogIAogY29uZmlnCUlQX1ZTX1dSUgotICAgICAgICB0cmlzdGF0ZSAid2VpZ2h0ZWQgcm91bmQtcm9iaW4gc2NoZWR1bGluZyIgCisJdHJpc3RhdGUgIndlaWdodGVkIHJvdW5kLXJvYmluIHNjaGVkdWxpbmciCisJc2VsZWN0IEdDRAogCS0tLWhlbHAtLS0KIAkgIFRoZSB3ZWlnaHRlZCByb2Jpbi1yb2JpbiBzY2hlZHVsaW5nIGFsZ29yaXRobSBkaXJlY3RzIG5ldHdvcmsKIAkgIGNvbm5lY3Rpb25zIHRvIGRpZmZlcmVudCByZWFsIHNlcnZlcnMgYmFzZWQgb24gc2VydmVyIHdlaWdodHMKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwppbmRleCA2YmRlMTJkLi5jMzdhYzJkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCkBAIC0yMDc3LDYgKzIwNzcsMTAgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKKwlpZiAoY21kIDwgSVBfVlNfQkFTRV9DVEwgfHwgY21kID4gSVBfVlNfU09fU0VUX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGxlbiA8IDAgfHwgbGVuID4gIE1BWF9BUkdfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobGVuICE9IHNldF9hcmdsZW5bU0VUX0NNRElEKGNtZCldKSB7CiAJCXByX2Vycigic2V0X2N0bDogbGVuICV1ICE9ICV1XG4iLAogCQkgICAgICAgbGVuLCBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSk7CkBAIC0yMzUyLDE3ICsyMzU2LDI1IEBACiB7CiAJdW5zaWduZWQgY2hhciBhcmdbMTI4XTsKIAlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY29weWxlbjsKIAogCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAorCWlmIChjbWQgPCBJUF9WU19CQVNFX0NUTCB8fCBjbWQgPiBJUF9WU19TT19HRVRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICgqbGVuIDwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pIHsKIAkJcHJfZXJyKCJnZXRfY3RsOiBsZW4gJXUgPCAldVxuIiwKIAkJICAgICAgICpsZW4sIGdldF9hcmdsZW5bR0VUX0NNRElEKGNtZCldKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGNvcHlfZnJvbV91c2VyKGFyZywgdXNlciwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pICE9IDApCisJY29weWxlbiA9IGdldF9hcmdsZW5bR0VUX0NNRElEKGNtZCldOworCWlmIChjb3B5bGVuID4gMTI4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihhcmcsIHVzZXIsIGNvcHlsZW4pICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmX19pcF92c19tdXRleCkpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKaW5kZXggNjE4MmU4ZS4uM2MxMTVmYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2djZC5oPgogCiAjaW5jbHVkZSA8bmV0L2lwX3ZzLmg+CiAKQEAgLTM4LDIwICszOSw2IEBACiB9OwogCiAKLS8qCi0gKiAgICBHZXQgdGhlIGdjZCBvZiBzZXJ2ZXIgd2VpZ2h0cwotICovCi1zdGF0aWMgaW50IGdjZChpbnQgYSwgaW50IGIpCi17Ci0JaW50IGM7Ci0KLQl3aGlsZSAoKGMgPSBhICUgYikpIHsKLQkJYSA9IGI7Ci0JCWIgPSBjOwotCX0KLQlyZXR1cm4gYjsKLX0KLQogc3RhdGljIGludCBpcF92c193cnJfZ2NkX3dlaWdodChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogewogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwppbmRleCAzOGVhN2VmLi5mMDczMmFhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtMzIzLDI0ICszMjMsMjQgQEAKIAkJCSAgc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIgKmluZm8sIGludCBkaXIsCiAJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdW5zaWduZWQgaW50IGksIG9sZGVzdCA9IE5VTV9TRVFfVE9fUkVNRU1CRVI7CisJdW5zaWduZWQgaW50IGksIG9sZGVzdDsKIAogCS8qIExvb2sgZm9yIG9sZGVzdDogaWYgd2UgZmluZCBleGFjdCBtYXRjaCwgd2UncmUgZG9uZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VxX2FmdF9ubF9udW1bZGlyXTsgaSsrKSB7CiAJCWlmIChpbmZvLT5zZXFfYWZ0X25sW2Rpcl1baV0gPT0gbmxfc2VxKQogCQkJcmV0dXJuOwotCi0JCWlmIChvbGRlc3QgPT0gaW5mby0+c2VxX2FmdF9ubF9udW1bZGlyXSB8fAotCQkgICAgYmVmb3JlKGluZm8tPnNlcV9hZnRfbmxbZGlyXVtpXSwKLQkJCSAgIGluZm8tPnNlcV9hZnRfbmxbZGlyXVtvbGRlc3RdKSkKLQkJCW9sZGVzdCA9IGk7CiAJfQogCiAJaWYgKGluZm8tPnNlcV9hZnRfbmxfbnVtW2Rpcl0gPCBOVU1fU0VRX1RPX1JFTUVNQkVSKSB7CiAJCWluZm8tPnNlcV9hZnRfbmxbZGlyXVtpbmZvLT5zZXFfYWZ0X25sX251bVtkaXJdKytdID0gbmxfc2VxOwotCX0gZWxzZSBpZiAob2xkZXN0ICE9IE5VTV9TRVFfVE9fUkVNRU1CRVIgJiYKLQkJICAgYWZ0ZXIobmxfc2VxLCBpbmZvLT5zZXFfYWZ0X25sW2Rpcl1bb2xkZXN0XSkpIHsKLQkJaW5mby0+c2VxX2FmdF9ubFtkaXJdW29sZGVzdF0gPSBubF9zZXE7CisJfSBlbHNlIHsKKwkJaWYgKGJlZm9yZShpbmZvLT5zZXFfYWZ0X25sW2Rpcl1bMF0sIGluZm8tPnNlcV9hZnRfbmxbZGlyXVsxXSkpCisJCQlvbGRlc3QgPSAwOworCQllbHNlCisJCQlvbGRlc3QgPSAxOworCisJCWlmIChhZnRlcihubF9zZXEsIGluZm8tPnNlcV9hZnRfbmxbZGlyXVtvbGRlc3RdKSkKKwkJCWluZm8tPnNlcV9hZnRfbmxbZGlyXVtvbGRlc3RdID0gbmxfc2VxOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZTA1MTZhMi4uZjEyNmQxOCAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0xMDIxLDggKzEwMjEsMjAgQEAKIAogCQlzdGF0dXMgPSBUUF9TVEFUVVNfU0VORF9SRVFVRVNUOwogCQllcnIgPSBkZXZfcXVldWVfeG1pdChza2IpOwotCQlpZiAodW5saWtlbHkoZXJyID4gMCAmJiAoZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKSkgIT0gMCkpCi0JCQlnb3RvIG91dF94bWl0OworCQlpZiAodW5saWtlbHkoZXJyID4gMCkpIHsKKwkJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CisJCQlpZiAoZXJyICYmIF9fcGFja2V0X2dldF9zdGF0dXMocG8sIHBoKSA9PQorCQkJCSAgIFRQX1NUQVRVU19BVkFJTEFCTEUpIHsKKwkJCQkvKiBza2Igd2FzIGRlc3RydWN0ZWQgYWxyZWFkeSAqLworCQkJCXNrYiA9IE5VTEw7CisJCQkJZ290byBvdXRfc3RhdHVzOworCQkJfQorCQkJLyoKKwkJCSAqIHNrYiB3YXMgZHJvcHBlZCBidXQgbm90IGRlc3RydWN0ZWQgeWV0OworCQkJICogbGV0J3MgdHJlYXQgaXQgbGlrZSBjb25nZXN0aW9uIG9yIGVyciA8IDAKKwkJCSAqLworCQkJZXJyID0gMDsKKwkJfQogCQlwYWNrZXRfaW5jcmVtZW50X2hlYWQoJnBvLT50eF9yaW5nKTsKIAkJbGVuX3N1bSArPSB0cF9sZW47CiAJfSB3aGlsZSAobGlrZWx5KChwaCAhPSBOVUxMKSB8fApAQCAtMTAzMyw5ICsxMDQ1LDYgQEAKIAllcnIgPSBsZW5fc3VtOwogCWdvdG8gb3V0X3B1dDsKIAotb3V0X3htaXQ6Ci0Jc2tiLT5kZXN0cnVjdG9yID0gc29ja193ZnJlZTsKLQlhdG9taWNfZGVjKCZwby0+dHhfcmluZy5wZW5kaW5nKTsKIG91dF9zdGF0dXM6CiAJX19wYWNrZXRfc2V0X3N0YXR1cyhwbywgcGgsIHN0YXR1cyk7CiAJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX2xvb3BiYWNrLmMgYi9uZXQvcm9zZS9yb3NlX2xvb3BiYWNrLmMKaW5kZXggMTE0ZGY2ZS4uOTY4ZThiYSAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9sb29wYmFjay5jCisrKyBiL25ldC9yb3NlL3Jvc2VfbG9vcGJhY2suYwpAQCAtNzUsNyArNzUsNyBAQAogCQlsY2lfaSAgICAgPSAoKHNrYi0+ZGF0YVswXSA8PCA4KSAmIDB4RjAwKSArICgoc2tiLT5kYXRhWzFdIDw8IDApICYgMHgwRkYpOwogCQlmcmFtZXR5cGUgPSBza2ItPmRhdGFbMl07CiAJCWRlc3QgICAgICA9IChyb3NlX2FkZHJlc3MgKikoc2tiLT5kYXRhICsgNCk7Ci0JCWxjaV9vICAgICA9IDB4RkZGIC0gbGNpX2k7CisJCWxjaV9vICAgICA9IFJPU0VfREVGQVVMVF9NQVhWQyArIDEgLSBsY2lfaTsKIAogCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDg5YWI2NmUuLjY3ZmRhYzkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0yMDg3LDggKzIwODcsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmc3AtPmF1dG9jbG9zZSwgb3B0dmFsLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAkvKiBtYWtlIHN1cmUgaXQgd29uJ3QgZXhjZWVkIE1BWF9TQ0hFRFVMRV9USU1FT1VUICovCi0JaWYgKHNwLT5hdXRvY2xvc2UgPiAoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikgKQotCQlzcC0+YXV0b2Nsb3NlID0gKF9fdTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSA7CisJc3AtPmF1dG9jbG9zZSA9IG1pbl90KGxvbmcsIHNwLT5hdXRvY2xvc2UsIE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKaW5kZXggM2MzYzUwZi4uZjdhN2Y4MyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwpAQCAtNjQ0LDcgKzY0NCwyMiBAQAogCXAgPSBnc3NfZmlsbF9jb250ZXh0KHAsIGVuZCwgY3R4LCBnc3NfbXNnLT5hdXRoLT5tZWNoKTsKIAlpZiAoSVNfRVJSKHApKSB7CiAJCWVyciA9IFBUUl9FUlIocCk7Ci0JCWdzc19tc2ctPm1zZy5lcnJubyA9IChlcnIgPT0gLUVBR0FJTikgPyAtRUFHQUlOIDogLUVBQ0NFUzsKKwkJc3dpdGNoIChlcnIpIHsKKwkJY2FzZSAtRUFDQ0VTOgorCQkJZ3NzX21zZy0+bXNnLmVycm5vID0gZXJyOworCQkJZXJyID0gbWxlbjsKKwkJCWJyZWFrOworCQljYXNlIC1FRkFVTFQ6CisJCWNhc2UgLUVOT01FTToKKwkJY2FzZSAtRUlOVkFMOgorCQljYXNlIC1FTk9TWVM6CisJCQlnc3NfbXNnLT5tc2cuZXJybm8gPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9DUklUICIlczogYmFkIHJldHVybiBmcm9tICIKKwkJCQkiZ3NzX2ZpbGxfY29udGV4dDogJXpkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJCUJVRygpOworCQl9CiAJCWdvdG8gZXJyX3JlbGVhc2VfbXNnOwogCX0KIAlnc3NfbXNnLT5jdHggPSBnc3NfZ2V0X2N0eChjdHgpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwppbmRleCBlZjQ1ZWJhLi4yZGViMGVkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwpAQCAtMTMxLDggKzEzMSwxMCBAQAogCXN0cnVjdAlrcmI1X2N0eCAqY3R4OwogCWludCB0bXA7CiAKLQlpZiAoIShjdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX05PRlMpKSkKKwlpZiAoIShjdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX05PRlMpKSkgeworCQlwID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJZ290byBvdXRfZXJyOworCX0KIAogCXAgPSBzaW1wbGVfZ2V0X2J5dGVzKHAsIGVuZCwgJmN0eC0+aW5pdGlhdGUsIHNpemVvZihjdHgtPmluaXRpYXRlKSk7CiAJaWYgKElTX0VSUihwKSkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19tZWNoX3N3aXRjaC5jCmluZGV4IDZlZmJiMGMuLjc2ZTRjNmYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX21lY2hfc3dpdGNoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3NfbWVjaF9zd2l0Y2guYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJCSAgICAgICBzdHJ1Y3QgZ3NzX2N0eAkJKipjdHhfaWQpCiB7CiAJaWYgKCEoKmN0eF9pZCA9IGt6YWxsb2Moc2l6ZW9mKCoqY3R4X2lkKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJKCpjdHhfaWQpLT5tZWNoX3R5cGUgPSBnc3NfbWVjaF9nZXQobWVjaCk7CiAKIAlyZXR1cm4gbWVjaC0+Z21fb3BzCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggMWM5MjRlZS4uN2QxZjllOSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtNjk5LDcgKzY5OSw4IEBACiAJc3Bpbl91bmxvY2tfYmgoJnBvb2wtPnNwX2xvY2spOwogCiAJbGVuID0gMDsKLQlpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCAmeHBydC0+eHB0X2ZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsICZ4cHJ0LT54cHRfZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChYUFRfQ0xPU0UsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CiAJCXN0cnVjdCBzdmNfeHBydCAqbmV3eHB0OwogCQluZXd4cHQgPSB4cHJ0LT54cHRfb3BzLT54cG9fYWNjZXB0KHhwcnQpOwogCQlpZiAobmV3eHB0KSB7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWxtZS5jIGIvbmV0L3dpcmVsZXNzL21sbWUuYwppbmRleCAxMDAxZGI0Li44MmU2MDAyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWxtZS5jCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTkzLDcgKzkzLDE4IEBACiAJCQl9CiAJCX0KIAotCQlXQVJOX09OKCFic3MpOworCQkvKgorCQkgKiBXZSBtaWdodCBiZSBjb21pbmcgaGVyZSBiZWNhdXNlIHRoZSBkcml2ZXIgcmVwb3J0ZWQKKwkJICogYSBzdWNjZXNzZnVsIGFzc29jaWF0aW9uIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlCisJCSAqIHVzZXIgcmVxdWVzdGVkIGEgZGVhdXRoLiBJbiB0aGF0IGNhc2UsIHdlIHdpbGwgaGF2ZQorCQkgKiByZW1vdmVkIHRoZSBCU1MgZnJvbSB0aGUgYXV0aF9ic3NlcyBsaXN0IGR1ZSB0byB0aGUKKwkJICogZGVhdXRoIHJlcXVlc3Qgd2hlbiB0aGUgYXNzb2MgcmVzcG9uc2UgbWFrZXMgaXQuIElmCisJCSAqIHRoZSB0d28gY29kZSBwYXRocyBhY3F1aXJlIHRoZSBsb2NrIHRoZSBvdGhlciB3YXkKKwkJICogYXJvdW5kLCB0aGF0J3MganVzdCB0aGUgc3RhbmRhcmQgc2l0dWF0aW9uIG9mIGEKKwkJICogZGVhdXRoIGJlaW5nIHJlcXVlc3RlZCB3aGlsZSBjb25uZWN0ZWQuCisJCSAqLworCQlpZiAoIWJzcykKKwkJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAod2Rldi0+Y29ubikgewogCQljZmc4MDIxMV9zbWVfZmFpbGVkX2Fzc29jKHdkZXYpOwogCQkvKgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggMTJkZmE2Mi4uMGMyY2JiZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYworKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC02MDEsNyArNjAxLDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKIAlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKndyZXEgPSBOVUxMOwotCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXE7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqY3JlcSA9IE5VTEw7CiAJaW50IGksIGVyciwgbl9jaGFubmVscyA9IDA7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCkBAIC02OTQsOCArNjk0LDEwIEBACiAJLyogdHJhbnNsYXRlICJTY2FuIGZvciBTU0lEIiByZXF1ZXN0ICovCiAJaWYgKHdyZXEpIHsKIAkJaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKLQkJCWlmICh3cmVxLT5lc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQotCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHdyZXEtPmVzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJbWVtY3B5KGNyZXEtPnNzaWRzWzBdLnNzaWQsIHdyZXEtPmVzc2lkLCB3cmVxLT5lc3NpZF9sZW4pOwogCQkJY3JlcS0+c3NpZHNbMF0uc3NpZF9sZW4gPSB3cmVxLT5lc3NpZF9sZW47CiAJCX0KQEAgLTcwNywxMiArNzA5LDE1IEBACiAJZXJyID0gcmRldi0+b3BzLT5zY2FuKHdpcGh5LCBkZXYsIGNyZXEpOwogCWlmIChlcnIpIHsKIAkJcmRldi0+c2Nhbl9yZXEgPSBOVUxMOwotCQlrZnJlZShjcmVxKTsKKwkJLyogY3JlcSB3aWxsIGJlIGZyZWVkIGJlbG93ICovCiAJfSBlbHNlIHsKIAkJbmw4MDIxMV9zZW5kX3NjYW5fc3RhcnQocmRldiwgZGV2KTsKKwkJLyogY3JlcSBub3cgb3duZWQgYnkgZHJpdmVyICovCisJCWNyZXEgPSBOVUxMOwogCQlkZXZfaG9sZChkZXYpOwogCX0KICBvdXQ6CisJa2ZyZWUoY3JlcSk7CiAJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGNiODFjYTMuLjQ3MjVhNTQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAKIAlpZiAoIWRldikKIAkJZ290byBmcmVlX2RzdDsKIAotCS8qIENvcHkgbmVpZ2hib3V0IGZvciByZWFjaGFiaWxpdHkgY29uZmlybWF0aW9uICovCisJLyogQ29weSBuZWlnaGJvdXIgZm9yIHJlYWNoYWJpbGl0eSBjb25maXJtYXRpb24gKi8KIAlkc3QwLT5uZWlnaGJvdXIgPSBuZWlnaF9jbG9uZShkc3QtPm5laWdoYm91cik7CiAKIAl4ZnJtX2luaXRfcGF0aCgoc3RydWN0IHhmcm1fZHN0ICopZHN0MCwgZHN0LCBuZmhlYWRlcl9sZW4pOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKaW5kZXggMzQxYjU4OS4uMGI5NGQyZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCkBAIC0yMDcsNiArMjA3LDcgQEAKIAogaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiBjbWRfcmVjb3JkX21jb3VudCA9IHNldCAtZSA7IHBlcmwgJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCAiJChBUkNIKSIgXAorCSIkKGlmICQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSxiaWcsbGl0dGxlKSIgXAogCSIkKGlmICQoQ09ORklHXzY0QklUKSw2NCwzMikiIFwKIAkiJChPQkpEVU1QKSIgIiQoT0JKQ09QWSkiICIkKENDKSIgIiQoTEQpIiAiJChOTSkiICIkKFJNKSIgIiQoTVYpIiBcCiAJIiQoaWYgJChwYXJ0LW9mLW1vZHVsZSksMSwwKSIgIiQoQCkiOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCBjZDgxNWFjLi4wZmU0OGNkIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmxpYgorKysgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgpAQCAtMjM1LDMgKzIzNSw4IEBACiBjbWRfbHptYSA9IChjYXQgJChmaWx0ZXItb3V0IEZPUkNFLCReKSB8IFwKIAlsem1hIC05ICYmICQoY2FsbCBzaXplX2FwcGVuZCwgJChmaWx0ZXItb3V0IEZPUkNFLCReKSkpID4gJEAgfHwgXAogCShybSAtZiAkQCA7IGZhbHNlKQorCitxdWlldF9jbWRfbHpvID0gTFpPICAgICRACitjbWRfbHpvID0gKGNhdCAkKGZpbHRlci1vdXQgRk9SQ0UsJF4pIHwgXAorCWx6b3AgLTkgJiYgJChjYWxsIHNpemVfYXBwZW5kLCAkKGZpbHRlci1vdXQgRk9SQ0UsJF4pKSkgPiAkQCB8fCBcCisJKHJtIC1mICRAIDsgZmFsc2UpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggYmM0MTE0Zi4uMzI1N2QzZCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMSw1ICsxLDUgQEAKICMhL3Vzci9iaW4vcGVybCAtdwotIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCisjIChjKSAyMDAxLCBEYXZlIEpvbmVzLiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQogIyAoYykgMjAwNSwgSm9lbCBTY2hvcHAgPGpzY2hvcHBAYXVzdGluLmlibS5jb20+ICh0aGUgdWdseSBiaXQpCiAjIChjKSAyMDA3LDIwMDgsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAdWsuaWJtLmNvbT4gKG5ldyBjb25kaXRpb25zLCB0ZXN0IHN1aXRlKQogIyAoYykgMjAwOCwyMDA5LCBBbmR5IFdoaXRjcm9mdCA8YXB3QGNhbm9uaWNhbC5jb20+CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCA0NDVlODg0Li4wOTBmMjQ4IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTI5Niw0NiArMjk2LDU2IEBACiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgewogCi0jRG8gbm90IG1hdGNoIGV4Y2x1ZGVkIGZpbGUgcGF0dGVybnMKKyAgICBteSAlaGFzaDsKKyAgICBteSAkdHZpID0gZmluZF9maXJzdF9zZWN0aW9uKCk7CisgICAgd2hpbGUgKCR0dmkgPCBAdHlwZXZhbHVlKSB7CisJbXkgJHN0YXJ0ID0gZmluZF9zdGFydGluZ19pbmRleCgkdHZpKTsKKwlteSAkZW5kID0gZmluZF9lbmRpbmdfaW5kZXgoJHR2aSk7CisJbXkgJGV4Y2x1ZGUgPSAwOworCW15ICRpOwogCi0gICAgbXkgJGV4Y2x1ZGUgPSAwOwotICAgIGZvcmVhY2ggbXkgJGxpbmUgKEB0eXBldmFsdWUpIHsKLQlpZiAoJGxpbmUgPX4gbS9eKFxDKTpccyooLiopLykgewotCSAgICBteSAkdHlwZSA9ICQxOwotCSAgICBteSAkdmFsdWUgPSAkMjsKLQkgICAgaWYgKCR0eXBlIGVxICdYJykgewotCQlpZiAoZmlsZV9tYXRjaF9wYXR0ZXJuKCRmaWxlLCAkdmFsdWUpKSB7Ci0JCSAgICAkZXhjbHVkZSA9IDE7Ci0JCSAgICBsYXN0OwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfQorCSNEbyBub3QgbWF0Y2ggZXhjbHVkZWQgZmlsZSBwYXR0ZXJucwogCi0gICAgaWYgKCEkZXhjbHVkZSkgewotCW15ICR0dmkgPSAwOwotCW15ICVoYXNoOwotCWZvcmVhY2ggbXkgJGxpbmUgKEB0eXBldmFsdWUpIHsKKwlmb3IgKCRpID0gJHN0YXJ0OyAkaSA8ICRlbmQ7ICRpKyspIHsKKwkgICAgbXkgJGxpbmUgPSAkdHlwZXZhbHVlWyRpXTsKIAkgICAgaWYgKCRsaW5lID1+IG0vXihcQyk6XHMqKC4qKS8pIHsKIAkJbXkgJHR5cGUgPSAkMTsKIAkJbXkgJHZhbHVlID0gJDI7Ci0JCWlmICgkdHlwZSBlcSAnRicpIHsKKwkJaWYgKCR0eXBlIGVxICdYJykgewogCQkgICAgaWYgKGZpbGVfbWF0Y2hfcGF0dGVybigkZmlsZSwgJHZhbHVlKSkgewotCQkJbXkgJHZhbHVlX3BkID0gKCR2YWx1ZSA9fiB0ckAvQEApOwotCQkJbXkgJGZpbGVfcGQgPSAoJGZpbGUgID1+IHRyQC9AQCk7Ci0JCQkkdmFsdWVfcGQrKyBpZiAoc3Vic3RyKCR2YWx1ZSwtMSwxKSBuZSAiLyIpOwotCQkJaWYgKCRwYXR0ZXJuX2RlcHRoID09IDAgfHwKLQkJCSAgICAoKCRmaWxlX3BkIC0gJHZhbHVlX3BkKSA8ICRwYXR0ZXJuX2RlcHRoKSkgewotCQkJICAgICRoYXNoeyR0dml9ID0gJHZhbHVlX3BkOworCQkJJGV4Y2x1ZGUgPSAxOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKwlpZiAoISRleGNsdWRlKSB7CisJICAgIGZvciAoJGkgPSAkc3RhcnQ7ICRpIDwgJGVuZDsgJGkrKykgeworCQlteSAkbGluZSA9ICR0eXBldmFsdWVbJGldOworCQlpZiAoJGxpbmUgPX4gbS9eKFxDKTpccyooLiopLykgeworCQkgICAgbXkgJHR5cGUgPSAkMTsKKwkJICAgIG15ICR2YWx1ZSA9ICQyOworCQkgICAgaWYgKCR0eXBlIGVxICdGJykgeworCQkJaWYgKGZpbGVfbWF0Y2hfcGF0dGVybigkZmlsZSwgJHZhbHVlKSkgeworCQkJICAgIG15ICR2YWx1ZV9wZCA9ICgkdmFsdWUgPX4gdHJAL0BAKTsKKwkJCSAgICBteSAkZmlsZV9wZCA9ICgkZmlsZSAgPX4gdHJAL0BAKTsKKwkJCSAgICAkdmFsdWVfcGQrKyBpZiAoc3Vic3RyKCR2YWx1ZSwtMSwxKSBuZSAiLyIpOworCQkJICAgIGlmICgkcGF0dGVybl9kZXB0aCA9PSAwIHx8CisJCQkJKCgkZmlsZV9wZCAtICR2YWx1ZV9wZCkgPCAkcGF0dGVybl9kZXB0aCkpIHsKKwkJCQkkaGFzaHskdHZpfSA9ICR2YWx1ZV9wZDsKKwkJCSAgICB9CiAJCQl9CiAJCSAgICB9CiAJCX0KIAkgICAgfQotCSAgICAkdHZpKys7CiAJfQotCWZvcmVhY2ggbXkgJGxpbmUgKHNvcnQgeyRoYXNoeyRifSA8PT4gJGhhc2h7JGF9fSBrZXlzICVoYXNoKSB7Ci0JICAgIGFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKLQl9CisKKwkkdHZpICs9ICgkZW5kIC0gJHN0YXJ0KTsKKworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGxpbmUgKHNvcnQgeyRoYXNoeyRifSA8PT4gJGhhc2h7JGF9fSBrZXlzICVoYXNoKSB7CisJYWRkX2NhdGVnb3JpZXMoJGxpbmUpOwogICAgIH0KIAogICAgIGlmICgkZW1haWwgJiYgJGVtYWlsX2dpdCkgewpAQCAtNTcwLDYgKzU4MCwyMCBAQAogICAgIHJldHVybiAkZm9ybWF0dGVkX2VtYWlsOwogfQogCitzdWIgZmluZF9maXJzdF9zZWN0aW9uIHsKKyAgICBteSAkaW5kZXggPSAwOworCisgICAgd2hpbGUgKCRpbmRleCA8IEB0eXBldmFsdWUpIHsKKwlteSAkdHYgPSAkdHlwZXZhbHVlWyRpbmRleF07CisJaWYgKCgkdHYgPX4gbS9eKFxDKTpccyooLiopLykpIHsKKwkgICAgbGFzdDsKKwl9CisJJGluZGV4Kys7CisgICAgfQorCisgICAgcmV0dXJuICRpbmRleDsKK30KKwogc3ViIGZpbmRfc3RhcnRpbmdfaW5kZXggewogICAgIG15ICgkaW5kZXgpID0gQF87CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKaW5kZXggOWNmMGE2Zi4uOTJmMDlmZSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKKysrIGIvc2NyaXB0cy9yZWNvcmRtY291bnQucGwKQEAgLTExMywxMyArMTEzLDEzIEBACiAKIG15ICRWID0gJzAuMSc7CiAKLWlmICgkI0FSR1YgIT0gMTApIHsKLQlwcmludCAidXNhZ2U6ICRQIGFyY2ggYml0cyBvYmpkdW1wIG9iamNvcHkgY2MgbGQgbm0gcm0gbXYgaXNfbW9kdWxlIGlucHV0ZmlsZVxuIjsKK2lmICgkI0FSR1YgIT0gMTEpIHsKKwlwcmludCAidXNhZ2U6ICRQIGFyY2ggZW5kaWFuIGJpdHMgb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlzX21vZHVsZSBpbnB1dGZpbGVcbiI7CiAJcHJpbnQgInZlcnNpb246ICRWXG4iOwogCWV4aXQoMSk7CiB9CiAKLW15ICgkYXJjaCwgJGJpdHMsICRvYmpkdW1wLCAkb2JqY29weSwgJGNjLAorbXkgKCRhcmNoLCAkZW5kaWFuLCAkYml0cywgJG9iamR1bXAsICRvYmpjb3B5LCAkY2MsCiAgICAgJGxkLCAkbm0sICRybSwgJG12LCAkaXNfbW9kdWxlLCAkaW5wdXRmaWxlKSA9IEBBUkdWOwogCiAjIFRoaXMgZmlsZSByZWZlcnMgdG8gbWNvdW50IGFuZCBzaG91bGRuJ3QgYmUgZnRyYWNlZCwgc28gbGV0cycgaWdub3JlIGl0CkBAIC0yOTUsNiArMjk1LDU4IEBACiAgICAgJGxkIC49ICIgLW0gZWxmNjRfc3BhcmMiOwogICAgICRjYyAuPSAiIC1tNjQiOwogICAgICRvYmpjb3B5IC49ICIgLU8gZWxmNjQtc3BhcmMiOworfSBlbHNpZiAoJGFyY2ggZXEgIm1pcHMiKSB7CisgICAgIyBUbyBlbmFibGUgbW9kdWxlIHN1cHBvcnQsIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSAtbWxvbmctY2FsbHMgb3B0aW9uCisgICAgIyBvZiBnY2MgZm9yIG1vZHVsZSwgYWZ0ZXIgdXNpbmcgdGhpcyBvcHRpb24sIHdlIGNhbiBub3QgZ2V0IHRoZSByZWFsCisgICAgIyBvZmZzZXQgb2YgdGhlIGNhbGxpbmcgdG8gX21jb3VudCwgYnV0IHRoZSBvZmZzZXQgb2YgdGhlIGx1aQorICAgICMgaW5zdHJ1Y3Rpb24gb3IgdGhlIGFkZGl1IG9uZS4gaGVyZWluLCB3ZSByZWNvcmQgdGhlIGFkZHJlc3Mgb2YgdGhlCisgICAgIyBmaXJzdCBvbmUsIGFuZCB0aGVuIHdlIGNhbiByZXBsYWNlIHRoaXMgaW5zdHJ1Y3Rpb24gYnkgYSBicmFuY2gKKyAgICAjIGluc3RydWN0aW9uIHRvIGp1bXAgb3ZlciB0aGUgcHJvZmlsaW5nIGZ1bmN0aW9uIHRvIGZpbHRlciB0aGUKKyAgICAjIGluZGljYXRlZCBmdW5jdGlvbnMsIG9yIHN3aXRoIGJhY2sgdG8gdGhlIGx1aSBpbnN0cnVjdGlvbiB0byB0cmFjZQorICAgICMgdGhlbSwgd2hpY2ggbWVhbnMgZHluYW1pYyB0cmFjaW5nLgorICAgICMKKyAgICAjICAgICAgIGM6CTNjMDMwMDAwIAlsdWkJdjEsMHgwCisgICAgIwkJCWM6IFJfTUlQU19ISTE2CV9tY291bnQKKyAgICAjCQkJYzogUl9NSVBTX05PTkUJKkFCUyoKKyAgICAjCQkJYzogUl9NSVBTX05PTkUJKkFCUyoKKyAgICAjICAgICAgMTA6CTY0NjMwMDAwIAlkYWRkaXUJdjEsdjEsMAorICAgICMJCQkxMDogUl9NSVBTX0xPMTYJX21jb3VudAorICAgICMJCQkxMDogUl9NSVBTX05PTkUJKkFCUyoKKyAgICAjCQkJMTA6IFJfTUlQU19OT05FCSpBQlMqCisgICAgIyAgICAgIDE0OgkwM2UwMDgyZCAJbW92ZQlhdCxyYQorICAgICMgICAgICAxODoJMDA2MGY4MDkgCWphbHIJdjEKKyAgICAjCisgICAgIyBmb3IgdGhlIGtlcm5lbDoKKyAgICAjCisgICAgIyAgICAgMTA6ICAgMDNlMDA4MmQgICAgICAgIG1vdmUgICAgYXQscmEKKyAgICAjCSAgMTQ6ICAgMGMwMDAwMDAgICAgICAgIGphbCAgICAgMCA8bG9vbmdzb25faGFsdD4KKyAgICAjICAgICAgICAgICAgICAgICAgICAxNDogUl9NSVBTXzI2ICAgX21jb3VudAorICAgICMgICAgICAgICAgICAgICAgICAgIDE0OiBSX01JUFNfTk9ORSAqQUJTKgorICAgICMgICAgICAgICAgICAgICAgICAgIDE0OiBSX01JUFNfTk9ORSAqQUJTKgorICAgICMJIDE4OiAgIDAwMDIwMDIxICAgICAgICBub3AKKyAgICBpZiAoJGlzX21vZHVsZSBlcSAiMCIpIHsKKwkgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzX21jb3VudFwkIjsKKyAgICB9IGVsc2UgeworCSAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6IFJfTUlQU19ISTE2XFxzK19tY291bnRcJCI7CisgICAgfQorICAgICRvYmpkdW1wIC49ICIgLU1lbGYtdHJhZCIuJGVuZGlhbi4ibWlwcyAiOworCisgICAgaWYgKCRlbmRpYW4gZXEgImJpZyIpIHsKKwkgICAgJGVuZGlhbiA9ICIgLUVCICI7CisJICAgICRsZCAuPSAiIC1tZWxmIi4kYml0cy4iYnRzbWlwIjsKKyAgICB9IGVsc2UgeworCSAgICAkZW5kaWFuID0gIiAtRUwgIjsKKwkgICAgJGxkIC49ICIgLW1lbGYiLiRiaXRzLiJsdHNtaXAiOworICAgIH0KKworICAgICRjYyAuPSAiIC1tbm8tYWJpY2FsbHMgLWZuby1waWMgLW1hYmk9IiAuICRiaXRzIC4gJGVuZGlhbjsKKyAgICAkbGQgLj0gJGVuZGlhbjsKKworICAgIGlmICgkYml0cyA9PSA2NCkgeworCSAgICAkZnVuY3Rpb25fcmVnZXggPQorCQkiXihbMC05YS1mQS1GXSspXFxzKzwoLnxbXlwkXUwuKj98XCRbXkxdLio/fFteXCRdW15MXS4qPyk+OiI7CisJICAgICR0eXBlID0gIi5kd29yZCI7CisgICAgfQogfSBlbHNpZiAoJGFyY2ggZXEgIm1pY3JvYmxhemUiKSB7CiAgICAgIyBNaWNyb2JsYXplIGNhbGxzICdfbWNvdW50JyBpbnN0ZWFkIG9mIHBsYWluICdtY291bnQnLgogICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTouKlxcc19tY291bnRcJCI7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IGJiNDRlMzUuLmRhMjBhMTkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC04LDcgKzgsOCBAQAogc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTykgICAgICAgICs9IHRvbW95bwogCiAjIGFsd2F5cyBlbmFibGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMKLW9iai15CQkrPSBjb21tb25jYXAubyBtaW5fYWRkci5vCitvYmoteQkJCQkJKz0gY29tbW9uY2FwLm8KK29iai0kKENPTkZJR19NTVUpCQkJKz0gbWluX2FkZHIubwogCiAjIE9iamVjdCBmaWxlIGxpc3RzCiBvYmotJChDT05GSUdfU0VDVVJJVFkpCQkJKz0gc2VjdXJpdHkubyBjYXBhYmlsaXR5Lm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDA2ZWM3MjIuLmU5YzJlN2M1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJCSAqIGhhdmUgdGhlIGF1dGhvcmlzYXRpb24gdG9rZW4gaGFuZHkgKi8KIAkJaW5zdGtleSA9IGtleV9nZXRfaW5zdGFudGlhdGlvbl9hdXRoa2V5KGtleWlkKTsKIAkJaWYgKElTX0VSUihpbnN0a2V5KSkKLQkJCXJldHVybiBQVFJfRVJSKGtleV9yZWYpOworCQkJcmV0dXJuIFBUUl9FUlIoaW5zdGtleSk7CiAJCWtleV9wdXQoaW5zdGtleSk7CiAKIAkJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShrZXlpZCwgS0VZX0xPT0tVUF9QQVJUSUFMLCAwKTsKQEAgLTEyMzYsNiArMTIzNiw3IEBACiAgKi8KIGxvbmcga2V5Y3RsX3Nlc3Npb25fdG9fcGFyZW50KHZvaWQpCiB7CisjaWZkZWYgVElGX05PVElGWV9SRVNVTUUKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lLCAqcGFyZW50OwogCWNvbnN0IHN0cnVjdCBjcmVkICpteWNyZWQsICpwY3JlZDsKIAlzdHJ1Y3QgY3JlZCAqY3JlZCwgKm9sZGNyZWQ7CkBAIC0xMzI2LDYgKzEzMjcsMTUgQEAKIGVycm9yX2tleXJpbmc6CiAJa2V5X3JlZl9wdXQoa2V5cmluZ19yKTsKIAlyZXR1cm4gcmV0OworCisjZWxzZSAvKiAhVElGX05PVElGWV9SRVNVTUUgKi8KKwkvKgorCSAqIFRvIGJlIHJlbW92ZWQgd2hlbiBUSUZfTk9USUZZX1JFU1VNRSBoYXMgYmVlbiBpbXBsZW1lbnRlZCBvbgorCSAqIG02OGsveHRlbnNhCisJICovCisjd2FybmluZyBUSUZfTk9USUZZX1JFU1VNRSBub3QgaW1wbGVtZW50ZWQKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYgLyogIVRJRl9OT1RJRllfUkVTVU1FICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L21pbl9hZGRyLmMgYi9zZWN1cml0eS9taW5fYWRkci5jCmluZGV4IGZjNDNjOWQuLmU4NmYyOTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L21pbl9hZGRyLmMKKysrIGIvc2VjdXJpdHkvbWluX2FkZHIuYwpAQCAtNDMsNyArNDMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2luaXQgaW5pdF9tbWFwX21pbl9hZGRyKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X21tYXBfbWluX2FkZHIodm9pZCkKIHsKIAl1cGRhdGVfbW1hcF9taW5fYWRkcigpOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggN2EzNzRjMi4uOWEyZWU4NCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjM2NSw3ICsyMzY1LDcgQEAKIAkJCWluaXRybGltID0gaW5pdF90YXNrLnNpZ25hbC0+cmxpbSArIGk7CiAJCQlybGltLT5ybGltX2N1ciA9IG1pbihybGltLT5ybGltX21heCwgaW5pdHJsaW0tPnJsaW1fY3VyKTsKIAkJfQotCQl1cGRhdGVfcmxpbWl0X2NwdShybGltLT5ybGltX2N1cik7CisJCXVwZGF0ZV9ybGltaXRfY3B1KGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZmlsZS5jIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwppbmRleCA4MzQ2OTM4Li45YTZjNTg4IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vZmlsZS5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9maWxlLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJ0b21veW8uaCIKICNpbmNsdWRlICJyZWFscGF0aC5oIgotI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDBcMDA0XDAwMlwwMDYiWyh4KSZPX0FDQ01PREVdKQogCiAvKgogICogdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggMTQ5N2RjZS4uNjU2ZTQ3NCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC0xNzIsMTQgKzE3MiwxNSBAQAogCXJldHVybiB2OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWFjaV9jaGFuX3dhaXRfcmVhZHkoc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1bikKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWFjaV9jaGFuX3dhaXRfcmVhZHkoc3RydWN0IGFhY2lfcnVudGltZSAqYWFjaXJ1biwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogCXUzMiB2YWw7CiAJaW50IHRpbWVvdXQgPSA1MDAwOwogCiAJZG8gewogCQl2YWwgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9TUik7Ci0JfSB3aGlsZSAodmFsICYgKFNSX1RYQnxTUl9SWEIpICYmIHRpbWVvdXQtLSk7CisJfSB3aGlsZSAodmFsICYgbWFzayAmJiB0aW1lb3V0LS0pOwogfQogCiAKQEAgLTIwOCw4ICsyMDksMTAgQEAKIAkJCXdyaXRlbCgwLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJcHRyID0gYWFjaXJ1bi0+cHRyOwogCisJCXNwaW5fbG9jaygmYWFjaXJ1bi0+bG9jayk7CisKKwkJcHRyID0gYWFjaXJ1bi0+cHRyOwogCQlkbyB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuID0gYWFjaXJ1bi0+Zmlmb3N6OwogCQkJdTMyIHZhbDsKQEAgLTIxNyw5ICsyMjAsOSBAQAogCQkJaWYgKGFhY2lydW4tPmJ5dGVzIDw9IDApIHsKIAkJCQlhYWNpcnVuLT5ieXRlcyArPSBhYWNpcnVuLT5wZXJpb2Q7CiAJCQkJYWFjaXJ1bi0+cHRyID0gcHRyOwotCQkJCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChhYWNpcnVuLT5zdWJzdHJlYW0pOwotCQkJCXNwaW5fbG9jaygmYWFjaS0+bG9jayk7CisJCQkJc3Bpbl9sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAkJCX0KIAkJCWlmICghKGFhY2lydW4tPmNyICYgQ1JfRU4pKQogCQkJCWJyZWFrOwpAQCAtMjQ1LDcgKzI0OCwxMCBAQAogCQkJCQlwdHIgPSBhYWNpcnVuLT5zdGFydDsKIAkJCX0KIAkJfSB3aGlsZSgxKTsKKwogCQlhYWNpcnVuLT5wdHIgPSBwdHI7CisKKwkJc3Bpbl91bmxvY2soJmFhY2lydW4tPmxvY2spOwogCX0KIAogCWlmIChtYXNrICYgSVNSX1VSSU5UUikgewpAQCAtMjYzLDYgKzI2OSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAorCQlzcGluX2xvY2soJmFhY2lydW4tPmxvY2spOworCiAJCXB0ciA9IGFhY2lydW4tPnB0cjsKIAkJZG8gewogCQkJdW5zaWduZWQgaW50IGxlbiA9IGFhY2lydW4tPmZpZm9zejsKQEAgLTI3MSw5ICsyNzksOSBAQAogCQkJaWYgKGFhY2lydW4tPmJ5dGVzIDw9IDApIHsKIAkJCQlhYWNpcnVuLT5ieXRlcyArPSBhYWNpcnVuLT5wZXJpb2Q7CiAJCQkJYWFjaXJ1bi0+cHRyID0gcHRyOwotCQkJCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChhYWNpcnVuLT5zdWJzdHJlYW0pOwotCQkJCXNwaW5fbG9jaygmYWFjaS0+bG9jayk7CisJCQkJc3Bpbl9sb2NrKCZhYWNpcnVuLT5sb2NrKTsKIAkJCX0KIAkJCWlmICghKGFhY2lydW4tPmNyICYgQ1JfRU4pKQogCQkJCWJyZWFrOwpAQCAtMzAxLDYgKzMwOSw4IEBACiAJCX0gd2hpbGUgKDEpOwogCiAJCWFhY2lydW4tPnB0ciA9IHB0cjsKKworCQlzcGluX3VubG9jaygmYWFjaXJ1bi0+bG9jayk7CiAJfQogfQogCkBAIC0zMTAsNyArMzIwLDYgQEAKIAl1MzIgbWFzazsKIAlpbnQgaTsKIAotCXNwaW5fbG9jaygmYWFjaS0+bG9jayk7CiAJbWFzayA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX0FMTElOVFMpOwogCWlmIChtYXNrKSB7CiAJCXUzMiBtID0gbWFzazsKQEAgLTMyMCw3ICszMjksNiBAQAogCQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZhYWNpLT5sb2NrKTsKIAogCXJldHVybiBtYXNrID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKIH0KQEAgLTMzMCw2MyArMzM4LDYgQEAKIC8qCiAgKiBBTFNBIHN1cHBvcnQuCiAgKi8KLQotc3RydWN0IGFhY2lfc3RyZWFtIHsKLQl1bnNpZ25lZCBjaGFyIGNvZGVjX2lkeDsKLQl1bnNpZ25lZCBjaGFyIHJhdGVfaWR4OwotfTsKLQotc3RhdGljIHN0cnVjdCBhYWNpX3N0cmVhbSBhYWNpX3N0cmVhbXNbXSA9IHsKLQlbQUNTVFJFQU1fRlJPTlRdID0gewotCQkuY29kZWNfaWR4CT0gMCwKLQkJLnJhdGVfaWR4CT0gQUM5N19SQVRFU19GUk9OVF9EQUMsCi0JfSwKLQlbQUNTVFJFQU1fU1VSUk9VTkRdID0gewotCQkuY29kZWNfaWR4CT0gMCwKLQkJLnJhdGVfaWR4CT0gQUM5N19SQVRFU19TVVJSX0RBQywKLQl9LAotCVtBQ1NUUkVBTV9MRkVdID0gewotCQkuY29kZWNfaWR4CT0gMCwKLQkJLnJhdGVfaWR4CT0gQUM5N19SQVRFU19MRkVfREFDLAotCX0sCi19OwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhYWNpX3JhdGVfbWFzayhzdHJ1Y3QgYWFjaSAqYWFjaSwgaW50IHN0cmVhbWlkKQotewotCXN0cnVjdCBhYWNpX3N0cmVhbSAqcyA9IGFhY2lfc3RyZWFtcyArIHN0cmVhbWlkOwotCXJldHVybiBhYWNpLT5hYzk3X2J1cy0+Y29kZWNbcy0+Y29kZWNfaWR4XS0+cmF0ZXNbcy0+cmF0ZV9pZHhdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJhdGVfbGlzdFtdID0gewotCTU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLCA0NDEwMCwKLQk0ODAwMCwgNjQwMDAsIDg4MjAwLCA5NjAwMCwgMTc2NDAwLCAxOTIwMDAKLX07Ci0KLS8qCi0gKiBEb3VibGUtcmF0ZSBydWxlOiB3ZSBjYW4gc3VwcG9ydCBkb3VibGUgcmF0ZSBpZmYgY2hhbm5lbHMgPT0gMgotICogICh1bmltcGxlbWVudGVkKQotICovCi1zdGF0aWMgaW50Ci1hYWNpX3J1bGVfcmF0ZV9ieV9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnAsIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCi17Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBydWxlLT5wcml2YXRlOwotCXVuc2lnbmVkIGludCByYXRlX21hc2sgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzU1MTI7Ci0Jc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7Ci0KLQlzd2l0Y2ggKGMtPm1heCkgewotCWNhc2UgNjoKLQkJcmF0ZV9tYXNrICY9IGFhY2lfcmF0ZV9tYXNrKGFhY2ksIEFDU1RSRUFNX0xGRSk7Ci0JY2FzZSA0OgotCQlyYXRlX21hc2sgJj0gYWFjaV9yYXRlX21hc2soYWFjaSwgQUNTVFJFQU1fU1VSUk9VTkQpOwotCWNhc2UgMjoKLQkJcmF0ZV9tYXNrICY9IGFhY2lfcmF0ZV9tYXNrKGFhY2ksIEFDU1RSRUFNX0ZST05UKTsKLQl9Ci0KLQlyZXR1cm4gc25kX2ludGVydmFsX2xpc3QoaHdfcGFyYW1faW50ZXJ2YWwocCwgcnVsZS0+dmFyKSwKLQkJCQkgQVJSQVlfU0laRShyYXRlX2xpc3QpLCByYXRlX2xpc3QsCi0JCQkJIHJhdGVfbWFzayk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhYWNpX2h3X2luZm8gPSB7CiAJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX01NQVAgfAogCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CkBAIC00MDAsMTAgKzM1MSw3IEBACiAJICovCiAJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCiAKLQkvKiBzaG91bGQgdGhpcyBiZSBjb250aW51b3VzIG9yIGtub3Q/ICovCi0JLnJhdGVzCQkJPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkucmF0ZV9taW4JCT0gNDAwMCwKKwkvKiByYXRlcyBhcmUgc2V0dXAgZnJvbSB0aGUgQUMnOTcgY29kZWMgKi8KIAkuY2hhbm5lbHNfbWluCQk9IDIsCiAJLmNoYW5uZWxzX21heAkJPSA2LAogCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiAxMDI0LApAQCAtNDIzLDYgKzM3MSwxMiBAQAogCWFhY2lydW4tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhYWNpcnVuOwogCXJ1bnRpbWUtPmh3ID0gYWFjaV9od19pbmZvOworCXJ1bnRpbWUtPmh3LnJhdGVzID0gYWFjaXJ1bi0+cGNtLT5yYXRlczsKKwlzbmRfcGNtX2xpbWl0X2h3X3JhdGVzKHJ1bnRpbWUpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKKwkgICAgYWFjaXJ1bi0+cGNtLT5yWzFdLnNsb3RzKQorCQlzbmRfYWM5N19wY21fZG91YmxlX3JhdGVfcnVsZXMocnVudGltZSk7CiAKIAkvKgogCSAqIEZJWE1FOiBBTFNBIHNwZWNpZmllcyBmaWZvX3NpemUgaW4gYnl0ZXMuICBJZiB3ZSdyZSBpbiBub3JtYWwKQEAgLTQzMywxNyArMzg3LDYgQEAKIAkgKi8KIAlydW50aW1lLT5ody5maWZvX3NpemUgPSBhYWNpLT5maWZvc2l6ZSAqIDI7CiAKLQkvKgotCSAqIEFkZCBydWxlIGRlc2NyaWJpbmcgaGFyZHdhcmUgcmF0ZSBkZXBlbmRlbmN5Ci0JICogb24gdGhlIG51bWJlciBvZiBjaGFubmVscy4KLQkgKi8KLQlyZXQgPSBzbmRfcGNtX2h3X3J1bGVfYWRkKHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAotCQkJCSAgYWFjaV9ydWxlX3JhdGVfYnlfY2hhbm5lbHMsIGFhY2ksCi0JCQkJICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCi0JCQkJICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgLTEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCiAJcmV0ID0gcmVxdWVzdF9pcnEoYWFjaS0+ZGV2LT5pcnFbMF0sIGFhY2lfaXJxLCBJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVELAogCQkJICBEUklWRVJfTkFNRSwgYWFjaSk7CiAJaWYgKHJldCkKQEAgLTQ5OCw2ICs0NDEsNyBAQAogCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJaW50IGVycjsKKwlzdHJ1Y3QgYWFjaSAqYWFjaSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCiAJYWFjaV9wY21faHdfZnJlZShzdWJzdHJlYW0pOwogCWlmIChhYWNpcnVuLT5wY21fb3BlbikgewpAQCAtNTA3LDE4ICs0NTEsMjIgQEAKIAogCWVyciA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCiAJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0OworCWlmIChlcnIgPj0gMCkgeworCQl1bnNpZ25lZCBpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJCWludCBkYmwgPSByYXRlID4gNDgwMDA7CiAKLQllcnIgPSBzbmRfYWM5N19wY21fb3BlbihhYWNpcnVuLT5wY20sIHBhcmFtc19yYXRlKHBhcmFtcyksCi0JCQkJcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyksCi0JCQkJYWFjaXJ1bi0+cGNtLT5yWzBdLnNsb3RzKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwkJZXJyID0gc25kX2FjOTdfcGNtX29wZW4oYWFjaXJ1bi0+cGNtLCByYXRlLAorCQkJCQlwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSwKKwkJCQkJYWFjaXJ1bi0+cGNtLT5yW2RibF0uc2xvdHMpOwogCi0JYWFjaXJ1bi0+cGNtX29wZW4gPSAxOworCQlhYWNpcnVuLT5wY21fb3BlbiA9IGVyciA9PSAwOworCQlhYWNpcnVuLT5jciA9IENSX0ZFTiB8IENSX0NPTVBBQ1QgfCBDUl9TWjE2OworCQlhYWNpcnVuLT5maWZvc3ogPSBhYWNpLT5maWZvc2l6ZSAqIDQ7CiAKLSBvdXQ6CisJCWlmIChhYWNpcnVuLT5jciAmIENSX0NPTVBBQ1QpCisJCQlhYWNpcnVuLT5maWZvc3ogPj49IDE7CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTI3LDcgKzQ3NSw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCi0JYWFjaXJ1bi0+c3RhcnQJPSAodm9pZCAqKXJ1bnRpbWUtPmRtYV9hcmVhOworCWFhY2lydW4tPnN0YXJ0CT0gcnVudGltZS0+ZG1hX2FyZWE7CiAJYWFjaXJ1bi0+ZW5kCT0gYWFjaXJ1bi0+c3RhcnQgKyBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAlhYWNpcnVuLT5wdHIJPSBhYWNpcnVuLT5zdGFydDsKIAlhYWNpcnVuLT5wZXJpb2QJPQpAQCAtNjEzLDcgKzU2MSw2IEBACiBzdGF0aWMgaW50IGFhY2lfcGNtX3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CiAJaW50IHJldDsKQEAgLTYyNywxNCArNTc0LDkgQEAKIAkgKiBFbmFibGUgRklGTywgY29tcGFjdCBtb2RlLCAxNiBiaXRzIHBlciBzYW1wbGUuCiAJICogRklYTUU6IGRvdWJsZSByYXRlIHNsb3RzPwogCSAqLwotCWlmIChyZXQgPj0gMCkgewotCQlhYWNpcnVuLT5jciA9IENSX0ZFTiB8IENSX0NPTVBBQ1QgfCBDUl9TWjE2OworCWlmIChyZXQgPj0gMCkKIAkJYWFjaXJ1bi0+Y3IgfD0gY2hhbm5lbHNfdG9fdHhtYXNrW2NoYW5uZWxzXTsKIAotCQlhYWNpcnVuLT5maWZvc3oJPSBhYWNpLT5maWZvc2l6ZSAqIDQ7Ci0JCWlmIChhYWNpcnVuLT5jciAmIENSX0NPTVBBQ1QpCi0JCQlhYWNpcnVuLT5maWZvc3ogPj49IDE7Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY0Niw3ICs1ODgsNyBAQAogCWllICY9IH4oSUVfVVJJRXxJRV9UWElFKTsKIAl3cml0ZWwoaWUsIGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAlhYWNpcnVuLT5jciAmPSB+Q1JfRU47Ci0JYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1bik7CisJYWFjaV9jaGFuX3dhaXRfcmVhZHkoYWFjaXJ1biwgU1JfVFhCKTsKIAl3cml0ZWwoYWFjaXJ1bi0+Y3IsIGFhY2lydW4tPmJhc2UgKyBBQUNJX1RYQ1IpOwogfQogCkBAIC02NTQsNyArNTk2LDcgQEAKIHsKIAl1MzIgaWU7CiAKLQlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuKTsKKwlhYWNpX2NoYW5fd2FpdF9yZWFkeShhYWNpcnVuLCBTUl9UWEIpOwogCWFhY2lydW4tPmNyIHw9IENSX0VOOwogCiAJaWUgPSByZWFkbChhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CkBAIC02NjUsMTIgKzYwNywxMiBAQAogCiBzdGF0aWMgaW50IGFhY2lfcGNtX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKKwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAkJYWFjaV9wY21fcGxheWJhY2tfc3RhcnQoYWFjaXJ1bik7CkBAIC02OTcsNyArNjM5LDggQEAKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpcnVuLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzE2LDIzICs2NTksMTQgQEAKIHN0YXRpYyBpbnQgYWFjaV9wY21fY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAogCXJldCA9IGFhY2lfcGNtX2h3X3BhcmFtcyhzdWJzdHJlYW0sIGFhY2lydW4sIHBhcmFtcyk7Ci0KLQlpZiAocmV0ID49IDApIHsKLQkJYWFjaXJ1bi0+Y3IgPSBDUl9GRU4gfCBDUl9DT01QQUNUIHwgQ1JfU1oxNjsKLQorCWlmIChyZXQgPj0gMCkKIAkJLyogTGluZSBpbiByZWNvcmQ6IHNsb3QgMyBhbmQgNCAqLwogCQlhYWNpcnVuLT5jciB8PSBDUl9TTDMgfCBDUl9TTDQ7CiAKLQkJYWFjaXJ1bi0+Zmlmb3N6ID0gYWFjaS0+Zmlmb3NpemUgKiA0OwotCi0JCWlmIChhYWNpcnVuLT5jciAmIENSX0NPTVBBQ1QpCi0JCQlhYWNpcnVuLT5maWZvc3ogPj49IDE7Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc0MCw3ICs2NzQsNyBAQAogewogCXUzMiBpZTsKIAotCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4sIFNSX1JYQik7CiAKIAlpZSA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAlpZSAmPSB+KElFX09SSUUgfCBJRV9SWElFKTsKQEAgLTc1NSw3ICs2ODksNyBAQAogewogCXUzMiBpZTsKIAotCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4pOworCWFhY2lfY2hhbl93YWl0X3JlYWR5KGFhY2lydW4sIFNSX1JYQik7CiAKICNpZmRlZiBERUJVRwogCS8qIFJYIFRpbWVvdXQgdmFsdWU6IGJpdHMgMjg6MTcgaW4gUlhDUiAqLwpAQCAtNzcyLDEyICs3MDYsMTEgQEAKIAogc3RhdGljIGludCBhYWNpX3BjbV9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7Ci0Jc3RydWN0IGFhY2kgKmFhY2kgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lICphYWNpcnVuID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhYWNpLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFhY2lydW4tPmxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTgwNiw3ICs3MzksNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFhY2ktPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhYWNpcnVuLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODg5LDYgKzgyMiwxMiBAQAogCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fU1JJR0hUKSB8CiAJCQkJCSAgKDEgPDwgQUM5N19TTE9UX0xGRSksCiAJCQl9LAorCQkJWzFdID0geworCQkJCS5zbG90cwk9ICgxIDw8IEFDOTdfU0xPVF9QQ01fTEVGVCkgfAorCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fUklHSFQpIHwKKwkJCQkJICAoMSA8PCBBQzk3X1NMT1RfUENNX0xFRlRfMCkgfAorCQkJCQkgICgxIDw8IEFDOTdfU0xPVF9QQ01fUklHSFRfMCksCisJCQl9LAogCQl9LAogCX0sCiAJWzFdID0gewkvKiBQQ00gaW4gKi8KQEAgLTEwMDEsNyArOTQwLDYgQEAKIAogCWFhY2kgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJbXV0ZXhfaW5pdCgmYWFjaS0+YWM5N19zZW0pOwotCXNwaW5fbG9ja19pbml0KCZhYWNpLT5sb2NrKTsKIAlhYWNpLT5jYXJkID0gY2FyZDsKIAlhYWNpLT5kZXYgPSBkZXY7CiAKQEAgLTEwMjgsNyArOTY2LDcgQEAKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJmFhY2lfcGxheWJhY2tfb3BzKTsKIAkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmYWFjaV9jYXB0dXJlX29wcyk7CiAJCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCi0JCQkJCQkgICAgICBOVUxMLCAwLCA2NCAqIDEwNCk7CisJCQkJCQkgICAgICBOVUxMLCAwLCA2NCAqIDEwMjQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMDg4LDEyICsxMDI2LDE0IEBACiAJLyoKIAkgKiBQbGF5YmFjayB1c2VzIEFBQ0kgY2hhbm5lbCAwCiAJICovCisJc3Bpbl9sb2NrX2luaXQoJmFhY2ktPnBsYXliYWNrLmxvY2spOwogCWFhY2ktPnBsYXliYWNrLmJhc2UgPSBhYWNpLT5iYXNlICsgQUFDSV9DU0NIMTsKIAlhYWNpLT5wbGF5YmFjay5maWZvID0gYWFjaS0+YmFzZSArIEFBQ0lfRFIxOwogCiAJLyoKIAkgKiBDYXB0dXJlIHVzZXMgQUFDSSBjaGFubmVsIDAKIAkgKi8KKwlzcGluX2xvY2tfaW5pdCgmYWFjaS0+Y2FwdHVyZS5sb2NrKTsKIAlhYWNpLT5jYXB0dXJlLmJhc2UgPSBhYWNpLT5iYXNlICsgQUFDSV9DU0NIMTsKIAlhYWNpLT5jYXB0dXJlLmZpZm8gPSBhYWNpLT5iYXNlICsgQUFDSV9EUjE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmggYi9zb3VuZC9hcm0vYWFjaS5oCmluZGV4IDkyNGY2OWMuLjZhNGEyZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmgKKysrIGIvc291bmQvYXJtL2FhY2kuaApAQCAtMjAyLDYgKzIwMiw3IEBACiBzdHJ1Y3QgYWFjaV9ydW50aW1lIHsKIAl2b2lkCQkJX19pb21lbSAqYmFzZTsKIAl2b2lkCQkJX19pb21lbSAqZmlmbzsKKwlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IGFjOTdfcGNtCQkqcGNtOwogCWludAkJCXBjbV9vcGVuOwpAQCAtMjMyLDcgKzIzMyw2IEBACiAJc3RydWN0IHNuZF9hYzk3CQkqYWM5NzsKIAogCXUzMgkJCW1haW5jcjsKLQlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IGFhY2lfcnVudGltZQlwbGF5YmFjazsKIAlzdHJ1Y3QgYWFjaV9ydW50aW1lCWNhcHR1cmU7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL0tjb25maWcgYi9zb3VuZC9jb3JlL0tjb25maWcKaW5kZXggYzE1NjgyYS4uNDc1NDU1YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKyBiL3NvdW5kL2NvcmUvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIGNvbmZpZyBTTkRfUENNCiAJdHJpc3RhdGUKIAlzZWxlY3QgU05EX1RJTUVSCisJc2VsZWN0IEdDRAogCiBjb25maWcgU05EX0hXREVQCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggMzBmNDEwOC4uYTI3NTQ1YjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC03NTgsNyArNzU4LDcgQEAKIAkJaW50IGRpZmY7CiAJCWlmIChxID09IDApCiAJCQlxID0gMTsKLQkJZGVuID0gZGl2X2Rvd24obnVtLCBxKTsKKwkJZGVuID0gZGl2X3VwKG51bSwgcSk7CiAJCWlmIChkZW4gPCByYXRzW2tdLmRlbl9taW4pCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbiA+IHJhdHNba10uZGVuX21heCkKQEAgLTc5NCw3ICs3OTQsNyBAQAogCQkJaS0+ZW1wdHkgPSAxOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZGVuID0gZGl2X3VwKG51bSwgcSk7CisJCWRlbiA9IGRpdl9kb3duKG51bSwgcSk7CiAJCWlmIChkZW4gPiByYXRzW2tdLmRlbl9tYXgpCiAJCQljb250aW51ZTsKIAkJaWYgKGRlbiA8IHJhdHNba10uZGVuX21pbikKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggMjlhYjQ2YTEuLjI1YjA2NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0xOTE4LDEzICsxOTE4LDEzIEBACiAKIAllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAogCQkJCQkgICBody0+cmF0ZV9taW4sIGh3LT5yYXRlX21heCk7Ci0JIGlmIChlcnIgPCAwKQotCQkgcmV0dXJuIGVycjsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywKIAkJCQkJICAgaHctPnBlcmlvZF9ieXRlc19taW4sIGh3LT5wZXJpb2RfYnl0ZXNfbWF4KTsKLQkgaWYgKGVyciA8IDApCi0JCSByZXR1cm4gZXJyOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUywKIAkJCQkJICAgaHctPnBlcmlvZHNfbWluLCBody0+cGVyaW9kc19tYXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fdGltZXIuYyBiL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKaW5kZXggY2E4MDY4Yi4uYjAxZDk0OCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9nY2QuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvdGltZXIuaD4KQEAgLTI4LDIyICsyOSw2IEBACiAgKiAgVGltZXIgZnVuY3Rpb25zCiAgKi8KIAotLyogR3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdjZCh1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYikKLXsKLQl1bnNpZ25lZCBsb25nIHI7Ci0JaWYgKGEgPCBiKSB7Ci0JCXIgPSBhOwotCQlhID0gYjsKLQkJYiA9IHI7Ci0JfQotCXdoaWxlICgociA9IGEgJSBiKSAhPSAwKSB7Ci0JCWEgPSBiOwotCQliID0gcjsKLQl9Ci0JcmV0dXJuIGI7Ci19Ci0KIHZvaWQgc25kX3BjbV90aW1lcl9yZXNvbHV0aW9uX2NoYW5nZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAl1bnNpZ25lZCBsb25nIHJhdGUsIG11bHQsIGZzaXplLCBsLCBwb3N0OwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwppbmRleCBjYjlhYTRjLi40YmU1NjJiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYworKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX21pZGkuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJZXJyID0gc25kX3Jhd21pZGlfbmV3KGNhcmQsICJNU05ELU1JREkiLCBkZXZpY2UsIDEsIDEsICZybWlkaSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JbXB1ID0ga2NhbGxvYygxLCBzaXplb2YoKm1wdSksIEdGUF9LRVJORUwpOworCW1wdSA9IGt6YWxsb2Moc2l6ZW9mKCptcHUpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXB1ID09IE5VTEwpIHsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIHJtaWRpKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvZW11ODAwMC5jIGIvc291bmQvaXNhL3NiL2VtdTgwMDAuYwppbmRleCA5NjY3OGQ1Li4wYzQwOTUxIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCisrKyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKQEAgLTM3NywxMiArMzc3LDEzIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIHNpemVfZHJhbShzdHJ1Y3Qgc25kX2VtdTgwMDAgKmVtdSkKIHsKLQlpbnQgaSwgc2l6ZTsKKwlpbnQgaSwgc2l6ZSwgZGV0ZWN0ZWRfc2l6ZTsKIAogCWlmIChlbXUtPmRyYW1fY2hlY2tlZCkKIAkJcmV0dXJuOwogCiAJc2l6ZSA9IDA7CisJZGV0ZWN0ZWRfc2l6ZSA9IDA7CiAKIAkvKiB3cml0ZSBvdXQgYSBtYWdpYyBudW1iZXIgKi8KIAlzbmRfZW11ODAwMF9kbWFfY2hhbihlbXUsIDAsIEVNVTgwMDBfUkFNX1dSSVRFKTsKQEAgLTQxNCw3ICs0MTUsOSBAQAogCQkvKnNuZF9lbXU4MDAwX3JlYWRfd2FpdChlbXUpOyovCiAJCUVNVTgwMDBfU01MRF9SRUFEKGVtdSk7IC8qIGRpc2NhcmQgc3RhbGUgZGF0YSAgKi8KIAkJaWYgKEVNVTgwMDBfU01MRF9SRUFEKGVtdSkgIT0gVU5JUVVFX0lEMikKLQkJCWJyZWFrOyAvKiB3ZSBtdXN0IGhhdmUgd3JhcHBlZCBhcm91bmQgKi8KKwkJCWJyZWFrOyAvKiBubyBtZW1vcnkgYXQgdGhpcyBhZGRyZXNzICovCisKKwkJZGV0ZWN0ZWRfc2l6ZSA9IHNpemU7CiAKIAkJc25kX2VtdTgwMDBfcmVhZF93YWl0KGVtdSk7CiAKQEAgLTQ0Miw5ICs0NDUsOSBAQAogCXNuZF9lbXU4MDAwX2RtYV9jaGFuKGVtdSwgMSwgRU1VODAwMF9SQU1fQ0xPU0UpOwogCiAJc25kX3ByaW50ZGQoIkVNVTgwMDAgWzB4JWx4XTogJWQgS2Igb24tYm9hcmQgbWVtb3J5IGRldGVjdGVkXG4iLAotCQkgICAgZW11LT5wb3J0MSwgc2l6ZS8xMDI0KTsKKwkJICAgIGVtdS0+cG9ydDEsIGRldGVjdGVkX3NpemUvMTAyNCk7CiAKLQllbXUtPm1lbV9zaXplID0gc2l6ZTsKKwllbXUtPm1lbV9zaXplID0gZGV0ZWN0ZWRfc2l6ZTsKIAllbXUtPmRyYW1fY2hlY2tlZCA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKaW5kZXggODY5MWY0Yy4uZjFkOWQxNiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKKysrIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCS8qIGFsbG9jIHZpcnR1YWwgJ2RtYScgYXJlYSAqLwogCWlmIChydW50aW1lLT5kbWFfYXJlYSkKIAkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfdXNlcihzaXplKTsKIAlpZiAocnVudGltZS0+ZG1hX2FyZWEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kZXZfdGFibGUuYyBiL3NvdW5kL29zcy9kZXZfdGFibGUuYwppbmRleCAwODI3NGM5Li43MjdiZGI5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZGV2X3RhYmxlLmMKKysrIGIvc291bmQvb3NzL2Rldl90YWJsZS5jCkBAIC02NywxNCArNjcsMTUgQEAKIAkJcmV0dXJuIC0oRUJVU1kpOwogCX0KIAlkID0gKHN0cnVjdCBhdWRpb19kcml2ZXIgKikgKHNvdW5kX21lbV9ibG9ja3Nbc291bmRfbmJsb2Nrc10gPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaW9fZHJpdmVyKSkpOwotCi0JaWYgKHNvdW5kX25ibG9ja3MgPCAxMDI0KQotCQlzb3VuZF9uYmxvY2tzKys7CisJc291bmRfbmJsb2NrcysrOworCWlmIChzb3VuZF9uYmxvY2tzID49IE1BWF9NRU1fQkxPQ0tTKQorCQlzb3VuZF9uYmxvY2tzID0gTUFYX01FTV9CTE9DS1MgLSAxOwogCiAJb3AgPSAoc3RydWN0IGF1ZGlvX29wZXJhdGlvbnMgKikgKHNvdW5kX21lbV9ibG9ja3Nbc291bmRfbmJsb2Nrc10gPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaW9fb3BlcmF0aW9ucykpKTsKKwlzb3VuZF9uYmxvY2tzKys7CisJaWYgKHNvdW5kX25ibG9ja3MgPj0gTUFYX01FTV9CTE9DS1MpCisJCXNvdW5kX25ibG9ja3MgPSBNQVhfTUVNX0JMT0NLUyAtIDE7CiAKLQlpZiAoc291bmRfbmJsb2NrcyA8IDEwMjQpCi0JCXNvdW5kX25ibG9ja3MrKzsKIAlpZiAoZCA9PSBOVUxMIHx8IG9wID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTb3VuZDogQ2FuJ3QgYWxsb2NhdGUgZHJpdmVyIGZvciAoJXMpXG4iLCBuYW1lKTsKIAkJc291bmRfdW5sb2FkX2F1ZGlvZGV2KG51bSk7CkBAIC0xMjgsOSArMTI5LDEwIEBACiAJICAgdW50aWwgeW91IHVubG9hZCBzb3VuZCEgKi8KIAkgICAKIAlvcCA9IChzdHJ1Y3QgbWl4ZXJfb3BlcmF0aW9ucyAqKSAoc291bmRfbWVtX2Jsb2Nrc1tzb3VuZF9uYmxvY2tzXSA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaXhlcl9vcGVyYXRpb25zKSkpOworCXNvdW5kX25ibG9ja3MrKzsKKwlpZiAoc291bmRfbmJsb2NrcyA+PSBNQVhfTUVNX0JMT0NLUykKKwkJc291bmRfbmJsb2NrcyA9IE1BWF9NRU1fQkxPQ0tTIC0gMTsKIAotCWlmIChzb3VuZF9uYmxvY2tzIDwgMTAyNCkKLQkJc291bmRfbmJsb2NrcysrOwogCWlmIChvcCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU291bmQ6IENhbid0IGFsbG9jYXRlIG1peGVyIGRyaXZlciBmb3IgKCVzKVxuIiwgbmFtZSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Bzcy5jIGIvc291bmQvb3NzL3Bzcy5jCmluZGV4IDgzZjVlZTIuLmUxOWRkNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wc3MuYworKysgYi9zb3VuZC9vc3MvcHNzLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgICBpLCBsaW1pdCA9IGppZmZpZXMgKyBIWi8xMDsKIAogCW91dHcoMHgyMDAwLCBSRUcoUFNTX0NPTlRST0wpKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgKGxpbWl0LWppZmZpZXMgPj0gMCk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJaW53KFJFRyhQU1NfQ09OVFJPTCkpOwogCW91dHcoMHgwMDAwLCBSRUcoUFNTX0NPTlRST0wpKTsKIAlyZXR1cm4gMTsKQEAgLTM2OSwxMSArMzY5LDExIEBACiAJCW91dHcoMCwgUkVHKFBTU19EQVRBKSk7CiAKIAkJbGltaXQgPSBqaWZmaWVzICsgSFovMTA7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiAobGltaXQgLSBqaWZmaWVzID49IDApOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiB0aW1lX2FmdGVyX2VxKGxpbWl0LCBqaWZmaWVzKTsgaSsrKQogCQkJdmFsID0gaW53KFJFRyhQU1NfU1RBVFVTKSk7CiAKIAkJbGltaXQgPSBqaWZmaWVzICsgSFovMTA7Ci0JCWZvciAoaSA9IDA7IGkgPCAzMjc2OCAmJiAobGltaXQtamlmZmllcyA+PSAwKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMzI3NjggJiYgdGltZV9hZnRlcl9lcShsaW1pdCwgamlmZmllcyk7IGkrKykKIAkJewogCQkJdmFsID0gaW53KFJFRyhQU1NfU1RBVFVTKSk7CiAJCQlpZiAodmFsICYgMHg0MDAwKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NvdW5kX2NvbmZpZy5oIGIvc291bmQvb3NzL3NvdW5kX2NvbmZpZy5oCmluZGV4IDU1MjcxZmIuLjlkMzVjNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb3VuZF9jb25maWcuaAorKysgYi9zb3VuZC9vc3Mvc291bmRfY29uZmlnLmgKQEAgLTE0Miw0ICsxNDIsNiBAQAogI2RlZmluZSBUSU1FUl9BUk1FRAkxMjEyMzQKICNkZWZpbmUgVElNRVJfTk9UX0FSTUVECTEKIAorI2RlZmluZSBNQVhfTUVNX0JMT0NLUyAxMDI0CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NvdW5kY2FyZC5jIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCmluZGV4IDYxYWFlZGEuLmM2MjUzMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYworKysgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKQEAgLTU2LDcgKzU2LDcgQEAKIC8qCiAgKiBUYWJsZSBmb3IgcGVybWFuZW50bHkgYWxsb2NhdGVkIG1lbW9yeSAodXNlZCB3aGVuIHVubG9hZGluZyB0aGUgbW9kdWxlKQogICovCi12b2lkICogICAgICAgICAgc291bmRfbWVtX2Jsb2Nrc1sxMDI0XTsKK3ZvaWQgKiAgICAgICAgICBzb3VuZF9tZW1fYmxvY2tzW01BWF9NRU1fQkxPQ0tTXTsKIGludCAgICAgICAgICAgICBzb3VuZF9uYmxvY2tzID0gMDsKIAogLyogUGVyc2lzdGVudCBETUEgYnVmZmVycyAqLwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJCQkJICAgICAgTlVMTCwgIiVzJWQiLCBkZXZfbGlzdFtpXS5uYW1lLCBqKTsKIAl9CiAKLQlpZiAoc291bmRfbmJsb2NrcyA+PSAxMDI0KQorCWlmIChzb3VuZF9uYmxvY2tzID49IE1BWF9NRU1fQkxPQ0tTIC0gMSkKIAkJcHJpbnRrKEtFUk5fRVJSICJTb3VuZCB3YXJuaW5nOiBEZWFsbG9jYXRpb24gdGFibGUgd2FzIHRvbyBzbWFsbC5cbiIpOwogCQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IGMxMTkyMDYuLmE3NjMwZTllIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCkBAIC04Myw2ICs4Myw3IEBACiB7IDB4NGU1MzQzMDAsIDB4ZmZmZmZmMDAsICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIiwgTlVMTCwgTlVMTCB9LAogeyAweDUwNTM0MzAwLCAweGZmZmZmZjAwLCAiUGhpbGlwcyIsCQlOVUxMLAlOVUxMIH0sCiB7IDB4NTM0OTRjMDAsIDB4ZmZmZmZmMDAsICJTaWxpY29uIExhYm9yYXRvcnkiLAlOVUxMLAlOVUxMIH0sCit7IDB4NTM1NDRkMDAsIDB4ZmZmZmZmMDAsICJTVE1pY3JvZWxlY3Ryb25pY3MiLAlOVUxMLAlOVUxMIH0sCiB7IDB4NTQ1MjQxMDAsIDB4ZmZmZmZmMDAsICJUcmlUZWNoIiwJCU5VTEwsCU5VTEwgfSwKIHsgMHg1NDU4NGUwMCwgMHhmZmZmZmYwMCwgIlRleGFzIEluc3RydW1lbnRzIiwJTlVMTCwJTlVMTCB9LAogeyAweDU2NDk0MTAwLCAweGZmZmZmZjAwLCAiVklBIFRlY2hub2xvZ2llcyIsICAgTlVMTCwJTlVMTCB9LApAQCAtMTYxLDYgKzE2Miw3IEBACiB7IDB4NGU1MzQzNTAsIDB4ZmZmZmZmZmYsICJMTTQ1NTAiLAkJcGF0Y2hfbG00NTUwLCAgCU5VTEwgfSwgLy8gdm9sdW1lIHdyYXAgZml4IAogeyAweDUwNTM0MzA0LCAweGZmZmZmZmZmLCAiVUNCMTQwMCIsCQlwYXRjaF91Y2IxNDAwLAlOVUxMIH0sCiB7IDB4NTM0OTRjMjAsIDB4ZmZmZmZmZTAsICJTaTMwMzYsOCIsCQltcGF0Y2hfc2kzMDM2LAltcGF0Y2hfc2kzMDM2LCBBQzk3X01PREVNX1BBVENIIH0sCit7IDB4NTM1NDRkMDIsIDB4ZmZmZmZmZmYsICJTVDc1OTciLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg1NDUyNDEwMiwgMHhmZmZmZmZmZiwgIlRSMjgwMjIiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg1NDUyNDEwMywgMHhmZmZmZmZmZiwgIlRSMjgwMjMiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg1NDUyNDEwNiwgMHhmZmZmZmZmZiwgIlRSMjgwMjYiLAkJTlVMTCwJCU5VTEwgfSwKQEAgLTIxMyw2ICsyMTUsMTQgQEAKIHsKIAkvKiBmaWx0ZXIgc29tZSByZWdpc3RlcnMgZm9yIGJ1Z2d5IGNvZGVjcyAqLwogCXN3aXRjaCAoYWM5Ny0+aWQpIHsKKwljYXNlIEFDOTdfSURfU1RfQUM5N19JRDQ6CisJCWlmIChyZWcgPT0gMHgwOCkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFDOTdfSURfU1Q3NTk3OgorCQlpZiAocmVnID09IDB4MjIgfHwgcmVnID09IDB4N2EpCisJCQlyZXR1cm4gMTsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBBQzk3X0lEX0FLNDU0MDoKIAljYXNlIEFDOTdfSURfQUs0NTQyOgogCQlpZiAocmVnIDw9IDB4MWMgfHwgcmVnID09IDB4MjAgfHwgcmVnID09IDB4MjYgfHwgcmVnID49IDB4N2MpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2lkLmggYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2lkLmgKaW5kZXggYzEyOTQ5Mi4uZDYwMzE0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19pZC5oCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfaWQuaApAQCAtNjIsMyArNjIsNSBAQAogI2RlZmluZSBBQzk3X0lEX0NNOTc2MV83OAkweDQzNGQ0OTc4CiAjZGVmaW5lIEFDOTdfSURfQ005NzYxXzgyCTB4NDM0ZDQ5ODIKICNkZWZpbmUgQUM5N19JRF9DTTk3NjFfODMJMHg0MzRkNDk4MworI2RlZmluZSBBQzk3X0lEX1NUNzU5NwkJMHg1MzU0NGQwMgorI2RlZmluZSBBQzk3X0lEX1NUX0FDOTdfSUQ0CTB4NTM1NDRkMDQKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCAxMzljZjNiLi5kOTI2NmJhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC0xODcwLDYgKzE4NzAsNyBAQAogCTB4MTAxNDA1NTQsIC8qIFRoaW5rcGFkIFQ0MnAvUjUwcCAqLwogCTB4MTAxNDA1NjcsIC8qIFRoaW5rcGFkIFQ0M3AgMjY2OC1HN1UgKi8KIAkweDEwMTQwNTgxLCAvKiBUaGlua3BhZCBYNDEtMjUyNyAqLworCTB4MTAyODAxNjAsIC8qIERlbGwgRGltZW5zaW9uIDI0MDAgKi8KIAkweDEwNDM4MGIwLCAvKiBBc3VzIEE3VjhYLU1YICovCiAJMHgxMTc5MDI0MSwgLyogVG9zaGliYSBTYXRlbGxpdGUgQS0xNSBTMTI3ICovCiAJMHgxNDRkYzAxYSwgLyogU2Ftc3VuZyBOUC1YMjBDMDA0L1NFRyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cC5jIGIvc291bmQvcGNpL2F0aWl4cC5jCmluZGV4IGQ2NzUyZGYuLjQyYjRmYmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHAuYworKysgYi9zb3VuZC9wY2kvYXRpaXhwLmMKQEAgLTI5Nyw2ICsyOTcsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9hdGlpeHBfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGF0aWl4cF9xdWlya3NbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjODEsICJGb3hjb25uIFJDNDEwN01BLVJTMiIsIDApLAogCVNORF9QQ0lfUVVJUksoMHgxNWJkLCAweDMxMDAsICJERkkgUlM0ODIiLCAwKSwKIAl7IH0gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwppbmRleCA1ZmUzNGE4Li5lNDU4MWE0MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYwpAQCAtNDIsNyArNDIsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBnZW5lcmF0ZSB0b25lICovCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgYmVlcC0+bmlkLCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGJlZXAtPm5pZCwgMCwKIAkJCUFDX1ZFUkJfU0VUX0JFRVBfQ09OVFJPTCwgYmVlcC0+dG9uZSk7CiB9CiAKQEAgLTExOSw3ICsxMTksNyBAQAogCWJlZXAtPmRldiA9IE5VTEw7CiAJY2FuY2VsX3dvcmtfc3luYygmYmVlcC0+YmVlcF93b3JrKTsKIAkvKiB0dXJuIG9mZiBiZWVwIGZvciBzdXJlICovCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShiZWVwLT5jb2RlYywgYmVlcC0+bmlkLCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoYmVlcC0+Y29kZWMsIGJlZXAtPm5pZCwgMCwKIAkJCQkgIEFDX1ZFUkJfU0VUX0JFRVBfQ09OVFJPTCwgMCk7CiB9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQliZWVwLT5lbmFibGVkID0gZW5hYmxlOwogCQlpZiAoIWVuYWJsZSkgewogCQkJLyogdHVybiBvZmYgYmVlcCAqLwotCQkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShiZWVwLT5jb2RlYywgYmVlcC0+bmlkLCAwLAorCQkJc25kX2hkYV9jb2RlY193cml0ZShiZWVwLT5jb2RlYywgYmVlcC0+bmlkLCAwLAogCQkJCQkJICBBQ19WRVJCX1NFVF9CRUVQX0NPTlRST0wsIDApOwogCQl9CiAJCWlmIChiZWVwLT5tb2RlID09IEhEQV9CRUVQX01PREVfU1dSRUcpIHsKQEAgLTIzOSw4ICsyMzksMTIgQEAKIAltdXRleF9pbml0KCZiZWVwLT5tdXRleCk7CiAKIAlpZiAoYmVlcC0+bW9kZSA9PSBIREFfQkVFUF9NT0RFX09OKSB7Ci0JCWJlZXAtPmVuYWJsZWQgPSAxOwotCQlzbmRfaGRhX2RvX3JlZ2lzdGVyKCZiZWVwLT5yZWdpc3Rlcl93b3JrKTsKKwkJaW50IGVyciA9IHNuZF9oZGFfZG9fYXR0YWNoKGJlZXApOworCQlpZiAoZXJyIDwgMCkgeworCQkJa2ZyZWUoYmVlcCk7CisJCQljb2RlYy0+YmVlcCA9IE5VTEw7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNTMsNyArMjU3LDcgQEAKIAlpZiAoYmVlcCkgewogCQljYW5jZWxfd29ya19zeW5jKCZiZWVwLT5yZWdpc3Rlcl93b3JrKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYmVlcC0+dW5yZWdpc3Rlcl93b3JrKTsKLQkJaWYgKGJlZXAtPmVuYWJsZWQpCisJCWlmIChiZWVwLT5kZXYpCiAJCQlzbmRfaGRhX2RvX2RldGFjaChiZWVwKTsKIAkJY29kZWMtPmJlZXAgPSBOVUxMOwogCQlrZnJlZShiZWVwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IDljZmRiNzcuLmY5OGI0N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMTA4NiwxMSArMTA4Niw2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JLyogYXVkaW8gY29kZWMgc2hvdWxkIG92ZXJyaWRlIHRoZSBtaXhlciBuYW1lICovCi0JaWYgKGNvZGVjLT5hZmcgfHwgISpjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpCi0JCXNucHJpbnRmKGNvZGVjLT5idXMtPmNhcmQtPm1peGVybmFtZSwKLQkJCSBzaXplb2YoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSwKLQkJCSAiJXMgJXMiLCBjb2RlYy0+dmVuZG9yX25hbWUsIGNvZGVjLT5jaGlwX25hbWUpOwogCiAJaWYgKGlzX2dlbmVyaWNfY29uZmlnKGNvZGVjKSkgewogCQllcnIgPSBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOwpAQCAtMTEwOSw2ICsxMTA0LDExIEBACiAgcGF0Y2hlZDoKIAlpZiAoIWVyciAmJiBjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KQogCQllcnIgPSBpbml0X3Vuc29sX3F1ZXVlKGNvZGVjLT5idXMpOworCS8qIGF1ZGlvIGNvZGVjIHNob3VsZCBvdmVycmlkZSB0aGUgbWl4ZXIgbmFtZSAqLworCWlmICghZXJyICYmIChjb2RlYy0+YWZnIHx8ICEqY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lKSkKKwkJc25wcmludGYoY29kZWMtPmJ1cy0+Y2FyZC0+bWl4ZXJuYW1lLAorCQkJIHNpemVvZihjb2RlYy0+YnVzLT5jYXJkLT5taXhlcm5hbWUpLAorCQkJICIlcyAlcyIsIGNvZGVjLT52ZW5kb3JfbmFtZSwgY29kZWMtPmNoaXBfbmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfY29uZmlndXJlKTsKQEAgLTEzMjcsMTEgKzEzMjcsMTMgQEAKICAqLwogdTMyIHNuZF9oZGFfcGluX3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotCXUzMiBwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCXUzMiBwaW5jYXA7CiAKLQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCi0JCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOwotCisJaWYgKCFjb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSkgeworCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCisJCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKKwl9CiAJcmV0dXJuIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCSAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDFkNTQxYjcuLjBhNzcwYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtODE3LDYgKzgxNyw3IEBACiAJdW5zaWduZWQgaW50IHBpbl9hbXBfd29ya2Fyb3VuZDoxOyAvKiBwaW4gb3V0LWFtcCB0YWtlcyBpbmRleAogCQkJCQkgICAgKiAoZS5nLiBDb25leGFudCBjb2RlY3MpCiAJCQkJCSAgICAqLworCXVuc2lnbmVkIGludCBub190cmlnZ2VyX3NlbnNlOjE7IC8qIGRvbid0IHRyaWdnZXIgYXQgcGluLXNlbnNpbmcgKi8KICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJdW5zaWduZWQgaW50IHBvd2VyX29uIDoxOwkvKiBjdXJyZW50IChnbG9iYWwpIHBvd2VyLXN0YXRlICovCiAJdW5zaWduZWQgaW50IHBvd2VyX3RyYW5zaXRpb24gOjE7IC8qIHBvd2VyLXN0YXRlIGluIHRyYW5zaXRpb24gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDliNTZmOTMuLmVjOWMzNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMzU2LDYgKzM1Niw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGNoYXIgc3RyZWFtX3RhZzsJLyogYXNzaWduZWQgc3RyZWFtICovCiAJdW5zaWduZWQgY2hhciBpbmRleDsJCS8qIHN0cmVhbSBpbmRleCAqLworCWludCBkZXZpY2U7CQkJLyogbGFzdCBkZXZpY2UgbnVtYmVyIGFzc2lnbmVkIHRvICovCiAKIAl1bnNpZ25lZCBpbnQgb3BlbmVkIDoxOwogCXVuc2lnbmVkIGludCBydW5uaW5nIDoxOwpAQCAtMTQ0MSwxMCArMTQ0MiwxMyBAQAogICovCiAKIC8qIGFzc2lnbiBhIHN0cmVhbSBmb3IgdGhlIFBDTSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXp4X2RldiAqYXp4X2Fzc2lnbl9kZXZpY2Uoc3RydWN0IGF6eCAqY2hpcCwgaW50IHN0cmVhbSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF6eF9kZXYgKgorYXp4X2Fzc2lnbl9kZXZpY2Uoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJaW50IGRldiwgaSwgbnVtczsKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwlzdHJ1Y3QgYXp4X2RldiAqcmVzID0gTlVMTDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CiAJCWRldiA9IGNoaXAtPnBsYXliYWNrX2luZGV4X29mZnNldDsKIAkJbnVtcyA9IGNoaXAtPnBsYXliYWNrX3N0cmVhbXM7CiAJfSBlbHNlIHsKQEAgLTE0NTMsMTAgKzE0NTcsMTUgQEAKIAl9CiAJZm9yIChpID0gMDsgaSA8IG51bXM7IGkrKywgZGV2KyspCiAJCWlmICghY2hpcC0+YXp4X2RldltkZXZdLm9wZW5lZCkgewotCQkJY2hpcC0+YXp4X2RldltkZXZdLm9wZW5lZCA9IDE7Ci0JCQlyZXR1cm4gJmNoaXAtPmF6eF9kZXZbZGV2XTsKKwkJCXJlcyA9ICZjaGlwLT5henhfZGV2W2Rldl07CisJCQlpZiAocmVzLT5kZXZpY2UgPT0gc3Vic3RyZWFtLT5wY20tPmRldmljZSkKKwkJCQlicmVhazsKIAkJfQotCXJldHVybiBOVUxMOworCWlmIChyZXMpIHsKKwkJcmVzLT5vcGVuZWQgPSAxOworCQlyZXMtPmRldmljZSA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2U7CisJfQorCXJldHVybiByZXM7CiB9CiAKIC8qIHJlbGVhc2UgdGhlIGFzc2lnbmVkIHN0cmVhbSAqLwpAQCAtMTUwNSw3ICsxNTE0LDcgQEAKIAlpbnQgZXJyOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+b3Blbl9tdXRleCk7Ci0JYXp4X2RldiA9IGF6eF9hc3NpZ25fZGV2aWNlKGNoaXAsIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwlhenhfZGV2ID0gYXp4X2Fzc2lnbl9kZXZpY2UoY2hpcCwgc3Vic3RyZWFtKTsKIAlpZiAoYXp4X2RldiA9PSBOVUxMKSB7CiAJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0yMzIyLDYgKzIzMzEsNyBAQAogICogd2hpdGUvYmxhY2stbGlzdCBmb3IgZW5hYmxlX21zaQogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX2JsYWNrX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZjIsICJBU1VTIiwgMCksIC8qIEF0aGxvbjY0IFgyICsgbnZpZGlhICovCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDFhMzYxMzcuLjY5YTk0MWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMTE4Niw2ICsxMTg2LDggQEAKIAkgKi8KIAlzcGVjLT5tdWx0aW91dC5ub19zaGFyZV9zdHJlYW0gPSAxOwogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNzEsNiArMTM3Myw4IEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWQxOTh4X3BhdGNoX29wczsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODEzLDYgKzE4MTcsOSBAQAogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxOTgxX2hwX3Vuc29sX2V2ZW50OwogCQlicmVhazsKIAl9CisKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzExOCw2ICszMTI1LDggQEAKICNlbmRpZgogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwNDsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzMwLDYgKzMzMzksOCBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFkMTk4eF9wYXRjaF9vcHM7CiAKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI4Nyw2ICs0Mjk4LDggQEAKIAkJYnJlYWs7CiAJfQogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2MjMsNiArNDYzNiw5IEBACiAJCXNwZWMtPm1peGVyc1syXSA9IGFkMTg4Ml82c3RhY2tfbWl4ZXJzOwogCQlicmVhazsKIAl9CisKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKaW5kZXggNGIyMDBkYS4uZmUwNDIzYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCkBAIC02Niw2ICs2Niw3IEBACiAvKiBhdmFpbGFibGUgbW9kZWxzICovCiBlbnVtIHsKIAlDUzQyMFhfTUJQNTUsCisJQ1M0MjBYX0lNQUMyNywKIAlDUzQyMFhfQVVUTywKIAlDUzQyMFhfTU9ERUxTCiB9OwpAQCAtODI3LDcgKzgyOCw4IEBACiAJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKIAkJCQkgICAgaHBfcHJlc2VudCA/IDAgOiBQSU5fT1VUKTsKIAl9Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBDUzQyMFhfTUJQNTUpIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID09IENTNDIwWF9NQlA1NSB8fAorCSAgICBzcGVjLT5ib2FyZF9jb25maWcgPT0gQ1M0MjBYX0lNQUMyNykgewogCQl1bnNpZ25lZCBpbnQgZ3BpbyA9IGhwX3ByZXNlbnQgPyAweDAyIDogMHgwODsKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwMSwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCBncGlvKTsKQEAgLTEwNjksMTIgKzEwNzEsMTQgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNzNDIweF9tb2RlbHNbQ1M0MjBYX01PREVMU10gPSB7CiAJW0NTNDIwWF9NQlA1NV0gPSAibWJwNTUiLAorCVtDUzQyMFhfSU1BQzI3XSA9ICJpbWFjMjciLAogCVtDUzQyMFhfQVVUT10gPSAiYXV0byIsCiB9OwogCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjczQyMHhfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweGNiNzksICJNYWNCb29rUHJvIDUsNSIsIENTNDIwWF9NQlA1NSksCisJU05EX1BDSV9RVUlSSygweDgwODYsIDB4NzI3MCwgIklNYWMgMjcgSW5jaCIsIENTNDIwWF9JTUFDMjcpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTEwOTcsOCArMTEwMSwyMyBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY3NfcGluY2ZnIGltYWMyN19waW5jZmdzW10gPSB7CisJeyAweDA5LCAweDAxMmI0MDUwIH0sCisJeyAweDBhLCAweDkwMTAwMTQwIH0sCisJeyAweDBiLCAweDkwMTAwMTQyIH0sCisJeyAweDBjLCAweDAxOGIzMDIwIH0sCisJeyAweDBkLCAweDkwYTAwMTEwIH0sCisJeyAweDBlLCAweDQwMDAwMGYwIH0sCisJeyAweDBmLCAweDAxY2JlMDMwIH0sCisJeyAweDEwLCAweDAxNGJlMDYwIH0sCisJeyAweDEyLCAweDAxYWI5MDcwIH0sCisJeyAweDE1LCAweDQwMDAwMGYwIH0sCisJe30gLyogdGVybWluYXRvciAqLworfTsKKwogc3RhdGljIHN0cnVjdCBjc19waW5jZmcgKmNzX3BpbmNmZ3NbQ1M0MjBYX01PREVMU10gPSB7CiAJW0NTNDIwWF9NQlA1NV0gPSBtYnA1NV9waW5jZmdzLAorCVtDUzQyMFhfSU1BQzI3XSA9IGltYWMyN19waW5jZmdzLAogfTsKIAogc3RhdGljIHZvaWQgZml4X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG1vZGVsKQpAQCAtMTEyOCw2ICsxMTQ3LDcgQEAKIAkJZml4X3BpbmNmZyhjb2RlYywgc3BlYy0+Ym9hcmRfY29uZmlnKTsKIAogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CisJY2FzZSBDUzQyMFhfSU1BQzI3OgogCWNhc2UgQ1M0MjBYX01CUDU1OgogCQkvKiBHUElPMSA9IGhlYWRwaG9uZXMgKi8KIAkJLyogR1BJTzMgPSBzcGVha2VycyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IGEwOWMwM2MuLmM1NzhjMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgorI2luY2x1ZGUgImhkYV9iZWVwLmgiCiAKICNkZWZpbmUgQ1hUX1BJTl9ESVJfSU4gICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQ1hUX1BJTl9ESVJfT1VUICAgICAgICAgICAgIDB4MDEKQEAgLTExMSw2ICsxMTIsNyBAQAogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOwogCXVuc2lnbmVkIGludCBwb3J0X2RfbW9kZTsKIAl1bnNpZ25lZCBjaGFyIGV4dF9taWNfYmlhczsKKwl1bnNpZ25lZCBpbnQgZGVsbF92b3N0cm87CiB9OwogCiBzdGF0aWMgaW50IGNvbmV4YW50X3BsYXliYWNrX3BjbV9vcGVuKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCkBAIC00NzYsNiArNDc4LDcgQEAKIAkJc25kX2FycmF5X2ZyZWUoJnNwZWMtPmphY2tzKTsKIAl9CiAjZW5kaWYKKwlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiAJa2ZyZWUoY29kZWMtPnNwZWMpOwogfQogCkBAIC0yMTA5LDkgKzIxMTIsMTIgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgdmFsOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJaW50IGlub3V0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHgxMDApID8KKwkJQUNfQU1QX0dFVF9JTlBVVCA6IEFDX0FNUF9HRVRfT1VUUFVUOwogCi0JdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE3LCAwLAotCQlBQ19WRVJCX0dFVF9BTVBfR0FJTl9NVVRFLCBBQ19BTVBfR0VUX09VVFBVVCk7CisJdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCUFDX1ZFUkJfR0VUX0FNUF9HQUlOX01VVEUsIGlub3V0KTsKIAogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB2YWwgJiBBQ19BTVBfR0FJTjsKIAlyZXR1cm4gMDsKQEAgLTIxMjMsNiArMjEyOSw5IEBACiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OwogCXVuc2lnbmVkIGludCBpZHg7CisJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKwlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPworCQlBQ19BTVBfU0VUX0lOUFVUIDogQUNfQU1QX1NFVF9PVVRQVVQ7CiAKIAlpZiAoIWltdXgtPm51bV9pdGVtcykKIAkJcmV0dXJuIDA7CkBAIC0yMTMwLDkgKzIxMzksOSBAQAogCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQogCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOwogCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCiAJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBBQ19BTVBfU0VUX09VVFBVVCB8CisJCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBpbm91dCB8CiAJCQlpbXV4LT5pdGVtc1tpZHhdLmluZGV4KTsKIAogCXJldHVybiAxOwpAQCAtMjIwMSwxMCArMjIxMCwxMSBAQAogCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQW5hbG9nIE1pYyBCb29zdCBDYXB0dXJlIEVudW0iLAorCQkubmFtZSA9ICJFeHQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCiAJCS5pbmZvID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbywKIAkJLmdldCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2dldCwKIAkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDE3LAogCX0sCiAKIAlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgJmN4dDUwNjZfYmluZF9jYXB0dXJlX3ZvbF9vdGhlcnMpLApAQCAtMjIxMiw2ICsyMjIyLDE5IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X3Zvc3Ryb19taXhlcnNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJJbnQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDIzIHwgMHgxMDAsCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMSwgMHgwLCBIREFfT1VUUFVUKSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDY2X2luaXRfdmVyYnNbXSA9IHsKIAl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwgLyogUG9ydCBCICovCiAJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQyAqLwpAQCAtMjM5NywxMSArMjQyMCwxNiBAQAogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDY2X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwogCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBpbml0XG4iKTsKIAljb25leGFudF9pbml0KGNvZGVjKTsKIAlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkgewogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKKwkJaWYgKHNwZWMtPmRlbGxfdm9zdHJvKQorCQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7CisJCWVsc2UKKwkJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjUwMCw3ICsyNTI4LDEwIEBACiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdm9zdHJvOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl92b3N0cm9fbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmRlbGxfdm9zdHJvID0gMTsKKwkJc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTMpOwogCiAJCS8qIG5vIFMvUERJRiBvdXQgKi8KIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBhZWVkNGNjLi5lM2NhYTc4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTMxLDggKzEzMSw4IEBACiBlbnVtIHsKIAlBTEMyNjlfQkFTSUMsCiAJQUxDMjY5X1FVQU5UQV9GTDEsCi0JQUxDMjY5X0FTVVNfRUVFUENfUDcwMywKLQlBTEMyNjlfQVNVU19FRUVQQ19QOTAxLAorCUFMQzI2OV9BU1VTX0FNSUMsCisJQUxDMjY5X0FTVVNfRE1JQywKIAlBTEMyNjlfRlVKSVRTVSwKIAlBTEMyNjlfTElGRUJPT0ssCiAJQUxDMjY5X0FVVE8sCkBAIC0xODgsNiArMTg4LDggQEAKIAlBTEM2NjNfQVNVU19NT0RFNCwKIAlBTEM2NjNfQVNVU19NT0RFNSwKIAlBTEM2NjNfQVNVU19NT0RFNiwKKwlBTEM2NjNfQVNVU19NT0RFNywKKwlBTEM2NjNfQVNVU19NT0RFOCwKIAlBTEMyNzJfREVMTCwKIAlBTEMyNzJfREVMTF9aTTEsCiAJQUxDMjcyX1NBTVNVTkdfTkMxMCwKQEAgLTMzNSw2ICszMzcsOSBAQAogCS8qIGhvb2tzICovCiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpOworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBwb3dlcik7CisjZW5kaWYKIAogCS8qIGZvciBwaW4gc2Vuc2luZyAqLwogCXVuc2lnbmVkIGludCBzZW5zZV91cGRhdGVkOiAxOwpAQCAtMzg2LDYgKzM5MSw3IEBACiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOworCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKICNlbmRpZgogfTsKIApAQCAtODk4LDYgKzkwNCw3IEBACiAJc3BlYy0+dW5zb2xfZXZlbnQgPSBwcmVzZXQtPnVuc29sX2V2ZW50OwogCXNwZWMtPmluaXRfaG9vayA9IHByZXNldC0+aW5pdF9ob29rOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwlzcGVjLT5wb3dlcl9ob29rID0gcHJlc2V0LT5wb3dlcl9ob29rOwogCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBwcmVzZXQtPmxvb3BiYWNrczsKICNlbmRpZgogCkBAIC0xNjYzLDkgKzE2NzAsNiBAQAogLyogIHNvbWUgYml0IGhlcmUgZGlzYWJsZXMgdGhlIG90aGVyIERBQ3MuIEluaXQ9MHg0OTAwICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MDh9LAogCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDAwMH0sCi0vKiBFbmFibGUgYW1wbGlmaWVycyAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgwMn0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDAyfSwKIC8qIERNSUMgZml4CiAgKiBUaGlzIGxhcHRvcCBoYXMgYSBzdGVyZW8gZGlnaXRhbCBtaWNyb3Bob25lLiBUaGUgbWljcyBhcmUgb25seSAxY20gYXBhcnQKICAqIHdoaWNoIG1ha2VzIHRoZSBzdGVyZW8gdXNlbGVzcy4gSG93ZXZlciwgZWl0aGVyIHRoZSBtaWMgb3IgdGhlIEFMQzg4OQpAQCAtMTc3OCw2ICsxNzgyLDI1IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMSwgMHgwLAorCQlIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDEsIDIsIEhEQV9JTlBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMiwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworCiBzdGF0aWMgdm9pZCBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xODA4LDYgKzE4MzEsMTYgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MWI7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgdm9pZCBhbGM4ODlfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKQoreworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIHBvd2VyID8gMiA6IDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTUsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIHBvd2VyID8gMiA6IDApOworfQorI2VuZGlmCisKIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTM2MDEsMTIgKzM2MzQsMjkgQEAKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IGFsY19zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiBzdGF0aWMgaW50IGFsY19yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworI2VuZGlmCiAJY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJaWYgKHNwZWMgJiYgc3BlYy0+cG93ZXJfaG9vaykKKwkJc3BlYy0+cG93ZXJfaG9vayhjb2RlYywgMSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzYyMyw2ICszNjczLDcgQEAKIAkucmVzdW1lID0gYWxjX3Jlc3VtZSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkuc3VzcGVuZCA9IGFsY19zdXNwZW5kLAogCS5jaGVja19wb3dlcl9zdGF0dXMgPSBhbGNfY2hlY2tfcG93ZXJfc3RhdHVzLAogI2VuZGlmCiB9OwpAQCAtODkxOSw3ICs4OTcwLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwNDBkLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDA1NzksICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MjhmYiwgIlRhcmdhIFQ4IiwgQUxDODgyX1RBUkdBKSwgLyogTVNJLTEwNDkgVDggICovCi0JU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MmZiMywgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyZmIzLCAiTVNJIiwgQUxDODgyX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDY2NjgsICJNU0kiLCBBTEM4ODJfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MzcyOSwgIk1TSSBTNDIwIiwgQUxDODgzX1RBUkdBX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4Mzc4MywgIk5FQyBTOTcwIiwgQUxDODgzX1RBUkdBX0RJRyksCkBAIC05MjgyLDYgKzkzMzMsNyBAQAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkc19hbHQsCiAJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkc19hbHQpLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHMsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4M19ESUdPVVRfTklELAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCkBAIC05Mzc4LDEwICs5NDMwLDExIEBACiAJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV84OTMwR10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4OF9iYXNlX21peGVyLAorCQkubWl4ZXJzID0geyBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfbWl4ZXIsCiAJCQkJYWxjODgzX2NobW9kZV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzLAotCQkJCWFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ192ZXJicyB9LAorCQkJCWFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ192ZXJicywKKwkJCQlhbGM4ODlfZWFwZF92ZXJic30sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODlfYWRjX25pZHMpLApAQCAtOTM5OCw2ICs5NDUxLDkgQEAKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKIAkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJCS5wb3dlcl9ob29rID0gYWxjODg5X3Bvd2VyX2VhcGQsCisjZW5kaWYKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwKQEAgLTk0MjgsNiArOTQ4NCw3IEBACiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzX2FsdCwKIAkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzX2FsdCksCisJCS5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkcywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4M19zaXhzdGFja19tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLApAQCAtOTQ4OSw2ICs5NTQ2LDcgQEAKIAkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAogCQkuYWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHNfYWx0LAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHNfYWx0KSwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2xlbm92b18xMDFlX2NhcHR1cmVfc291cmNlLApAQCAtOTY2OCw2ICs5NzI2LDcgQEAKIAkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCiAJCS5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkcywKIAkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKSwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzLAogCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4OUFfbWIzMV82Y2hfbW9kZXMsCkBAIC0xMDY3OCw2ICsxMDczNywxMyBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9sZW5vdm9fMzAwMF9pbml0X3ZlcmJzW10gPSB7CisJLyogRnJvbnQgTWljIHBpbjogaW5wdXQgdnJlZiBhdCA1MCUgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjUwfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2Ml9mdWppdHN1X2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAzLAogCS5pdGVtcyA9IHsKQEAgLTExNzIwLDcgKzExNzg2LDggQEAKIAlbQUxDMjYyX0xFTk9WT18zMDAwXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX2xlbm92b18zMDAwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjMjYyX0VBUERfdmVyYnMsCi0JCQkJYWxjMjYyX2xlbm92b18zMDAwX3Vuc29sX3ZlcmJzIH0sCisJCQkJYWxjMjYyX2xlbm92b18zMDAwX3Vuc29sX3ZlcmJzLAorCQkJCWFsYzI2Ml9sZW5vdm9fMzAwMF9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYyX2RhY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMywKQEAgLTEyODU3LDcgKzEyOTI0LDcgQEAKIAlpbnQgYm9hcmRfY29uZmlnOwogCWludCBpLCBoYXNfYmVlcCwgZXJyOwogCi0Jc3BlYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEzMjMyLDEwICsxMzI5OSwxMiBAQAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwogc3RhdGljIHZvaWQgYWxjMjY5X3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IG5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNSk7CisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIG5pZCk7CiAJYml0cyA9IHByZXNlbnQgPyBBTVBfSU5fTVVURSgwKSA6IDA7CiAJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBjLCBIREFfSU5QVVQsIDAsCiAJCQkJQU1QX0lOX01VVEUoMCksIGJpdHMpOwpAQCAtMTM0NjAsOCArMTM1MjksOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmFsYzI2OV9tb2RlbHNbQUxDMjY5X01PREVMX0xBU1RdID0gewogCVtBTEMyNjlfQkFTSUNdCQkJPSAiYmFzaWMiLAogCVtBTEMyNjlfUVVBTlRBX0ZMMV0JCT0gInF1YW50YSIsCi0JW0FMQzI2OV9BU1VTX0VFRVBDX1A3MDNdCT0gImVlZXBjLXA3MDMiLAotCVtBTEMyNjlfQVNVU19FRUVQQ19QOTAxXQk9ICJlZWVwYy1wOTAxIiwKKwlbQUxDMjY5X0FTVVNfQU1JQ10JCT0gImFzdXMtYW1pYyIsCisJW0FMQzI2OV9BU1VTX0RNSUNdCQk9ICJhc3VzLWRtaWMiLAogCVtBTEMyNjlfRlVKSVRTVV0JCT0gImZ1aml0c3UiLAogCVtBTEMyNjlfTElGRUJPT0tdCQk9ICJsaWZlYm9vayIsCiAJW0FMQzI2OV9BVVRPXQkJCT0gImF1dG8iLApAQCAtMTM0NzAsMTggKzEzNTM5LDQxIEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYmY4LCAiUXVhbnRhIEZMMSIsIEFMQzI2OV9RVUFOVEFfRkwxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzMwLCAiQVNVUyBFZWVwYyBQNzAzIFA5MDBBIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ODMsICJBU1VTIEY4MVNlIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCi0gICAgICAgIFNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YTMsICJBU1VTIEY1USIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzIzLCAiQVNVUyBQODAiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BU1VTX0VFRVBDX1A3MDMpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzQzLCAiQVNVUyBVODAiLCBBTEMyNjlfQVNVU19FRUVQQ19QNzAzKSwKLSAgICAgICAgU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY1MywgIkFTVVMgVTUwIiwgQUxDMjY5X0FTVVNfRUVFUENfUDcwMyksCisJCSAgICAgIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExMzMsICJBU1VTIFVKMjBmdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNzMsICJBU1VTIFVMODBKVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyODMsICJBU1VTIFU1M0pjIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZDMsICJBU1VTIE42MUpBIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQxMywgIkFTVVMgVUw1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDUzLCAiQVNVUyBNNjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ODMsICJBU1VTIFVMODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZTMsICJBU1VTIFVMMjAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTEzLCAiQVNVUyBVWDMwIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWIzLCAiQVNVUyBONjBEcCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YzMsICJBU1VTIE43MERlIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NDMsICJBU1VTIE02MEoiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9BU1VTX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQVNVU19BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BU1VTX0FNSUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMWEsICJBU1VTIEVlZXBjIFA5MDEiLAotCQkgICAgICBBTEMyNjlfQVNVU19FRUVQQ19QOTAxKSwKKwkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM0YSwgIkFTVVMgRWVlcGMgUzEwMSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0VFRVBDX1A5MDEpLAotICAgICAgICBTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0FTVVNfRUVFUENfUDkwMSksCisJCSAgICAgIEFMQzI2OV9BU1VTX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzOTgsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiQVNVUyBQMTAwNUhBIiwgQUxDMjY5X0FTVVNfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTE1ZCwgIkZTQyBBbWlsbyIsIEFMQzI2OV9GVUpJVFNVKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDc1LCAiTGlmZWJvb2sgSUNIOU0tYmFzZWQiLCBBTEMyNjlfTElGRUJPT0spLAogCXt9CkBAIC0xMzUxMSw3ICsxMzYwMyw3IEBACiAJCS5zZXR1cCA9IGFsYzI2OV9xdWFudGFfZmwxX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjMjY5X3F1YW50YV9mbDFfaW5pdF9ob29rLAogCX0sCi0JW0FMQzI2OV9BU1VTX0VFRVBDX1A3MDNdID0geworCVtBTEMyNjlfQVNVU19BTUlDXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY5X2VlZXBjX21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKQEAgLTEzNTI1LDcgKzEzNjE3LDcgQEAKIAkJLnNldHVwID0gYWxjMjY5X2VlZXBjX2FtaWNfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfZWVlcGNfaW5pdGhvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfRUVFUENfUDkwMV0gPSB7CisJW0FMQzI2OV9BU1VTX0RNSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZWVlcGNfbWl4ZXIgfSwKIAkJLmNhcF9taXhlciA9IGFsYzI2OV9lcGNfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLApAQCAtMTU0MDEsNyArMTU0OTMsNyBAQAogc3RhdGljIGludCBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXJldHVybiBhbGNfYXV0b19jcmVhdGVfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDE1LCAweDA5LCAwKTsKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgyMiwgMCk7CiB9CiAKIApAQCAtMTYxNjAsNiArMTYyNTIsNTIgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfbW9kZTdfOF9hbGxfYmluZF9zd2l0Y2ggPSB7CisJLm9wcyA9ICZzbmRfaGRhX2JpbmRfc3csCisJLnZhbHVlcyA9IHsKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE1LCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE3LCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFiLCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDIxLCAzLCAwLCBIREFfT1VUUFVUKSwKKwkJMAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgYWxjNjYzX2FzdXNfbW9kZTdfOF9zcF9iaW5kX3N3aXRjaCA9IHsKKwkub3BzID0gJnNuZF9oZGFfYmluZF9zdywKKwkudmFsdWVzID0geworCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTcsIDMsIDAsIEhEQV9PVVRQVVQpLAorCQkwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbW9kZTdfbWl4ZXJbXSA9IHsKKwlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCksCisJSERBX0JJTkRfVk9MKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsICZhbGM2NjNfYXN1c19iaW5kX21hc3Rlcl92b2wpLAorCUhEQV9CSU5EX1NXKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lMSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50TWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50TWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjNfbW9kZThfbWl4ZXJbXSA9IHsKKwlIREFfQklORF9TVygiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X2FsbF9iaW5kX3N3aXRjaCksCisJSERBX0JJTkRfVk9MKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsICZhbGM2NjNfYXN1c19iaW5kX21hc3Rlcl92b2wpLAorCUhEQV9CSU5EX1NXKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsICZhbGM2NjNfYXN1c19tb2RlN184X3NwX2JpbmRfc3dpdGNoKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lMSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2NjJfY2htb2RlX21peGVyW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTE2NDQ3LDYgKzE2NTg1LDQ1IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX21vZGU3X2luaXRfdmVyYnNbXSA9IHsKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwJLyogSGVhZHBob25lICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg5KX0sCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19tb2RlOF9pbml0X3ZlcmJzW10gPSB7CisJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwJLyogSGVhZHBob25lICovCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg5KX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVH0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjYyX2F1dG9fY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKQEAgLTE2NjI2LDYgKzE2ODAzLDU0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBhbGM2NjNfdHdvX2hwX203X3NwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQxLCBwcmVzZW50MjsKKworCXByZXNlbnQxID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKwlwcmVzZW50MiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMSwgMCwKKwkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkKKwkJCSYgQUNfUElOU0VOU0VfUFJFU0VOQ0U7CisKKwlpZiAocHJlc2VudDEgfHwgcHJlc2VudDIpIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCX0gZWxzZSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTQsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE3LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsYzY2M190d29faHBfbThfc3BlYWtlcl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDEsIHByZXNlbnQyOworCisJcHJlc2VudDEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjEsIDAsCisJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCXByZXNlbnQyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE1LCAwLAorCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKworCWlmIChwcmVzZW50MSB8fCBwcmVzZW50MikgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDE0LCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJfSBlbHNlIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNCwgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MTcsIDAsCisJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworCX0KK30KKwogc3RhdGljIHZvaWQgYWxjNjYzX201MXZhX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtMTY2NDUsNyArMTY4NzAsNyBAQAogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKIAlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOwogCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKLQlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDk7CiAJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCkBAIC0xNjY1Nyw3ICsxNjg4MiwxNyBAQAogCiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlMSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIGFsYzY2M19tb2RlMV91bnNvbF9ldmVudAlhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQKLSNkZWZpbmUgYWxjNjYzX21vZGUxX3NldHVwCQlhbGM2NjNfbTUxdmFfc2V0dXAKKworc3RhdGljIHZvaWQgYWxjNjYzX21vZGUxX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKK30KKwogI2RlZmluZSBhbGM2NjNfbW9kZTFfaW5pdGhvb2sJCWFsYzY2M19tNTF2YV9pbml0aG9vawogCiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlMiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjY3NCw3ICsxNjkwOSw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2Ml9tb2RlMl9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYyX21vZGUyX3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjJfbW9kZTJfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjY5NSw3ICsxNjkzMCw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlM19zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGUzX3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTNfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjcxNiw3ICsxNjk1MSw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNF9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGU0X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTRfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjczNyw3ICsxNjk3Miw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNV9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGU1X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTVfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjc1OCw3ICsxNjk5Myw3IEBACiAJfQogfQogCi0jZGVmaW5lIGFsYzY2M19tb2RlNl9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKyNkZWZpbmUgYWxjNjYzX21vZGU2X3NldHVwCWFsYzY2M19tb2RlMV9zZXR1cAogCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTZfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xNjc2Niw2ICsxNzAwMSw1MCBAQAogCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogCisvKiAqKioqKioqKioqKioqKioqKiBNb2RlNyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTdfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgIHVuc2lnbmVkIGludCByZXMpCit7CisJc3dpdGNoIChyZXMgPj4gMjYpIHsKKwljYXNlIEFMQzg4MF9IUF9FVkVOVDoKKwkJYWxjNjYzX3R3b19ocF9tN19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgorCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorfQorCisjZGVmaW5lIGFsYzY2M19tb2RlN19zZXR1cAlhbGM2NjNfbW9kZTFfc2V0dXAKKworc3RhdGljIHZvaWQgYWxjNjYzX21vZGU3X2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFsYzY2M190d29faHBfbTdfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqIE1vZGU4ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFsYzY2M19tb2RlOF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgorCQlhbGM2NjNfdHdvX2hwX204X3NwZWFrZXJfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKyNkZWZpbmUgYWxjNjYzX21vZGU4X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorCitzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZThfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWxjNjYzX3R3b19ocF9tOF9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKK30KKwogc3RhdGljIHZvaWQgYWxjNjYzX2c3MXZfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CkBAIC0xNjkwMCw2ICsxNzE3OSw4IEBACiAJW0FMQzY2M19BU1VTX01PREU0XSA9ICJhc3VzLW1vZGU0IiwKIAlbQUxDNjYzX0FTVVNfTU9ERTVdID0gImFzdXMtbW9kZTUiLAogCVtBTEM2NjNfQVNVU19NT0RFNl0gPSAiYXN1cy1tb2RlNiIsCisJW0FMQzY2M19BU1VTX01PREU3XSA9ICJhc3VzLW1vZGU3IiwKKwlbQUxDNjYzX0FTVVNfTU9ERThdID0gImFzdXMtbW9kZTgiLAogCVtBTEMyNzJfREVMTF0JCT0gImRlbGwiLAogCVtBTEMyNzJfREVMTF9aTTFdCT0gImRlbGwtem0xIiwKIAlbQUxDMjcyX1NBTVNVTkdfTkMxMF0JPSAic2Ftc3VuZy1uYzEwIiwKQEAgLTE2OTE2LDEyICsxNzE5NywyMiBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMDMsICJBU1VTIEc2MEoiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzMywgIkFTVVMgRzYwSngiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNlMywgIkFTVVMgTjcxSkEiLCBBTEM2NjNfQVNVU19NT0RFNyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ2MywgIkFTVVMgTjcxIiwgQUxDNjYzX0FTVVNfTU9ERTcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZDMsICJBU1VTIEc3MiIsIEFMQzY2M19BU1VTX01PREU4KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTYzLCAiQVNVUyBOOTAiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVkMywgIkFTVVMgTjUwU0YgRjUwU0YiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZmMywgIkFTVVMgSzQwQyBLNTBDIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MzMsICJBU1VTIE44MURlIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjUsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3ODMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3OTMsICJBU1VTIEY1MEdYIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3YjMsICJBU1VTIEY3MFNMIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3YzMsICJBU1VTIFVYMjAiLCBBTEM2NjNfQVNVU19NNTFWQSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTdmMywgIkFTVVMgWDU4TEUiLCBBTEM2NjJfQVNVU19NT0RFMiksCkBAIC0xNzIwNSw2ICsxNzQ5NiwzNiBAQAogCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTZfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTZfaW5pdGhvb2ssCiAJfSwKKwlbQUxDNjYzX0FTVVNfTU9ERTddID0geworCQkubWl4ZXJzID0geyBhbGM2NjNfbW9kZTdfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzY2Ml9hdXRvX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGM2NjJfaW5pdF92ZXJicywKKwkJCQlhbGM2NjNfbW9kZTdfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzY2Ml9kYWNfbmlkcyksCisJCS5ocF9uaWQgPSAweDAzLAorCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzY2Ml9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tb2RlN191bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX21vZGU3X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjNjYzX21vZGU3X2luaXRob29rLAorCX0sCisJW0FMQzY2M19BU1VTX01PREU4XSA9IHsKKwkJLm1peGVycyA9IHsgYWxjNjYzX21vZGU4X21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGM2NjJfYXV0b19jYXB0dXJlX21peGVyLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjNjYyX2luaXRfdmVyYnMsCisJCQkJYWxjNjYzX21vZGU4X2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM2NjJfZGFjX25pZHMpLAorCQkuaHBfbmlkID0gMHgwMywKKwkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAorCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbW9kZThfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzY2M19tb2RlOF9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzY2M19tb2RlOF9pbml0aG9vaywKKwl9LAogCVtBTEMyNzJfREVMTF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzY2M19tNTF2YV9taXhlciB9LAogCQkuY2FwX21peGVyID0gYWxjMjcyX2F1dG9fY2FwdHVyZV9taXhlciwKQEAgLTE3Njg4LDcgKzE4MDA5LDkgQEAKIAl7IC5pZCA9IDB4MTBlYzAyNjcsIC5uYW1lID0gIkFMQzI2NyIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OCB9LAogCXsgLmlkID0gMHgxMGVjMDI2OCwgLm5hbWUgPSAiQUxDMjY4IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY4IH0sCiAJeyAuaWQgPSAweDEwZWMwMjY5LCAubmFtZSA9ICJBTEMyNjkiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjkgfSwKKwl7IC5pZCA9IDB4MTBlYzAyNzAsIC5uYW1lID0gIkFMQzI3MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAogCXsgLmlkID0gMHgxMGVjMDI3MiwgLm5hbWUgPSAiQUxDMjcyIiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCisJeyAuaWQgPSAweDEwZWMwMjc1LCAubmFtZSA9ICJBTEMyNzUiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjkgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5yZXYgPSAweDEwMDM0MCwgLm5hbWUgPSAiQUxDNjYwIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAogCXsgLmlkID0gMHgxMGVjMDY2MCwgLm5hbWUgPSAiQUxDNjYwLVZEIiwgLnBhdGNoID0gcGF0Y2hfYWxjODYxdmQgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCAzZDU5ZjgzLi4yMjkxYTgzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0yMTA0LDYgKzIxMDQsNyBAQAogICAgIDEwMjgwMjA0CiAgICAgMTAyODAyMUYKICAgICAxMDI4MDIyOCAoRGVsbCBWb3N0cm8gMTUwMCkKKyAgICAxMDI4MDIyOSAoRGVsbCBWb3N0cm8gMTcwMCkKICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfOTIwNV9tNDJfcGluX2NvbmZpZ3NbMTJdID0gewogCTB4MDMyMTEwMUYsIDB4MDNBMTEwMjAsIDB4NDAwMDAzRkEsIDB4OTAxNzAzMTAsCkBAIC0yMTg5LDYgKzIxOTAsOCBAQAogCQkgICAgICAiRGVsbCBJbnNwaXJvbiIsIFNUQUNfOTIwNV9ERUxMX000NCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIyOCwKIAkJICAgICAgIkRlbGwgVm9zdHJvIDE1MDAiLCBTVEFDXzkyMDVfREVMTF9NNDIpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMjksCisJCSAgICAgICJEZWxsIFZvc3RybyAxNzAwIiwgU1RBQ185MjA1X0RFTExfTTQyKSwKIAkvKiBHYXRld2F5ICovCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MDU2MCwgIkdhdGV3YXkgVDY4MzRjIiwgU1RBQ185MjA1X0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDA1NjUsICJHYXRld2F5IFQxNjE2IiwgU1RBQ185MjA1X0VBUEQpLApAQCAtMzc3OSwxNSArMzc4MiwxNiBAQAogCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgbmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQkvKiBJRFQvU1RBQyBjb2RlY3MgaGF2ZSBsaW5lYXIgYmVlcCB0b25lIHBhcmFtZXRlciAqLwotCQljb2RlYy0+YmVlcC0+bGluZWFyX3RvbmUgPSAxOwotCQkvKiBpZiBubyBiZWVwIHN3aXRjaCBpcyBhdmFpbGFibGUsIG1ha2UgaXRzIG93biBvbmUgKi8KLQkJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOwotCQlpZiAoY29kZWMtPmJlZXAgJiYKLQkJICAgICEoKGNhcHMgJiBBQ19BTVBDQVBfTVVURSkgPj4gQUNfQU1QQ0FQX01VVEVfU0hJRlQpKSB7Ci0JCQllcnIgPSBzdGFjOTJ4eF9iZWVwX3N3aXRjaF9jdGwoY29kZWMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKKwkJaWYgKGNvZGVjLT5iZWVwKSB7CisJCQkvKiBJRFQvU1RBQyBjb2RlY3MgaGF2ZSBsaW5lYXIgYmVlcCB0b25lIHBhcmFtZXRlciAqLworCQkJY29kZWMtPmJlZXAtPmxpbmVhcl90b25lID0gMTsKKwkJCS8qIGlmIG5vIGJlZXAgc3dpdGNoIGlzIGF2YWlsYWJsZSwgbWFrZSBpdHMgb3duIG9uZSAqLworCQkJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOworCQkJaWYgKCEoY2FwcyAmIEFDX0FNUENBUF9NVVRFKSkgeworCQkJCWVyciA9IHN0YWM5Mnh4X2JlZXBfc3dpdGNoX2N0bChjb2RlYyk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTQ0NDksMTQgKzQ0NTMsNyBAQAogewogCWlmICghbmlkKQogCQlyZXR1cm4gMDsKLQkvKiBOT1RFOiB3ZSBjYW4ndCB1c2Ugc25kX2hkYV9qYWNrX2RldGVjdCgpIGhlcmUgYmVjYXVzZSBTVEFDL0lEVAotCSAqIGNvZGVjcyBiZWhhdmUgd3JvbmdseSB3aGVuIFNFVF9QSU5fU0VOU0UgaXMgdHJpZ2dlcmVkLCBhbHRob3VnaAotCSAqIHRoZSBwaW5jYXAgZ2l2ZXMgVFJJR19SRVEgYml0LgotCSAqLwotCWlmIChzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCi0JICAgIEFDX1BJTlNFTlNFX1BSRVNFTkNFKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgbmlkKTsKIH0KIAogc3RhdGljIHZvaWQgc3RhYzkyeHhfbGluZV9vdXRfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLApAQCAtNDk1OCw2ICs0OTU1LDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MjAwX3Bpbl9uaWRzKTsKIAlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MjAwX3Bpbl9uaWRzOwpAQCAtNTAyMCw2ICs1MDE4LDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MjV4X3Bpbl9uaWRzKTsKIAlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MjV4X3Bpbl9uaWRzOwpAQCAtNTEwNCw2ICs1MTAzLDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ3M3h4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDczeHhfcGluX25pZHMpOwpAQCAtNTI1MSw2ICs1MjUxLDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ4M3h4eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjE7CkBAIC01NDE0LDYgKzU0MTUsNyBAQAogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCXNwZWMtPm51bV9waW5zID0gU1RBQzkySEQ3MUJYWF9OVU1fUElOUzsKQEAgLTU2NTcsNiArNTY1OSw3IEBACiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTIyeF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTIyeF9waW5fbmlkczsKQEAgLTU3NjAsNiArNTc2Myw3IEBACiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTI3eF9waW5fbmlkcyk7CkBAIC01ODk0LDYgKzU4OTgsNyBAQAogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyMDVfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyMDVfcGluX25pZHM7CkBAIC02MDQ5LDYgKzYwNTQsNyBAQAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTg3Ml9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTg3Ml9waW5fbmlkczsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwppbmRleCBiNWNhMDJlLi5lNjZlZjJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKKysrIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogCQkJCSBycHRyLnJldHdvcmRzWzJdICE9IE0gJiYKIAkJCQkgcnB0ci5yZXR3b3Jkc1szXSAhPSBOICYmCiAJCQkJIGkrKyA8IE1BWF9XUklURV9SRVRSWSk7Ci0JCQlpZiAoaSA9PSBNQVhfV1JJVEVfUkVUUlkpIHsKKwkJCWlmIChpID4gTUFYX1dSSVRFX1JFVFJZKSB7CiAJCQkJc25kX3ByaW50ZGQoInNlbnQgc2FtcGxlcmF0ZSAlZDogJWQgZmFpbGVkXG4iLAogCQkJCQkgICAgKmludGRlYywgcmF0ZSk7CiAJCQkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCmluZGV4IGQwNTdlNjQuLjVjZmE2MDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jCkBAIC01MSw3ICs1MSw3IEBACiAJCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBlbm91Z2ggbGFyZ2UgKi8KIAkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwogCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jXzMyX3VzZXIoc2l6ZSk7CiAJaWYgKCEgcnVudGltZS0+ZG1hX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCmluZGV4IDY5YmQwYWMuLmExYmJlMTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCkBAIC0xMDIsNiArMTAyLDEyIEBACiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CiAKKwlyZXQgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjLCAmc29jX2FjOTdfb3BzLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IGZhaWxlZCB0byBpbml0IGdlbiBhYzk3IGdsdWVcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCmluZGV4IGI2OTg2MWQuLjNlZjE2YmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFrNDY0Ml9tb2Rpbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmFrNDY0Ml9pMmNfZHJpdmVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jIGIvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jCmluZGV4IGJiYzcyYzIuLjgxYjhjOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKQEAgLTE5MSw2ICsxOTEsNyBAQAogCXZyYSA9IHN0YWM5NzY2X2FjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwogCiAJdnJhIHw9IDB4MTsgLyogZW5hYmxlIHZhcmlhYmxlIHJhdGUgYXVkaW8gKi8KKwl2cmEgJj0gfjB4NDsgLyogZGlzYWJsZSBTUERJRiBvdXRwdXQgKi8KIAogCXN0YWM5NzY2X2FjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCB2cmEpOwogCkBAIC0yMjEsMjIgKzIyMiw2IEBACiAJcmV0dXJuIHN0YWM5NzY2X2FjOTdfd3JpdGUoY29kZWMsIHJlZywgcnVudGltZS0+cmF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWM5N19kaWdpdGFsX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQl1bnNpZ25lZCBzaG9ydCB2cmE7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJdnJhID0gc3RhYzk3NjZfYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JCXZyYSAmPSAhMHgwNDsKLQkJc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzdGFjOTc2Nl9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CkBAIC0zMTUsNyArMzAwLDYgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc3RhYzk3NjZfZGFpX29wc19kaWdpdGFsID0gewogCS5wcmVwYXJlID0gYWM5N19kaWdpdGFsX3ByZXBhcmUsCi0JLnRyaWdnZXIgPSBhYzk3X2RpZ2l0YWxfdHJpZ2dlciwKIH07CiAKIHN0cnVjdCBzbmRfc29jX2RhaSBzdGFjOTc2Nl9kYWlbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCmluZGV4IGViYmYxMWIuLjcxOGVmOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiAJCWlmYWNlIHw9IDB4MyA8PCA4OwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgotCQlpZmFjZSB8PSAweDMgPDwgODsJLyogbGcgbm90IHN1cmUgd2hpY2ggbW9kZSAqLworCQlpZmFjZSB8PSAweDMgPDwgOCB8IFdNODM1MF9BSUZfTFJDTEtfSU5WOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCmluZGV4IDI2NWU2OGMuLmFmOGNiNjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYwpAQCAtNDI0LDIzICs0MjQsMjMgQEAKIAogCS8qIGZpbHRlciBjb2VmZmljaWVudCAqLwogCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX1JBVEVfODAwMDoKKwljYXNlIDgwMDA6CiAJCWFkbiB8PSAweDUgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8xMTAyNToKKwljYXNlIDExMDI1OgogCQlhZG4gfD0gMHg0IDw8IDE7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMTYwMDA6CisJY2FzZSAxNjAwMDoKIAkJYWRuIHw9IDB4MyA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzIyMDUwOgorCWNhc2UgMjIwNTA6CiAJCWFkbiB8PSAweDIgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8zMjAwMDoKKwljYXNlIDMyMDAwOgogCQlhZG4gfD0gMHgxIDw8IDE7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfNDQxMDA6Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV80ODAwMDoKKwljYXNlIDQ0MTAwOgorCWNhc2UgNDgwMDA6CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKaW5kZXggM2Q4NTBiOS4uMzFlMzlmZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCkBAIC0zNzgsMjMgKzM3OCwyMyBAQAogCQlpZmFjZSB8PSAoMSA8PCA5KTsKIAogCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX1JBVEVfODAwMDoKKwljYXNlIDgwMDA6CiAJCWFkZGNudHJsIHw9ICgweDUgPDwgMSk7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMTEwMjU6CisJY2FzZSAxMTAyNToKIAkJYWRkY250cmwgfD0gKDB4NCA8PCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8xNjAwMDoKKwljYXNlIDE2MDAwOgogCQlhZGRjbnRybCB8PSAoMHgzIDw8IDEpOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzIyMDUwOgorCWNhc2UgMjIwNTA6CiAJCWFkZGNudHJsIHw9ICgweDIgPDwgMSk7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMzIwMDA6CisJY2FzZSAzMjAwMDoKIAkJYWRkY250cmwgfD0gKDB4MSA8PCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV80NDEwMDoKLQljYXNlIFNORFJWX1BDTV9SQVRFXzQ4MDAwOgorCWNhc2UgNDQxMDA6CisJY2FzZSA0ODAwMDoKIAkJYnJlYWs7CiAJfQogCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9BRERDTlRSTCwgYWRkY250cmwpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKaW5kZXggODFjNTdiNS4uODgxMjc1MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCkBAIC00Nyw3ICs0Nyw3IEBACiB9OwogCiAjZGVmaW5lIFdNODk3NF9QT1dFUjFfQklBU0VOICAweDA4Ci0jZGVmaW5lIFdNODk3NF9QT1dFUjFfQlVGSU9FTiAweDEwCisjZGVmaW5lIFdNODk3NF9QT1dFUjFfQlVGSU9FTiAweDA0CiAKIHN0cnVjdCB3bTg5NzRfcHJpdiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CkBAIC00ODIsMjMgKzQ4MiwyMyBAQAogCiAJLyogZmlsdGVyIGNvZWZmaWNpZW50ICovCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV84MDAwOgorCWNhc2UgODAwMDoKIAkJYWRuIHw9IDB4NSA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzExMDI1OgorCWNhc2UgMTEwMjU6CiAJCWFkbiB8PSAweDQgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV8xNjAwMDoKKwljYXNlIDE2MDAwOgogCQlhZG4gfD0gMHgzIDw8IDE7CiAJCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1JBVEVfMjIwNTA6CisJY2FzZSAyMjA1MDoKIAkJYWRuIHw9IDB4MiA8PCAxOwogCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9SQVRFXzMyMDAwOgorCWNhc2UgMzIwMDA6CiAJCWFkbiB8PSAweDEgPDwgMTsKIAkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fUkFURV80NDEwMDoKLQljYXNlIFNORFJWX1BDTV9SQVRFXzQ4MDAwOgorCWNhc2UgNDQxMDA6CisJY2FzZSA0ODAwMDoKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCAwYWMxMjE1Li5lMjM3YmY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTQ2Myw3ICs0NjMsOCBAQAogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCi0Jc29jX2FjOTdfb3BzLndyaXRlKGNvZGVjLT5hYzk3LCByZWcsIHZhbCk7CisJaWYgKHJlZyA8IDB4N2MpCisJCXNvY19hYzk3X29wcy53cml0ZShjb2RlYy0+YWM5NywgcmVnLCB2YWwpOwogCXJlZyA9IHJlZyA+PiAxOwogCWlmIChyZWcgPCAoQVJSQVlfU0laRSh3bTk3MTJfcmVnKSkpCiAJCWNhY2hlW3JlZ10gPSB2YWw7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMgYi9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKaW5kZXggMDI2N2QyZC4uMDdkMmEyNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCisrKyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYwpAQCAtMTgwLDcgKzE4MCw4IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCiAJLyogZGlzYWJsZSB0aGUgUExMICovCi0JcmV0dXJuIGNvZGVjX2RhaS0+b3BzLT5zZXRfcGxsKGNvZGVjX2RhaSwgSUdOT1JFRF9BUkcsIDAsIDApOworCXJldHVybiBjb2RlY19kYWktPm9wcy0+c2V0X3BsbChjb2RlY19kYWksIElHTk9SRURfQVJHLCBJR05PUkVEX0FSRywKKwkJCQkgICAgICAgMCwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMgYi9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKaW5kZXggYzA3MWY5Ni4uM2M4NWMwZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgpAQCAtMzIxLDExICszMjEsMTEgQEAKIAkqKHVuc2lnbmVkIGludCAqKXNkcDM0MzBfZGFpWzFdLmNwdV9kYWktPnByaXZhdGVfZGF0YSA9IDI7IC8qIE1jQlNQMyAqLwogCiAJLyogU2V0IFRXTDQwMzAgR1BJTzYgYXMgRVhUTVVURSBzaWduYWwgKi8KLQl0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCAmcGluX211eCwKKwl0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfSU5UQlIsICZwaW5fbXV4LAogCQkJCQkJVFdMNDAzMF9JTlRCUl9QTUJSMSk7CiAJcGluX211eCAmPSB+VFdMNDAzMF9HUElPNl9QV00wX01VVEUoMHgwMyk7CiAJcGluX211eCB8PSBUV0w0MDMwX0dQSU82X1BXTTBfTVVURSgweDAyKTsKLQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9JTlRCUiwgcGluX211eCwKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCBwaW5fbXV4LAogCQkJCQkJVFdMNDAzMF9JTlRCUl9QTUJSMSk7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNkcDM0MzBfc25kX2RldmljZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLWFrNDY0Mi5jIGIvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYwppbmRleCBjN2FmMDk3Li41MjYzYWIxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLWFrNDY0Mi5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKQEAgLTQyLDQyICs0MiwxMiBAQAogCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9hazQ2NDIsCiB9OwogCi0jZGVmaW5lIEFLNDY0Ml9CVVMgMAotI2RlZmluZSBBSzQ2NDJfQURSIDB4MTIKLXN0YXRpYyBpbnQgYWs0NjQyX2FkZF9pMmNfZGV2aWNlKHZvaWQpCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSBBSzQ2NDJfQURSOwotCXN0cmxjcHkoaW5mby50eXBlLCAiYWs0NjQyIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKEFLNDY0Ml9CVVMpOwotCWlmICghYWRhcHRlcikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FuJ3QgYWRkIGkyYyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZzaV9zbmRfZGV2aWNlOwogCiBzdGF0aWMgaW50IF9faW5pdCBmc2lfYWs0NjQyX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCWFrNDY0Ml9hZGRfaTJjX2RldmljZSgpOwotCiAJZnNpX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWZzaV9zbmRfZGV2aWNlKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCA5YzQ5YzExLi40MjgxM2I4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC04NzYsNyArODc2LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIXJlcyB8fCAhaXJxKSB7CisJaWYgKCFyZXMgfHwgKGludClpcnEgPD0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3QgZW5vdWdoIEZTSSBwbGF0Zm9ybSByZXNvdXJjZXMuXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCBiMDc0YTU5Li45ZWRlZjQ2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtNzUyLDcgKzc1Miw3IEBACiAJCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBsYXJnZSBlbm91Z2ggKi8KIAkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwogCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2Moc2l6ZSk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jX3VzZXIoc2l6ZSk7CiAJaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKQEAgLTE5MzYsNyArMTkzNiw3IEBACiAJc3RydWN0IHNuZF91c2Jfc3RyZWFtICphcyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMgPSAmYXMtPnN1YnN0cmVhbVtkaXJlY3Rpb25dOwogCi0JaWYgKHN1YnMtPmludGVyZmFjZSA+PSAwKSB7CisJaWYgKCFhcy0+Y2hpcC0+c2h1dGRvd24gJiYgc3Vicy0+aW50ZXJmYWNlID49IDApIHsKIAkJdXNiX3NldF9pbnRlcmZhY2Uoc3Vicy0+ZGV2LCBzdWJzLT5pbnRlcmZhY2UsIDApOwogCQlzdWJzLT5pbnRlcmZhY2UgPSAtMTsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCA3ODE0ZGJiLi42NTJhNDcwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTM0MywxMyArMzQzLDE4IEBACiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvdHlwZXMuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2JpdG9wcy5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2J1Zy5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL3N3YWIuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKIExJQl9IICs9IHBlcmYuaAorTElCX0ggKz0gdXRpbC9jYWNoZS5oCitMSUJfSCArPSB1dGlsL2NhbGxjaGFpbi5oCitMSUJfSCArPSB1dGlsL2RlYnVnLmgKIExJQl9IICs9IHV0aWwvZGVidWdmcy5oCiBMSUJfSCArPSB1dGlsL2V2ZW50LmgKK0xJQl9IICs9IHV0aWwvZXhlY19jbWQuaAogTElCX0ggKz0gdXRpbC90eXBlcy5oCiBMSUJfSCArPSB1dGlsL2xldmVuc2h0ZWluLmgKIExJQl9IICs9IHV0aWwvcGFyc2Utb3B0aW9ucy5oCkBAIC0zNjIsNiArMzY3LDcgQEAKIExJQl9IICs9IHV0aWwvc3RyYnVmLmgKIExJQl9IICs9IHV0aWwvc3RyaW5nLmgKIExJQl9IICs9IHV0aWwvc3RybGlzdC5oCitMSUJfSCArPSB1dGlsL3N2Z2hlbHBlci5oCiBMSUJfSCArPSB1dGlsL3J1bi1jb21tYW5kLmgKIExJQl9IICs9IHV0aWwvc2lnY2hhaW4uaAogTElCX0ggKz0gdXRpbC9zeW1ib2wuaApAQCAtMzcwLDYgKzM3Niw4IEBACiBMSUJfSCArPSB1dGlsL3NvcnQuaAogTElCX0ggKz0gdXRpbC9oaXN0LmgKIExJQl9IICs9IHV0aWwvdGhyZWFkLmgKK0xJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQuaAorTElCX0ggKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZmluZGVyLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZXZlbnQuaAogCkBAIC00ODcsMTAgKzQ5NSwxMSBAQAogCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOwogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmR3YXJmL2R3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi9saWJkd2FyZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmZfRGVidWcgZGJnOyBEd2FyZl9FcnJvciBlcnI7IER3YXJmX1JhbmdlcyAqcm5nOyBkd2FyZl9pbml0KDAsIERXX0RMQ19SRUFELCAwLCAwLCAmZGJnLCAmZXJyKTsgZHdhcmZfZ2V0X3JhbmdlcyhkYmcsIDAsICZybmcsIDAsIDAsICZlcnIpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbGR3YXJmIC1sZWxmIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQoraWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2lmbmRlZiBfTUlQU19TWkxPTkcnOyBlY2hvICdcI2RlZmluZSBfTUlQU19TWkxPTkcgMCc7IGVjaG8gJ1wjZW5kaWYnOyBlY2hvICdcI2luY2x1ZGUgPGR3YXJmLmg+JzsgZWNobyAnXCNpbmNsdWRlIDxsaWJkd2FyZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRHdhcmZfRGVidWcgZGJnOyBEd2FyZl9FcnJvciBlcnI7IER3YXJmX1JhbmdlcyAqcm5nOyBkd2FyZl9pbml0KDAsIERXX0RMQ19SRUFELCAwLCAwLCAmZGJnLCAmZXJyKTsgZHdhcmZfZ2V0X3JhbmdlcyhkYmcsIDAsICZybmcsIDAsIDAsICZlcnIpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtSS91c3IvaW5jbHVkZS9saWJkd2FyZiAtbGR3YXJmIC1sZWxmIC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQogCW1zZyA6PSAkKHdhcm5pbmcgTm8gbGliZHdhcmYuaCBmb3VuZCBvciBvbGQgbGliZHdhcmYuaCBmb3VuZCwgZGlzYWJsZXMgZHdhcmYgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgbGliZHdhcmYtZGV2L2xpYmR3YXJmLWRldmVsID49IDIwMDgxMjMxKTsKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJEV0FSRgogZWxzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9saWJkd2FyZgogCUVYVExJQlMgKz0gLWxlbGYgLWxkd2FyZgogCUxJQl9PQkpTICs9IHV0aWwvcHJvYmUtZmluZGVyLm8KIGVuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKaW5kZXggZTY5M2U2Ny4uMWU5OWFjOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwpAQCAtMTcsNyArMTcsNyBAQAogc3RhdGljIGNoYXIgY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIHN0YXRpYyBpbnQgZm9yY2U7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidWlsZGlkX2xpc3RfdXNhZ2VbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbGRpZF9saXN0X3VzYWdlW10gPSB7CiAJInBlcmYgYnVpbGRpZC1saXN0IFs8b3B0aW9ucz5dIiwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKaW5kZXggNGQzM2I1NS4uYmQ3MWI4YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCkBAIC0xODksOCArMTg5LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGlmZl91c2FnZVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkaWZmX3VzYWdlW10gPSB7CiAJInBlcmYgZGlmZiBbPG9wdGlvbnM+XSBbb2xkX2ZpbGVdIFtuZXdfZmlsZV0iLAorCU5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCBmYzIxYWQ3Li43Y2ViNzQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCWlmIChkYXRhICYmIGRhdGEtPnB0ciA9PSBwdHIpIHsKIAkJZGF0YS0+aGl0Kys7CiAJCWRhdGEtPmJ5dGVzX3JlcSArPSBieXRlc19yZXE7Ci0JCWRhdGEtPmJ5dGVzX2FsbG9jICs9IGJ5dGVzX3JlcTsKKwkJZGF0YS0+Ynl0ZXNfYWxsb2MgKz0gYnl0ZXNfYWxsb2M7CiAJfSBlbHNlIHsKIAkJZGF0YSA9IG1hbGxvYyhzaXplb2YoKmRhdGEpKTsKIAkJaWYgKCFkYXRhKQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJaWYgKGRhdGEgJiYgZGF0YS0+Y2FsbF9zaXRlID09IGNhbGxfc2l0ZSkgewogCQlkYXRhLT5oaXQrKzsKIAkJZGF0YS0+Ynl0ZXNfcmVxICs9IGJ5dGVzX3JlcTsKLQkJZGF0YS0+Ynl0ZXNfYWxsb2MgKz0gYnl0ZXNfcmVxOworCQlkYXRhLT5ieXRlc19hbGxvYyArPSBieXRlc19hbGxvYzsKIAl9IGVsc2UgewogCQlkYXRhID0gbWFsbG9jKHNpemVvZigqZGF0YSkpOwogCQlpZiAoIWRhdGEpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IDdlNzQxZjUuLmMxZTY3NzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAidXRpbC9zdHJsaXN0LmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnZnMuaCIKICNpbmNsdWRlICJ1dGlsL3N5bWJvbC5oIgogI2luY2x1ZGUgInV0aWwvdGhyZWFkLmgiCiAjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCkBAIC0yMDUsNiArMjA2LDkgQEAKIAlpZiAoKCFzZXNzaW9uLm5yX3Byb2JlICYmICFzZXNzaW9uLmRlbGxpc3QgJiYgIXNlc3Npb24ubGlzdF9ldmVudHMpKQogCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOwogCisJaWYgKGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChkZWJ1Z2ZzX3BhdGgpIDwgMCkKKwkJZGllKCJGYWlsZWQgdG8gZmluZCBkZWJ1Z2ZzIHBhdGguIik7CisKIAlpZiAoc2Vzc2lvbi5saXN0X2V2ZW50cykgewogCQlpZiAoc2Vzc2lvbi5ucl9wcm9iZSAhPSAwIHx8IHNlc3Npb24uZGVsbGlzdCkgewogCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDYzMTM2ZDAuLjI2NTQyNTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCXBlcmZfaGVhZGVyX193cml0ZSgmc2Vzc2lvbi0+aGVhZGVyLCBvdXRwdXQsIHRydWUpOwogfQogCi1zdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYyBfX3VzZWQsIGNvbnN0IGNoYXIgKiphcmd2KQorc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWludCBpLCBjb3VudGVyOwogCXN0cnVjdCBzdGF0IHN0OwpAQCAtNDExLDYgKzQxMSw3IEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIHdha2luZyA9IDA7CiAJaW50IGNoaWxkX3JlYWR5X3BpcGVbMl0sIGdvX3BpcGVbMl07CisJY29uc3QgYm9vbCBmb3JrcyA9IHRhcmdldF9waWQgPT0gLTEgJiYgYXJnYyA+IDA7CiAJY2hhciBidWY7CiAKIAlwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOwpAQCAtNDIyLDcgKzQyMyw3IEBACiAJc2lnbmFsKFNJR0NITEQsIHNpZ19oYW5kbGVyKTsKIAlzaWduYWwoU0lHSU5ULCBzaWdfaGFuZGxlcik7CiAKLQlpZiAocGlwZShjaGlsZF9yZWFkeV9waXBlKSA8IDAgfHwgcGlwZShnb19waXBlKSA8IDApIHsKKwlpZiAoZm9ya3MgJiYgKHBpcGUoY2hpbGRfcmVhZHlfcGlwZSkgPCAwIHx8IHBpcGUoZ29fcGlwZSkgPCAwKSkgewogCQlwZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgcGlwZXMiKTsKIAkJZXhpdCgtMSk7CiAJfQpAQCAtNDgzLDcgKzQ4NCw3IEBACiAKIAlhdGV4aXQoYXRleGl0X2hlYWRlcik7CiAKLQlpZiAodGFyZ2V0X3BpZCA9PSAtMSkgeworCWlmIChmb3JrcykgewogCQlwaWQgPSBmb3JrKCk7CiAJCWlmIChwaWQgPCAwKSB7CiAJCQlwZXJyb3IoImZhaWxlZCB0byBmb3JrIik7CkBAIC01NTAsNyArNTUxLDcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKCFzeXN0ZW1fd2lkZSkKKwlpZiAoIXN5c3RlbV93aWRlICYmIHByb2ZpbGVfY3B1ID09IC0xKQogCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAogCQkJCQkgc2Vzc2lvbik7CiAJZWxzZQpAQCAtNTY5LDcgKzU3MCw4IEBACiAJLyoKIAkgKiBMZXQgdGhlIGNoaWxkIHJpcAogCSAqLwotCWNsb3NlKGdvX3BpcGVbMV0pOworCWlmIChmb3JrcykKKwkJY2xvc2UoZ29fcGlwZVsxXSk7CiAKIAlmb3IgKDs7KSB7CiAJCWludCBoaXRzID0gc2FtcGxlczsKQEAgLTY2Nyw3ICs2NjksNyBAQAogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgcmVjb3JkX3VzYWdlLAogCQkJICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwotCWlmICghYXJnYyAmJiB0YXJnZXRfcGlkID09IC0xICYmICghc3lzdGVtX3dpZGUgfHwgcHJvZmlsZV9jcHUgPT0gLTEpKQorCWlmICghYXJnYyAmJiB0YXJnZXRfcGlkID09IC0xICYmICFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlY29yZF91c2FnZSwgb3B0aW9ucyk7CiAKIAlzeW1ib2xfX2luaXQoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCBlNTBhNmIxLi5kYjEwYzBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCXBlcmZfc2Vzc2lvbl9fY29sbGFwc2VfcmVzb3J0KHNlc3Npb24pOwogCXBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzZXNzaW9uLCBzZXNzaW9uLT5ldmVudHNfc3RhdHMudG90YWwpOwotCWZwcmludGYoc3Rkb3V0LCAiIyBTYW1wbGVzOiAlbGRcbiNcbiIsIHNlc3Npb24tPmV2ZW50c19zdGF0cy50b3RhbCk7CisJZnByaW50ZihzdGRvdXQsICIjIFNhbXBsZXM6ICVMZFxuI1xuIiwgc2Vzc2lvbi0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKIAlwZXJmX3Nlc3Npb25fX2ZwcmludGZfaGlzdHMoc2Vzc2lvbiwgTlVMTCwgZmFsc2UsIHN0ZG91dCk7CiAJaWYgKHNvcnRfb3JkZXIgPT0gZGVmYXVsdF9zb3J0X29yZGVyICYmCiAJICAgIHBhcmVudF9wYXR0ZXJuID09IGRlZmF1bHRfcGFyZW50X3BhdHRlcm4pCkBAIC0yOTQsOCArMjk0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLy9zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlcG9ydF91c2FnZVtdID0gewotY29uc3QgY2hhciAqIGNvbnN0IHJlcG9ydF91c2FnZVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKIAkicGVyZiByZXBvcnQgWzxvcHRpb25zPl0gPGNvbW1hbmQ+IiwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCBlMjI4NWUyLi41NzRhMjE1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJcmV0dXJuIHBhdGg7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYW5ub3RhdGVfdXNhZ2VbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHJhY2VfdXNhZ2VbXSA9IHsKIAkicGVyZiB0cmFjZSBbPG9wdGlvbnM+XSA8Y29tbWFuZD4iLAogCU5VTEwKIH07CkBAIC01ODEsNyArNTgxLDcgQEAKIAogCXNldHVwX3NjcmlwdGluZygpOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgYW5ub3RhdGVfdXNhZ2UsCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdHJhY2VfdXNhZ2UsCiAJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCiAJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dCBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAppbmRleCBmMDAwYzMwLi44ZDBkZTUxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2Rlc2lnbi50eHQKKysrIGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CkBAIC0yMSw3ICsyMSw3IEBACiBUaGUgc3BlY2lhbCBmaWxlIGRlc2NyaXB0b3IgaXMgb3BlbmVkIHZpYSB0aGUgcGVyZl9ldmVudF9vcGVuKCkKIHN5c3RlbSBjYWxsOgogCi0gICBpbnQgc3lzX3BlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9od19ldmVudCAqaHdfZXZlbnRfdXB0ciwKKyAgIGludCBzeXNfcGVyZl9ldmVudF9vcGVuKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmh3X2V2ZW50X3VwdHIsCiAJCQkgICAgIHBpZF90IHBpZCwgaW50IGNwdSwgaW50IGdyb3VwX2ZkLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIApAQCAtMzIsOSArMzIsOSBAQAogTXVsdGlwbGUgY291bnRlcnMgY2FuIGJlIGtlcHQgb3BlbiBhdCBhIHRpbWUsIGFuZCB0aGUgY291bnRlcnMKIGNhbiBiZSBwb2xsKCllZC4KIAotV2hlbiBjcmVhdGluZyBhIG5ldyBjb3VudGVyIGZkLCAncGVyZl9ldmVudF9od19ldmVudCcgaXM6CitXaGVuIGNyZWF0aW5nIGEgbmV3IGNvdW50ZXIgZmQsICdwZXJmX2V2ZW50X2F0dHInIGlzOgogCi1zdHJ1Y3QgcGVyZl9ldmVudF9od19ldmVudCB7CitzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHsKICAgICAgICAgLyoKICAgICAgICAgICogVGhlIE1TQiBvZiB0aGUgY29uZmlnIHdvcmQgc2lnbmlmaWVzIGlmIHRoZSByZXN0IGNvbnRhaW5zIGNwdQogICAgICAgICAgKiBzcGVjaWZpYyAocmF3KSBjb3VudGVyIGNvbmZpZ3VyYXRpb24gZGF0YSwgaWYgdW5zZXQsIHRoZSBuZXh0CkBAIC0zOTksNyArMzk5LDcgQEAKIGZjbnRsKCkgbWFuYWdpbmcgc2lnbmFscy4KIAogTm9ybWFsbHkgYSBub3RpZmljYXRpb24gaXMgZ2VuZXJhdGVkIGZvciBldmVyeSBwYWdlIGZpbGxlZCwgaG93ZXZlciBvbmUgY2FuCi1hZGRpdGlvbmFsbHkgc2V0IHBlcmZfZXZlbnRfaHdfZXZlbnQud2FrZXVwX2V2ZW50cyB0byBnZW5lcmF0ZSBvbmUgZXZlcnkKK2FkZGl0aW9uYWxseSBzZXQgcGVyZl9ldmVudF9hdHRyLndha2V1cF9ldmVudHMgdG8gZ2VuZXJhdGUgb25lIGV2ZXJ5CiBzbyBtYW55IGNvdW50ZXIgb3ZlcmZsb3cgZXZlbnRzLgogCiBGdXR1cmUgd29yayB3aWxsIGluY2x1ZGUgYSBzcGxpY2UoKSBpbnRlcmZhY2UgdG8gdGhlIHJpbmctYnVmZmVyLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA4MDI3MzA5Li42OTBhOTZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtOTUsOCArOTUsOCBAQAogfSBldmVudF90OwogCiBzdHJ1Y3QgZXZlbnRzX3N0YXRzIHsKLQl1bnNpZ25lZCBsb25nIHRvdGFsOwotCXVuc2lnbmVkIGxvbmcgbG9zdDsKKwl1NjQgdG90YWw7CisJdTY0IGxvc3Q7CiB9OwogCiB2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDJjYTYyMTUuLjI5NDY1ZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC02Miw2ICs2MiwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIENoZWNrIHRoZSBuYW1lIGlzIGdvb2QgZm9yIGV2ZW50L2dyb3VwICovCitzdGF0aWMgYm9vbCBjaGVja19ldmVudF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFpc2FscGhhKCpuYW1lKSAmJiAqbmFtZSAhPSAnXycpCisJCXJldHVybiBmYWxzZTsKKwl3aGlsZSAoKisrbmFtZSAhPSAnXDAnKSB7CisJCWlmICghaXNhbHBoYSgqbmFtZSkgJiYgIWlzZGlnaXQoKm5hbWUpICYmICpuYW1lICE9ICdfJykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIC8qIFBhcnNlIHByb2JlcG9pbnQgZGVmaW5pdGlvbi4gKi8KIHN0YXRpYyB2b2lkIHBhcnNlX3BlcmZfcHJvYmVfcHJvYmVwb2ludChjaGFyICphcmcsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCiB7CkBAIC04Miw2ICs5NCw5IEBACiAJCXB0ciA9IHN0cmNocihhcmcsICc6Jyk7CiAJCWlmIChwdHIpCS8qIEdyb3VwIG5hbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuICovCiAJCQlzZW1hbnRpY19lcnJvcigiR3JvdXAgbmFtZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKKwkJaWYgKCFjaGVja19ldmVudF9uYW1lKGFyZykpCisJCQlzZW1hbnRpY19lcnJvcigiJXMgaXMgYmFkIGZvciBldmVudCBuYW1lIC1pdCBtdXN0ICIKKwkJCQkgICAgICAgImZvbGxvdyBDIHN5bWJvbC1uYW1pbmcgcnVsZS4iLCBhcmcpOwogCQlwcC0+ZXZlbnQgPSBzdHJkdXAoYXJnKTsKIAkJYXJnID0gdG1wOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAppbmRleCA1ZTQwNTBjLi5hNDA4NmFhZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaApAQCAtMSw5ICsxLDkgQEAKICNpZm5kZWYgX1BST0JFX0ZJTkRFUl9ICiAjZGVmaW5lIF9QUk9CRV9GSU5ERVJfSAogCi0jZGVmaW5lIE1BWF9QQVRIX0xFTiAyNTYKLSNkZWZpbmUgTUFYX1BST0JFX0JVRkZFUiAxMDI0Ci0jZGVmaW5lIE1BWF9QUk9CRVMgMTI4CisjZGVmaW5lIE1BWF9QQVRIX0xFTgkJIDI1NgorI2RlZmluZSBNQVhfUFJPQkVfQlVGRkVSCTEwMjQKKyNkZWZpbmUgTUFYX1BST0JFUwkJIDEyOAogCiBzdGF0aWMgaW5saW5lIGludCBpc19jX3Zhcm5hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTEyLDQ4ICsxMiw1MyBAQAogfQogCiBzdHJ1Y3QgcHJvYmVfcG9pbnQgewotCWNoYXIJKmV2ZW50OwkJLyogRXZlbnQgbmFtZSAqLwotCWNoYXIJKmdyb3VwOwkJLyogRXZlbnQgZ3JvdXAgKi8KKwljaGFyCQkJKmV2ZW50OwkJCS8qIEV2ZW50IG5hbWUgKi8KKwljaGFyCQkJKmdyb3VwOwkJCS8qIEV2ZW50IGdyb3VwICovCiAKIAkvKiBJbnB1dHMgKi8KLQljaGFyCSpmaWxlOwkJLyogRmlsZSBuYW1lICovCi0JaW50CWxpbmU7CQkvKiBMaW5lIG51bWJlciAqLworCWNoYXIJCQkqZmlsZTsJCQkvKiBGaWxlIG5hbWUgKi8KKwlpbnQJCQlsaW5lOwkJCS8qIExpbmUgbnVtYmVyICovCiAKLQljaGFyCSpmdW5jdGlvbjsJLyogRnVuY3Rpb24gbmFtZSAqLwotCWludAlvZmZzZXQ7CQkvKiBPZmZzZXQgYnl0ZXMgKi8KKwljaGFyCQkJKmZ1bmN0aW9uOwkJLyogRnVuY3Rpb24gbmFtZSAqLworCWludAkJCW9mZnNldDsJCQkvKiBPZmZzZXQgYnl0ZXMgKi8KIAotCWludAlucl9hcmdzOwkvKiBOdW1iZXIgb2YgYXJndW1lbnRzICovCi0JY2hhcgkqKmFyZ3M7CQkvKiBBcmd1bWVudHMgKi8KKwlpbnQJCQlucl9hcmdzOwkJLyogTnVtYmVyIG9mIGFyZ3VtZW50cyAqLworCWNoYXIJCQkqKmFyZ3M7CQkJLyogQXJndW1lbnRzICovCiAKLQlpbnQJcmV0cHJvYmU7CS8qIFJldHVybiBwcm9iZSAqLworCWludAkJCXJldHByb2JlOwkJLyogUmV0dXJuIHByb2JlICovCiAKIAkvKiBPdXRwdXQgKi8KLQlpbnQJZm91bmQ7CQkvKiBOdW1iZXIgb2YgZm91bmQgcHJvYmUgcG9pbnRzICovCi0JY2hhcgkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KKwlpbnQJCQlmb3VuZDsJCQkvKiBOdW1iZXIgb2YgZm91bmQgcHJvYmUgcG9pbnRzICovCisJY2hhcgkJCSpwcm9iZXNbTUFYX1BST0JFU107CS8qIE91dHB1dCBidWZmZXJzICh3aWxsIGJlIGFsbG9jYXRlZCkqLwogfTsKIAogI2lmbmRlZiBOT19MSUJEV0FSRgogZXh0ZXJuIGludCBmaW5kX3Byb2JlcG9pbnQoaW50IGZkLCBzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKIAotI2luY2x1ZGUgPGxpYmR3YXJmL2R3YXJmLmg+Ci0jaW5jbHVkZSA8bGliZHdhcmYvbGliZHdhcmYuaD4KKy8qIFdvcmthcm91bmQgZm9yIHVuZGVmaW5lZCBfTUlQU19TWkxPTkcgYnVnIGluIGxpYmR3YXJmLmg6ICovCisjaWZuZGVmIF9NSVBTX1NaTE9ORworIyBkZWZpbmUgX01JUFNfU1pMT05HCQkwCisjZW5kaWYKKworI2luY2x1ZGUgPGR3YXJmLmg+CisjaW5jbHVkZSA8bGliZHdhcmYuaD4KIAogc3RydWN0IHByb2JlX2ZpbmRlciB7Ci0Jc3RydWN0IHByb2JlX3BvaW50CSpwcDsJLyogVGFyZ2V0IHByb2JlIHBvaW50ICovCisJc3RydWN0IHByb2JlX3BvaW50CSpwcDsJCQkvKiBUYXJnZXQgcHJvYmUgcG9pbnQgKi8KIAogCS8qIEZvciBmdW5jdGlvbiBzZWFyY2hpbmcgKi8KLQlEd2FyZl9BZGRyCWFkZHI7CQkvKiBBZGRyZXNzICovCi0JRHdhcmZfVW5zaWduZWQJZm5vOwkJLyogRmlsZSBudW1iZXIgKi8KLQlEd2FyZl9VbnNpZ25lZAlsbm87CQkvKiBMaW5lIG51bWJlciAqLwotCUR3YXJmX09mZglpbmxfb2ZmczsJLyogSW5saW5lIG9mZnNldCAqLwotCUR3YXJmX0RpZQljdV9kaWU7CQkvKiBDdXJyZW50IENVICovCisJRHdhcmZfQWRkcgkJYWRkcjsJCQkvKiBBZGRyZXNzICovCisJRHdhcmZfVW5zaWduZWQJCWZubzsJCQkvKiBGaWxlIG51bWJlciAqLworCUR3YXJmX1Vuc2lnbmVkCQlsbm87CQkJLyogTGluZSBudW1iZXIgKi8KKwlEd2FyZl9PZmYJCWlubF9vZmZzOwkJLyogSW5saW5lIG9mZnNldCAqLworCUR3YXJmX0RpZQkJY3VfZGllOwkJCS8qIEN1cnJlbnQgQ1UgKi8KIAogCS8qIEZvciB2YXJpYWJsZSBzZWFyY2hpbmcgKi8KLQlEd2FyZl9BZGRyCWN1X2Jhc2U7CS8qIEN1cnJlbnQgQ1UgYmFzZSBhZGRyZXNzICovCi0JRHdhcmZfTG9jZGVzYwlmYmxvYzsJCS8qIExvY2F0aW9uIG9mIEN1cnJlbnQgRnJhbWUgQmFzZSAqLwotCWNvbnN0IGNoYXIJKnZhcjsJCS8qIEN1cnJlbnQgdmFyaWFibGUgbmFtZSAqLwotCWNoYXIJCSpidWY7CQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KLQlpbnQJCWxlbjsJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCisJRHdhcmZfQWRkcgkJY3VfYmFzZTsJCS8qIEN1cnJlbnQgQ1UgYmFzZSBhZGRyZXNzICovCisJRHdhcmZfTG9jZGVzYwkJZmJsb2M7CQkJLyogTG9jYXRpb24gb2YgQ3VycmVudCBGcmFtZSBCYXNlICovCisJY29uc3QgY2hhcgkJKnZhcjsJCQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KKwljaGFyCQkJKmJ1ZjsJCQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KKwlpbnQJCQlsZW47CQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KIH07CiAjZW5kaWYgLyogTk9fTElCRFdBUkYgKi8KIApkaWZmIC0tZ2l0IGEvdXNyL0tjb25maWcgYi91c3IvS2NvbmZpZwppbmRleCAxYzMwMzlmLi5lMjcyMWY1IDEwMDY0NAotLS0gYS91c3IvS2NvbmZpZworKysgYi91c3IvS2NvbmZpZwpAQCAtNzIsNiArNzIsMTUgQEAKIAkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIExaTUEgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBSRF9MWk8KKwlib29sICJTdXBwb3J0IGluaXRpYWwgcmFtZGlza3MgY29tcHJlc3NlZCB1c2luZyBMWk8iIGlmIEVNQkVEREVECisJZGVmYXVsdCAhRU1CRURERUQKKwlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJECisJc2VsZWN0IERFQ09NUFJFU1NfTFpPCisJaGVscAorCSAgU3VwcG9ydCBsb2FkaW5nIG9mIGEgTFpPIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjaG9pY2UKIAlwcm9tcHQgIkJ1aWx0LWluIGluaXRyYW1mcyBjb21wcmVzc2lvbiBtb2RlIiBpZiBJTklUUkFNRlNfU09VUkNFIT0iIgogCWhlbHAKQEAgLTEwOCwxNiArMTE3LDE1IEBACiAJYm9vbCAiR3ppcCIKIAlkZXBlbmRzIG9uIFJEX0daSVAKIAloZWxwCi0JICBUaGUgb2xkIGFuZCB0cmllZCBnemlwIGNvbXByZXNzaW9uLiBJdHMgY29tcHJlc3Npb24gcmF0aW8gaXMKLQkgIHRoZSBwb29yZXN0IGFtb25nIHRoZSAzIGNob2ljZXM7IGhvd2V2ZXIgaXRzIHNwZWVkIChib3RoCi0JICBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbikgaXMgdGhlIGZhc3Rlc3QuCisJICBUaGUgb2xkIGFuZCB0cmllZCBnemlwIGNvbXByZXNzaW9uLiBJdCBwcm92aWRlcyBhIGdvb2QgYmFsYW5jZQorCSAgYmV0d2VlbiBjb21wcmVzc2lvbiByYXRpbyBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZC4KIAogY29uZmlnIElOSVRSQU1GU19DT01QUkVTU0lPTl9CWklQMgogCWJvb2wgIkJ6aXAyIgogCWRlcGVuZHMgb24gUkRfQlpJUDIKIAloZWxwCiAJICBJdHMgY29tcHJlc3Npb24gcmF0aW8gYW5kIHNwZWVkIGlzIGludGVybWVkaWF0ZS4KLQkgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgc2xvd2VzdCBhbW9uZyB0aGUgdGhyZWUuICBUaGUgaW5pdHJhbWZzCisJICBEZWNvbXByZXNzaW9uIHNwZWVkIGlzIHNsb3dlc3QgYW1vbmcgdGhlIGZvdXIuICBUaGUgaW5pdHJhbWZzCiAJICBzaXplIGlzIGFib3V0IDEwJSBzbWFsbGVyIHdpdGggYnppcDIsIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KIAkgIEJ6aXAyIHVzZXMgYSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5LiBGb3IgbW9kZXJuIGtlcm5lbHMgeW91CiAJICB3aWxsIG5lZWQgYXQgbGVhc3QgOE1CIFJBTSBvciBtb3JlIGZvciBib290aW5nLgpAQCAtMTI4LDcgKzEzNiwxNSBAQAogCWhlbHAKIAkgIFRoZSBtb3N0IHJlY2VudCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCiAJICBJdHMgcmF0aW8gaXMgYmVzdCwgZGVjb21wcmVzc2lvbiBzcGVlZCBpcyBiZXR3ZWVuIHRoZSBvdGhlcgotCSAgdHdvLiBDb21wcmVzc2lvbiBpcyBzbG93ZXN0LglUaGUgaW5pdHJhbWZzIHNpemUgaXMgYWJvdXQgMzMlCisJICB0aHJlZS4gQ29tcHJlc3Npb24gaXMgc2xvd2VzdC4gVGhlIGluaXRyYW1mcyBzaXplIGlzIGFib3V0IDMzJQogCSAgc21hbGxlciB3aXRoIExaTUEgaW4gY29tcGFyaXNvbiB0byBnemlwLgogCitjb25maWcgSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTworCWJvb2wgIkxaTyIKKwlkZXBlbmRzIG9uIFJEX0xaTworCWhlbHAKKwkgIEl0cyBjb21wcmVzc2lvbiByYXRpbyBpcyB0aGUgcG9vcmVzdCBhbW9uZyB0aGUgZm91ci4gVGhlIGtlcm5lbAorCSAgc2l6ZSBpcyBhYm91dCBhYm91dCAxMCUgYmlnZ2VyIHRoYW4gZ3ppcDsgaG93ZXZlciBpdHMgc3BlZWQKKwkgIChib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uKSBpcyB0aGUgZmFzdGVzdC4KKwogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9hc3NpZ25lZC1kZXYuYyBiL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jCmluZGV4IGZkOWMwOTcuLmY3M2RlNjMgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jCisrKyBiL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jCkBAIC01MDgsOCArNTA4LDggQEAKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlkb3duX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwlkb3duX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CiAKIAltYXRjaCA9IGt2bV9maW5kX2Fzc2lnbmVkX2Rldigma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkLAogCQkJCSAgICAgIGFzc2lnbmVkX2Rldi0+YXNzaWduZWRfZGV2X2lkKTsKQEAgLTU3Myw4ICs1NzMsOCBAQAogCX0KIAogb3V0OgotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlyZXR1cm4gcjsKIG91dF9saXN0X2RlbDoKIAlsaXN0X2RlbCgmbWF0Y2gtPmxpc3QpOwpAQCAtNTg1LDggKzU4NSw4IEBACiAJcGNpX2Rldl9wdXQoZGV2KTsKIG91dF9mcmVlOgogCWtmcmVlKG1hdGNoKTsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJdXBfcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGUxZjJiZjguLmE5NDRiZTMgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNjQsNyArNjQsNyBAQAogLyoKICAqIE9yZGVyaW5nIG9mIGxvY2tzOgogICoKLSAqIAkJa3ZtLT5zbG90c19sb2NrIC0tPiBrdm0tPmxvY2sgLS0+IGt2bS0+aXJxX2xvY2sKKyAqIAkJa3ZtLT5sb2NrIC0tPiBrdm0tPnNsb3RzX2xvY2sgLS0+IGt2bS0+aXJxX2xvY2sKICAqLwogCiBERUZJTkVfU1BJTkxPQ0soa3ZtX2xvY2spOwpAQCAtNDA2LDggKzQwNiwxMSBAQAogb3V0OgogCXJldHVybiBrdm07CiAKKyNpZiBkZWZpbmVkKEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVCkgfHwgXAorICAgIChkZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpICYmIGRlZmluZWQoS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIpKQogb3V0X2VycjoKIAloYXJkd2FyZV9kaXNhYmxlX2FsbCgpOworI2VuZGlmCiBvdXRfZXJyX25vZGlzYWJsZToKIAlrZnJlZShrdm0pOwogCXJldHVybiBFUlJfUFRSKHIpOwpAQCAtMTE3Nyw3ICsxMTgwLDcgQEAKICAqLwogc3RhdGljIGludCBjcmVhdGVfdmNwdV9mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGFub25faW5vZGVfZ2V0ZmQoImt2bS12Y3B1IiwgJmt2bV92Y3B1X2ZvcHMsIHZjcHUsIDApOworCXJldHVybiBhbm9uX2lub2RlX2dldGZkKCJrdm0tdmNwdSIsICZrdm1fdmNwdV9mb3BzLCB2Y3B1LCBPX1JEV1IpOwogfQogCiAvKgpAQCAtMTYzOCw3ICsxNjQxLDcgQEAKIAlrdm0gPSBrdm1fY3JlYXRlX3ZtKCk7CiAJaWYgKElTX0VSUihrdm0pKQogCQlyZXR1cm4gUFRSX0VSUihrdm0pOwotCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZtIiwgJmt2bV92bV9mb3BzLCBrdm0sIDApOworCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZtIiwgJmt2bV92bV9mb3BzLCBrdm0sIE9fUkRXUik7CiAJaWYgKGZkIDwgMCkKIAkJa3ZtX3B1dF9rdm0oa3ZtKTsKIAo=